diff options
Diffstat (limited to 'classes')
69 files changed, 1297 insertions, 685 deletions
diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 8236a27c76..1ea4b6f1d0 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -1,11 +1,7 @@ -inherit base - # use autotools_stage_all for native packages AUTOTOOLS_NATIVE_STAGE_INSTALL = "1" def autotools_dep_prepend(d): - import bb; - if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1): return '' @@ -27,12 +23,15 @@ def autotools_dep_prepend(d): return deps + 'gnu-config-native ' EXTRA_OEMAKE = "" + DEPENDS_prepend = "${@autotools_dep_prepend(d)}" +DEPENDS_virtclass-native_prepend = "${@autotools_dep_prepend(d)}" +DEPENDS_virtclass-nativesdk_prepend = "${@autotools_dep_prepend(d)}" + acpaths = "default" EXTRA_AUTORECONF = "--exclude=autopoint" def autotools_set_crosscompiling(d): - import bb if not bb.data.inherits_class('native', d): return " cross_compiling=yes" return "" @@ -115,7 +114,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 @@ -123,12 +122,12 @@ autotools_do_configure() { echo "no" | glib-gettextize --force --copy fi fi - if grep "^[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then + 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 @@ -145,8 +144,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 @@ -173,14 +174,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 +189,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}${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} - 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 - 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/autotools_stage.bbclass b/classes/autotools_stage.bbclass index 3007eef969..ff0f4cd880 100644 --- a/classes/autotools_stage.bbclass +++ b/classes/autotools_stage.bbclass @@ -3,4 +3,3 @@ inherit autotools do_stage () { autotools_stage_all } - diff --git a/classes/base.bbclass b/classes/base.bbclass index d29ba4bfcf..e6cfeccc46 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -49,15 +49,58 @@ 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") return parser +def base_chk_file_vars(parser, localpath, params, data): + try: + name = params["name"] + except KeyError: + return False + flagName = "%s.md5sum" % name + want_md5sum = bb.data.getVarFlag("SRC_URI", flagName, data) + flagName = "%s.sha256sum" % name + want_sha256sum = bb.data.getVarFlag("SRC_URI", flagName, data) + + if (want_sha256sum == None and want_md5sum == None): + # no checksums to check, nothing to do + return False + + if not os.path.exists(localpath): + localpath = base_path_out(localpath, data) + bb.note("The localpath does not exist '%s'" % localpath) + raise Exception("The path does not exist '%s'" % localpath) + + if want_md5sum: + try: + md5pipe = os.popen('PATH=%s md5sum %s' % (bb.data.getVar('PATH', data, True), localpath)) + md5data = (md5pipe.readline().split() or [ "" ])[0] + md5pipe.close() + except OSError, e: + raise Exception("Executing md5sum failed") + if want_md5sum != md5data: + bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (want_md5sum, md5data)) + raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (want_md5sum, md5data)) + + if want_sha256sum: + try: + shapipe = os.popen('PATH=%s oe_sha256sum %s' % (bb.data.getVar('PATH', data, True), localpath)) + sha256data = (shapipe.readline().split() or [ "" ])[0] + shapipe.close() + except OSError, e: + raise Exception("Executing shasum failed") + if want_sha256sum != sha256data: + bb.note("The SHA256Sums did not match. Wanted: '%s' and Got: '%s'" % (want_sha256sum, sha256data)) + raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (want_sha256sum, sha256data)) + + return True + + 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 +171,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 +192,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 +207,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 +226,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,36 +237,24 @@ 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: return "" DEPENDS_prepend="${@base_dep_prepend(d)} " +DEPENDS_virtclass-native_prepend="${@base_dep_prepend(d)} " +DEPENDS_virtclass-nativesdk_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] - elif pn.endswith("-cross"): - pn = pn[0:-6] - elif pn.endswith("-initial"): - pn = pn[0:-8] - elif pn.endswith("-intermediate"): - pn = pn[0:-13] - elif pn.endswith("-sdk"): - pn = pn[0:-4] - - - return pn +def base_prune_suffix(var, suffixes, d): + # See if var ends with any of the suffixes listed and + # remove it if found + for suffix in suffixes: + if var.endswith(suffix): + return var.replace(suffix, "") + return var 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 +473,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)) @@ -529,21 +553,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 @@ -563,7 +577,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) @@ -661,7 +674,7 @@ python base_do_fetch() { bb.note("No conf/checksums.ini found, not checking checksums") return except: - bb.note("Creating the CheckSum parser failed") + bb.note("Creating the CheckSum parser failed: %s:%s" % (sys.exc_info()[0], sys.exc_info()[1])) return pv = bb.data.getVar('PV', d, True) @@ -670,15 +683,15 @@ python base_do_fetch() { # Check each URI for url in src_uri.split(): localpath = bb.data.expand(bb.fetch.localpath(url, localdata), localdata) - (type,host,path,_,_,_) = bb.decodeurl(url) + (type,host,path,_,_,params) = bb.decodeurl(url) uri = "%s://%s%s" % (type,host,path) try: - if type == "http" or type == "https" or type == "ftp" or type == "ftps": - if not base_chk_file(parser, pn, pv,uri, localpath, d): - if not bb.data.getVar("OE_ALLOW_INSECURE_DOWNLOADS",d, True): - bb.fatal("%s-%s: %s has no entry in conf/checksums.ini, not checking URI" % (pn,pv,uri)) + if type in [ "http", "https", "ftp", "ftps" ]: + if not (base_chk_file_vars(parser, localpath, params, d) or base_chk_file(parser, pn, pv,uri, localpath, d)): + if not bb.data.getVar("OE_ALLOW_INSECURE_DOWNLOADS", d, True): + bb.fatal("%s-%s: %s has no checksum defined, cannot check archive integrity" % (pn,pv,uri)) else: - bb.note("%s-%s: %s has no entry in conf/checksums.ini, not checking URI" % (pn,pv,uri)) + bb.note("%s-%s: %s has no checksum defined, archive integrity not checked" % (pn,pv,uri)) except Exception: raise bb.build.FuncFailed("Checksum of '%s' failed" % uri) } @@ -741,7 +754,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(".") @@ -819,7 +832,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) @@ -846,7 +859,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", @@ -907,7 +919,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: @@ -915,7 +926,6 @@ def base_get_metadata_git_branch(path, d): return "<unknown>" 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 @@ -926,7 +936,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": @@ -999,12 +1009,87 @@ base_do_compile() { fi } -base_do_stage () { - : + +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 } -do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${layout_bindir} ${STAGING_DIR_TARGET}/${layout_libdir} \ - ${STAGING_DIR_TARGET}/${layout_includedir} \ +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} +} + +def is_legacy_staging(d): + 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 + elif bb.data.getVar('NATIVE_INSTALL_WORKS', d, 1) == "1": + legacy = False + if bb.data.getVar('PSTAGE_BROKEN_DESTDIR', d, 1) == "1": + legacy = True + if bb.data.getVar('FORCE_LEGACY_STAGING', d, 1) == "1": + legacy = True + return legacy + +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} \ @@ -1013,8 +1098,61 @@ do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${layout_bindir} ${STAGING_DI # 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/" +SYSROOT_LOCK = "${STAGING_DIR}/staging.lock" + +python populate_staging_prehook () { + return +} + +python populate_staging_posthook () { + return +} + +packagedstaging_fastpath () { + : +} + python do_populate_staging () { - bb.build.exec_func('do_stage', 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)) + if bb.data.getVarFlags('do_stage', d) is None: + bb.fatal("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True)) + lock = bb.utils.lockfile(lockfile) + bb.build.exec_func('populate_staging_prehook', d) + 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) + 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("packagedstaging_fastpath", d) + + lock = bb.utils.lockfile(lockfile) + os.system(bb.data.expand('cp -pPR ${SYSROOT_DESTDIR}${TMPDIR}/* ${TMPDIR}/', d)) + bb.utils.unlockfile(lock) } addtask install after do_compile @@ -1034,6 +1172,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. @@ -1054,88 +1194,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): - import bb, os - 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): - 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(): - 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): - import bb - 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" @@ -1151,7 +1209,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: @@ -1234,19 +1292,12 @@ def base_after_parse(d): bb.data.setVar('MULTIMACH_ARCH', multiarch, d) python () { - import bb - from bb import __version__ base_after_parse(d) + if is_legacy_staging(d): + bb.debug(1, "Legacy staging mode for %s" % bb.data.getVar("FILE", d, True)) + if bb.data.getVarFlags('do_stage', d) is None: + bb.error("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True)) - # 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): @@ -1256,19 +1307,6 @@ def check_app_exists(app, d): path = data.getVar('PATH', d, 1) return len(which(path, app)) != 0 -def check_gcc3(data): - # Primarly used by qemu to make sure we have a workable gcc-3.4.x. - # Start by checking for the program name as we build it, was not - # all host-provided gcc-3.4's will work. - - gcc3_versions = 'gcc-3.4.6 gcc-3.4.4 gcc34 gcc-3.4 gcc-3.4.7 gcc-3.3 gcc33 gcc-3.3.6 gcc-3.2 gcc32' - - for gcc3 in gcc3_versions.split(): - if check_app_exists(gcc3, data): - return gcc3 - - return False - # Patch handling inherit patch @@ -1276,7 +1314,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/binconfig.bbclass b/classes/binconfig.bbclass index 5789903178..b3b2236709 100644 --- a/classes/binconfig.bbclass +++ b/classes/binconfig.bbclass @@ -1,10 +1,7 @@ -inherit base - FILES_${PN}-dev += "${bindir}/*-config" # The namespaces can clash here hence the two step replace def get_binconfig_mangle(d): - import bb.data s = "-e ''" if not bb.data.inherits_class('native', d): optional_quote = r"\(\"\?\)" @@ -18,8 +15,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): @@ -28,34 +25,34 @@ 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}${layout_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;' \ -e 's:${STAGING_DATADIR}:${datadir}:' \ - -e 's:${STAGING_DIR_HOST}${layout_prefix}:${prefix}:' \ + -e 's:${STAGING_DIR_HOST}${prefix}:${prefix}:' \ $lafile 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/canadian-cross.bbclass b/classes/canadian-cross.bbclass index 474fb1d2ba..514aaeb414 100644 --- a/classes/canadian-cross.bbclass +++ b/classes/canadian-cross.bbclass @@ -1,3 +1,8 @@ +# +# Note this class is deprecated and replaced by cross-canadian.bbclass +# + + # Canadian cross packages are built indirectly via dependency, # no need for them to be a direct target of 'world' EXCLUDE_FROM_WORLD = "1" @@ -41,31 +46,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..3cd003cb4b 100644 --- a/classes/canadian-native.bbclass +++ b/classes/canadian-native.bbclass @@ -1,4 +1,6 @@ -inherit base +# +# Note this class is deprecated and replaced by nativesdk.bbclass +# # Canadian native packages are built indirectly via dependency, # no need for them to be a direct target of 'world' @@ -43,33 +45,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/canadian-sdk.bbclass b/classes/canadian-sdk.bbclass index a6c5552310..94db57796e 100644 --- a/classes/canadian-sdk.bbclass +++ b/classes/canadian-sdk.bbclass @@ -1,3 +1,7 @@ +# +# Note this class is deprecated and replaced by crosssdk.bbclass +# + # Canadian SDK packages are built either explicitly by the user, # or indirectly via dependency. No need to be in 'world'. EXCLUDE_FROM_WORLD = "1" diff --git a/classes/canadian.bbclass b/classes/canadian.bbclass index f359a8df7f..8edce1412c 100644 --- a/classes/canadian.bbclass +++ b/classes/canadian.bbclass @@ -1,3 +1,8 @@ +# +# Note this class is deprecated +# + + # For Canadian SDKs we need to know what these values start out as, and use # them as well as the updated ones. OLD_PACKAGE_ARCH := "${PACKAGE_ARCH}" diff --git a/classes/chicken.bbclass b/classes/chicken.bbclass new file mode 100644 index 0000000000..5ebe1ff462 --- /dev/null +++ b/classes/chicken.bbclass @@ -0,0 +1,11 @@ +def chicken_arch(bb, d): + import re + arch_pattern = re.compile('^i.*86$') + target_arch = d.getVar("TARGET_ARCH", 1) + if arch_pattern.match(target_arch): + return 'x86' + else: + return target_arch + +CHICKEN_ARCH = "${@chicken_arch(bb, d)}" + diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass index b5b7b8655b..f21c4d6545 100644 --- a/classes/cmake.bbclass +++ b/classes/cmake.bbclass @@ -1,7 +1,7 @@ DEPENDS += " cmake-native " # We want the staging and installing functions from autotools -inherit autotools +inherit autotools_stage # Use in-tree builds by default but allow this to be changed # since some packages do not support them (e.g. llvm 2.5). @@ -20,9 +20,27 @@ cmake_do_configure() { cmake ${OECMAKE_SOURCEPATH} \ -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \ - -DCMAKE_FIND_ROOT_PATH=${STAGING_DIR_HOST} \ + -DCMAKE_FIND_ROOT_PATH:PATH=${STAGING_DIR_HOST} \ ${EXTRA_OECMAKE} \ -Wno-dev } -EXPORT_FUNCTIONS do_configure +cmake_do_compile() { + if [ ${OECMAKE_BUILDPATH} ] + then + cd ${OECMAKE_BUILDPATH} + fi + + base_do_compile +} + +cmake_do_install() { + if [ ${OECMAKE_BUILDPATH} ]; + then + cd ${OECMAKE_BUILDPATH} + fi + + autotools_do_install +} + +EXPORT_FUNCTIONS do_configure do_compile do_install diff --git a/classes/corecdp-mirrors.bbclass b/classes/corecdp-mirrors.bbclass new file mode 100644 index 0000000000..0d1f0b4a7b --- /dev/null +++ b/classes/corecdp-mirrors.bbclass @@ -0,0 +1,4 @@ +MIRRORS_append () { +ftp://.*/.* http://www.multitech.net/corecdp/sources/ +https?$://.*/.* http://www.multitech.net/corecdp/sources/ +} diff --git a/classes/cpan-base.bbclass b/classes/cpan-base.bbclass index 19d431ce72..82fd5b459a 100644 --- a/classes/cpan-base.bbclass +++ b/classes/cpan-base.bbclass @@ -9,8 +9,8 @@ RDEPENDS += "${@["perl", ""][(bb.data.inherits_class('native', d))]}" # Determine the staged version of perl from the perl configuration file def get_perl_version(d): - import os, bb, re - cfg = bb.data.expand('${STAGING_DIR_HOST}/perl/config.sh', d) + import re + cfg = bb.data.expand('${STAGING_LIBDIR}/perl/config.sh', d) try: f = open(cfg, 'r') except IOError: @@ -33,7 +33,6 @@ def is_new_perl(d): # Determine where the library directories are def perl_get_libdirs(d): - import bb libdir = bb.data.getVar('libdir', d, 1) if is_new_perl(d) == "yes": libdirs = libdir + '/perl5' @@ -42,7 +41,6 @@ def perl_get_libdirs(d): return libdirs def is_target(d): - import bb if not bb.data.inherits_class('native', d): return "yes" return "no" diff --git a/classes/cpan.bbclass b/classes/cpan.bbclass index 7b3faa2561..66054bc755 100644 --- a/classes/cpan.bbclass +++ b/classes/cpan.bbclass @@ -16,7 +16,7 @@ export PERL_ARCHLIB = "${STAGING_LIBDIR}/perl/${@get_perl_version(d)}" cpan_do_configure () { yes '' | perl Makefile.PL ${EXTRA_CPANFLAGS} if [ "${BUILD_SYS}" != "${HOST_SYS}" ]; then - . ${STAGING_DIR_TARGET}/perl/config.sh + . ${STAGING_LIBDIR}/perl/config.sh if [ "${IS_NEW_PERL}" = "yes" ]; then sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \ -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \ diff --git a/classes/cpan_build.bbclass b/classes/cpan_build.bbclass index c3804ff4cc..b2ec8255de 100644 --- a/classes/cpan_build.bbclass +++ b/classes/cpan_build.bbclass @@ -12,7 +12,6 @@ INHIBIT_NATIVE_STAGE_INSTALL = "1" # libmodule-build-perl) # def cpan_build_dep_prepend(d): - import bb; if bb.data.getVar('CPAN_BUILD_DEPS', d, 1): return '' pn = bb.data.getVar('PN', d, 1) @@ -25,7 +24,7 @@ DEPENDS_prepend = "${@cpan_build_dep_prepend(d)}" cpan_build_do_configure () { if [ ${@is_target(d)} == "yes" ]; then # build for target - . ${STAGING_DIR_TARGET}/perl/config.sh + . ${STAGING_LIBDIR}/perl/config.sh if [ "${IS_NEW_PERL}" = "yes" ]; then perl Build.PL --installdirs vendor \ --destdir ${D} \ diff --git a/classes/cross-canadian.bbclass b/classes/cross-canadian.bbclass new file mode 100644 index 0000000000..bd738ecd4d --- /dev/null +++ b/classes/cross-canadian.bbclass @@ -0,0 +1,46 @@ +# SDK packages are built either explicitly by the user, +# or indirectly via dependency. No need to be in 'world'. +EXCLUDE_FROM_WORLD = "1" + +# Save MULTIMACH_ARCH +OLD_MULTIMACH_ARCH := "${MULTIMACH_ARCH}" +# Save PACKAGE_ARCH +OLD_PACKAGE_ARCH := ${PACKAGE_ARCH} +PACKAGE_ARCH = "${SDK_ARCH}-${TARGET_ARCH}-canadian" +PACKAGE_ARCHS = "${PACKAGE_ARCH}" +# Also save BASE_PACKAGE_ARCH since HOST_ARCH can influence it +OLD_BASE_PACKAGE_ARCH := "${BASE_PACKAGE_ARCH}" +BASE_PACKAGE_ARCH = "${OLD_BASE_PACKAGE_ARCH}" + +INHIBIT_DEFAULT_DEPS = "1" + +STAGING_DIR_HOST = "${STAGING_DIR}/${HOST_SYS}-nativesdk" +STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}" + +PATH_append = ":${TMPDIR}/cross/${HOST_ARCH}/${bindir_cross}" +PKGDATA_DIR = "${TMPDIR}/pkgdata/${HOST_ARCH}-nativesdk${HOST_VENDOR}-${HOST_OS}" + +HOST_ARCH = "${SDK_ARCH}" +HOST_VENDOR = "${SDK_VENDOR}" +HOST_OS = "${SDK_OS}" +HOST_PREFIX = "${SDK_PREFIX}" +HOST_CC_ARCH = "${SDK_CC_ARCH}" + +CPPFLAGS = "${BUILDSDK_CPPFLAGS}" +CFLAGS = "${BUILDSDK_CFLAGS}" +CXXFLAGS = "${BUILDSDK_CFLAGS}" +LDFLAGS = "${BUILDSDK_LDFLAGS}" + +# Change to place files in SDKPATH +prefix = "${SDKPATH}" +exec_prefix = "${SDKPATH}" +base_prefix = "${SDKPATH}" + +FILES_${PN} = "${prefix}" +FILES_${PN}-dbg += "${prefix}/.debug \ + ${prefix}/bin/.debug \ + " + +export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${layout_libdir}/pkgconfig" +export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}" + 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/crosssdk.bbclass b/classes/crosssdk.bbclass new file mode 100644 index 0000000000..0b1af8fc2f --- /dev/null +++ b/classes/crosssdk.bbclass @@ -0,0 +1,15 @@ +inherit cross + +PACKAGES = "" + +BASE_PACKAGE_ARCH = "${SDK_ARCH}" +PACKAGE_ARCH = "${BASE_PACKAGE_ARCH}" +STAGING_DIR_TARGET = "${STAGING_DIR}/${SDK_ARCH}-nativesdk${SDK_VENDOR}-${SDK_OS}" + +TARGET_ARCH = "${SDK_ARCH}" +TARGET_VENDOR = "${SDK_VENDOR}" +TARGET_OS = "${SDK_OS}" +TARGET_PREFIX = "${SDK_PREFIX}" +TARGET_CC_ARCH = "${SDK_CC_ARCH}" + + diff --git a/classes/debian.bbclass b/classes/debian.bbclass index 0afe9fcc39..8f6e7d88cf 100644 --- a/classes/debian.bbclass +++ b/classes/debian.bbclass @@ -16,7 +16,7 @@ do_package_write_rpm[rdeptask] = "do_package" python debian_package_name_hook () { import glob, copy, stat, errno, re - workdir = bb.data.getVar('WORKDIR', d, 1) + pkgdest = bb.data.getVar('PKGDEST', d, 1) packages = bb.data.getVar('PACKAGES', d, 1) def socrunch(s): @@ -45,7 +45,7 @@ python debian_package_name_hook () { sonames = [] has_bins = 0 has_libs = 0 - pkg_dir = os.path.join(workdir, "install", orig_pkg) + pkg_dir = os.path.join(pkgdest, orig_pkg) for root, dirs, files in os.walk(pkg_dir): if bin_re.match(root) and files: has_bins = 1 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/e.bbclass b/classes/e.bbclass index a6fa1d0d78..fca9aa0010 100644 --- a/classes/e.bbclass +++ b/classes/e.bbclass @@ -23,7 +23,7 @@ export FREETYPE_CONFIG = "${STAGING_BINDIR_CROSS}/freetype-config" # This construction is stupid, someone with more E knowledge should change it to =+ or something # And it's in efl.bbclass as well.... -PACKAGES = "${PN}-dbg ${PN}-themes ${PN} ${PN}-dev ${PN}-doc ${PN}-lib" +PACKAGES = "${PN}-dbg ${PN}-themes ${PN} ${PN}-dev ${PN}-doc ${PN}-lib ${PN}-static" FILES_${PN}-lib = "${libdir}/lib*.so.*" FILES_${PN}-themes = "${datadir}/${PN}/themes ${datadir}/${PN}/data ${datadir}/${PN}/fonts ${datadir}/${PN}/pointers ${datadir}/${PN}/images ${datadir}/${PN}/users ${datadir}/${PN}/images ${datadir}/${PN}/styles" FILES_${PN}-dev += "${includedir} ${libdir}/lib*.so" diff --git a/classes/efl.bbclass b/classes/efl.bbclass index 22e664ce01..900d9c7f0d 100644 --- a/classes/efl.bbclass +++ b/classes/efl.bbclass @@ -11,20 +11,23 @@ PE = "2" ARM_INSTRUCTION_SET = "arm" -AUTOTOOLS_STAGE_PKGCONFIG = "1" -# do NOT inherit pkgconfig here, see note in autotools_stage_all inherit autotools +# evas-native looks at this var, so keep it +AUTOTOOLS_STAGE_PKGCONFIG = "1" + do_configure_prepend() { touch config.rpath } -do_stage() { - autotools_stage_all +do_install_prepend () { + for i in `find ${S}/ -name "*.pc" -type f` ; do \ + sed -i -e 's:-L${STAGING_LIBDIR}::g' -e 's:-I${STAGING_INCDIR}::g' $i + done } # This construction is stupid, someone with more E knowledge should change it to =+ or something -PACKAGES = "${PN}-dbg ${PN} ${PN}-themes ${PN}-dev ${PN}-doc ${PN}-tests" +PACKAGES = "${PN}-dbg ${PN} ${PN}-themes ${PN}-dev ${PN}-doc ${PN}-tests ${PN}-static" FILES_${PN} = "${libdir}/*.so.*" @@ -40,13 +43,14 @@ FILES_${PN}-themes = "${datadir}/${PN}/themes \ FILES_${PN}-dev += "${bindir}/${PN}-config \ ${libdir}/pkgconfig/* \ ${libdir}/lib*.la \ - ${libdir}/lib*.a \ ${libdir}/*.so \ - ${libdir}/${PN}/*.a \ ${libdir}/${PN}/*.la \ - ${libdir}/${PN}/*/*.a \ ${libdir}/${PN}/*/*.la" +FILES_${PN}-static += "${libdir}/${PN}/*.a \ + ${libdir}/${PN}/*/*.a \ +" + FILES_${PN}-dbg += "${libdir}/${PN}/.debug \ ${libdir}/${PN}/*/.debug" diff --git a/classes/gconf.bbclass b/classes/gconf.bbclass index 47df06329b..f55ae2c2ae 100644 --- a/classes/gconf.bbclass +++ b/classes/gconf.bbclass @@ -32,10 +32,10 @@ fi python populate_packages_append () { import os.path, re packages = bb.data.getVar('PACKAGES', d, 1).split() - workdir = bb.data.getVar('WORKDIR', d, 1) + pkgdest = bb.data.getVar('PKGDEST', d, 1) for pkg in packages: - schema_dir = '%s/install/%s/etc/gconf/schemas' % (workdir, pkg) + schema_dir = '%s/%s/etc/gconf/schemas' % (pkgdest, pkg) schemas = [] schema_re = re.compile(".*\.schemas$") if os.path.exists(schema_dir): diff --git a/classes/gettext.bbclass b/classes/gettext.bbclass index bc0a1dfaba..b2ff2849fa 100644 --- a/classes/gettext.bbclass +++ b/classes/gettext.bbclass @@ -1,6 +1,5 @@ DEPENDS =+ "gettext-native" def gettext_after_parse(d): - import bb # Remove the NLS bits if USE_NLS is no. if bb.data.getVar('USE_NLS', d, 1) == 'no': cfg = oe_filter_out('^--(dis|en)able-nls$', bb.data.getVar('EXTRA_OECONF', d, 1) or "", d) @@ -15,4 +14,3 @@ python () { DEPENDS =+ "gettext-native" EXTRA_OECONF += "--enable-nls" - diff --git a/classes/glibc-package.bbclass b/classes/glibc-package.bbclass new file mode 100644 index 0000000000..90b9bfd584 --- /dev/null +++ b/classes/glibc-package.bbclass @@ -0,0 +1,305 @@ +# +# This class knows how to package up glibc. Its shared since prebuild binary toolchains +# may need packaging and its pointless to duplicate this code. +# +# Caller should set GLIBC_INTERNAL_USE_BINARY_LOCALE to one of: +# "compile" - Use QEMU to generate the binary locale files +# "precompiled" - The binary locale files are pregenerated and already present +# "ondevice" - The device will build the locale files upon first boot through the postinst + +inherit qemu + +GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "ondevice" + +PACKAGES = "glibc-dbg glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-static glibc-doc glibc-locale libcidn libmemusage libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile" +PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* locale-base-* glibc-binary-localedata-*" + +INSANE_SKIP_glibc-dbg = True + +libc_baselibs = "${base_libdir}/libcrypt*.so.* ${base_libdir}/libcrypt-*.so ${base_libdir}/libc*.so.* ${base_libdir}/libc-*.so ${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so ${base_libdir}/ld*.so.* ${base_libdir}/ld-*.so ${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so ${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so ${base_libdir}/librt*.so.* ${base_libdir}/librt-*.so ${base_libdir}/libutil*.so.* ${base_libdir}/libutil-*.so ${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so ${base_libdir}/libnss_files*.so.* ${base_libdir}/libnss_files-*.so ${base_libdir}/libnss_compat*.so.* ${base_libdir}/libnss_compat-*.so ${base_libdir}/libnss_dns*.so.* ${base_libdir}/libnss_dns-*.so ${base_libdir}/libdl*.so.* ${base_libdir}/libdl-*.so ${base_libdir}/libanl*.so.* ${base_libdir}/libanl-*.so ${base_libdir}/libBrokenLocale*.so.* ${base_libdir}/libBrokenLocale-*.so" + +# The problem is that if PN = "glibc", FILES_${PN} will overwrite FILES_glibc +# Solution: Make them both the same thing, then it doesn't matter + +glibcfiles = "${libc_baselibs} ${libexecdir}/* ${datadir}/zoneinfo ${@base_conditional('USE_LDCONFIG', '1', '${base_sbindir}/ldconfig', '', d)}" +glibcdbgfiles = "${bindir}/.debug ${sbindir}/.debug ${libdir}/.debug \ + ${base_bindir}/.debug ${base_sbindir}/.debug ${base_libdir}/.debug \ + ${libdir}/gconv/.debug ${libexecdir}/*/.debug" +glibcdevfiles = "${bindir}/rpcgen ${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la \ + ${libdir}/*.a ${libdir}/*.o ${libdir}/pkgconfig ${libdir}/*nonshared.a \ + ${base_libdir}/*.a ${base_libdir}/*.o ${datadir}/aclocal" + +FILES_glibc = "${glibcfiles}" +FILES_${PN} = "${glibcfiles}" +FILES_ldd = "${bindir}/ldd" +FILES_libsegfault = "${base_libdir}/libSegFault*" +FILES_libcidn = "${base_libdir}/libcidn*.so" +FILES_libmemusage = "${base_libdir}/libmemusage.so" +FILES_glibc-extra-nss = "${base_libdir}/libnss*" +FILES_sln = "${base_sbindir}/sln" +FILES_glibc-dev = "${glibcdevfiles}" +FILES_${PN}-dev = "${glibcdevfiles}" +FILES_glibc-dbg = "${glibcdbgfiles}" +FILES_${PN}-dbg = "${glibcdbgfiles}" +FILES_nscd = "${sbindir}/nscd* ${sysconfdir}/nscd* ${sysconfdir}/init.d/nscd*" +FILES_glibc-utils = "${bindir}/* ${sbindir}/*" +FILES_glibc-gconv = "${libdir}/gconv/*" +FILES_catchsegv = "${bindir}/catchsegv" +RDEPENDS_catchsegv = "libsegfault" +FILES_glibc-pcprofile = "${base_libdir}/libpcprofile.so" +FILES_glibc-thread-db = "${base_libdir}/libthread_db*" +FILES_localedef = "${bindir}/localedef" +RPROVIDES_glibc-dev += "libc-dev" + +DESCRIPTION_sln = "glibc: create symbolic links between files" +DESCRIPTION_nscd = "glibc: name service cache daemon for passwd, group, and hosts" +DESCRIPTION_glibc-extra-nss = "glibc: nis, nisplus and hesiod search services" +DESCRIPTION_ldd = "glibc: print shared library dependencies" +DESCRIPTION_localedef = "glibc: compile locale definition files" +DESCRIPTION_glibc-utils = "glibc: misc utilities like iconf, local, gencat, tzselect, rpcinfo, ..." + +TMP_LOCALE="/tmp/locale${libdir}/locale" + +locale_base_postinst() { +#!/bin/sh + +if [ "x$D" != "x" ]; then + exit 1 +fi + +rm -rf ${TMP_LOCALE} +mkdir -p ${TMP_LOCALE} +if [ -f ${libdir}/locale/locale-archive ]; then + cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/ +fi +localedef --inputfile=${datadir}/i18n/locales/%s --charmap=%s --prefix=/tmp/locale %s +mkdir -p ${libdir}/locale/ +mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/ +rm -rf ${TMP_LOCALE} +} + +locale_base_postrm() { +#!/bin/sh + +rm -rf ${TMP_LOCALE} +mkdir -p ${TMP_LOCALE} +if [ -f ${libdir}/locale/locale-archive ]; then + cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/ +fi +localedef --delete-from-archive --inputfile=${datadir}/locales/%s --charmap=%s --prefix=/tmp/locale %s +mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/ +rm -rf ${TMP_LOCALE} +} + +do_prep_locale_tree() { + treedir=${WORKDIR}/locale-tree + rm -rf $treedir + mkdir -p $treedir/bin $treedir/lib $treedir/${datadir} $treedir/${libdir}/locale + cp -pPR ${PKGD}${datadir}/i18n $treedir/${datadir}/i18n + # unzip to avoid parsing errors + for i in $treedir/${datadir}/i18n/charmaps/*gz; do + gunzip $i + done + ls -d ${PKGD}${base_libdir}/* | xargs -iBLAH cp -pPR BLAH $treedir/lib + if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so ]; then + cp -pPR ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so $treedir/lib + fi + if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so.* ]; then + cp -pPR ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so.* $treedir/lib + fi + install -m 0755 ${PKGD}${bindir}/localedef $treedir/bin +} + +do_collect_bins_from_locale_tree() { + treedir=${WORKDIR}/locale-tree + + mkdir -p ${PKGD}${libdir} + cp -pPR $treedir/${libdir}/locale ${PKGD}${libdir} +} + +python package_do_split_gconvs () { + import os, re + if (bb.data.getVar('PACKAGE_NO_GCONV', d, 1) == '1'): + bb.note("package requested not splitting gconvs") + return + + if not bb.data.getVar('PACKAGES', d, 1): + return + + libdir = bb.data.getVar('libdir', d, 1) + if not libdir: + bb.error("libdir not defined") + return + datadir = bb.data.getVar('datadir', d, 1) + if not datadir: + bb.error("datadir not defined") + return + + gconv_libdir = base_path_join(libdir, "gconv") + charmap_dir = base_path_join(datadir, "i18n", "charmaps") + locales_dir = base_path_join(datadir, "i18n", "locales") + binary_locales_dir = base_path_join(libdir, "locale") + + do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='glibc-gconv-%s', description='gconv module for character set %s', extra_depends='glibc-gconv') + + do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='glibc-charmap-%s', description='character map for %s encoding', extra_depends='') + + def calc_locale_deps(fn, pkg, file_regex, output_pattern, group): + deps = [] + f = open(fn, "r") + c_re = re.compile('^copy "(.*)"') + i_re = re.compile('^include "(\w+)".*') + for l in f.readlines(): + m = c_re.match(l) or i_re.match(l) + if m: + dp = legitimize_package_name('glibc-localedata-%s' % m.group(1)) + if not dp in deps: + deps.append(dp) + f.close() + if deps != []: + bb.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d) + + do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='glibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps, extra_depends='') + bb.data.setVar('PACKAGES', bb.data.getVar('PACKAGES', d) + ' glibc-gconv', d) + + use_bin = bb.data.getVar("GLIBC_INTERNAL_USE_BINARY_LOCALE", d, 1) + + dot_re = re.compile("(.*)\.(.*)") + + if use_bin != "precompiled": + supported = bb.data.getVar('GLIBC_GENERATE_LOCALES', d, 1) + if not supported or supported == "all": + f = open(base_path_join(bb.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r") + supported = f.readlines() + f.close() + else: + supported = supported.split() + supported = map(lambda s:s.replace(".", " ") + "\n", supported) + else: + supported = [] + full_bin_path = bb.data.getVar('PKGD', d, True) + binary_locales_dir + for dir in os.listdir(full_bin_path): + dbase = dir.split(".") + d2 = " " + if len(dbase) > 1: + d2 = "." + dbase[1].upper() + " " + supported.append(dbase[0] + d2) + + # Collate the locales by base and encoding + utf8_only = int(bb.data.getVar('LOCALE_UTF8_ONLY', d, 1) or 0) + encodings = {} + for l in supported: + l = l[:-1] + (locale, charset) = l.split(" ") + if utf8_only and charset != 'UTF-8': + continue + m = dot_re.match(locale) + if m: + locale = m.group(1) + if not encodings.has_key(locale): + encodings[locale] = [] + encodings[locale].append(charset) + + def output_locale_source(name, pkgname, locale, encoding): + bb.data.setVar('RDEPENDS_%s' % pkgname, 'localedef glibc-localedata-%s glibc-charmap-%s' % (legitimize_package_name(locale), legitimize_package_name(encoding)), d) + bb.data.setVar('pkg_postinst_%s' % pkgname, bb.data.getVar('locale_base_postinst', d, 1) % (locale, encoding, locale), d) + bb.data.setVar('pkg_postrm_%s' % pkgname, bb.data.getVar('locale_base_postrm', d, 1) % (locale, encoding, locale), d) + + def output_locale_binary_rdepends(name, pkgname, locale, encoding): + m = re.match("(.*)\.(.*)", name) + if m: + glibc_name = "%s.%s" % (m.group(1), m.group(2).lower().replace("-","")) + else: + glibc_name = name + bb.data.setVar('RDEPENDS_%s' % pkgname, legitimize_package_name('glibc-binary-localedata-%s' % glibc_name), d) + + def output_locale_binary(name, pkgname, locale, encoding): + # This is a hack till linux-libc-headers gets patched for the missing arm syscalls and all arm device kernels as well + if bb.data.getVar("DISTRO_NAME", d, 1) == "Angstrom": + kernel_ver = "2.6.24" + elif bb.data.getVar("DISTRO_NAME", d, 1) == "KaeilOS": + kernel_ver = "2.6.24" + else: + kernel_ver = bb.data.getVar("OLDEST_KERNEL", d, 1) + + qemu = qemu_target_binary(d) + " -s 1048576" + if kernel_ver: + qemu += " -r %s" % (kernel_ver) + pkgname = 'locale-base-' + legitimize_package_name(name) + + treedir = base_path_join(bb.data.getVar("WORKDIR", d, 1), "locale-tree") + ldlibdir = "%s/lib" % treedir + path = bb.data.getVar("PATH", d, 1) + i18npath = base_path_join(treedir, datadir, "i18n") + + localedef_opts = "--force --old-style --no-archive --prefix=%s --inputfile=%s/i18n/locales/%s --charmap=%s %s" % (treedir, datadir, locale, encoding, name) + + qemu_options = bb.data.getVar("QEMU_OPTIONS_%s" % bb.data.getVar('PACKAGE_ARCH', d, 1), d, 1) + if not qemu_options: + qemu_options = bb.data.getVar('QEMU_OPTIONS', d, 1) + + cmd = "PATH=\"%s\" I18NPATH=\"%s\" %s -L %s -E LD_LIBRARY_PATH=%s %s %s/bin/localedef %s" % (path, i18npath, qemu, treedir, ldlibdir, qemu_options, treedir, localedef_opts) + bb.note("generating locale %s (%s)" % (locale, encoding)) + if os.system(cmd): + raise bb.build.FuncFailed("localedef returned an error (command was %s)." % cmd) + + def output_locale(name, locale, encoding): + pkgname = 'locale-base-' + legitimize_package_name(name) + bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d) + bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d) + rprovides = 'virtual-locale-%s' % legitimize_package_name(name) + m = re.match("(.*)_(.*)", name) + if m: + rprovides += ' virtual-locale-%s' % m.group(1) + bb.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d) + if use_bin == "compile": + output_locale_binary_rdepends(name, pkgname, locale, encoding) + output_locale_binary(name, pkgname, locale, encoding) + elif use_bin == "precompiled": + output_locale_binary_rdepends(name, pkgname, locale, encoding) + else: + output_locale_source(name, pkgname, locale, encoding) + + if use_bin == "compile": + bb.note("preparing tree for binary locale generation") + bb.build.exec_func("do_prep_locale_tree", d) + + # Reshuffle names so that UTF-8 is preferred over other encodings + non_utf8 = [] + for l in encodings.keys(): + if len(encodings[l]) == 1: + output_locale(l, l, encodings[l][0]) + if encodings[l][0] != "UTF-8": + non_utf8.append(l) + else: + if "UTF-8" in encodings[l]: + output_locale(l, l, "UTF-8") + encodings[l].remove("UTF-8") + else: + non_utf8.append(l) + for e in encodings[l]: + output_locale('%s.%s' % (l, e), l, e) + + if non_utf8 != [] and use_bin != "precompiled": + bb.note("the following locales are supported only in legacy encodings:") + bb.note(" " + " ".join(non_utf8)) + + if use_bin == "compile": + bb.note("collecting binary locales from locale tree") + bb.build.exec_func("do_collect_bins_from_locale_tree", d) + do_split_packages(d, binary_locales_dir, file_regex='(.*)', output_pattern='glibc-binary-localedata-%s', description='binary locale definition for %s', extra_depends='', allow_dirs=True) + elif use_bin == "precompiled": + do_split_packages(d, binary_locales_dir, file_regex='(.*)', output_pattern='glibc-binary-localedata-%s', description='binary locale definition for %s', extra_depends='', allow_dirs=True) + else: + bb.note("generation of binary locales disabled. this may break i18n!") + +} + +# We want to do this indirection so that we can safely 'return' +# from the called function even though we're prepending +python populate_packages_prepend () { + if bb.data.getVar('DEBIAN_NAMES', d, 1): + bb.data.setVar('PKG_glibc', 'libc6', d) + bb.data.setVar('PKG_glibc-dev', 'libc6-dev', d) + bb.build.exec_func('package_do_split_gconvs', d) +} diff --git a/classes/gnome.bbclass b/classes/gnome.bbclass index 2045697516..cb03650b48 100644 --- a/classes/gnome.bbclass +++ b/classes/gnome.bbclass @@ -24,6 +24,7 @@ gnome_stage_includes() { do_install_append() { rm -rf ${D}${localstatedir}/lib/scrollkeeper/* + rm -rf ${D}${localstatedir}/scrollkeeper/* rm -f ${D}${datadir}/applications/*.cache } diff --git a/classes/gtk-icon-cache.bbclass b/classes/gtk-icon-cache.bbclass index ea1fdff3dd..524c2f0c46 100644 --- a/classes/gtk-icon-cache.bbclass +++ b/classes/gtk-icon-cache.bbclass @@ -27,12 +27,11 @@ done } python populate_packages_append () { - import os.path packages = bb.data.getVar('PACKAGES', d, 1).split() - workdir = bb.data.getVar('WORKDIR', d, 1) + pkgdest = bb.data.getVar('PKGDEST', d, 1) for pkg in packages: - icon_dir = '%s/install/%s/%s/icons' % (workdir, pkg, bb.data.getVar('datadir', d, 1)) + icon_dir = '%s/%s/%s/icons' % (pkgdest, pkg, bb.data.getVar('datadir', d, 1)) if not os.path.exists(icon_dir): continue diff --git a/classes/icecc.bbclass b/classes/icecc.bbclass index 0eb2d9feee..0a22f70001 100644 --- a/classes/icecc.bbclass +++ b/classes/icecc.bbclass @@ -33,10 +33,8 @@ def icc_determine_gcc_version(gcc): 'i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5363)' """ - import os return os.popen("%s --version" % gcc ).readline().split()[2] - def create_cross_env(bb,d): """ Create a tar.bz2 of the current toolchain @@ -47,7 +45,7 @@ def create_cross_env(bb,d): if len(prefix) == 0: return "" - import tarfile, socket, time, os + import tarfile, socket, time ice_dir = bb.data.expand('${CROSS_DIR}', d) prefix = bb.data.expand('${HOST_PREFIX}' , d) distro = bb.data.expand('${DISTRO}', d) @@ -97,7 +95,7 @@ def create_cross_env(bb,d): def create_native_env(bb,d): - import tarfile, socket, time, os + import tarfile, socket, time ice_dir = bb.data.expand('${CROSS_DIR}', d) prefix = bb.data.expand('${HOST_PREFIX}' , d) distro = bb.data.expand('${DISTRO}', d) @@ -144,7 +142,7 @@ def get_cross_kernel_cc(bb,d): def create_cross_kernel_env(bb,d): - import tarfile, socket, time, os + import tarfile, socket, time ice_dir = bb.data.expand('${CROSS_DIR}', d) prefix = bb.data.expand('${HOST_PREFIX}' , d) distro = bb.data.expand('${DISTRO}', d) @@ -210,8 +208,6 @@ def create_path(compilers, type, bb, d): """ Create Symlinks for the icecc in the staging directory """ - import os - staging = os.path.join(bb.data.expand('${STAGING_DIR}', d), "ice", type) #check if the icecc path is set by the user @@ -256,7 +252,7 @@ def icc_path(bb,d): #"system" package blacklist contains a list of packages that can not distribute compile tasks #for one reason or the other - system_package_blacklist = [ "uclibc", "glibc", "gcc", "qemu", "bind", "u-boot", "dhcp-forwarder", "enchant", "connman" ] + system_package_blacklist = [ "uclibc", "glibc", "gcc", "bind", "u-boot", "dhcp-forwarder", "enchant", "connman" ] user_package_blacklist = (bb.data.getVar('ICECC_USER_PACKAGE_BL', d) or "").split() package_blacklist = system_package_blacklist + user_package_blacklist diff --git a/classes/image.bbclass b/classes/image.bbclass index ab580312bb..9dce609733 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -17,6 +17,9 @@ IMAGE_INITSCRIPTS ?= "initscripts" # IMAGE_LOGIN_MANAGER ?= "tinylogin" +# set sane default for the SPLASH variable +SPLASH ?= "" + IMAGE_KEEPROOTFS ?= "" IMAGE_KEEPROOTFS[doc] = "Set to non-empty to keep ${IMAGE_ROOTFS} around after image creation." diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 950bb9771e..804caf06ee 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -61,6 +61,7 @@ def package_qa_get_machine_dict(): "i486": ( 3, 0, 0, True, True), "i586": ( 3, 0, 0, True, True), "i686": ( 3, 0, 0, True, True), + "mips": ( 8, 0, 0, False, True), "mipsel": ( 8, 0, 0, True, True), "avr32": (6317, 0, 0, False, True), "sh4": (42, 0, 0, True, True), @@ -181,7 +182,6 @@ def package_qa_get_elf(path, bits32): def package_qa_clean_path(path,d): """ Remove the common prefix from the path. In this case it is the TMPDIR""" - import bb return path.replace(bb.data.getVar('TMPDIR',d,True),"") def package_qa_make_fatal_error(error_class, name, path,d): @@ -196,7 +196,6 @@ def package_qa_write_error(error_class, name, path, d): """ Log the error """ - import bb, os if not bb.data.getVar('QA_LOG', d): bb.note("a QA error occured but will not be logged because QA_LOG is not set") return @@ -221,7 +220,6 @@ def package_qa_write_error(error_class, name, path, d): f.close() def package_qa_handle_error(error_class, error_msg, name, path, d): - import bb bb.error("QA Issue with %s: %s" % (name, error_msg)) package_qa_write_error(error_class, name, path, d) return not package_qa_make_fatal_error(error_class, name, path, d) @@ -258,7 +256,6 @@ def package_qa_check_dev(path, name,d, elf): Check for ".so" library symlinks in non-dev packages """ - import bb, os sane = True # SDK packages are special. @@ -279,7 +276,6 @@ def package_qa_check_dbg(path, name,d, elf): Check for ".debug" files or directories outside of the dbg package """ - import bb, os sane = True if not "-dbg" in name: @@ -304,7 +300,6 @@ def package_qa_check_arch(path,name,d, elf): if not elf: return True - import bb, os sane = True target_os = bb.data.getVar('TARGET_OS', d, True) target_arch = bb.data.getVar('TARGET_ARCH', d, True) @@ -339,7 +334,6 @@ def package_qa_check_desktop(path, name, d, elf): """ Run all desktop files through desktop-file-validate. """ - import bb, os sane = True if path.endswith(".desktop"): output = os.popen("desktop-file-validate %s" % path) @@ -353,7 +347,6 @@ def package_qa_hash_style(path, name, d, elf): """ Check if the binary has the right hash style... """ - import bb, os if not elf: return True @@ -400,7 +393,6 @@ def package_qa_check_staged(path,d): to find the one responsible for the errors easily even if we look at every .pc and .la file """ - import os, bb sane = True tmpdir = bb.data.getVar('TMPDIR', d, True) @@ -440,7 +432,6 @@ def package_qa_check_staged(path,d): # Walk over all files in a directory and call func def package_qa_walk(path, funcs, package,d): - import bb, os sane = True #if this will throw an exception, then fix the dict above @@ -463,14 +454,13 @@ def package_qa_walk(path, funcs, package,d): return sane -def package_qa_check_rdepends(pkg, workdir, d): - import bb +def package_qa_check_rdepends(pkg, pkgdest, d): sane = True if not "-dbg" in pkg and not "task-" in pkg and not "-image" in pkg: # Copied from package_ipk.bbclass # boiler plate to update the data localdata = bb.data.createCopy(d) - root = "%s/install/%s" % (workdir, pkg) + root = "%s/%s" % (pkgdest, pkg) bb.data.setVar('ROOT', '', localdata) bb.data.setVar('ROOT_%s' % pkg, root, localdata) @@ -501,9 +491,8 @@ def package_qa_check_rdepends(pkg, workdir, d): # The PACKAGE FUNC to scan each package python do_package_qa () { - import bb bb.debug(2, "DO PACKAGE QA") - workdir = bb.data.getVar('WORKDIR', d, True) + pkgdest = bb.data.getVar('PKGDEST', d, True) packages = bb.data.getVar('PACKAGES',d, True) # no packages should be scanned @@ -522,10 +511,10 @@ python do_package_qa () { continue bb.debug(1, "Checking Package: %s" % package) - path = "%s/install/%s" % (workdir, package) + path = "%s/%s" % (pkgdest, package) if not package_qa_walk(path, checks, package, d): walk_sane = False - if not package_qa_check_rdepends(package, workdir, d): + if not package_qa_check_rdepends(package, pkgdest, d): rdepends_sane = False if not walk_sane or not rdepends_sane: @@ -547,7 +536,6 @@ python do_qa_staging() { addtask qa_configure after do_configure before do_compile python do_qa_configure() { bb.debug(1, "Checking sanity of the config.log file") - import os for root, dirs, files in os.walk(bb.data.getVar('WORKDIR', d, True)): statement = "grep 'CROSS COMPILE Badness:' %s > /dev/null" % \ os.path.join(root,"config.log") diff --git a/classes/java.bbclass b/classes/java.bbclass index cacd2ce525..d4cf5aa954 100644 --- a/classes/java.bbclass +++ b/classes/java.bbclass @@ -13,7 +13,7 @@ libdir_jni ?= ${libdir}/jni # JVM bundle location on target libdir_jvm ?= ${libdir}/jvm -STAGING_DATADIR_JAVA ?= ${STAGING_DATADIR}/java +STAGING_DATADIR_JAVA ?= ${STAGING_DIR_JAVA} STAGING_LIBDIR_JNI ?= ${STAGING_LIBDIR}/jni STAGING_LIBDIR_JVM ?= ${STAGING_LIBDIR}/jvm @@ -68,11 +68,11 @@ oe_jarinstall() { # Creates symlinks out of the remaining arguments. while [ "$#" -gt 0 ]; do - if [ -e $dir/$1 ]; then + if [ -e $dir/$1 -o -h $dir/$1 ]; then oewarn "file was in the way. removing:" $dir/$1 rm $dir/$1 fi - ln -sf $destname $dir/$1 + ln -s $destname $dir/$1 shift done } diff --git a/classes/kernel-arch.bbclass b/classes/kernel-arch.bbclass index 65d220063e..8894fa554c 100644 --- a/classes/kernel-arch.bbclass +++ b/classes/kernel-arch.bbclass @@ -15,7 +15,7 @@ valid_archs = "alpha cris ia64 \ avr32 blackfin" def map_kernel_arch(a, d): - import bb, re + import re valid_archs = bb.data.getVar('valid_archs', d, 1).split() diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 9c1f637a66..83530b5a5e 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -8,9 +8,6 @@ KERNEL_IMAGETYPE ?= "zImage" # Add dependency on mkimage for kernels that build a uImage python __anonymous () { - - import bb - kerneltype = bb.data.getVar('KERNEL_IMAGETYPE', d, 1) or '' if kerneltype == 'uImage': depends = bb.data.getVar("DEPENDS", d, 1) @@ -98,13 +95,18 @@ kernel_do_compile() { kernel_do_compile[depends] = "${INITRAMFS_TASK}" kernel_do_stage() { - ASMDIR=`readlink include/asm` + if [ -e include/asm ] ; then + # This link is generated only in kernel before 2.6.33-rc1, don't stage it for newer kernels + ASMDIR=`readlink include/asm` - mkdir -p ${STAGING_KERNEL_DIR}/include/$ASMDIR - cp -fR include/$ASMDIR/* ${STAGING_KERNEL_DIR}/include/$ASMDIR/ + mkdir -p ${STAGING_KERNEL_DIR}/include/$ASMDIR + cp -fR include/$ASMDIR/* ${STAGING_KERNEL_DIR}/include/$ASMDIR/ + fi # Kernel 2.6.27 moved headers from includes/asm-${ARCH} to arch/${ARCH}/include/asm if [ -e arch/${ARCH}/include/asm/ ] ; then - cp -fR arch/${ARCH}/include/asm/* ${STAGING_KERNEL_DIR}/include/$ASMDIR/ + if [ -e include/asm ] ; then + cp -fR arch/${ARCH}/include/asm/* ${STAGING_KERNEL_DIR}/include/$ASMDIR/ + fi install -d ${STAGING_KERNEL_DIR}/arch/${ARCH}/include cp -fR arch/${ARCH}/* ${STAGING_KERNEL_DIR}/arch/${ARCH}/ @@ -115,8 +117,10 @@ kernel_do_stage() { cp -fR arch/x86/* ${STAGING_KERNEL_DIR}/arch/x86/ fi - rm -f ${STAGING_KERNEL_DIR}/include/asm - ln -sf $ASMDIR ${STAGING_KERNEL_DIR}/include/asm + if [ -e include/asm ] ; then + rm -f ${STAGING_KERNEL_DIR}/include/asm + ln -sf $ASMDIR ${STAGING_KERNEL_DIR}/include/asm + fi mkdir -p ${STAGING_KERNEL_DIR}/include/asm-generic cp -fR include/asm-generic/* ${STAGING_KERNEL_DIR}/include/asm-generic/ @@ -204,8 +208,12 @@ kernel_do_install() { kernel_do_configure() { yes '' | oe_runmake oldconfig if [ ! -z "${INITRAMFS_IMAGE}" ]; then - cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" initramfs.cpio.gz - fi + for img in cpio.gz cpio.lzo cpio.lzma; do + if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" ]; then + cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" initramfs.$img + fi + done + fi } do_menuconfig() { @@ -218,7 +226,7 @@ do_menuconfig() { fi } do_menuconfig[nostamp] = "1" -addtask menuconfig after do_patch +addtask menuconfig after do_configure pkg_postinst_kernel () { cd /${KERNEL_IMAGEDEST}; update-alternatives --install /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true @@ -309,8 +317,9 @@ module_conf_sco = "alias bt-proto-2 sco" module_conf_rfcomm = "alias bt-proto-3 rfcomm" python populate_packages_prepend () { + import os def extract_modinfo(file): - import tempfile, os, re + import tempfile, re tempfile.tempdir = bb.data.getVar("WORKDIR", d, 1) tf = tempfile.mkstemp() tmpfile = tf[1] @@ -331,9 +340,9 @@ python populate_packages_prepend () { return vals def parse_depmod(): - import os, re + import re - dvar = bb.data.getVar('D', d, 1) + dvar = bb.data.getVar('PKGD', d, 1) if not dvar: bb.error("D not defined") return @@ -382,10 +391,10 @@ python populate_packages_prepend () { return deps def get_dependencies(file, pattern, format): - file = file.replace(bb.data.getVar('D', d, 1) or '', '', 1) + file = file.replace(bb.data.getVar('PKGD', d, 1) or '', '', 1) if module_deps.has_key(file): - import os.path, re + import re dependencies = [] for i in module_deps[file]: m = re.match(pattern, os.path.basename(i)) @@ -401,7 +410,7 @@ python populate_packages_prepend () { import re vals = extract_modinfo(file) - dvar = bb.data.getVar('D', d, 1) + dvar = bb.data.getVar('PKGD', d, 1) # If autoloading is requested, output /etc/modutils/<name> and append # appropriate modprobe commands to the postinst @@ -463,7 +472,7 @@ python populate_packages_prepend () { do_split_packages(d, root='/lib/firmware', file_regex='^(.*)\.fw$', output_pattern='kernel-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='') do_split_packages(d, root='/lib/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='%skernel-%s' % (maybe_update_modules, bb.data.getVar("KERNEL_VERSION", d, 1))) - import re, os + import re metapkg = "kernel-modules" bb.data.setVar('ALLOW_EMPTY_' + metapkg, "1", d) bb.data.setVar('FILES_' + metapkg, "", d) @@ -529,8 +538,8 @@ do_deploy() { install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin - if [ -d "${D}/lib" ]; then - fakeroot tar -cvzf ${DEPLOY_DIR_IMAGE}/${MODULES_IMAGE_BASE_NAME}.tgz -C ${D} lib + if [ -d "${PKGD}/lib" ]; then + fakeroot tar -cvzf ${DEPLOY_DIR_IMAGE}/${MODULES_IMAGE_BASE_NAME}.tgz -C ${PKGD} lib fi cd ${DEPLOY_DIR_IMAGE} @@ -542,4 +551,4 @@ do_deploy() { do_deploy[dirs] = "${S}" do_deploy[depends] += "fakeroot-native:do_populate_staging" -addtask deploy before do_package after do_install +addtask deploy before do_build after do_package diff --git a/classes/linux-kernel-base.bbclass b/classes/linux-kernel-base.bbclass index 4e2e2da373..510951a620 100644 --- a/classes/linux-kernel-base.bbclass +++ b/classes/linux-kernel-base.bbclass @@ -1,9 +1,12 @@ # parse kernel ABI version out of <linux/version.h> def get_kernelversion(p): - import re, os + import re fn = p + '/include/linux/utsrelease.h' if not os.path.isfile(fn): + # after 2.6.33-rc1 + fn = p + '/include/generated/utsrelease.h' + if not os.path.isfile(fn): fn = p + '/include/linux/version.h' import re @@ -30,7 +33,6 @@ def get_kernelmajorversion(p): return None def linux_module_packages(s, d): - import bb, os.path suffix = "" return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split())) diff --git a/classes/manifest.bbclass b/classes/manifest.bbclass index 687f4b756e..8d714d3bbc 100644 --- a/classes/manifest.bbclass +++ b/classes/manifest.bbclass @@ -1,6 +1,6 @@ python read_manifest () { - import sys, bb.manifest + import sys mfn = bb.data.getVar("MANIFEST", d, 1) if os.access(mfn, os.R_OK): # we have a manifest, so emit do_stage and do_populate_pkgs, diff --git a/classes/mime.bbclass b/classes/mime.bbclass index 724fb23713..2416c1466f 100644 --- a/classes/mime.bbclass +++ b/classes/mime.bbclass @@ -27,10 +27,10 @@ fi python populate_packages_append () { import os.path, re packages = bb.data.getVar('PACKAGES', d, 1).split() - workdir = bb.data.getVar('WORKDIR', d, 1) + pkgdest = bb.data.getVar('PKGDEST', d, 1) for pkg in packages: - mime_dir = '%s/install/%s/usr/share/mime/packages' % (workdir, pkg) + mime_dir = '%s/%s/usr/share/mime/packages' % (pkgdest, pkg) mimes = [] mime_re = re.compile(".*\.xml$") if os.path.exists(mime_dir): diff --git a/classes/module_strip.bbclass b/classes/module_strip.bbclass index 3316e20c80..2650f71d50 100644 --- a/classes/module_strip.bbclass +++ b/classes/module_strip.bbclass @@ -1,26 +1,20 @@ -#DEPENDS_append = " module-strip" +PACKAGESTRIPFUNCS += "do_strip_modules" do_strip_modules () { - for p in ${PACKAGES}; do - if test -e ${WORKDIR}/install/$p/lib/modules; then - if [ "${KERNEL_MAJOR_VERSION}" == "2.6" ]; then - modules="`find ${WORKDIR}/install/$p/lib/modules -name \*.ko`" - else - modules="`find ${WORKDIR}/install/$p/lib/modules -name \*.o`" - fi - if [ -n "$modules" ]; then - for module in $modules ; do - if ! [ -d "$module" ] ; then - ${STRIP} -v -g $module - fi - done -# NM="${CROSS_DIR}/bin/${HOST_PREFIX}nm" OBJCOPY="${CROSS_DIR}/bin/${HOST_PREFIX}objcopy" strip_module $modules - fi + if test -e ${PKGD}/lib/modules; then + if [ "${KERNEL_MAJOR_VERSION}" == "2.6" ]; then + modules="`find ${PKGD}/lib/modules -name \*.ko`" + else + modules="`find ${PKGD}/lib/modules -name \*.o`" fi - done + if [ -n "$modules" ]; then + for module in $modules ; do + if ! [ -d "$module" ] ; then + ${STRIP} -v -g $module + fi + done + fi + fi } -python do_package_append () { - if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, 1) != '1'): - bb.build.exec_func('do_strip_modules', d) -} + diff --git a/classes/native.bbclass b/classes/native.bbclass index 69231e0b6b..6698b61cfc 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -36,6 +36,8 @@ LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE} " STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}" STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}" +STAGING_DIR_JAVA = "${STAGING_DATADIR_JAVA_NATIVE}" + # Don't use site files for native builds export CONFIG_SITE = "" @@ -52,48 +54,71 @@ 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 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}" - -# 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" ] +base_prefix = "${STAGING_DIR_NATIVE}" +prefix = "${STAGING_DIR_NATIVE}${prefix_native}" +exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}" + +# 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" + +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 = "" + +ORIG_DEPENDS := "${DEPENDS}" + +DEPENDS_virtclass-native ?= "${ORIG_DEPENDS}" + +python __anonymous () { + # If we've a legacy native do_stage, we need to neuter do_install + stagefunc = bb.data.getVar('do_stage', d, True) + + # For now, force legacy mode for native packages using autotools_stage_all + if (stagefunc.strip() == "autotools_stage_all"): + bb.debug(1, "Forcing legacy staging mode for %s" % bb.data.getVar('FILE', d, 1)) + bb.data.setVar('FORCE_LEGACY_STAGING', "1", d) + elif (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) + + if "native" in (bb.data.getVar('BBCLASSEXTEND', d, True) or ""): + pn = bb.data.getVar("PN", d, True) + depends = bb.data.getVar("DEPENDS_virtclass-native", d, True) + deps = bb.utils.explode_deps(depends) + newdeps = [] + for dep in deps: + if dep.endswith("-cross"): + newdeps.append(dep.replace("-cross", "-native")) + elif not dep.endswith("-native"): + + newdeps.append(dep + "-native") + else: + newdeps.append(dep) + bb.data.setVar("DEPENDS_virtclass-native", " ".join(newdeps), d) + provides = bb.data.getVar("PROVIDES", d, True) + for prov in provides.split(): + if prov.find(pn) != -1: + continue + if not prov.endswith("-native"): + + provides = provides.replace(prov, prov + "-native") + bb.data.setVar("PROVIDES", provides, d) + bb.data.setVar("OVERRIDES", bb.data.getVar("OVERRIDES", d, False) + ":virtclass-native", d) +} + diff --git a/classes/nativesdk.bbclass b/classes/nativesdk.bbclass new file mode 100644 index 0000000000..080adc5d77 --- /dev/null +++ b/classes/nativesdk.bbclass @@ -0,0 +1,78 @@ +# SDK packages are built either explicitly by the user, +# or indirectly via dependency. No need to be in 'world'. +EXCLUDE_FROM_WORLD = "1" + +# +# Update BASE_PACKAGE_ARCH and PACKAGE_ARCHS +# +OLD_PACKAGE_ARCH := ${BASE_PACKAGE_ARCH} +BASE_PACKAGE_ARCH = "${SDK_ARCH}-nativesdk" +python () { + archs = bb.data.getVar('PACKAGE_ARCHS', d, True).split() + sdkarchs = [] + for arch in archs: + sdkarchs.append(arch + '-nativesdk') + bb.data.setVar('PACKAGE_ARCHS', " ".join(sdkarchs), d) +} + +#STAGING_DIR_HOST = "${STAGING_DIR}/${HOST_SYS}-nativesdk" +#STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}-nativesdk" + +CROSS_DIR = "${TMPDIR}/cross/${HOST_ARCH}" + +HOST_ARCH = "${SDK_ARCH}" +HOST_VENDOR = "${SDK_VENDOR}" +HOST_OS = "${SDK_OS}" +HOST_PREFIX = "${SDK_PREFIX}" +HOST_CC_ARCH = "${SDK_CC_ARCH}" +#HOST_SYS = "${HOST_ARCH}${TARGET_VENDOR}-${HOST_OS}" + +TARGET_ARCH = "${SDK_ARCH}" +TARGET_VENDOR = "${SDK_VENDOR}" +TARGET_OS = "${SDK_OS}" +TARGET_PREFIX = "${SDK_PREFIX}" +TARGET_CC_ARCH = "${SDK_CC_ARCH}" + +CPPFLAGS = "${BUILDSDK_CPPFLAGS}" +CFLAGS = "${BUILDSDK_CFLAGS}" +CXXFLAGS = "${BUILDSDK_CFLAGS}" +LDFLAGS = "${BUILDSDK_LDFLAGS}" + +# Change to place files in SDKPATH +prefix = "${SDKPATH}" +exec_prefix = "${SDKPATH}" +base_prefix = "${SDKPATH}" + +FILES_${PN} += "${prefix}" +FILES_${PN}-dbg += "${prefix}/.debug \ + ${prefix}/bin/.debug \ + " + +export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${libdir}/pkgconfig" +export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}" + +python __anonymous () { + pn = bb.data.getVar("PN", d, True) + depends = bb.data.getVar("DEPENDS", d, True) + deps = bb.utils.explode_deps(depends) + newdeps = [] + for dep in deps: + if dep.endswith("-native") or dep.endswith("-cross"): + newdeps.append(dep) + elif dep.endswith("-gcc-intermediate") or dep.endswith("-gcc-initial") or dep.endswith("-gcc"): + newdeps.append(dep + "-crosssdk") + elif not dep.endswith("-nativesdk"): + newdeps.append(dep + "-nativesdk") + else: + newdeps.append(dep) + bb.data.setVar("DEPENDS", " ".join(newdeps), d) + provides = bb.data.getVar("PROVIDES", d, True) + for prov in provides.split(): + if prov.find(pn) != -1: + continue + if not prov.endswith("-nativesdk"): + provides = provides.replace(prov, prov + "-nativesdk") + bb.data.setVar("PROVIDES", provides, d) +} + + diff --git a/classes/openmoko-base.bbclass b/classes/openmoko-base.bbclass index 184477b1c0..8cbf7df884 100644 --- a/classes/openmoko-base.bbclass +++ b/classes/openmoko-base.bbclass @@ -4,7 +4,6 @@ OPENMOKO_RELEASE ?= "OM-2007.2" OPENMOKO_MIRROR ?= "svn://svn.openmoko.org/trunk" def openmoko_base_get_subdir(d): - import bb openmoko, section = bb.data.getVar('SECTION', d, 1).split("/") if section == 'base' or section == 'libs': return "" elif section in 'apps tools pim'.split(): return "applications" diff --git a/classes/openmoko2.bbclass b/classes/openmoko2.bbclass index ef734e4311..233c721ff7 100644 --- a/classes/openmoko2.bbclass +++ b/classes/openmoko2.bbclass @@ -5,12 +5,10 @@ OPENMOKO_RELEASE ?= "OM-2007.2" OPENMOKO_MIRROR ?= "svn://svn.openmoko.org/trunk" def openmoko_two_get_license(d): - import bb openmoko, section = bb.data.getVar('SECTION', d, 1).split("/") return "LGPL GPL".split()[section != "libs"] def openmoko_two_get_subdir(d): - import bb openmoko, section = bb.data.getVar('SECTION', d, 1).split("/") if section == 'base': return "" elif section == 'libs': return "libraries" diff --git a/classes/package.bbclass b/classes/package.bbclass index e7865754eb..062f782129 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -2,7 +2,14 @@ # General packaging help functions # -PKGDEST = "${WORKDIR}/install" +PKGD = "${WORKDIR}/package" +PKGDEST = "${WORKDIR}/packages-split" + +PKGV ?= "${PV}" +PKGR ?= "${PR}${DISTRO_PR}" + +EXTENDPKGEVER = "${@['','${PKGE\x7d:'][bb.data.getVar('PKGE',d,1) > 0]}" +EXTENDPKGV ?= "${EXTENDPKGEVER}${PKGV}-${PKGR}" def legitimize_package_name(s): """ @@ -26,12 +33,8 @@ def do_split_packages(d, root, file_regex, output_pattern, description, postinst Used in .bb files to split up dynamically generated subpackages of a given package, usually plugins or modules. """ - import os, os.path, bb - dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined") - return + dvar = bb.data.getVar('PKGD', d, True) packages = bb.data.getVar('PACKAGES', d, True).split() @@ -132,7 +135,6 @@ def package_stash_hook(func, name, d): f.close() python () { - import bb if bb.data.getVar('PACKAGES', d, True) != '': deps = bb.data.getVarFlag('do_package', 'depends', d) or "" for dep in (bb.data.getVar('PACKAGE_DEPENDS', d, True) or "").split(): @@ -150,7 +152,7 @@ def runstrip(file, d): # A working 'file' (one which works on the target architecture) # is necessary for this stuff to work, hence the addition to do_package[depends] - import bb, os, commands, stat + import commands, stat pathprefix = "export PATH=%s; " % bb.data.getVar('PATH', d, True) @@ -205,6 +207,26 @@ def runstrip(file, d): return 1 +PACKAGESTRIPFUNCS += "do_runstrip" +python do_runstrip() { + import stat + + dvar = bb.data.getVar('PKGD', d, True) + def isexec(path): + try: + s = os.stat(path) + except (os.error, AttributeError): + return 0 + return (s[stat.ST_MODE] & stat.S_IEXEC) + + for root, dirs, files in os.walk(dvar): + for f in files: + file = os.path.join(root, f) + if not os.path.islink(file) and not os.path.isdir(file) and isexec(file): + runstrip(file, d) +} + + def write_package_md5sums (root, outfile, ignorepaths): # For each regular file under root, writes an md5sum to outfile. # With thanks to patch.bbclass. @@ -255,8 +277,6 @@ def write_package_md5sums (root, outfile, ignorepaths): # def get_package_mapping (pkg, d): - import bb, os - data = read_subpkgdata(pkg, d) key = "PKG_%s" % pkg @@ -266,8 +286,6 @@ def get_package_mapping (pkg, d): return pkg def runtime_mapping_rename (varname, d): - import bb, os - #bb.note("%s before: %s" % (varname, bb.data.getVar(varname, d, True))) new_depends = [] @@ -289,8 +307,6 @@ def runtime_mapping_rename (varname, d): # python package_do_split_locales() { - import os - if (bb.data.getVar('PACKAGE_NO_LOCALE', d, True) == '1'): bb.debug(1, "package requested not splitting locales") return @@ -302,15 +318,8 @@ python package_do_split_locales() { bb.note("datadir not defined") return - dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined") - return - + dvar = bb.data.getVar('PKGD', d, True) 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') @@ -343,43 +352,30 @@ python package_do_split_locales() { bb.data.setVar('PACKAGES', ' '.join(packages), d) } -python populate_packages () { - import glob, stat, errno, re +python perform_packagecopy () { + dest = bb.data.getVar('D', d, True) + dvar = bb.data.getVar('PKGD', d, True) - workdir = bb.data.getVar('WORKDIR', d, True) - if not workdir: - bb.error("WORKDIR not defined, unable to package") - return + bb.mkdirhier(dvar) - 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) + # Start by package population by taking a copy of the installed + # files to operate on + os.system('rm -rf %s/*' % (dvar)) + os.system('cp -pPR %s/* %s/' % (dest, dvar)) +} - dvar = bb.data.getVar('D', d, True) - if not dvar: - bb.error("D not defined, unable to package") - return - bb.mkdirhier(dvar) +python populate_packages () { + import glob, errno, re,os + workdir = bb.data.getVar('WORKDIR', d, True) + outdir = bb.data.getVar('DEPLOY_DIR', d, True) + dvar = bb.data.getVar('PKGD', d, True) 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) os.chdir(dvar) - def isexec(path): - try: - s = os.stat(path) - except (os.error, AttributeError): - return 0 - return (s[stat.ST_MODE] & stat.S_IEXEC) - # Sanity check PACKAGES for duplicates - should be moved to # sanity.bbclass once we have the infrastucture package_list = [] @@ -392,12 +388,10 @@ python populate_packages () { else: package_list.append(pkg) + if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, True) != '1'): - for root, dirs, files in os.walk(dvar): - for f in files: - file = os.path.join(root, f) - if not os.path.islink(file) and not os.path.isdir(file) and isexec(file): - runstrip(file, d) + for f in (bb.data.getVar('PACKAGESTRIPFUNCS', d, True) or '').split(): + bb.build.exec_func(f, d) pkgdest = bb.data.getVar('PKGDEST', d, True) os.system('rm -rf %s' % pkgdest) @@ -451,8 +445,8 @@ python populate_packages () { dpath = os.path.dirname(fpath) bb.mkdirhier(dpath) ret = bb.copyfile(file, fpath) - if ret is False or ret == 0: - raise bb.build.FuncFailed("File population failed") + if ret is False: + raise bb.build.FuncFailed("File population failed when copying %s to %s" % (file, fpath)) if pkg == main_pkg and main_is_empty: main_is_empty = 0 del localdata @@ -501,7 +495,7 @@ python populate_packages () { for pkg in package_list: rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 0) or bb.data.getVar('RDEPENDS', d, 0) or "") - remstr = "${PN} (= ${EXTENDPV})" + remstr = "${PN} (= ${EXTENDPKGV})" if main_is_empty and remstr in rdepends: rdepends.remove(remstr) for l in dangling_links[pkg]: @@ -542,6 +536,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) @@ -562,6 +557,8 @@ python emit_pkgdata() { write_if_exists(sf, pkg, 'PN') write_if_exists(sf, pkg, 'PV') write_if_exists(sf, pkg, 'PR') + write_if_exists(sf, pkg, 'PKGV') + write_if_exists(sf, pkg, 'PKGR') write_if_exists(sf, pkg, 'DESCRIPTION') write_if_exists(sf, pkg, 'RDEPENDS') write_if_exists(sf, pkg, 'RPROVIDES') @@ -585,7 +582,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": @@ -608,7 +605,7 @@ fi SHLIBSDIR = "${STAGING_DIR_HOST}/shlibs" python package_do_shlibs() { - import os, re, os.path + import re exclude_shlibs = bb.data.getVar('EXCLUDE_FROM_SHLIBS', d, 0) if exclude_shlibs: @@ -621,13 +618,10 @@ 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) + ver = bb.data.getVar('PKGV', d, True) if not ver: - bb.error("PV not defined") + bb.error("PKGV not defined") return pkgdest = bb.data.getVar('PKGDEST', d, True) @@ -655,7 +649,9 @@ python package_do_shlibs() { needs_ldconfig = False bb.debug(2, "calculating shlib provides for %s" % pkg) - pkgver = bb.data.getVar('PV_' + pkg, d, True) + pkgver = bb.data.getVar('PKGV_' + pkg, d, True) + if not pkgver: + pkgver = bb.data.getVar('PV_' + pkg, d, True) if not pkgver: pkgver = ver @@ -784,15 +780,10 @@ python package_do_shlibs() { } python package_do_pkgconfig () { - import re, os + import re 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) @@ -1012,8 +1003,10 @@ python package_depchains() { pkg_addrrecs(pkg, base, suffix, func, rdeps, d) } - -PACKAGEFUNCS ?= "package_do_split_locales \ +PACKAGE_PREPROCESS_FUNCS ?= "" +PACKAGEFUNCS ?= "perform_packagecopy \ + ${PACKAGE_PREPROCESS_FUNCS} \ + package_do_split_locales \ populate_packages \ package_do_shlibs \ package_do_pkgconfig \ @@ -1059,6 +1052,16 @@ 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) + 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 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(): bb.build.exec_func(f, d) package_run_hooks(f, d) diff --git a/classes/package_dbg.bbclass b/classes/package_dbg.bbclass new file mode 100644 index 0000000000..39dceaf9b3 --- /dev/null +++ b/classes/package_dbg.bbclass @@ -0,0 +1,125 @@ +# package_dbg.bbclass: populate -dbg versions for each package in PACKAGES +# +# Copyright (c) 2009 MontaVista Software, Inc. All rights reserved. +# +# Released under the MIT license (see LICENSE.MIT for the terms) + + +inherit package + + +PACKAGE_DBG_DIRS = "${bindir} ${sbindir} \ + ${libexecdir} ${libdir} \ + ${base_bindir} ${base_sbindir} \ + ${base_libdir}" +PACKAGE_DBG_DESC = "Debugging files for %s" +PACKAGE_DBG_EXCLUDE = "${PN}-locale* ${PN}-doc ${PN}-dev *-dbg" + + +def __find(dir): + """ Given a directory, recurses into that directory, + returning all files. """ + + from os import walk + from os.path import join + + for root, dirs, files in walk(dir): + for file in files: + yield join(root, file) + +def __package_get_files(pkg, d): + """ Obtains a list of files to be included in a package. + + Starting from the FILES_<pkg> variable, it expands any globs in the list, + which removes missing files, and traverses any directories in the list. + + It does *not* remove files which are also in other packages, it's left + to the user's discretion whether to allow overlap. """ + + from glob import glob + from os.path import join, isdir, islink + + installdir = d.getVar("D", True) + installdirlen = len(installdir) + + files = (d.getVar("FILES_%s" % pkg, True) or "").split() + for globbed in (glob(join(installdir, file[1:])) for file in files): + for path in globbed: + if isdir(path) and not islink(path): + for file in __find(path): + yield file[installdirlen:] + else: + yield path[installdirlen:] + +def add_dbg_packages(d): + from fnmatch import fnmatch + + packages = d.getVar("PACKAGES", True).split() + excludes = d.getVar("PACKAGE_DBG_EXCLUDE", True).split() + + for pkg in tuple(packages): + if any(fnmatch(pkg, excluded) for excluded in excludes): + continue + + dbgpkg = "%s-dbg" % pkg + if not dbgpkg in packages: + packages.insert(0, dbgpkg) + + d.setVar("PACKAGES", " ".join(packages)) + + +# Add the -dbg packages to PACKAGES +python () { + from bb.data import inherits_class as inherits + + # Task handles its own -dbg versions of its packages at the moment + if not inherits("task", d): + dynpkgs = d.getVar("PACKAGES_DYNAMIC", True).split() + dynpkgs += ["%s-dbg" % dyn for dyn in dynpkgs] + d.setVar("PACKAGES_DYNAMIC", " ".join(dynpkgs)) + + add_dbg_packages(d) +} + +python populate_packages_prepend () { + from bb.data import inherits_class as inherits + + if not inherits("task", d): + bb.build.exec_func("package_do_dbg", d) +} + +# Populate the -dbg subpackage metadata +python package_do_dbg() { + """ Populate the -dbg subpackage metadata. """ + + from os.path import join, basename, dirname + + def setVar(key, val): + if d.getVar(key, val) is None: + d.setVar(key, val) + + add_dbg_packages(d) + packages = d.getVar("PACKAGES", True).split() + desc = d.getVar("PACKAGE_DBG_DESC", True) + debug_dirs = d.getVar("PACKAGE_DBG_DIRS", True).split() + + done = [] + for pkgname in tuple(packages): + files = tuple(__package_get_files(pkgname, d)) + dbg = [join(dirname(file), ".debug", basename(file)) + for file in files + if not file in done and + any(file.startswith(dir) for dir in debug_dirs)] + done.extend(files) + + if dbg: + setVar("FILES_%s-dbg" % pkgname, " ".join(dbg)) + setVar("DESCRIPTION_%s-dbg" % pkgname, desc % pkgname) + setVar("RDEPENDS_%s-dbg" % pkgname, pkgname) + else: + try: + packages.remove("%s-dbg" % pkgname) + except ValueError: + pass + d.setVar("PACKAGES", " ".join(packages)) +} diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass index 4a17010538..2a9bf76a79 100644 --- a/classes/package_deb.bbclass +++ b/classes/package_deb.bbclass @@ -17,13 +17,11 @@ DPKG_ARCH_i686 ?= "i386" DPKG_ARCH_pentium ?= "i386" python package_deb_fn () { - from bb import data bb.data.setVar('PKGFN', bb.data.getVar('PKG',d), d) } addtask package_deb_install python do_package_deb_install () { - import os, sys pkg = bb.data.getVar('PKG', d, 1) pkgfn = bb.data.getVar('PKGFN', d, 1) rootfs = bb.data.getVar('IMAGE_ROOTFS', d, 1) @@ -39,6 +37,7 @@ python do_package_deb_install () { os.makedirs(rootfs) os.chdir(rootfs) except OSError: + import sys raise bb.build.FuncFailed(str(sys.exc_value)) # update packages file @@ -69,14 +68,13 @@ python do_package_deb_install () { } python do_package_deb () { - import sys, re, copy + import re, copy workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: bb.error("WORKDIR not defined, unable to package") return - import os # path manipulations outdir = bb.data.getVar('DEPLOY_DIR_DEB', d, 1) if not outdir: bb.error("DEPLOY_DIR_DEB not defined, unable to package") @@ -188,6 +186,7 @@ python do_package_deb () { for (c, fs) in fields: ctrlfile.write(unicode(c % tuple(pullData(fs, localdata)))) except KeyError: + import sys (type, value, traceback) = sys.exc_info() bb.utils.unlockfile(lf) ctrlfile.close() @@ -261,7 +260,6 @@ python do_package_deb () { } python () { - import bb if bb.data.getVar('PACKAGES', d, True) != '': deps = (bb.data.getVarFlag('do_package_write_deb', 'depends', d) or "").split() deps.append('dpkg-native:do_populate_staging') diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass index b48f8781eb..420c892f10 100644 --- a/classes/package_ipk.bbclass +++ b/classes/package_ipk.bbclass @@ -17,7 +17,6 @@ python package_ipk_install () { # Warning - this function is not multimachine safe (see stagingdir reference)! # - import os, sys, bb pkg = bb.data.getVar('PKG', d, 1) pkgfn = bb.data.getVar('PKGFN', d, 1) rootfs = bb.data.getVar('IMAGE_ROOTFS', d, 1) @@ -31,6 +30,7 @@ python package_ipk_install () { bb.mkdirhier(rootfs) os.chdir(rootfs) except OSError: + import sys (type, value, traceback) = sys.exc_info() print value raise bb.build.FuncFailed @@ -135,14 +135,14 @@ package_generate_ipkg_conf () { } python do_package_ipk () { - import sys, re, copy, bb + import re, copy workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: bb.error("WORKDIR not defined, unable to package") return - import os # path manipulations + outdir = bb.data.getVar('DEPLOY_DIR_IPK', d, 1) if not outdir: bb.error("DEPLOY_DIR_IPK not defined, unable to package") @@ -174,10 +174,9 @@ python do_package_ipk () { pkgname = pkg bb.data.setVar('PKG', pkgname, localdata) - overrides = bb.data.getVar('OVERRIDES', localdata) + overrides = bb.data.getVar('OVERRIDES', localdata, True) if not overrides: raise bb.build.FuncFailed('OVERRIDES not defined') - overrides = bb.data.expand(overrides, localdata) bb.data.setVar('OVERRIDES', overrides + ':' + pkg, localdata) bb.data.update_data(localdata) @@ -194,8 +193,7 @@ python do_package_ipk () { except ValueError: pass if not g and bb.data.getVar('ALLOW_EMPTY', localdata) != "1": - from bb import note - note("Not creating empty archive for %s-%s" % (pkg, bb.data.expand('${PV}-${PR}${DISTRO_PR}', localdata, True))) + bb.note("Not creating empty archive for %s-%s" % (pkg, bb.data.expand('${PV}-${PR}${DISTRO_PR}', localdata, True))) bb.utils.unlockfile(lf) continue @@ -210,9 +208,9 @@ python do_package_ipk () { fields = [] pe = bb.data.getVar('PE', d, 1) if pe and int(pe) > 0: - fields.append(["Version: %s:%s-%s%s\n", ['PE', 'PV', 'PR', 'DISTRO_PR']]) + fields.append(["Version: %s:%s-%s\n", ['PE', 'PKGV', 'PKGR']]) else: - fields.append(["Version: %s-%s%s\n", ['PV', 'PR', 'DISTRO_PR']]) + fields.append(["Version: %s-%s\n", ['PKGV', 'PKGR']]) fields.append(["Description: %s\n", ['DESCRIPTION']]) fields.append(["Section: %s\n", ['SECTION']]) fields.append(["Priority: %s\n", ['PRIORITY']]) @@ -237,6 +235,7 @@ python do_package_ipk () { raise KeyError(f) ctrlfile.write(c % tuple(pullData(fs, localdata))) except KeyError: + import sys (type, value, traceback) = sys.exc_info() ctrlfile.close() bb.utils.unlockfile(lf) @@ -308,7 +307,6 @@ python do_package_ipk () { } python () { - import bb if bb.data.getVar('PACKAGES', d, True) != '': deps = (bb.data.getVarFlag('do_package_write_ipk', 'depends', d) or "").split() deps.append('ipkg-utils-native:do_populate_staging') @@ -317,7 +315,6 @@ python () { } python do_package_write_ipk () { - import bb packages = bb.data.getVar('PACKAGES', d, True) if not packages: bb.debug(1, "No PACKAGES defined, nothing to package") diff --git a/classes/package_rpm.bbclass b/classes/package_rpm.bbclass index 13cb8773af..ab09bb24d3 100644 --- a/classes/package_rpm.bbclass +++ b/classes/package_rpm.bbclass @@ -10,9 +10,6 @@ RPMOPTS="--rcfile=${WORKDIR}/rpmrc --target ${TARGET_SYS}" RPM="rpm ${RPMOPTS}" python write_specfile() { - from bb import data, build - import sys - version = bb.data.getVar('PV', d, 1) version = version.replace('-', '+') bb.data.setVar('RPMPV', version, d) @@ -50,9 +47,9 @@ python write_specfile() { del files[files.index(r)] except ValueError: pass + if not files and bb.data.getVar('ALLOW_EMPTY', d) != "1": - from bb import note - note("Not creating empty archive for %s" % (bb.data.expand('${PKG}-${PV}-${PR}${DISTRO_PR}', d, True))) + bb.note("Not creating empty archive for %s" % (bb.data.expand('${PKG}-${PV}-${PR}${DISTRO_PR}', d, True))) return # output .spec using this metadata store @@ -154,7 +151,6 @@ python do_package_rpm () { bb.error("WORKDIR not defined, unable to package") return - import os # path manipulations outdir = bb.data.getVar('DEPLOY_DIR_RPM', d, 1) if not outdir: bb.error("DEPLOY_DIR_RPM not defined, unable to package") @@ -209,7 +205,6 @@ python do_package_rpm () { } python () { - import bb if bb.data.getVar('PACKAGES', d, True) != '' and \ not bb.data.inherits_class('native', d) and \ not bb.data.inherits_class('cross', d): @@ -225,5 +220,7 @@ python do_package_write_rpm () { bb.build.exec_func("rpm_prep", d) bb.build.exec_func("do_package_rpm", d) } + do_package_write_rpm[dirs] = "${D}" addtask package_write_rpm before do_package_write after do_package + diff --git a/classes/package_tar.bbclass b/classes/package_tar.bbclass index a0eacf27f5..b905e170f4 100644 --- a/classes/package_tar.bbclass +++ b/classes/package_tar.bbclass @@ -1,14 +1,11 @@ inherit package python package_tar_fn () { - import os - from bb import data fn = os.path.join(bb.data.getVar('DEPLOY_DIR_TAR', d, True), bb.data.expand('${PKG}-${PV}-${PR}${DISTRO_PR}.tar.gz', d, True)) bb.data.setVar('PKGFN', fn, d) } python package_tar_install () { - import os, sys pkg = bb.data.getVar('PKG', d, 1) pkgfn = bb.data.getVar('PKGFN', d, 1) rootfs = bb.data.getVar('IMAGE_ROOTFS', d, 1) @@ -20,6 +17,7 @@ python package_tar_install () { bb.mkdirhier(rootfs) os.chdir(rootfs) except OSError: + import sys (type, value, traceback) = sys.exc_info() print value raise bb.build.FuncFailed @@ -39,7 +37,6 @@ python do_package_tar () { bb.error("WORKDIR not defined, unable to package") return - import os # path manipulations outdir = bb.data.getVar('DEPLOY_DIR_TAR', d, 1) if not outdir: bb.error("DEPLOY_DIR_TAR not defined, unable to package") @@ -59,7 +56,8 @@ python do_package_tar () { for pkg in packages.split(): localdata = bb.data.createCopy(d) - root = "%s/install/%s" % (workdir, pkg) + pkgdest = bb.data.getVar('PKGDEST', d, 1) + root = "%s/%s" % (pkgdest, pkg) bb.data.setVar('ROOT', '', localdata) bb.data.setVar('ROOT_%s' % pkg, root, localdata) @@ -91,7 +89,6 @@ python do_package_tar () { } python () { - import bb if bb.data.getVar('PACKAGES', d, True) != '': deps = (bb.data.getVarFlag('do_package_write_tar', 'depends', d) or "").split() deps.append('tar-native:do_populate_staging') diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index 3b97f593b8..1c5c4cd531 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -27,7 +27,6 @@ PSTAGE_NATIVEDEPENDS = "\ BB_STAMP_WHITELIST = "${PSTAGE_NATIVEDEPENDS}" python () { - import bb pstage_allowed = True # These classes encode staging paths into the binary data so can only be @@ -49,6 +48,9 @@ python () { if bb.data.inherits_class('image', d): pstage_allowed = False + if bb.data.getVar('PSTAGING_DISABLED', d, True) == "1": + pstage_allowed = False + # Add task dependencies if we're active, otherwise mark packaged staging # as inactive. if pstage_allowed: @@ -81,8 +83,6 @@ PSTAGE_LIST_CMD = "${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -o ${TMP PSTAGE_TMPDIR_STAGE = "${WORKDIR}/staging-pkg" def pstage_manualclean(srcname, destvarname, d): - import os, bb - src = os.path.join(bb.data.getVar('PSTAGE_TMPDIR_STAGE', d, True), srcname) dest = bb.data.getVar(destvarname, d, True) @@ -93,7 +93,6 @@ def pstage_manualclean(srcname, destvarname, d): os.system("rm %s" % filepath) def pstage_set_pkgmanager(d): - import bb path = bb.data.getVar("PATH", d, 1) pkgmanager = bb.which(path, 'opkg-cl') if pkgmanager == "": @@ -103,14 +102,12 @@ def pstage_set_pkgmanager(d): def pstage_cleanpackage(pkgname, d): - import os, bb - path = bb.data.getVar("PATH", d, 1) pstage_set_pkgmanager(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...") @@ -152,12 +149,11 @@ 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_native}/opkg/info/ ]; then + mkdir -p ${TMPDIR}${libdir_native}/opkg/info/ fi - if [ ! -e ${TMPDIR}${layout_libdir}/ipkg/ ]; then - cd ${TMPDIR}${layout_libdir}/ - ln -sf opkg/ ipkg + if [ ! -e ${TMPDIR}${libdir_native}/ipkg/ ]; then + ln -sf opkg/ ${TMPDIR}${libdir_native}/ipkg || true fi } @@ -166,14 +162,13 @@ PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_loca SCENEFUNCS += "packagestage_scenefunc" python packagestage_scenefunc () { - import os - if bb.data.getVar("PSTAGING_ACTIVE", d, 1) == "0": return bb.build.exec_func("staging_helper", d) removepkg = bb.data.expand("${PSTAGE_PKGPN}", d) + pstage_cleanpackage(removepkg, d) stagepkg = bb.data.expand("${PSTAGE_PKG}", d) @@ -187,7 +182,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: @@ -228,7 +223,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: @@ -244,10 +239,7 @@ packagestage_scenefunc[dirs] = "${STAGING_DIR}" addhandler packagedstage_stampfixing_eventhandler python packagedstage_stampfixing_eventhandler() { - from bb.event import getName - import os - - if getName(e) == "StampUpdate": + if bb.event.getName(e) == "StampUpdate": taskscovered = bb.data.getVar("PSTAGE_TASKS_COVERED", e.data, 1).split() for (fn, task) in e.targets: # strip off 'do_' @@ -292,13 +284,21 @@ populate_staging_postamble () { fi } -do_populate_staging[lockfiles] = "${STAGING_DIR}/staging.lock" +packagedstaging_fastpath () { + if [ "$PSTAGING_ACTIVE" = "1" ]; then + mkdir -p ${PSTAGE_TMPDIR_STAGE}/staging/ + mkdir -p ${PSTAGE_TMPDIR_STAGE}/cross/ + cp -fpPR ${SYSROOT_DESTDIR}/${STAGING_DIR}/* ${PSTAGE_TMPDIR_STAGE}/staging/ || /bin/true + cp -fpPR ${SYSROOT_DESTDIR}/${CROSS_DIR}/* ${PSTAGE_TMPDIR_STAGE}/cross/ || /bin/true + fi +} + do_populate_staging[dirs] =+ "${DEPLOY_DIR_PSTAGE}" -python do_populate_staging_prepend() { +python populate_staging_prehook() { bb.build.exec_func("populate_staging_preamble", d) } -python do_populate_staging_append() { +python populate_staging_posthook() { bb.build.exec_func("populate_staging_postamble", d) } @@ -329,20 +329,20 @@ staging_packager () { staging_package_installer () { #${PSTAGE_INSTALL_CMD} ${PSTAGE_PKG} - STATUSFILE=${TMPDIR}${layout_libdir}/opkg/status + STATUSFILE=${TMPDIR}${libdir_native}/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_native}/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_native}/opkg/info/${PSTAGE_PKGPN}.list } python do_package_stage () { @@ -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) } 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 + diff --git a/classes/packagehistory.bbclass b/classes/packagehistory.bbclass index b435149d22..492bbac218 100644 --- a/classes/packagehistory.bbclass +++ b/classes/packagehistory.bbclass @@ -4,6 +4,7 @@ PACKAGEFUNCS += "emit_pkghistory" PKGHIST_DIR = "${TMPDIR}/pkghistory/${BASEPKG_TARGET_SYS}/" + # # Called during do_package to write out metadata about this package # for comparision when writing future packages @@ -60,8 +61,6 @@ python emit_pkghistory() { def check_pkghistory(pkg, pe, pv, pr, lastversion): - import bb - (last_pe, last_pv, last_pr) = lastversion bb.debug(2, "Checking package history") @@ -71,7 +70,6 @@ def check_pkghistory(pkg, pe, pv, pr, lastversion): def write_pkghistory(pkg, pe, pv, pr, d): - import bb, os bb.debug(2, "Writing package history") pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) @@ -81,8 +79,6 @@ def write_pkghistory(pkg, pe, pv, pr, d): os.makedirs(verpath) def write_latestlink(pkg, pe, pv, pr, d): - import bb, os - pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) def rm_link(path): diff --git a/classes/patch.bbclass b/classes/patch.bbclass index dfb8ec960f..33184df0d0 100644 --- a/classes/patch.bbclass +++ b/classes/patch.bbclass @@ -4,8 +4,6 @@ QUILTRCFILE ?= "${STAGING_BINDIR_NATIVE}/quiltrc" def patch_init(d): - import os, sys - class NotFoundError(Exception): def __init__(self, path): self.path = path @@ -13,8 +11,6 @@ def patch_init(d): return "Error: %s not found." % self.path def md5sum(fname): - import sys - # when we move to Python 2.5 as minimal supported # we can kill that try/except as hashlib is 2.5+ try: @@ -76,8 +72,6 @@ def patch_init(d): def __str__(self): return "Patch Error: %s" % self.msg - import bb, bb.data, bb.fetch - class PatchSet(object): defaults = { "strippath": 1 @@ -253,6 +247,7 @@ def patch_init(d): try: output = runcmd(["quilt", "applied"], self.dir) except CmdError: + import sys if sys.exc_value.output.strip() == "No patches applied": return else: @@ -366,6 +361,7 @@ def patch_init(d): try: self.patchset.Push() except Exception: + import sys os.chdir(olddir) raise sys.exc_value @@ -456,9 +452,6 @@ PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_staging" do_patch[depends] = "${PATCHDEPENDENCY}" python patch_do_patch() { - import re - import bb.fetch - patch_init(d) src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split() diff --git a/classes/pkgconfig.bbclass b/classes/pkgconfig.bbclass index 2a8199d135..f3d93716d7 100644 --- a/classes/pkgconfig.bbclass +++ b/classes/pkgconfig.bbclass @@ -1,18 +1,18 @@ -inherit base - DEPENDS_prepend = "pkgconfig-native " do_install_prepend () { for i in `find ${S}/ -name "*.pc" -type f` ; do \ - sed -i -e 's:-L${STAGING_LIBDIR}::g' $i + sed -i -e 's:-L${STAGING_LIBDIR}::g' -e 's:-I${STAGING_INCDIR}::g' $i 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 } diff --git a/classes/qemu.bbclass b/classes/qemu.bbclass new file mode 100644 index 0000000000..66dfb2b0d2 --- /dev/null +++ b/classes/qemu.bbclass @@ -0,0 +1,15 @@ +# +# This class contains functions for recipes that need QEMU or test for its +# existance. +# + +def qemu_target_binary(data): + import bb + + target_arch = bb.data.getVar("TARGET_ARCH", data, 1) + if target_arch in ("i486", "i586", "i686"): + target_arch = "i386" + elif target_arch == "powerpc": + target_arch = "ppc" + + return "qemu-" + target_arch diff --git a/classes/qmake2.bbclass b/classes/qmake2.bbclass index 26e813a036..37721898d6 100644 --- a/classes/qmake2.bbclass +++ b/classes/qmake2.bbclass @@ -19,3 +19,5 @@ export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qt4" export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}" export OE_QMAKE_LIBS_QT = "qt" export OE_QMAKE_LIBS_X11 = "-lXext -lX11 -lm" +export OE_QMAKE_LRELEASE = "${STAGING_BINDIR_NATIVE}/lrelease4" +export OE_QMAKE_LUPDATE = "${STAGING_BINDIR_NATIVE}/lupdate4" diff --git a/classes/qmake_base.bbclass b/classes/qmake_base.bbclass index 50d8bb53da..4fbe21f2e1 100644 --- a/classes/qmake_base.bbclass +++ b/classes/qmake_base.bbclass @@ -13,6 +13,9 @@ export OE_QMAKE_AR="${AR}" export OE_QMAKE_STRIP="echo" export OE_QMAKE_RPATH="-Wl,-rpath-link," +# do not export STRIP to the environment +STRIP[unexport] = "1" + # default to qte2 via bb.conf, inherit qt3x11 to configure for qt3x11 oe_qmake_mkspecs () { diff --git a/classes/qt4x11.bbclass b/classes/qt4x11.bbclass index aa2e2a174e..2d56b7e95b 100644 --- a/classes/qt4x11.bbclass +++ b/classes/qt4x11.bbclass @@ -1,4 +1,4 @@ -DEPENDS_prepend = "${@["qt4x11 ", ""][(bb.data.getVar('PN', d, 1)[:12] == 'qt4-x11-free')]}" +DEPENDS_prepend = "${@["qt4-x11-free ", ""][(bb.data.getVar('PN', d, 1)[:12] == 'qt4-x11-free')]}" inherit qmake2 diff --git a/classes/recipe_sanity.bbclass b/classes/recipe_sanity.bbclass index 29f4a8fada..d929da6319 100644 --- a/classes/recipe_sanity.bbclass +++ b/classes/recipe_sanity.bbclass @@ -1,10 +1,8 @@ def __note(msg, d): - import bb bb.note("%s: recipe_sanity: %s" % (d.getVar("P", 1), msg)) __recipe_sanity_badtargetvars = "RDEPENDS RPROVIDES" def bad_target_vars(cfgdata, d): - import bb.data if bb.data.inherits_class("native", d) or \ bb.data.inherits_class("cross", d): return @@ -43,14 +41,12 @@ def var_renames_overwrite(cfgdata, d): __note("rename of variable '%s' to '%s' overwrote existing value '%s' with '%s'." % (key, newkey, oldvalue, newvalue), d) def incorrect_nonempty_PACKAGES(cfgdata, d): - import bb.data if bb.data.inherits_class("native", d) or \ bb.data.inherits_class("cross", d): if d.getVar("PACKAGES", 1): return True def can_use_autotools_base(cfgdata, d): - import bb cfg = d.getVar("do_configure", 1) if not bb.data.inherits_class("autotools", d): return False @@ -68,8 +64,6 @@ def can_use_autotools_base(cfgdata, d): return True def can_remove_FILESPATH(cfgdata, d): - import os - import bb expected = cfgdata.get("FILESPATH") #expected = "${@':'.join([os.path.normpath(os.path.join(fp, p, o)) for fp in d.getVar('FILESPATHBASE', 1).split(':') for p in d.getVar('FILESPATHPKG', 1).split(':') for o in (d.getVar('OVERRIDES', 1) + ':').split(':') if os.path.exists(os.path.join(fp, p, o))])}:${FILESDIR}" expectedpaths = bb.data.expand(expected, d) @@ -84,8 +78,6 @@ def can_remove_FILESPATH(cfgdata, d): return expected != unexpanded def can_remove_FILESDIR(cfgdata, d): - import os - import bb expected = cfgdata.get("FILESDIR") #expected = "${@bb.which(d.getVar('FILESPATH', 1), '.')}" unexpanded = d.getVar("FILESDIR", 0) @@ -102,7 +94,6 @@ def can_remove_FILESDIR(cfgdata, d): expanded == bb.data.expand(expected, d)) def can_remove_others(p, cfgdata, d): - import bb for k in ["S", "PV", "PN", "DESCRIPTION", "LICENSE", "DEPENDS", "SECTION", "PACKAGES", "EXTRA_OECONF", "EXTRA_OEMAKE"]: #for k in cfgdata: diff --git a/classes/rm_work.bbclass b/classes/rm_work.bbclass index 094f9167bb..a53d12baf3 100644 --- a/classes/rm_work.bbclass +++ b/classes/rm_work.bbclass @@ -35,10 +35,7 @@ addtask rm_work_all after do_rm_work addhandler rmwork_stampfixing_eventhandler python rmwork_stampfixing_eventhandler() { - from bb.event import getName - import os - - if getName(e) == "StampUpdate": + if bb.event.getName(e) == "StampUpdate": for (fn, task) in e.targets: if task == 'rm_work_all': continue diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index 83c03299bf..b6c6ed939a 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -2,6 +2,8 @@ # Sanity check the users setup for common misconfigurations # +inherit qemu + def raise_sanity_error(msg): import bb bb.fatal(""" Openembedded's config sanity checker detected a potential misconfiguration. @@ -11,8 +13,6 @@ def raise_sanity_error(msg): %s""" % msg) def check_conf_exists(fn, data): - import bb, os - bbpath = [] fn = bb.data.expand(fn, data) vbbpath = bb.data.getVar("BBPATH", data) @@ -26,12 +26,12 @@ def check_conf_exists(fn, data): def check_sanity(e): from bb import note, error, data, __version__ - from bb.event import Handled, NotHandled, getName + try: from distutils.version import LooseVersion except ImportError: def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - import os, commands + import commands # Check the bitbake version meets minimum requirements minversion = data.getVar('BB_MIN_VERSION', e.data , True) @@ -85,24 +85,10 @@ def check_sanity(e): required_utilities = "patch help2man diffstat texi2html makeinfo cvs svn bzip2 tar gzip gawk md5sum" - if data.getVar('TARGET_ARCH', e.data, True) == "arm": - # qemu-native needs gcc 3.x - if "qemu-native" not in assume_provided and "gcc3-native" in assume_provided: - gcc_version = commands.getoutput("${BUILD_PREFIX}gcc --version | head -n 1 | cut -f 3 -d ' '") - - if not check_gcc3(e.data) and gcc_version[0] != '3': - messages = messages + "gcc3-native was in ASSUME_PROVIDED but the gcc-3.x binary can't be found in PATH" - missing = missing + "gcc-3.x (needed for qemu-native)," - + # If we'll be running qemu, perform some sanity checks + if data.getVar('ENABLE_BINARY_LOCALE_GENERATION', e.data, True): if "qemu-native" in assume_provided: - if not check_app_exists("qemu-arm", e.data): - messages = messages + "qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH" - - if os.path.exists("/proc/sys/vm/mmap_min_addr"): - f = file("/proc/sys/vm/mmap_min_addr", "r") - if (f.read().strip() != "0"): - messages = messages + "/proc/sys/vm/mmap_min_addr is not 0. This will cause problems with qemu so please fix the value (as root).\n\nTo fix this in later reboots, set vm.mmap_min_addr = 0 in /etc/sysctl.conf.\n" - f.close() + required_utilities += " %s" % (qemu_target_binary(e.data)) for util in required_utilities.split(): if not check_app_exists( util, e.data ): @@ -193,10 +179,8 @@ def check_sanity(e): addhandler check_sanity_eventhandler python check_sanity_eventhandler() { - from bb import note, error, data, __version__ - from bb.event import getName - - if getName(e) == "ConfigParsed": + from bb.event import Handled, NotHandled + if bb.event.getName(e) == "ConfigParsed": check_sanity(e) return NotHandled 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/sdk.bbclass b/classes/sdk.bbclass index eb34bd04b5..198d147cb3 100644 --- a/classes/sdk.bbclass +++ b/classes/sdk.bbclass @@ -1,3 +1,8 @@ +# +# Note this class is deprecated and replaced by nativesdk.bbclass +# + + # SDK packages are built either explicitly by the user, # or indirectly via dependency. No need to be in 'world'. EXCLUDE_FROM_WORLD = "1" diff --git a/classes/siteinfo.bbclass b/classes/siteinfo.bbclass index 5c929dffcd..93cee4f890 100644 --- a/classes/siteinfo.bbclass +++ b/classes/siteinfo.bbclass @@ -16,8 +16,6 @@ # If 'what' doesn't exist then an empty value is returned # def get_siteinfo_list(d): - import bb - target = bb.data.getVar('HOST_ARCH', d, 1) + "-" + bb.data.getVar('HOST_OS', d, 1) targetinfo = {\ @@ -86,8 +84,6 @@ def get_siteinfo_list(d): # 2) ${FILE_DIRNAME}/site-${PV} - app version specific # def siteinfo_get_files(d): - import bb, os - sitefiles = "" # Determine which site files to look for diff --git a/classes/sourcepkg.bbclass b/classes/sourcepkg.bbclass index 200ff8c228..5aacf92d10 100644 --- a/classes/sourcepkg.bbclass +++ b/classes/sourcepkg.bbclass @@ -5,8 +5,6 @@ EXCLUDE_FROM ?= ".pc autom4te.cache" DISTRO ?= "openembedded" def get_src_tree(d): - import bb - import os, os.path workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: @@ -56,8 +54,6 @@ sourcepkg_do_archive_bb() { } python sourcepkg_do_dumpdata() { - import os - import os.path workdir = bb.data.getVar('WORKDIR', d, 1) distro = bb.data.getVar('DISTRO', d, 1) diff --git a/classes/src_distribute.bbclass b/classes/src_distribute.bbclass index 7d75c9e16f..22044752ef 100644 --- a/classes/src_distribute.bbclass +++ b/classes/src_distribute.bbclass @@ -3,7 +3,7 @@ SRC_DISTRIBUTECOMMAND[func] = "1" addtask distribute_sources before do_build after do_fetch python do_distribute_sources () { - import os, re, bb + import re bb.build.exec_func("do_fetch", d) diff --git a/classes/task.bbclass b/classes/task.bbclass index f3287ebf73..4edd704829 100644 --- a/classes/task.bbclass +++ b/classes/task.bbclass @@ -17,7 +17,6 @@ PACKAGE_ARCH = "all" # to the list. Their dependencies (RRECOMMENDS) are handled as usual # by package_depchains in a following step. python () { - import bb packages = bb.data.getVar('PACKAGES', d, 1).split() genpackages = [] for pkg in packages: diff --git a/classes/tinderclient.bbclass b/classes/tinderclient.bbclass index d2b2b33898..a45c1e679b 100644 --- a/classes/tinderclient.bbclass +++ b/classes/tinderclient.bbclass @@ -1,6 +1,5 @@ def tinder_http_post(d, server, selector, content_type, body): import httplib - from bb import data # now post it for i in range(0,5): try: @@ -61,8 +60,7 @@ def tinder_format_http_post(d,status,log): for the tinderbox to be happy. """ - from bb import data, build - import os,random + import random # the variables we will need to send on this form post variables = { @@ -82,7 +80,6 @@ def tinder_format_http_post(d,status,log): "TARGETOS" : data.getVar('TARGET_OS', d, True) or "Unknown", "MACHINE" : data.getVar('MACHINE', d, True) or "Unknown", "DISTRO" : data.getVar('DISTRO', d, True) or "Unknown", - "zecke-rocks" : "sure", } # optionally add the status diff --git a/classes/update-alternatives.bbclass b/classes/update-alternatives.bbclass index c63581c5d1..ddbf4c1947 100644 --- a/classes/update-alternatives.bbclass +++ b/classes/update-alternatives.bbclass @@ -11,7 +11,6 @@ update-alternatives --remove ${ALTERNATIVE_NAME} ${ALTERNATIVE_PATH} } def update_alternatives_after_parse(d): - import bb if bb.data.getVar('ALTERNATIVE_NAME', d) == None: raise bb.build.FuncFailed, "%s inherits update-alternatives but doesn't set ALTERNATIVE_NAME" % bb.data.getVar('FILE', d) if bb.data.getVar('ALTERNATIVE_PATH', d) == None: diff --git a/classes/update-rc.d.bbclass b/classes/update-rc.d.bbclass index 00ec37cfb8..b6491ed9d6 100644 --- a/classes/update-rc.d.bbclass +++ b/classes/update-rc.d.bbclass @@ -41,7 +41,6 @@ fi def update_rc_after_parse(d): - import bb if bb.data.getVar('INITSCRIPT_PACKAGES', d) == None: if bb.data.getVar('INITSCRIPT_NAME', d) == None: raise bb.build.FuncFailed, "%s inherits update-rc.d but doesn't set INITSCRIPT_NAME" % bb.data.getVar('FILE', d) diff --git a/classes/xfce.bbclass b/classes/xfce.bbclass index b18313fa2a..db6329c4ad 100644 --- a/classes/xfce.bbclass +++ b/classes/xfce.bbclass @@ -9,7 +9,7 @@ LICENSE = "LGPLv2" DEPENDS += "startup-notification" XFCE_VERSION = ${PV} -SRC_URI = "http://www.us.xfce.org/archive/xfce-${XFCE_VERSION}/src/${PN}-${PV}.tar.bz2" +SRC_URI = "http://www.us.xfce.org/archive/xfce/${XFCE_VERSION}/src/${PN}-${PV}.tar.bz2" inherit autotools 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} } |
