[OE-core] [RFC PATCH 1/5] base.bbclass: detect when S has been set incorrectly
Paul Eggleton
paul.eggleton at linux.intel.com
Mon Jan 12 15:53:56 UTC 2015
Hi Petter,
On Saturday 10 January 2015 15:40:10 Petter Mabäcker wrote:
> Currently base.bbclass is creating S if it's not created by unpacking
> an archive or fetching a repository. If we avoid creating S we can detect
> when S hasn't been set correctly, since it will not exist. Then we can tell
> the user that they should set S to a proper value, instead of just failing
> with odd errors in later tasks.
>
> Besides removing the auto-creation of S this change will introduce a warning
> if S is set incorrectly. The reason for not display an error and return is
> due to all external layers that might have recipes that will fail otherwise
> and that might be a bit to hard to start with. So use a warning until
> people have had a chance to cleanup affected recipes.
>
> [YOCTO #5627]
>
> Signed-off-by: Petter Mabäcker <petter at technux.se>
> ---
> meta/classes/base.bbclass | 17 +++++++++++++----
> 1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
> index de50be1..789af3b 100644
> --- a/meta/classes/base.bbclass
> +++ b/meta/classes/base.bbclass
> @@ -113,7 +113,6 @@ python base_do_fetch() {
>
> addtask unpack after do_fetch
> do_unpack[dirs] = "${WORKDIR}"
> -do_unpack[cleandirs] = "${S}/patches"
> python base_do_unpack() {
> src_uri = (d.getVar('SRC_URI', True) or "").split()
> if len(src_uri) == 0:
> @@ -121,11 +120,21 @@ python base_do_unpack() {
>
> rootdir = d.getVar('WORKDIR', True)
>
> + # Ensure that we cleanup ${S}/patches
> + # TODO: Investigate if we can remove
> + # the entire ${S} in this case.
> + s_dir = d.getVar('S', True)
> + p_dir = os.path.join(s_dir, 'patches')
> + bb.utils.remove(p_dir, True)
> +
> try:
> fetcher = bb.fetch2.Fetch(src_uri, d)
> fetcher.unpack(rootdir)
> except bb.fetch2.BBFetchException as e:
> raise bb.build.FuncFailed(e)
> +
> + if not os.path.exists(s_dir):
> + bb.warn("%s ('S') don't exist, you must set 'S' to a proper value"
> % s_dir) }
>
> def pkgarch_mapping(d):
> @@ -220,7 +229,7 @@ CONFIGURESTAMPFILE = "${WORKDIR}/configure.sstate"
> CLEANBROKEN = "0"
>
> addtask configure after do_patch
> -do_configure[dirs] = "${S} ${B}"
> +do_configure[dirs] = "${B}"
> do_configure[deptask] = "do_populate_sysroot"
> base_do_configure() {
> if [ -n "${CONFIGURESTAMPFILE}" -a -e "${CONFIGURESTAMPFILE}" ]; then
> @@ -238,7 +247,7 @@ base_do_configure() {
> }
>
> addtask compile after do_configure
> -do_compile[dirs] = "${S} ${B}"
> +do_compile[dirs] = "${B}"
> base_do_compile() {
> if [ -e Makefile -o -e makefile -o -e GNUmakefile ]; then
> oe_runmake || die "make failed"
> @@ -248,7 +257,7 @@ base_do_compile() {
> }
>
> addtask install after do_compile
> -do_install[dirs] = "${D} ${S} ${B}"
> +do_install[dirs] = "${D} ${B}"
> # Remove and re-create ${D} so that is it guaranteed to be empty
> do_install[cleandirs] = "${D}"
This looks reasonable to me; however I'm sure I recall Chris talking about
some kind of complication with this issue a year or so ago - Chris do you
remember what that was about?
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
More information about the Openembedded-core
mailing list