diff mbox series

[v3] package/eigen: use cmake-package infra

Message ID 20200615184911.71434-1-juju@cotds.org
State Accepted
Headers show
Series [v3] package/eigen: use cmake-package infra | expand

Commit Message

Julien Olivain June 15, 2020, 6:49 p.m. UTC
The eigen package was introduced as a generic package, but upstream was
in fact using CMake.

The motivation of this change is to fix package detection with CMake.

Eigen3 library normally installs a signature file named
"signature_of_eigen3_matrix_library" to help library detection:
https://gitlab.com/libeigen/eigen/-/blob/3.3.7/CMakeLists.txt#L423

The library also provide a CMake macro that use this file to
detect it:
https://gitlab.com/libeigen/eigen/-/blob/3.3.7/cmake/FindEigen3.cmake#L76

Without the signature file installed, packages searching for this
library with this method will fail. Other packages usings pkg-config are
not affected by this issue.

By using the cmake-package infrastructure, all the needed files
are now installed, fixing this CMake detection issue.

Other changes in this patch:
- Updated the Eigen git repository to the new url:
  https://gitlab.com/libeigen/eigen
- Removed all build and install staging commands
  (now included in upstream cmake)
- Package needs EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO
- Removed the BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES option,
  as this option is not proposed by the upstream CMake.
  Unsupported module header files are now unconditionally installed. As
  such, no need to introduce a legacy entry for
  BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES: users that had it enabled will
  still get the files installed, while those that did not will get them
  installed now.
- Updated hash for source package, because the first component in the
  stored paths changed from eigen-eigen-323c052e1731/ to eigen-3.3.7/
  and some mercurial related files (.hg_archival.txt, .hgtags) got
  dropped after the conversion to git.
- Reformat hash file with two spaces delimiters
- Define EIGEN_CONF_OPTS to set pkg-config .pc install path

Signed-off-by: Julien Olivain <juju@cotds.org>

---
Changes v2 -> v3:
Suggested by Yann:
  - clarified commit log about hash change
  - clarified commit log about unsupported module option removal
  - Use absolute path to set PKGCONFIG_INSTALL_DIR CMake variable

Changes v1 -> v2:
  - use cmake package infra, instead of fixing cmake detection
    issue by duplicating upstream commands, as suggested by Yann.
---
 package/eigen/Config.in  |  8 --------
 package/eigen/eigen.hash | 14 +++++++-------
 package/eigen/eigen.mk   | 36 +++++++-----------------------------
 3 files changed, 14 insertions(+), 44 deletions(-)

Comments

Matt Weber June 15, 2020, 11:50 p.m. UTC | #1
Julien,


On Mon, Jun 15, 2020 at 1:50 PM Julien Olivain <juju@cotds.org> wrote:
>
> The eigen package was introduced as a generic package, but upstream was
> in fact using CMake.

The original reason for going the generic route was because the pkg
suggested just copying the headers and that documentation used CMake.
Hindsight being what it is, looks like a good point to now clean
things up and go the CMake route :)

>
> The motivation of this change is to fix package detection with CMake.
>
> Eigen3 library normally installs a signature file named
> "signature_of_eigen3_matrix_library" to help library detection:
> https://gitlab.com/libeigen/eigen/-/blob/3.3.7/CMakeLists.txt#L423
>
> The library also provide a CMake macro that use this file to
> detect it:
> https://gitlab.com/libeigen/eigen/-/blob/3.3.7/cmake/FindEigen3.cmake#L76
>
> Without the signature file installed, packages searching for this
> library with this method will fail. Other packages usings pkg-config are
> not affected by this issue.
>
> By using the cmake-package infrastructure, all the needed files
> are now installed, fixing this CMake detection issue.
>
> Other changes in this patch:
> - Updated the Eigen git repository to the new url:
>   https://gitlab.com/libeigen/eigen
> - Removed all build and install staging commands
>   (now included in upstream cmake)
> - Package needs EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO
> - Removed the BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES option,
>   as this option is not proposed by the upstream CMake.
>   Unsupported module header files are now unconditionally installed. As
>   such, no need to introduce a legacy entry for
>   BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES: users that had it enabled will
>   still get the files installed, while those that did not will get them
>   installed now.

