From: Yakov Lerner Date: Wed, 14 Jun 2006 22:36:00 +0000 (+0300) Subject: auto-detect changed prefix and/or changed build flags X-Git-Tag: v1.4.1-rc1~24^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=ca3bcabf1187f4f09e62fdb1bc8aafa16d3ceea0;p=git.git auto-detect changed prefix and/or changed build flags Detect changed prefix and/or changed build flags in the middle of the build (or between 'make' and 'make install'), and if change is detected, make sure all objects are compiled with same build flags and same prefix, thus avoiding inconsistent/broken build. [jc: removed otherwise unnecessary Makefile target to test the change this patch introduces. ] Signed-off-by: Yakov Lerner Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index 2a1e6392d..ec91181c0 100644 --- a/Makefile +++ b/Makefile @@ -464,6 +464,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)) @@ -484,7 +485,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) @@ -516,7 +517,7 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)) : % : %.perl chmod +x $@+ mv $@+ $@ -$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py +$(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' \ @@ -540,19 +541,19 @@ 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)"' $< -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.h +http-fetch.o: http-fetch.c http.h GIT-CFLAGS $(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $< endif @@ -609,6 +610,17 @@ tags: rm -f tags find . -name '*.[hcS]' -print | xargs ctags -a +### Detect prefix changes +TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):$(GIT_VERSION):\ + $(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. @@ -711,10 +723,10 @@ clean: $(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 #