summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludovic.courtes@inria.fr>2019-09-10 19:04:51 +0200
committerLudovic Courtès <ludo@gnu.org>2019-09-11 00:09:39 +0200
commit489d16577e4a6ccc30f3719d9263900089edd842 (patch)
treec1318cde8ba173aeda49c686ba5f3c1ba20a855c
parent7e143375d3649f3c0bd4c13958b26c086f364647 (diff)
downloadguix-489d16577e4a6ccc30f3719d9263900089edd842.tar.gz
gnu: cmake: Add package variant that knows about X.509 certificates.
Fixes <https://bugs.gnu.org/37371>.

* gnu/packages/patches/cmake-curl-certificates.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/cmake.scm (cmake/fixed): New variable.
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/cmake.scm12
-rw-r--r--gnu/packages/patches/cmake-curl-certificates.patch40
3 files changed, 53 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index d76438ca63..3f32b9cbf2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -744,6 +744,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/clementine-use-openssl.patch		\
   %D%/packages/patches/clisp-remove-failing-test.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
+  %D%/packages/patches/cmake-curl-certificates.patch		\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %D%/packages/patches/combinatorial-blas-awpm.patch		\
   %D%/packages/patches/combinatorial-blas-io-fix.patch		\
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 7186cf98df..95f884b36d 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -164,6 +164,18 @@ and workspaces that can be used in the compiler environment of your choice.")
                    license:expat             ; cmjsoncpp is dual MIT/public domain
                    license:public-domain)))) ; cmlibarchive/archive_getdate.c
 
+(define-public cmake/fixed
+  ;; This is a variant of CMake that fixes X.509 certificate lookup:
+  ;; <https://issues.guix.gnu.org/issue/37371>.
+  (package
+    (inherit cmake)
+    (version (string-append (package-version cmake) "-1"))
+    (source (origin
+              (inherit (package-source cmake))
+              (patches
+               (append (search-patches "cmake-curl-certificates.patch")
+                       (origin-patches (package-source cmake))))))))
+
 (define-public emacs-cmake-mode
   (package
     (inherit cmake)
diff --git a/gnu/packages/patches/cmake-curl-certificates.patch b/gnu/packages/patches/cmake-curl-certificates.patch
new file mode 100644
index 0000000000..36252083f8
--- /dev/null
+++ b/gnu/packages/patches/cmake-curl-certificates.patch
@@ -0,0 +1,40 @@
+By default commands such as "ctest" would not look for certificates
+at all: <https://issues.guix.gnu.org/issue/37371>.
+
+This changes CMake such that commands honor SSL_CERT_FILE and SSL_CERT_DIR
+as well as /etc/ssl/certs.
+
+--- cmake-3.13.1/Source/cmCurl.cxx	2019-09-10 17:27:36.926907260 +0200
++++ cmake-3.13.1/Source/cmCurl.cxx	2019-09-10 17:52:35.475903919 +0200
+@@ -4,11 +4,8 @@
+ 
+ #include "cmThirdParty.h"
+ 
+-#if !defined(CMAKE_USE_SYSTEM_CURL) && !defined(_WIN32) &&                    \
+-  !defined(__APPLE__) && !defined(CURL_CA_BUNDLE) && !defined(CURL_CA_PATH)
+ #  define CMAKE_FIND_CAFILE
+ #  include "cmSystemTools.h"
+-#endif
+ 
+ // curl versions before 7.21.5 did not provide this error code
+ #if defined(LIBCURL_VERSION_NUM) && LIBCURL_VERSION_NUM < 0x071505
+@@ -29,6 +26,19 @@ std::string cmCurlSetCAInfo(::CURL* curl
+     ::CURLcode res = ::curl_easy_setopt(curl, CURLOPT_CAINFO, cafile);
+     check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
+   }
++
++  /* Honor the usual environment variables.  */
++  else if (cmSystemTools::GetEnv("SSL_CERT_FILE", e)) {
++    ::CURLcode res =
++      ::curl_easy_setopt(curl, CURLOPT_CAINFO, e.c_str());
++    check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
++  }
++  else if (cmSystemTools::GetEnv("SSL_CERT_DIR", e)) {
++    ::CURLcode res =
++      ::curl_easy_setopt(curl, CURLOPT_CAPATH, e.c_str());
++    check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
++  }
++
+ #ifdef CMAKE_FIND_CAFILE
+ #  define CMAKE_CAFILE_FEDORA "/etc/pki/tls/certs/ca-bundle.crt"
+   else if (cmSystemTools::FileExists(CMAKE_CAFILE_FEDORA, true)) {