Makefile: split prefix flags from GIT-CFLAGS

Most of the build targets do not care about the setting of $prefix (or its derivative variables), but will be rebuilt if the prefix changes. For most setups this doesn't matter (they set prefix once and never change it), but for a setup which puts each branch or version in its own prefix, this unnecessarily causes a full rebuild whenever the branc is changed. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jun 20, 2012 at 14:31 UTC be1dbd0a933749526eb763fd00cd00c0bdf7c7a6
2 files changed +23 -8
.gitignore
+1
@@ -2,6 +2,7 @@
2 /GIT-CFLAGS
3 /GIT-LDFLAGS
4 /GIT-GUI-VARS
5 +/GIT-PREFIX
6 /GIT-USER-AGENT
7 /GIT-VERSION-FILE
8 /bin-wrappers/
Makefile
+22 -8
@@ -1973,6 +1973,7 @@ shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
1973 strip: $(PROGRAMS) git$X
1974 $(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X
1975
1976 +git.sp git.s git.o: GIT-PREFIX
1977 git.sp git.s git.o: EXTRA_CPPFLAGS = \
1978 '-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1979 '-DGIT_MAN_PATH="$(mandir_SQ)"' \
@@ -1984,7 +1985,7 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
1985
1986 help.sp help.s help.o: common-cmds.h
1987
1987 -builtin/help.sp builtin/help.s builtin/help.o: common-cmds.h
1988 +builtin/help.sp builtin/help.s builtin/help.o: common-cmds.h GIT-PREFIX
1989 builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1990 '-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1991 '-DGIT_MAN_PATH="$(mandir_SQ)"' \
@@ -2031,7 +2032,7 @@ $(SCRIPT_LIB) : % : %.sh
2032 ifndef NO_PERL
2033 $(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak
2034
2034 -perl/perl.mak: GIT-CFLAGS perl/Makefile perl/Makefile.PL
2035 +perl/perl.mak: GIT-CFLAGS GIT-PREFIX perl/Makefile perl/Makefile.PL
2036 $(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' $(@F)
2037
2038 $(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
@@ -2075,7 +2076,7 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : unimplemented.sh
2076 endif # NO_PERL
2077
2078 ifndef NO_PYTHON
2078 -$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS
2079 +$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS GIT-PREFIX
2080 $(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
2081 $(QUIET_GEN)$(RM) $@ $@+ && \
2082 INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
@@ -2235,20 +2236,25 @@ else
2236 $(OBJECTS): $(LIB_H)
2237 endif
2238
2239 +exec_cmd.sp exec_cmd.s exec_cmd.o: GIT-PREFIX
2240 exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
2241 '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
2242 '-DBINDIR="$(bindir_relative_SQ)"' \
2243 '-DPREFIX="$(prefix_SQ)"'
2244
2245 +builtin/init-db.sp builtin/init-db.s builtin/init-db.o: GIT-PREFIX
2246 builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
2247 -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
2248
2249 +config.sp config.s config.o: GIT-PREFIX
2250 config.sp config.s config.o: EXTRA_CPPFLAGS = \
2251 -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
2252
2253 +attr.sp attr.s attr.o: GIT-PREFIX
2254 attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
2255 -DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
2256
2257 +gettext.sp gettext.s gettext.o: GIT-PREFIX
2258 gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
2259 -DGIT_LOCALE_PATH='"$(localedir_SQ)"'
2260
@@ -2372,14 +2378,22 @@ cscope:
2378 $(FIND_SOURCE_FILES) | xargs cscope -b
2379
2380 ### Detect prefix changes
2375 -TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
2376 - $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
2377 - $(localedir_SQ):$(USE_GETTEXT_SCHEME)
2381 +TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
2382 + $(localedir_SQ)
2383 +
2384 +GIT-PREFIX: FORCE
2385 + @FLAGS='$(TRACK_PREFIX)'; \
2386 + if test x"$$FLAGS" != x"`cat GIT-PREFIX 2>/dev/null`" ; then \
2387 + echo 1>&2 " * new prefix flags"; \
2388 + echo "$$FLAGS" >GIT-PREFIX; \
2389 + fi
2390 +
2391 +TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):$(USE_GETTEXT_SCHEME)
2392
2393 GIT-CFLAGS: FORCE
2394 @FLAGS='$(TRACK_CFLAGS)'; \
2395 if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
2382 - echo 1>&2 " * new build flags or prefix"; \
2396 + echo 1>&2 " * new build flags"; \
2397 echo "$$FLAGS" >GIT-CFLAGS; \
2398 fi
2399
@@ -2715,7 +2729,7 @@ ifndef NO_TCLTK
2729 $(MAKE) -C git-gui clean
2730 endif
2731 $(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2718 - $(RM) GIT-USER-AGENT
2732 + $(RM) GIT-USER-AGENT GIT-PREFIX
2733
2734 .PHONY: all install profile-clean clean strip
2735 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell