From 31abc4f83484990470e1fedfecd9d3a2ea9cf3dc Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 10 Mar 2009 11:00:09 -0700 Subject: autotools.bbclass: Add new pattern to match -L in dependency_libs * Current pattern match does one think wrong consider something like this dependency_libs=' -L/home/kraj/work/oe/build/eglibc/omap5912osk/work/x86_64-linux/ncurses-native-5.4-r17/ncurses-5.4/lib' this pattern when matched gets converted to dependency_libs=' -L/home/kraj/work/oe/build/eglibc/omap5912osk/staging/x86_64-linux/usr/lib/lib' which is wrong. If we had a '/' appended to original path then it would work. This patch lets it straight. --- classes/autotools.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') 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 -- cgit v1.2.3 From 551eb3b528ec9ef726f84b91fe822b7c0bc7fb32 Mon Sep 17 00:00:00 2001 From: Michael 'Mickey' Lauer Date: Mon, 16 Mar 2009 21:41:12 +0100 Subject: fso-plugin.bbclass: new class for fso plugin packaging vala.bbclass: new class for vala-based packages --- classes/fso-plugin.bbclass | 4 ++++ classes/vala.bbclass | 3 +++ 2 files changed, 7 insertions(+) create mode 100644 classes/fso-plugin.bbclass create mode 100644 classes/vala.bbclass (limited to 'classes') 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/vala.bbclass b/classes/vala.bbclass new file mode 100644 index 0000000000..bcd906aeb9 --- /dev/null +++ b/classes/vala.bbclass @@ -0,0 +1,3 @@ +DEPENDS += "vala-native" + +FILES_${PN}-dev += "${datadir}/vala/vapi/*.vapi" -- cgit v1.2.3 From 15ab93ce03c583922eb91aafbac2d077f7bf458f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Tue, 17 Mar 2009 14:57:25 +0100 Subject: qtopia-core: drop obsolete package * remove qtopia-core package, superseeded by qt-embedded * remove qtopia4core class, superseed by qt4e Acked-By: Mickey Lauer --- classes/qtopia4core.bbclass | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 classes/qtopia4core.bbclass (limited to 'classes') 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 " -- cgit v1.2.3 From 01a393838b0e87cde07a81068965064e858c9155 Mon Sep 17 00:00:00 2001 From: Denys Dmytriyenko Date: Mon, 16 Mar 2009 18:36:22 -0400 Subject: base.bbclass: fix base_get_scmbasepath() to look for recipes/ and fall back to packages/ while parsing BBFILES Signed-off-by: Denys Dmytriyenko Acked-by: Mike Westerhof Acked-by: Philip Balister Acked-by: Khem Raj Acked-by: Marcin Juszkiewicz Acked-by: Koen Kooi Acked-by: Frans Meulenbroeks --- classes/base.bbclass | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 18afc1a2fe..0848870803 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -773,7 +773,13 @@ python base_do_unpack() { 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" )] + + try: + index = path_to_bbfiles[0].rindex( "recipes" ) + except ValueError: + index = path_to_bbfiles[0].rindex( "packages" ) + + return path_to_bbfiles[0][:index] def base_get_metadata_monotone_branch(d): monotone_branch = "" -- cgit v1.2.3 From 5089082042e867cb6e660687bf55d7cef176b793 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Aug 2008 08:01:41 +0000 Subject: Drop pointless rpm_core class. (from Poky) --- classes/rpm_core.bbclass | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 classes/rpm_core.bbclass (limited to 'classes') diff --git a/classes/rpm_core.bbclass b/classes/rpm_core.bbclass deleted file mode 100644 index f28abbb1c3..0000000000 --- a/classes/rpm_core.bbclass +++ /dev/null @@ -1,16 +0,0 @@ -RPMBUILDPATH="${WORKDIR}/rpm" - -RPMOPTS="--rcfile=${WORKDIR}/rpmrc" -RPMOPTS="--rcfile=${WORKDIR}/rpmrc --target ${TARGET_SYS}" -RPM="rpm ${RPMOPTS}" -RPMBUILD="rpmbuild --buildroot ${D} --short-circuit ${RPMOPTS}" - -rpm_core_do_preprpm() { - mkdir -p ${RPMBUILDPATH}/{SPECS,RPMS/{i386,i586,i686,noarch,ppc,mips,mipsel,arm},SRPMS,SOURCES,BUILD} - echo 'macrofiles:/usr/lib/rpm/macros:${WORKDIR}/macros' > ${WORKDIR}/rpmrc - echo '%_topdir ${RPMBUILDPATH}' > ${WORKDIR}/macros - echo '%_repackage_dir ${WORKDIR}' >> ${WORKDIR}/macros -} - -EXPORT_FUNCTIONS do_preprpm -addtask preprpm before do_fetch -- cgit v1.2.3 From 3166def12852386f1b4fec51140b574909d04dab Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 25 Aug 2008 20:53:13 +0000 Subject: rootfs_rpm.bbclass: added from Poky Squashed changes from Poky: svn r5101 - Add rootfs_rpm.bbclass, a start at image generation from rpms. Its not expected to be entirely functional yet. svn r5112 - rootfs_rpm.bbclass: Remove the feed directory before packaging the image svn r5134 - rootfs_rpm.bbclass: Add basic postinstall handling during image creation svn r5143 - rootfs_rpm.bbclass: Fixup broken symlinks due to fakechroot and run any leftover postinstalls on real hardware at first boot svn r5158 - rootfs_rpm.bbclass: Add recommends handling svn r5380 - rootfs_rpm.bbclass: ship rpm and yum in target images svn r5382 - rootfs_rpm.bbclass: Add rpm package coverage svn r5386 - rootfs_rpm.bbclass: use more efficient way to copy packages svn r5391 - rootfs_rpm: set target architecture and do not tell yum which arch we will use svn r5398 - rootfs_rpm.bbclass: Set YUM_ARCH_FORCE svn r5412 - rootfs_rpm.bbclass: remove lock files to get rpm working on device svn r5432 - rootfs_rpm.bbclass: fix platform so rpm will be usable on device svn r5433 - rootfs_rpm.bbclass: remove temporary yum config - rootfs has one from yum package svn r5434 - rootfs_rpm.bbclass: added generation of feed entries svn r5436 - rootfs_rpm.bbclass: added code to generate images from feeds OE changes: rootfs_rpm.bbclass: remove two functions (need rewrite for RPM) install_all_locales and remove_packaging_data_files functions were from rootfs_ipk.bbclass and need to be rewritten for RPM rootfs. rootfs_rpm.bbclass: use DISTRO instead of hardcoded Poky - spotted by Tom Rini rootfs_rpm.bbclass: drop not needed disabled code --- classes/rootfs_rpm.bbclass | 210 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 classes/rootfs_rpm.bbclass (limited to 'classes') 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 leading and trailing spaces/tabs, then split into name and uri + line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`" + feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`" + feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`" + + echo "Added $feed_name feed with URL $feed_uri" + + FEED_FILE=${IMAGE_ROOTFS}/etc/yum/repos.d/$feed_name + + echo "[${DISTRO}-feed-$feed_name]" >> $FEED_FILE + echo "name = $feed_name" >> $FEED_FILE + echo "baseurl = $feed_uri" >> $FEED_FILE + echo "gpgcheck = 0" >> $FEED_FILE + done +} + +fakeroot rootfs_rpm_do_rootfs () { + set -x + + ${RPM_PREPROCESS_COMMANDS} + + mkdir -p ${IMAGE_ROOTFS}/etc/rpm/ + echo "${TARGET_ARCH}-linux" >${IMAGE_ROOTFS}/etc/rpm/platform + + # Generate an apprpriate yum.conf + rm -rf ${YUMCONF} + cat > ${YUMCONF} << EOF +[main] +cachedir=/var/cache2/yum +keepcache=1 +debuglevel=10 +logfile=/var/log2/yum.log +exactarch=0 +obsoletes=1 +tolerant=1 + +EOF + + #priority=1 + mkdir -p ${IMAGE_ROOTFS}${DEPLOY_DIR_RPM} + + for arch in ${PACKAGE_ARCHS}; do + if [ ! -d ${DEPLOY_DIR_RPM}/$arch ]; then + continue; + fi + createrepo ${DEPLOY_DIR_RPM}/$arch + + echo "[${DISTRO}-feed-$arch]" >> ${YUMCONF} + echo "name = ${DISTRO} RPM $arch Feed" >> ${YUMCONF} + echo "baseurl=file://${DEPLOY_DIR_RPM}/$arch" >> ${YUMCONF} + echo "gpgcheck=0" >> ${YUMCONF} + echo "" >> ${YUMCONF} + #priority=$(expr $priority + 5) + + # Copy the packages into the target image + # Ugly ugly ugly but rpm is braindead and can't see outside the chroot + # when installing :( + cp -r ${DEPLOY_DIR_RPM}/$arch ${IMAGE_ROOTFS}${DEPLOY_DIR_RPM}/ + done + + # Uclibc builds don't provide this stuff... + if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then + if [ ! -z "${LINGUAS_INSTALL}" ]; then + for i in ${LINGUAS_INSTALL}; do + fakechroot yum ${YUMARGS} -y install $i + done + fi + fi + if [ ! -z "${PACKAGE_INSTALL}" ]; then + fakechroot yum ${YUMARGS} -y install ${PACKAGE_INSTALL} + fi + + # Add any recommended packages to the image + # (added as an extra script since yum itself doesn't support this) + yum-install-recommends.py ${IMAGE_ROOTFS} "fakechroot yum ${YUMARGS} -y install" + + # Symlinks created under fakeroot are wrong, now we have to fix them... + cd ${IMAGE_ROOTFS} + for f in `find . -type l -print` + do + link=`readlink $f | sed -e 's#${IMAGE_ROOTFS}##'` + rm $f + ln -s $link $f + done + + export D=${IMAGE_ROOTFS} + export OFFLINE_ROOT=${IMAGE_ROOTFS} + export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} + export OPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} + + ${ROOTFS_POSTINSTALL_COMMAND} + + mkdir -p ${IMAGE_ROOTFS}/etc/rpm-postinsts/ + rpm --root ${IMAGE_ROOTFS} -aq --queryformat 'Name: %{NAME}\n' --scripts > ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined + awk -f ${AWKPOSTINSTSCRIPT} < ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined + rm ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined + + for i in ${IMAGE_ROOTFS}/etc/rpm-postinsts/*.sh; do + if [ -f $i ] && sh $i; then + # rm $i + mv $i $i.done + fi + done + + install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d + # Stop $i getting expanded below... + i=\$i + cat > ${IMAGE_ROOTFS}${sysconfdir}/rcS.d/S98configure << EOF +#!/bin/sh +for i in /etc/rpm-postinsts/*.sh; do + echo "Running postinst $i..." + if [ -f $i ] && sh $i; then + # rm $i + mv $i $i.done + else + echo "ERROR: postinst $i failed." + fi +done +rm -f ${sysconfdir}/rcS.d/S98configure +EOF + chmod 0755 ${IMAGE_ROOTFS}${sysconfdir}/rcS.d/S98configure + + install -d ${IMAGE_ROOTFS}/${sysconfdir} + echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version + + ${RPM_POSTPROCESS_COMMANDS} + ${ROOTFS_POSTPROCESS_COMMAND} + + rm -rf ${IMAGE_ROOTFS}/var/cache2/ + rm -rf ${IMAGE_ROOTFS}/var/run2/ + rm -rf ${IMAGE_ROOTFS}/var/log2/ + rm -rf ${IMAGE_ROOTFS}${DEPLOY_DIR_RPM}/ + + # remove lock files + rm -f ${IMAGE_ROOTFS}/var/lib/rpm/__db.* + + # remove no longer used yum.conf + rm -f ${IMAGE_ROOTFS}/etc/yum.conf + + log_check rootfs +} + +rootfs_rpm_log_check() { + target="$1" + lf_path="$2" + + lf_txt="`cat $lf_path`" + for keyword_die in "Cannot find package" "exit 1" ERR Fail + do + if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1 + then + echo "log_check: There were error messages in the logfile" + echo -e "log_check: Matched keyword: [$keyword_die]\n" + echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die" + echo "" + do_exit=1 + fi + done + test "$do_exit" = 1 && exit + true +} + +remove_packaging_data_files() { +# empty for now + : +} + +install_all_locales() { +# empty for now + : +} + +python () { + import bb + if bb.data.getVar('BUILD_IMAGES_FROM_FEEDS', d, True): + flags = bb.data.getVarFlag('do_rootfs', 'recrdeptask', d) + flags = flags.replace("do_package_write_rpm", "") + flags = flags.replace("do_deploy", "") + flags = flags.replace("do_populate_staging", "") + bb.data.setVarFlag('do_rootfs', 'recrdeptask', flags, d) + bb.data.setVar('RPM_PREPROCESS_COMMANDS', "rpm_insert_feed_uris", d) + bb.data.setVar('RPM_POSTPROCESS_COMMANDS', '', d) +} -- cgit v1.2.3 From 69ac369a10e51f6f2d59e4e1da86d99f64285f71 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Aug 2008 08:01:41 +0000 Subject: package_rpm.bbclass: added from Poky Squashed changes from Poky: svn r5067 - package_rpm.bbclass: Update against recent packaging changes and start to implement dependency handling. svn r5100 - package_rpm.bbclass: Fix empty package handling, handle package dependency renaming by adding a missing function call and expand RPMBUILD before changing the dictonary so local PV/PR changes don't break the WORKDIR variable expansion svn r5111 - package_rpm.bbclass: Stop autogenerated dependencies for now, its not functioning correctly svn r5116 - package_rpm.bbclass: files needs to start from / svn r5129 - package_rpm.bbclass: Fix problems with package version with '-' in the version (replace with '+'), improve the Requires and Recommends generation code svn r5131 - package_rpm.bbclass: Add support for postinst and preinst scripts svn r5381 - classes: Split rpm feeds by PACKAGE_ARCH svn r5390 - package_rpm.bbclass: Improve handling of '-' characters in Requires and Recommends fields svn r5393 - package_rpm.bbclass: Fix package version fixing for PKG renamed packages svn r5397 - package_rpm.bbclass: Fix dependency rebuilding bug svn r5413 - package_rpm.bbclass: save value of RPMBUILDPATH as it is needed for packaging package_rpm.bbclass: Don't use the system wide RPM macros. This fixes the build on Fedora 10 where the RPM system macros obliterate the value of BuildRoot that is set in the spec file. package_rpm.bbclass: fix indentation package_rpm.bbclass: fix syntax errors package_rpm.bbclass: save RPROVIDES in packages --- classes/package_rpm.bbclass | 140 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 109 insertions(+), 31 deletions(-) (limited to 'classes') diff --git a/classes/package_rpm.bbclass b/classes/package_rpm.bbclass index f0055a1e63..7f55e384fe 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,15 +68,56 @@ 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: @@ -74,61 +127,85 @@ python write_specfile() { # 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 +220,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 -- cgit v1.2.3 From e3105234f8840679197b171b51203ad6c90349b3 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 2 Oct 2008 15:22:10 +0000 Subject: packaged-staging.bbclass: Add rpm package coverage (from Poky) git-svn-id: https://svn.o-hand.com/repos/poky@5382 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- classes/packaged-staging.bbclass | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'classes') 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 # -- cgit v1.2.3 From 634c76d02e5796f5e908b6d6a79dcfef6f8af3d1 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 2 Oct 2008 19:56:43 +0000 Subject: base.bbclass: Add read_subpkgdata_dict function (from Poky) git-svn-id: https://svn.o-hand.com/repos/poky@5389 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- classes/base.bbclass | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 0848870803..f1fee83a14 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1067,6 +1067,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" -- cgit v1.2.3 From 1af5030de05a1e65d1de734f7675ffc22c8318fc Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 2 Oct 2008 19:56:19 +0000 Subject: package.bbclass: Write out extra useful data into the pkgdata files (from Poky) git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5388 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- classes/package.bbclass | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'classes') 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') -- cgit v1.2.3