[Buildroot] [PATCH v5 2/3] package/cmake: add version 3.15.3 and move 3.9.6 to cmake-compat

James Hilliard james.hilliard1 at gmail.com
Sun Oct 13 17:31:50 UTC 2019


Retain cmake 3.9.6 for compatibility with toolchains without c++11 support.

Autodetect and build using latest compatible host-cmake.

Remove FindLibUV patch which is now upstream.

Resync/reformat rename cmake rootfile patch for 3.15.3 with git format-patch.

Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
Reviewed-by: Adrian Perez de Castro <aperez at igalia.com>

---
Changes v4 -> v5:
  - create separate cmake packages

Changes v3 -> v4:
  - retain support for version 3.8.2 for older toolchains

Changes v2 -> v3:
  - split minimum cmake off from cmake version bump

Changes v1 -> v2:
  - Set cmake version min to 3.10.
---
 package/Config.in.host                        |  1 +
 .../0001-rename_cmake_rootfile.patch          |  0
 ...k-uv-version-h-for-version-detection.patch |  0
 package/cmake-compat/Config.in.host           | 15 +++++
 package/cmake-compat/cmake-compat.hash        |  5 ++
 package/cmake-compat/cmake-compat.mk          | 62 +++++++++++++++++++
 .../cmake/0001-rename-cmake-rootfile.patch    | 43 +++++++++++++
 package/cmake/Config.in.host                  |  1 +
 package/cmake/cmake.hash                      |  6 +-
 package/cmake/cmake.mk                        |  4 +-
 support/dependencies/check-host-cmake.mk      |  4 ++
 11 files changed, 136 insertions(+), 5 deletions(-)
 rename package/{cmake => cmake-compat}/0001-rename_cmake_rootfile.patch (100%)
 rename package/{cmake => cmake-compat}/0002-FindLibUV-Also-check-uv-version-h-for-version-detection.patch (100%)
 create mode 100644 package/cmake-compat/Config.in.host
 create mode 100644 package/cmake-compat/cmake-compat.hash
 create mode 100644 package/cmake-compat/cmake-compat.mk
 create mode 100644 package/cmake/0001-rename-cmake-rootfile.patch

diff --git a/package/Config.in.host b/package/Config.in.host
index 93822304e9..0e0f028554 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -8,6 +8,7 @@ menu "Host utilities"
 	source "package/checkpolicy/Config.in.host"
 	source "package/checksec/Config.in.host"
 	source "package/cmake/Config.in.host"
+	source "package/cmake-compat/Config.in.host"
 	source "package/cramfs/Config.in.host"
 	source "package/cryptsetup/Config.in.host"
 	source "package/dbus-python/Config.in.host"
