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:
committed by
Richard Purdie
parent
91a9b3f114
commit
d5d4b70a5d
@@ -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
|
||||
Reference in New Issue
Block a user