I've built the package and confirmed the .files-list-staging.txt
includes the additional signature file, unsupported modules and cmake
helpers.

Tested-by: Matthew Weber <matthew.weber@rockwellcollins.com>

> - Updated hash for source package, because the first component in the
>   stored paths changed from eigen-eigen-323c052e1731/ to eigen-3.3.7/
>   and some mercurial related files (.hg_archival.txt, .hgtags) got
>   dropped after the conversion to git.
> - Reformat hash file with two spaces delimiters
> - Define EIGEN_CONF_OPTS to set pkg-config .pc install path
>
> Signed-off-by: Julien Olivain <juju@cotds.org>
>
> ---
> Changes v2 -> v3:
> Suggested by Yann:
>   - clarified commit log about hash change
>   - clarified commit log about unsupported module option removal
>   - Use absolute path to set PKGCONFIG_INSTALL_DIR CMake variable
>
> Changes v1 -> v2:
>   - use cmake package infra, instead of fixing cmake detection
>     issue by duplicating upstream commands, as suggested by Yann.
> ---
>  package/eigen/Config.in  |  8 --------
>  package/eigen/eigen.hash | 14 +++++++-------
>  package/eigen/eigen.mk   | 36 +++++++-----------------------------
>  3 files changed, 14 insertions(+), 44 deletions(-)
>
> diff --git a/package/eigen/Config.in b/package/eigen/Config.in
> index 48752e0c8d..ef0a16f2f7 100644
> --- a/package/eigen/Config.in
> +++ b/package/eigen/Config.in
> @@ -13,13 +13,5 @@ config BR2_PACKAGE_EIGEN
>
>           http://eigen.tuxfamily.org/
>
> -if BR2_PACKAGE_EIGEN
> -
> -config BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES

Do we need to add a legacy config for this?

Thanks for cleaning this up!
Matt
Yann E. MORIN June 16, 2020, 6:53 a.m. UTC | #2
Julien, All,

