git-commit: allow -e option anywhere on command line
[gitweb.git] / Makefile
index 5f8ea1817931eb522a5627d923473fac27c42260..a5b67849b3375127cb7bfd1ec68719c747338d89 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -144,35 +144,33 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
 
 # The ones that do not have to link with lcrypto, lz nor xdiff.
 SIMPLE_PROGRAMS = \
-       git-get-tar-commit-id$X git-mailsplit$X \
-       git-stripspace$X git-daemon$X
+       git-daemon$X
 
 # ... and all the rest that could be moved out of bindir to gitexecdir
 PROGRAMS = \
-       git-checkout-index$X git-clone-pack$X \
+       git-checkout-index$X \
        git-convert-objects$X git-fetch-pack$X git-fsck-objects$X \
        git-hash-object$X git-index-pack$X git-local-fetch$X \
-       git-mailinfo$X git-merge-base$X \
+       git-merge-base$X \
        git-merge-index$X git-mktag$X git-mktree$X git-pack-objects$X git-patch-id$X \
-       git-peek-remote$X git-prune-packed$X \
-       git-receive-pack$X git-rev-parse$X \
+       git-peek-remote$X git-prune-packed$X git-receive-pack$X \
        git-send-pack$X git-shell$X \
        git-show-index$X git-ssh-fetch$X \
        git-ssh-upload$X git-unpack-file$X \
-       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-unpack-objects$X git-update-server-info$X \
+       git-upload-pack$X git-verify-pack$X \
+       git-symbolic-ref$X \
        git-name-rev$X git-pack-redundant$X git-repo-config$X git-var$X \
        git-describe$X git-merge-tree$X git-blame$X git-imap-send$X
 
-BUILT_INS = git-log$X git-whatchanged$X git-show$X \
-       git-count-objects$X git-diff$X git-push$X \
-       git-grep$X git-add$X git-rm$X git-rev-list$X \
-       git-check-ref-format$X \
+BUILT_INS = git-log$X git-whatchanged$X git-show$X git-update-ref$X \
+       git-count-objects$X git-diff$X git-push$X git-mailsplit$X \
+       git-grep$X git-add$X git-rm$X git-rev-list$X git-stripspace$X \
+       git-check-ref-format$X git-rev-parse$X git-mailinfo$X \
        git-init-db$X git-tar-tree$X git-upload-tar$X git-format-patch$X \
-       git-ls-files$X git-ls-tree$X \
-       git-read-tree$X git-commit-tree$X \
-       git-apply$X git-show-branch$X git-diff-files$X \
+       git-ls-files$X git-ls-tree$X git-get-tar-commit-id$X \
+       git-read-tree$X git-commit-tree$X git-write-tree$X \
+       git-apply$X git-show-branch$X git-diff-files$X git-update-index$X \
        git-diff-index$X git-diff-stages$X git-diff-tree$X git-cat-file$X
 
 # what 'all' will build and 'install' will install, in gitexecdir
@@ -211,24 +209,25 @@ DIFF_OBJS = \
 
 LIB_OBJS = \
        blob.o commit.o connect.o csum-file.o cache-tree.o base85.o \
-       date.o diff-delta.o entry.o exec_cmd.o ident.o index.o \
+       date.o diff-delta.o entry.o exec_cmd.o ident.o lockfile.o \
        object.o pack-check.o patch-delta.o path.o pkt-line.o \
-       quote.o read-cache.o refs.o run-command.o dir.o \
+       quote.o read-cache.o refs.o run-command.o dir.o object-refs.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 revision.o pager.o tree-walk.o xdiff-interface.o \
-       $(DIFF_OBJS)
+       alloc.o $(DIFF_OBJS)
 
 BUILTIN_OBJS = \
        builtin-log.o builtin-help.o builtin-count.o builtin-diff.o builtin-push.o \
        builtin-grep.o builtin-add.o builtin-rev-list.o builtin-check-ref-format.o \
