Date: Wed, 6 Nov 2013 03:48:49 -0500 From: Julio Merino <julio@meroh.net> To: freebsd-hackers@freebsd.org Subject: Is WITH_*=yes in make's command line expected to work? Message-ID: <20131106084849.GA45949@fbair.virtual.network>
next in thread | raw e-mail | index | archive | help
Hello all, I'm currently working on fixing the build when the TESTS knob is enabled and I have encountered some odd behavior that I'm not sure is expected. Basically, it seems that passing a WITH_*=yes option (note, no -D) through make's command line conflicts with a similar NO_* option. Consider this sample Makefile which is derived from the contents of bsd.own.mk: ----- .if defined(SIMULATE_WITH_FOO_IN_SRC_CONF) WITH_FOO=yes .endif # Same code as in bsd.own.mk. .for var in FOO .if defined(NO_${var}) .if defined(WITH_${var}) .undef WITH_${var} .endif WITHOUT_${var}= .endif .endfor # End code from bsd.own.mk. all: .if defined(WITH_FOO) @echo WITH_FOO .endif .if defined(WITHOUT_FOO) @echo WITHOUT_FOO .endif ----- Now look at the following invocations: $ make -DSIMULATE_WITH_FOO_IN_SRC_CONF WITH_FOO # OK. $ make -DSIMULATE_WITH_FOO_IN_SRC_CONF -DNO_FOO WITHOUT_FOO # OK. $ make -DWITH_FOO -DNO_FOO WITHOUT_FOO # OK. $ make WITH_FOO=yes -DNO_FOO WITH_FOO # OOPS! WITHOUT_FOO Is this expected behavior? It seems to me that the .undef is not working properly in the way it's used by bsd.own.mk. The src.conf(5) manpage says that the WITH_* and WITHOUT_* variables can be provided to make via the command line with -D. There is no mention of providing explicit overrides with WITH_*=yes as I did above. Is it OK to rely on this assumption and consider invocations with WITH_FOO=yes in the command line to be broken? Thank you!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131106084849.GA45949>