Thread: Something fishy about the current Makefiles
Whilst fooling around with GIN, I have repeatedly observed that doing "make" in src/backend/access/gin, followed by "make install-bin" in src/backend, fails to rebuild the postgres executable --- it just installs the existing one. A second execution of "make install-bin" does notice that postgres is out of date and rebuilds it. This procedure for rebuilding after changing one or two .c files has always worked for me before. I can't avoid the suspicion that the recent changes to make things more parallel-friendly broke something. regards, tom lane
On Thu, Jan 6, 2011 at 11:57 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Whilst fooling around with GIN, I have repeatedly observed that doing > "make" in src/backend/access/gin, followed by "make install-bin" in > src/backend, fails to rebuild the postgres executable --- it just > installs the existing one. A second execution of "make install-bin" > does notice that postgres is out of date and rebuilds it. This > procedure for rebuilding after changing one or two .c files has always > worked for me before. I can't avoid the suspicion that the recent > changes to make things more parallel-friendly broke something. I've noticed something like this as well, but haven't been able to figure out exactly what is going wrong. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Robert Haas <robertmhaas@gmail.com> writes: > On Thu, Jan 6, 2011 at 11:57 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Whilst fooling around with GIN, I have repeatedly observed that doing >> "make" in src/backend/access/gin, followed by "make install-bin" in >> src/backend, fails to rebuild the postgres executable --- it just >> installs the existing one. �A second execution of "make install-bin" >> does notice that postgres is out of date and rebuilds it. �This >> procedure for rebuilding after changing one or two .c files has always >> worked for me before. �I can't avoid the suspicion that the recent >> changes to make things more parallel-friendly broke something. > I've noticed something like this as well, but haven't been able to > figure out exactly what is going wrong. I'm not entirely sure either, but it looks like the first upper "make" updates the objfiles.txt file in src/backend/access and then the second one realizes it has to rebuild postgres. Something about multi-level dependencies isn't quite right. regards, tom lane
On Thu, 2011-01-06 at 13:53 -0500, Tom Lane wrote: > Robert Haas <robertmhaas@gmail.com> writes: > > On Thu, Jan 6, 2011 at 11:57 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > >> Whilst fooling around with GIN, I have repeatedly observed that doing > >> "make" in src/backend/access/gin, followed by "make install-bin" in > >> src/backend, fails to rebuild the postgres executable --- it just > >> installs the existing one. A second execution of "make install-bin" > >> does notice that postgres is out of date and rebuilds it. This > >> procedure for rebuilding after changing one or two .c files has always > >> worked for me before. I can't avoid the suspicion that the recent > >> changes to make things more parallel-friendly broke something. > > > I've noticed something like this as well, but haven't been able to > > figure out exactly what is going wrong. > > I'm not entirely sure either, but it looks like the first upper "make" > updates the objfiles.txt file in src/backend/access and then the second > one realizes it has to rebuild postgres. Something about multi-level > dependencies isn't quite right. I had a weirdness with the dependency files a few days ago. The error was a missing delimiter : at the end of one of the files. Stopped everything cold until I added that character, then re-configured and not a hint of the earlier problem. Sounds like dependency is a common issue. -- Simon Riggs http://www.2ndQuadrant.com/books/PostgreSQL Development, 24x7 Support, Training and Services
On tor, 2011-01-06 at 11:57 -0500, Tom Lane wrote: > Whilst fooling around with GIN, I have repeatedly observed that doing > "make" in src/backend/access/gin, followed by "make install-bin" in > src/backend, fails to rebuild the postgres executable --- it just > installs the existing one. A second execution of "make install-bin" > does notice that postgres is out of date and rebuilds it. This > procedure for rebuilding after changing one or two .c files has always > worked for me before. I can't avoid the suspicion that the recent > changes to make things more parallel-friendly broke something. This fixes it, but it's beyond me why. diff --git i/src/backend/common.mk w/src/backend/common.mk index 4e0a5da..5d599db 100644 --- i/src/backend/common.mk +++ w/src/backend/common.mk @@ -34,7 +34,7 @@ objfiles.txt: Makefile $(SUBDIROBJS) $(OBJS)expand_subsys = $(foreach file,$(1),$(if $(filter %/objfiles.txt,$(file)),$(patsubst../../src/backend/%,%,$(addprefix $(top_builddir)/,$(shell cat $(file)))),$(file)))# Parallelmake trickery -$(SUBDIROBJS): | $(SUBDIRS:%=%-recursive) ; +$(SUBDIROBJS): $(SUBDIRS:%=%-recursive) ;.PHONY: $(SUBDIRS:%=%-recursive)$(SUBDIRS:%=%-recursive):
Peter Eisentraut <peter_e@gmx.net> writes: > On tor, 2011-01-06 at 11:57 -0500, Tom Lane wrote: >> Whilst fooling around with GIN, I have repeatedly observed that doing >> "make" in src/backend/access/gin, followed by "make install-bin" in >> src/backend, fails to rebuild the postgres executable --- it just >> installs the existing one. A second execution of "make install-bin" >> does notice that postgres is out of date and rebuilds it. This >> procedure for rebuilding after changing one or two .c files has always >> worked for me before. I can't avoid the suspicion that the recent >> changes to make things more parallel-friendly broke something. > This fixes it, but it's beyond me why. Further experimentation suggests that *only* subdirectories of access/ are vulnerable to the issue. I wonder whether this syntax: > -$(SUBDIROBJS): | $(SUBDIRS:%=%-recursive) ; is weird with respect to the first SUBDIRS value. Or maybe it's a plain old bug in gmake. regards, tom lane
On Thu, 2011-01-06 at 12:27 -0500, Robert Haas wrote: > I've noticed something like this as well, but haven't been able to > figure out exactly what is going wrong. I've been having build problems ever since: http://archives.postgresql.org/message-id/1291256879.25389.6.camel@jdavis-ux.asterdata.local It's gotten much worse recently, where changing a c file seems to require multiple top-level "make install" commands to take effect (as Tom describes). I don't think it's limited to the access/ subdirectory, though. Regards,Jeff Davis
Excerpts from Tom Lane's message of jue ene 06 13:57:11 -0300 2011: > Whilst fooling around with GIN, I have repeatedly observed that doing > "make" in src/backend/access/gin, followed by "make install-bin" in > src/backend, fails to rebuild the postgres executable --- it just > installs the existing one. A second execution of "make install-bin" > does notice that postgres is out of date and rebuilds it. This > procedure for rebuilding after changing one or two .c files has always > worked for me before. I can't avoid the suspicion that the recent > changes to make things more parallel-friendly broke something. FWIW this explains why I was having such a hard time testing the FOR KEY LOCK patch. Please commit whatever fix you have. -- Álvaro Herrera <alvherre@commandprompt.com> The PostgreSQL Company - Command Prompt, Inc. PostgreSQL Replication, Consulting, Custom Development, 24x7 support