MAKEFLAGS caused temporary insanity

Jan Beich jbeich at vfemail.net
Tue Nov 24 15:21:43 UTC 2015


"Euan Thoms" <euan at potensol.com> writes:

> do-build:
>         cd ${WRKSRC} && unset MAKEFLAGS && ${OPENSIPS_MAKE_ENV}
> ${GMAKE} ${_MAKE_JOBS} ${ALL_TARGET}

Have you tried defining NOPRECIOUSMAKEVARS in the port's Makefile?

MAKEFLAGS is used to propagate arguments to submake but the ports framework
(ab)uses it to pass internal variables without making sure they do not
poison vendors' Makefiles. For one, ffmpeg and anything that bundles it
(e.g. handbrake, kodi) have to be careful ${ARCH} isn't overriden.

  $ make
  ARCH=amd64

  $ cat BSDmakefile
  ARCH=   amd64

  .MAKEFLAGS:     ARCH=${ARCH}

  all:
          @gmake --no-print-directory

  $ cat GNUmakefile
  ARCH=   x86_64

  all:
          @echo ARCH=${ARCH}

which is the result of

  Mk/bsd.port.mk:
  (3) Serious speedup of bsd.port.mk startup.  In particular, this helps
      cut down "make index" time from an hour and a half to 8 minutes on
      our system with a parallel make describe (see 2).  Try to pass
      unchanged variables down from parent makes instead of rerunning
      commands to define them, etc.

  https://svnweb.freebsd.org/changeset/ports/20327

Why not follow PkgSrc in using MACHINE_ARCH?

Index: Mk/bsd.port.mk
===================================================================
--- Mk/bsd.port.mk	(revision 402341)
+++ Mk/bsd.port.mk	(working copy)
@@ -1131,10 +1131,7 @@ makepatch:
 MAINTAINER?=	ports at FreeBSD.org
 
 # Get the architecture
-.if !defined(ARCH)
-ARCH!=	${UNAME} -p
-.endif
-_EXPORTED_VARS+=	ARCH
+ARCH?=			${MACHINE_ARCH}
 
 # Get the operating system type
 .if !defined(OPSYS)

Once 9.x reaches EOL and the ports tree becomes bmake-only other variables
can be (properly) fixed via .export.

Index: Mk/bsd.port.mk
===================================================================
--- Mk/bsd.port.mk	(revision 402341)
+++ Mk/bsd.port.mk	(working copy)
@@ -5051,11 +5051,7 @@ ${_t}:
 
 .if !defined(NOPRECIOUSMAKEVARS)
 # These won't change, so we can pass them through the environment
-.for var in ${_EXPORTED_VARS}
-.if empty(.MAKEFLAGS:M${var}=*) && !empty(${var})
-.MAKEFLAGS:	${var}=${${var}:Q}
-.endif
-.endfor
+.export ${_EXPORTED_VARS}
 .endif
 
 .if !target(pre-check-config)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 602 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-ports/attachments/20151124/e32068c9/attachment.bin>


More information about the freebsd-ports mailing list