-       builtin-rm.o builtin-init-db.o \
-       builtin-tar-tree.o builtin-upload-tar.o \
-       builtin-ls-files.o builtin-ls-tree.o \
-       builtin-read-tree.o builtin-commit-tree.o \
+       builtin-rm.o builtin-init-db.o builtin-rev-parse.o \
+       builtin-tar-tree.o builtin-upload-tar.o builtin-update-index.o \
+       builtin-ls-files.o builtin-ls-tree.o builtin-write-tree.o \
+       builtin-read-tree.o builtin-commit-tree.o builtin-mailinfo.o \
        builtin-apply.o builtin-show-branch.o builtin-diff-files.o \
        builtin-diff-index.o builtin-diff-stages.o builtin-diff-tree.o \
-       builtin-cat-file.o
+       builtin-cat-file.o builtin-mailsplit.o builtin-stripspace.o \
+       builtin-update-ref.o
 
 GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
 LIBS = $(GITLIBS) -lz
@@ -381,9 +380,7 @@ ifdef NEEDS_LIBICONV
        else
                ICONV_LINK =
        endif
-       LIB_4_ICONV = $(ICONV_LINK) -liconv
-else
-       LIB_4_ICONV =
+       LIBS += $(ICONV_LINK) -liconv
 endif
 ifdef NEEDS_SOCKET
        LIBS += -lsocket
@@ -465,6 +462,7 @@ DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 bindir_SQ = $(subst ','\'',$(bindir))
 gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
 template_dir_SQ = $(subst ','\'',$(template_dir))
+prefix_SQ = $(subst ','\'',$(prefix))
 
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
 PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
@@ -472,7 +470,6 @@ PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
 GIT_PYTHON_DIR_SQ = $(subst ','\'',$(GIT_PYTHON_DIR))
 
 ALL_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
-ALL_CFLAGS += -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
 LIB_OBJS += $(COMPAT_OBJS)
 export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
 ### Build rules
