Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Feb 2001 21:07:46 +0000
From:      Tony Finch <dot@dotat.at>
To:        Barney Wolff <barney@pit.databus.com>
Cc:        FUJISHIMA Satsuki <sf@FreeBSD.org>, Kenneth W Cochran <kwc@world.std.com>, ports@FreeBSD.org, stable@FreeBSD.org, Tony Finch <dot@dotat.at>, freebsd-gnats-submit@freebsd.org
Subject:   Re: ports/24711: Mozilla build failure, 4-stable
Message-ID:  <20010212210746.E35416@hand.dotat.at>
In-Reply-To: <20010211201229.A54579@pit.databus.com>
References:  <200102100231.VAA00143@world.std.com> <20010210010445.A43496@pit.databus.com> <86r914amlv.wl@cheerful.com> <20010211201229.A54579@pit.databus.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Barney Wolff <barney@pit.databus.com> wrote:
>FUJISHIMA Satsuki wrote:
>> Barney Wolff wrote:
>> > 
>> > Try anything BUT /usr/obj as WRKDIRPREFIX.  /usr/obj/ports, for
>> > example.  I found most or all ports fail to build if that
>> > specific directory is used.  I have no idea why.
>> 
>> man make and read .OBJDIR section.
>
>Yes I understand the significance of /usr/obj, but not why, in
>detail, the port builds fail. In any case, if there are some specific
>directories that cause problems, perhaps bsd.port.mk should check for
>them and complain, rather than letting the build fail with baffling
>errors.

See PR#24711. The reason it doesn't work is that the ports system uses
${MAKEFILE} to name the Makefile in the work directory that should be
used to build the port. If the port's Makefile doesn't set MAKEFILE
then bsd.port.mk tries to set it to "${BUILD_WRKSRC}/Makefile".

However, it fails because ${MAKEFILE} also happens to be a special
variable set by make itself. It is set in a slightly complicated way
to support separate object trees. If /usr/obj/`pwd` exists then it is
used as the object directory, so in order to refer back to the
original Makefile make sets MAKEFILE to "`pwd`/Makefile". If the
object directory doesn't exist then MAKEFILE is set to just
"Makefile".

So the MAKEFILE?=${BUILD_WRKSRC}/Makefile line in bsd.port.mk is
entirely redundant because MAKEFILE is always set by make. Most of the
time you are lucky and things still work, *unless* an object directory
exists, in which case make sets MAKEFILE to a value that doesn't work
and the build explodes.

The problem occurs when bsd.port.mk tries to run make inside the work
directory. If the port didn't set MAKEFILE and the object tree exists,
then the port ends up trying to use /usr/ports/foo/bar/Makefile to
build the port rather than /usr/obj/usr/ports/foo/bar/work/bar-1.2.3/Makefile.

Tony.
-- 
f.a.n.finch    fanf@covalent.net    dot@dotat.at
FISHER: NORTHWEST 5 OR 6 DECREASING 3. SHOWERS. GOOD.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010212210746.E35416>