On 04/09/2018 14:36, Daniel P. Berrangé wrote: > The config.status script is auto-generated by configure upon > completion. The intention is that config.status can be later invoked by > the developer directly, or by make indirectly, to re-detect the same > environment that configure originally used. > > The current config.status script, however, only contains a record of the > command line arguments to configure. Various environment variables have > an effect on what configure will find. In particular PKG_CONFIG_LIBDIR & > PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The > PATH var will affect what toolchain binaries and XXXX-config scripts are > found. The LD_LIBRARY_PATH var will affect what libraries are > found. Most commands have env variables that will override the name/path > of the default version configure finds. > > All these key env variables should be recorded in the config.status script. > > Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU > deals with those differently, expecting extra flags to be set using > configure args, rather than env variables. At the end of the script we > also don't have the original values of those env vars, as we modify them > during configure. > > Reviewed-by: Eric Blake <ebl...@redhat.com> > Reviewed-by: Stefan Weil <s...@weilnetz.de> > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> > --- > configure | 40 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > > Previously sent 3 (!) years ago: > > v1: http://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03953.html > v2: http://lists.gnu.org/archive/html/qemu-devel/2015-11/msg04074.html > > Changed in v3: > > - Added 'unset' code (Stefan) > - Clarify CFLAGS handling (Eric) > > > diff --git a/configure b/configure > index e7bddc04b0..718e89724a 100755 > --- a/configure > +++ b/configure > @@ -7518,6 +7518,46 @@ cat <<EOD >config.status > # Compiler output produced by configure, useful for debugging > # configure, is in config.log if it exists. > EOD > + > +preserve_env() { > + envname=$1 > + > + eval envval=\$$envname > + > + if test -n "$envval" > + then > + echo "$envname='$envval'" >> config.status > + echo "export $envname" >> config.status > + else > + echo "unset $envname" >> config.status > + fi > +} > + > +# Preserve various env variables that influence what > +# features/build target configure will detect > +preserve_env AR > +preserve_env AS > +preserve_env CC > +preserve_env CPP > +preserve_env CXX > +preserve_env INSTALL > +preserve_env LD > +preserve_env LD_LIBRARY_PATH > +preserve_env LIBTOOL > +preserve_env MAKE > +preserve_env NM > +preserve_env OBJCOPY > +preserve_env PATH > +preserve_env PKG_CONFIG > +preserve_env PKG_CONFIG_LIBDIR > +preserve_env PKG_CONFIG_PATH > +preserve_env PYTHON > +preserve_env SDL_CONFIG > +preserve_env SDL2_CONFIG > +preserve_env SMBD > +preserve_env STRIP > +preserve_env WINDRES > + > printf "exec" >>config.status > printf " '%s'" "$0" "$@" >>config.status > echo ' "$@"' >>config.status >
Queued, thanks. Paolo