On 2020-06-15 20:49 +0200, Julien Olivain spake thusly:
> The eigen package was introduced as a generic package, but upstream was
> in fact using CMake.
> 
> The motivation of this change is to fix package detection with CMake.
> 
> Eigen3 library normally installs a signature file named
> "signature_of_eigen3_matrix_library" to help library detection:
> https://gitlab.com/libeigen/eigen/-/blob/3.3.7/CMakeLists.txt#L423
> 
> The library also provide a CMake macro that use this file to
> detect it:
> https://gitlab.com/libeigen/eigen/-/blob/3.3.7/cmake/FindEigen3.cmake#L76
> 
> Without the signature file installed, packages searching for this
> library with this method will fail. Other packages usings pkg-config are
> not affected by this issue.
> 
> By using the cmake-package infrastructure, all the needed files
> are now installed, fixing this CMake detection issue.
> 
> Other changes in this patch:
> - Updated the Eigen git repository to the new url:
>   https://gitlab.com/libeigen/eigen
> - Removed all build and install staging commands
>   (now included in upstream cmake)
> - Package needs EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO
> - Removed the BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES option,
>   as this option is not proposed by the upstream CMake.
>   Unsupported module header files are now unconditionally installed. As
>   such, no need to introduce a legacy entry for
>   BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES: users that had it enabled will
>   still get the files installed, while those that did not will get them
>   installed now.
> - Updated hash for source package, because the first component in the
>   stored paths changed from eigen-eigen-323c052e1731/ to eigen-3.3.7/
>   and some mercurial related files (.hg_archival.txt, .hgtags) got
>   dropped after the conversion to git.
> - Reformat hash file with two spaces delimiters
> - Define EIGEN_CONF_OPTS to set pkg-config .pc install path
> 
> Signed-off-by: Julien Olivain <juju@cotds.org>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
> Changes v2 -> v3:
> Suggested by Yann:
>   - clarified commit log about hash change
>   - clarified commit log about unsupported module option removal
>   - Use absolute path to set PKGCONFIG_INSTALL_DIR CMake variable
> 
> Changes v1 -> v2:
>   - use cmake package infra, instead of fixing cmake detection
>     issue by duplicating upstream commands, as suggested by Yann.
> ---
>  package/eigen/Config.in  |  8 --------
>  package/eigen/eigen.hash | 14 +++++++-------
>  package/eigen/eigen.mk   | 36 +++++++-----------------------------
>  3 files changed, 14 insertions(+), 44 deletions(-)
> 
> diff --git a/package/eigen/Config.in b/package/eigen/Config.in
> index 48752e0c8d..ef0a16f2f7 100644
> --- a/package/eigen/Config.in
> +++ b/package/eigen/Config.in
> @@ -13,13 +13,5 @@ config BR2_PACKAGE_EIGEN
>  
>  	  http://eigen.tuxfamily.org/
>  
> -if BR2_PACKAGE_EIGEN
> -
> -config BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES
> -	bool "unsupported modules"
> -	help
> -	  Install eigen unsupported modules
> -endif
> -
>  comment "eigen needs a toolchain w/ C++"
>  	depends on !BR2_INSTALL_LIBSTDCPP
> diff --git a/package/eigen/eigen.hash b/package/eigen/eigen.hash
> index e5c8404022..5ec561ad10 100644
> --- a/package/eigen/eigen.hash
> +++ b/package/eigen/eigen.hash
> @@ -1,8 +1,8 @@
>  # Locally computed
> -sha256 9f13cf90dedbe3e52a19f43000d71fdf72e986beb9a5436dddcd61ff9d77a3ce 3.3.7.tar.bz2
> -sha256 4f877e5ae4672568ef82cfd0023e2cef4a7cf55d867ab249efc9569a7eb9e5b1 COPYING.BSD
> -sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING.GPL
> -sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL
> -sha256 f5b330efdad110cdd84d585ec61220b0650461fa599e36b13e1726c9346dcfb9 COPYING.MINPACK
> -sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 COPYING.MPL2
> -sha256 c83230b770f17ef1386ea1fd3681271dd98aa93646bdbfb5bff3a1b7050fff9d COPYING.README
> +sha256  685adf14bd8e9c015b78097c1dc22f2f01343756f196acdc76a678e1ae352e11  eigen-3.3.7.tar.bz2
> +sha256  4f877e5ae4672568ef82cfd0023e2cef4a7cf55d867ab249efc9569a7eb9e5b1  COPYING.BSD
> +sha256  8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903  COPYING.GPL
> +sha256  dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551  COPYING.LGPL
> +sha256  f5b330efdad110cdd84d585ec61220b0650461fa599e36b13e1726c9346dcfb9  COPYING.MINPACK
> +sha256  fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85  COPYING.MPL2
> +sha256  c83230b770f17ef1386ea1fd3681271dd98aa93646bdbfb5bff3a1b7050fff9d  COPYING.README
> diff --git a/package/eigen/eigen.mk b/package/eigen/eigen.mk
> index 5c9e028442..1645489717 100644
> --- a/package/eigen/eigen.mk
> +++ b/package/eigen/eigen.mk
> @@ -5,38 +5,16 @@
>  ################################################################################
>  
>  EIGEN_VERSION = 3.3.7
> -EIGEN_SOURCE = $(EIGEN_VERSION).tar.bz2
> -EIGEN_SITE = https://bitbucket.org/eigen/eigen/get
> +EIGEN_SOURCE = eigen-$(EIGEN_VERSION).tar.bz2
> +EIGEN_SITE = https://gitlab.com/libeigen/eigen/-/archive/$(EIGEN_VERSION)
>  EIGEN_LICENSE = MPL2, BSD-3-Clause, LGPL-2.1
>  EIGEN_LICENSE_FILES = COPYING.MPL2 COPYING.BSD COPYING.LGPL COPYING.README
>  EIGEN_INSTALL_STAGING = YES
>  EIGEN_INSTALL_TARGET = NO
> -EIGEN_DEST_DIR = $(STAGING_DIR)/usr/include/eigen3
> +EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO
>  
> -ifeq ($(BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES),y)
> -define EIGEN_INSTALL_UNSUPPORTED_MODULES_CMDS
> -	mkdir -p $(EIGEN_DEST_DIR)/unsupported
> -	cp -a $(@D)/unsupported/Eigen $(EIGEN_DEST_DIR)/unsupported
> -endef
> -endif
> +# Default Eigen CMake installs .pc file in /usr/share/pkgconfig
> +# change it to /usr/lib/pkgconfig, to be consistent with other packages.
> +EIGEN_CONF_OPTS = -DPKGCONFIG_INSTALL_DIR=/usr/lib/pkgconfig
>  
> -# Generate the .pc file at build time
> -define EIGEN_BUILD_CMDS
> -	sed -r -e 's,^Version: .*,Version: $(EIGEN_VERSION),' \
> -		-e 's,^Cflags: .*,Cflags: -I$$\{prefix\}/include/eigen3,' \
> -		-e 's,^prefix.*,prefix=/usr,' \
> -		$(@D)/eigen3.pc.in >$(@D)/eigen3.pc
> -endef
> -
> -# This package only consists of headers that need to be
> -# copied over to the sysroot for compile time use
> -define EIGEN_INSTALL_STAGING_CMDS
> -	$(RM) -r $(EIGEN_DEST_DIR)
> -	mkdir -p $(EIGEN_DEST_DIR)
> -	cp -a $(@D)/Eigen $(EIGEN_DEST_DIR)
> -	$(EIGEN_INSTALL_UNSUPPORTED_MODULES_CMDS)
> -	$(INSTALL) -D -m 0644 $(@D)/eigen3.pc \
> -		$(STAGING_DIR)/usr/lib/pkgconfig/eigen3.pc
> -endef
> -
> -$(eval $(generic-package))
> +$(eval $(cmake-package))
> -- 
> 2.26.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Yann E. MORIN June 16, 2020, 6:54 a.m. UTC | #3
Matthew, All,

