[oe-commits] org.oe.dev merge of '6d087d0879bebefbb3ecb1d4c7a2918fcc9dbdcd'

oe commit oe at amethyst.openembedded.net
Mon Mar 17 08:58:25 UTC 2008


merge of '6d087d0879bebefbb3ecb1d4c7a2918fcc9dbdcd'
     and 'a348645b7840d8ac81a18e23718751899dd63120'

Author: oe at openembedded.org
Branch: org.openembedded.dev
Revision: 93dda38a5ff869e474c0472190d55cdc79d02321
ViewMTN: http://monotone.openembedded.org/revision/info/93dda38a5ff869e474c0472190d55cdc79d02321
Files:
1
classes/package.bbclass
classes/packaged-staging.bbclass
conf/bitbake.conf
packages/linux/linux-2.6.24/at32stk1000/defconfig
Diffs:

#
# mt diff -r6d087d0879bebefbb3ecb1d4c7a2918fcc9dbdcd -r93dda38a5ff869e474c0472190d55cdc79d02321
#
#
# no changes
#


#
# mt diff -ra348645b7840d8ac81a18e23718751899dd63120 -r93dda38a5ff869e474c0472190d55cdc79d02321
#
#
#
# patch "classes/package.bbclass"
#  from [cd20e29d5ac82c1f004df7096eb69486fad995b7]
#    to [68cac3fc2f17c4c604d5f8503ebb11e319c537ac]
# 
# patch "classes/packaged-staging.bbclass"
#  from [38546daf325eaf4ea35dd00e659681b3fb89a516]
#    to [4b9fed8e1ab2c3cbce2a3af0b0709720cfc640bc]
# 
# patch "conf/bitbake.conf"
#  from [70cb68395c739ccdb760bd8420dc346bf585df73]
#    to [86fdaa0747310ea3f83914cbb3f62e00cd500cec]
# 
# patch "packages/linux/linux-2.6.24/at32stk1000/defconfig"
#  from [f77b1d5de0e81dc38c7fe71a3a03d0a3244b8465]
#    to [492bd5e2ceb57d781bb2b004ab1cc63ef083d4c5]
#
============================================================
--- classes/package.bbclass	cd20e29d5ac82c1f004df7096eb69486fad995b7
+++ classes/package.bbclass	68cac3fc2f17c4c604d5f8503ebb11e319c537ac
@@ -459,6 +459,18 @@ populate_packages[dirs] = "${D}"
 }
 populate_packages[dirs] = "${D}"
 
+def package_stagefile(file, d):
+	import bb, os
+
+	pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True)
+
+	if pstageactive == "1":
+		destfile = file.replace(bb.data.getVar("TMPDIR", d, 1), bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1))
+		bb.mkdirhier(os.path.dirname(destfile))
+		#print "%s to %s" % (file, destfile)
+		bb.copyfile(file, destfile)
+
+
 python emit_pkgdata() {
 	from glob import glob
 
@@ -472,24 +484,29 @@ python emit_pkgdata() {
 		if val:
 			f.write('%s_%s: %s\n' % (var, pkg, encode(val)))
 
-	packages = bb.data.getVar('PACKAGES', d, 1)
+	packages = bb.data.getVar('PACKAGES', d, True)
+	pkgdatadir = bb.data.getVar('PKGDATA_DIR', d, True)
 
-	data_file = bb.data.expand("${PKGDATA_DIR}/${PN}", d)
+	pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True)
+	if pstageactive == "1":
+		lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d))
+
+	data_file = pkgdatadir + bb.data.expand("/${PN}" , d)
 	f = open(data_file, 'w')
 	f.write("PACKAGES: %s\n" % packages)
 	f.close()
+	package_stagefile(data_file, d)
 
 	workdir = bb.data.getVar('WORKDIR', d, 1)
 
 	for pkg in packages.split():
