Patchwork [1/4] Add a new distro feature "ptest".

login
register
mail settings
Submitter Björn Stenberg
Date Nov. 22, 2012, 4:01 p.m.
Message ID <1353600120-22967-2-git-send-email-bjst@enea.com>
Download mbox | patch
Permalink /patch/39479/
State New
Headers show

Comments

Björn Stenberg - Nov. 22, 2012, 4:01 p.m.
This patch creates a new distro feature "ptest", which creates -ptest
packages containing the test suite of the package for running on the
target. Test files are installed in /usr/lib/<pkg>/ptest.

The patch also includes a change to automake, splitting the "make check"
target into separate steps for building and running the tests.

Signed-off-by: Björn Stenberg <bjst@enea.com>
---
 meta/classes/image.bbclass                         |    6 ++-
 meta/classes/packagegroup.bbclass                  |    2 +-
 meta/conf/bitbake.conf                             |   15 ++++++++-
 .../automake/automake/buildtest.patch              |   33 ++++++++++++++++++++
 meta/recipes-devtools/automake/automake_1.12.3.bb  |    3 +-
 5 files changed, 54 insertions(+), 5 deletions(-)
 create mode 100644 meta/recipes-devtools/automake/automake/buildtest.patch
Richard Purdie - Nov. 23, 2012, 9:49 p.m.
On Thu, 2012-11-22 at 17:01 +0100, Björn Stenberg wrote:
> This patch creates a new distro feature "ptest", which creates -ptest
> packages containing the test suite of the package for running on the
> target. Test files are installed in /usr/lib/<pkg>/ptest.
> 
> The patch also includes a change to automake, splitting the "make check"
> target into separate steps for building and running the tests.
> 
> Signed-off-by: Björn Stenberg <bjst@enea.com>
> ---
>  meta/classes/image.bbclass                         |    6 ++-
>  meta/classes/packagegroup.bbclass                  |    2 +-
>  meta/conf/bitbake.conf                             |   15 ++++++++-
>  .../automake/automake/buildtest.patch              |   33 ++++++++++++++++++++
>  meta/recipes-devtools/automake/automake_1.12.3.bb  |    3 +-
>  5 files changed, 54 insertions(+), 5 deletions(-)
>  create mode 100644 meta/recipes-devtools/automake/automake/buildtest.patch
> 
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 7b24e4e..b574545 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -29,13 +29,13 @@ ROOTFS_BOOTSTRAP_INSTALL = "${@base_contains("IMAGE_FEATURES", "package-manageme
>  FEATURE_INSTALL = "${@' '.join(oe.packagegroup.required_packages(oe.data.typed_value('IMAGE_FEATURES', d), d))}"
>  FEATURE_INSTALL_OPTIONAL = "${@' '.join(oe.packagegroup.optional_packages(oe.data.typed_value('IMAGE_FEATURES', d), d))}"
>  
> -# packages to install from features, excluding dev/dbg/doc
> +# packages to install from features, excluding dev/dbg/doc/ptest
>  NORMAL_FEATURE_INSTALL = "${@' '.join(oe.packagegroup.required_packages(normal_groups(d), d))}"
>  NORMAL_FEATURE_INSTALL_OPTIONAL = "${@' '.join(oe.packagegroup.optional_packages(normal_groups(d), d))}"
>  
>  def normal_groups(d):
>      """Return all the IMAGE_FEATURES, with the exception of our special package groups"""
> -    extras = set(['dev-pkgs', 'staticdev-pkgs', 'doc-pkgs', 'dbg-pkgs'])
> +    extras = set(['dev-pkgs', 'staticdev-pkgs', 'doc-pkgs', 'dbg-pkgs', 'ptest-pkgs'])
>      features = set(oe.data.typed_value('IMAGE_FEATURES', d))
>      return features.difference(extras)
>  
> @@ -57,6 +57,8 @@ def complementary_globs(featurevar, d):
>              globs.append('*-doc')
>          elif feature == 'dbg-pkgs':
>              globs.append('*-dbg')
> +        elif feature == 'ptest-pkgs':
> +            globs.append('*-ptest')
>      return ' '.join(globs)
>  
>  IMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("IMAGE_FEATURES", d)}'
> diff --git a/meta/classes/packagegroup.bbclass b/meta/classes/packagegroup.bbclass
> index e0e5b1c..b5be048 100644
> --- a/meta/classes/packagegroup.bbclass
> +++ b/meta/classes/packagegroup.bbclass
> @@ -25,7 +25,7 @@ python () {
>      packages = d.getVar('PACKAGES', True).split()
>      genpackages = []
>      for pkg in packages:
> -        for postfix in ['-dbg', '-dev']:
> +        for postfix in ['-dbg', '-dev', '-ptest']:
>              genpackages.append(pkg+postfix)
>      d.setVar('PACKAGES', ' '.join(packages+genpackages))
>  }
> diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
> index 450a0ee..d86e999 100644
> --- a/meta/conf/bitbake.conf
> +++ b/meta/conf/bitbake.conf
> @@ -224,6 +224,10 @@ SUMMARY_${PN}-dbg ?= "${SUMMARY} - Debugging files"
>  DESCRIPTION_${PN}-dbg ?= "${DESCRIPTION}  \
>  This package contains ELF symbols and related sources for debugging purposes."
>  
> +SUMMARY_${PN}-ptest ?= "${SUMMARY} - Package test files"
> +DESCRIPTION_${PN}-ptest ?= "${DESCRIPTION}  \
> +This package contains a test directory ${PTEST_PATH} for package test purposes."
> +
>  SUMMARY_${PN}-dev ?= "${SUMMARY} - Development files"
>  DESCRIPTION_${PN}-dev ?= "${DESCRIPTION}  \
>  This package contains symbolic links, header files, and \
> @@ -267,7 +271,7 @@ SOLIBSDEV_darwin8 = ".dylib"
>  SOLIBSDEV_darwin9 = ".dylib"
>  
>  PACKAGE_BEFORE_PN ?= ""
> -PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
> +PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PN}-ptest ${PACKAGE_BEFORE_PN} ${PN}"
>  PACKAGES_DYNAMIC = "^${PN}-locale-.*"
>  FILES = ""
>  
> @@ -312,6 +316,15 @@ SECTION_${PN}-dbg = "devel"
>  ALLOW_EMPTY_${PN}-dbg = "1"
>  RRECOMMENDS_${PN}-dbg = "${PN} (= ${EXTENDPKGV})"
>  
> +PTEST_PATH ?= "${libdir}/${PN}/ptest"
> +FILES_${PN}-ptest = "${PTEST_PATH}/*"
> +SECTION_${PN}-ptest = "devel"
> +ALLOW_EMPTY_${PN}-ptest = "1"
> +RDEPENDS_${PN}-ptest = "${PN} (= ${EXTENDPKGV})"
> +PTEST_ENABLED = "${@base_contains("DISTRO_FEATURES", "ptest", "1", "0", d)}"
> +RDEPENDS_${PN}-ptest_virtclass-native = ""
> +RDEPENDS_${PN}-ptest_virtclass-nativesdk = ""
> +
>  FILES_${PN}-locale = "${datadir}/locale"
>  
>  # File manifest

Whilst we're in bootstrapping mode for this work, how about we make
these changes a "ptest.bbclass" file which we'd inherit in the recipes
where we've got ptest enabled?

This would also solve the package name conflict I suspect you have in
the dbus recipes, making the hack to the main dbus recipe unnecessary.

Cheers,

Richard
Björn Stenberg - Nov. 28, 2012, 2:44 p.m.
Richard Purdie wrote:
> Whilst we're in bootstrapping mode for this work, how about we make
> these changes a "ptest.bbclass" file which we'd inherit in the recipes
> where we've got ptest enabled?

Ok. I'll give it a go and see how it turns out.
Björn Stenberg - Nov. 29, 2012, 3:52 p.m.
Richard Purdie wrote:
> >  meta/classes/image.bbclass                         |    6 ++-
> >  meta/classes/packagegroup.bbclass                  |    2 +-
> >  meta/conf/bitbake.conf                             |   15 ++++++++-
> 
> Whilst we're in bootstrapping mode for this work, how about we make
> these changes a "ptest.bbclass" file which we'd inherit in the recipes
> where we've got ptest enabled?

Having looked into it a bit, I'm not sure I understand how you mean.

First, I don't quite see how this would be done in an elegant way for the in-function changes in image.bbclass and packagegroup.bbclass. 

And the lines added to bitbake.conf were put there because they mirror other complementary packages like -dbg and -dev. Is it really a good idea to invent a new way of doing this for -ptest packages?
Richard Purdie - Dec. 4, 2012, 4:49 p.m.
On Thu, 2012-11-29 at 16:52 +0100, Björn Stenberg wrote:
> Richard Purdie wrote:
> > >  meta/classes/image.bbclass                         |    6 ++-
> > >  meta/classes/packagegroup.bbclass                  |    2 +-
> > >  meta/conf/bitbake.conf                             |   15 ++++++++-
> > 
> > Whilst we're in bootstrapping mode for this work, how about we make
> > these changes a "ptest.bbclass" file which we'd inherit in the recipes
> > where we've got ptest enabled?
> 
> Having looked into it a bit, I'm not sure I understand how you mean.
>
> First, I don't quite see how this would be done in an elegant way for
> the in-function changes in image.bbclass and packagegroup.bbclass. 

Those are pretty non-invasive so I think we can just add these pieces in
directly as you have them now.

> And the lines added to bitbake.conf were put there because they mirror
> other complementary packages like -dbg and -dev. Is it really a good
> idea to invent a new way of doing this for -ptest packages?

This isn't a "new way". We can easily put these in a .bbclass for now.
Pretty much every package has a -dev and -dbg package but for now, the
number of packages which will have ptest is limited. Its a waste of
build time having the -ptest metadata being processed for every package,
its also confusing.

So I think my proposal stands, lets put the pieces from bitbake.conf
into a bbclass file for now, the other pieces can merge into the core
code. As and when we have more than say 60% of the metadata with ptest
we can think about making -ptest packages the default.

Cheers,

Richard
>
Björn Stenberg - Dec. 5, 2012, 10:17 a.m.
Richard Purdie wrote:
> So I think my proposal stands, lets put the pieces from bitbake.conf
> into a bbclass file for now, the other pieces can merge into the core
> code.

Fair enough. I'll get a new patch set together.

Patch

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 7b24e4e..b574545 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -29,13 +29,13 @@  ROOTFS_BOOTSTRAP_INSTALL = "${@base_contains("IMAGE_FEATURES", "package-manageme
 FEATURE_INSTALL = "${@' '.join(oe.packagegroup.required_packages(oe.data.typed_value('IMAGE_FEATURES', d), d))}"
 FEATURE_INSTALL_OPTIONAL = "${@' '.join(oe.packagegroup.optional_packages(oe.data.typed_value('IMAGE_FEATURES', d), d))}"
 
-# packages to install from features, excluding dev/dbg/doc
+# packages to install from features, excluding dev/dbg/doc/ptest
 NORMAL_FEATURE_INSTALL = "${@' '.join(oe.packagegroup.required_packages(normal_groups(d), d))}"
 NORMAL_FEATURE_INSTALL_OPTIONAL = "${@' '.join(oe.packagegroup.optional_packages(normal_groups(d), d))}"
 
 def normal_groups(d):
     """Return all the IMAGE_FEATURES, with the exception of our special package groups"""
-    extras = set(['dev-pkgs', 'staticdev-pkgs', 'doc-pkgs', 'dbg-pkgs'])
+    extras = set(['dev-pkgs', 'staticdev-pkgs', 'doc-pkgs', 'dbg-pkgs', 'ptest-pkgs'])
     features = set(oe.data.typed_value('IMAGE_FEATURES', d))
     return features.difference(extras)
 
@@ -57,6 +57,8 @@  def complementary_globs(featurevar, d):
             globs.append('*-doc')
         elif feature == 'dbg-pkgs':
             globs.append('*-dbg')
+        elif feature == 'ptest-pkgs':
+            globs.append('*-ptest')
     return ' '.join(globs)
 
 IMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("IMAGE_FEATURES", d)}'
diff --git a/meta/classes/packagegroup.bbclass b/meta/classes/packagegroup.bbclass
index e0e5b1c..b5be048 100644
--- a/meta/classes/packagegroup.bbclass
+++ b/meta/classes/packagegroup.bbclass
@@ -25,7 +25,7 @@  python () {
     packages = d.getVar('PACKAGES', True).split()
     genpackages = []
     for pkg in packages:
-        for postfix in ['-dbg', '-dev']:
+        for postfix in ['-dbg', '-dev', '-ptest']:
             genpackages.append(pkg+postfix)
     d.setVar('PACKAGES', ' '.join(packages+genpackages))
 }
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 450a0ee..d86e999 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -224,6 +224,10 @@  SUMMARY_${PN}-dbg ?= "${SUMMARY} - Debugging files"
 DESCRIPTION_${PN}-dbg ?= "${DESCRIPTION}  \
 This package contains ELF symbols and related sources for debugging purposes."
 
+SUMMARY_${PN}-ptest ?= "${SUMMARY} - Package test files"
+DESCRIPTION_${PN}-ptest ?= "${DESCRIPTION}  \
+This package contains a test directory ${PTEST_PATH} for package test purposes."
+
 SUMMARY_${PN}-dev ?= "${SUMMARY} - Development files"
 DESCRIPTION_${PN}-dev ?= "${DESCRIPTION}  \
 This package contains symbolic links, header files, and \
@@ -267,7 +271,7 @@  SOLIBSDEV_darwin8 = ".dylib"
 SOLIBSDEV_darwin9 = ".dylib"
 
 PACKAGE_BEFORE_PN ?= ""
-PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PN}-ptest ${PACKAGE_BEFORE_PN} ${PN}"
 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
 FILES = ""
 
@@ -312,6 +316,15 @@  SECTION_${PN}-dbg = "devel"
 ALLOW_EMPTY_${PN}-dbg = "1"
 RRECOMMENDS_${PN}-dbg = "${PN} (= ${EXTENDPKGV})"
 
+PTEST_PATH ?= "${libdir}/${PN}/ptest"
+FILES_${PN}-ptest = "${PTEST_PATH}/*"
+SECTION_${PN}-ptest = "devel"
+ALLOW_EMPTY_${PN}-ptest = "1"
+RDEPENDS_${PN}-ptest = "${PN} (= ${EXTENDPKGV})"
+PTEST_ENABLED = "${@base_contains("DISTRO_FEATURES", "ptest", "1", "0", d)}"
+RDEPENDS_${PN}-ptest_virtclass-native = ""
+RDEPENDS_${PN}-ptest_virtclass-nativesdk = ""
+
 FILES_${PN}-locale = "${datadir}/locale"
 
 # File manifest
diff --git a/meta/recipes-devtools/automake/automake/buildtest.patch b/meta/recipes-devtools/automake/automake/buildtest.patch
new file mode 100644
index 0000000..1dd5337
--- /dev/null
+++ b/meta/recipes-devtools/automake/automake/buildtest.patch
@@ -0,0 +1,33 @@ 
+Split "check-TESTS" into a buildtest and runtest target, so that they can
+be run separately.
+
+Signed-off-by: Björn Stenberg <bjst@enea.com>
+Upstream-Status: Pending
+
+--- a/lib/am/check.am	2012-11-14 13:46:16.335475995 +0100
++++ b/lib/am/check.am	2012-08-13 18:40:12.000000000 +0200
+@@ -44,7 +44,7 @@
+ am__tty_colors = $(am__tty_colors_dummy)
+ endif !%?COLOR%
+
+-.PHONY: check-TESTS
++.PHONY: check-TESTS buildtest-TESTS runtest-TESTS
+
+ if %?PARALLEL_TESTS%
+
+@@ -465,7 +465,14 @@
+
+ else !%?PARALLEL_TESTS%
+
+-check-TESTS: $(TESTS)
++AM_RECURSIVE_TARGETS += buildtest runtest
++
++buildtest-TESTS: $(TESTS)
++
++check-TESTS: buildtest-TESTS
++	$(MAKE) $(AM_MAKEFLAGS) runtest-TESTS
++
++runtest-TESTS:
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+ ## Make sure Solaris VPATH-expands all members of this list, even
diff --git a/meta/recipes-devtools/automake/automake_1.12.3.bb b/meta/recipes-devtools/automake/automake_1.12.3.bb
index aaa5ee5..82b8b62 100644
--- a/meta/recipes-devtools/automake/automake_1.12.3.bb
+++ b/meta/recipes-devtools/automake/automake_1.12.3.bb
@@ -23,7 +23,8 @@  PATHFIXPATCH_class-nativesdk = ""
 SRC_URI += "${PATHFIXPATCH} \
 	    file://prefer-cpio-over-pax-for-ustar-archives.patch \
 	    file://python-libdir.patch \
-            file://py-compile-compile-only-optimized-byte-code.patch"
+            file://py-compile-compile-only-optimized-byte-code.patch \
+            file://buildtest.patch"
 
 SRC_URI[md5sum] = "d2af8484de94cdee16d89c50aaa1c729"
 SRC_URI[sha256sum] = "095ffaa3ac887d1eb3511bf13d7f1fc9ec0503c6a06aeae05c93730cdda9a5a0"