From 0d722f5b12f447a46af3f935c0c516bfab927893 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 8 Nov 2009 20:48:44 +0000 Subject: base.bbclass: Drop legacy rebuild mangling code Signed-off-by: Richard Purdie --- classes/base.bbclass | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 89ee917d20..4cda29cf38 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -529,21 +529,11 @@ python do_cleanall() { do_cleanall[recrdeptask] = "do_clean" addtask cleanall after do_clean -#Uncomment this for bitbake 1.8.12 -#addtask rebuild after do_${BB_DEFAULT_TASK} -addtask rebuild +addtask rebuild after do_${BB_DEFAULT_TASK} do_rebuild[dirs] = "${TOPDIR}" do_rebuild[nostamp] = "1" python base_do_rebuild() { """rebuild a package""" - from bb import __version__ - try: - from distutils.version import LooseVersion - except ImportError: - def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - if (LooseVersion(__version__) < LooseVersion('1.8.11')): - bb.build.exec_func('do_clean', d) - bb.build.exec_task('do_' + bb.data.getVar('BB_DEFAULT_TASK', d, 1), d) } addtask mrproper @@ -1235,18 +1225,7 @@ def base_after_parse(d): python () { import bb - from bb import __version__ base_after_parse(d) - - # Remove this for bitbake 1.8.12 - try: - from distutils.version import LooseVersion - except ImportError: - def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - if (LooseVersion(__version__) >= LooseVersion('1.8.11')): - deps = bb.data.getVarFlag('do_rebuild', 'deps', d) or [] - deps.append('do_' + bb.data.getVar('BB_DEFAULT_TASK', d, 1)) - bb.data.setVarFlag('do_rebuild', 'deps', deps, d) } def check_app_exists(app, d): -- cgit v1.2.3 From 9a5937f6c6417ba8fd3464f03c69782d29813bbc Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 8 Nov 2009 20:54:00 +0000 Subject: base.bbclass: Drop import bb and import os as no longer needed Signed-off-by: Richard Purdie --- classes/base.bbclass | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 4cda29cf38..a3ea7bc685 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -49,7 +49,7 @@ def base_path_out(path, d): # for MD5/SHA handling def base_chk_load_parser(config_paths): - import ConfigParser, os, bb + import ConfigParser parser = ConfigParser.ConfigParser() if len(parser.read(config_paths)) < 1: raise ValueError("no ini files could be found") @@ -57,7 +57,6 @@ def base_chk_load_parser(config_paths): return parser def base_chk_file(parser, pn, pv, src_uri, localpath, data): - import os, bb no_checksum = False # Try PN-PV-SRC_URI first and then try PN-SRC_URI # we rely on the get method to create errors @@ -128,7 +127,6 @@ def base_chk_file(parser, pn, pv, src_uri, localpath, data): def base_dep_prepend(d): - import bb # # Ideally this will check a flag so we will operate properly in # the case where host == build == target, for now we don't work in @@ -150,7 +148,6 @@ def base_dep_prepend(d): return deps def base_read_file(filename): - import bb try: f = file( filename, "r" ) except IOError, reason: @@ -166,21 +163,18 @@ def base_ifelse(condition, iftrue = True, iffalse = False): return iffalse def base_conditional(variable, checkvalue, truevalue, falsevalue, d): - import bb if bb.data.getVar(variable,d,1) == checkvalue: return truevalue else: return falsevalue def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d): - import bb if float(bb.data.getVar(variable,d,1)) <= float(checkvalue): return truevalue else: return falsevalue def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d): - import bb result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue) if result <= 0: return truevalue @@ -188,7 +182,6 @@ def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d): return falsevalue def base_contains(variable, checkvalues, truevalue, falsevalue, d): - import bb matches = 0 if type(checkvalues).__name__ == "str": checkvalues = [checkvalues] @@ -200,7 +193,6 @@ def base_contains(variable, checkvalues, truevalue, falsevalue, d): return falsevalue def base_both_contain(variable1, variable2, checkvalue, d): - import bb if bb.data.getVar(variable1,d,1).find(checkvalue) != -1 and bb.data.getVar(variable2,d,1).find(checkvalue) != -1: return checkvalue else: @@ -211,8 +203,6 @@ DEPENDS_prepend="${@base_dep_prepend(d)} " # Returns PN with various suffixes removed # or PN if no matching suffix was found. def base_package_name(d): - import bb; - pn = bb.data.getVar('PN', d, 1) if pn.endswith("-native"): pn = pn[0:-7] @@ -229,7 +219,6 @@ def base_package_name(d): return pn def base_set_filespath(path, d): - import os, bb bb.note("base_set_filespath usage is deprecated, %s should be fixed" % d.getVar("P", 1)) filespath = [] # The ":" ensures we have an 'empty' override @@ -448,7 +437,6 @@ oe_libinstall() { } def package_stagefile(file, d): - import bb, os if bb.data.getVar('PSTAGING_ACTIVE', d, True) == "1": destfile = file.replace(bb.data.getVar("TMPDIR", d, 1), bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1)) @@ -553,7 +541,6 @@ do_distclean[dirs] = "${TOPDIR}" do_distclean[nostamp] = "1" python base_do_distclean() { """clear downloaded sources, build and temp directories""" - import os bb.build.exec_func('do_clean', d) @@ -731,7 +718,7 @@ def subprocess_setup(): signal.signal(signal.SIGPIPE, signal.SIG_DFL) def oe_unpack_file(file, data, url = None): - import bb, os, subprocess + import subprocess if not url: url = "file://%s" % file dots = file.split(".") @@ -809,7 +796,7 @@ def oe_unpack_file(file, data, url = None): addtask unpack after do_fetch do_unpack[dirs] = "${WORKDIR}" python base_do_unpack() { - import re, os + import re localdata = bb.data.createCopy(d) bb.data.update_data(localdata) @@ -836,7 +823,6 @@ METADATA_REVISION = "${@base_get_scm_revision(d)}" METADATA_BRANCH = "${@base_get_scm_branch(d)}" def base_get_scm(d): - import os from bb import which baserepo = os.path.dirname(os.path.dirname(which(d.getVar("BBPATH", 1), "classes/base.bbclass"))) for (scm, scmpath) in {"svn": ".svn", @@ -897,7 +883,6 @@ def base_get_metadata_svn_revision(path, d): return revision def base_get_metadata_git_branch(path, d): - import os branch = os.popen('cd %s; PATH=%s git symbolic-ref HEAD 2>/dev/null' % (path, d.getVar("PATH", 1))).read().rstrip() if len(branch) != 0: @@ -905,7 +890,6 @@ def base_get_metadata_git_branch(path, d): return "" def base_get_metadata_git_revision(path, d): - import os rev = os.popen("cd %s; PATH=%s git show-ref HEAD 2>/dev/null" % (path, d.getVar("PATH", 1))).read().split(" ")[0].rstrip() if len(rev) != 0: return rev @@ -916,7 +900,7 @@ addhandler base_eventhandler python base_eventhandler() { from bb import note, error, data from bb.event import Handled, NotHandled, getName - import os + name = getName(e) if name == "TaskCompleted": @@ -1071,7 +1055,6 @@ def read_pkgdatafile(fn): return pkgdata def get_subpkgedata_fn(pkg, d): - import bb, os archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") archs.reverse() pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d) @@ -1083,25 +1066,20 @@ def get_subpkgedata_fn(pkg, d): return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) def has_subpkgdata(pkg, d): - import bb, os return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) def read_subpkgdata(pkg, d): - import bb return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) def has_pkgdata(pn, d): - import bb, os fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) return os.access(fn, os.R_OK) def read_pkgdata(pn, d): - import bb fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) return read_pkgdatafile(fn) python read_subpackage_metadata () { - import bb data = read_pkgdata(bb.data.getVar('PN', d, 1), d) for key in data.keys(): @@ -1118,7 +1096,6 @@ python read_subpackage_metadata () { # Collapse FOO_pkg variables into FOO # def read_subpkgdata_dict(pkg, d): - import bb ret = {} subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) for var in subd: @@ -1141,7 +1118,7 @@ DISTRO[unexport] = "1" def base_after_parse(d): - import bb, os, exceptions + import exceptions source_mirror_fetch = bb.data.getVar('SOURCE_MIRROR_FETCH', d, 0) if not source_mirror_fetch: @@ -1224,7 +1201,6 @@ def base_after_parse(d): bb.data.setVar('MULTIMACH_ARCH', multiarch, d) python () { - import bb base_after_parse(d) } -- cgit v1.2.3 From 353ba77e54bdd3d2af60e31590860b4a1e0b76a6 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 29 Oct 2009 23:39:34 +0000 Subject: package.bbclass: Move variable checks to one place making the code more readable (from Poky) Signed-off-by: Richard Purdie --- classes/package.bbclass | 52 +++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 38 deletions(-) (limited to 'classes') diff --git a/classes/package.bbclass b/classes/package.bbclass index e7865754eb..f4a881ab57 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -29,9 +29,6 @@ def do_split_packages(d, root, file_regex, output_pattern, description, postinst import os, os.path, bb dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined") - return packages = bb.data.getVar('PACKAGES', d, True).split() @@ -303,14 +300,7 @@ python package_do_split_locales() { return dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined") - return - pn = bb.data.getVar('PN', d, True) - if not pn: - bb.error("PN not defined") - return if pn + '-locale' in packages: packages.remove(pn + '-locale') @@ -344,32 +334,17 @@ python package_do_split_locales() { } python populate_packages () { - import glob, stat, errno, re + import os, glob, stat, errno, re workdir = bb.data.getVar('WORKDIR', d, True) - if not workdir: - bb.error("WORKDIR not defined, unable to package") - return - - import os # path manipulations outdir = bb.data.getVar('DEPLOY_DIR', d, True) - if not outdir: - bb.error("DEPLOY_DIR not defined, unable to package") - return - bb.mkdirhier(outdir) - dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined, unable to package") - return - bb.mkdirhier(dvar) - packages = bb.data.getVar('PACKAGES', d, True) - pn = bb.data.getVar('PN', d, True) - if not pn: - bb.error("PN not defined") - return + + bb.mkdirhier(outdir) + bb.mkdirhier(dvar) + os.chdir(dvar) @@ -621,9 +596,6 @@ python package_do_shlibs() { packages = bb.data.getVar('PACKAGES', d, True) workdir = bb.data.getVar('WORKDIR', d, True) - if not workdir: - bb.error("WORKDIR not defined") - return ver = bb.data.getVar('PV', d, True) if not ver: @@ -787,12 +759,7 @@ python package_do_pkgconfig () { import re, os packages = bb.data.getVar('PACKAGES', d, True) - workdir = bb.data.getVar('WORKDIR', d, True) - if not workdir: - bb.error("WORKDIR not defined") - return - pkgdest = bb.data.getVar('PKGDEST', d, True) shlibs_dir = bb.data.getVar('SHLIBSDIR', d, True) @@ -1059,6 +1026,15 @@ python package_do_package () { bb.debug(1, "No packages to build, skipping do_package") return + workdir = bb.data.getVar('WORKDIR', d, True) + outdir = bb.data.getVar('DEPLOY_DIR', d, True) + dvar = bb.data.getVar('D', d, True) + pn = bb.data.getVar('PN', d, True) + + if not workdir or not outdir or not dvar or not pn or not packages: + bb.error("WORKDIR, DEPLOY_DIR, D, and PN all must be defined, unable to package") + return + for f in (bb.data.getVar('PACKAGEFUNCS', d, True) or '').split(): bb.build.exec_func(f, d) package_run_hooks(f, d) -- cgit v1.2.3 From c41e3631d31a1932fcbb0098eab0520f90711cc3 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 29 Oct 2009 23:42:11 +0000 Subject: package.bbclass: Remove hardcoded use of PKGDEST variable (from Poky) Signed-off-by: Richard Purdie --- classes/package.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/package.bbclass b/classes/package.bbclass index f4a881ab57..2c085be797 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -517,6 +517,7 @@ python emit_pkgdata() { return packages = bb.data.getVar('PACKAGES', d, True) + pkgdest = bb.data.getVar('PKGDEST', d, 1) pkgdatadir = bb.data.getVar('PKGDATA_DIR', d, True) pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True) @@ -560,7 +561,7 @@ python emit_pkgdata() { allow_empty = bb.data.getVar('ALLOW_EMPTY_%s' % pkg, d, True) if not allow_empty: allow_empty = bb.data.getVar('ALLOW_EMPTY', d, True) - root = "%s/install/%s" % (workdir, pkg) + root = "%s/%s" % (pkgdest, pkg) os.chdir(root) g = glob('*') + glob('.[!.]*') if g or allow_empty == "1": -- cgit v1.2.3 From 29c7d3351f43678c6e93b707b301832009f64b31 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 00:08:19 +0000 Subject: package.bbclass: Change to operate on a copy of the install directory instead of directly. Also take the opportunity to rename the temp directories so their function is clear (from Poky) Signed-off-by: Richard Purdie --- classes/package.bbclass | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'classes') diff --git a/classes/package.bbclass b/classes/package.bbclass index 2c085be797..03618ba6fc 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -2,7 +2,8 @@ # General packaging help functions # -PKGDEST = "${WORKDIR}/install" +PKGD = "${WORKDIR}/package" +PKGDEST = "${WORKDIR}/packages-split" def legitimize_package_name(s): """ @@ -28,7 +29,7 @@ def do_split_packages(d, root, file_regex, output_pattern, description, postinst """ import os, os.path, bb - dvar = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) packages = bb.data.getVar('PACKAGES', d, True).split() @@ -299,7 +300,7 @@ python package_do_split_locales() { bb.note("datadir not defined") return - dvar = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) pn = bb.data.getVar('PN', d, True) if pn + '-locale' in packages: @@ -333,19 +334,29 @@ python package_do_split_locales() { bb.data.setVar('PACKAGES', ' '.join(packages), d) } +python perform_packagecopy () { + import os + + dest = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) + + bb.mkdirhier(dvar) + + # Start by package population by taking a copy of the installed + # files to operate on + os.system('cp -pPR %s/* %s/' % (dest, dvar)) +} + python populate_packages () { import os, glob, stat, errno, re workdir = bb.data.getVar('WORKDIR', d, True) outdir = bb.data.getVar('DEPLOY_DIR', d, True) - dvar = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) packages = bb.data.getVar('PACKAGES', d, True) pn = bb.data.getVar('PN', d, True) bb.mkdirhier(outdir) - bb.mkdirhier(dvar) - - os.chdir(dvar) def isexec(path): @@ -981,7 +992,8 @@ python package_depchains() { } -PACKAGEFUNCS ?= "package_do_split_locales \ +PACKAGEFUNCS ?= "perform_packagecopy \ + package_do_split_locales \ populate_packages \ package_do_shlibs \ package_do_pkgconfig \ @@ -1029,11 +1041,12 @@ python package_do_package () { workdir = bb.data.getVar('WORKDIR', d, True) outdir = bb.data.getVar('DEPLOY_DIR', d, True) - dvar = bb.data.getVar('D', d, True) + dest = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) pn = bb.data.getVar('PN', d, True) - if not workdir or not outdir or not dvar or not pn or not packages: - bb.error("WORKDIR, DEPLOY_DIR, D, and PN all must be defined, unable to package") + if not workdir or not outdir or not dest or not dvar or not pn or not packages: + bb.error("WORKDIR, DEPLOY_DIR, D, PN and PKGD all must be defined, unable to package") return for f in (bb.data.getVar('PACKAGEFUNCS', d, True) or '').split(): -- cgit v1.2.3 From 6111d7132a0c7aa0b4827a3bcca05156a7d20d57 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 00:31:21 +0000 Subject: package.bbclass: Add the option to declare package preprocess function hooks (from Poky) Signed-off-by: Richard Purdie --- classes/package.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/package.bbclass b/classes/package.bbclass index 03618ba6fc..1c14908f1a 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -991,8 +991,9 @@ python package_depchains() { pkg_addrrecs(pkg, base, suffix, func, rdeps, d) } - +PACKAGE_PREPROCESS_FUNCS ?= "" PACKAGEFUNCS ?= "perform_packagecopy \ + ${PACKAGE_PREPROCESS_FUNCS} \ package_do_split_locales \ populate_packages \ package_do_shlibs \ -- cgit v1.2.3 From 96b090d1b469720f6f6a44a20f1bb96228979d6b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 02:41:02 +0000 Subject: autotools.bbclass: Remove pointless inherit (from Poky) Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 2 -- 1 file changed, 2 deletions(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 8236a27c76..b4b1c6ec8a 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -1,5 +1,3 @@ -inherit base - # use autotools_stage_all for native packages AUTOTOOLS_NATIVE_STAGE_INSTALL = "1" -- cgit v1.2.3 From 6f481bcc549751aa1d7017de8c77a7606a74c468 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 02:42:06 +0000 Subject: autotools.bbclass: Allow for leading whitespace in gettext and intltool searches (from Poky) Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index b4b1c6ec8a..b7a91693e1 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -113,7 +113,7 @@ autotools_do_configure() { else CONFIGURE_AC=configure.ac fi - if grep "^AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then + if grep "^[[:space:]]*AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then if grep "sed.*POTFILES" $CONFIGURE_AC >/dev/null; then : do nothing -- we still have an old unmodified configure.ac else @@ -121,7 +121,7 @@ autotools_do_configure() { echo "no" | glib-gettextize --force --copy fi fi - if grep "^[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then + if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then oenote Executing intltoolize --copy --force --automake intltoolize --copy --force --automake fi -- cgit v1.2.3 From f6c3cb05c0ef1836a3146a39dc40cbee367486e8 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 02:43:12 +0000 Subject: autotools.bbclass: Create m4 directory earlier avoding issues with intltoolize (from Poky) Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index b7a91693e1..45b269f4fd 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -121,12 +121,12 @@ autotools_do_configure() { echo "no" | glib-gettextize --force --copy fi fi + mkdir -p m4 if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then oenote Executing intltoolize --copy --force --automake intltoolize --copy --force --automake fi oenote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths - mkdir -p m4 autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed." cd $olddir fi -- cgit v1.2.3 From c942cea699be2e07b4dfe9ced8b200756c80eb02 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 21:59:06 +0000 Subject: packagedata.bbclass: Split package data handling functions out from base.bclass (from Poky) Signed-off-by: Richard Purdie --- classes/base.bbclass | 77 ++------------------------------------------- classes/packagedata.bbclass | 73 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 75 deletions(-) create mode 100644 classes/packagedata.bbclass (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index a3ea7bc685..7f24482605 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1008,6 +1008,8 @@ addtask build after do_populate_staging do_build = "" do_build[func] = "1" +INHERIT =+ "packagedata" + # Functions that update metadata based on files outputted # during the build process. @@ -1028,81 +1030,6 @@ def explode_deps(s): r.append(i) return r -def packaged(pkg, d): - import os, bb - return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK) - -def read_pkgdatafile(fn): - pkgdata = {} - - def decode(str): - import codecs - c = codecs.getdecoder("string_escape") - return c(str)[0] - - import os - if os.access(fn, os.R_OK): - import re - f = file(fn, 'r') - lines = f.readlines() - f.close() - r = re.compile("([^:]+):\s*(.*)") - for l in lines: - m = r.match(l) - if m: - pkgdata[m.group(1)] = decode(m.group(2)) - - return pkgdata - -def get_subpkgedata_fn(pkg, d): - archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") - archs.reverse() - pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d) - targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d) - for arch in archs: - fn = pkgdata + arch + targetdir + pkg - if os.path.exists(fn): - return fn - return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) - -def has_subpkgdata(pkg, d): - return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) - -def read_subpkgdata(pkg, d): - return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) - -def has_pkgdata(pn, d): - fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) - return os.access(fn, os.R_OK) - -def read_pkgdata(pn, d): - fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) - return read_pkgdatafile(fn) - -python read_subpackage_metadata () { - data = read_pkgdata(bb.data.getVar('PN', d, 1), d) - - for key in data.keys(): - bb.data.setVar(key, data[key], d) - - for pkg in bb.data.getVar('PACKAGES', d, 1).split(): - sdata = read_subpkgdata(pkg, d) - for key in sdata.keys(): - bb.data.setVar(key, sdata[key], d) -} - - -# -# Collapse FOO_pkg variables into FOO -# -def read_subpkgdata_dict(pkg, d): - ret = {} - subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) - for var in subd: - newvar = var.replace("_" + pkg, "") - ret[newvar] = subd[var] - return ret - # Make sure MACHINE isn't exported # (breaks binutils at least) MACHINE[unexport] = "1" diff --git a/classes/packagedata.bbclass b/classes/packagedata.bbclass new file mode 100644 index 0000000000..86f18a9e96 --- /dev/null +++ b/classes/packagedata.bbclass @@ -0,0 +1,73 @@ +def packaged(pkg, d): + return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK) + +def read_pkgdatafile(fn): + pkgdata = {} + + def decode(str): + import codecs + c = codecs.getdecoder("string_escape") + return c(str)[0] + + if os.access(fn, os.R_OK): + import re + f = file(fn, 'r') + lines = f.readlines() + f.close() + r = re.compile("([^:]+):\s*(.*)") + for l in lines: + m = r.match(l) + if m: + pkgdata[m.group(1)] = decode(m.group(2)) + + return pkgdata + +def get_subpkgedata_fn(pkg, d): + archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") + archs.reverse() + pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d) + targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d) + for arch in archs: + fn = pkgdata + arch + targetdir + pkg + if os.path.exists(fn): + return fn + return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) + +def has_subpkgdata(pkg, d): + return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) + +def read_subpkgdata(pkg, d): + return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) + +def has_pkgdata(pn, d): + fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) + return os.access(fn, os.R_OK) + +def read_pkgdata(pn, d): + fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) + return read_pkgdatafile(fn) + +python read_subpackage_metadata () { + data = read_pkgdata(bb.data.getVar('PN', d, 1), d) + + for key in data.keys(): + bb.data.setVar(key, data[key], d) + + for pkg in bb.data.getVar('PACKAGES', d, 1).split(): + sdata = read_subpkgdata(pkg, d) + for key in sdata.keys(): + bb.data.setVar(key, sdata[key], d) +} + + +# +# Collapse FOO_pkg variables into FOO +# +def read_subpkgdata_dict(pkg, d): + ret = {} + subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) + for var in subd: + newvar = var.replace("_" + pkg, "") + ret[newvar] = subd[var] + return ret + -- cgit v1.2.3 From 0fc2395bd61abaac94c670e671042f59c6d88e00 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 9 Nov 2009 14:07:11 +0000 Subject: base.bbclass: Promote packagedata inherit to a direct inherit due to ordering issues Signed-off-by: Richard Purdie --- classes/base.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 7f24482605..9de2c67af1 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1008,7 +1008,7 @@ addtask build after do_populate_staging do_build = "" do_build[func] = "1" -INHERIT =+ "packagedata" +inherit packagedata # Functions that update metadata based on files outputted # during the build process. -- cgit v1.2.3 From bea72c2fecde175add169bb55df1922b048030c8 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 21:48:21 +0000 Subject: Start removal of layout_* variables and replace these with new mechanisms to allow nextgen SDK generation (from Poky) Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 12 ++++++------ classes/base.bbclass | 4 ++-- classes/binconfig.bbclass | 8 ++++---- classes/canadian-cross.bbclass | 38 +++++++++++++++++++------------------- classes/canadian-native.bbclass | 31 ++++++------------------------- classes/cross.bbclass | 25 +------------------------ classes/distutils.bbclass | 8 ++++---- classes/native.bbclass | 32 ++++++++------------------------ classes/packaged-staging.bbclass | 18 +++++++++--------- classes/scons.bbclass | 2 +- classes/xlibs.bbclass | 4 ++-- 11 files changed, 62 insertions(+), 120 deletions(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 45b269f4fd..de76fe0ab4 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -191,14 +191,14 @@ autotools_stage_all() { oe_runmake DESTDIR="${STAGE_TEMP}" install autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR} if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then - autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${layout_bindir} - autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${layout_sbindir} - autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${layout_base_bindir} - autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${layout_base_sbindir} - autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${layout_libexecdir} + autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${bindir} + autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${sbindir} + autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${base_bindir} + autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${base_sbindir} + autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${libexecdir} if [ "${prefix}/lib" != "${libdir}" ]; then # python puts its files in here, make sure they are staged as well - autotools_stage_dir ${STAGE_TEMP}/${prefix}/lib ${STAGING_DIR_HOST}${layout_prefix}/lib + autotools_stage_dir ${STAGE_TEMP}/${prefix}/lib ${STAGING_DIR_HOST}${prefix}/lib fi fi if [ -d ${STAGE_TEMP}/${libdir} ] diff --git a/classes/base.bbclass b/classes/base.bbclass index 9de2c67af1..3f610ac384 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -977,8 +977,8 @@ base_do_stage () { : } -do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${layout_bindir} ${STAGING_DIR_TARGET}/${layout_libdir} \ - ${STAGING_DIR_TARGET}/${layout_includedir} \ +do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${bindir} ${STAGING_DIR_TARGET}/${libdir} \ + ${STAGING_DIR_TARGET}/${includedir} \ ${STAGING_BINDIR_NATIVE} ${STAGING_LIBDIR_NATIVE} \ ${STAGING_INCDIR_NATIVE} \ ${STAGING_DATADIR} \ diff --git a/classes/binconfig.bbclass b/classes/binconfig.bbclass index 5789903178..04268c7f07 100644 --- a/classes/binconfig.bbclass +++ b/classes/binconfig.bbclass @@ -18,8 +18,8 @@ def get_binconfig_mangle(d): s += " -e 's:OELIBDIR:${STAGING_LIBDIR}:;'" s += " -e 's:OEINCDIR:${STAGING_INCDIR}:;'" s += " -e 's:OEDATADIR:${STAGING_DATADIR}:'" - s += " -e 's:OEPREFIX:${STAGING_DIR_HOST}${layout_prefix}:'" - s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${layout_exec_prefix}:'" + s += " -e 's:OEPREFIX:${STAGING_DIR_HOST}${prefix}:'" + s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${exec_prefix}:'" s += " -e 's:-I${WORKDIR}:-I${STAGING_INCDIR}:'" s += " -e 's:-L${WORKDIR}:-L${STAGING_LIBDIR}:'" if bb.data.getVar("OE_BINCONFIG_EXTRA_MANGLE", d): @@ -37,7 +37,7 @@ do_install_append() { -e 's:${STAGING_LIBDIR}:${libdir}:g;' \ -e 's:${STAGING_INCDIR}:${includedir}:g;' \ -e 's:${STAGING_DATADIR}:${datadir}:' \ - -e 's:${STAGING_DIR_HOST}${layout_prefix}:${prefix}:' > ${D}${bindir}/`basename $config` + -e 's:${STAGING_DIR_HOST}${prefix}:${prefix}:' > ${D}${bindir}/`basename $config` done fi @@ -46,7 +46,7 @@ do_install_append() { -e 's:${STAGING_LIBDIR}:${libdir}:g;' \ -e 's:${STAGING_INCDIR}:${includedir}:g;' \ -e 's:${STAGING_DATADIR}:${datadir}:' \ - -e 's:${STAGING_DIR_HOST}${layout_prefix}:${prefix}:' \ + -e 's:${STAGING_DIR_HOST}${prefix}:${prefix}:' \ $lafile done } diff --git a/classes/canadian-cross.bbclass b/classes/canadian-cross.bbclass index 474fb1d2ba..a254d40b6d 100644 --- a/classes/canadian-cross.bbclass +++ b/classes/canadian-cross.bbclass @@ -41,31 +41,31 @@ oldincludedir = "${exec_prefix}/include" # Path prefixes export base_prefix = "${STAGING_DIR_HOST}" -export prefix = "${STAGING_DIR_HOST}${layout_prefix}" -export exec_prefix = "${STAGING_DIR_HOST}${layout_exec_prefix}" +export prefix = "${STAGING_DIR_HOST}/usr" +export exec_prefix = "${STAGING_DIR_HOST}/usr" # Base paths -export base_bindir = "${STAGING_DIR_HOST}${layout_base_bindir}" -export base_sbindir = "${STAGING_DIR_HOST}${layout_base_sbindir}" -export base_libdir = "${STAGING_DIR_HOST}${layout_base_libdir}" +export base_bindir = "${STAGING_DIR_HOST}/bin" +export base_sbindir = "${STAGING_DIR_HOST}/sbin" +export base_libdir = "${STAGING_DIR_HOST}/lib" # Architecture independent paths -export datadir = "${STAGING_DIR_HOST}${layout_datadir}" -export sysconfdir = "${STAGING_DIR_HOST}${layout_sysconfdir}" -export sharedstatedir = "${STAGING_DIR_HOST}${layout_sharedstatedir}" -export localstatedir = "${STAGING_DIR_HOST}${layout_localstatedir}" -export infodir = "${STAGING_DIR_HOST}${layout_infodir}" -export mandir = "${STAGING_DIR_HOST}${layout_mandir}" -export docdir = "${STAGING_DIR_HOST}${layout_docdir}" -export servicedir = "${STAGING_DIR_HOST}${layout_servicedir}" +export datadir = "${STAGING_DIR_HOST}/usr/share" +export sysconfdir = "${STAGING_DIR_HOST}/etc" +export sharedstatedir = "${STAGING_DIR_HOST}/com" +export localstatedir = "${STAGING_DIR_HOST}/var" +export infodir = "${STAGING_DIR_HOST}/usr/info" +export mandir = "${STAGING_DIR_HOST}/usr/man" +export docdir = "${STAGING_DIR_HOST}/usr/doc" +export servicedir = "${STAGING_DIR_HOST}/srv" # Architecture dependent paths -export bindir = "${STAGING_DIR_HOST}${layout_bindir}" -export sbindir = "${STAGING_DIR_HOST}${layout_sbindir}" -export libexecdir = "${STAGING_DIR_HOST}${layout_libexecdir}" -export libdir = "${STAGING_DIR_HOST}${layout_libdir}" -export includedir = "${STAGING_DIR_HOST}${layout_includedir}" -export oldincludedir = "${STAGING_DIR_HOST}${layout_includedir}" +export bindir = "${STAGING_DIR_HOST}/usr/bin" +export sbindir = "${STAGING_DIR_HOST}/usr/sbin" +export libexecdir = "${STAGING_DIR_HOST}/usr/libexec" +export libdir = "${STAGING_DIR_HOST}/usr/lib" +export includedir = "${STAGING_DIR_HOST}/usr/include" +export oldincludedir = "${STAGING_DIR_HOST}/usr/include" do_stage () { oe_runmake install diff --git a/classes/canadian-native.bbclass b/classes/canadian-native.bbclass index d572ab5990..655eecec76 100644 --- a/classes/canadian-native.bbclass +++ b/classes/canadian-native.bbclass @@ -43,33 +43,14 @@ export AS = "${SDK_PREFIX}as" export RANLIB = "${SDK_PREFIX}ranlib" export STRIP = "${SDK_PREFIX}strip" -# Path prefixes -export base_prefix = "${STAGING_DIR_HOST}" -export prefix = "${STAGING_DIR_HOST}${layout_prefix}" -export exec_prefix = "${STAGING_DIR_HOST}${layout_exec_prefix}" -# Base paths -export base_bindir = "${STAGING_DIR_HOST}${layout_base_bindir}" -export base_sbindir = "${STAGING_DIR_HOST}${layout_base_sbindir}" -export base_libdir = "${STAGING_DIR_HOST}${layout_base_libdir}" +# Change to place files in SDKPATH +prefix = "${SDKPATH}" +exec_prefix = "${SDKPATH}" +base_prefix = "${SDKPATH}" -# Architecture independent paths -export datadir = "${STAGING_DIR_HOST}${layout_datadir}" -export sysconfdir = "${STAGING_DIR_HOST}${layout_sysconfdir}" -export sharedstatedir = "${STAGING_DIR_HOST}${layout_sharedstatedir}" -export localstatedir = "${STAGING_DIR_HOST}${layout_localstatedir}" -export infodir = "${STAGING_DIR_HOST}${layout_infodir}" -export mandir = "${STAGING_DIR_HOST}${layout_mandir}" -export docdir = "${STAGING_DIR_HOST}${layout_docdir}" -export servicedir = "${STAGING_DIR_HOST}${layout_servicedir}" - -# Architecture dependent paths -export bindir = "${STAGING_DIR_HOST}${layout_bindir}" -export sbindir = "${STAGING_DIR_HOST}${layout_sbindir}" -export libexecdir = "${STAGING_DIR_HOST}${layout_libexecdir}" -export libdir = "${STAGING_DIR_HOST}${layout_libdir}" -export includedir = "${STAGING_DIR_HOST}${layout_includedir}" -export oldincludedir = "${STAGING_DIR_HOST}${layout_includedir}" +export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${libdir}/pkgconfig" +export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}" do_stage () { if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] diff --git a/classes/cross.bbclass b/classes/cross.bbclass index 68e3803f3e..1de157c0f5 100644 --- a/classes/cross.bbclass +++ b/classes/cross.bbclass @@ -28,34 +28,11 @@ LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE}" TOOLCHAIN_OPTIONS = "" # Overrides for paths - -# Path prefixes -base_prefix = "${exec_prefix}" prefix = "${CROSS_DIR}" +base_prefix = "${prefix}" exec_prefix = "${prefix}" - -# Base paths -base_bindir = "${base_prefix}/bin" base_sbindir = "${base_prefix}/bin" -base_libdir = "${base_prefix}/lib" - -# Architecture independent paths -datadir = "${prefix}/share" -sysconfdir = "${prefix}/etc" -sharedstatedir = "${prefix}/com" -localstatedir = "${prefix}/var" -infodir = "${datadir}/info" -mandir = "${datadir}/man" -docdir = "${datadir}/doc" -servicedir = "${prefix}/srv" - -# Architecture dependent paths -bindir = "${exec_prefix}/bin" sbindir = "${exec_prefix}/bin" -libexecdir = "${exec_prefix}/libexec" -libdir = "${exec_prefix}/lib" -includedir = "${exec_prefix}/include" -oldincludedir = "${exec_prefix}/include" do_stage () { oe_runmake install diff --git a/classes/distutils.bbclass b/classes/distutils.bbclass index ea4184b235..4d1fc8c6fc 100644 --- a/classes/distutils.bbclass +++ b/classes/distutils.bbclass @@ -2,7 +2,7 @@ inherit distutils-base DISTUTILS_BUILD_ARGS ?= "" DISTUTILS_STAGE_HEADERS_ARGS ?= "--install-dir=${STAGING_INCDIR}/${PYTHON_DIR}" -DISTUTILS_STAGE_ALL_ARGS ?= "--prefix=${STAGING_DIR_HOST}${layout_prefix} \ +DISTUTILS_STAGE_ALL_ARGS ?= "--prefix=${STAGING_DIR_HOST}${prefix} \ --install-data=${STAGING_DATADIR}" DISTUTILS_INSTALL_ARGS ?= "--prefix=${D}/${prefix} \ --install-data=${D}/${datadir}" @@ -16,7 +16,7 @@ distutils_do_compile() { } distutils_stage_headers() { - install -d ${STAGING_DIR_HOST}${layout_libdir}/${PYTHON_DIR}/site-packages + install -d ${STAGING_DIR_HOST}${libdir}/${PYTHON_DIR}/site-packages BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ ${STAGING_BINDIR_NATIVE}/python setup.py install_headers ${DISTUTILS_STAGE_HEADERS_ARGS} || \ oefatal "python setup.py install_headers execution failed." @@ -25,8 +25,8 @@ distutils_stage_headers() { distutils_stage_all() { STAGING_INCDIR=${STAGING_INCDIR} \ STAGING_LIBDIR=${STAGING_LIBDIR} \ - install -d ${STAGING_DIR_HOST}${layout_libdir}/${PYTHON_DIR}/site-packages - PYTHONPATH=${STAGING_DIR_HOST}${layout_libdir}/${PYTHON_DIR}/site-packages \ + install -d ${STAGING_DIR_HOST}${libdir}/${PYTHON_DIR}/site-packages + PYTHONPATH=${STAGING_DIR_HOST}${libdir}/${PYTHON_DIR}/site-packages \ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ ${STAGING_BINDIR_NATIVE}/python setup.py install ${DISTUTILS_STAGE_ALL_ARGS} || \ oefatal "python setup.py install (stage) execution failed." diff --git a/classes/native.bbclass b/classes/native.bbclass index 69231e0b6b..70ec81fbb1 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -52,32 +52,16 @@ export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" # Path prefixes -export base_prefix = "${STAGING_DIR_NATIVE}" -export prefix = "${STAGING_DIR_NATIVE}${layout_prefix}" -export exec_prefix = "${STAGING_DIR_NATIVE}${layout_exec_prefix}" +base_prefix = "${STAGING_DIR_NATIVE}" +prefix = "${STAGING_DIR_NATIVE}${prefix_native}" +exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}" -# Base paths -export base_bindir = "${STAGING_DIR_NATIVE}${layout_base_bindir}" -export base_sbindir = "${STAGING_DIR_NATIVE}${layout_base_sbindir}" -export base_libdir = "${STAGING_DIR_NATIVE}${layout_base_libdir}" +# Since we actually install these into situ there is no staging prefix +STAGING_DIR_HOST = "" +STAGING_DIR_TARGET = "" +SHLIBSDIR = "${STAGING_DIR_NATIVE}/shlibs" +PKG_CONFIG_DIR = "${libdir}/pkgconfig" -# Architecture independent paths -export datadir = "${STAGING_DIR_NATIVE}${layout_datadir}" -export sysconfdir = "${STAGING_DIR_NATIVE}${layout_sysconfdir}" -export sharedstatedir = "${STAGING_DIR_NATIVE}${layout_sharedstatedir}" -export localstatedir = "${STAGING_DIR_NATIVE}${layout_localstatedir}" -export infodir = "${STAGING_DIR_NATIVE}${layout_infodir}" -export mandir = "${STAGING_DIR_NATIVE}${layout_mandir}" -export docdir = "${STAGING_DIR_NATIVE}${layout_docdir}" -export servicedir = "${STAGING_DIR_NATIVE}${layout_servicedir}" - -# Architecture dependent paths -export bindir = "${STAGING_DIR_NATIVE}${layout_bindir}" -export sbindir = "${STAGING_DIR_NATIVE}${layout_sbindir}" -export libexecdir = "${STAGING_DIR_NATIVE}${layout_libexecdir}" -export libdir = "${STAGING_DIR_NATIVE}${layout_libdir}" -export includedir = "${STAGING_DIR_NATIVE}${layout_includedir}" -export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}" do_stage () { if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index 3b97f593b8..e3d274b674 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -152,12 +152,12 @@ staging_helper () { done echo "dest root /" >> $conffile fi - if [ ! -e ${TMPDIR}${layout_libdir}/opkg/info/ ]; then - mkdir -p ${TMPDIR}${layout_libdir}/opkg/info/ + if [ ! -e ${TMPDIR}${libdir}/opkg/info/ ]; then + mkdir -p ${TMPDIR}${libdir}/opkg/info/ fi - if [ ! -e ${TMPDIR}${layout_libdir}/ipkg/ ]; then - cd ${TMPDIR}${layout_libdir}/ - ln -sf opkg/ ipkg + if [ ! -e ${TMPDIR}${libdir}/ipkg/ ]; then + cd ${TMPDIR}${libdir}/ + ln -sf opkg/ ipkg || true fi } @@ -187,7 +187,7 @@ python packagestage_scenefunc () { # # Install the staging package somewhere temporarily so we can extract the stamp files # - bb.mkdirhier(bb.data.expand("${WORKDIR}/tstage/${layout_libdir}/opkg/info/ ", d)) + bb.mkdirhier(bb.data.expand("${WORKDIR}/tstage/${libdir_native}/opkg/info/ ", d)) cmd = bb.data.expand("${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -force-depends -o ${WORKDIR}/tstage install", d) ret = os.system("PATH=\"%s\" %s %s" % (path, cmd, stagepkg)) if ret != 0: @@ -329,20 +329,20 @@ staging_packager () { staging_package_installer () { #${PSTAGE_INSTALL_CMD} ${PSTAGE_PKG} - STATUSFILE=${TMPDIR}${layout_libdir}/opkg/status + STATUSFILE=${TMPDIR}${libdir}/opkg/status echo "Package: ${PSTAGE_PKGPN}" >> $STATUSFILE echo "Version: ${PSTAGE_PKGVERSION}" >> $STATUSFILE echo "Status: install user installed" >> $STATUSFILE echo "Architecture: ${PSTAGE_PKGARCH}" >> $STATUSFILE echo "" >> $STATUSFILE - CTRLFILE=${TMPDIR}${layout_libdir}/opkg/info/${PSTAGE_PKGPN}.control + CTRLFILE=${TMPDIR}${libdir}/opkg/info/${PSTAGE_PKGPN}.control echo "Package: ${PSTAGE_PKGPN}" > $CTRLFILE echo "Version: ${PSTAGE_PKGVERSION}" >> $CTRLFILE echo "Architecture: ${PSTAGE_PKGARCH}" >> $CTRLFILE cd ${PSTAGE_TMPDIR_STAGE} - find -type f | grep -v ./CONTROL | sed -e 's/^\.//' > ${TMPDIR}${layout_libdir}/opkg/info/${PSTAGE_PKGPN}.list + find -type f | grep -v ./CONTROL | sed -e 's/^\.//' > ${TMPDIR}${libdir}/opkg/info/${PSTAGE_PKGPN}.list } python do_package_stage () { diff --git a/classes/scons.bbclass b/classes/scons.bbclass index cd5de61e6d..b139411c19 100644 --- a/classes/scons.bbclass +++ b/classes/scons.bbclass @@ -13,7 +13,7 @@ scons_do_install() { scons_do_stage() { install -d ${D}${prefix} - ${STAGING_BINDIR_NATIVE}/scons PREFIX=${STAGING_DIR_HOST}/${layout_prefix} prefix=${STAGING_DIR_HOST}/${layout_prefix} install || \ + ${STAGING_BINDIR_NATIVE}/scons PREFIX=${STAGING_DIR_HOST}/${prefix} prefix=${STAGING_DIR_HOST}/${prefix} install || \ oefatal "scons stage execution failed." } diff --git a/classes/xlibs.bbclass b/classes/xlibs.bbclass index ae8f928f1e..fc52400b9f 100644 --- a/classes/xlibs.bbclass +++ b/classes/xlibs.bbclass @@ -6,10 +6,10 @@ XLIBS_CVS = "${FREEDESKTOP_CVS}/xlibs" inherit autotools pkgconfig do_stage() { - oe_runmake install prefix=${STAGING_DIR_HOST}${layout_prefix} \ + oe_runmake install prefix=${STAGING_DIR_HOST}${prefix} \ bindir=${STAGING_BINDIR} \ includedir=${STAGING_INCDIR} \ libdir=${STAGING_LIBDIR} \ datadir=${STAGING_DATADIR} \ - mandir=${STAGING_DIR_HOST}${layout_mandir} + mandir=${STAGING_DIR_HOST}${mandir} } -- cgit v1.2.3 From 6c47bea276c5a5bc97abb81bae9288421ae89607 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 00:33:40 +0000 Subject: binconfig.bbclass: Convert do_install_append() into a PACKAGE_PREPROCESS_FUNCS (from Poky) Signed-off-by: Richard Purdie --- classes/binconfig.bbclass | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'classes') diff --git a/classes/binconfig.bbclass b/classes/binconfig.bbclass index 04268c7f07..69374528dd 100644 --- a/classes/binconfig.bbclass +++ b/classes/binconfig.bbclass @@ -1,5 +1,3 @@ -inherit base - FILES_${PN}-dev += "${bindir}/*-config" # The namespaces can clash here hence the two step replace @@ -28,20 +26,18 @@ def get_binconfig_mangle(d): BINCONFIG_GLOB ?= "*-config" -do_install_append() { - - #the 'if' protects native packages, since we can't easily check for bb.data.inherits_class('native', d) in shell - if [ -e ${D}${bindir} ] ; then - for config in `find ${S} -name '${BINCONFIG_GLOB}'`; do - cat $config | sed \ - -e 's:${STAGING_LIBDIR}:${libdir}:g;' \ - -e 's:${STAGING_INCDIR}:${includedir}:g;' \ - -e 's:${STAGING_DATADIR}:${datadir}:' \ - -e 's:${STAGING_DIR_HOST}${prefix}:${prefix}:' > ${D}${bindir}/`basename $config` - done - fi +PACKAGE_PREPROCESS_FUNCS += "binconfig_package_preprocess" - for lafile in `find ${D} -name "*.la"` ; do +binconfig_package_preprocess () { + for config in `find ${PKGD} -name '${BINCONFIG_GLOB}'`; do + sed -i \ + -e 's:${STAGING_LIBDIR}:${libdir}:g;' \ + -e 's:${STAGING_INCDIR}:${includedir}:g;' \ + -e 's:${STAGING_DATADIR}:${datadir}:' \ + -e 's:${STAGING_DIR_HOST}${prefix}:${prefix}:' \ + $config + done + for lafile in `find ${PKGD} -name "*.la"` ; do sed -i \ -e 's:${STAGING_LIBDIR}:${libdir}:g;' \ -e 's:${STAGING_INCDIR}:${includedir}:g;' \ -- cgit v1.2.3 From 1eda5c633552097442aaa7c6ef01776798685184 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 30 Oct 2009 00:38:50 +0000 Subject: autotools.bbclass: Convert .la file mangling to package preprocessing hook Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index de76fe0ab4..e939883211 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -143,8 +143,10 @@ autotools_do_install() { oe_runmake 'DESTDIR=${D}' install } -do_install_append() { - for i in `find ${D} -name "*.la"` ; do \ +PACKAGE_PREPROCESS_FUNCS += "autotools_prepackage_lamangler" + +autotools_prepackage_lamangler () { + for i in `find ${PKGD} -name "*.la"` ; do \ sed -i -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${libdir}/\1,g' $i sed -i -e s:${CROSS_DIR}/${HOST_SYS}::g $i sed -i -e s:${CROSS_DIR}::g $i -- cgit v1.2.3 From b66fa6b32686ef5a750de1bb2fb317448c682863 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 2 Nov 2009 17:23:05 +0000 Subject: autotools.bbclass: Separate out useful staging functions into base.bbclass and call from autotools classes (from Poky) Signed-off-by: Richard Purdie --- classes/autotools.bbclass | 61 +++++--------------------------------------- classes/base.bbclass | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 55 deletions(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index e939883211..7b69898cdb 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -173,14 +173,11 @@ autotools_stage_includes() { } autotools_stage_dir() { - from="$1" - to="$2" - # This will remove empty directories so we can ignore them - rmdir "$from" 2> /dev/null || true - if [ -d "$from" ]; then - mkdir -p "$to" - cp -fpPR "$from"/* "$to" - fi + sysroot_stage_dir $1 ${STAGE_TEMP_PREFIX}$2 +} + +autotools_stage_libdir() { + sysroot_stage_libdir $1 ${STAGE_TEMP_PREFIX}$2 } autotools_stage_all() { @@ -191,55 +188,9 @@ autotools_stage_all() { rm -rf ${STAGE_TEMP} mkdir -p ${STAGE_TEMP} oe_runmake DESTDIR="${STAGE_TEMP}" install - autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR} - if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then - autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${bindir} - autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${sbindir} - autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${base_bindir} - autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${base_sbindir} - autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${libexecdir} - if [ "${prefix}/lib" != "${libdir}" ]; then - # python puts its files in here, make sure they are staged as well - autotools_stage_dir ${STAGE_TEMP}/${prefix}/lib ${STAGING_DIR_HOST}${prefix}/lib - fi - fi - if [ -d ${STAGE_TEMP}/${libdir} ] - then - olddir=`pwd` - cd ${STAGE_TEMP}/${libdir} - las=$(find . -name \*.la -type f) - cd $olddir - echo "Found la files: $las" - for i in $las - do - sed -e 's/^installed=yes$/installed=no/' \ - -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*.la\),${STAGING_LIBDIR}/\1,g' \ - -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR},g' \ - -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \ - -i ${STAGE_TEMP}/${libdir}/$i - done - autotools_stage_dir ${STAGE_TEMP}/${libdir} ${STAGING_LIBDIR} - fi - # Ok, this is nasty. pkgconfig.bbclass is usually used to install .pc files, - # however some packages rely on the presence of .pc files to enable/disable - # their configurataions in which case we better should not install everything - # unconditionally, but rather depend on the actual results of make install. - # The good news though: a) there are not many packages doing this and - # b) packaged staging will fix that anyways. :M: - if [ "${AUTOTOOLS_STAGE_PKGCONFIG}" = "1" ] - then - if [ -e ${STAGE_TEMP}/${libdir}/pkgconfig/ ] ; then - echo "cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/" - cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/ - fi - if [ -e ${STAGE_TEMP}/${datadir}/pkgconfig/ ] ; then - echo "cp -f ${STAGE_TEMP}/${datadir}/pkgconfig/*.pc ${STAGING_DATADIR}/pkgconfig/" - cp -f ${STAGE_TEMP}/${datadir}/pkgconfig/*.pc ${STAGING_DATADIR}/pkgconfig/ - fi - fi rm -rf ${STAGE_TEMP}/${mandir} || true rm -rf ${STAGE_TEMP}/${infodir} || true - autotools_stage_dir ${STAGE_TEMP}/${datadir} ${STAGING_DATADIR} + sysroot_stage_dirs ${STAGE_TEMP} ${STAGE_TEMP_PREFIX} rm -rf ${STAGE_TEMP} } diff --git a/classes/base.bbclass b/classes/base.bbclass index 3f610ac384..8404a07025 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -973,6 +973,70 @@ base_do_compile() { fi } + +sysroot_stage_dir() { + src="$1" + dest="$2" + # This will remove empty directories so we can ignore them + rmdir "$src" 2> /dev/null || true + if [ -d "$src" ]; then + mkdir -p "$dest" + cp -fpPR "$src"/* "$dest" + fi +} + +sysroot_stage_libdir() { + src="$1" + dest="$2" + + olddir=`pwd` + cd $src + las=$(find . -name \*.la -type f) + cd $olddir + echo "Found la files: $las" + for i in $las + do + sed -e 's/^installed=yes$/installed=no/' \ + -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \ + -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \ + -i $src/$i + done + sysroot_stage_dir $src $dest +} + +sysroot_stage_dirs() { + from="$1" + to="$2" + + sysroot_stage_dir $from${includedir} $to${STAGING_INCDIR} + if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then + sysroot_stage_dir $from${bindir} $to${STAGING_DIR_HOST}${bindir} + sysroot_stage_dir $from${sbindir} $to${STAGING_DIR_HOST}${sbindir} + sysroot_stage_dir $from${base_bindir} $to${STAGING_DIR_HOST}${base_bindir} + sysroot_stage_dir $from${base_sbindir} $to${STAGING_DIR_HOST}${base_sbindir} + sysroot_stage_dir $from${libexecdir} $to${STAGING_DIR_HOST}${libexecdir} + if [ "${prefix}/lib" != "${libdir}" ]; then + # python puts its files in here, make sure they are staged as well + autotools_stage_dir $from/${prefix}/lib $to${STAGING_DIR_HOST}${prefix}/lib + fi + fi + if [ -d $from${libdir} ] + then + sysroot_stage_libdir $from/${libdir} $to${STAGING_LIBDIR} + fi + if [ -d $from${base_libdir} ] + then + sysroot_stage_libdir $from${base_libdir} $to${STAGING_DIR_HOST}${base_libdir} + fi + sysroot_stage_dir $from${datadir} $to${STAGING_DATADIR} +} + + +sysroot_stage_all() { + sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR} +} + + base_do_stage () { : } -- cgit v1.2.3 From bf755f0c721a91a3067fdac9f936a72e11f99cbc Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 2 Nov 2009 17:30:32 +0000 Subject: binconfig/pkgconfig.bbclass: Convert staging functions into SYSROOT_PREPROCESS_FUNCS operating on SYSROOT_DESTDIR Signed-off-by: Richard Purdie --- classes/base.bbclass | 5 +++++ classes/binconfig.bbclass | 10 ++++++---- classes/pkgconfig.bbclass | 8 +++++--- 3 files changed, 16 insertions(+), 7 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 8404a07025..024f8227bc 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1051,8 +1051,13 @@ do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${bindir} ${STAGING_DIR_TARGE # Could be compile but populate_staging and do_install shouldn't run at the same time addtask populate_staging after do_install +SYSROOT_PREPROCESS_FUNCS ?= "" +SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/" + python do_populate_staging () { bb.build.exec_func('do_stage', d) + for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split(): + bb.build.exec_func(f, d) } addtask install after do_compile diff --git a/classes/binconfig.bbclass b/classes/binconfig.bbclass index 69374528dd..dad54a5f56 100644 --- a/classes/binconfig.bbclass +++ b/classes/binconfig.bbclass @@ -47,11 +47,13 @@ binconfig_package_preprocess () { done } -do_stage_append() { +SYSROOT_PREPROCESS_FUNCS += "binconfig_sysroot_preprocess" + +binconfig_sysroot_preprocess () { for config in `find ${S} -name '${BINCONFIG_GLOB}'`; do configname=`basename $config` - install -d ${STAGING_BINDIR_CROSS} - cat $config | sed ${@get_binconfig_mangle(d)} > ${STAGING_BINDIR_CROSS}/$configname - chmod u+x ${STAGING_BINDIR_CROSS}/$configname + install -d ${SYSROOT_DESTDIR}${STAGING_BINDIR_CROSS} + cat $config | sed ${@get_binconfig_mangle(d)} > ${SYSROOT_DESTDIR}${STAGING_BINDIR_CROSS}/$configname + chmod u+x ${SYSROOT_DESTDIR}${STAGING_BINDIR_CROSS}/$configname done } diff --git a/classes/pkgconfig.bbclass b/classes/pkgconfig.bbclass index 2a8199d135..de892b5413 100644 --- a/classes/pkgconfig.bbclass +++ b/classes/pkgconfig.bbclass @@ -9,10 +9,12 @@ for i in `find ${S}/ -name "*.pc" -type f` ; do \ done } -do_stage_append () { - install -d ${PKG_CONFIG_DIR} +SYSROOT_PREPROCESS_FUNCS += "pkgconfig_sysroot_preprocess" + +pkgconfig_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${PKG_CONFIG_DIR} for pc in `find ${S} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do pcname=`basename $pc` - cat $pc > ${PKG_CONFIG_DIR}/$pcname + cat $pc > ${SYSROOT_DESTDIR}${PKG_CONFIG_DIR}/$pcname done } -- cgit v1.2.3 From 177d10d75a8d8d9357d42b7b95a937ffe1e1c88b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 2 Nov 2009 17:34:43 +0000 Subject: native.bbclass: If do_stage isn't overridden, allow do_install to run for native packages (from Poky) Signed-off-by: Richard Purdie --- classes/native.bbclass | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'classes') diff --git a/classes/native.bbclass b/classes/native.bbclass index 70ec81fbb1..f01aba30c2 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -62,22 +62,28 @@ STAGING_DIR_TARGET = "" SHLIBSDIR = "${STAGING_DIR_NATIVE}/shlibs" PKG_CONFIG_DIR = "${libdir}/pkgconfig" - -do_stage () { - if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] +do_stage_native () { + # If autotools is active, use the autotools staging function, else + # use our "make install" equivalent + if [ "${AUTOTOOLS_NATIVE_STAGE_INSTALL}" == "1" ] then - if [ "${AUTOTOOLS_NATIVE_STAGE_INSTALL}" != "1" ] - then - oe_runmake install - else - autotools_stage_all - fi + autotools_stage_all + else + oe_runmake install fi } -do_install () { - true +do_stage () { + do_stage_native } PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" PKG_CONFIG_SYSROOT_DIR = "" + +python __anonymous () { + # If we've a legacy native do_stage, we need to neuter do_install + stagefunc = bb.data.getVar('do_stage', d, True) + if (stagefunc.strip() != "do_stage_native" and stagefunc.strip() != "autotools_stage_all") and bb.data.getVar('AUTOTOOLS_NATIVE_STAGE_INSTALL', d, 1) == "1": + bb.data.setVar("do_install", " :", d) +} + -- cgit v1.2.3 From 5c7d389a900e2c821a5e5572f7a1bc568f86be18 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 2 Nov 2009 17:38:29 +0000 Subject: packaged-staging.bbclass: Use a variable for the location of the staging lock file (from Poky) Signed-off-by: Richard Purdie --- classes/base.bbclass | 1 + classes/packaged-staging.bbclass | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 024f8227bc..a75324b48e 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1053,6 +1053,7 @@ addtask populate_staging after do_install SYSROOT_PREPROCESS_FUNCS ?= "" SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/" +SYSROOT_LOCK = "${STAGING_DIR}/staging.lock" python do_populate_staging () { bb.build.exec_func('do_stage', d) diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index e3d274b674..cb4d1b0a96 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -110,7 +110,7 @@ def pstage_cleanpackage(pkgname, d): list_cmd = bb.data.getVar("PSTAGE_LIST_CMD", d, True) bb.debug(2, "Checking if staging package installed") - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d)) ret = os.system("PATH=\"%s\" %s | grep %s" % (path, list_cmd, pkgname)) if ret == 0: bb.debug(1, "Uninstalling package from staging...") @@ -228,7 +228,7 @@ python packagestage_scenefunc () { if stageok: bb.note("Staging package found, using it for %s." % file) installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1) - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d)) ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg)) bb.utils.unlockfile(lf) if ret != 0: @@ -292,7 +292,7 @@ populate_staging_postamble () { fi } -do_populate_staging[lockfiles] = "${STAGING_DIR}/staging.lock" +do_populate_staging[lockfiles] = "${SYSROOT_LOCK}" do_populate_staging[dirs] =+ "${DEPLOY_DIR_PSTAGE}" python do_populate_staging_prepend() { bb.build.exec_func("populate_staging_preamble", d) @@ -420,7 +420,7 @@ python do_package_stage () { pstage_set_pkgmanager(d) bb.build.exec_func("staging_helper", d) bb.build.exec_func("staging_packager", d) - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d)) bb.build.exec_func("staging_package_installer", d) bb.utils.unlockfile(lf) } -- cgit v1.2.3 From 5b28d571177ba2c9d16c89a03f7c645a0e7050fb Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 2 Nov 2009 20:40:34 +0000 Subject: base.bbclass: Rework staging function to use a DESTDIR style configuration based on the data from the do_install step (from Poky). This falls back to any standard do_stage function if defined, see the mailing list for more info. Signed-off-by: Richard Purdie --- classes/base.bbclass | 59 ++++++++++++++++++++++++++++++++++------ classes/packaged-staging.bbclass | 15 ++++++++-- 2 files changed, 62 insertions(+), 12 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index a75324b48e..583679d887 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1031,15 +1031,23 @@ sysroot_stage_dirs() { sysroot_stage_dir $from${datadir} $to${STAGING_DATADIR} } - sysroot_stage_all() { sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR} } - -base_do_stage () { - : -} +def is_legacy_staging(d): + import bb + stagefunc = bb.data.getVar('do_stage', d, True) + legacy = True + if stagefunc is None: + legacy = False + elif stagefunc.strip() == "autotools_stage_all": + legacy = False + elif stagefunc.strip() == "do_stage_native" and bb.data.getVar('AUTOTOOLS_NATIVE_STAGE_INSTALL', d, 1) == "1": + legacy = False + if bb.data.getVar('PSTAGE_BROKEN_DESTDIR', d, 1) == "1": + legacy = True + return legacy do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${bindir} ${STAGING_DIR_TARGET}/${libdir} \ ${STAGING_DIR_TARGET}/${includedir} \ @@ -1056,9 +1064,42 @@ SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/" SYSROOT_LOCK = "${STAGING_DIR}/staging.lock" python do_populate_staging () { - bb.build.exec_func('do_stage', d) - for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split(): - bb.build.exec_func(f, d) + # + # if do_stage exists, we're legacy. In that case run the do_stage, + # modify the SYSROOT_DESTDIR variable and then run the staging preprocess + # functions against staging directly. + # + # Otherwise setup a destdir, copy the results from do_install + # and run the staging preprocess against that + # + pstageactive = (bb.data.getVar("PSTAGING_ACTIVE", d, True) == "1") + lockfile = bb.data.getVar("SYSROOT_LOCK", d, True) + stagefunc = bb.data.getVar('do_stage', d, True) + legacy = is_legacy_staging(d) + if legacy: + bb.data.setVar("SYSROOT_DESTDIR", "", d) + bb.note("Legacy staging mode for %s" % bb.data.getVar("FILE", d, True)) + lock = bb.utils.lockfile(lockfile) + bb.build.exec_func('do_stage', d) + bb.build.exec_func('populate_staging_prehook', d) + for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split(): + bb.build.exec_func(f, d) + bb.build.exec_func('populate_staging_posthook', d) + bb.utils.unlockfile(lock) + else: + dest = bb.data.getVar('D', d, True) + sysrootdest = bb.data.expand('${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}', d) + bb.mkdirhier(sysrootdest) + + bb.build.exec_func("sysroot_stage_all", d) + #os.system('cp -pPR %s/* %s/' % (dest, sysrootdest)) + for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split(): + bb.build.exec_func(f, d) + bb.build.exec_func("packagedstageing_fastpath", d) + + lock = bb.utils.lockfile(lockfile) + os.system('cp -pPR %s/* /' % (sysrootdest)) + bb.utils.unlockfile(lock) } addtask install after do_compile @@ -1228,7 +1269,7 @@ inherit patch # Move to autotools.bbclass? inherit siteinfo -EXPORT_FUNCTIONS do_setscene do_clean do_mrproper do_distclean do_fetch do_unpack do_configure do_compile do_install do_package do_populate_pkgs do_stage do_rebuild do_fetchall +EXPORT_FUNCTIONS do_setscene do_clean do_mrproper do_distclean do_fetch do_unpack do_configure do_compile do_install do_package do_populate_pkgs do_rebuild do_fetchall MIRRORS[func] = "0" MIRRORS () { diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index