*Very* helpful stuff.

I have re-created the tree you described, and everything seems to work. In 
particular, bitbake-layers seems happy. I tried executing it against BitBake 
1.12.0 and it succeeded.  FYI, it failed against the current BitBake master, 
which is 1.16.0.

I have some additional questions below.  You've already been so helpful that 
I'm reluctant to impose … but I'm going to try anyway :)

On Oct 4, 2012, at 1:58 PM, Rudolf Streif 
<rudolf.str...@linux.com<mailto:rudolf.str...@linux.com>> wrote:


My Bitbake "Hello World" is a little more than a basic "Hello World".


Indeed it is.  One of my first tasks will be to *remove* as much as possible 
from this until the only thing it does is print out "Hello, World!"  I'll be 
happy to share my results if anyone is interested.


Bitbake will require a base.bbclass file somewhere in a classes subdirectory of 
BBPATH. I used the base.bbclass file from the Bitbake download. As a minimum it 
should contain a do_build task. That's the target that Bitbake invokes by 
default if you do not use the -c option explicitly.

    …

addtask build
do_build[dirs] = "${TOPDIR}"
do_build[nostamp] = "1"
python base_do_build () {
        bb.note("The included, default BB base.bbclass does not define a useful 
default task.")
        bb.note("Try running the 'listtasks' task against a .bb to see what 
tasks are defined.")
}


If I understand correctly, the name of the task is "build", and the name of the 
Python function that implements it is "do_build()".  So, it appears BitBake 
prefixes all task names with "do_" to derive the name of the function that 
implements the task.  Have I got that right?

The "build" task is *required*, and it's the *only* one that's required?

I've been looking around in the BitBake source code a lot, so I'm *somewhat* 
familiar with it.  I tried to find the "hard" reference to "do_build" you 
described,  but I couldn't.  Can you give me a hint?


Finally a recipe to build the Nano editor:

DESCRIPTION = "Recipe to build the 'nano' editor"

PN = "nano"
PV = "2.2.6"

SRC_URI = "http://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz";

python do_fetch() {
   bb.note("Downloading source tarball from ${SRC_URI} ...")

   src_uri = (bb.data.getVar('SRC_URI', d, True) or "").split()
   if len(src_uri) == 0:
      bb.fatal("Empty URI")

   try:
      bb.fetch.init(src_uri, d)
      bb.fetch.go(d)
   except FetchError:
      bb.fatal("Could not fetch source tarball.")

   bb.note("Download successful.")
}

addtask fetch before do_build


I see here that you're creating the recipe-specific "do_fetch()" function, 
which seems intended to "override" the default "do_fetch()" provided by the 
base class.  This prompts some questions:

1) Must a "task function" be a Python function?  Or will a bash function do?

2) Is it absolutely necessary to follow a recipe-specific task function with an 
"addtask"?  Based on experience from "real" object-oriented languages, a naive 
observer (like me) would guess the simple presence of "do_fetch()" in the 
recipe is all that's necessary.  Or is it the "addtask" that actually "slots" 
the new function in?

_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to