Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Jan 2004 18:25:56 +0200
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        "Brian F. Feldman" <green@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/share/mk bsd.obj.mk
Message-ID:  <20040108162556.GB31301@FreeBSD.org.ua>
In-Reply-To: <200401081607.i08G7q5U011051@green.bikeshed.org>
References:  <20040108080514.GB27761@FreeBSD.org.ua> <200401081607.i08G7q5U011051@green.bikeshed.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--mojUlQ0s9EVzWg2t
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Jan 08, 2004 at 11:07:52AM -0500, Brian F. Feldman wrote:
> Ruslan Ermilov <ru@FreeBSD.org> wrote:
> > On Wed, Jan 07, 2004 at 03:41:03PM -0500, Brian F. Feldman wrote:
> > > Ruslan Ermilov <ru@FreeBSD.org> wrote:
> > > > On Thu, Jan 01, 2004 at 09:05:48PM -0800, Brian Feldman wrote:
> > > > > green       2004/01/01 21:05:48 PST
> > > > >=20
> > > > >   FreeBSD src repository
> > > > >=20
> > > > >   Modified files:
> > > > >     share/mk             bsd.obj.mk=20
> > > > >   Log:
> > > > >   Fix a very corner case when you want to make cleandir SUBDIRs w=
hich
> > > > >   are built using a ${MAKE} that's not just "make".
> > > > >  =20
> > > > >   Test by:        make universe (followed by cleandirs)
> > > > >  =20
> > > > >   Revision  Changes    Path
> > > > >   1.49      +2 -2      src/share/mk/bsd.obj.mk
> > > > >=20
> > > > The old version used ${MAKE}, why this was a problem at all?
> > >=20
> > > The ${MAKE} that it uses would be overridden by the default ${MAKE} v=
alue=20
> > > each time; this doesn't occur when dependencies are executed, though.
> > >=20
> > Please explain in more detail.  With the below makefile,
> >=20
> > : all:
> > : 	@cd ${.CURDIR}; ${MAKE} print-make
> > :=20
> > : print-make:
> > : 	@echo ${MAKE}
> >=20
> > running /usr/bin/make will rightfully print "/usr/bin/make".
> > make(1)'s main() always sets MAKE to argv[0] as its first task.
>=20
> Here is the difference in behavior:
>=20
> {"/home/green/tmp/x"}$ make print-make all
> make
> make
> {"/home/green/tmp/x"}$ make MAKE=3D'/usr/bin/make -DNONDEF' print-make all
> /usr/bin/make -DNONDEF
> /usr/bin/make
>=20
You aren't supposed to set the ${MAKE} variable manually --
it's automatically set by make(1) to the argv[0] value.  By
using it the way you show, you risk because there are four
different types of make variables, and while you set the
command-line type "MAKE" variable, make(1) will set the
global "MAKE" variable to "make":

: $ make MAKE=3D'/usr/bin/make -DFOO' print-make
: /usr/bin/make -DFOO
: $ make MAKE=3D'/usr/bin/make -DFOO' -V MAKE
: make

If you really need to access command-line arguments, there
is the .MAKEFLAGS variable available for that purpose.

But why do you need to ``make MAKE=3D'/usr/bin/make -DFOO' bar''
in the first place instead of simple ``make -DFOO bar''?  If
"bar" is recursive (i.e., runs ${MAKE} subprocesses), then
-DFOO will be properly propagated:

: $ cat Makefile
: all:
: 	@cd ${.CURDIR}; ${MAKE} print-make
:=20
: print-make:
: 	@echo ${FOO}
: $ make -DFOO
: 1


Cheers,
--=20
Ruslan Ermilov
FreeBSD committer
ru@FreeBSD.org

--mojUlQ0s9EVzWg2t
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)

iD8DBQE//YSUUkv4P6juNwoRAv8mAKCHKJUb3Pyhz7lijzDypN/yby+EvACaA8Aa
VzpVfTFhVVsxnjAi+VcJOvE=
=ygAj
-----END PGP SIGNATURE-----

--mojUlQ0s9EVzWg2t--



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