-		subdata_file = bb.data.expand("${PKGDATA_DIR}/runtime/%s" % pkg, d)
+		subdata_file = pkgdatadir + "/runtime/%s" % pkg
 		sf = open(subdata_file, 'w')
 		write_if_exists(sf, pkg, 'DESCRIPTION')
 		write_if_exists(sf, pkg, 'RDEPENDS')
 		write_if_exists(sf, pkg, 'RPROVIDES')
 		write_if_exists(sf, pkg, 'RRECOMMENDS')
 		write_if_exists(sf, pkg, 'RSUGGESTS')
-		write_if_exists(sf, pkg, 'RPROVIDES')
 		write_if_exists(sf, pkg, 'RREPLACES')
 		write_if_exists(sf, pkg, 'RCONFLICTS')
 		write_if_exists(sf, pkg, 'PKG')
@@ -501,6 +518,10 @@ python emit_pkgdata() {
 		write_if_exists(sf, pkg, 'pkg_prerm')
 		sf.close()
 
+		package_stagefile(subdata_file, d)
+		#if pkgdatadir2:
+		#	bb.copyfile(subdata_file, pkgdatadir2 + "/runtime/%s" % pkg)
+
 		allow_empty = bb.data.getVar('ALLOW_EMPTY_%s' % pkg, d, 1)
 		if not allow_empty:
 			allow_empty = bb.data.getVar('ALLOW_EMPTY', d, 1)
@@ -508,8 +529,11 @@ python emit_pkgdata() {
 		os.chdir(root)
 		g = glob('*')
 		if g or allow_empty == "1":
-			packagedfile = bb.data.expand('${PKGDATA_DIR}/runtime/%s.packaged' % pkg, d)
+			packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg
 			file(packagedfile, 'w').close()
+			package_stagefile(packagedfile, d)
+	if pstageactive == "1":
+		bb.utils.unlockfile(lf)
 }
 emit_pkgdata[dirs] = "${PKGDATA_DIR}/runtime"
 
@@ -549,6 +573,10 @@ python package_do_shlibs() {
 	shlibs_dir = bb.data.getVar('SHLIBSDIR', d, 1)
 	bb.mkdirhier(shlibs_dir)
 
+	pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True)
+	if pstageactive == "1":
+		lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d))
+
 	needed = {}
 	private_libs = bb.data.getVar('PRIVATE_LIBS', d, 1)
 	for pkg in packages.split():
@@ -590,9 +618,11 @@ python package_do_shlibs() {
 			for s in sonames:
 				fd.write(s + '\n')
 			fd.close()
+			package_stagefile(shlibs_file, d)
 			fd = open(shver_file, 'w')
 			fd.write(ver + '\n')
 			fd.close()
+			package_stagefile(shver_file, d)
 		if needs_ldconfig:
 			bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg)
 			postinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, 1) or bb.data.getVar('pkg_postinst', d, 1)
@@ -601,6 +631,9 @@ python package_do_shlibs() {
 			postinst += bb.data.getVar('ldconfig_postinst_fragment', d, 1)
 			bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d)
 
+	if pstageactive == "1":
+		bb.utils.unlockfile(lf)
+
 	shlib_provider = {}
 	list_re = re.compile('^(.*)\.list$')
 	for dir in [shlibs_dir]: 
@@ -715,6 +748,10 @@ python package_do_pkgconfig () {
 							if hdr == 'Requires':
 								pkgconfig_needed[pkg] += exp.replace(',', ' ').split()
 
+	pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True)
+	if pstageactive == "1":
+		lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d))
+
 	for pkg in packages.split():
 		pkgs_file = os.path.join(shlibs_dir, pkg + ".pclist")
 		if os.path.exists(pkgs_file):
