[oe] Bitbake command to clean dependees ?

Jacques Guillou jacques.guillou at pelagicore.com
Mon Jan 20 16:28:18 UTC 2014


Hello,

Thank you for your answer.

What I would like to do is to be able to trigger the build of a
complete image whenever a new commit has been pushed into a specific
GIT repository. I understand that the normal way to proceed is to
update the corresponding recipe so that it points to the new commit.
Since the recipe would have been updated, the packages which have a
dependency to the updated packages would be rebuilt as well, but I
would really prefer a solution where I don't have to update any
recipe. Please note that what I am trying to do would only be good for
internal testing. I understand that it is a much better practice to
use well defined commit-ID as soon as some kind of delivery, since it
is the only way to properly identify a version.

I am currently testing using a recipe which contains the following lines:

SRC_URI = "git://git@git.mycompany.com/mycomponent.git;protocol=ssh;branch=master"
SRCREV = "master"
PV = "1.0${SRCREV}"

Using that recipe, if I first clean the package with "bitbake -c
cleanall mypackage" and trigger a complete image build, bitbake always
retrieves the head of the master branch when the package is to be
fetched, and compiles the package, which is the result I expect.
Unfortunately, after that package is rebuilt, bitbake seems to
consider that the dependees of that package do not have to be rebuilt,
since no change has been done to any recipe.

Is there any way to get this to work properly ? Maybe there is a way
to tell bitbake to dynamically generate the value of the "PV"
attribute based on the GIT commit-ID which is actually used ?

Thank you

Best regards
Jacques



On 20 January 2014 16:34, Paul Eggleton <paul.eggleton at linux.intel.com> wrote:
> Hi Jacques,
>
> On Monday 20 January 2014 15:57:39 Jacques Guillou wrote:
>> By default (at least with Yocto), it seems like forcing the rebuild of a
>> specific package (via "bitbake -c cleanall MyPackage") does not mark
>> dependees as "to be rebuilt", which is a problem for me. Is there a way to
>> change that behavior ? Maybe there is a specific command or parameters to
>> be passed to bitbake so that performing a "cleanall" on a given package
>> also performs a "cleanall" on all dependees ?
>
> OpenEmbedded uses signatures for each task (derived from the task's
> dependencies, both in terms of variable values and other tasks) to determine
> whether tasks need re-executing; so, for example if you changed SRC_URI in a
> recipe then the system knows that do_fetch depends upon the value of SRC_URI,
> so the signature of do_fetch changes and it will re-execute followed by items
> it depends upon such as do_unpack, do_patch etc. for the same recipe. Just
> forcing a recipe to rebuild by cleaning it with -c cleanall and then building
> it again doesn't change any of its task signatures, so BitBake will assume no
> dependees need rebuilding.
>
> The correct way to force a task and all of its dependencies to re-execute is
> to use bitbake -c <command> -f or bitbake -C <command>, where <command> is the
> task name without the do_ prefix. However, under most circumstances the build
> system is already capable of determining itself when tasks need re-executing,
> e.g. if you change a variable value or edit a local file mentioned in SRC_URI.
> The question is why do you want to do this forcing, i.e. what change(s) have
> you made that the build system otherwise would not be picking up?
>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre



More information about the Openembedded-devel mailing list