X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=Makefile;h=ccb896e812f1f7958e94006323a98cc98a572110;hb=8cf828b43c3c1ee6d85622d155a1b0639842f66a;hp=984d167def635bf30802e2db04043d7a160903c8;hpb=36d277c72d90d32f99616072b64a2652248f5264;p=git.git diff --git a/Makefile b/Makefile index 984d167d..ccb896e8 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +# The default target of this Makefile is... +all: + # Define MOZILLA_SHA1 environment variable when running make to make use of # a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast # on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default @@ -16,8 +19,18 @@ # Define NO_EXPAT if you do not have expat installed. git-http-push is # not built, and you cannot push using http:// and https:// transports. # +# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent. +# +# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks +# d_type in struct dirent (latest Cygwin -- will be fixed soonish). +# # Define NO_STRCASESTR if you don't have strcasestr. # +# Define NO_SETENV if you don't have setenv in the C library. +# +# Define USE_SYMLINK_HEAD if you want .git/HEAD to be a symbolic link. +# Don't enable it on Windows. +# # Define PPC_SHA1 environment variable when running make to make use of # a bundled SHA1 routine optimized for PowerPC. # @@ -37,6 +50,11 @@ # # Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). # +# Define NO_SOCKADDR_STORAGE if your platform does not have struct +# sockaddr_storage. +# +# Define NO_ICONV if your libc does not properly support iconv. +# # Define COLLISION_CHECK below if you believe that SHA1's # 1461501637330902918203684832716283019655932542976 hashes do not give you # sufficient guarantee that no collisions between objects will ever happen. @@ -50,7 +68,9 @@ # Define USE_STDEV below if you want git to care about the underlying device # change being considered an inode change from the update-cache perspective. -GIT_VERSION = 0.99.9.GIT +GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE + @$(SHELL_PATH) ./GIT-VERSION-GEN +-include GIT-VERSION-FILE # CFLAGS and LDFLAGS are for the users to override from the command line. @@ -58,9 +78,11 @@ CFLAGS = -g -O2 -Wall LDFLAGS = ALL_CFLAGS = $(CFLAGS) ALL_LDFLAGS = $(LDFLAGS) +STRIP ?= strip prefix = $(HOME) bindir = $(prefix)/bin +gitexecdir = $(prefix)/bin template_dir = $(prefix)/share/git-core/templates/ GIT_PYTHON_DIR = $(prefix)/share/git-core/python # DESTDIR= @@ -84,10 +106,10 @@ SCRIPT_SH = \ git-cherry.sh git-clone.sh git-commit.sh \ git-count-objects.sh git-diff.sh git-fetch.sh \ git-format-patch.sh git-log.sh git-ls-remote.sh \ - git-merge-one-file.sh git-octopus.sh git-parse-remote.sh \ + git-merge-one-file.sh git-parse-remote.sh \ git-prune.sh git-pull.sh git-push.sh git-rebase.sh \ git-repack.sh git-request-pull.sh git-reset.sh \ - git-resolve.sh git-revert.sh git-sh-setup.sh git-status.sh \ + git-resolve.sh git-revert.sh git-sh-setup.sh \ git-tag.sh git-verify-tag.sh git-whatchanged.sh \ git-applymbox.sh git-applypatch.sh git-am.sh \ git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \ @@ -96,7 +118,7 @@ SCRIPT_SH = \ SCRIPT_PERL = \ git-archimport.perl git-cvsimport.perl git-relink.perl \ - git-shortlog.perl git-fmt-merge-msg.perl \ + git-shortlog.perl git-fmt-merge-msg.perl git-rerere.perl \ git-svnimport.perl git-mv.perl git-cvsexportcommit.perl SCRIPT_PYTHON = \ @@ -105,14 +127,14 @@ SCRIPT_PYTHON = \ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ $(patsubst %.perl,%,$(SCRIPT_PERL)) \ $(patsubst %.py,%,$(SCRIPT_PYTHON)) \ - gitk git-cherry-pick + git-cherry-pick git-show git-status # The ones that do not have to link with lcrypto nor lz. SIMPLE_PROGRAMS = \ git-get-tar-commit-id$X git-mailinfo$X git-mailsplit$X \ git-stripspace$X git-daemon$X -# ... and all the rest +# ... and all the rest that could be moved out of bindir to gitexecdir PROGRAMS = \ git-apply$X git-cat-file$X \ git-checkout-index$X git-clone-pack$X git-commit-tree$X \ @@ -130,16 +152,15 @@ PROGRAMS = \ git-unpack-objects$X git-update-index$X git-update-server-info$X \ git-upload-pack$X git-verify-pack$X git-write-tree$X \ git-update-ref$X git-symbolic-ref$X git-check-ref-format$X \ - git-name-rev$X git-pack-redundant$X git-repo-config$X git-var$X + git-name-rev$X git-pack-redundant$X git-repo-config$X git-var$X \ + git-describe$X git-merge-tree$X -# what 'all' will build and 'install' will install. -ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS) git$X +# what 'all' will build and 'install' will install, in gitexecdir +ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS) # Backward compatibility -- to be removed after 1.0 PROGRAMS += git-ssh-pull$X git-ssh-push$X -GIT_LIST_TWEAK = - # Set paths to tools early so that they can be used for version tests. ifndef SHELL_PATH SHELL_PATH = /bin/sh @@ -154,38 +175,25 @@ endif PYMODULES = \ gitMergeCommon.py -ifdef WITH_OWN_SUBPROCESS_PY - PYMODULES += compat/subprocess.py -else - ifneq ($(shell $(PYTHON_PATH) -c 'import subprocess;print"OK"' 2>/dev/null),OK) - PYMODULES += compat/subprocess.py - endif -endif - -ifdef WITH_SEND_EMAIL - SCRIPT_PERL += git-send-email.perl -else - GIT_LIST_TWEAK += -e '/^send-email$$/d' -endif - LIB_FILE=libgit.a LIB_H = \ blob.h cache.h commit.h count-delta.h csum-file.h delta.h \ diff.h epoch.h object.h pack.h pkt-line.h quote.h refs.h \ - run-command.h strbuf.h tag.h tree.h + run-command.h strbuf.h tag.h tree.h git-compat-util.h DIFF_OBJS = \ diff.o diffcore-break.o diffcore-order.o diffcore-pathspec.o \ - diffcore-pickaxe.o diffcore-rename.o tree-diff.o + diffcore-pickaxe.o diffcore-rename.o tree-diff.o combine-diff.o LIB_OBJS = \ blob.o commit.o connect.o count-delta.o csum-file.o \ - date.o diff-delta.o entry.o ident.o index.o \ + date.o diff-delta.o entry.o exec_cmd.o ident.o index.o \ object.o pack-check.o patch-delta.o path.o pkt-line.o \ quote.o read-cache.o refs.o run-command.o \ server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \ tag.o tree.o usage.o config.o environment.o ctype.o copy.o \ + fetch-clone.o \ $(DIFF_OBJS) LIBS = $(LIB_FILE) @@ -207,6 +215,7 @@ shellquote = '$(call shq,$(1))' uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not') uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') +uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') ifeq ($(uname_S),Darwin) NEEDS_SSL_WITH_CRYPTO = YesPlease @@ -224,11 +233,17 @@ ifeq ($(uname_S),SunOS) NEEDS_LIBICONV = YesPlease SHELL_PATH = /bin/bash NO_STRCASESTR = YesPlease + ifeq ($(uname_R),5.8) + NO_UNSETENV = YesPlease + NO_SETENV = YesPlease + endif INSTALL = ginstall TAR = gtar ALL_CFLAGS += -D__EXTENSIONS__ endif ifeq ($(uname_O),Cygwin) + NO_D_TYPE_IN_DIRENT = YesPlease + NO_D_INO_IN_DIRENT = YesPlease NO_STRCASESTR = YesPlease NEEDS_LIBICONV = YesPlease # There are conflicting reports about this. @@ -237,7 +252,11 @@ ifeq ($(uname_O),Cygwin) # NO_MMAP = YesPlease NO_IPV6 = YesPlease X = .exe - ALL_CFLAGS += -DUSE_SYMLINK_HEAD=0 +endif +ifeq ($(uname_S),FreeBSD) + NEEDS_LIBICONV = YesPlease + ALL_CFLAGS += -I/usr/local/include + ALL_LDFLAGS += -L/usr/local/lib endif ifeq ($(uname_S),OpenBSD) NO_STRCASESTR = YesPlease @@ -250,12 +269,28 @@ ifeq ($(uname_S),NetBSD) ALL_CFLAGS += -I/usr/pkg/include ALL_LDFLAGS += -L/usr/pkg/lib -Wl,-rpath,/usr/pkg/lib endif +ifeq ($(uname_S),AIX) + NO_STRCASESTR=YesPlease + NEEDS_LIBICONV=YesPlease +endif ifneq (,$(findstring arm,$(uname_M))) ARM_SHA1 = YesPlease endif -include config.mak +ifdef WITH_OWN_SUBPROCESS_PY + PYMODULES += compat/subprocess.py +else + ifneq ($(shell $(PYTHON_PATH) -c 'import subprocess;print"OK"' 2>/dev/null),OK) + PYMODULES += compat/subprocess.py + endif +endif + +ifdef WITH_SEND_EMAIL + SCRIPT_PERL += git-send-email.perl +endif + ifndef NO_CURL ifdef CURLDIR # This is still problematic -- gcc does not always want -R. @@ -314,16 +349,41 @@ ifdef NEEDS_NSL LIBS += -lnsl SIMPLE_LIB += -lnsl endif +ifdef NO_D_TYPE_IN_DIRENT + ALL_CFLAGS += -DNO_D_TYPE_IN_DIRENT +endif +ifdef NO_D_INO_IN_DIRENT + ALL_CFLAGS += -DNO_D_INO_IN_DIRENT +endif ifdef NO_STRCASESTR - ALL_CFLAGS += -Dstrcasestr=gitstrcasestr -DNO_STRCASESTR=1 - LIB_OBJS += compat/strcasestr.o + COMPAT_CFLAGS += -DNO_STRCASESTR + COMPAT_OBJS += compat/strcasestr.o +endif +ifdef NO_SETENV + COMPAT_CFLAGS += -DNO_SETENV + COMPAT_OBJS += compat/setenv.o +endif +ifdef NO_SETENV + COMPAT_CFLAGS += -DNO_UNSETENV + COMPAT_OBJS += compat/unsetenv.o endif ifdef NO_MMAP - ALL_CFLAGS += -Dmmap=gitfakemmap -Dmunmap=gitfakemunmap -DNO_MMAP - LIB_OBJS += compat/mmap.o + COMPAT_CFLAGS += -DNO_MMAP + COMPAT_OBJS += compat/mmap.o +endif +ifdef NO_IPV6 + ALL_CFLAGS += -DNO_IPV6 endif +ifdef NO_SOCKADDR_STORAGE ifdef NO_IPV6 - ALL_CFLAGS += -DNO_IPV6 -Dsockaddr_storage=sockaddr_in + ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in +else + ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in6 +endif +endif + +ifdef NO_ICONV + ALL_CFLAGS += -DNO_ICONV endif ifdef PPC_SHA1 @@ -344,25 +404,28 @@ endif endif endif -ALL_CFLAGS += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER)) - +ALL_CFLAGS += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER)) $(COMPAT_CFLAGS) +LIB_OBJS += $(COMPAT_OBJS) export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir ### Build rules -all: $(ALL_PROGRAMS) +all: $(ALL_PROGRAMS) git$X gitk all: $(MAKE) -C templates -# Only use $(CFLAGS). We don't need anything else. -git$(X): git.c Makefile - $(CC) -DGIT_EXEC_PATH='"$(bindir)"' -DGIT_VERSION='"$(GIT_VERSION)"' \ - $(CFLAGS) $< -o $@ +strip: $(PROGRAMS) git$X + $(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X + +git$X: git.c $(LIB_FILE) + $(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \ + $(CFLAGS) $(COMPAT_CFLAGS) -o $@ $(filter %.c,$^) $(LIB_FILE) $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh rm -f $@ sed -e '1s|#!.*/sh|#!$(call shq,$(SHELL_PATH))|' \ -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \ + -e 's/@@NO_CURL@@/$(NO_CURL)/g' \ $@.sh >$@ chmod +x $@ @@ -384,11 +447,26 @@ $(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py git-cherry-pick: git-revert cp $< $@ +git-show: git-whatchanged + cp $< $@ + +git-status: git-commit + cp $< $@ + +# These can record GIT_VERSION +git$X git.spec \ + $(patsubst %.sh,%,$(SCRIPT_SH)) \ + $(patsubst %.perl,%,$(SCRIPT_PERL)) \ + $(patsubst %.py,%,$(SCRIPT_PYTHON)) \ + : GIT-VERSION-FILE + %.o: %.c $(CC) -o $*.o -c $(ALL_CFLAGS) $< %.o: %.S $(CC) -o $*.o -c $(ALL_CFLAGS) $< +exec_cmd.o: ALL_CFLAGS += -DGIT_EXEC_PATH=\"$(gitexecdir)\" + git-%$X: %.o $(LIB_FILE) $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) @@ -437,7 +515,7 @@ test-delta$X: test-delta.c diff-delta.o patch-delta.o $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $^ check: - for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i; done + for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done @@ -445,7 +523,9 @@ check: install: all $(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(bindir)) - $(INSTALL) $(ALL_PROGRAMS) $(call shellquote,$(DESTDIR)$(bindir)) + $(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(gitexecdir)) + $(INSTALL) $(ALL_PROGRAMS) $(call shellquote,$(DESTDIR)$(gitexecdir)) + $(INSTALL) git$X gitk $(call shellquote,$(DESTDIR)$(bindir)) $(MAKE) -C templates install $(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR)) $(INSTALL) $(PYMODULES) $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR)) @@ -458,7 +538,7 @@ install-doc: ### Maintainer's dist rules -git.spec: git.spec.in Makefile +git.spec: git.spec.in sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@ GIT_TARNAME=git-$(GIT_VERSION) @@ -466,30 +546,28 @@ dist: git.spec git-tar-tree ./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar @mkdir -p $(GIT_TARNAME) @cp git.spec $(GIT_TARNAME) - $(TAR) rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git.spec + @echo $(GIT_VERSION) > $(GIT_TARNAME)/version + $(TAR) rf $(GIT_TARNAME).tar \ + $(GIT_TARNAME)/git.spec $(GIT_TARNAME)/version @rm -rf $(GIT_TARNAME) gzip -f -9 $(GIT_TARNAME).tar rpm: dist $(RPMBUILD) -ta $(GIT_TARNAME).tar.gz -deb: dist - rm -rf $(GIT_TARNAME) - $(TAR) zxf $(GIT_TARNAME).tar.gz - dpkg-source -b $(GIT_TARNAME) - cd $(GIT_TARNAME) && fakeroot debian/rules binary - ### Cleaning rules clean: rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o $(LIB_FILE) - rm -f $(PROGRAMS) $(SIMPLE_PROGRAMS) git$X - rm -f $(filter-out gitk,$(SCRIPTS)) - rm -f *.spec *.pyc *.pyo + rm -f $(ALL_PROGRAMS) git$X + rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo rm -rf $(GIT_TARNAME) rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz - rm -f git-core_$(GIT_VERSION)-*.dsc - rm -f git-*_$(GIT_VERSION)-*.deb $(MAKE) -C Documentation/ clean $(MAKE) -C templates clean $(MAKE) -C t/ clean + rm -f GIT-VERSION-FILE + +.PHONY: all install clean strip +.PHONY: .FORCE-GIT-VERSION-FILE +