qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
@ 2015-11-17 17:59 Daniel P. Berrange
  2015-11-17 18:37 ` Stefan Weil
  2015-11-17 19:06 ` Eric Blake
  0 siblings, 2 replies; 6+ messages in thread
From: Daniel P. Berrange @ 2015-11-17 17:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Gerd Hoffmann, Dr. David Alan Gilbert

Suggested in

  https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03298.html

The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later
invoked by the developer 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 the
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.
All these key env variables should be recorded in the
config.status script.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---

Open question: are there more env vars we should preserve ?

 configure | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/configure b/configure
index d7472d7..9c9f6ac 100755
--- a/configure
+++ b/configure
@@ -5925,6 +5925,24 @@ 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
+
+    if test -n "${!envname}"
+    then
+	echo "$envname=\"${!envname}\"" >> config.status
+	echo "export $envname" >> config.status
+    fi
+}
+
+# Preserve various env variables that influence what
+# features/build target configure will detect
+preserve_env PATH
+preserve_env LD_LIBRARY_PATH
+preserve_env PKG_CONFIG_LIBDIR
+preserve_env PKG_CONFIG_PATH
+
 printf "exec" >>config.status
 printf " '%s'" "$0" "$@" >>config.status
 echo >>config.status
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
  2015-11-17 17:59 [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status Daniel P. Berrange
@ 2015-11-17 18:37 ` Stefan Weil
  2015-11-17 19:06 ` Eric Blake
  1 sibling, 0 replies; 6+ messages in thread
From: Stefan Weil @ 2015-11-17 18:37 UTC (permalink / raw)
  To: Daniel P. Berrange, qemu-devel
  Cc: Peter Maydell, Gerd Hoffmann, Dr. David Alan Gilbert


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Am 17.11.2015 um 18:59 schrieb Daniel P. Berrange:
> Suggested in
>
>   https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03298.html
>
> The config.status script is auto-generated by configure upon
> completion. The intention is that config.status can be later
> invoked by the developer 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 the
> 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.
> All these key env variables should be recorded in the
> config.status script.
>
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>
> Open question: are there more env vars we should preserve ?

Probably yes. They can be added as soon as we discover them.

>
>  configure | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/configure b/configure
> index d7472d7..9c9f6ac 100755
> --- a/configure
> +++ b/configure
> @@ -5925,6 +5925,24 @@ 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
> +
> +    if test -n "${!envname}"
> +    then
> +    echo "$envname=\"${!envname}\"" >> 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 PATH
> +preserve_env LD_LIBRARY_PATH
> +preserve_env PKG_CONFIG_LIBDIR
> +preserve_env PKG_CONFIG_PATH
> +
>  printf "exec" >>config.status
>  printf " '%s'" "$0" "$@" >>config.status
>  echo >>config.status

With the additional code for unset variables this
patch is nearly perfect. Even without it, it is a
reasonable improvement.

Reviewed-by: Stefan Weil <sw@weilnetz.de>

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBCAAGBQJWS3P1AAoJEOCMIdVndFCttNMP/jhmKG7da1uAKk5+9YPWRrPr
l+kpWW9CFYMvddTL1jdfjdgu3d+Pb8EMPcGRxdU01W8TNj6+4UuP9t1BxqG/TRNi
kENa6czzJayY0c8axtgS24jGQfFo6b5zboH3TN+XOtK89SpwB+SXXGwglU/3/UNS
cU/yrFpWrCDrsH4XwyTXlJb5870VcfFtO1584yLR1noaytYFz4tI1ihvyMdMc8pJ
rTARuJkYRez+3oZGfF/GDfPZkfZeuxiYTdKgIfjLxUSRf5NO8+SMHY4jD3G/6eow
iJWOjjB2A42mTcRenomuj0XoSt143UQOj67hsFvJt/3FMlBR7z4feUxydzHsIx34
LGDazNUo+eAxx0wWqP2/RtSRdU9rdzZR0pdkMwLJQd8zGlgXB9sIwcDggJE8CWIZ
Mf05qCWGLkHbujFo3pkzJz71isOtBi8kCu+n09iK5DjIvSa4RwqPHyY5qGVrExmM
lQe+GA9NGq23ceNaZDoTbpZhxzNcjvgKyiV19YkR971IQa7opR7BOn40iDD7upqL
Nylw87TUPDAzqsc8i8fZaKo4bxUERqBJMsBzUZMGQMaUjAL5XC3TAWKMiT3boyZ3
+UlsC9yuSwGPGA7g/+mwxtB7aFvUwglt56JzCU1uWeWUEnjX4qrXpXwhB66RuyY+
lgt4QOEeUPwKAxvuv0dK
=SenJ
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
  2015-11-17 17:59 [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status Daniel P. Berrange
  2015-11-17 18:37 ` Stefan Weil
@ 2015-11-17 19:06 ` Eric Blake
  2015-11-18 10:03   ` Daniel P. Berrange
  2015-11-18 15:52   ` Stefan Weil
  1 sibling, 2 replies; 6+ messages in thread
From: Eric Blake @ 2015-11-17 19:06 UTC (permalink / raw)
  To: Daniel P. Berrange, qemu-devel
  Cc: Peter Maydell, Gerd Hoffmann, Dr. David Alan Gilbert

[-- Attachment #1: Type: text/plain, Size: 2445 bytes --]

On 11/17/2015 10:59 AM, Daniel P. Berrange wrote:
> Suggested in
> 
>   https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03298.html
> 
> The config.status script is auto-generated by configure upon
> completion. The intention is that config.status can be later
> invoked by the developer 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 the
> 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.
> All these key env variables should be recorded in the
> config.status script.
> 
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> 
> Open question: are there more env vars we should preserve ?

Yes - anything that autoconf would mark as precious.  See below.

> +++ b/configure
> @@ -5925,6 +5925,24 @@ 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
> +
> +    if test -n "${!envname}"

Bashism, but configure is /bin/sh.  This won't work on dash :(

I think you'll have to use eval, and we'll just have to audit that
preserve_env can never be called with suspicious text where eval would
open a security hole.

> +    then
> +	echo "$envname=\"${!envname}\"" >> config.status

Another use of the bashism.

> +	echo "export $envname" >> config.status
> +    fi
> +}
> +
> +# Preserve various env variables that influence what
> +# features/build target configure will detect
> +preserve_env PATH
> +preserve_env LD_LIBRARY_PATH
> +preserve_env PKG_CONFIG_LIBDIR
> +preserve_env PKG_CONFIG_PATH
> +

Autoconf preserves CC, CFLAGS, LDFLAGS, LIBS, CPPFLAGS, and CPP by
default.  Also, PKG_CONFIG is typically preserved.  If you run libvirt's
'./configure --help', you'll also notice a bunch of *_CFLAGS and *_LIBS
in the precious list starting under the label "Some influential
environment variables".

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
  2015-11-17 19:06 ` Eric Blake
@ 2015-11-18 10:03   ` Daniel P. Berrange
  2015-11-18 15:40     ` Eric Blake
  2015-11-18 15:52   ` Stefan Weil
  1 sibling, 1 reply; 6+ messages in thread
From: Daniel P. Berrange @ 2015-11-18 10:03 UTC (permalink / raw)
  To: Eric Blake
  Cc: Peter Maydell, qemu-devel, Dr. David Alan Gilbert, Gerd Hoffmann

On Tue, Nov 17, 2015 at 12:06:55PM -0700, Eric Blake wrote:
> On 11/17/2015 10:59 AM, Daniel P. Berrange wrote:
> > Suggested in
> > 
> >   https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03298.html
> > 
> > The config.status script is auto-generated by configure upon
> > completion. The intention is that config.status can be later
> > invoked by the developer 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 the
> > 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.
> > All these key env variables should be recorded in the
> > config.status script.
> > 
> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> > ---
> > 
> > Open question: are there more env vars we should preserve ?
> 
> Yes - anything that autoconf would mark as precious.  See below.
> 
> > +++ b/configure
> > @@ -5925,6 +5925,24 @@ 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
> > +
> > +    if test -n "${!envname}"
> 
> Bashism, but configure is /bin/sh.  This won't work on dash :(
> 
> I think you'll have to use eval, and we'll just have to audit that
> preserve_env can never be called with suspicious text where eval would
> open a security hole.

Ok, shouldn't be a big deal

> > +    then
> > +	echo "$envname=\"${!envname}\"" >> config.status
> 
> Another use of the bashism.
> 
> > +	echo "export $envname" >> config.status
> > +    fi
> > +}
> > +
> > +# Preserve various env variables that influence what
> > +# features/build target configure will detect
> > +preserve_env PATH
> > +preserve_env LD_LIBRARY_PATH
> > +preserve_env PKG_CONFIG_LIBDIR
> > +preserve_env PKG_CONFIG_PATH
> > +
> 
> Autoconf preserves CC, CFLAGS, LDFLAGS, LIBS, CPPFLAGS, and CPP by
> default.  Also, PKG_CONFIG is typically preserved.  If you run libvirt's
> './configure --help', you'll also notice a bunch of *_CFLAGS and *_LIBS
> in the precious list starting under the label "Some influential
> environment variables".

I'll add in env vars for all the commands like CC, CPP, MAKE, etc that
QEMU's configure uses.  I've tried preserving various *FLAGS vars but
the problem here is that configure will modify/augment those variables
while it is running, so when we get to preserve the original flags we
only have the munged version. In any case recommendation is to use
--extra-cflags rather than CFLAGS, so I figure its not a big deal to
skip preserving CFLAGS/LDFLAGS

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
  2015-11-18 10:03   ` Daniel P. Berrange
@ 2015-11-18 15:40     ` Eric Blake
  0 siblings, 0 replies; 6+ messages in thread
From: Eric Blake @ 2015-11-18 15:40 UTC (permalink / raw)
  To: Daniel P. Berrange
  Cc: Peter Maydell, qemu-devel, Dr. David Alan Gilbert, Gerd Hoffmann

[-- Attachment #1: Type: text/plain, Size: 1198 bytes --]

On 11/18/2015 03:03 AM, Daniel P. Berrange wrote:

>>
>> Autoconf preserves CC, CFLAGS, LDFLAGS, LIBS, CPPFLAGS, and CPP by
>> default.  Also, PKG_CONFIG is typically preserved.  If you run libvirt's
>> './configure --help', you'll also notice a bunch of *_CFLAGS and *_LIBS
>> in the precious list starting under the label "Some influential
>> environment variables".
> 
> I'll add in env vars for all the commands like CC, CPP, MAKE, etc that
> QEMU's configure uses.  I've tried preserving various *FLAGS vars but
> the problem here is that configure will modify/augment those variables
> while it is running, so when we get to preserve the original flags we
> only have the munged version. In any case recommendation is to use
> --extra-cflags rather than CFLAGS, so I figure its not a big deal to
> skip preserving CFLAGS/LDFLAGS

Just one more case where we (perhaps needlessly) diverge from autotools
and make distro's life harder.  Oh well, it's not your fault that we
aren't using CFLAGS like other projects, and not preserving CFLAGS does
not change that.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status
  2015-11-17 19:06 ` Eric Blake
  2015-11-18 10:03   ` Daniel P. Berrange
@ 2015-11-18 15:52   ` Stefan Weil
  1 sibling, 0 replies; 6+ messages in thread
From: Stefan Weil @ 2015-11-18 15:52 UTC (permalink / raw)
  To: Eric Blake, Daniel P. Berrange, qemu-devel
  Cc: Peter Maydell, Gerd Hoffmann, Dr. David Alan Gilbert

Am 17.11.2015 um 20:06 schrieb Eric Blake:
> On 11/17/2015 10:59 AM, Daniel P. Berrange wrote:
[...]
>> +++ b/configure
>> @@ -5925,6 +5925,24 @@ 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
>> +
>> +    if test -n "${!envname}"
> Bashism, but configure is /bin/sh.  This won't work on dash :(
>
> I think you'll have to use eval, and we'll just have to audit that
> preserve_env can never be called with suspicious text where eval would
> open a security hole.

You could also call the function with two arguments ...
preserve_env PATH "$PATH"
... and use the 2nd argument in the test.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-11-18 15:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-17 17:59 [Qemu-devel] [PATCH] configure: preserve various environment variables in config.status Daniel P. Berrange
2015-11-17 18:37 ` Stefan Weil
2015-11-17 19:06 ` Eric Blake
2015-11-18 10:03   ` Daniel P. Berrange
2015-11-18 15:40     ` Eric Blake
2015-11-18 15:52   ` Stefan Weil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).