On 07/07/2011 08:22 PM, Chris Stankevitz wrote: > --- On Thu, 7/7/11, Ralf Wildenhues <[email protected]> wrote: >> From: Ralf Wildenhues <[email protected]> >> # Override CFLAGS if not set by the user. >> test ${CFLAGS+set} = set || CFLAGS=-O0 > > Ralf, > > Thank you. I believe your method does not work when the user has set CFLAGS > to something that has nothing to do with optimizations (e.g. > CFLAGS=-I/foo/bar). > > Would you please comment on the solution I came up with: > > In configure.ac: > CFLAGS_ORIG=${CFLAGS} > AC_PROG_CC > CFLAGS=${CFLAGS_ORIG}
If the user set CFLAGS, then this is equivalent to:
CFLAGS_ORIG=$CFLAGS
AC_PROG_CC -> CFLAGS is set, so no change to CFLAGS
CFLAGS=$CFLAGS_ORIG -> no change to CFLAGS
However, if the user did not set CFLAGS, then this is equivalent to:
CFLAGS_ORIG=
AC_PROG_CC -> CFLAGS wasn't set, so now CFLAGS is either '-g' or '-g
-O2' depending on $CC
CFLAGS=''
which explicitly sets CFLAGS to the empty string, instead of leaving it
unset.
This might have ramifications for users that do ./configure -C, since
CFLAGS is a precious variable, and configure warns about a change
between a set-but-empty and an unset variable.
>
> In Makefile.am:
> if DEBUG
> AM_CFLAGS = -g3 -O0
> endif
The combination '-g3 -O0' is gcc-specific. It will fail miserably on
other compilers, unless you took pains in configure.ac to ensure that
the automake conditional DEBUG can only be set if $CC is gcc. But if
you did indeed take care to define the automake conditional
appropriately, then yes, this is a way to turn on debugging (for
comparison, look at coreutils.git, and see how coreutils turns on
optional warning flags when you configure --enable-gcc-warnings, where
coreutils took pains to ensure that the AM_CFLAGS adjustments are only
made to options already proven at configure time to work alongside the
user's $CC).
>
> I believe my approach
> 1. Allows the user full control via the sacred CFLAGS
> 2. Does not touch, mutate, or alter the user's sacred CFLAGS
But points 1 and 2 are also met by following the autoconf manual's
approach of:
: ${CFLAGS="-g3 -O0"}
AC_PROG_CC
without having to modify AM_CFLAGS in the first place. But you are
still stuck with the burden of verifying whether '-g3 -O0' works with
non-gcc $CC.
> 3. Works despite AC_PROG_CC mucking around with CFLAGS
AC_PROG_CC does _not_ muck around with CFLAGS. If the user specified
CFLAGS, then AC_PROG_CC honors that. If the user did not specify
CFLAGS, then AC_PROG_CC uses a default, and you as package author have
control over that default if you don't like autoconf's choice of '-g' or
'-g -O2'. However, autoconf's default is safe for all compilers,
whereas you have to be careful when using a default like '-g3 -O0' that
is gcc-specific.
> 4. Works even when the user specifies CFLAGS that do not change the
> optimization level
>
> Thank you all for your help,
>
--
Eric Blake [email protected] +1-801-349-2682
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Autoconf mailing list [email protected] https://lists.gnu.org/mailman/listinfo/autoconf