On 2020-06-15 18:50 -0500, Matthew Weber spake thusly:
> On Mon, Jun 15, 2020 at 1:50 PM Julien Olivain <juju@cotds.org> wrote:
[--SNIP--]
> > -config BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES
> Do we need to add a legacy config for this?

As explained in the commit log, no. ;-)

Regards,
Yann E. MORIN.
diff mbox series

Patch

diff --git a/package/eigen/Config.in b/package/eigen/Config.in
index 48752e0c8d..ef0a16f2f7 100644
--- a/package/eigen/Config.in
+++ b/package/eigen/Config.in
@@ -13,13 +13,5 @@  config BR2_PACKAGE_EIGEN
 
 	  http://eigen.tuxfamily.org/
 
-if BR2_PACKAGE_EIGEN
-
-config BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES
-	bool "unsupported modules"
-	help
-	  Install eigen unsupported modules
-endif
-
 comment "eigen needs a toolchain w/ C++"
 	depends on !BR2_INSTALL_LIBSTDCPP
diff --git a/package/eigen/eigen.hash b/package/eigen/eigen.hash
index e5c8404022..5ec561ad10 100644
--- a/package/eigen/eigen.hash
+++ b/package/eigen/eigen.hash
@@ -1,8 +1,8 @@ 
 # Locally computed
