summaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics
diff options
context:2013-05-20 16:05:20 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-05-21 09:14:37 +0100
commitb508fdd2b19ca30da8d09caf646897dc4cf195c8 (patch)
treef52acaa870a95edfc14bb149b2ce77c4e85f8358 /meta/recipes-graphics
parent19b7e58b71d31071361f19fd82666d40653569c4 (diff)
downloadopenembedded-core-contrib-b508fdd2b19ca30da8d09caf646897dc4cf195c8.tar.gz
cogl: Replace with 1.14.0 version
The package has been renamed to cogl-1.0 instead of cogl-vmajor.vminor, keeping up with the upstream versioning policy (e.g., all 1.x packages install cogl-1.0 pc file and headers and are backward compatible), and to simplify dependency management (worth noting that since the 1.x development files are not parallel installable, it is not possible to use two versions of cogl 1.x at the same time anyway). Package configuration is provided via PACKAGECONFIG options as follows: GL flavour: 'gl' for big GL or 'gles2' for GLES2 (GLES1 is availabe in cogl, but not supporeted here at present.) EGL platform: 'egl-null' -- PVR-style null platform 'egl-kms' -- kms platform provide by Mesa 'egl-x11' -- egl over xlib platform (Additional EGL platforms, e.g., Wayland are supported by cogl, but not supported here at present.) GLX: 'glx' for the GLX extension support (implies 'gl') Default configuration is 'glx'; typical configuration providing 'native' egl on embedded HW would be 'gles2 egl-null'. Signed-off-by: Tomas Frydrych <tomas@sleepfive.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-graphics')
-rw-r--r--meta/recipes-graphics/clutter/cogl.inc22
-rw-r--r--meta/recipes-graphics/clutter/cogl/build_for_armv4t.patch23
-rw-r--r--meta/recipes-graphics/clutter/cogl/macro-versions.patch28
-rw-r--r--meta/recipes-graphics/clutter/cogl_1.8.2.bb12
-rw-r--r--meta/recipes-graphics/clutter/cogl_git.bb16
-rw-r--r--meta/recipes-graphics/cogl/cogl-1.0.inc58
-rw-r--r--meta/recipes-graphics/cogl/cogl-1.0_1.14.0.bb7
7 files changed, 65 insertions, 101 deletions
diff --git a/meta/recipes-graphics/clutter/cogl.inc b/meta/recipes-graphics/clutter/cogl.inc
deleted file mode 100644
index 26f7889ca4..0000000000
--- a/meta/recipes-graphics/clutter/cogl.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "a modern 3D graphics API with associated utility APIs"
-HOMEPAGE = "http://wiki.clutter-project.org/wiki/Cogl"
-LICENSE = "LGPLv2.1+"
-
-STDDEPENDS = "virtual/libx11 pango glib-2.0 libxfixes gdk-pixbuf libxi"
-BASE_CONF = "${@get_clutter_fpu_setting(bb, d)}"
-
-DEPENDS = "${STDDEPENDS} virtual/libgl libxcomposite libxdamage libdrm"
-EXTRA_OECONF = "${BASE_CONF} --with-flavour=glx"
-
-FILESPATH = "${FILE_DIRNAME}/cogl"
-
-inherit autotools pkgconfig gtk-doc gettext
-
-#check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points
-require clutter-fpu.inc
-
-#Fix up some weirdness in the docs
-do_configure_prepend() {
- sed -i s:doc/reference/Makefile::g ${S}/configure.ac
- sed -i s:doc::g ${S}/Makefile.am
-}
diff --git a/meta/recipes-graphics/clutter/cogl/build_for_armv4t.patch b/meta/recipes-graphics/clutter/cogl/build_for_armv4t.patch
deleted file mode 100644
index 003e9ff5fa..0000000000
--- a/meta/recipes-graphics/clutter/cogl/build_for_armv4t.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-GCC will define __ARM_ARCH_4T__ when building with "-march=armv4t" so we can
-check this to turn off the use of 'clz' instructions, which otherwise would
-cause compile errors like "selected processor does not support ARM mode
-`clz r3,r0'".
-
-Upstream-Status: Accepted (should be in the next cogl stable release)
-
-Signed-off-by: Wolfgang Denk <wd@denx.de>
-Signed-off-by: Joshua Lock <josh@linux.intel.com>
-
-Index: cogl-1.8.2/cogl/cogl-fixed.c
-===================================================================
---- cogl-1.8.2.orig/cogl/cogl-fixed.c
-+++ cogl-1.8.2/cogl/cogl-fixed.c
-@@ -626,7 +626,7 @@ cogl_fixed_sqrt (CoglFixed x)
- /*
- * Find the highest bit set
- */
--#if defined (__arm__)
-+#if defined (__arm__) && !defined(__ARM_ARCH_4T__)
- /* This actually requires at least arm v5, but gcc does not seem
- * to set the architecture defines correctly, and it is I think
- * very unlikely that anyone will want to use clutter on anything
diff --git a/meta/recipes-graphics/clutter/cogl/macro-versions.patch b/meta/recipes-graphics/clutter/cogl/macro-versions.patch
deleted file mode 100644
index 2dcdd8e800..0000000000
--- a/meta/recipes-graphics/clutter/cogl/macro-versions.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-Index: cogl-1.8.0/configure.ac
-===================================================================
---- cogl-1.8.0.orig/configure.ac
-+++ cogl-1.8.0/configure.ac
-@@ -833,7 +833,7 @@ LT_INIT([disable-static])
- dnl ================================================================
- dnl I18n stuff.
- dnl ================================================================
--AM_GNU_GETTEXT_VERSION([0.17])
-+AM_GNU_GETTEXT_VERSION([0.18])
- AM_GNU_GETTEXT([external])
-
- GETTEXT_PACKAGE="cogl"
-Index: cogl-1.8.0/po/Makefile.in.in
-===================================================================
---- cogl-1.8.0.orig/po/Makefile.in.in
-+++ cogl-1.8.0/po/Makefile.in.in
-@@ -9,7 +9,7 @@
- # General Public License and is *not* in the public domain.
- #
- # Origin: gettext-0.17
--GETTEXT_MACRO_VERSION = 0.17
-+GETTEXT_MACRO_VERSION = 0.18
-
- PACKAGE = @PACKAGE@
- VERSION = @VERSION@
diff --git a/meta/recipes-graphics/clutter/cogl_1.8.2.bb b/meta/recipes-graphics/clutter/cogl_1.8.2.bb
deleted file mode 100644
index fe4266b4a6..0000000000
--- a/meta/recipes-graphics/clutter/cogl_1.8.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require cogl.inc
-
-PR = "r3"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "http://source.clutter-project.org/sources/cogl/1.8/${BPN}-${PV}.tar.bz2 \
- file://macro-versions.patch \
- file://build_for_armv4t.patch"
-
-SRC_URI[md5sum] = "3145cbf7ff162c33065ea4421c047e2f"
-SRC_URI[sha256sum] = "8b647b51a4fa93034fcd74ffe86b3d4c919b0e54789108f6d065414e6162ab73"
diff --git a/meta/recipes-graphics/clutter/cogl_git.bb b/meta/recipes-graphics/clutter/cogl_git.bb
deleted file mode 100644
index 3fb70ae153..0000000000
--- a/meta/recipes-graphics/clutter/cogl_git.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require cogl.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-# the 1.8.2 tag
-SRCREV = "e398e374e2ff0e88bc1d63577a192f8ca04a1cb5"
-PV = "1.8.2+git${SRCPV}"
-PR = "r4"
-
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "git://git.gnome.org/cogl;protocol=git;branch=master \
- file://build_for_armv4t.patch"
-S = "${WORKDIR}/git"
-
-AUTOTOOLS_AUXDIR = "${S}/build"
diff --git a/meta/recipes-graphics/cogl/cogl-1.0.inc b/meta/recipes-graphics/cogl/cogl-1.0.inc
new file mode 100644
index 0000000000..17d8629eb9
--- /dev/null
+++ b/meta/recipes-graphics/cogl/cogl-1.0.inc
@@ -0,0 +1,58 @@
+DESCRIPTION = "a modern 3D graphics API with associated utility APIs"
+HOMEPAGE = "http://wiki.clutter-project.org/wiki/Cogl"
+LICENSE = "LGPLv2.1+"
+
+inherit clutter
+
+DEPENDS = "gtk-doc-native pango glib-2.0 gdk-pixbuf"
+PACKAGES =+ "${PN}-examples"
+AUTOTOOLS_AUXDIR = "${S}/build"
+
+# Extra DEPENDS for PACKAGECONFIG
+EDEPENDS_GL = "virtual/libgl libdrm"
+EDEPENDS_GLES2 = "virtual/libgles2"
+EDEPENDS_KMS = "libdrm virtual/egl"
+EDEPENDS_EGL = "virtual/egl"
+EDEPENDS_X11 = "virtual/libx11 libxcomposite libxfixes libxi"
+
+# Extra RDEPENDS for PACKAGECONFIG
+# This has to be explictly listed, because cogl dlopens the backends
+ERDEPENDS_GL = "libgl"
+ERDEPENDS_GLES2 = "libgles2"
+
+EXTRA_OECONF += "--disable-introspection \
+ --disable-gtk-doc \
+ ${@get_fpu_setting(bb, d)} \
+ --enable-examples-install \
+ --enable-debug \
+ --disable-gl \
+ --disable-gles1 \
+ --disable-gles2 \
+ --disable-glx \
+ "
+
+# GL flavours
+PACKAGECONFIG[gl] = "--enable-gl,,${EDEPENDS_GL},${ERDPENDS_GL}"
+PACKAGECONFIG[gles2] = "--enable-gles2,,${EDEPENDS_GLES2}, ${ERDEPENDS_GLES2}"
+
+# egl backends
+PACKAGECONFIG[egl-kms] = "--enable-kms-egl-platform,,${EDEPENDS_KMS}"
+PACKAGECONFIG[egl-null] = "--enable-null-egl-platform"
+PACKAGECONFIG[egl-x11] = "--enable-xlib-egl-platform,,${EDEPENDS_X11}"
+
+# glx
+PACKAGECONFIG[glx] = "--enable-gl --enable-glx, ${EDEPENDS_GL} ${EDEPENDS_X11}"
+
+# Default to GLX
+PACKAGECONFIG ??= "glx"
+
+#Fix up some weirdness in the docs
+do_configure_prepend() {
+ sed -i s:doc/reference/Makefile::g ${S}/configure.ac
+ sed -i s:doc::g ${S}/Makefile.am
+
+ # Disable DOLT
+ sed -i -e 's/^DOLT//' ${S}/configure.ac
+}
+
+FILES_${PN}-examples = "${bindir}/* ${datadir}/cogl/examples-data/*"
diff --git a/meta/recipes-graphics/cogl/cogl-1.0_1.14.0.bb b/meta/recipes-graphics/cogl/cogl-1.0_1.14.0.bb
new file mode 100644
index 0000000000..0f40c595ac
--- /dev/null
+++ b/meta/recipes-graphics/cogl/cogl-1.0_1.14.0.bb
@@ -0,0 +1,7 @@
+
+require cogl-1.0.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[archive.md5sum] = "7eabaf4241c0b87cc9e3b0fa23fd0315"
+SRC_URI[archive.sha256sum] = "276e8c9f5ff0fcd57c1eaf74cc245f41ad469a95a18ac831fac2d5960baa5ae8"
m': source_list = get_package(d) source_number = 0 workdir = d.getVar('WORKDIR', True) for source in source_list: # The rpmbuild doesn't need the root permission, but it needs # to know the file's user and group name, the only user and # group in fakeroot is "root" when working in fakeroot. os.chown("%s/%s" % (workdir, source), 0, 0) spec_preamble_top.append('Source' + str(source_number) + ': %s' % source) source_number += 1 # We need a simple way to remove the MLPREFIX from the package name, # and dependency information... def strip_multilib(name, d): multilibs = d.getVar('MULTILIBS', True) or "" for ext in multilibs.split(): eext = ext.split(':') if len(eext) > 1 and eext[0] == 'multilib' and name and name.find(eext[1] + '-') >= 0: name = "".join(name.split(eext[1] + '-')) return name def strip_multilib_deps(deps, d): depends = bb.utils.explode_dep_versions2(deps or "") newdeps = {} for dep in depends: newdeps[strip_multilib(dep, d)] = depends[dep] return bb.utils.join_deps(newdeps) # ml = d.getVar("MLPREFIX", True) # if ml and name and len(ml) != 0 and name.find(ml) == 0: # return ml.join(name.split(ml, 1)[1:]) # return name # In RPM, dependencies are of the format: pkg <>= Epoch:Version-Release # This format is similar to OE, however there are restrictions on the # characters that can be in a field. In the Version field, "-" # characters are not allowed. "-" is allowed in the Release field. # # We translate the "-" in the version to a "+", by loading the PKGV # from the dependent recipe, replacing the - with a +, and then using # that value to do a replace inside of this recipe's dependencies. # This preserves the "-" separator between the version and release, as # well as any "-" characters inside of the release field. # # All of this has to happen BEFORE the mapping_rename_hook as # after renaming we cannot look up the dependencies in the packagedata # store. def translate_vers(varname, d): depends = d.getVar(varname, True) if depends: depends_dict = bb.utils.explode_dep_versions2(depends) newdeps_dict = {} for dep in depends_dict: verlist = [] for ver in depends_dict[dep]: if '-' in ver: subd = oe.packagedata.read_subpkgdata_dict(dep, d) if 'PKGV' in subd: pv = subd['PV'] pkgv = subd['PKGV'] reppv = pkgv.replace('-', '+') verlist.append(ver.replace(pv, reppv)) else: verlist.append(ver) newdeps_dict[dep] = verlist depends = bb.utils.join_deps(newdeps_dict) d.setVar(varname, depends.strip()) # We need to change the style the dependency from BB to RPM # This needs to happen AFTER the mapping_rename_hook def print_deps(variable, tag, array, d): depends = variable if depends: depends_dict = bb.utils.explode_dep_versions2(depends) for dep in depends_dict: for ver in depends_dict[dep]: ver = ver.replace('(', '') ver = ver.replace(')', '') array.append("%s: %s %s" % (tag, dep, ver)) if not len(depends_dict[dep]): array.append("%s: %s" % (tag, dep)) def walk_files(walkpath, target, conffiles): for rootpath, dirs, files in os.walk(walkpath): path = rootpath.replace(walkpath, "") for dir in dirs: # All packages own the directories their files are in... target.append('%dir "' + path + '/' + dir + '"') for file in files: if conffiles.count(path + '/' + file): target.append('%config "' + path + '/' + file + '"') else: target.append('"' + path + '/' + file + '"') # Prevent the prerm/postrm scripts from being run during an upgrade def wrap_uninstall(scriptvar): scr = scriptvar.strip() if scr.startswith("#!"): pos = scr.find("\n") + 1 else: pos = 0 scr = scr[:pos] + 'if [ "$1" = "0" ] ; then\n' + scr[pos:] + '\nfi' return scr def get_perfile(varname, pkg, d): deps = [] dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg dependsflist = (d.getVar(dependsflist_key, True) or "") for dfile in dependsflist.split(): key = "FILE" + varname + "_" + dfile + "_" + pkg depends = d.getVar(key, True) if depends: deps.append(depends) return " ".join(deps) packages = d.getVar('PACKAGES', True) if not packages or packages == '': bb.debug(1, "No packages; nothing to do") return pkgdest = d.getVar('PKGDEST', True) if not pkgdest: bb.fatal("No PKGDEST") return outspecfile = d.getVar('OUTSPECFILE', True) if not outspecfile: bb.fatal("No OUTSPECFILE") return # Construct the SPEC file... srcname = strip_multilib(d.getVar('PN', True), d) srcsummary = (d.getVar('SUMMARY', True) or d.getVar('DESCRIPTION', True) or ".") srcversion = d.getVar('PKGV', True).replace('-', '+') srcrelease = d.getVar('PKGR', True) srcepoch = (d.getVar('PKGE', True) or "") srclicense = d.getVar('LICENSE', True) srcsection = d.getVar('SECTION', True) srcmaintainer = d.getVar('MAINTAINER', True) srchomepage = d.getVar('HOMEPAGE', True) srcdescription = d.getVar('DESCRIPTION', True) or "." srcdepends = strip_multilib_deps(d.getVar('DEPENDS', True), d) srcrdepends = [] srcrrecommends = [] srcrsuggests = [] srcrprovides = [] srcrreplaces = [] srcrconflicts = [] srcrobsoletes = [] srcrpreinst = [] srcrpostinst = [] srcrprerm = [] srcrpostrm = [] spec_preamble_top = [] spec_preamble_bottom = [] spec_scriptlets_top = [] spec_scriptlets_bottom = [] spec_files_top = [] spec_files_bottom = [] perfiledeps = (d.getVar("MERGEPERFILEDEPS", True) or "0") == "0" for pkg in packages.split(): localdata = bb.data.createCopy(d) root = "%s/%s" % (pkgdest, pkg) lf = bb.utils.lockfile(root + ".lock") localdata.setVar('ROOT', '') localdata.setVar('ROOT_%s' % pkg, root) pkgname = localdata.getVar('PKG_%s' % pkg, True) if not pkgname: pkgname = pkg localdata.setVar('PKG', pkgname) localdata.setVar('OVERRIDES', pkg) bb.data.update_data(localdata) conffiles = (localdata.getVar('CONFFILES', True) or "").split() splitname = strip_multilib(pkgname, d) splitsummary = (localdata.getVar('SUMMARY', True) or localdata.getVar('DESCRIPTION', True) or ".") splitversion = (localdata.getVar('PKGV', True) or "").replace('-', '+') splitrelease = (localdata.getVar('PKGR', True) or "") splitepoch = (localdata.getVar('PKGE', True) or "") splitlicense = (localdata.getVar('LICENSE', True) or "") splitsection = (localdata.getVar('SECTION', True) or "") splitdescription = (localdata.getVar('DESCRIPTION', True) or ".") translate_vers('RDEPENDS', localdata) translate_vers('RRECOMMENDS', localdata) translate_vers('RSUGGESTS', localdata) translate_vers('RPROVIDES', localdata) translate_vers('RREPLACES', localdata) translate_vers('RCONFLICTS', localdata) # Map the dependencies into their final form mapping_rename_hook(localdata) splitrdepends = strip_multilib_deps(localdata.getVar('RDEPENDS', True), d) splitrrecommends = strip_multilib_deps(localdata.getVar('RRECOMMENDS', True), d) splitrsuggests = strip_multilib_deps(localdata.getVar('RSUGGESTS', True), d) splitrprovides = strip_multilib_deps(localdata.getVar('RPROVIDES', True), d) splitrreplaces = strip_multilib_deps(localdata.getVar('RREPLACES', True), d) splitrconflicts = strip_multilib_deps(localdata.getVar('RCONFLICTS', True), d) splitrobsoletes = [] splitrpreinst = localdata.getVar('pkg_preinst', True) splitrpostinst = localdata.getVar('pkg_postinst', True) splitrprerm = localdata.getVar('pkg_prerm', True) splitrpostrm = localdata.getVar('pkg_postrm', True) if not perfiledeps: # Add in summary of per file dependencies splitrdepends = splitrdepends + " " + get_perfile('RDEPENDS', pkg, d) splitrprovides = splitrprovides + " " + get_perfile('RPROVIDES', pkg, d) # Gather special src/first package data if srcname == splitname: srcrdepends = splitrdepends srcrrecommends = splitrrecommends srcrsuggests = splitrsuggests srcrprovides = splitrprovides srcrreplaces = splitrreplaces srcrconflicts = splitrconflicts srcrpreinst = splitrpreinst srcrpostinst = splitrpostinst srcrprerm = splitrprerm srcrpostrm = splitrpostrm file_list = [] walk_files(root, file_list, conffiles) if not file_list and localdata.getVar('ALLOW_EMPTY') != "1": bb.note("Not creating empty RPM package for %s" % splitname) else: bb.note("Creating RPM package for %s" % splitname) spec_files_top.append('%files') spec_files_top.append('%defattr(-,-,-,-)') if file_list: bb.note("Creating RPM package for %s" % splitname) spec_files_top.extend(file_list) else: bb.note("Creating EMPTY RPM Package for %s" % splitname) spec_files_top.append('') bb.utils.unlockfile(lf) continue # Process subpackage data spec_preamble_bottom.append('%%package -n %s' % splitname) spec_preamble_bottom.append('Summary: %s' % splitsummary) if srcversion != splitversion: spec_preamble_bottom.append('Version: %s' % splitversion) if srcrelease != splitrelease: spec_preamble_bottom.append('Release: %s' % splitrelease) if srcepoch != splitepoch: spec_preamble_bottom.append('Epoch: %s' % splitepoch) if srclicense != splitlicense: spec_preamble_bottom.append('License: %s' % splitlicense) spec_preamble_bottom.append('Group: %s' % splitsection) # Replaces == Obsoletes && Provides robsoletes = bb.utils.explode_dep_versions2(splitrobsoletes or "") rprovides = bb.utils.explode_dep_versions2(splitrprovides or "") rreplaces = bb.utils.explode_dep_versions2(splitrreplaces or "") for dep in rreplaces: if not dep in robsoletes: robsoletes[dep] = rreplaces[dep] if not dep in rprovides: rprovides[dep] = rreplaces[dep] splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False) splitrprovides = bb.utils.join_deps(rprovides, commasep=False) print_deps(splitrdepends, "Requires", spec_preamble_bottom, d) if splitrpreinst: print_deps(splitrdepends, "Requires(pre)", spec_preamble_bottom, d) if splitrpostinst: print_deps(splitrdepends, "Requires(post)", spec_preamble_bottom, d) if splitrprerm: print_deps(splitrdepends, "Requires(preun)", spec_preamble_bottom, d) if splitrpostrm: print_deps(splitrdepends, "Requires(postun)", spec_preamble_bottom, d) # Suggests in RPM are like recommends in OE-core! print_deps(splitrrecommends, "Suggests", spec_preamble_bottom, d) # While there is no analog for suggests... (So call them recommends for now) print_deps(splitrsuggests, "Recommends", spec_preamble_bottom, d) print_deps(splitrprovides, "Provides", spec_preamble_bottom, d) print_deps(splitrobsoletes, "Obsoletes", spec_preamble_bottom, d) # conflicts can not be in a provide! We will need to filter it. if splitrconflicts: depends_dict = bb.utils.explode_dep_versions2(splitrconflicts) newdeps_dict = {} for dep in depends_dict: if dep not in splitrprovides: newdeps_dict[dep] = depends_dict[dep] if newdeps_dict: splitrconflicts = bb.utils.join_deps(newdeps_dict) else: splitrconflicts = "" print_deps(splitrconflicts, "Conflicts", spec_preamble_bottom, d) spec_preamble_bottom.append('') spec_preamble_bottom.append('%%description -n %s' % splitname) dedent_text = textwrap.dedent(splitdescription).strip() spec_preamble_bottom.append('%s' % textwrap.fill(dedent_text, width=75)) spec_preamble_bottom.append('') # Now process scriptlets if splitrpreinst: spec_scriptlets_bottom.append('%%pre -n %s' % splitname) spec_scriptlets_bottom.append('# %s - preinst' % splitname) spec_scriptlets_bottom.append(splitrpreinst) spec_scriptlets_bottom.append('') if splitrpostinst: spec_scriptlets_bottom.append('%%post -n %s' % splitname) spec_scriptlets_bottom.append('# %s - postinst' % splitname) spec_scriptlets_bottom.append(splitrpostinst) spec_scriptlets_bottom.append('') if splitrprerm: spec_scriptlets_bottom.append('%%preun -n %s' % splitname) spec_scriptlets_bottom.append('# %s - prerm' % splitname) scriptvar = wrap_uninstall(splitrprerm) spec_scriptlets_bottom.append(scriptvar) spec_scriptlets_bottom.append('') if splitrpostrm: spec_scriptlets_bottom.append('%%postun -n %s' % splitname) spec_scriptlets_bottom.append('# %s - postrm' % splitname) scriptvar = wrap_uninstall(splitrpostrm) spec_scriptlets_bottom.append(scriptvar) spec_scriptlets_bottom.append('') # Now process files file_list = [] walk_files(root, file_list, conffiles) if not file_list and localdata.getVar('ALLOW_EMPTY') != "1": bb.note("Not creating empty RPM package for %s" % splitname) else: spec_files_bottom.append('%%files -n %s' % splitname) spec_files_bottom.append('%defattr(-,-,-,-)') if file_list: bb.note("Creating RPM package for %s" % splitname) spec_files_bottom.extend(file_list) else: bb.note("Creating EMPTY RPM Package for %s" % splitname) spec_files_bottom.append('') del localdata bb.utils.unlockfile(lf) add_prep(d,spec_files_bottom) spec_preamble_top.append('Summary: %s' % srcsummary) spec_preamble_top.append('Name: %s' % srcname) spec_preamble_top.append('Version: %s' % srcversion) spec_preamble_top.append('Release: %s' % srcrelease) if srcepoch and srcepoch.strip() != "": spec_preamble_top.append('Epoch: %s' % srcepoch) spec_preamble_top.append('License: %s' % srclicense) spec_preamble_top.append('Group: %s' % srcsection) spec_preamble_top.append('Packager: %s' % srcmaintainer) spec_preamble_top.append('URL: %s' % srchomepage) tail_source(d) # Replaces == Obsoletes && Provides robsoletes = bb.utils.explode_dep_versions2(srcrobsoletes or "") rprovides = bb.utils.explode_dep_versions2(srcrprovides or "") rreplaces = bb.utils.explode_dep_versions2(srcrreplaces or "") for dep in rreplaces: if not dep in robsoletes: robsoletes[dep] = rreplaces[dep] if not dep in rprovides: rprovides[dep] = rreplaces[dep] srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False) srcrprovides = bb.utils.join_deps(rprovides, commasep=False) print_deps(srcdepends, "BuildRequires", spec_preamble_top, d) print_deps(srcrdepends, "Requires", spec_preamble_top, d) if srcrpreinst: print_deps(srcrdepends, "Requires(pre)", spec_preamble_top, d) if srcrpostinst: print_deps(srcrdepends, "Requires(post)", spec_preamble_top, d) if srcrprerm: print_deps(srcrdepends, "Requires(preun)", spec_preamble_top, d) if srcrpostrm: print_deps(srcrdepends, "Requires(postun)", spec_preamble_top, d) # Suggests in RPM are like recommends in OE-core! print_deps(srcrrecommends, "Suggests", spec_preamble_top, d) # While there is no analog for suggests... (So call them recommends for now) print_deps(srcrsuggests, "Recommends", spec_preamble_top, d) print_deps(srcrprovides, "Provides", spec_preamble_top, d) print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d) # conflicts can not be in a provide! We will need to filter it. if srcrconflicts: depends_dict = bb.utils.explode_dep_versions2(srcrconflicts) newdeps_dict = {} for dep in depends_dict: if dep not in srcrprovides: newdeps_dict[dep] = depends_dict[dep] if newdeps_dict: srcrconflicts = bb.utils.join_deps(newdeps_dict) else: srcrconflicts = "" print_deps(srcrconflicts, "Conflicts", spec_preamble_top, d) spec_preamble_top.append('') spec_preamble_top.append('%description') dedent_text = textwrap.dedent(srcdescription).strip() spec_preamble_top.append('%s' % textwrap.fill(dedent_text, width=75)) spec_preamble_top.append('') if srcrpreinst: spec_scriptlets_top.append('%pre') spec_scriptlets_top.append('# %s - preinst' % srcname) spec_scriptlets_top.append(srcrpreinst) spec_scriptlets_top.append('') if srcrpostinst: spec_scriptlets_top.append('%post') spec_scriptlets_top.append('# %s - postinst' % srcname) spec_scriptlets_top.append(srcrpostinst) spec_scriptlets_top.append('') if srcrprerm: spec_scriptlets_top.append('%preun') spec_scriptlets_top.append('# %s - prerm' % srcname) scriptvar = wrap_uninstall(srcrprerm) spec_scriptlets_top.append(scriptvar) spec_scriptlets_top.append('') if srcrpostrm: spec_scriptlets_top.append('%postun') spec_scriptlets_top.append('# %s - postrm' % srcname) scriptvar = wrap_uninstall(srcrpostrm) spec_scriptlets_top.append(scriptvar) spec_scriptlets_top.append('') # Write the SPEC file try: from __builtin__ import file specfile = file(outspecfile, 'w') except OSError: raise bb.build.FuncFailed("unable to open spec file for writing.") # RPMSPEC_PREAMBLE is a way to add arbitrary text to the top # of the generated spec file external_preamble = d.getVar("RPMSPEC_PREAMBLE", True) if external_preamble: specfile.write(external_preamble + "\n") for line in spec_preamble_top: specfile.write(line + "\n") for line in spec_preamble_bottom: specfile.write(line + "\n") for line in spec_scriptlets_top: specfile.write(line + "\n") for line in spec_scriptlets_bottom: specfile.write(line + "\n") for line in spec_files_top: specfile.write(line + "\n") for line in spec_files_bottom: specfile.write(line + "\n") specfile.close() } python do_package_rpm () { def creat_srpm_dir(d): if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) == 'srpm': clean_licenses = get_licenses(d) pkgwritesrpmdir = bb.data.expand('${PKGWRITEDIRSRPM}/${PACKAGE_ARCH_EXTEND}', d) pkgwritesrpmdir = pkgwritesrpmdir + '/' + clean_licenses bb.mkdirhier(pkgwritesrpmdir) os.chmod(pkgwritesrpmdir, 0755) return pkgwritesrpmdir # We need a simple way to remove the MLPREFIX from the package name, # and dependency information... def strip_multilib(name, d): ml = d.getVar("MLPREFIX", True) if ml and name and len(ml) != 0 and name.find(ml) >= 0: return "".join(name.split(ml)) return name workdir = d.getVar('WORKDIR', True) outdir = d.getVar('DEPLOY_DIR_IPK', True) tmpdir = d.getVar('TMPDIR', True) pkgd = d.getVar('PKGD', True) pkgdest = d.getVar('PKGDEST', True) if not workdir or not outdir or not pkgd or not tmpdir: bb.error("Variables incorrectly set, unable to package") return packages = d.getVar('PACKAGES', True) if not packages or packages == '': bb.debug(1, "No packages; nothing to do") return # Construct the spec file... srcname = strip_multilib(d.getVar('PN', True), d) outspecfile = workdir + "/" + srcname + ".spec" d.setVar('OUTSPECFILE', outspecfile) bb.build.exec_func('write_specfile', d) perfiledeps = (d.getVar("MERGEPERFILEDEPS", True) or "0") == "0" if perfiledeps: outdepends, outprovides = write_rpm_perfiledata(srcname, d) # Setup the rpmbuild arguments... rpmbuild = d.getVar('RPMBUILD', True) targetsys = d.getVar('TARGET_SYS', True) targetvendor = d.getVar('TARGET_VENDOR', True) package_arch = (d.getVar('PACKAGE_ARCH', True) or "").replace("-", "_") if package_arch not in "all any noarch".split() and not package_arch.endswith("_nativesdk"): ml_prefix = (d.getVar('MLPREFIX', True) or "").replace("-", "_") d.setVar('PACKAGE_ARCH_EXTEND', ml_prefix + package_arch) else: d.setVar('PACKAGE_ARCH_EXTEND', package_arch) pkgwritedir = d.expand('${PKGWRITEDIRRPM}/${PACKAGE_ARCH_EXTEND}') pkgarch = d.expand('${PACKAGE_ARCH_EXTEND}${TARGET_VENDOR}-${TARGET_OS}') magicfile = d.expand('${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc') bb.mkdirhier(pkgwritedir) os.chmod(pkgwritedir, 0755) cmd = rpmbuild cmd = cmd + " --nodeps --short-circuit --target " + pkgarch + " --buildroot " + pkgd cmd = cmd + " --define '_topdir " + workdir + "' --define '_rpmdir " + pkgwritedir + "'" cmd = cmd + " --define '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'" cmd = cmd + " --define '_use_internal_dependency_generator 0'" if perfiledeps: cmd = cmd + " --define '__find_requires " + outdepends + "'" cmd = cmd + " --define '__find_provides " + outprovides + "'" else: cmd = cmd + " --define '__find_requires %{nil}'" cmd = cmd + " --define '__find_provides %{nil}'" cmd = cmd + " --define '_unpackaged_files_terminate_build 0'" cmd = cmd + " --define 'debug_package %{nil}'" cmd = cmd + " --define '_rpmfc_magic_path " + magicfile + "'" cmd = cmd + " --define '_tmppath " + workdir + "'" if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) == 'srpm': cmd = cmd + " --define '_sourcedir " + workdir + "'" cmdsrpm = cmd + " --define '_srcrpmdir " + creat_srpm_dir(d) + "'" cmdsrpm = cmdsrpm + " -bs " + outspecfile # Build the .src.rpm d.setVar('SBUILDSPEC', cmdsrpm + "\n") d.setVarFlag('SBUILDSPEC', 'func', '1') bb.build.exec_func('SBUILDSPEC', d) # Remove the source (SOURCE0, SOURCE1 ...) cmd = cmd + " --rmsource " cmd = cmd + " -bb " + outspecfile # Build the rpm package! d.setVar('BUILDSPEC', cmd + "\n") d.setVarFlag('BUILDSPEC', 'func', '1') bb.build.exec_func('BUILDSPEC', d) } python () { if d.getVar('PACKAGES', True) != '': deps = ' rpm-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot' d.appendVarFlag('do_package_write_rpm', 'depends', deps) d.setVarFlag('do_package_write_rpm', 'fakeroot', 1) d.setVarFlag('do_package_write_rpm_setscene', 'fakeroot', 1) } SSTATETASKS += "do_package_write_rpm" do_package_write_rpm[sstate-name] = "deploy-rpm" do_package_write_rpm[sstate-inputdirs] = "${PKGWRITEDIRRPM}" do_package_write_rpm[sstate-outputdirs] = "${DEPLOY_DIR_RPM}" # Take a shared lock, we can write multiple packages at the same time... # but we need to stop the rootfs/solver from running while we do... do_package_write_rpm[sstate-lockfile-shared] += "${DEPLOY_DIR_RPM}/rpm.lock" python do_package_write_rpm_setscene () { sstate_setscene(d) } addtask do_package_write_rpm_setscene python do_package_write_rpm () { bb.build.exec_func("read_subpackage_metadata", d) bb.build.exec_func("do_package_rpm", d) } do_package_write_rpm[dirs] = "${PKGWRITEDIRRPM}" do_package_write_rpm[cleandirs] = "${PKGWRITEDIRRPM}" do_package_write_rpm[umask] = "022" addtask package_write_rpm before do_package_write after do_packagedata do_package PACKAGEINDEXES += "[ ! -e ${DEPLOY_DIR_RPM} ] || package_update_index_rpm;" PACKAGEINDEXDEPS += "rpm-native:do_populate_sysroot" PACKAGEINDEXDEPS += "createrepo-native:do_populate_sysroot"