1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 05:09:24 +00:00

copy_buildsystem.py: Add a way to copy buildsystem to a directory.

This file provides a way to take bitbake and the layers in the
current build and copy them to a target specified.

(From OE-Core rev: 3dc52164fb560ccbe5c203a4587f6286c8fc0389)

Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Randy Witt
2015-02-23 17:00:37 +00:00
committed by Richard Purdie
parent 91a9b3f114
commit d5d4b70a5d
+70
View File
@@ -0,0 +1,70 @@
# This class should provide easy access to the different aspects of the
# buildsystem such as layers, bitbake location, etc.
import stat
import shutil
def _smart_copy(src, dest):
# smart_copy will choose the correct function depending on whether the
# source is a file or a directory.
mode = os.stat(src).st_mode
if stat.S_ISDIR(mode):
shutil.copytree(src, dest, symlinks=True)
else:
shutil.copyfile(src, dest)
shutil.copymode(src, dest)
class BuildSystem(object):
def __init__(self, d):
self.d = d
self.layerdirs = d.getVar('BBLAYERS', True).split()
def copy_bitbake_and_layers(self, destdir):
# Copy in all metadata layers + bitbake (as repositories)
layers_copied = []
bb.utils.mkdirhier(destdir)
layers = list(self.layerdirs)
corebase = self.d.getVar('COREBASE', True)
layers.append(corebase)
corebase_files = self.d.getVar('COREBASE_FILES', True).split()
# bitbake belongs in corebase so make sure it goes there
if "bitbake" not in corebase_files:
corebase_files.append("bitbake")
corebase_files = [corebase + '/' +x for x in corebase_files]
for layer in layers:
layerconf = os.path.join(layer, 'conf', 'layer.conf')
if os.path.exists(layerconf):
with open(layerconf, 'r') as f:
if f.readline().startswith("# ### workspace layer auto-generated by devtool ###"):
bb.warn("Skipping local workspace layer %s" % layer)
continue
# If the layer was already under corebase, leave it there
# since layers such as meta have issues when moved.
layerdestpath = destdir
if corebase == os.path.dirname(layer):
layerdestpath += '/' + os.path.basename(corebase)
layerdestpath += '/' + os.path.basename(layer)
layer_relative = os.path.relpath(layerdestpath,
destdir)
layers_copied.append(layer_relative)
# Treat corebase as special since it typically will contain
# build directories or other custom items.
if corebase == layer:
bb.utils.mkdirhier(layerdestpath)
for f in corebase_files:
f_basename = os.path.basename(f)
destname = os.path.join(layerdestpath, f_basename)
_smart_copy(f, destname)
else:
if os.path.exists(layerdestpath):
bb.note("Skipping layer %s, already handled" % layer)
else:
_smart_copy(layer, layerdestpath)
return layers_copied