Thread: Something fishy about the current Makefiles

Something fishy about the current Makefiles

From
Tom Lane
Date:
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


Re: Something fishy about the current Makefiles

From
Robert Haas
Date:
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


Re: Something fishy about the current Makefiles

From
Tom Lane
Date:
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


Re: Something fishy about the current Makefiles

From
Simon Riggs
Date:
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



Re: Something fishy about the current Makefiles

From
Peter Eisentraut
Date:
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):




Re: Something fishy about the current Makefiles

From
Tom Lane
Date:
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


Re: Something fishy about the current Makefiles

From
Jeff Davis
Date:
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



Re: Something fishy about the current Makefiles

From
Alvaro Herrera
Date:
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