tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Packages not honouring CFLAGS
Hi tech-pkg@,
On 08/08/2015 20:15, David Holland wrote:
> On Fri, Aug 07, 2015 at 04:48:12PM +0200, Pierre Pronchery wrote:
> > - for those using regular Makefiles it should ideally be a matter of
> > MAKE_FLAGS+=CFLAGS=${CFLAGS:Q} but I expect many headaches there :(
>
> Put it in MAKE_ENV (and actually, I think it already is) otherwise
> overriding any settings the package itself attempts to make is bound
> to break things. Also, in the environment it's more likely to be
> inherited by submakes.
It looks like it is set here indeed:
mk/bsd.pkg.mk
159 ALL_ENV+= CFLAGS=${CFLAGS:M*:Q}
Some packages are not affected by the environment - including mine
(deforaos-*). Those which do are apparently fine already; I think this
is how GNU autoconf catches the relevant flags for instance.
As a software author, I do not like when the build process is silently
affected by the environment. This has bitten me a lot in the past,
particularly when working on Debian packages: they do (did?) not filter
the environment in any way while building, with many packages shipping
impossible to build without the same (undocumented) environment as the
maintainer - or worse, building differently.
This is why the build system of my DeforaOS stack does not accept any
default value from the environment, but allows them to be overridden
explicitly.
> The problem is: standard practice for a long, long time among people
> who know what they're doing has been to always explicitly set CFLAGS
> (as well as LDFLAGS, CC, and so on) to avoid accidentally using a
> default value built into make. Because, historically, vendor makes
> shipped with all kinds of unbelievable crap defaults, and failing to
> discard them was sure to get you build failures on buggix systems.
>
> Every single such package will need to be patched. Some have been;
> most haven't.
Ok.
> If you want to make a significant dent in this you need (a) a way to
> determine if CFLAGS and LDFLAGS were actually honored for any given
> build product (PIE will probably do), (b) a way to make sure the
> output of all package builds conforms (this probably requires a custom
> check pass to find/test all executables), (c) run an ongoing bulk
> build series dedicated to the proposition, and (d) start slogging.
Yes, this is what I am currently doing. It works well for CFLAGS so far.
I suspect it will be more difficult for LDFLAGS, but the work on CFLAGS
should help determining which packages are affected.
> > Using wrappers does make a lot of sense, since quite a few packages may
> > well end up with contradictory flags - and this is harder to fix than
> > just adding CFLAGS.
>
> ...this is more likely if you inject more CFLAGS with the wrappers, I
> would think.
>
> > But even then, paving the way for proper
> > CFLAGS/LDFLAGS support should also relieve the wrappers from dealing
> > with situations with flags mixing compilers, platforms or whatnot.
>
> That is unlikely. I'm not sure what you think constitutes 'proper'
> CFLAGS/LDFLAGS support.
If a package expects to be built by, say, MSVC and uses flags specific
for it, then a wrapper for pkgsrc has to understand these flags to
remove (or convert) them. Since we support many platform/compiler
combinations, each wrapper should then (in theory) understand each of
those combinations, for every underlying tool ($CC, $LD, $AR...).
In practice most OSS projects either expect GNU/Linux/gcc or somehow
detect or tolerate other platforms, so we do not have this problem. But
if there was much more diversity we would certainly need a way to remove
those platform-specific CFLAGS and LDFLAGS before entering any wrapper
(this is what I meant by "proper support").
HTH,
--
khorben
Home |
Main Index |
Thread Index |
Old Index