0100-cmake-backport-from-LEDE-17.01-d1e0cc8cd5b460df47a2316653c273e27ebf93b1.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. From: Matthias Schiffer <mschiffer@universe-factory.net>
  2. Date: Tue, 9 May 2017 18:37:17 +0200
  3. Subject: cmake: backport from LEDE 17.01 d1e0cc8cd5b460df47a2316653c273e27ebf93b1
  4. diff --git a/include/cmake.mk b/include/cmake.mk
  5. index 4207a4dcee8444ac1472b2b78a068e5ed811c7ae..5a403cbf41e2bbd6bdb843492639a01aff8cf75b 100644
  6. --- a/include/cmake.mk
  7. +++ b/include/cmake.mk
  8. @@ -1,10 +1,15 @@
  9. +cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2))
  10. +
  11. PKG_INSTALL:=1
  12. ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
  13. MAKE_FLAGS+=VERBOSE=1
  14. endif
  15. -CMAKE_SOURCE_DIR:=.
  16. +CMAKE_BINARY_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR))
  17. +CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)
  18. +HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)
  19. +MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .)
  20. ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
  21. cmake_tool=$(TOOLCHAIN_DIR)/bin/$(1)
  22. @@ -18,10 +23,7 @@ ifeq ($(CONFIG_CCACHE),)
  23. CMAKE_C_COMPILER_ARG1:=
  24. CMAKE_CXX_COMPILER_ARG1:=
  25. else
  26. - CCACHE:=$(shell which ccache)
  27. - ifeq ($(CCACHE),)
  28. - CCACHE:=$(STAGING_DIR_HOST)/bin/ccache
  29. - endif
  30. + CCACHE:=$(STAGING_DIR_HOST)/bin/ccache
  31. CMAKE_C_COMPILER:=$(CCACHE)
  32. CMAKE_C_COMPILER_ARG1:=$(TARGET_CC_NOCACHE)
  33. CMAKE_CXX_COMPILER:=$(CCACHE)
  34. @@ -31,14 +33,15 @@ CMAKE_AR:=$(call cmake_tool,$(TARGET_AR))
  35. CMAKE_NM:=$(call cmake_tool,$(TARGET_NM))
  36. CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB))
  37. -CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR);$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT))
  38. -CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR_HOST)
  39. +CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT))
  40. +CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOST)
  41. CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions
  42. define Build/Configure/Default
  43. - (cd $(PKG_BUILD_DIR); \
  44. + mkdir -p $(CMAKE_BINARY_DIR)
  45. + (cd $(CMAKE_BINARY_DIR); \
  46. CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
  47. - CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
  48. + CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)" \
  49. LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
  50. cmake \
  51. -DCMAKE_SYSTEM_NAME=Linux \
  52. @@ -97,10 +100,14 @@ define Host/Configure/Default
  53. -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
  54. -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
  55. -DCMAKE_STRIP=: \
  56. - -DCMAKE_INSTALL_PREFIX=$(STAGING_DIR_HOST) \
  57. - -DCMAKE_PREFIX_PATH=$(STAGING_DIR_HOST) \
  58. + -DCMAKE_INSTALL_PREFIX=$(HOST_BUILD_PREFIX) \
  59. + -DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \
  60. -DCMAKE_SKIP_RPATH=TRUE \
  61. $(CMAKE_HOST_OPTIONS) \
  62. - $(CMAKE_SOURCE_DIR) \
  63. + $(HOST_CMAKE_SOURCE_DIR) \
  64. )
  65. endef
  66. +
  67. +MAKE_FLAGS += \
  68. + CMAKE_COMMAND='$$(if $$(CMAKE_DISABLE_$$@),:,$(STAGING_DIR_HOST)/bin/cmake)' \
  69. + CMAKE_DISABLE_cmake_check_build_system=1
  70. diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile
  71. index 08e2b028150dd4f496e3a8ebccf27bd49b6937c2..e14cd7c4b2d5bc92d50a66f1c95599b5049db10d 100644
  72. --- a/tools/cmake/Makefile
  73. +++ b/tools/cmake/Makefile
  74. @@ -1,5 +1,5 @@
  75. #
  76. -# Copyright (C) 2006-2014 OpenWrt.org
  77. +# Copyright (C) 2006-2016 OpenWrt.org
  78. #
  79. # This is free software, licensed under the GNU General Public License v2.
  80. # See /LICENSE for more information.
  81. @@ -7,11 +7,12 @@
  82. include $(TOPDIR)/rules.mk
  83. PKG_NAME:=cmake
  84. -PKG_VERSION:=2.8.12.2
  85. +PKG_VERSION:=3.7.1
  86. PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
  87. -PKG_SOURCE_URL:=http://www.cmake.org/files/v2.8/
  88. -PKG_MD5SUM:=17c6513483d23590cbce6957ec6d1e66
  89. +PKG_SOURCE_URL:=https://cmake.org/files/v3.7/ \
  90. + https://fossies.org/linux/misc/
  91. +PKG_MD5SUM:=d031d5a06e9f1c5367cdfc56fbd2a1c8
  92. HOST_BUILD_PARALLEL:=1
  93. HOST_CONFIGURE_PARALLEL:=1
  94. @@ -21,7 +22,11 @@ include $(INCLUDE_DIR)/host-build.mk
  95. HOST_CONFIGURE_VARS :=
  96. HOST_CONFIGURE_ARGS := \
  97. - --prefix=$(STAGING_DIR_HOST) \
  98. - $(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)")
  99. + $(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)") \
  100. + --prefix=$(STAGING_DIR_HOST)
  101. +
  102. +define Host/Configure
  103. + $(call Host/Configure/Default,$(1),$(2) MAKEFLAGS="$(HOST_JOBS)" CXXFLAGS="$(HOST_CFLAGS)",$(3))
  104. +endef
  105. $(eval $(call HostBuild))
  106. diff --git a/tools/cmake/patches/100-disable_qt_tests.patch b/tools/cmake/patches/100-disable_qt_tests.patch
  107. index 3d44dac53f27c5cf2b1c1c03689255c0825a65b9..6f28c435e018f53fedc3ba840298b6aaf8a07e9b 100644
  108. --- a/tools/cmake/patches/100-disable_qt_tests.patch
  109. +++ b/tools/cmake/patches/100-disable_qt_tests.patch
  110. @@ -1,8 +1,8 @@
  111. --- a/Tests/RunCMake/CMakeLists.txt
  112. +++ b/Tests/RunCMake/CMakeLists.txt
  113. -@@ -101,16 +101,6 @@
  114. - add_RunCMake_test(TargetPolicies)
  115. - add_RunCMake_test(alias_targets)
  116. +@@ -225,15 +225,6 @@ add_RunCMake_test(no_install_prefix)
  117. + add_RunCMake_test(configure_file)
  118. + add_RunCMake_test(CTestTimeoutAfterMatch)
  119. -find_package(Qt4 QUIET)
  120. -find_package(Qt5Core QUIET)
  121. @@ -10,21 +10,20 @@
  122. - add_RunCMake_test(IncompatibleQt)
  123. -endif()
  124. -if (QT4_FOUND)
  125. -- set(ObsoleteQtMacros_ARGS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
  126. -- add_RunCMake_test(ObsoleteQtMacros)
  127. +- add_RunCMake_test(ObsoleteQtMacros -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
  128. -endif()
  129. -
  130. - if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
  131. - add_RunCMake_test(include_external_msproject)
  132. - add_RunCMake_test(SolutionGlobalSections)
  133. + find_package(PkgConfig QUIET)
  134. + if(PKG_CONFIG_FOUND)
  135. + add_RunCMake_test(FindPkgConfig)
  136. --- a/Tests/CMakeLists.txt
  137. +++ b/Tests/CMakeLists.txt
  138. -@@ -262,10 +262,6 @@
  139. +@@ -393,10 +393,6 @@ if(BUILD_TESTING)
  140. list(APPEND TEST_BUILD_DIRS ${CMake_TEST_INSTALL_PREFIX})
  141. - if(NOT QT4_FOUND)
  142. -- find_package(Qt4)
  143. +- find_package(Qt4 QUIET)
  144. - endif()
  145. -
  146. if(QT4_FOUND)
  147. diff --git a/tools/cmake/patches/110-freebsd-compat.patch b/tools/cmake/patches/110-freebsd-compat.patch
  148. index d4133b9049059f1b1cfa0c63be1308b4c235c981..c1d4a274d61c3c0b81288ba4260abd34ce76063c 100644
  149. --- a/tools/cmake/patches/110-freebsd-compat.patch
  150. +++ b/tools/cmake/patches/110-freebsd-compat.patch
  151. @@ -19,11 +19,9 @@ Change-Id: I3b91ed7ac0e6878035aee202b3336c536cc6d2ff
  152. Source/kwsys/SystemInformation.cxx | 9 +++++++++
  153. 1 file changed, 9 insertions(+)
  154. -diff --git a/Source/kwsys/SystemInformation.cxx b/Source/kwsys/SystemInformation.cxx
  155. -index 7c31f3a..2672730 100644
  156. --- a/Source/kwsys/SystemInformation.cxx
  157. +++ b/Source/kwsys/SystemInformation.cxx
  158. -@@ -88,6 +88,15 @@ typedef int siginfo_t;
  159. +@@ -89,6 +89,15 @@ typedef int siginfo_t;
  160. # include <ifaddrs.h>
  161. # define KWSYS_SYSTEMINFORMATION_IMPLEMENT_FQDN
  162. # endif
  163. @@ -38,7 +36,4 @@ index 7c31f3a..2672730 100644
  164. +# endif
  165. #endif
  166. - #if defined(__OpenBSD__) || defined(__NetBSD__)
  167. ---
  168. -1.7.10.4
  169. -
  170. + #if defined(KWSYS_SYS_HAS_MACHINE_CPU_H)
  171. diff --git a/tools/cmake/patches/120-alpine_musl-compat.patch b/tools/cmake/patches/120-alpine_musl-compat.patch
  172. new file mode 100644
  173. index 0000000000000000000000000000000000000000..ae93201e53659514e2a63fc813622302bde5be59
  174. --- /dev/null
  175. +++ b/tools/cmake/patches/120-alpine_musl-compat.patch
  176. @@ -0,0 +1,17 @@
  177. +--- a/Utilities/cmjsoncpp/include/json/assertions.h
  178. ++++ b/Utilities/cmjsoncpp/include/json/assertions.h
  179. +@@ -6,12 +6,12 @@
  180. + #ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED
  181. + #define CPPTL_JSON_ASSERTIONS_H_INCLUDED
  182. +
  183. ++#include <stdlib.h>
  184. ++
  185. + #if !defined(JSON_IS_AMALGAMATION)
  186. + #include "config.h"
  187. + #endif // if !defined(JSON_IS_AMALGAMATION)
  188. +
  189. +-#include <stdlib.h>
  190. +-
  191. + #if JSON_USE_EXCEPTION
  192. + #include <stdexcept>
  193. + #define JSON_ASSERT(condition) \
  194. diff --git a/tools/cmake/patches/130-libarchive-fix-libressl-compat.patch b/tools/cmake/patches/130-libarchive-fix-libressl-compat.patch
  195. new file mode 100644
  196. index 0000000000000000000000000000000000000000..a56ac2ed0c96dd90707e582e83320fd408f90dab
  197. --- /dev/null
  198. +++ b/tools/cmake/patches/130-libarchive-fix-libressl-compat.patch
  199. @@ -0,0 +1,22 @@
  200. +--- a/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h
  201. ++++ b/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h
  202. +@@ -28,7 +28,7 @@
  203. + #include <openssl/evp.h>
  204. + #include <openssl/opensslv.h>
  205. +
  206. +-#if OPENSSL_VERSION_NUMBER < 0x10100000L
  207. ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
  208. + #include <stdlib.h> /* malloc, free */
  209. + #include <string.h> /* memset */
  210. + static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
  211. +--- a/Utilities/cmlibarchive/libarchive/archive_openssl_hmac_private.h
  212. ++++ b/Utilities/cmlibarchive/libarchive/archive_openssl_hmac_private.h
  213. +@@ -28,7 +28,7 @@
  214. + #include <openssl/hmac.h>
  215. + #include <openssl/opensslv.h>
  216. +
  217. +-#if OPENSSL_VERSION_NUMBER < 0x10100000L
  218. ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
  219. + #include <stdlib.h> /* malloc, free */
  220. + #include <string.h> /* memset */
  221. + static inline HMAC_CTX *HMAC_CTX_new(void)
  222. diff --git a/tools/cmake/patches/140-curl-fix-libressl-linking.patch b/tools/cmake/patches/140-curl-fix-libressl-linking.patch
  223. new file mode 100644
  224. index 0000000000000000000000000000000000000000..5b57172eb4a147d25be01b105dd49599f1add4e6
  225. --- /dev/null
  226. +++ b/tools/cmake/patches/140-curl-fix-libressl-linking.patch
  227. @@ -0,0 +1,32 @@
  228. +From: Jo-Philipp Wich <jo@mein.io>
  229. +Date: Wed, 11 Jan 2017 03:36:04 +0100
  230. +Subject: [PATCH] cmcurl: link librt
  231. +
  232. +When cmake is linked against LibreSSL, there might be an indirect
  233. +dependency on librt on certain systems if LibreSSL's libcrypto uses
  234. +clock_gettime() from librt:
  235. +
  236. + [ 28%] Linking C executable LIBCURL
  237. + .../lib/libcrypto.a(getentropy_linux.o): In function `getentropy_fallback':
  238. + getentropy_linux.c:(.text+0x16d): undefined reference to `clock_gettime'
  239. + getentropy_linux.c:(.text+0x412): undefined reference to `clock_gettime'
  240. + collect2: error: ld returned 1 exit status
  241. + make[5]: *** [Utilities/cmcurl/LIBCURL] Error 1
  242. +
  243. +Modify the cmcurl CMakeLists.txt to check for clock_gettime() in librt
  244. +and unconditionally link the rt library when the symbol is found.
  245. +
  246. +Signed-off-by: Jo-Philipp Wich <jo@mein.io>
  247. +--- a/Utilities/cmcurl/CMakeLists.txt
  248. ++++ b/Utilities/cmcurl/CMakeLists.txt
  249. +@@ -362,6 +362,10 @@ set(HAVE_LIBSSL OFF)
  250. + if(CMAKE_USE_OPENSSL)
  251. + find_package(OpenSSL)
  252. + if(OPENSSL_FOUND)
  253. ++ check_library_exists("rt" clock_gettime "" HAVE_LIBRT)
  254. ++ if(HAVE_LIBRT)
  255. ++ list(APPEND OPENSSL_LIBRARIES rt)
  256. ++ endif()
  257. + list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES})
  258. + set(USE_OPENSSL ON)
  259. + set(HAVE_LIBCRYPTO ON)
  260. diff --git a/tools/cmake/patches/150-bootstrap_parallel_make_flag.patch b/tools/cmake/patches/150-bootstrap_parallel_make_flag.patch
  261. new file mode 100644
  262. index 0000000000000000000000000000000000000000..6970b83b327c348d31d74dc5facba4fad46fe700
  263. --- /dev/null
  264. +++ b/tools/cmake/patches/150-bootstrap_parallel_make_flag.patch
  265. @@ -0,0 +1,14 @@
  266. +--- a/bootstrap
  267. ++++ b/bootstrap
  268. +@@ -958,7 +958,10 @@ int main(){ printf("1%c", (char)0x0a); r
  269. + ' > "test.c"
  270. + cmake_original_make_flags="${cmake_make_flags}"
  271. + if [ "x${cmake_parallel_make}" != "x" ]; then
  272. +- cmake_make_flags="${cmake_make_flags} -j ${cmake_parallel_make}"
  273. ++ case "$cmake_paralle_make" in
  274. ++ [0-9]*) cmake_parallel_make="-j ${cmake_parallel_make}";;
  275. ++ esac
  276. ++ cmake_make_flags="${cmake_make_flags} ${cmake_parallel_make}"
  277. + fi
  278. + for a in ${cmake_make_processors}; do
  279. + if [ -z "${cmake_make_processor}" ] && cmake_try_make "${a}" "${cmake_make_flags}" >> ../cmake_bootstrap.log 2>&1; then