-sha256 9f13cf90dedbe3e52a19f43000d71fdf72e986beb9a5436dddcd61ff9d77a3ce 3.3.7.tar.bz2
-sha256 4f877e5ae4672568ef82cfd0023e2cef4a7cf55d867ab249efc9569a7eb9e5b1 COPYING.BSD
-sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING.GPL
-sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL
-sha256 f5b330efdad110cdd84d585ec61220b0650461fa599e36b13e1726c9346dcfb9 COPYING.MINPACK
-sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 COPYING.MPL2
-sha256 c83230b770f17ef1386ea1fd3681271dd98aa93646bdbfb5bff3a1b7050fff9d COPYING.README
+sha256  685adf14bd8e9c015b78097c1dc22f2f01343756f196acdc76a678e1ae352e11  eigen-3.3.7.tar.bz2
+sha256  4f877e5ae4672568ef82cfd0023e2cef4a7cf55d867ab249efc9569a7eb9e5b1  COPYING.BSD
+sha256  8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903  COPYING.GPL
+sha256  dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551  COPYING.LGPL
+sha256  f5b330efdad110cdd84d585ec61220b0650461fa599e36b13e1726c9346dcfb9  COPYING.MINPACK
+sha256  fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85  COPYING.MPL2
+sha256  c83230b770f17ef1386ea1fd3681271dd98aa93646bdbfb5bff3a1b7050fff9d  COPYING.README
diff --git a/package/eigen/eigen.mk b/package/eigen/eigen.mk
index 5c9e028442..1645489717 100644
--- a/package/eigen/eigen.mk
+++ b/package/eigen/eigen.mk
@@ -5,38 +5,16 @@ 
 ################################################################################
 
 EIGEN_VERSION = 3.3.7
-EIGEN_SOURCE = $(EIGEN_VERSION).tar.bz2
-EIGEN_SITE = https://bitbucket.org/eigen/eigen/get
+EIGEN_SOURCE = eigen-$(EIGEN_VERSION).tar.bz2
+EIGEN_SITE = https://gitlab.com/libeigen/eigen/-/archive/$(EIGEN_VERSION)
 EIGEN_LICENSE = MPL2, BSD-3-Clause, LGPL-2.1
 EIGEN_LICENSE_FILES = COPYING.MPL2 COPYING.BSD COPYING.LGPL COPYING.README
 EIGEN_INSTALL_STAGING = YES
 EIGEN_INSTALL_TARGET = NO
-EIGEN_DEST_DIR = $(STAGING_DIR)/usr/include/eigen3
+EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO
 
-ifeq ($(BR2_PACKAGE_EIGEN_UNSUPPORTED_MODULES),y)
-define EIGEN_INSTALL_UNSUPPORTED_MODULES_CMDS
-	mkdir -p $(EIGEN_DEST_DIR)/unsupported
-	cp -a $(@D)/unsupported/Eigen $(EIGEN_DEST_DIR)/unsupported
-endef
-endif
+# Default Eigen CMake installs .pc file in /usr/share/pkgconfig
+# change it to /usr/lib/pkgconfig, to be consistent with other packages.
+EIGEN_CONF_OPTS = -DPKGCONFIG_INSTALL_DIR=/usr/lib/pkgconfig
 
-# Generate the .pc file at build time
-define EIGEN_BUILD_CMDS
-	sed -r -e 's,^Version: .*,Version: $(EIGEN_VERSION),' \
-		-e 's,^Cflags: .*,Cflags: -I$$\{prefix\}/include/eigen3,' \
-		-e 's,^prefix.*,prefix=/usr,' \
-		$(@D)/eigen3.pc.in >$(@D)/eigen3.pc
-endef
-
-# This package only consists of headers that need to be
-# copied over to the sysroot for compile time use
-define EIGEN_INSTALL_STAGING_CMDS
-	$(RM) -r $(EIGEN_DEST_DIR)
-	mkdir -p $(EIGEN_DEST_DIR)
-	cp -a $(@D)/Eigen $(EIGEN_DEST_DIR)
-	$(EIGEN_INSTALL_UNSUPPORTED_MODULES_CMDS)
-	$(INSTALL) -D -m 0644 $(@D)/eigen3.pc \
-		$(STAGING_DIR)/usr/lib/pkgconfig/eigen3.pc
-endef
-
-$(eval $(generic-package))
+$(eval $(cmake-package))