summaryrefslogtreecommitdiff
path: root/import-layers/yocto-poky/meta/classes/devtool-source.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'import-layers/yocto-poky/meta/classes/devtool-source.bbclass')
-rw-r--r--import-layers/yocto-poky/meta/classes/devtool-source.bbclass221
1 files changed, 0 insertions, 221 deletions
diff --git a/import-layers/yocto-poky/meta/classes/devtool-source.bbclass b/import-layers/yocto-poky/meta/classes/devtool-source.bbclass
deleted file mode 100644
index 56882a41d..000000000
--- a/import-layers/yocto-poky/meta/classes/devtool-source.bbclass
+++ /dev/null
@@ -1,221 +0,0 @@
-# Development tool - source extraction helper class
-#
-# NOTE: this class is intended for use by devtool and should not be
-# inherited manually.
-#
-# Copyright (C) 2014-2017 Intel Corporation
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-DEVTOOL_TEMPDIR ?= ""
-DEVTOOL_PATCH_SRCDIR = "${DEVTOOL_TEMPDIR}/patchworkdir"
-
-
-python() {
- tempdir = d.getVar('DEVTOOL_TEMPDIR')
-
- if not tempdir:
- bb.fatal('devtool-source class is for internal use by devtool only')
-
- # Make a subdir so we guard against WORKDIR==S
- workdir = os.path.join(tempdir, 'workdir')
- d.setVar('WORKDIR', workdir)
- if not d.getVar('S').startswith(workdir):
- # Usually a shared workdir recipe (kernel, gcc)
- # Try to set a reasonable default
- if bb.data.inherits_class('kernel', d):
- d.setVar('S', '${WORKDIR}/source')
- else:
- d.setVar('S', '${WORKDIR}/%s' % os.path.basename(d.getVar('S')))
- if bb.data.inherits_class('kernel', d):
- # We don't want to move the source to STAGING_KERNEL_DIR here
- d.setVar('STAGING_KERNEL_DIR', '${S}')
-
- d.setVar('STAMPS_DIR', os.path.join(tempdir, 'stamps'))
- d.setVar('T', os.path.join(tempdir, 'temp'))
-
- # Hook in pre/postfuncs
- is_kernel_yocto = bb.data.inherits_class('kernel-yocto', d)
- if is_kernel_yocto:
- unpacktask = 'do_kernel_checkout'
- d.appendVarFlag('do_configure', 'postfuncs', ' devtool_post_configure')
- else:
- unpacktask = 'do_unpack'
- d.appendVarFlag(unpacktask, 'postfuncs', ' devtool_post_unpack')
- d.prependVarFlag('do_patch', 'prefuncs', ' devtool_pre_patch')
- d.appendVarFlag('do_patch', 'postfuncs', ' devtool_post_patch')
-
- # NOTE: in order for the patch stuff to be fully functional,
- # PATCHTOOL and PATCH_COMMIT_FUNCTIONS need to be set; we can't
- # do that here because we can't guarantee the order of the anonymous
- # functions, so it gets done in the bbappend we create.
-}
-
-
-python devtool_post_unpack() {
- import oe.recipeutils
- import shutil
- sys.path.insert(0, os.path.join(d.getVar('COREBASE'), 'scripts', 'lib'))
- import scriptutils
- from devtool import setup_git_repo
-
- tempdir = d.getVar('DEVTOOL_TEMPDIR')
- workdir = d.getVar('WORKDIR')
- srcsubdir = d.getVar('S')
-
- def _move_file(src, dst):
- """Move a file. Creates all the directory components of destination path."""
- dst_d = os.path.dirname(dst)
- if dst_d:
- bb.utils.mkdirhier(dst_d)
- shutil.move(src, dst)
-
- def _ls_tree(directory):
- """Recursive listing of files in a directory"""
- ret = []
- for root, dirs, files in os.walk(directory):
- ret.extend([os.path.relpath(os.path.join(root, fname), directory) for
- fname in files])
- return ret
-
- # Move local source files into separate subdir
- recipe_patches = [os.path.basename(patch) for patch in
- oe.recipeutils.get_recipe_patches(d)]
- local_files = oe.recipeutils.get_recipe_local_files(d)
-
- # Ignore local files with subdir={BP}
- srcabspath = os.path.abspath(srcsubdir)
- local_files = [fname for fname in local_files if
- os.path.exists(os.path.join(workdir, fname)) and
- (srcabspath == workdir or not
- os.path.join(workdir, fname).startswith(srcabspath +
- os.sep))]
- if local_files:
- for fname in local_files:
- _move_file(os.path.join(workdir, fname),
- os.path.join(tempdir, 'oe-local-files', fname))
- with open(os.path.join(tempdir, 'oe-local-files', '.gitignore'),
- 'w') as f:
- f.write('# Ignore local files, by default. Remove this file '
- 'if you want to commit the directory to Git\n*\n')
-
- if srcsubdir == workdir:
- # Find non-patch non-local sources that were "unpacked" to srctree
- # directory
- src_files = [fname for fname in _ls_tree(workdir) if
- os.path.basename(fname) not in recipe_patches]
- srcsubdir = d.getVar('DEVTOOL_PATCH_SRCDIR')
- # Move source files to S
- for path in src_files:
- _move_file(os.path.join(workdir, path),
- os.path.join(srcsubdir, path))
- elif os.path.dirname(srcsubdir) != workdir:
- # Handle if S is set to a subdirectory of the source
- srcsubdir = os.path.join(workdir, os.path.relpath(srcsubdir, workdir).split(os.sep)[0])
-
- scriptutils.git_convert_standalone_clone(srcsubdir)
-
- # Make sure that srcsubdir exists
- bb.utils.mkdirhier(srcsubdir)
- if not os.listdir(srcsubdir):
- bb.warn("No source unpacked to S - either the %s recipe "
- "doesn't use any source or the correct source "
- "directory could not be determined" % d.getVar('PN'))
-
- devbranch = d.getVar('DEVTOOL_DEVBRANCH')
- setup_git_repo(srcsubdir, d.getVar('PV'), devbranch, d=d)
-
- (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srcsubdir)
- initial_rev = stdout.rstrip()
- with open(os.path.join(tempdir, 'initial_rev'), 'w') as f:
- f.write(initial_rev)
-
- with open(os.path.join(tempdir, 'srcsubdir'), 'w') as f:
- f.write(srcsubdir)
-}
-
-python devtool_pre_patch() {
- if d.getVar('S') == d.getVar('WORKDIR'):
- d.setVar('S', '${DEVTOOL_PATCH_SRCDIR}')
-}
-
-python devtool_post_patch() {
- import shutil
- tempdir = d.getVar('DEVTOOL_TEMPDIR')
- with open(os.path.join(tempdir, 'srcsubdir'), 'r') as f:
- srcsubdir = f.read()
- with open(os.path.join(tempdir, 'initial_rev'), 'r') as f:
- initial_rev = f.read()
-
- def rm_patches():
- patches_dir = os.path.join(srcsubdir, 'patches')
- if os.path.exists(patches_dir):
- shutil.rmtree(patches_dir)
- # Restore any "patches" directory that was actually part of the source tree
- try:
- bb.process.run('git checkout -- patches', cwd=srcsubdir)
- except bb.process.ExecutionError:
- pass
-
- extra_overrides = d.getVar('DEVTOOL_EXTRA_OVERRIDES')
- if extra_overrides:
- extra_override_list = extra_overrides.split(':')
- devbranch = d.getVar('DEVTOOL_DEVBRANCH')
- default_overrides = d.getVar('OVERRIDES').split(':')
- no_overrides = []
- # First, we may have some overrides that are referred to in the recipe set in
- # our configuration, so we need to make a branch that excludes those
- for override in default_overrides:
- if override not in extra_override_list:
- no_overrides.append(override)
- if default_overrides != no_overrides:
- # Some overrides are active in the current configuration, so
- # we need to create a branch where none of the overrides are active
- bb.process.run('git checkout %s -b devtool-no-overrides' % initial_rev, cwd=srcsubdir)
- # Run do_patch function with the override applied
- localdata = bb.data.createCopy(d)
- localdata.setVar('OVERRIDES', ':'.join(no_overrides))
- bb.build.exec_func('do_patch', localdata)
- rm_patches()
- # Now we need to reconcile the dev branch with the no-overrides one
- # (otherwise we'd likely be left with identical commits that have different hashes)
- bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
- bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
- else:
- bb.process.run('git checkout %s -b devtool-no-overrides' % devbranch, cwd=srcsubdir)
-
- for override in extra_override_list:
- localdata = bb.data.createCopy(d)
- if override in default_overrides:
- bb.process.run('git branch devtool-override-%s %s' % (override, devbranch), cwd=srcsubdir)
- else:
- # Reset back to the initial commit on a new branch
- bb.process.run('git checkout %s -b devtool-override-%s' % (initial_rev, override), cwd=srcsubdir)
- # Run do_patch function with the override applied
- localdata.appendVar('OVERRIDES', ':%s' % override)
- bb.build.exec_func('do_patch', localdata)
- rm_patches()
- # Now we need to reconcile the new branch with the no-overrides one
- # (otherwise we'd likely be left with identical commits that have different hashes)
- bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
- bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
- bb.process.run('git tag -f devtool-patched', cwd=srcsubdir)
-}
-
-python devtool_post_configure() {
- import shutil
- tempdir = d.getVar('DEVTOOL_TEMPDIR')
- shutil.copy2(os.path.join(d.getVar('B'), '.config'), tempdir)
-}