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