Re: bbappend on top of bbappend


Paul D. DeRocco
 

From: Paul Eggleton

On Friday 16 August 2013 16:22:00 Paul D. DeRocco wrote:
In meta-oe/recipes-graphics/xinput-calibrator (Danny
branch, currently
used by Gumstix), there's a recipe called
xinput-calibrator-git.bb, which
installs a script for running a touchscreen calibration app
if not already calibrated.

In
meta-openembedded/meta-systemd/meta-oe/recipes-graphics/xinput
-calibrator,
there's a bbappend for this recipe, which declares a local
file called
xinput-calibrator.service, which is supposed to run the
above script on
startup. It inherits the systemd bbclass, which I assume
knows how to
install this service file automagically, since there's no explicit
do_install copying the file anywhere.
The systemd.bbclass we now have in OE-Core (as of dylan) does
not handle this
automatically. The old one in meta-systemd does appear to though.

The trouble is, on my Gumstix, the service fails because it needs a
DISPLAY environment variable to tell it what display to calibrate. I
figured the simplest thing to do would be to add an
Environment=DISPLAY=:0
line to the service unit file.
FWIW, when xinput-calibrator was moved over to OE-Core it was
determined that
this shouldn't even be started as a service by systemd, but
instead launched
using Xsession.d. You may have better results if you bring in
the recipe from
OE-Core master and use that instead.
Since I'm not running I GUI, but needed an X session, I created a systemd
unit to start a dummy X session, using "sleep" as the dummy client. Then,
I can scribble on the screen from my python scripts run from the root
command line. So I solved it by having the xinput-calibrator service run
after my X session starts. I'll look at putting it in Xsession.d instead,
and see if that is cleaner.

But I'd rather just provide my own
version of the file, and use another .bbappend to prepend its file
location to FILESEXTRAPATHS, overriding the one in the
systemd .bbappend file.

So I tried that, just putting the following two lines into my own
.bbappend:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
PRINC := "${@int(PRINC) + 1}"

and of course putting the tweaked service file into my
files subdirectory.
<snip>

I read somewhere that stacked bbappends are handled in the
order of layer
priority. Mine is 5, the meta-systemd layer is 7. I don't
know which is
"higher", or if one wants a higher or lower priority in
order to be the last one to prepend to the path.
They will be applied in ascending order, so anything in the
bbappend from a
layer with a higher layer priority number takes precedence.
After I did a clean and a clean_sstate, the dual bbappends worked as
expected.

I'm learning from experience to clean things manually, to avoid problems,
but sometimes I'm just waving a dead chicken over it. I don't really know
what these things do, or in what situations they should or shouldn't be
necessary. For instance, I've never found an explanation of what shared
state really is, with sufficient specificity that I can predict, "Oh, for
that I need to clean the sstate, not just the build tree." Second, it
seems like clean_sstate does a clean, but I'm not sure clean doesn't do
something else that clean_sstate doesn't do.

One more thing puzzles me. The original bbappend, which creates a service
unit, contained these six lines:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PRINC := "${@int(PRINC) + 2}"
inherit systemd
SRC_URI += "file://xinput-calibrator.service"
SYSTEMD_PACKAGES = "${PN}-systemd"
SYSTEMD_SERVICE = "${PN}.service"

Since I only wanted to replace the file, I thought it should be sufficient
to put the following in my bbappend:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
PRINC := "${@int(PRINC) + 1}"

It didn't work, though. I blindly copied all six lines into my bbappend,
and it worked. I suspect the systemd lines were necessary, though. I'm
wondering why adding another copy of the string
"file://xinput-calibrator.service" to SRC_URI is necessary. Or am I
imagining things? I do that sometimes.

--

Ciao, Paul D. DeRocco
Paul mailto:pderocco@ix.netcom.com

Join yocto@lists.yoctoproject.org to automatically receive all group messages.