[buildd-tools-devel] Bug#775539: sbuild: overwrites DEB_BUILD_OPTIONS environment variable when cross-building
Johannes Schauer
josch at debian.org
Tue Jan 26 14:42:13 UTC 2016
Hi,
Quoting Johannes Schauer (2015-12-24 01:08:39)
> So I guess a sensible default would be either put this in ~/.sbuildrc:
>
> $build_environment = %ENV;
>
> Or to be more conservative and say:
>
> $build_environment = {
> 'DEB_BUILD_OPTIONS' => $ENV{'DEB_BUILD_OPTIONS'}
> };
I can confirm that the latter of the above two options indeed works.
> Or to change the default of the BUILD_ENVIRONMENT config variable in Conf.pm
> from the empty hash to %ENV.
>
> Or lastly, to change the check that you quoted above to also check
> $ENV{'DEB_BUILD_OPTIONS'} and concatenate accordingly.
Neither of the above is a sensible solution by itself. A greater pictures has
to be considered.
There are four ways for the user to influence the environment variables seen by
dpkg-buildpackage:
- running sbuild with the desired environment variables set
- setting $build_environment in ~/.sbuildrc
- setting $environment_filter in ~/.sbuildrc
- setting $build_env_cmnd in ~/.sbuildrc to a command that sets some
environment variables
We'll omit the last option here because it is very limited (the command cannot
have any arguments, for example).
There are two more sources for environment variables:
- sbuild itself sets variables like APT_CONFIG and PATH
- the chroot backend. For example schroot will set a number of SCHROOT_*
variables
And to top it off, there are also some environment variables like
DEB_BUILD_OPTIONS where one has the choice between appending to them or just
replacing their existing value.
Now preferably sbuild should do the right thing while at the same time not
removing control from the user.
There seem to four general options:
1) Environment variable values from the environment sbuild is run in take
precedence over values set for the same variable in either ~/.sbuildrc or
by sbuild itself.
2) Environment variable values from the environment sbuild is run in are
overwritten by values set for the same variables in either ~/.sbuildrc or
by sbuild itself.
3) Environment variable values from the environment sbuild is run in take
precedence over values set for the same variable in ~/.sbuildrc but are
overwritten by the value that sbuild conditionally itself sets.
4) Environment variable values from the environment sbuild is run in are
merged with values set for the same variable from ~/.sbuildrc or set by
sbuild itself.
The sad thing is, depending on the environment variable we look at, each of the
four approaches presented above seems to have its merit:
1) We want this for variables like CC or CXX because I want to set these on a
per-build basis and not be influenced by my ~/.sbuildrc or whatever sbuild
thinks is best.
2) We want this for variables like HOME, SHELL or APT_CONFIG where the value
set in the environment where sbuild is run in would negatively influence
the build.
3) We want this for variables for which having an overwritable default in
sbuildrc is sensible but where sbuild might want to have the final say in
certain circumstances. For example sbuild decides to only set CONFIG_SITE
when cross building.
4) We want this with variables like DEB_BUILD_OPTIONS though it is unclear how
the user would then be able to "unset" certain options which are either set
in ~/.sbuildrc or by sbuild itself (see the nocheck option set when cross
building).
Does anybody see a sane solution that unifies all these use cases in a nice
manner? Otherwise we'll end up special casing every variable, introducing new
options and command line parameters for each (see PATH and LD_LIBRARY_PATH) and
blowing up the documentation and the code.
To start simplifying things I'd like to undo sbuild setting the nocheck
DEB_BUILD_OPTIONS. This will solve the problem of sbuild overwriting the value
of the variable and at the same time not create a situation where it is not
possible to cross build without "nocheck". At least not without having yet
another configuration variable being introduced.
What do you think?
cheers, josch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: signature
URL: <http://lists.alioth.debian.org/pipermail/buildd-tools-devel/attachments/20160126/51f8aace/attachment.sig>
More information about the Buildd-tools-devel
mailing list