summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorLukas Gorris <lukas.gorris@gmail.com>2009-03-30 21:20:14 +0200
committerLukas Gorris <lukas.gorris@gmail.com>2009-03-30 21:20:14 +0200
commita93dfebb9e7a34ffba9b1ae5e8e496dfab4c3c43 (patch)
tree6c38a4617c92398269e6603a0509fc3006811368 /classes
parent4255898da29e7e0c521d064afedbc4075b3e8155 (diff)
parentd7fdcef3d8c8b80926d579c2db179b594429cebe (diff)
Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into org.openembedded.dev
Diffstat (limited to 'classes')
-rw-r--r--classes/autotools.bbclass3
-rw-r--r--classes/base.bbclass166
-rw-r--r--classes/cmake.bbclass22
-rw-r--r--classes/distutils-base.bbclass26
-rw-r--r--classes/distutils-common-base.bbclass27
-rw-r--r--classes/distutils-native-base.bbclass3
-rw-r--r--classes/fso-plugin.bbclass4
-rw-r--r--classes/insane.bbclass2
-rw-r--r--classes/kernel.bbclass2
-rw-r--r--classes/package.bbclass6
-rw-r--r--classes/package_rpm.bbclass142
-rw-r--r--classes/packaged-staging.bbclass14
-rw-r--r--classes/qmake2.bbclass5
-rw-r--r--classes/qt4e.bbclass3
-rw-r--r--classes/qtopia4core.bbclass13
-rw-r--r--classes/rootfs_rpm.bbclass210
-rw-r--r--classes/rpm_core.bbclass16
-rw-r--r--classes/scons.bbclass2
-rw-r--r--classes/vala.bbclass3
19 files changed, 515 insertions, 154 deletions
diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass
index fd8687ebb6..20f371a987 100644
--- a/classes/autotools.bbclass
+++ b/classes/autotools.bbclass
@@ -212,7 +212,8 @@ autotools_stage_all() {
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,${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
diff --git a/classes/base.bbclass b/classes/base.bbclass
index 18afc1a2fe..9ec705bc1e 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -10,6 +10,35 @@ def base_path_join(a, *p):
path += '/' + b
return path
+def base_path_relative(src, dest):
+ """ Return a relative path from src to dest.
+
+ >>> base_path_relative("/usr/bin", "/tmp/foo/bar")
+ ../../tmp/foo/bar
+
+ >>> base_path_relative("/usr/bin", "/usr/lib")
+ ../lib
+
+ >>> base_path_relative("/tmp", "/tmp/foo/bar")
+ foo/bar
+ """
+ from os.path import sep, pardir, normpath, commonprefix
+
+ destlist = normpath(dest).split(sep)
+ srclist = normpath(src).split(sep)
+
+ # Find common section of the path
+ common = commonprefix([destlist, srclist])
+ commonlen = len(common)
+
+ # Climb back to the point where they differentiate
+ relpath = [ pardir ] * (len(srclist) - commonlen)
+ if commonlen < len(destlist):
+ # Add remaining portion
+ relpath += destlist[commonlen:]
+
+ return sep.join(relpath)
+
# for MD5/SHA handling
def base_chk_load_parser(config_path):
import ConfigParser, os, bb
@@ -182,6 +211,7 @@ def base_package_name(d):
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
overrides = (bb.data.getVar("OVERRIDES", d, 1) or "") + ":"
@@ -190,8 +220,6 @@ def base_set_filespath(path, d):
filespath.append(os.path.join(p, o))
return ":".join(filespath)
-FILESPATH = "${@base_set_filespath([ "${FILE_DIRNAME}/${PF}", "${FILE_DIRNAME}/${P}", "${FILE_DIRNAME}/${PN}", "${FILE_DIRNAME}/${BP}", "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files", "${FILE_DIRNAME}" ], d)}"
-
def oe_filter(f, str, d):
from re import match
return " ".join(filter(lambda x: match(f, x, 0), str.split()))
@@ -701,15 +729,18 @@ def oe_unpack_file(file, data, url = None):
cmd = '%s -a' % cmd
cmd = '%s %s' % (cmd, file)
elif os.path.isdir(file):
- filesdir = os.path.realpath(bb.data.getVar("FILESDIR", data, 1))
destdir = "."
- if file[0:len(filesdir)] == filesdir:
- destdir = file[len(filesdir):file.rfind('/')]
- destdir = destdir.strip('/')
- if len(destdir) < 1:
- destdir = "."
- elif not os.access("%s/%s" % (os.getcwd(), destdir), os.F_OK):
- os.makedirs("%s/%s" % (os.getcwd(), destdir))
+ filespath = bb.data.getVar("FILESPATH", data, 1).split(":")
+ for fp in filespath:
+ if file[0:len(fp)] == fp:
+ destdir = file[len(fp):file.rfind('/')]
+ destdir = destdir.strip('/')
+ if len(destdir) < 1:
+ destdir = "."
+ elif not os.access("%s/%s" % (os.getcwd(), destdir), os.F_OK):
+ os.makedirs("%s/%s" % (os.getcwd(), destdir))
+ break
+
cmd = 'cp -pPR %s %s/%s/' % (file, os.getcwd(), destdir)
else:
(type, host, path, user, pswd, parm) = bb.decodeurl(url)
@@ -763,22 +794,54 @@ python base_do_unpack() {
try:
local = bb.data.expand(bb.fetch.localpath(url, localdata), localdata)
except bb.MalformedUrl, e:
- raise FuncFailed('Unable to generate local path for malformed uri: %s' % e)
+ raise bb.build.FuncFailed('Unable to generate local path for malformed uri: %s' % e)
+ if not local:
+ raise bb.build.FuncFailed('Unable to locate local file for %s' % url)
local = os.path.realpath(local)
ret = oe_unpack_file(local, localdata, url)
if not ret:
raise bb.build.FuncFailed()
}
-def base_get_scmbasepath(d):
- import bb
- path_to_bbfiles = bb.data.getVar( 'BBFILES', d, 1 ).split()
- return path_to_bbfiles[0][:path_to_bbfiles[0].rindex( "packages" )]
+METADATA_SCM = "${@base_get_scm(d)}"
+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",
+ "git": ".git",
+ "monotone": "_MTN"}.iteritems():
+ if os.path.exists(os.path.join(baserepo, scmpath)):
+ return "%s %s" % (scm, baserepo)
+ return "<unknown> %s" % baserepo
+
+def base_get_scm_revision(d):
+ (scm, path) = d.getVar("METADATA_SCM", 1).split()
+ try:
+ if scm != "<unknown>":
+ return globals()["base_get_metadata_%s_revision" % scm](path, d)
+ else:
+ return scm
+ except KeyError:
+ return "<unknown>"
-def base_get_metadata_monotone_branch(d):
+def base_get_scm_branch(d):
+ (scm, path) = d.getVar("METADATA_SCM", 1).split()
+ try:
+ if scm != "<unknown>":
+ return globals()["base_get_metadata_%s_branch" % scm](path, d)
+ else:
+ return scm
+ except KeyError:
+ return "<unknown>"
+
+def base_get_metadata_monotone_branch(path, d):
monotone_branch = "<unknown>"
try:
- monotone_branch = file( "%s/_MTN/options" % base_get_scmbasepath(d) ).read().strip()
+ monotone_branch = file( "%s/_MTN/options" % path ).read().strip()
if monotone_branch.startswith( "database" ):
monotone_branch_words = monotone_branch.split()
monotone_branch = monotone_branch_words[ monotone_branch_words.index( "branch" )+1][1:-1]
@@ -786,10 +849,10 @@ def base_get_metadata_monotone_branch(d):
pass
return monotone_branch
-def base_get_metadata_monotone_revision(d):
+def base_get_metadata_monotone_revision(path, d):
monotone_revision = "<unknown>"
try:
- monotone_revision = file( "%s/_MTN/revision" % base_get_scmbasepath(d) ).read().strip()
+ monotone_revision = file( "%s/_MTN/revision" % path ).read().strip()
if monotone_revision.startswith( "format_version" ):
monotone_revision_words = monotone_revision.split()
monotone_revision = monotone_revision_words[ monotone_revision_words.index( "old_revision" )+1][1:-1]
@@ -797,56 +860,29 @@ def base_get_metadata_monotone_revision(d):
pass
return monotone_revision
-def base_get_metadata_svn_revision(d):
+def base_get_metadata_svn_revision(path, d):
revision = "<unknown>"
try:
- revision = file( "%s/.svn/entries" % base_get_scmbasepath(d) ).readlines()[3].strip()
+ revision = file( "%s/.svn/entries" % path ).readlines()[3].strip()
except IOError:
pass
return revision
-def base_get_metadata_git_branch(d):
+def base_get_metadata_git_branch(path, d):
import os
- branch = os.popen('cd %s; git branch | grep "^* " | tr -d "* "' % base_get_scmbasepath(d)).read()
+ branch = os.popen('cd %s; git symbolic-ref HEAD' % path).read().rstrip()
if len(branch) != 0:
- return branch
+ return branch.replace("refs/heads/", "")
return "<unknown>"
-def base_get_metadata_git_revision(d):
+def base_get_metadata_git_revision(path, d):
import os
- rev = os.popen("cd %s; git log -n 1 --pretty=oneline --" % base_get_scmbasepath(d)).read().split(" ")[0]
+ rev = os.popen("cd %s; git show-ref HEAD" % path).read().split(" ")[0].rstrip()
if len(rev) != 0:
return rev
return "<unknown>"
-def base_detect_revision(d):
- scms = [base_get_metadata_monotone_revision, \
- base_get_metadata_svn_revision, \
- base_get_metadata_git_revision]
-
- for scm in scms:
- rev = scm(d)
- if rev <> "<unknown>":
- return rev
-
- return "<unknown>"
-
-def base_detect_branch(d):
- scms = [base_get_metadata_monotone_branch, \
- base_get_metadata_git_branch]
-
- for scm in scms:
- rev = scm(d)
- if rev <> "<unknown>":
- return rev.strip()
-
- return "<unknown>"
-
-
-
-METADATA_BRANCH ?= "${@base_detect_branch(d)}"
-METADATA_REVISION ?= "${@base_detect_revision(d)}"
addhandler base_eventhandler
python base_eventhandler() {
@@ -862,10 +898,7 @@ python base_eventhandler() {
name = getName(e)
msg = ""
- if name.startswith("Pkg"):
- msg += "package %s: " % data.getVar("P", e.data, 1)
- msg += messages.get(name[3:]) or name[3:]
- elif name.startswith("Task"):
+ if name.startswith("Task"):
msg += "package %s: task %s: " % (data.getVar("PF", e.data, 1), e.task)
msg += messages.get(name[4:]) or name[4:]
elif name.startswith("Build"):
@@ -873,6 +906,8 @@ python base_eventhandler() {
msg += messages.get(name[5:]) or name[5:]
elif name == "UnsatisfiedDep":
msg += "package %s: dependency %s %s" % (e.pkg, e.dep, name[:-3].lower())
+ else:
+ return NotHandled
# Only need to output when using 1.8 or lower, the UI code handles it
# otherwise
@@ -882,12 +917,12 @@ python base_eventhandler() {
if name.startswith("BuildStarted"):
bb.data.setVar( 'BB_VERSION', bb.__version__, e.data )
- statusvars = ['BB_VERSION', 'METADATA_BRANCH', 'METADATA_REVISION', 'TARGET_ARCH', 'TARGET_OS', 'MACHINE', 'DISTRO', 'DISTRO_VERSION','TARGET_FPU']
+ statusvars = bb.data.getVar("BUILDCFG_VARS", e.data, 1).split()
statuslines = ["%-17s = \"%s\"" % (i, bb.data.getVar(i, e.data, 1) or '') for i in statusvars]
statusmsg = "\nOE Build Configuration:\n%s\n" % '\n'.join(statuslines)
print statusmsg
- needed_vars = [ "TARGET_ARCH", "TARGET_OS" ]
+ needed_vars = bb.data.getVar("BUILDCFG_NEEDEDVARS", e.data, 1).split()
pesteruser = []
for v in needed_vars:
val = bb.data.getVar(v, e.data, 1)
@@ -1061,6 +1096,19 @@ python read_subpackage_metadata () {
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"
diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass
index faa4768d90..b5b7b8655b 100644
--- a/classes/cmake.bbclass
+++ b/classes/cmake.bbclass
@@ -3,10 +3,26 @@ DEPENDS += " cmake-native "
# We want the staging and installing functions from autotools
inherit autotools
+# Use in-tree builds by default but allow this to be changed
+# since some packages do not support them (e.g. llvm 2.5).
+OECMAKE_SOURCEPATH ?= "."
+
+# If declaring this, make sure you also set EXTRA_OEMAKE to
+# "-C ${OECMAKE_BUILDPATH}". So it will run the right makefiles.
+OECMAKE_BUILDPATH ?= ""
+
cmake_do_configure() {
- cmake . -DCMAKE_INSTALL_PREFIX:PATH=${prefix} -Wno-dev \
- -DCMAKE_FIND_ROOT_PATH=${STAGING_DIR_HOST} \
- ${EXTRA_OECMAKE}
+ if [ ${OECMAKE_BUILDPATH} ]
+ then
+ mkdir ${OECMAKE_BUILDPATH}
+ cd ${OECMAKE_BUILDPATH}
+ fi
+
+ cmake ${OECMAKE_SOURCEPATH} \
+ -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
+ -DCMAKE_FIND_ROOT_PATH=${STAGING_DIR_HOST} \
+ ${EXTRA_OECMAKE} \
+ -Wno-dev
}
EXPORT_FUNCTIONS do_configure
diff --git a/classes/distutils-base.bbclass b/classes/distutils-base.bbclass
index a08414aadf..2e151ded38 100644
--- a/classes/distutils-base.bbclass
+++ b/classes/distutils-base.bbclass
@@ -1,29 +1,5 @@
-EXTRA_OEMAKE = ""
DEPENDS += "${@["python-native python", ""][(bb.data.getVar('PACKAGES', d, 1) == '')]}"
RDEPENDS += "python-core"
-export STAGING_INCDIR
-export STAGING_LIBDIR
+inherit distutils-common-base
-def python_dir(d):
- import os, bb
- staging_incdir = bb.data.getVar( "STAGING_INCDIR", d, 1 )
- for majmin in "2.6 2.5 2.4 2.3".split():
- if os.path.exists( "%s/python%s" % ( staging_incdir, majmin ) ): return "python%s" % majmin
- raise "No Python in STAGING_INCDIR. Forgot to build python-native ?"
-
-PYTHON_DIR = "${@python_dir(d)}"
-
-PACKAGES = "${PN}-dev ${PN}-dbg ${PN}-doc ${PN}"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*"
-
-FILES_${PN}-dev += "\
- ${libdir}/pkgconfig \
- ${libdir}/${PYTHON_DIR}/site-packages/*.la \
-"
-FILES_${PN}-dbg = "\
- ${libdir}/${PYTHON_DIR}/site-packages/.debug \
- ${libdir}/${PYTHON_DIR}/site-packages/*/.debug \
- ${libdir}/${PYTHON_DIR}/site-packages/*/*/.debug \
-"
diff --git a/classes/distutils-common-base.bbclass b/classes/distutils-common-base.bbclass
new file mode 100644
index 0000000000..068eac4de8
--- /dev/null
+++ b/classes/distutils-common-base.bbclass
@@ -0,0 +1,27 @@
+EXTRA_OEMAKE = ""
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+def python_dir(d):
+ import os, bb
+ staging_incdir = bb.data.getVar( "STAGING_INCDIR", d, 1 )
+ for majmin in "2.6 2.5 2.4 2.3".split():
+ if os.path.exists( "%s/python%s" % ( staging_incdir, majmin ) ): return "python%s" % majmin
+ raise "No Python in STAGING_INCDIR. Forgot to build python-native ?"
+
+PYTHON_DIR = "${@python_dir(d)}"
+
+PACKAGES = "${PN}-dev ${PN}-dbg ${PN}-doc ${PN}"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*"
+
+FILES_${PN}-dev += "\
+ ${libdir}/pkgconfig \
+ ${libdir}/${PYTHON_DIR}/site-packages/*.la \
+"
+FILES_${PN}-dbg = "\
+ ${libdir}/${PYTHON_DIR}/site-packages/.debug \
+ ${libdir}/${PYTHON_DIR}/site-packages/*/.debug \
+ ${libdir}/${PYTHON_DIR}/site-packages/*/*/.debug \
+"
diff --git a/classes/distutils-native-base.bbclass b/classes/distutils-native-base.bbclass
new file mode 100644
index 0000000000..2703fe0740
--- /dev/null
+++ b/classes/distutils-native-base.bbclass
@@ -0,0 +1,3 @@
+DEPENDS += "${@["python-native", ""][(bb.data.getVar('PACKAGES', d, 1) == '')]}"
+
+inherit distutils-common-base
diff --git a/classes/fso-plugin.bbclass b/classes/fso-plugin.bbclass
new file mode 100644
index 0000000000..d050540ef6
--- /dev/null
+++ b/classes/fso-plugin.bbclass
@@ -0,0 +1,4 @@
+FILES_${PN} += "${libdir}/cornucopia/modules/*/*.so"
+FILES_${PN}-dev += "${libdir}/cornucopia/modules/*/*.la"
+FILES_${PN}-dbg += "${libdir}/cornucopia/modules/*/.debug"
+
diff --git a/classes/insane.bbclass b/classes/insane.bbclass
index 5b31a0123d..48964afb92 100644
--- a/classes/insane.bbclass
+++ b/classes/insane.bbclass
@@ -343,6 +343,8 @@ def package_qa_hash_style(path, name, d, elf):
gnu_hash = "--hash-style=gnu" in bb.data.getVar('LDFLAGS', d, True)
if not gnu_hash:
gnu_hash = "--hash-style=both" in bb.data.getVar('LDFLAGS', d, True)
+ if not gnu_hash:
+ return True
objdump = bb.data.getVar('OBJDUMP', d, True)
env_path = bb.data.getVar('PATH', d, True)
diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass
index 4c1dbda35c..17e8941745 100644
--- a/classes/kernel.bbclass
+++ b/classes/kernel.bbclass
@@ -114,7 +114,7 @@ kernel_do_stage() {
mkdir -p ${STAGING_KERNEL_DIR}/include/pcmcia
cp -fR include/pcmcia/* ${STAGING_KERNEL_DIR}/include/pcmcia/
- for entry in drivers/crypto include/media include/acpi include/sound include/video include/scsi; do
+ for entry in drivers/crypto drivers/media include/media include/acpi include/sound include/video include/scsi; do
if [ -d $entry ]; then
mkdir -p ${STAGING_KERNEL_DIR}/$entry
cp -fR $entry/* ${STAGING_KERNEL_DIR}/$entry/
diff --git a/classes/package.bbclass b/classes/package.bbclass
index 55595928c6..7a61c5a0fb 100644
--- a/classes/package.bbclass
+++ b/classes/package.bbclass
@@ -483,6 +483,11 @@ python emit_pkgdata() {
val = bb.data.getVar('%s_%s' % (var, pkg), d, 1)
if val:
f.write('%s_%s: %s\n' % (var, pkg, encode(val)))
+ return
+ val = bb.data.getVar('%s' % (var), d, 1)
+ if val:
+ f.write('%s: %s\n' % (var, encode(val)))
+ return
packages = bb.data.getVar('PACKAGES', d, True)
pkgdatadir = bb.data.getVar('PKGDATA_DIR', d, True)
@@ -503,6 +508,7 @@ python emit_pkgdata() {
subdata_file = pkgdatadir + "/runtime/%s" % pkg
sf = open(subdata_file, 'w')
write_if_exists(sf, pkg, 'PN')
+ write_if_exists(sf, pkg, 'PV')
write_if_exists(sf, pkg, 'PR')
write_if_exists(sf, pkg, 'DESCRIPTION')
write_if_exists(sf, pkg, 'RDEPENDS')
diff --git a/classes/package_rpm.bbclass b/classes/package_rpm.bbclass
index f0055a1e63..71fa76010f 100644
--- a/classes/package_rpm.bbclass
+++ b/classes/package_rpm.bbclass
@@ -1,19 +1,31 @@
inherit package
-inherit rpm_core
RPMBUILD="rpmbuild --short-circuit ${RPMOPTS}"
IMAGE_PKGTYPE ?= "rpm"
+RPMBUILDPATH="${WORKDIR}/rpm"
+
+RPMOPTS="--rcfile=${WORKDIR}/rpmrc"
+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)
+
out_vartranslate = {
"PKG": "Name",
- "PV": "Version",
+ "RPMPV": "Version",
"DESCRIPTION": "%description",
"ROOT": "BuildRoot",
"LICENSE": "License",
"SECTION": "Group",
+ "pkg_postinst": "%post",
+ "pkg_preinst": "%pre",
}
root = bb.data.getVar('ROOT', d)
@@ -38,9 +50,9 @@ python write_specfile() {
del files[files.index(r)]
except ValueError:
pass
- if not files:
+ 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))
+ note("Not creating empty archive for %s" % (bb.data.expand('${PKG}-${PV}-${PR}${DISTRO_PR}', d, True)))
return
# output .spec using this metadata store
@@ -56,79 +68,146 @@ python write_specfile() {
for var in out_vartranslate.keys():
if out_vartranslate[var][0] == "%":
continue
- fd.write("%s\t: %s\n" % (out_vartranslate[var], bb.data.getVar(var, d)))
- fd.write("Release\t: %s\n" % bb.data.expand('${PR}${DISTRO_PR}', d, True)
+ val = bb.data.getVar(var, d, 1)
+ if val:
+ fd.write("%s\t: %s\n" % (out_vartranslate[var], val))
+
+ fd.write("AutoReqProv: no\n")
+
+ def fix_dep_versions(varname):
+ depends = bb.utils.explode_dep_versions(bb.data.getVar(varname, d, True) or "")
+ newdeps = []
+ for dep in depends:
+ ver = depends[dep]
+ if dep and ver:
+ if '-' in ver:
+ subd = read_subpkgdata_dict(dep, d)
+ pv = subd['PV']
+ reppv = pv.replace('-', '+')
+ ver = ver.replace(pv, reppv)
+ newdeps.append("%s (%s)" % (dep, ver))
+ elif dep:
+ newdeps.append(dep)
+ bb.data.setVar(varname, " ".join(newdeps), d)
+
+ fix_dep_versions('RDEPENDS')
+ fix_dep_versions('RRECOMMENDS')
+
+ bb.build.exec_func("mapping_rename_hook", d)
+
+ def write_dep_field(varname, outstring):
+ depends = bb.utils.explode_dep_versions(bb.data.getVar(varname, d, True) or "")
+ for dep in depends:
+ ver = depends[dep]
+ if dep and ver:
+ fd.write("%s: %s %s\n" % (outstring, dep, ver))
+ elif dep:
+ fd.write("%s: %s\n" % (outstring, dep))
+
+ write_dep_field('RDEPENDS', 'Requires')
+ write_dep_field('RRECOMMENDS', 'Recommends')
+ write_dep_field('RPROVIDES', 'Provides')
+
+ fd.write("Release\t: %s\n" % bb.data.expand('${PR}${DISTRO_PR}', d, True))
fd.write("Summary\t: .\n")
for var in out_vartranslate.keys():
if out_vartranslate[var][0] != "%":
continue
- fd.write(out_vartranslate[var] + "\n")
- fd.write(bb.data.getVar(var, d) + "\n\n")
+ val = bb.data.getVar(var, d)
+ if val:
+ fd.write(out_vartranslate[var] + "\n")
+ fd.write(val + "\n\n")
fd.write("%files\n")
for file in files:
+ if file[0] != '/':
+ fd.write('/')
fd.write("%s\n" % file)
fd.close()
# call out rpm -bb on the .spec, thereby creating an rpm
+ bb.note(bb.data.expand("${RPMBUILD} -bb ${OUTSPECFILE}", d))
+
bb.data.setVar('BUILDSPEC', "${RPMBUILD} -bb ${OUTSPECFILE}\n", d)
bb.data.setVarFlag('BUILDSPEC', 'func', '1', d)
bb.build.exec_func('BUILDSPEC', d)
# move the rpm into the pkgoutdir
- rpm = bb.data.expand('${RPMBUILDPATH}/RPMS/${TARGET_ARCH}/${PKG}-${PV}-${PR}${DISTRO_PR}.${TARGET_ARCH}.rpm', d)
- outrpm = bb.data.expand('${DEPLOY_DIR_RPM}/${PKG}-${PV}-${PR}${DISTRO_PR}.${TARGET_ARCH}.rpm', d)
+ rpm = bb.data.expand('${RPMBUILDPATH}/RPMS/${TARGET_ARCH}/${PKG}-${RPMPV}-${PR}.${TARGET_ARCH}.rpm', d)
+ outrpm = bb.data.expand('${DEPLOY_DIR_RPM}/${PACKAGE_ARCH}/${PKG}-${RPMPV}-${PR}.${TARGET_ARCH}.rpm', d)
bb.movefile(rpm, outrpm)
}
+rpm_prep() {
+ if [ ! -e ${WORKDIR}/rpmrc ]; then
+ mkdir -p ${RPMBUILDPATH}/{SPECS,RPMS/{i386,i586,i686,noarch,ppc,mips,mipsel,arm},SRPMS,SOURCES,BUILD}
+ echo 'macrofiles:${STAGING_DIR_NATIVE}/usr/lib/rpm/macros:${WORKDIR}/macros' > ${WORKDIR}/rpmrc
+ echo '%_topdir ${RPMBUILDPATH}' > ${WORKDIR}/macros
+ echo '%_repackage_dir ${WORKDIR}' >> ${WORKDIR}/macros
+ fi
+}
+
python do_package_rpm () {
- workdir = bb.data.getVar('WORKDIR', d)
+ workdir = bb.data.getVar('WORKDIR', d, 1)
if not workdir:
- raise bb.build.FuncFailed("WORKDIR not defined")
- workdir = bb.data.expand(workdir, d)
+ bb.error("WORKDIR not defined, unable to package")
+ return
import os # path manipulations
- outdir = bb.data.getVar('DEPLOY_DIR_RPM', d)
+ outdir = bb.data.getVar('DEPLOY_DIR_RPM', d, 1)
if not outdir:
- raise bb.build.FuncFailed("DEPLOY_DIR_RPM not defined")
- outdir = bb.data.expand(outdir, d)
+ bb.error("DEPLOY_DIR_RPM not defined, unable to package")
+ return
bb.mkdirhier(outdir)
- packages = bb.data.getVar('PACKAGES', d)
+ packages = bb.data.getVar('PACKAGES', d, 1)
if not packages:
- packages = "${PN}"
- bb.data.setVar('FILES', '', d)
- ddir = bb.data.expand(bb.data.getVar('D', d), d)
- bb.mkdirhier(ddir)
- bb.data.setVar(bb.data.expand('FILES_${PN}', d), ''.join([ "./%s" % x for x in os.listdir(ddir)]), d)
- packages = bb.data.expand(packages, d)
+ bb.debug(1, "PACKAGES not defined, nothing to package")
+ return
+
+ if packages == []:
+ bb.debug(1, "No packages; nothing to do")
+ return
+
+ # If "rpm" comes into overrides the presence of this function causes problems.
+ # Since we don't need it, remove it for now - hacky.
+ bb.data.delVar("do_package_write_rpm", d)
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)
+
+ lf = bb.utils.lockfile(root + ".lock")
bb.data.setVar('ROOT', '', localdata)
bb.data.setVar('ROOT_%s' % pkg, root, localdata)
- bb.data.setVar('PKG', pkg, localdata)
+ pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1)
+ if not pkgname:
+ pkgname = pkg
+ bb.data.setVar('PKG', pkgname, localdata)
overrides = bb.data.getVar('OVERRIDES', localdata)
if not overrides:
raise bb.build.FuncFailed('OVERRIDES not defined')
overrides = bb.data.expand(overrides, localdata)
- bb.data.setVar('OVERRIDES', '%s:%s' % (overrides, pkg), localdata)
+ bb.data.setVar('OVERRIDES', overrides + ':' + pkg, localdata)
bb.data.update_data(localdata)
- root = bb.data.getVar('ROOT', localdata)
- basedir = os.path.dirname(root)
- pkgoutdir = outdir
+ basedir = os.path.join(os.path.dirname(root))
+ pkgoutdir = os.path.join(outdir, bb.data.getVar('PACKAGE_ARCH', localdata, 1))
bb.mkdirhier(pkgoutdir)
bb.data.setVar('OUTSPECFILE', os.path.join(workdir, "%s.spec" % pkg), localdata)
+ # Save the value of RPMBUILD expanded into the new dictonary so any
+ # changes in the compoents that make up workdir don't break packaging
+ bb.data.setVar('RPMBUILD', bb.data.getVar("RPMBUILD", d, True), localdata)
+ bb.data.setVar('RPMBUILDPATH', bb.data.getVar("RPMBUILDPATH", d, True), localdata)
bb.build.exec_func('write_specfile', localdata)
- del localdata
+ bb.utils.unlockfile(lf)
}
python () {
@@ -143,7 +222,8 @@ python () {
python do_package_write_rpm () {
bb.build.exec_func("read_subpackage_metadata", d)
+ 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_build after do_package
+addtask package_write_rpm before do_package_write after do_package
diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass
index d6272b8145..849f60c500 100644
--- a/classes/packaged-staging.bbclass
+++ b/classes/packaged-staging.bbclass
@@ -361,6 +361,8 @@ python do_package_stage () {
ipkpath = bb.data.getVar('DEPLOY_DIR_IPK', d, True).replace(tmpdir, stagepath)
if bb.data.inherits_class('package_deb', d):
debpath = bb.data.getVar('DEPLOY_DIR_DEB', d, True).replace(tmpdir, stagepath)
+ if bb.data.inherits_class('package_rpm', d):
+ rpmpath = bb.data.getVar('DEPLOY_DIR_RPM', d, True).replace(tmpdir, stagepath)
for pkg in packages:
pkgname = bb.data.getVar('PKG_%s' % pkg, d, 1)
@@ -393,6 +395,18 @@ python do_package_stage () {
bb.mkdirhier(destpath)
bb.copyfile(srcfile, destpath + srcname)
+ if bb.data.inherits_class('package_rpm', d):
+ version = bb.data.getVar('PV', d, 1)
+ version = version.replace('-', '+')
+ bb.data.setVar('RPMPV', version, d)
+ srcname = bb.data.expand(pkgname + "-${RPMPV}-" + pr + ".${TARGET_ARCH}.rpm", d)
+ srcfile = bb.data.expand("${DEPLOY_DIR_RPM}/" + arch + "/" + srcname, d)
+ if os.path.exists(srcfile):
+ destpath = rpmpath + "/" + arch + "/"
+ bb.mkdirhier(destpath)
+ bb.copyfile(srcfile, destpath + srcname)
+
+
#
# Handle stamps/ files
#
diff --git a/classes/qmake2.bbclass b/classes/qmake2.bbclass
index 8a443d062a..f0a7931698 100644
--- a/classes/qmake2.bbclass
+++ b/classes/qmake2.bbclass
@@ -3,14 +3,13 @@
#
inherit qmake_base
-DEPENDS_prepend = "qmake2-native uicmoc4-native "
+DEPENDS_prepend = "qt4-tools-native "
-export QMAKESPEC = "${CROSS_DATADIR}/qt4/mkspecs/${TARGET_OS}-oe-g++"
+export QMAKESPEC = "${STAGING_DATADIR}/qt4/mkspecs/${TARGET_OS}-oe-g++"
export OE_QMAKE_UIC = "${STAGING_BINDIR_NATIVE}/uic4"
export OE_QMAKE_UIC3 = "${STAGING_BINDIR_NATIVE}/uic34"
export OE_QMAKE_MOC = "${STAGING_BINDIR_NATIVE}/moc4"
export OE_QMAKE_RCC = "${STAGING_BINDIR_NATIVE}/rcc4"
-export QMAKE_RCC = "${STAGING_BINDIR_NATIVE}/rcc4"
export OE_QMAKE_QMAKE = "${STAGING_BINDIR_NATIVE}/qmake2"
export OE_QMAKE_LINK = "${CXX}"
export OE_QMAKE_CXXFLAGS = "${CXXFLAGS}"
diff --git a/classes/qt4e.bbclass b/classes/qt4e.bbclass
index 8beef29df4..445ecbaa6a 100644
--- a/classes/qt4e.bbclass
+++ b/classes/qt4e.bbclass
@@ -1,9 +1,10 @@
-DEPENDS_prepend = "${@["qt-embedded ", ""][(bb.data.getVar('PN', d, 1) == 'qt-embedded')]}"
+DEPENDS_prepend = "${@["qt4-embedded ", ""][(bb.data.getVar('PN', d, 1) == 'qt4-embedded')]}"
inherit qmake2
QT_DIR_NAME = "qtopia"
# override variables set by qmake-base to compile Qt/Embedded apps
#
+export QMAKESPEC = "${STAGING_DATADIR}/qtopia/mkspecs/${TARGET_OS}-oe-g++"
export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qtopia"
export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}"
export OE_QMAKE_LIBS_QT = "qt"
diff --git a/classes/qtopia4core.bbclass b/classes/qtopia4core.bbclass
deleted file mode 100644
index b5f10fa486..0000000000
--- a/classes/qtopia4core.bbclass
+++ /dev/null
@@ -1,13 +0,0 @@
-DEPENDS_prepend = "${@["qtopia-core ", ""][(bb.data.getVar('PN', d, 1) == 'qtopia-core')]}"
-inherit qmake2
-
-QT_DIR_NAME = "qtopia"
-#
-# override variables set by qmake-base to compile QtopiaCore apps
-#
-export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qtopia"
-export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}"
-export OE_QMAKE_LIBS_QT = "qt"
-export OE_QMAKE_LIBS_X11 = ""
-export OE_QMAKE_EXTRA_MODULES = "network"
-EXTRA_QMAKEVARS_PRE += " QT_LIBINFIX=E "
diff --git a/classes/rootfs_rpm.bbclass b/classes/rootfs_rpm.bbclass
new file mode 100644
index 0000000000..e3e306450e
--- /dev/null
+++ b/classes/rootfs_rpm.bbclass
@@ -0,0 +1,210 @@
+#
+# Creates a root filesystem out of rpm packages
+#
+
+ROOTFS_PKGMANAGE = "rpm yum"
+
+ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts"
+
+do_rootfs[depends] += "rpm-native:do_populate_staging yum-native:do_populate_staging createrepo-native:do_populate_staging fakechroot-native:do_populate_staging"
+do_rootfs[recrdeptask] += "do_package_write_rpm"
+
+YUMCONF = "${IMAGE_ROOTFS}/etc/yum.conf"
+YUMARGS = "-c ${YUMCONF} --installroot ${IMAGE_ROOTFS}"
+export YUM_ARCH_FORCE = "${TARGET_ARCH}"
+
+AWKPOSTINSTSCRIPT = "${STAGING_BINDIR_NATIVE}/extract-postinst.awk"
+
+RPM_PREPROCESS_COMMANDS = ""
+RPM_POSTPROCESS_COMMANDS = "rpm_insert_feeds_uris"
+
+rpm_insert_feeds_uris () {
+
+ echo "Building from feeds activated!"
+
+ mkdir -p ${IMAGE_ROOTFS}/etc/yum/repos.d/
+ for line in ${RPM_FEED_URIS}
+ do
+ # strip le