{"thread":{"id":"4512","subject":"[PATCH] auto-detect changed prefix and/or changed build flags","startedAt":"2006-06-14T22:36:00Z","lastAt":"2006-06-14T22:36:00Z","messageCount":1,"participants":["Yakov Lerner"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"21808","messageId":"0J0V00MESG3L3J00@mxout2.netvision.net.il","threadId":"4512","inReplyTo":null,"subject":"[PATCH] auto-detect changed prefix and/or changed build flags","fromName":"Yakov Lerner","fromEmail":"iler.ml@gmail.com","sentAt":"2006-06-14T22:36:00Z","receivedAt":"2006-06-14T22:36:00Z","isPatch":true,"sender":{"key":"iler.ml@gmail.com","avatar":null},"body":"Detect changed prefix and/or changed build flags in the middle\nof the build (or between 'make' and 'make install'), and if change\nis detected, make sure all objects are compiled with same build \nflags and same prefix, thus avoiding inconsistent/broken build.\n\nSigned-off-by: Yakov Lerner <iler.ml@gmail.com>\n---\n Makefile |   36 +++++++++++++++++++++++++++---------\n 1 file changed, 27 insertions(+), 9 deletions(-)\n\n\n--- a/Makefile\n+++ b/Makefile\n@@ -464,6 +464,7 @@\n bindir_SQ = $(subst ','\\'',$(bindir))\n gitexecdir_SQ = $(subst ','\\'',$(gitexecdir))\n template_dir_SQ = $(subst ','\\'',$(template_dir))\n+prefix_SQ = $(subst ','\\'',$(prefix))\n \n SHELL_PATH_SQ = $(subst ','\\'',$(SHELL_PATH))\n PERL_PATH_SQ = $(subst ','\\'',$(PERL_PATH))\n@@ -484,7 +485,7 @@\n strip: $(PROGRAMS) git$X\n \t$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X\n \n-git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS)\n+git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS) GIT-CFLAGS\n \t$(CC) -DGIT_VERSION='\"$(GIT_VERSION)\"' \\\n \t\t$(ALL_CFLAGS) -o $@ $(filter %.c,$^) \\\n \t\t$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)\n@@ -516,7 +517,7 @@\n \tchmod +x $@+\n \tmv $@+ $@\n \n-$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py\n+$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py GIT-CFLAGS\n \trm -f $@ $@+\n \tsed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \\\n \t    -e 's|@@GIT_PYTHON_PATH@@|$(GIT_PYTHON_DIR_SQ)|g' \\\n@@ -540,19 +541,19 @@\n \t$(patsubst %.py,%,$(SCRIPT_PYTHON)) \\\n \t: GIT-VERSION-FILE\n \n-%.o: %.c\n+%.o: %.c GIT-CFLAGS\n \t$(CC) -o $*.o -c $(ALL_CFLAGS) $<\n %.o: %.S\n \t$(CC) -o $*.o -c $(ALL_CFLAGS) $<\n \n-exec_cmd.o: exec_cmd.c\n+exec_cmd.o: exec_cmd.c GIT-CFLAGS\n \t$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH=\"$(gitexecdir_SQ)\"' $<\n \n-http.o: http.c\n+http.o: http.c GIT-CFLAGS\n \t$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='\"git/$(GIT_VERSION)\"' $<\n \n ifdef NO_EXPAT\n-http-fetch.o: http-fetch.c http.h\n+http-fetch.o: http-fetch.c http.h GIT-CFLAGS\n \t$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<\n endif\n \n@@ -609,6 +610,17 @@\n \trm -f tags\n \tfind . -name '*.[hcS]' -print | xargs ctags -a\n \n+### Detect prefix changes\n+TRACK_CFLAGS = $(subst ','\\'',$(ALL_CFLAGS)):$(GIT_VERSION):\\\n+             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)\n+\n+GIT-CFLAGS: .FORCE-GIT-CFLAGS\n+\t@FLAGS='$(TRACK_CFLAGS)'; \\\n+\t    if test x\"$$FLAGS\" != x\"`cat GIT-CFLAGS 2>/dev/null`\" ; then \\\n+\t\techo 1>&2 \"    * new build flags or prefix\"; \\\n+\t\techo \"$$FLAGS\" >GIT-CFLAGS; \\\n+            fi\n+\n ### Testing rules\n \n # GNU make supports exporting all variables by \"export\" without parameters.\n@@ -632,6 +644,12 @@\n check:\n \tfor i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done\n \n+test-prefix-change:\n+\tmkdir -p \"`pwd`/tmp1\" \"`pwd`/tmp2\"\n+\t$(MAKE) clean install prefix=\"`pwd`/tmp1\"\n+\t$(MAKE) install prefix=\"`pwd`/tmp2\"\n+\t@grep -r \"`pwd`/tmp1\" \"`pwd`/tmp2\" >/dev/null; if test $$? = 0 ; then\\\n+\t    echo Error, test failed; exit 1; else echo Ok, test passed; fi\n \n \n ### Installation rules\n@@ -705,16 +723,16 @@\n \t\t$(LIB_FILE) $(XDIFF_LIB)\n \trm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X\n \trm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags\n-\trm -rf $(GIT_TARNAME) .doc-tmp-dir\n+\trm -rf $(GIT_TARNAME) .doc-tmp-dir tmp1 tmp2\n \trm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz\n \trm -f $(htmldocs).tar.gz $(manpages).tar.gz\n \t$(MAKE) -C Documentation/ clean\n \t$(MAKE) -C templates clean\n \t$(MAKE) -C t/ clean\n-\trm -f GIT-VERSION-FILE\n+\trm -f GIT-VERSION-FILE GIT-CFLAGS\n \n .PHONY: all install clean strip\n-.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags\n+.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags .FORCE-GIT-CFLAGS\n \n ### Check documentation\n #\n"}]}