@@ -485,7 +482,7 @@ all:
 strip: $(PROGRAMS) git$X
        $(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X
 
-git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS)
+git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS) GIT-CFLAGS
        $(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
                $(ALL_CFLAGS) -o $@ $(filter %.c,$^) \
                $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
@@ -496,37 +493,43 @@ $(BUILT_INS): git$X
        rm -f $@ && ln git$X $@
 
 common-cmds.h: Documentation/git-*.txt
-       ./generate-cmdlist.sh > $@
+       ./generate-cmdlist.sh > $@+
+       mv $@+ $@
 
 $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
-       rm -f $@
+       rm -f $@ $@+
        sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
            -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
            -e 's/@@NO_PYTHON@@/$(NO_PYTHON)/g' \
-           $@.sh >$@
-       chmod +x $@
+           $@.sh >$@+
+       chmod +x $@+
+       mv $@+ $@
 
 $(patsubst %.perl,%,$(SCRIPT_PERL)) : % : %.perl
-       rm -f $@
+       rm -f $@ $@+
        sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
-           $@.perl >$@
-       chmod +x $@
+           $@.perl >$@+
+       chmod +x $@+
+       mv $@+ $@
 
-$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py
-       rm -f $@
+$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py GIT-CFLAGS
+       rm -f $@ $@+
        sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
            -e 's|@@GIT_PYTHON_PATH@@|$(GIT_PYTHON_DIR_SQ)|g' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
-           $@.py >$@
-       chmod +x $@
+           $@.py >$@+
+       chmod +x $@+
+       mv $@+ $@
 
 git-cherry-pick: git-revert
-       cp $< $@
+       cp $< $@+
+       mv $@+ $@
 
 git-status: git-commit
-       cp $< $@
+       cp $< $@+
+       mv $@+ $@
 
 # These can record GIT_VERSION
 git$X git.spec \
@@ -535,19 +538,21 @@ git$X git.spec \
        $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
        : GIT-VERSION-FILE
 
-%.o: %.c
+%.o: %.c GIT-CFLAGS
        $(CC) -o $*.o -c $(ALL_CFLAGS) $<
 %.o: %.S
        $(CC) -o $*.o -c $(ALL_CFLAGS) $<
 
-exec_cmd.o: exec_cmd.c
+exec_cmd.o: exec_cmd.c GIT-CFLAGS
        $(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $<
+builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
+       $(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
 
-http.o: http.c
+http.o: http.c GIT-CFLAGS
        $(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
 
 ifdef NO_EXPAT
-http-fetch.o: http-fetch.c
+http-fetch.o: http-fetch.c http.h GIT-CFLAGS
        $(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
 endif
 
@@ -559,10 +564,6 @@ $(SIMPLE_PROGRAMS) : git-%$X : %.o
        $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
                $(LIB_FILE) $(SIMPLE_LIB)
 
-git-mailinfo$X: mailinfo.o $(LIB_FILE)
-       $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
-               $(LIB_FILE) $(SIMPLE_LIB) $(LIB_4_ICONV)
-
 git-local-fetch$X: fetch.o
 git-ssh-fetch$X: rsh.o fetch.o
 git-ssh-upload$X: rsh.o
@@ -571,6 +572,7 @@ git-ssh-push$X: rsh.o
 
 git-imap-send$X: imap-send.o $(LIB_FILE)
 
+http.o http-fetch.o http-push.o: http.h
 git-http-fetch$X: fetch.o http.o http-fetch.o $(LIB_FILE)
        $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
                $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
@@ -603,6 +605,17 @@ tags:
        rm -f tags
        find . -name '*.[hcS]' -print | xargs ctags -a
 
+### Detect prefix changes
+TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):$(GIT_PYTHON_DIR_SQ):\
+             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
+
+GIT-CFLAGS: .FORCE-GIT-CFLAGS
+       @FLAGS='$(TRACK_CFLAGS)'; \
+           if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
+               echo 1>&2 "    * new build flags or prefix"; \
+               echo "$$FLAGS" >GIT-CFLAGS; \
+            fi
+
 ### Testing rules
 
 # GNU make supports exporting all variables by "export" without parameters.
@@ -656,11 +669,12 @@ install-doc:
 ### Maintainer's dist rules
 
 git.spec: git.spec.in
-       sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@
+       sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
+       mv $@+ $@
 
 GIT_TARNAME=git-$(GIT_VERSION)
 dist: git.spec git-tar-tree
-       ./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar
+       ./git-tar-tree HEAD^{tree} $(GIT_TARNAME) > $(GIT_TARNAME).tar
        @mkdir -p $(GIT_TARNAME)
        @cp git.spec $(GIT_TARNAME)
        @echo $(GIT_VERSION) > $(GIT_TARNAME)/version
@@ -683,7 +697,7 @@ dist-doc:
        :
        rm -fr .doc-tmp-dir
        mkdir .doc-tmp-dir .doc-tmp-dir/man1 .doc-tmp-dir/man7
-       $(MAKE) -C Documentation DESTDIR=. \
+       $(MAKE) -C Documentation DESTDIR=./ \
                man1=../.doc-tmp-dir/man1 \
                man7=../.doc-tmp-dir/man7 \
                install
@@ -700,14 +714,14 @@ clean:
        rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags
        rm -rf $(GIT_TARNAME) .doc-tmp-dir
        rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
-       rm -f $(htmldocs).tar $(manpages).tar
+       rm -f $(htmldocs).tar.gz $(manpages).tar.gz
        $(MAKE) -C Documentation/ clean
        $(MAKE) -C templates clean
        $(MAKE) -C t/ clean
-       rm -f GIT-VERSION-FILE
+       rm -f GIT-VERSION-FILE GIT-CFLAGS
 
 .PHONY: all install clean strip
-.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags
+.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags .FORCE-GIT-CFLAGS
 
 ### Check documentation
 #
@@ -727,4 +741,3 @@ check-docs::
                *) echo "no link: $$v";; \
                esac ; \
        done | sort
-