libcap: make -e causing trouble
oe-core 51540b64f62234c145fc32cfa3fbbaaebbeece08 altered libcap.inc (at the time) to append to EXTRA_OEMAKE rather than assign to it. The default value for EXTRA_OEMAKE contains "-e". This means that the change caused "-e" to be passed to make for the first time.
Unfortunately passing "-e" subtly changes the behaviour of libcap's Make.Rules under recursive make when prefix="" (which it is for us since we're using meta-micro.) Here's a snippet of Make.rules:
ifdef prefix
exec_prefix=$(prefix)
lib_prefix=$(exec_prefix)
inc_prefix=$(lib_prefix)
man_prefix=$(prefix)/share
else
prefix=/usr
exec_prefix=
lib_prefix=$(exec_prefix)
inc_prefix=$(prefix)
man_prefix=$(prefix)/share
endif
Without "-e" the prefix comes from the command line in both the parent and submakes. This takes precedence over any attempt to reassign it with a simple "=" operation so the headers are correctly installed in (empty string)/include.
With "-e" the prefix still comes from the command line in the parent make but from the environment in the submake. The attempt to assign it fails in the parent make as before, but not in the submake so the headers are installed incorrectly in /usr/include.
In all four cases the "ifdef prefix" else clause is executed.
The quick-and-easy fix for this is simply to pass prefix="${prefix}/" but it's really just working around the problem.
Alternatively we could go back to assigning EXTRA_OEMAKE rather than appending to it.
What would be the preferred course of action?
Thanks.
Mike.
Quoted 34 lines · Mike Crowe
oe-core
51540b64f62234c145fc32cfa3fbbaaebbeece08altered libcap.inc (at the time) to append toEXTRA_OEMAKErather than assign to it. The default value forEXTRA_OEMAKEcontains "-e". This means that the change caused "-e" to be passed to make for the first time.Unfortunately passing "-e" subtly changes the behaviour of libcap's Make.Rules under recursive make when prefix="" (which it is for us since we're using meta-micro.) Here's a snippet of Make.rules:
ifdef prefix
exec_prefix=$(prefix)
lib_prefix=$(exec_prefix)
inc_prefix=$(lib_prefix)
man_prefix=$(prefix)/share
else
prefix=/usr
exec_prefix=
lib_prefix=$(exec_prefix)
inc_prefix=$(prefix)
man_prefix=$(prefix)/share
endifWithout "-e" the prefix comes from the command line in both the parent and submakes. This takes precedence over any attempt to reassign it with a simple "=" operation so the headers are correctly installed in (empty string)/include.
With "-e" the prefix still comes from the command line in the parent make but from the environment in the submake. The attempt to assign it fails in the parent make as before, but not in the submake so the headers are installed incorrectly in
/usr/include.In all four cases the "ifdef prefix" else clause is executed.
Quoted 8 lines
The quick-and-easy fix for this is simply to pass prefix="${prefix}/" but it's really just working around the problem.
Alternatively we could go back to assigning
EXTRA_OEMAKErather than appending to it.What would be the preferred course of action?
Given our use of make -e (with MAKEFLAGS= to try to prevent it from flowing into submakes) was always a hack to try to let things "just work", I think wherever possible we should stop relying on it, and explicitly pass everything the way that particular make-based buildsystem expects, personally. Better to be explicit than to rely on implicit "magic". Further, that behavior encourages recipe maintainers to not even read the buildsystem of the project they're creating a recipe for, which often leads to problems down the road..
Signature · 5 lines
Christopher Larson clarson at kergoth dot com Founder - BitBake, OpenEmbedded, OpenZaurus Maintainer - Tslib Senior Software Engineer, Mentor Graphics
Quoted 4 lines · Christopher Larson
Quoted 3 lines · Mike Crowe
Unfortunately passing "-e" subtly changes the behaviour of libcap's Make.Rules under recursive make when prefix="" (which it is for us since we're using meta-micro.)
[snip]
Quoted 8 lines
Given our use of make -e (with MAKEFLAGS= to try to prevent it from flowing into submakes) was always a hack to try to let things "just work", I think wherever possible we should stop relying on it, and explicitly pass everything the way that particular make-based buildsystem expects, personally. Better to be explicit than to rely on implicit "magic". Further, that behavior encourages recipe maintainers to not even read the buildsystem of the project they're creating a recipe for, which often leads to problems down the road..
I completely agree, but what is the best way to avoid "-e". Is there ever likely to be anything else in EXTRA_OEMAKE that would need to be preserved?
I notice that autotools.bbclass just sets EXTRA_OEMAKE = "" so perhaps it's relatively safe to just assign it directly.
Thanks.
Mike.
Quoted 18 lines · Mike Crowe
Quoted 3 lines · Christopher Larson
Quoted 2 lines · Mike Crowe
Unfortunately passing "-e" subtly changes the behaviour of libcap's Make.Rules under recursive make when prefix="" (which it is for us
since
Quoted 1 line
Quoted 1 line
we're using meta-micro.)
[snip]
Quoted 1 line
Given our use of make -e (with MAKEFLAGS= to try to prevent it from
flowing
Quoted 1 line
into submakes) was always a hack to try to let things "just work", I
think
Quoted 5 lines
wherever possible we should stop relying on it, and explicitly pass everything the way that particular make-based buildsystem expects, personally. Better to be explicit than to rely on implicit "magic". Further, that behavior encourages recipe maintainers to not even read the buildsystem of the project they're creating a recipe for, which often
Quoted 8 lines
leads
Quoted 1 line
to problems down the road..
I completely agree, but what is the best way to avoid "-e". Is there ever likely to be anything else in
EXTRA_OEMAKEthat would need to be preserved?I notice that autotools.bbclass just sets
EXTRA_OEMAKE= "" so perhaps it's relatively safe to just assign it directly.
Yeah, generally it's safe. The recipe knows more about a make-based buildsystem than any of our classes do anyway, since there are no real standards. Autotools is a different story, of course.
Signature · 5 lines
Christopher Larson clarson at kergoth dot com Founder - BitBake, OpenEmbedded, OpenZaurus Maintainer - Tslib Senior Software Engineer, Mentor Graphics