@@ -724,6 +761,7 @@ python package_do_pkgconfig () {
 			for p in pkgconfig_provided[pkg]:
 				f.write('%s\n' % p)
 			f.close()
+			package_stagefile(pkgs_file, d)
 
 	for dir in [shlibs_dir]:
 		if not os.path.exists(dir):
@@ -758,6 +796,10 @@ python package_do_pkgconfig () {
 			for dep in deps:
 				fd.write(dep + '\n')
 			fd.close()
+			package_stagefile(deps_file, d)
+
+	if pstageactive == "1":
+		bb.utils.unlockfile(lf)
 }
 
 python read_shlibdeps () {
============================================================
--- classes/packaged-staging.bbclass	38546daf325eaf4ea35dd00e659681b3fb89a516
+++ classes/packaged-staging.bbclass	4b9fed8e1ab2c3cbce2a3af0b0709720cfc640bc
@@ -4,11 +4,66 @@
 #
 # To use it add that line to conf/local.conf:
 #
-# INHERIT = "packaged-staging"
+# INHERIT += "packaged-staging"
+#
 
+
+#
+# bitbake.conf set PSTAGING_ACTIVE = "0", this class sets to "1" if we're active
+# 
+PSTAGE_PKGVERSION = "${PV}-${PR}"
+PSTAGE_PKGARCH    = "${MULTIMACH_ARCH}"
+PSTAGE_EXTRAPATH  = ""
+PSTAGE_PKGPATH    = "${DISTRO}${PSTAGE_EXTRAPATH}"
+PSTAGE_PKGNAME 	  = "staging-${PN}_${PSTAGE_PKGVERSION}_${PSTAGE_PKGARCH}.ipk"
+PSTAGE_PKG        = "${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGPATH}/${PSTAGE_PKGNAME}"
+
+# multimachine.bbclass will override this but add a default in case we're not using it
+MULTIMACH_ARCH ?= "${PACKAGE_ARCH}"
+
+PSTAGE_NATIVEDEPENDS = "\
+    pkgconfig-native \
+    autoconf-native \
+    automake-native \
+    libtool-native \
+    gnu-config-native \
+    shasum-native \
+    libtool-native \
+    automake-native \
+    update-alternatives-cworth-native \
+    ipkg-utils-native \
+    ipkg-native \
+    m4-native \
+    quilt-native \
+    stagemanager-native \
+    "
+
 python () {
     import bb
-    if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('image', d) and not bb.data.inherits_class('cross', d) and not bb.data.inherits_class('sdk', d):
+    pstage_allowed = True
+
+    # These classes encode staging paths into the binary data so can only be
+    # reused if the path doesn't change/
+    if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d):
+        path = bb.data.getVar('PSTAGE_PKGPATH', d, 1)
+        path = path + bb.data.getVar('TMPDIR', d, 1).replace('/', '-')
+        bb.data.setVar('PSTAGE_PKGPATH', path, d)
+
+    # PSTAGE_NATIVEDEPENDS lists the packages we need before we can use packaged 
+    # staging. There will always be some packages we depend on.
+    if bb.data.inherits_class('native', d):
+        pn = bb.data.getVar('PN', d, True)
+        nativedeps = bb.data.getVar('PSTAGE_NATIVEDEPENDS', d, True).split()
+        if pn in nativedeps:
+            pstage_allowed = False
+
+    # Images aren't of interest to us
+    if bb.data.inherits_class('image', d):
+        pstage_allowed = False
+
+    # Add task dependencies if we're active, otherwise mark packaged staging
+    # as inactive.
+    if pstage_allowed:
         deps = bb.data.getVarFlag('do_populate_staging', 'depends', d) or ""
         deps += " stagemanager-native:do_populate_staging"
         bb.data.setVarFlag('do_populate_staging', 'depends', deps, d)
@@ -16,23 +71,19 @@ python () {
         deps = bb.data.getVarFlag('do_prepackaged_stage', 'depends', d) or ""
         deps += " ipkg-native:do_populate_staging ipkg-utils-native:do_populate_staging"
         bb.data.setVarFlag('do_prepackaged_stage', 'depends', deps, d)
+        bb.data.setVar("PSTAGING_ACTIVE", "1", d)
     else:
-        bb.data.setVar("PSTAGING_DISABLED", "1", d)
+        bb.data.setVar("PSTAGING_ACTIVE", "0", d)
 }
 
-# multimachine.bbclass will override this
-MULTIMACH_ARCH ?= "${PACKAGE_ARCH}"
+DEPLOY_DIR_PSTAGE 	= "${DEPLOY_DIR}/pstage"
+PSTAGE_MACHCONFIG       = "${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf"
 
-export PSTAGING_DISABLED = "0"
-
-DEPLOY_DIR_PSTAGE 	= "${DEPLOY_DIR}/pstage" 
-
 PSTAGE_BUILD_CMD        = "${IPKGBUILDCMD}"
-PSTAGE_INSTALL_CMD      = "ipkg-cl install -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}"
-PSTAGE_UPDATE_CMD	= "ipkg-cl update -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}"
-PSTAGE_REMOVE_CMD       = "ipkg-cl remove -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}"
-PSTAGE_LIST_CMD		= "ipkg-cl list_installed -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}"
-PSTAGE_PKGNAME 		= "staging-${PN}_${PV}-${PR}_${MULTIMACH_ARCH}.ipk"
+PSTAGE_INSTALL_CMD      = "ipkg-cl install -force-depends -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}"
+PSTAGE_UPDATE_CMD	= "ipkg-cl update -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}"
+PSTAGE_REMOVE_CMD       = "ipkg-cl remove -force-depends -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}"
+PSTAGE_LIST_CMD		= "ipkg-cl list_installed -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}"
 
 PSTAGE_TMPDIR_STAGE     = "${WORKDIR}/staging-pkg"
 
@@ -48,14 +99,14 @@ do_clean_append() {
         if ret != 0:
             bb.note("Failure removing staging package")
 
-        stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d)
+        stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
         bb.note("Removing staging package %s" % stagepkg)
-        #os.system('rm -rf ' + stagepkg)
+        os.system('rm -rf ' + stagepkg)
 }
 
 staging_helper () {
-	#assemble appropriate ipkg.conf
-	conffile=${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf
+	# Assemble appropriate ipkg.conf
+	conffile=${PSTAGE_MACHCONFIG}
 	mkdir -p ${DEPLOY_DIR_PSTAGE}/pstaging_lists
 	if [ ! -e $conffile ]; then
 		ipkgarchs="${BUILD_ARCH} all any noarch ${TARGET_ARCH} ${PACKAGE_ARCHS} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}"
@@ -64,21 +115,15 @@ staging_helper () {
 			echo "arch $arch $priority" >> $conffile
 			priority=$(expr $priority + 5)
 		done
-		echo "src oe-staging file:${DEPLOY_DIR_PSTAGE}" >> $conffile
-
-		OLD_PWD=`pwd`
-		cd ${DEPLOY_DIR_PSTAGE}
-		ipkg-make-index -p Packages . 
-		cd ${OLD_PWD}
-
-		${PSTAGE_UPDATE_CMD}
 	fi
 }
 
+PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_locales compile sizecheck install deploy package populate_staging package_write_deb package_write_ipk package_write package_stage qa_staging"
+
 python do_prepackaged_stage () {
     import os
 
-    if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1":
+    if bb.data.getVar("PSTAGING_ACTIVE", d, 1) == "0":
         bb.build.make_stamp("do_prepackaged_stage", d)
         return
 
@@ -92,7 +137,7 @@ python do_prepackaged_stage () {
     if ret != 0:
         bb.note("Failure attempting to remove staging package")
 
-    stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d)
+    stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
 
     if os.path.exists(stagepkg):
         bb.note("Following speedup\n")
@@ -109,23 +154,9 @@ python do_prepackaged_stage () {
             bb.note("Failure installing prestage package")
 
         bb.build.make_stamp("do_prepackaged_stage", d)
-        bb.build.make_stamp("do_fetch", d)
-        bb.build.make_stamp("do_unpack", d)
-        bb.build.make_stamp("do_munge", d)
-        bb.build.make_stamp("do_patch", d)
-        bb.build.make_stamp("do_configure", d)
-        bb.build.make_stamp("do_qa_configure", d)
-        bb.build.make_stamp("do_rig_locales", d)
-        bb.build.make_stamp("do_compile", d)
-        bb.build.make_stamp("do_install", d)
-        bb.build.make_stamp("do_deploy", d)
-        bb.build.make_stamp("do_package", d)
-        bb.build.make_stamp("do_populate_staging", d)
-        bb.build.make_stamp("do_package_write_deb", d)
-        bb.build.make_stamp("do_package_write_ipk", d)
-        bb.build.make_stamp("do_package_write", d)
-        bb.build.make_stamp("do_package_stage", d)
-        bb.build.make_stamp("do_qa_staging", d)
+        for task in bb.data.getVar("PSTAGE_TASKS_COVERED", d, 1).split():
+            bb.build.make_stamp("do_" + task, d)
+        bb.build.make_stamp("do_stage_package_populated", d)
 
     else:
         bb.build.make_stamp("do_prepackaged_stage", d)
@@ -134,17 +165,38 @@ addtask prepackaged_stage before do_fetc
 do_prepackaged_stage[selfstamp] = "1"
 addtask prepackaged_stage before do_fetch
 
-populate_staging_preamble () {
-	if [ "$PSTAGING_DISABLED" != "1" ]; then
-		#mkdir -p ${DEPLOY_DIR_PSTAGE}
+addhandler packagedstage_stampfixing_eventhandler
+python packagedstage_stampfixing_eventhandler() {
+    from bb.event import getName
+    import os
 
-		stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u
-		stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u
+    if getName(e) == "StampUpdate":
+        taskscovered = bb.data.getVar("PSTAGE_TASKS_COVERED", e.data, 1).split()
+        for (fn, task) in e.targets:
+            # strip off 'do_'
+            task = task[3:]
+            if task in taskscovered:
+                stamp = "%s.do_stage_package_populated" % e.stampPrefix[fn]
+                if os.path.exists(stamp):
+                    # We're targetting a task which was skipped with packaged staging
+                    # so we need to remove the autogenerated stamps.
+                    for task in taskscovered:
+                        dir = "%s.do_%s" % (e.stampPrefix[fn], task)
+                        os.system('rm -f ' + dir)
+                    os.system('rm -f ' + stamp)
+
+    return NotHandled
+}
+
+populate_staging_preamble () {
+	if [ "$PSTAGING_ACTIVE" = "1" ]; then
+		stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u || true
+		stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u || true
 	fi
 }
 
 populate_staging_postamble () {
-	if [ "$PSTAGING_DISABLED" != "1" ]; then
+	if [ "$PSTAGING_ACTIVE" = "1" ]; then
 		# list the packages currently installed in staging
 		${PSTAGE_LIST_CMD} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-list         
 
@@ -169,22 +221,27 @@ staging_packager () {
 staging_packager () {
 
 	mkdir -p ${PSTAGE_TMPDIR_STAGE}/CONTROL
+	mkdir -p ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGPATH}
 
 	echo "Package: staging-${PN}"           >  ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
-	echo "Version: ${PV}-${PR}"             >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
+	echo "Version: ${PSTAGE_PKGVERSION}"    >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 	echo "Description: ${DESCRIPTION}"      >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 	echo "Section: ${SECTION}"              >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 	echo "Priority: Optional"               >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 	echo "Maintainer: ${MAINTAINER}"        >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
-	echo "Architecture: ${MULTIMACH_ARCH}"    >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
+	echo "Architecture: ${PSTAGE_PKGARCH}"  >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 	echo "Source: ${SRC_URI}"               >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
 
-        ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE}
-	${PSTAGE_INSTALL_CMD} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}
+        ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGPATH}
+	${PSTAGE_INSTALL_CMD} ${PSTAGE_PKG}
 }
 
+staging_package_installer () {
+	${PSTAGE_INSTALL_CMD} ${PSTAGE_PKG}
+}
+
 python do_package_stage () {
-    if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1":
+    if bb.data.getVar("PSTAGING_ACTIVE", d, 1) != "1":
         return
 
     bb.build.exec_func("read_subpack%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list