[PATCH] make -jN check fails / unset MAKEFLAGS in pg_regress.c

Started by Andres Freundover 13 years ago5 messageshackers
Jump to latest
#1Andres Freund
andres@anarazel.de

Hi,

Currently "make -jN check" fails during "creating temporary installation"
with:
make[1]: *** read jobs pipe: Invalid argument. Stop.
make[1]: *** Waiting for unfinished jobs....
make[2]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule.
in install.log.

This is due to pg_regress invoking make while being invoked by make
itself. gnu make internally sets the MAKEFLAGS environment variable to
remember arguments. The problem in this case is that it contains
"--jobserver-fds=4,5" which makes the pg_regress invoked make think its
running as a make child process.

Now the problem obviously can be worked around by using "make -jN &&
make check" instead of "make -j16 check" but I several times now have
spent time trying to figure out what I broke so it sees sensible to
"fix" this.

Any arguments against doing so?

The attached patch also resets the MAKELEVEL environment variable for
good measure. I haven't seen any indication that its needed, but it
feelds safer ;)

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

0001-Unset-MAKEFLAGS-in-pg_regress.c-to-hide-the-knowledg.patchtext/x-patch; charset=us-asciiDownload+12-1
#2Robert Haas
robertmhaas@gmail.com
In reply to: Andres Freund (#1)
Re: [PATCH] make -jN check fails / unset MAKEFLAGS in pg_regress.c

On Thu, Nov 29, 2012 at 8:50 AM, Andres Freund <andres@2ndquadrant.com> wrote:

Hi,

Currently "make -jN check" fails during "creating temporary installation"
with:
make[1]: *** read jobs pipe: Invalid argument. Stop.
make[1]: *** Waiting for unfinished jobs....
make[2]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule.
in install.log.

This is due to pg_regress invoking make while being invoked by make
itself. gnu make internally sets the MAKEFLAGS environment variable to
remember arguments. The problem in this case is that it contains
"--jobserver-fds=4,5" which makes the pg_regress invoked make think its
running as a make child process.

Now the problem obviously can be worked around by using "make -jN &&
make check" instead of "make -j16 check" but I several times now have
spent time trying to figure out what I broke so it sees sensible to
"fix" this.

Any arguments against doing so?

The attached patch also resets the MAKELEVEL environment variable for
good measure. I haven't seen any indication that its needed, but it
feelds safer ;)

Seems reasonable to me.

But shouldn't the comment in the patch say "to be certain the child
DOESN'T notice the make above us"?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Andres Freund
andres@anarazel.de
In reply to: Robert Haas (#2)
Re: [PATCH] make -jN check fails / unset MAKEFLAGS in pg_regress.c

On 2012-11-30 14:41:14 -0500, Robert Haas wrote:

On Thu, Nov 29, 2012 at 8:50 AM, Andres Freund <andres@2ndquadrant.com> wrote:

Hi,

Currently "make -jN check" fails during "creating temporary installation"
with:
make[1]: *** read jobs pipe: Invalid argument. Stop.
make[1]: *** Waiting for unfinished jobs....
make[2]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule.
in install.log.

This is due to pg_regress invoking make while being invoked by make
itself. gnu make internally sets the MAKEFLAGS environment variable to
remember arguments. The problem in this case is that it contains
"--jobserver-fds=4,5" which makes the pg_regress invoked make think its
running as a make child process.

Now the problem obviously can be worked around by using "make -jN &&
make check" instead of "make -j16 check" but I several times now have
spent time trying to figure out what I broke so it sees sensible to
"fix" this.

Any arguments against doing so?

The attached patch also resets the MAKELEVEL environment variable for
good measure. I haven't seen any indication that its needed, but it
feelds safer ;)

Seems reasonable to me.

But shouldn't the comment in the patch say "to be certain the child
DOESN'T notice the make above us"?

Yes. obviously. Stupid, errr, fingers.

Thanks for spotting.

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Andres Freund
andres@anarazel.de
In reply to: Andres Freund (#3)
Re: [PATCH] make -jN check fails / unset MAKEFLAGS in pg_regress.c

Yes. obviously. Stupid, errr, fingers.

This time round it really was fatfingering the wrong key after having
been climbing for 4h. Really.

Trivially updated patch attached.

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

0001-Unset-MAKEFLAGS-in-pg_regress.c-to-hide-the-knowledg.patchtext/x-patch; charset=us-asciiDownload+12-1
#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#4)
Re: [PATCH] make -jN check fails / unset MAKEFLAGS in pg_regress.c

Andres Freund <andres@2ndquadrant.com> writes:

Trivially updated patch attached.

Applied, thanks.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers