pkg-cmake: allow to build package in a subdirectory
PATCH v5 1/3 pkg-cmake: allow to build package in a subdirectory
From: Gwenhael Goavec-Merou <[email protected]>
For some cmake based packages, like GNURadio, it's forbidden to do the compilation directly in the sources directory. This patch add a new variable to specify, if needed, the name of a sub-directory used to compile.
---
Changes v4 -> v5:
* Instead of overloading BUILDDIR uses a variable to set if package is compiled in-source-tree or not
* update again manual
Changes v2 -> v3:
* Update docs to add detail about LIBFOO_BUILDDIR
Changes v1 -> v2:
* Allow to overload $(2)_BUILDDIR instead of adding a new variable and test
--- docs/manual/adding-packages-cmake.txt | 3 +++ package/pkg-cmake.mk | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
docs/manual/adding-packages-cmake.txt +3 -0
@@ -146,3 +146,6 @@ possible to customize what is done in any particular step: +LIBFOO_CONFIGURE_CMDS+ variable, it will be used instead of the default CMake one. However, using this method should be restricted to very specific cases. Do not use it in the general case. + +* By adding +LIBFOO_SUPPORTS_IN_SOURCE_BUILD = no+ when a package + prevents doing an in-source-tree build.
package/pkg-cmake.mk +9 -2
@@ -61,7 +61,12 @@ $(2)_INSTALL_STAGING_OPTS ?= DESTDIR=$$(STAGING_DIR) install $(2)_INSTALL_TARGET_OPTS ?= DESTDIR=$$(TARGET_DIR) install $(2)_SRCDIR = $$($(2)_DIR)/$$($(2)_SUBDIR) + +ifeq ($$($(2)_SUPPORTS_IN_SOURCE_BUILD), no) +$(2)_BUILDDIR = $$($(2)_SRCDIR)/buildroot-build +else $(2)_BUILDDIR = $$($(2)_SRCDIR) +endif # # Configure step. Only define it if not already defined by the package
@@ -73,7 +78,8 @@ ifeq ($(4),target) # Configure package for target define $(2)_CONFIGURE_CMDS - (cd $$($$(PKG)_BUILDDIR) && \ + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ rm -f CMakeCache.txt && \ PATH=$$(BR_PATH) \ $$($$(PKG)_CONF_ENV) $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
@@ -98,7 +104,8 @@ else # Configure package for host define $(2)_CONFIGURE_CMDS - (cd $$($$(PKG)_BUILDDIR) && \ + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ rm -f CMakeCache.txt && \ PATH=$$(BR_PATH) \ $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
Signature · 1 line
2.0.5
PATCH v5 1/3 pkg-cmake: allow to build package in a subdirectory
Hi Gwenhael,
Quoted 37 lines · Gwenhael Goavec-Merou
From: Gwenhael Goavec-Merou <[email protected]>
For some cmake based packages, like GNURadio, it's forbidden to do the compilation directly in the sources directory. This patch add a new variable to specify, if needed, the name of a sub-directory used to compile.
Signed-off-by Gwenhael Goavec-Merou <[email protected]>---
Changes v4 -> v5:
* Instead of overloading BUILDDIR uses a variable to set if package is compiled in-source-tree or not
* update again manual
Changes v2 -> v3:
* Update docs to add detail aboutLIBFOO_BUILDDIR
Changes v1 -> v2:
* Allow to overload $(2)_BUILDDIR instead of adding a new variable and test--- docs/manual/adding-packages-cmake.txt | 3 +++ package/pkg-cmake.mk | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)docs/manual/adding-packages-cmake.txt +3
-0@@ -146,3 +146,6 @@ possible to customize what is done in any particular step: +LIBFOO_CONFIGURE_CMDS+ variable, it will be used instead of the default CMake one. However, using this method should be restricted to very specific cases. Do not use it in the general case. + +* By adding +LIBFOO_SUPPORTS_IN_SOURCE_BUILD = no+ when a package + prevents doing an in-source-tree build.package/pkg-cmake.mk +0
-0
package/pkg-cmake.mk $(2)_INSTALL_STAGING_OPTS ?= DESTDIR=$$(STAGING_DIR) install · line 65
Quoted 5 lines
package/pkg-cmake.mk +2
-0@@ -61,7 +61,12 @@ $(2)_INSTALL_STAGING_OPTS ?= DESTDIR=$$(STAGING_DIR) install $(2)_INSTALL_TARGET_OPTS ?= DESTDIR=$$(TARGET_DIR) install $(2)_SRCDIR = $$($(2)_DIR)/$$($(2)_SUBDIR) + +ifeq ($$($(2)_SUPPORTS_IN_SOURCE_BUILD), no)
s/, no/,no/
s/$(2)/$(3)/
When in-srctree build is forbidden, it is for both target and host package, so there is no need for having HOST_FOO_SUPPORTS_IN_SOURCE_BUILD set when FOO_SUPPORTS_IN_SOURCE_BUILD is already set.
Quoted 28 lines
package/pkg-cmake.mk +7
-3+$(2)_BUILDDIR = $$($(2)_SRCDIR)/buildroot-build +else $(2)_BUILDDIR = $$($(2)_SRCDIR) +endif # # Configure step. Only define it if not already defined by the package@@ -73,7 +78,8 @@ ifeq ($(4),target) # Configure package for target define $(2)_CONFIGURE_CMDS - (cd $$($$(PKG)_BUILDDIR) && \ + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ rm -f CMakeCache.txt && \ PATH=$$(BR_PATH) \ $$($$(PKG)_CONF_ENV) $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \@@ -98,7 +104,8 @@ else # Configure package for host define $(2)_CONFIGURE_CMDS - (cd $$($$(PKG)_BUILDDIR) && \ + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ rm -f CMakeCache.txt && \ PATH=$$(BR_PATH) \ $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \ --
Quoted 2 lines
2.0.5
Regards,
Signature · 1 line
Samuel
PATCH v5 1/3 pkg-cmake: allow to build package in a subdirectory
Dear Samuel Martin,
Quoted 2 lines · Samuel Martin
Quoted 1 line
+ifeq ($$($(2)_SUPPORTS_IN_SOURCE_BUILD), no)
s/, no/,no/
Actually it should be 'NO' and not 'no'. All other package infra variables have upper-case values.
I know I suggested the SUPPORTS_IN_SOURCE_BUILD name, but what worries me a bit is that if one day we want to make the default to build things out of tree, a variable named <pkg>_SUPPORTS_IN_SOURCE_BUILD would not make much sense anymore. It would have to be named <pkg>_REQUIRES_IN_SOURCE_BUILD, set to NO by default in the package infra, and that can be overridden to YES by those packages that don't support out of tree build.
So I'm not sure what to do know. Go with <pkg>_SUPPORTS_IN_SOURCE_BUILD for the moment, and change that when time comes?
Best regards,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v5 1/3 pkg-cmake: allow to build package in a subdirectory
Quoted 18 lines · Thomas Petazzoni
Dear Samuel Martin,
Quoted 2 lines · Samuel Martin
Quoted 1 line
+ifeq ($$($(2)_SUPPORTS_IN_SOURCE_BUILD), no)
s/, no/,no/
Actually it should be 'NO' and not 'no'. All other package infra variables have upper-case values.
I know I suggested the
SUPPORTS_IN_SOURCE_BUILDname, but what worries me a bit is that if one day we want to make the default to build things out of tree, a variable named <pkg>_SUPPORTS_IN_SOURCE_BUILD would not make much sense anymore. It would have to be named <pkg>_REQUIRES_IN_SOURCE_BUILD, set to NO by default in the package infra, and that can be overridden to YES by those packages that don't support out of tree build.
Quoted 2 lines
So I'm not sure what to do know. Go with <pkg>_SUPPORTS_IN_SOURCE_BUILD for the moment, and change that when time comes?
I'm all for building in a subirectory by default and only do it directly in the
tree when necessary.
And in fact, I would not even introduce the _REQUIRES_IN_SOURCE_BUILD variable
until it is proven to be necessary. BTW, Thomas, did you introduce something like that in your out-of-source-build branch?
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH v5 1/3 pkg-cmake: allow to build package in a subdirectory
Dear Arnout Vandecappelle,
Quoted 6 lines · Arnout Vandecappelle
I'm all for building in a subirectory by default and only do it directly in the
tree when necessary.And in fact, I would not even introduce the
_REQUIRES_IN_SOURCE_BUILDvariable
until it is proven to be necessary. BTW, Thomas, did you introduce something like that in your out-of-source-build branch?
Yes, I did have a flag that allows a package to say "I support out-of-tree build". It defaulted to "NO" in generic-package, and to "YES" in autotools-package and cmake-package, but can be overridden by individual packages. For example, 'linux' can support out of tree build even though it's a generic-package (well, now a kconfig-package), or an autotools package may not support out of tree due to stupidities done by the upstream developer.
However, this branch is now very old, and was far from being ready.
I really would like to put the smallest amount of work on Gwenhael
shoulders: I don't want to ask him, as a prerequisite of getting gnuradio merged, to do some major surgery work deep in our package infrastructure. So can we settle on a temporary solution that works for gnuradio and is acceptable, and implement the grand plan of doing full out of tree build at some later point?
Cheers,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v5 2/3 python-cheetah: add host-package support
In reply to Gwenhael Goavec-MerouFrom: Gwenhael Goavec-Merou <[email protected]>
Some packages, like GNURadio for VOLK, needs cheetah on host at buildtime.
---
Changes v3 -> v4:
* use HOST_PYTHON_CHEETAH_DEPENDENCIES instead of PYTHON_CHEETAH_DEPENDENCIES
* suppress '+' for dependency definition
--- package/python-cheetah/python-cheetah.mk | 2 ++ 1 file changed, 2 insertions(+)
package/python-cheetah/python-cheetah.mk +2 -0
@@ -9,5 +9,7 @@ PYTHON_CHEETAH_SOURCE = Cheetah-$(PYTHON_CHEETAH_VERSION).tar.gz PYTHON_CHEETAH_SITE = http://pypi.python.org/packages/source/C/Cheetah PYTHON_CHEETAH_LICENSE = MIT PYTHON_CHEETAH_SETUP_TYPE = setuptools +HOST_PYTHON_CHEETAH_DEPENDENCIES = host-python-markdown $(eval $(python-package)) +$(eval $(host-python-package))
Signature · 1 line
2.0.5
PATCH v5 2/3 python-cheetah: add host-package support
Quoted 18 lines · Gwenhael Goavec-Merou
From: Gwenhael Goavec-Merou <[email protected]>
Some packages, like GNURadio for VOLK, needs cheetah on host at buildtime.
Signed-off-by Gwenhael Goavec-Merou <[email protected]>---
Changes v3 -> v4:
* useHOST_PYTHON_CHEETAH_DEPENDENCIESinstead ofPYTHON_CHEETAH_DEPENDENCIES
* suppress '+' for dependency definition--- package/python-cheetah/python-cheetah.mk | 2 ++ 1 file changed, 2 insertions(+)package/python-cheetah/python-cheetah.mk +0
-0
package/python-cheetah/python-cheetah.mk PYTHON_CHEETAH_SOURCE = Cheetah-$(PYTHON_CHEETAH_VERSION).tar.gz · line 12
Quoted 4 lines
package/python-cheetah/python-cheetah.mk +1
-0@@ -9,5 +9,7 @@ PYTHON_CHEETAH_SOURCE = Cheetah-$(PYTHON_CHEETAH_VERSION).tar.gz PYTHON_CHEETAH_SITE = http://pypi.python.org/packages/source/C/Cheetah PYTHON_CHEETAH_LICENSE = MIT PYTHON_CHEETAH_SETUP_TYPE = setuptools +HOST_PYTHON_CHEETAH_DEPENDENCIES = host-python-markdown
This should probably carry a comment to remember what you explained in an
earlier mail, e.g.:
# Runtime dependency on markdown is not expressed in Config.in for host package
and perhaps a fuller explanation in the commit log (explaining that setuptools will download it if it can't be found).
BTW, Thomas, when you committed python-cheetah you removed the runtime
dependency on markdown because there are some examples you can run without markdown. Is that the way we work? The cheetah package itself declares a dependency on markdown because one of its classes (Filters.Markdown) uses it. Of course, as long as you don't use that particular filter, there won't be a problem. But it feels weird to me that we remove a dependency that is claimed by a package, unless there is a good reason for it (and I don't count saving 260K of .pyc files as a good enough reason).
Regards,
Arnout
Quoted 4 lines
package/python-cheetah/python-cheetah.mk +1
-0$(eval $(python-package)) +$(eval $(host-python-package))
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH v5 2/3 python-cheetah: add host-package support
Dear Arnout Vandecappelle,
Quoted 7 lines · Arnout Vandecappelle
This should probably carry a comment to remember what you explained in an
earlier mail, e.g.:# Runtime dependency on markdown is not expressed in Config.in for host package
and perhaps a fuller explanation in the commit log (explaining that setuptools will download it if it can't be found).
Agreed. All those "unusual" dependencies should have a comment in the .mk file.
Quoted 8 lines
BTW, Thomas, when you committed python-cheetah you removed the runtime
dependency on markdown because there are some examples you can run without markdown. Is that the way we work? The cheetah package itself declares a dependency on markdown because one of its classes (Filters.Markdown) uses it. Of course, as long as you don't use that particular filter, there won't be a problem. But it feels weird to me that we remove a dependency that is claimed by a package, unless there is a good reason for it (and I don't count saving 260K of .pyc files as a good enough reason).
"Way we work" is fairly loosely defined when it comes to interpreted languages and more-or-less optional dependencies :-)
Should python-cheetah select all the possible dependencies it may use for all its filters, or should it leave this responsibility to the Buildroot user ? Not easy to decide.
Since the dependency was apparently not strictly needed, and there was (as far as I remember) no comment justifying the dependency, it seemed natural to me to remove this dependency. That being said, I wouldn't be offended at all if we decide to re-introduce the dependency, provided a comment indicating why we're adding this not-really mandatory dependency.
Cheers,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v5 2/3 python-cheetah: add host-package support
Note to Gwenhael (removed from Cc): the discussion below is no longer relevant
for your patch.
Quoted 3 lines · Thomas Petazzoni
Dear Arnout Vandecappelle,
On Tue, 10 Mar 2015 23:39:31 +0100, Arnout Vandecappelle wrote:
[snip]
Quoted 9 lines
Quoted 8 lines
BTW, Thomas, when you committed python-cheetah you removed the runtime
dependency on markdown because there are some examples you can run without markdown. Is that the way we work? The cheetah package itself declares a dependency on markdown because one of its classes (Filters.Markdown) uses it. Of course, as long as you don't use that particular filter, there won't be a problem. But it feels weird to me that we remove a dependency that is claimed by a package, unless there is a good reason for it (and I don't count saving 260K of .pyc files as a good enough reason).
Quoted 6 lines
"Way we work" is fairly loosely defined when it comes to interpreted languages and more-or-less optional dependencies :-)
Should python-cheetah select all the possible dependencies it may use for all its filters, or should it leave this responsibility to the Buildroot user ? Not easy to decide.
For me, the acid test is what the package declares itself.Cheetah.egg-info/requires.txt says Markdown >= 2.0.1
For perl packages, we trust whatever dependencies the package declares. If we would have a scancpan-like script for pypi, the dependency would be there.
Quoted 7 lines
Since the dependency was apparently not strictly needed, and there was (as far as I remember) no comment justifying the dependency, it seemed natural to me to remove this dependency. That being said, I wouldn't be offended at all if we decide to re-introduce the dependency, provided a comment indicating why we're adding this not-really mandatory dependency.
On the other hand, as long as the lack of dependency is not bothering anyone,
we can leave it as it is :-) The purpose of discussion is what should be the guiding principle for future python packages. My proposal is: follow the egg info.
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH v5 2/3 python-cheetah: add host-package support
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle <[email protected]> writes:
Hi,
Quoted 3 lines
On the other hand, as long as the lack of dependency is not bothering anyone,
we can leave it as it is :-) The purpose of discussion is what should be the guiding principle for future python packages. My proposal is: follow the egg info.
Sounds sensible to me.
Signature · 1 line
Bye, Peter Korsgaard
PATCH v5 2/3 python-cheetah: add host-package support
In reply to Arnout VandecappelleDear Arnout Vandecappelle,
Quoted 4 lines · Arnout Vandecappelle
For me, the acid test is what the package declares itself.
Cheetah.egg-info/requires.txtsays Markdown >= 2.0.1
For perl packages, we trust whatever dependencies the package declares. If we would have a scancpan-like script for pypi, the dependency would be there.
I actually did start such a script at some point :-)
Quoted 3 lines
On the other hand, as long as the lack of dependency is not bothering anyone,
we can leave it as it is :-) The purpose of discussion is what should be the guiding principle for future python packages. My proposal is: follow the egg info.
I'm fine with that.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v5 3/3 GNURadio: new package
In reply to Gwenhael Goavec-MerouFrom: Gwenhael Goavec-Merou <[email protected]>
---
Changes v4 -> v5:
* GNURadio -> gnuradio.
* help for all options.
* rename patch, add signed-off and a comment.
* dependencies comment.
* typo.
* better workaround to avoid compile fails when neon is enabled.
* indentation.
* better options handlings.
Changes v2 -> v3:
* move comment at the beginning of the file.
* add a patch to suppress boost-test dependency.
* move python dependencies in the specific option.
* use stable archive instead of git.
* add hook specific for ARM for using neon if available (without this hook volk fails to build).
Changes v1 -> v2:
* overload _BUILDDIR variable to specify build directory
--- package/Config.in | 1 + .../0001-suppress-boost_unitest-detection.patch | 32 ++++++++++++ package/gnuradio/Config.in | 46 +++++++++++++++++ package/gnuradio/gnuradio.hash | 2 + package/gnuradio/gnuradio.mk | 59 ++++++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 package/gnuradio/0001-suppress-boost_unitest-detection.patch create mode 100644 package/gnuradio/Config.in create mode 100644 package/gnuradio/gnuradio.hash create mode 100644 package/gnuradio/gnuradio.mk
package/Config.in +1 -0
@@ -1043,6 +1043,7 @@ menu "Miscellaneous" source "package/clamav/Config.in" source "package/collectd/Config.in" source "package/empty/Config.in" + source "package/gnuradio/Config.in" source "package/googlefontdirectory/Config.in" source "package/haveged/Config.in" source "package/mcrypt/Config.in"
package/gnuradio/0001-suppress-boost_unitest-detection.patch new file +32 -0
@@ -0,0 +1,32 @@ +By default, the boost test option is mandatory for build environment +detection. +This patch suppress this dependency and allows the test part only if +build_test is enabled at the Buildroot level. + +Signed-off-by: Gwenhael Goavec-Merou <[email protected]> +--- +Index: gnuradio-3.7.5/volk/cmake/VolkBoost.cmake +=================================================================== +--- gnuradio-3.7.5.orig/volk/cmake/VolkBoost.cmake ++++ gnuradio-3.7.5/volk/cmake/VolkBoost.cmake +@@ -29,7 +29,6 @@ set(__INCLUDED_VOLK_BOOST_CMAKE TRUE) + set(BOOST_REQUIRED_COMPONENTS + filesystem + system +- unit_test_framework + program_options + ) + +Index: gnuradio-3.7.5/volk/lib/CMakeLists.txt +=================================================================== +--- gnuradio-3.7.5.orig/volk/lib/CMakeLists.txt ++++ gnuradio-3.7.5/volk/lib/CMakeLists.txt +@@ -541,7 +541,7 @@ endif(ENABLE_STATIC_LIBS) + ######################################################################## + + +-if(Boost_FOUND) ++if(Boost_FOUND AND BUILD_TEST) + + set_source_files_properties( + ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc PROPERTIES
package/gnuradio/Config.in new file +46 -0
46 lines not on this page · raw message
package/gnuradio/gnuradio.hash new file +2 -0
@@ -0,0 +1,2 @@ +# From http://gnuradio.org/redmine/projects/gnuradio/files +md5 b4a917a548f41ce25c6c88f9bc864bca gnuradio-3.7.5.tar.gz
package/gnuradio/gnuradio.mk new file +59 -0
59 lines not on this page · raw message
Signature · 1 line
2.0.5