diff --git a/package/cmake/0001-rename_cmake_rootfile.patch b/package/cmake-compat/0001-rename_cmake_rootfile.patch
similarity index 100%
rename from package/cmake/0001-rename_cmake_rootfile.patch
rename to package/cmake-compat/0001-rename_cmake_rootfile.patch
diff --git a/package/cmake/0002-FindLibUV-Also-check-uv-version-h-for-version-detection.patch b/package/cmake-compat/0002-FindLibUV-Also-check-uv-version-h-for-version-detection.patch
similarity index 100%
rename from package/cmake/0002-FindLibUV-Also-check-uv-version-h-for-version-detection.patch
rename to package/cmake-compat/0002-FindLibUV-Also-check-uv-version-h-for-version-detection.patch
diff --git a/package/cmake-compat/Config.in.host b/package/cmake-compat/Config.in.host
new file mode 100644
index 0000000000..c82dc5b306
--- /dev/null
+++ b/package/cmake-compat/Config.in.host
@@ -0,0 +1,15 @@
+config BR2_PACKAGE_HOST_CMAKE_COMPAT
+	bool "host cmake-compat"
+	depends on !BR2_HOST_GCC_AT_LEAST_4_8
+	help
+	  CMake is an open-source, cross-platform family of tools
+	  designed to build, test and package software. CMake is used
+	  to control the software compilation process using simple
+	  platform and compiler independent configuration files, and
+	  generate native makefiles and workspaces that can be used in
+	  the compiler environment of your choice.
+
+	  This provides compatibility with toolchains that don't
+	  support c++11.
+
+	  http://www.cmake.org/
diff --git a/package/cmake-compat/cmake-compat.hash b/package/cmake-compat/cmake-compat.hash
new file mode 100644
index 0000000000..340c81b9c9
--- /dev/null
+++ b/package/cmake-compat/cmake-compat.hash
@@ -0,0 +1,5 @@
+# From https://cmake.org/files/v3.9/cmake-3.9.6-SHA-256.txt
+sha256 7410851a783a41b521214ad987bb534a7e4a65e059651a2514e6ebfc8f46b218  cmake-3.9.6.tar.gz
+
+# Locally calculated
+sha256 9d8604f7afc5564ceb9705ba121f5fba2782ce18d92902f3c6ed338228372170  Copyright.txt
diff --git a/package/cmake-compat/cmake-compat.mk b/package/cmake-compat/cmake-compat.mk
new file mode 100644
index 0000000000..a238a46a76
--- /dev/null
+++ b/package/cmake-compat/cmake-compat.mk
@@ -0,0 +1,62 @@
+################################################################################
+#
+# cmake-compat
+#
+################################################################################
+
+CMAKE_COMPAT_VERSION_MAJOR = 3.9
+CMAKE_COMPAT_VERSION = $(CMAKE_COMPAT_VERSION_MAJOR).6
+CMAKE_COMPAT_SITE = https://cmake.org/files/v$(CMAKE_COMPAT_VERSION_MAJOR)
+CMAKE_COMPAT_LICENSE = BSD-3-Clause
+CMAKE_COMPAT_LICENSE_FILES = Copyright.txt
+
+# CMake is a particular package:
+# * CMake can be built using the generic infrastructure or the cmake one.
+#   Since Buildroot has no requirement regarding the host system cmake
+#   program presence, it uses the generic infrastructure to build the
+#   host-cmake package, then the (target-)cmake package can be built
+#   using the cmake infrastructure;
+# * CMake bundles its dependencies within its sources. This is the
+#   reason why the host-cmake package has no dependencies:, whereas
+#   the (target-)cmake package has a lot of dependencies, using only
+#   the system-wide libraries instead of rebuilding and statically
+#   linking with the ones bundled into the CMake sources.
+
+CMAKE_COMPAT_DEPENDENCIES = zlib jsoncpp libcurl libarchive expat bzip2 xz libuv rhash
+
+CMAKE_COMPAT_CONF_OPTS = \
+	-DKWSYS_LFS_WORKS=TRUE \
+	-DKWSYS_CHAR_IS_SIGNED=TRUE \
+	-DCMAKE_USE_SYSTEM_LIBRARIES=1 \
+	-DCTEST_USE_XMLRPC=OFF \
+	-DBUILD_CursesDialog=OFF
+
+# Get rid of -I* options from $(HOST_CPPFLAGS) to prevent that a
+# header available in $(HOST_DIR)/include is used instead of a
+# CMake internal header, e.g. lzma* headers of the xz package
+HOST_CMAKE_COMPAT_CFLAGS = $(shell echo $(HOST_CFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%")
+HOST_CMAKE_COMPAT_CXXFLAGS = $(shell echo $(HOST_CXXFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%")
+
+define HOST_CMAKE_COMPAT_CONFIGURE_CMDS
+	(cd $(@D); \
+		$(HOST_CONFIGURE_OPTS) \
+		CFLAGS="$(HOST_CMAKE_COMPAT_CFLAGS)" \
+		./bootstrap --prefix=$(HOST_DIR) \
+			--parallel=$(PARALLEL_JOBS) -- \
+			-DCMAKE_C_FLAGS="$(HOST_CMAKE_COMPAT_CFLAGS)" \
+			-DCMAKE_CXX_FLAGS="$(HOST_CMAKE_COMPAT_CXXFLAGS)" \
+			-DCMAKE_EXE_LINKER_FLAGS="$(HOST_LDFLAGS)" \
+			-DCMAKE_USE_OPENSSL:BOOL=OFF \
+			-DBUILD_CursesDialog=OFF \
+	)
+endef
+
+define HOST_CMAKE_COMPAT_BUILD_CMDS
+	$(HOST_MAKE_ENV) $(MAKE) -C $(@D)
+endef
+
+define HOST_CMAKE_COMPAT_INSTALL_CMDS
+	$(HOST_MAKE_ENV) $(MAKE) -C $(@D) install/fast
+endef
+
+$(eval $(host-generic-package))
diff --git a/package/cmake/0001-rename-cmake-rootfile.patch b/package/cmake/0001-rename-cmake-rootfile.patch
new file mode 100644
index 0000000000..29d7df2d29
--- /dev/null
+++ b/package/cmake/0001-rename-cmake-rootfile.patch
@@ -0,0 +1,43 @@
+From f7291b1decd24a4e9530f98d7723fb55f38223ea Mon Sep 17 00:00:00 2001
+From: Davide Viti <zinosat at tiscali.it>
+Date: Thu, 14 Jul 2016 10:14:59 +0100
+Subject: [PATCH] rename cmake rootfile
+
+ctest fails on the target, because it cannot find CMake.cmake inside
+CMAKE_DATA_DIR (typically set to "/usr/share/cmake-3.0"): all *.cmake
+files are removed at build time via the target-finalize rule.
+
+This buildroot-specific patch makes sure ctest looks also for
+"Modules/CMake.cmake.ctest" before complaining
+
+[Vincent: tweak patch for 3.6.3]
+[James: tweak patch for 3.15.3]
+
+Signed-off-by: Davide Viti <zinosat at tiscali.it>
+Signed-off-by: Vicente Olivert Riera <Vincent.Riera at imgtec.com>
+Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
+---
+ Source/cmake.cxx | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/Source/cmake.cxx b/Source/cmake.cxx
+index 3772f09985..c317e4af38 100644
+--- a/Source/cmake.cxx
++++ b/Source/cmake.cxx
+@@ -1009,7 +1009,12 @@ int cmake::AddCMakePaths()
+     "Path to cpack program executable.", cmStateEnums::INTERNAL);
+ #endif
+   if (!cmSystemTools::FileExists(
+-        (cmSystemTools::GetCMakeRoot() + "/Modules/CMake.cmake"))) {
++        (cmSystemTools::GetCMakeRoot() + "/Modules/CMake.cmake")) &&
++        !cmSystemTools::FileExists(
++          (cmSystemTools::GetCMakeRoot()+"/Modules/CMake.cmake.ctest")
++        )
++     )
++  {
+     // couldn't find modules
+     cmSystemTools::Error(
+       "Could not find CMAKE_ROOT !!!\n"
+-- 
+2.20.1
+
diff --git a/package/cmake/Config.in.host b/package/cmake/Config.in.host
index b2e210ee2c..0a404493b0 100644
--- a/package/cmake/Config.in.host
+++ b/package/cmake/Config.in.host
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_HOST_CMAKE
 	bool "host cmake"
+	depends on BR2_HOST_GCC_AT_LEAST_4_8
 	help
 	  CMake is an open-source, cross-platform family of tools
 	  designed to build, test and package software. CMake is used
diff --git a/package/cmake/cmake.hash b/package/cmake/cmake.hash
index 340c81b9c9..0fdf12cc93 100644
--- a/package/cmake/cmake.hash
+++ b/package/cmake/cmake.hash
@@ -1,5 +1,5 @@
-# From https://cmake.org/files/v3.9/cmake-3.9.6-SHA-256.txt
-sha256 7410851a783a41b521214ad987bb534a7e4a65e059651a2514e6ebfc8f46b218  cmake-3.9.6.tar.gz
+# From https://cmake.org/files/v3.15/cmake-3.15.3-SHA-256.txt
+sha256 13958243a01365b05652fa01b21d40fa834f70a9e30efa69c02604e64f58b8f5  cmake-3.15.3.tar.gz
 
 # Locally calculated
-sha256 9d8604f7afc5564ceb9705ba121f5fba2782ce18d92902f3c6ed338228372170  Copyright.txt
+sha256 dc628fb936a5d229296d42083f9a8218aa32204c016919e784404c9ec58776e9  Copyright.txt
diff --git a/package/cmake/cmake.mk b/package/cmake/cmake.mk
index e816963089..2302d3f2cb 100644
--- a/package/cmake/cmake.mk
+++ b/package/cmake/cmake.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-CMAKE_VERSION_MAJOR = 3.9
-CMAKE_VERSION = $(CMAKE_VERSION_MAJOR).6
+CMAKE_VERSION_MAJOR = 3.15
+CMAKE_VERSION = $(CMAKE_VERSION_MAJOR).3
 CMAKE_SITE = https://cmake.org/files/v$(CMAKE_VERSION_MAJOR)
 CMAKE_LICENSE = BSD-3-Clause
 CMAKE_LICENSE_FILES = Copyright.txt
diff --git a/support/dependencies/check-host-cmake.mk b/support/dependencies/check-host-cmake.mk
index 5604713de6..4a1491d646 100644
--- a/support/dependencies/check-host-cmake.mk
+++ b/support/dependencies/check-host-cmake.mk
@@ -10,5 +10,9 @@ BR2_CMAKE ?= $(call suitable-host-package,cmake,\
 	$(BR2_CMAKE_VERSION_MIN) $(BR2_CMAKE_CANDIDATES))
 ifeq ($(BR2_CMAKE),)
 BR2_CMAKE = $(HOST_DIR)/bin/cmake
+ifeq ($(BR2_HOST_GCC_AT_LEAST_4_8),)
+BR2_CMAKE_HOST_DEPENDENCY = host-cmake-compat
+else
 BR2_CMAKE_HOST_DEPENDENCY = host-cmake
 endif
+endif
-- 
2.20.1




More information about the buildroot mailing list