Add a new bbclass that allows building a feed using the
new oe.package_manager class. Additionally, there are
packagefeed_<type> bbclasses to define package type
specific configurations.

The do_packagefeed task currently does no use SSTATE
data and is set to always run via [nostamp] = "1".

The variable FEED_DEPENDS is used to specify feeds that
the packagefeed depends on and will be available
side-by-side. This prevents duplicate packages in the
two feeds.

Signed-off-by: Charlie Johnston <charlie.johns...@ni.com>
---
 meta/classes-recipe/packagefeed.bbclass     | 50 +++++++++++++++++++++
 meta/classes-recipe/packagefeed_deb.bbclass |  8 ++++
 meta/classes-recipe/packagefeed_ipk.bbclass |  8 ++++
 meta/classes-recipe/packagefeed_rpm.bbclass |  8 ++++
 4 files changed, 74 insertions(+)
 create mode 100644 meta/classes-recipe/packagefeed.bbclass
 create mode 100644 meta/classes-recipe/packagefeed_deb.bbclass
 create mode 100644 meta/classes-recipe/packagefeed_ipk.bbclass
 create mode 100644 meta/classes-recipe/packagefeed_rpm.bbclass

diff --git a/meta/classes-recipe/packagefeed.bbclass 
b/meta/classes-recipe/packagefeed.bbclass
new file mode 100644
index 00000000000..de075294645
--- /dev/null
+++ b/meta/classes-recipe/packagefeed.bbclass
@@ -0,0 +1,50 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Class for creating package feeds with indexes for a group of packages and 
their
+# dependencies. 
+#
+# When deploying a package feed or repo for an image such that deployed images 
can
+# use them, it's not always desireable to include all packages in the default 
+# DEPLOY_DIR_<PKG_TYPE> directory in the feed. This class allows specifying 
one or
+# more packages (or packagegroups) to define what should be included in a feed 
and
+# creates a feed in DEPLOY_DIR_FEED with only those packages and dependencies.
+# This allows for creating one or more feeds at once and removes the need to
+# remove unwanted packages manually before an index is created.
+#
+# Example:
+#  inherit packagefeed
+#
+#  RDEPENDS:${PN} += "\
+#    packagegroup-core-buildessential \
+#  "
+#
+# Optional variables:
+#  FEED_DEPENDS:
+#    Specifies one or more feeds that the feed depends on and excludes 
packages in
+#    those feeds from the feed being built. Used if a feed depends on packages 
in
+#    the feeds listed and it's safe to assume those feeds will always be 
present.
+
+PKGFEED_INHERITS = "${@' '.join(['packagefeed_' + x for x in 
d.getVar('PACKAGE_CLASSES').replace("package_", "").split()])}"
+inherit ${PKGFEED_INHERITS} nopackages
+
+LICENSE ?= "MIT"
+
+# Feeds listed in FEED_DEPENDS and their dependencies will be excluded from 
the feed.
+# This allows for side-by-side feeds without duplicate packages.
+FEED_DEPENDS ??= ""
+
+fakeroot python do_packagefeed() {
+    from oe.package_manager import generate_feed_dirs, generate_index_files
+
+    generate_feed_dirs(d, d.getVar("FEED_DEPENDS"))
+    generate_index_files(d, isFeed=True)
+}
+addtask packagefeed before do_build
+do_packagefeed[recrdeptask] += "do_package_qa"
+do_packagefeed[nostamp] = "1"
+do_packagefeed[rdepends] += "${@' '.join([x + ':do_packagefeed' for x in 
d.getVar('FEED_DEPENDS').split()])}"
+do_packagefeed[cleandirs] += "${DEPLOY_DIR_FEED_DEB}/${PN} 
${DEPLOY_DIR_FEED_IPK}/${PN} ${DEPLOY_DIR_FEED_RPM}/${PN}"
diff --git a/meta/classes-recipe/packagefeed_deb.bbclass 
b/meta/classes-recipe/packagefeed_deb.bbclass
new file mode 100644
index 00000000000..2decc70a4f7
--- /dev/null
+++ b/meta/classes-recipe/packagefeed_deb.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "apt-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_deb"
diff --git a/meta/classes-recipe/packagefeed_ipk.bbclass 
b/meta/classes-recipe/packagefeed_ipk.bbclass
new file mode 100644
index 00000000000..89d296200b9
--- /dev/null
+++ b/meta/classes-recipe/packagefeed_ipk.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "opkg-native:do_populate_sysroot 
opkg-utils-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_ipk"
diff --git a/meta/classes-recipe/packagefeed_rpm.bbclass 
b/meta/classes-recipe/packagefeed_rpm.bbclass
new file mode 100644
index 00000000000..8ce37cc8551
--- /dev/null
+++ b/meta/classes-recipe/packagefeed_rpm.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "createrepo-c-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_rpm"
-- 
2.41.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#186388): 
https://lists.openembedded.org/g/openembedded-core/message/186388
Mute This Topic: https://lists.openembedded.org/mt/100825507/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to