-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On 10/21/15 3:17 PM, Bryan Drewery wrote: > On 10/21/2015 3:14 PM, Simon J. Gerraty wrote: >> +2015-10-12 Simon J. Gerraty <s...@bad.crufty.net> + + * var.c: >> the conditional expressions used with ':?' can be + expensive, if >> already discarding do not evaluate or expand + anything. + >> +2015-10-10 Simon J. Gerraty <s...@bad.crufty.net> + + * >> Makefile (MAKE_VERSION): 20151010 + Merge with NetBSD make, >> pick up + o Add Boolean wantit flag to Var_Subst and Var_Parse >> + when FALSE we know we are discarding the result and can + >> skip operations like Cmd_Exec. > > Thank you! > > I haven't yet had a chance to try these but I do expect it to be > beneficial for ports. >
By the way, I think the changes here to delay evaluating :? fixes or avoids an obscure bug I just ran into as well. > ~/git/freebsd # git diff > targets/pseudo/userland/misc/Makefile.depend diff --git > a/targets/pseudo/userland/misc/Makefile.depend > b/targets/pseudo/userland/misc/Makefile.depend index > 0c98392..7e88956 100644 --- > a/targets/pseudo/userland/misc/Makefile.depend +++ > b/targets/pseudo/userland/misc/Makefile.depend @@ -2,43 +2,49 @@ > > # This file is not autogenerated - take care! > > +.if !defined(MK_FORTH) +.include <src.opts.mk> +.endif + DIRDEPS = > \ rescue/librescue \ rescue/rescue \ - sys/boot/ficl \ > etc/sendmail \ > > +DIRDEPS.${MK_FORTH}+= \ + sys/boot/ficl \ + > sys/boot/forth \ This creates either DIRDEPS.yes or DIRDEPS.no. FreeBSD uses this pattern for SUBDIR now in the main build dirs (bin, sbin, usr.bin, usr.sbin). Adding DIRDEPS support seems trivial enough... > ~/git/freebsd # git diff share/mk/local.dirdeps.mk diff --git > a/share/mk/local.dirdeps.mk b/share/mk/local.dirdeps.mk index > ff4ee18..9b92273 100644 --- a/share/mk/local.dirdeps.mk +++ > b/share/mk/local.dirdeps.mk @@ -104,3 +104,8 @@ > CSU_DIR.${DEP_MACHINE_ARCH} ?= csu/${DEP_MACHINE_ARCH} CSU_DIR := > ${CSU_DIR.${DEP_MACHINE_ARCH}} BOOT_MACHINE_DIR:= > ${BOOT_MACHINE_DIR.${DEP_MACHINE}} KERNEL_NAME:= > ${KERNEL_NAME.${DEP_MACHINE}} + +# Support DIRDEPS.${MK_OPTION} > +.if !empty(DIRDEPS) +DIRDEPS:= ${DIRDEPS} ${DIRDEPS.yes} +.endif Now for the bug. Even though this works, it somehow leaves behind a cached value of a non-expanded version that the __depdirs:= line uses in dirdeps.mk (with a :?) when DIRDEPS.yes is empty (since MK_FORTH=no here sets DIRDEPS.no instead): > ~/git/freebsd # MK_FORTH=no make -f > targets/pseudo/userland/misc/Makefile.depend -V DIRDEPS make: > "/root/git/freebsd/share/mk/dirdeps.mk" line 495: warning: Missing > closing parenthesis for exists() make: Bad conditional expression > `exists(/root/git/freebsd/${DIRDEPS)' in > exists(/root/git/freebsd/${DIRDEPS)?/root/git/freebsd/${DIRDEPS.yes}: > > rescue/librescue rescue/rescue etc/sendmail sys/boot/i386/boot0 sys/boot/i386/boot0sio sys/boot/i386/boot2 sys/boot/i386/btx/btx sys/boot/i386/btx/btxldr sys/boot/i386/btx/li > b sys/boot/i386/cdboot sys/boot/i386/gptboot > sys/boot/i386/gptzfsboot sys/boot/i386/kgzldr > sys/boot/i386/libfirewire sys/boot/i386/libi386 > sys/boot/i386/loader sys/boot/i386 /mbr sys/boot/i386/pmbr > sys/boot/i386/pxeldr sys/boot/i386/zfsboot > sys/boot/i386/zfsloader sys/boot/efi/libefi > sys/boot/userboot/ficl sys/boot/userboot/libstand sys/boot/use > rboot/test sys/boot/userboot/userboot sys/boot/zfs Note the exists() has a space in it and missing } and is all messed up. The resulting DIRDEPS is proper though and lacks sys/boot/ficl and sys/boot/forth With MK_FORTH=yes (note it does have sys/boot/ficl and sys/boot/forth fine) > ~/git/freebsd # MK_FORTH=yes make -f > targets/pseudo/userland/misc/Makefile.depend -V DIRDEPS > rescue/librescue rescue/rescue etc/sendmail sys/boot/i386/boot0 > sys/boot/i386/boot0sio sys/boot/i386/boot2 sys/boot/i386/btx/btx > sys/boot/i386/btx/btxldr sys/boot/i386/btx/li b > sys/boot/i386/cdboot sys/boot/i386/gptboot > sys/boot/i386/gptzfsboot sys/boot/i386/kgzldr > sys/boot/i386/libfirewire sys/boot/i386/libi386 > sys/boot/i386/loader sys/boot/i386 /mbr sys/boot/i386/pmbr > sys/boot/i386/pxeldr sys/boot/i386/zfsboot > sys/boot/i386/zfsloader sys/boot/efi/libefi > sys/boot/userboot/ficl sys/boot/userboot/libstand sys/boot/use > rboot/test sys/boot/userboot/userboot sys/boot/zfs sys/boot/ficl > sys/boot/forth Now with a newer bmake which has no errors: > ~/git/freebsd # MK_FORTH=no usr.bin/bmake/make -f > targets/pseudo/userland/misc/Makefile.depend -V DIRDEPS > rescue/librescue rescue/rescue etc/sendmail sys/boot/i386/boot0 > sys/boot/i386/boot0sio sys/boot/i386/boot2 sys/boot/i386/btx/btx > sys/boot/i386/btx/btxldr sys/boot/i386/btx/li b > sys/boot/i386/cdboot sys/boot/i386/gptboot > sys/boot/i386/gptzfsboot sys/boot/i386/kgzldr > sys/boot/i386/libfirewire sys/boot/i386/libi386 > sys/boot/i386/loader sys/boot/i386 /mbr sys/boot/i386/pmbr > sys/boot/i386/pxeldr sys/boot/i386/zfsboot > sys/boot/i386/zfsloader sys/boot/efi/libefi sys/boot/zfs > ~/git/freebsd # MK_FORTH=yes usr.bin/bmake/make -f > targets/pseudo/userland/misc/Makefile.depend -V DIRDEPS > rescue/librescue rescue/rescue etc/sendmail sys/boot/i386/boot0 > sys/boot/i386/boot0sio sys/boot/i386/boot2 sys/boot/i386/btx/btx > sys/boot/i386/btx/btxldr sys/boot/i386/btx/li b > sys/boot/i386/cdboot sys/boot/i386/gptboot > sys/boot/i386/gptzfsboot sys/boot/i386/kgzldr > sys/boot/i386/libfirewire sys/boot/i386/libi386 > sys/boot/i386/loader sys/boot/i386 /mbr sys/boot/i386/pmbr > sys/boot/i386/pxeldr sys/boot/i386/zfsboot > sys/boot/i386/zfsloader sys/boot/efi/libefi sys/boot/zfs > sys/boot/ficl sys/boot/forth - -- Regards, Bryan Drewery -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQEcBAEBCgAGBQJWTkb1AAoJEDXXcbtuRpfPIYoH/2Gbu7/dTUEXpIueJuD73ZYH PGMktZWsJzDUdQyKKQ+rGakBDmxDylEnXVo1G+RaCDlsLYzujacDE82JB86w005a H2edxlTCI1A9ZZ/BZAt8XgESLQOMyAM2xnRt1Hgl31zGVacjjpwkz8URVK5ut+cx JJkN34X5LOzX3PGawIkgTXks7ZS+9Y38GW26DJsOujS6rzGWFjm3t9A+vVVvuPt8 jXxD0i977xjuqyVpRD36UG901SOij2U0aTdx1tQ6o8R6CfT0PfKEC8RgsPs4vh5X dHYsdlnTJWntMNpaJyO+NB+1ClOr79lrBpVt+Iiatsx2Ys8aH6wOk/8sczkpZxg= =z55G -----END PGP SIGNATURE----- _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"