Skip site navigation (1)Skip section navigation (2)
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>