[fbsd] Re: How to disable a src.conf on command-line
Jeremie Le Hen
jeremie at le-hen.org
Sun Jun 11 10:34:05 UTC 2006
Hi, Darren, Warner,
On Fri, Jun 09, 2006 at 03:47:24PM -0700, Darren Pilgrim wrote:
> M. Warner Losh wrote:
> >In message: <4489E354.5070201 at bitfreak.org>
> > Darren Pilgrim <darren.pilgrim at bitfreak.org> writes:
> >: M. Warner Losh wrote:
> >: > So if you make WITH_SSP off by default, then having WITH_SSP in the
> >: > src.conf can't be overridden. If you have it on by default, having
> >: > WITHOUT_SSP in the src.conf file can't be overriden. this appears to
> >: > be an unintended flaw with the with/without stuff. I'm not sure the
> >: > right way to compensate.
> >:
> >: I can't speak for the "right" way, but if you specify the variable in
> >: src.conf/make.conf with ?= instead of =, you can override it on the
> >: command-line:
> >:
> >: # grep KERNCONF /etc/make.conf
> >: KERNCONF?=TTPWEB
> >: # make -V KERNCONF
> >: TTPWEB
> >: # env KERNCONF=SOMETHING_ELSE make -V KERNCONF
> >: SOMETHING_ELSE
> >
> >?= doesn't mesh well with WITH/WITHOUT because then it will always be
> >defined, thus defeating its purpose.
>
> Use .ifndef to define WITH/WITHOUT iff its counterpart is undef:
>
> .ifndef WITHOUT_FOO
> WITH_FOO=def
> .endif
Yes, this is indeed the way to go but actually I would prefer to this
this wrapped in share/mk/bsd.own.mk, so that src.conf(5) would only
handle variable assignments (in a rc.conf(5) fashion) without using
make(1) magic. This would be pretty less puzzling for users.
IMHO, the attached patch makes things better in case both WITH_FOO
and WITHOUT_FOO are defined. Variables defined on command-line are
read-only, therefore I take advantage of this to give the priority
to the knob that has been defined on command-line.
% jarjarbinks# head -n 1 /etc/src.conf
% WITH_SSP=YES
%
% jarjarbinks# make echo.o
% cc -O2 -fno-strict-aliasing -pipe -march=pentium-m -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow-Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -fstack-protector -c /usr/src/bin/echo/echo.c
% ^^^^^^^^^^^^^^^^^
% jarjarbinks# make clean
% rm -f echo echo.o echo.1.gz echo.1.cat.gz
%
% jarjarbinks# make WITHOUT_SSP=yes echo.o
% cc -O2 -fno-strict-aliasing -pipe -march=pentium-m -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow-Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -c /usr/src/bin/echo/echo.c
% ^^^^^^^^^^^^^^^^^
% jarjarbinks# make clean
% rm -f echo echo.o echo.1.gz echo.1.cat.gz
%
% jarjarbinks# echo "WITHOUT_SSP=YES" >> /etc/src.conf
% jarjarbinks# make echo.o
% "/usr/share/mk/bsd.own.mk", line 394: WITH_SSP and WITHOUT_SSP can't both be set from the same place.
%
Best regards,
--
Jeremie Le Hen
< jeremie at le-hen dot org >< ttz at chchile dot org >
-------------- next part --------------
Index: bsd.own.mk
===================================================================
RCS file: /home/ncvs/src/share/mk/bsd.own.mk,v
retrieving revision 1.54
diff -u -r1.54 bsd.own.mk
--- bsd.own.mk 28 Apr 2006 12:03:36 -0000 1.54
+++ bsd.own.mk 11 Jun 2006 10:25:43 -0000
@@ -352,7 +352,20 @@
USB \
WPA_SUPPLICANT_EAPOL
.if defined(WITH_${var}) && defined(WITHOUT_${var})
-.error WITH_${var} and WITHOUT_${var} can't both be set.
+# Check the user didn't define both variables from the same place.
+WITH_${var}:= bsd.own.mk
+WITHOUT_${var}:= bsd.own.mk
+.if (${WITH_${var}} == "bsd.own.mk" && ${WITHOUT_${var}} == "bsd.own.mk") || \
+ (${WITH_${var}} != "bsd.own.mk" && ${WITHOUT_${var}} != "bsd.own.mk")
+.error WITH_${var} and WITHOUT_${var} can't both be set from the same place.
+.endif
+.if ${WITH_${var}} != "bsd.own.mk"
+# WITH_${var} is defined on comand-line
+.undef WITHOUT_${var}
+.else
+# WITHOUT_${var} is defined on comand-line
+.undef WITH_${var}
+.endif
.endif
.if defined(MK_${var})
.error MK_${var} can't be set by a user.
@@ -372,7 +385,20 @@
HESIOD \
IDEA
.if defined(WITH_${var}) && defined(WITHOUT_${var})
-.error WITH_${var} and WITHOUT_${var} can't both be set.
+# Check the user didn't define both variables from the same place.
+WITH_${var}:= bsd.own.mk
+WITHOUT_${var}:= bsd.own.mk
+.if (${WITH_${var}} == "bsd.own.mk" && ${WITHOUT_${var}} == "bsd.own.mk") || \
+ (${WITH_${var}} != "bsd.own.mk" && ${WITHOUT_${var}} != "bsd.own.mk")
+.error WITH_${var} and WITHOUT_${var} can't both be set from the same place.
+.endif
+.if ${WITH_${var}} != "bsd.own.mk"
+# WITH_${var} is defined on comand-line
+.undef WITHOUT_${var}
+.else
+# WITHOUT_${var} is defined on comand-line
+.undef WITH_${var}
+.endif
.endif
.if defined(MK_${var})
.error MK_${var} can't be set by a user.
More information about the freebsd-hackers
mailing list