<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<div>I've had a problem with the 1.15.2 version of BitBake and I'd like to see if a BitBake expert can short-circuit my investigation.</div>
<div><br>
</div>
<div>I am trying to create a "Hello, World!" BitBake project. That is, I want to create the smallest possible BitBake project with one layer and one recipe that does nothing except print "Hello, World!"</div>
<div><br>
</div>
<div>Because the project is *intended* to be small, the entire file tree fits very comfortably at the end of this message. Here's what works fine:</div>
<div><br>
</div>
<div><br>
</div>
<div><font face="Courier New" style="font-size: 14px;"> $ ../BitBake/bin/bitbake-layers show-layers</font></div>
<div><font face="Courier New" style="font-size: 14px;"> Parsing recipes..done.</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"> layer path priority</font></div>
<div><font face="Courier New" style="font-size: 14px;"> ==========================================================</font></div>
<div><font face="Courier New" style="font-size: 14px;"> LayerA /home/pturley/Workspace/Hello/LayerA 1</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"> $ ../BitBake/bin/bitbake-layers show-recipes</font></div>
<div><font face="Courier New" style="font-size: 14px;"> Parsing recipes..done.</font></div>
<div><font face="Courier New" style="font-size: 14px;"> === Available recipes: ===</font></div>
<div><font face="Courier New" style="font-size: 14px;"> a:</font></div>
<div><font face="Courier New" style="font-size: 14px;"> LayerA 1</font></div>
<div><br>
</div>
<div><br>
</div>
<div>When I tried this:</div>
<div><br>
</div>
<div><br>
</div>
<div><font face="Courier New" style="font-size: 14px;"> ../BitBake/bin/bitbake -c listtasks a</font></div>
<div><br>
</div>
<div><br>
</div>
<div>I got a Python stack trace that ended here:</div>
<div><br>
</div>
<div><br>
</div>
<div><font face="Courier New" style="font-size: 14px;"> File "../BitBake/lib/bb/runqueue.py", line 902, in RunQueue.check_stamp_task(task=0, taskname='do_listtasks', recurse=False):</font></div>
<div><font face="Courier New" style="font-size: 14px;"> # If the stamp is missing its not current</font></div>
<div><font face="Courier New" style="font-size: 14px;"> > if not os.access(stampfile, os.F_OK):</font></div>
<div><font face="Courier New" style="font-size: 14px;"> logger.debug(2, "Stampfile %s not available", stampfile)</font></div>
<div><font face="Courier New" style="font-size: 14px;"> TypeError: coercing to Unicode: need string or buffer, NoneType found</font></div>
<div><br>
</div>
<div><br>
</div>
<div>I've done a bit of debugging, and I've discovered that this code doesn't expect the "stampfile" variable to be "None" (which it is). I made a very simple fix to get past the problem:</div>
<div><br>
</div>
<div><br>
</div>
<div><font face="Courier New" style="font-size: 14px;"> if not stampfile or not os.access(stampfile, os.F_OK):</font></div>
<div><br>
</div>
<div><br>
</div>
<div>I'd prefer to use BitBake "as-is," so I'd like to get to the root cause of the problem.</div>
<div><br>
</div>
<div>I *can* dig into the code and eventually find my way back to whatever is causing BitBake to trip over this condition. What would be *really* great, though, is if an expert just glanced at this message and said something like "Oh yeh - you just need to
create directory 'X' and BitBake won't trip over this anymore."</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><font face="Courier New" style="font-size: 14px;">------------------------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;">├── build</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ ├── classes</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ └── base.bbclass</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | addtask listtasks</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | do_listtasks[nostamp] = "1"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | python do_listtasks() {</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | import sys</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | # emit variables and shell functions</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | #bb.data.emit_env(sys.__stdout__, d)</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | # emit the metadata which isnt valid shell</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | for e in d.keys():</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | if d.getVarFlag(e, 'task'):</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | bb.plain("%s" % e)</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | }</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | addtask build</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | do_build() {</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | echo "Hello"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | }</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ └── conf</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ ├── bblayers.conf</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | BBLAYERS ?= " \</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | /home/pturley/Workspace/Hello/LayerA \</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | "</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ └── bitbake.conf</font></div>
<div><font face="Courier New" style="font-size: 14px;">│</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ | CACHE = "${TOPDIR}/cache"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│</font></div>
<div><font face="Courier New" style="font-size: 14px;">├── LayerA</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ ├── a.bb</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | DESCRIPTION = "Layer A Main Recipe"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | PN = 'a'</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ | PV = '1'</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ └── conf</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ │</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ └── layer.conf</font></div>
<div><font face="Courier New" style="font-size: 14px;">│</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ | BBPATH .= ":${LAYERDIR}"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ | BBFILES += "${LAYERDIR}/*.bb"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ |</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ | BBFILE_COLLECTIONS += "A"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ | BBFILE_PATTERN_A := "^${LAYERDIR}/"</font></div>
<div><font face="Courier New" style="font-size: 14px;">│ +-----------------------------------------------</font></div>
<div><font face="Courier New" style="font-size: 14px;">│</font></div>
<div><font face="Courier New" style="font-size: 14px;">└── BitBake</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"> The BitBake directory origin is:</font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"> <a href="http://git.openembedded.org/bitbake/">http://git.openembedded.org/bitbake/</a></font></div>
<div><font face="Courier New" style="font-size: 14px;"><br>
</font></div>
<div><font face="Courier New" style="font-size: 14px;"> I have the 1.15.2 tag checked out, which is what</font></div>
<div><font face="Courier New" style="font-size: 14px;"> Yocto denzil uses.</font></div>
<div><br>
</div>
</body>
</html>