Subject: bug#18926: cmake-build-system should set CMAKE_INSTALL_LIBDIR and CMAKE_PREFIX_PATH

From: [email-masked] (Ludovic Courtès)
Date: Sun, 02 Nov 2014 23:55:49 +0100

宋文武 <[email-masked]> skribis:

> if CMAKE_INSTALL_LIBDIR not set to `lib`, GNUInstallDirs.cmake will install
> libraries files to $out/lib64.

I found several CMake-built libraries on x86_64 (graphite2, openjpeg,
qjson) that all use lib/, not lib64/.

Then I found one counterexample, libftdi; however, setting
CMAKE_INSTALL_LIBDIR=lib doesn’t make any different: it still installs
libraries in $out/lib64.  Any idea?

Here’s the patch I tried:

diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm
index 74b4f01..b1598dd 100644
--- a/guix/build/cmake-build-system.scm
+++ b/guix/build/cmake-build-system.scm
@@ -53,6 +53,8 @@
                                              build-type))
                         '())
                   ,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
+                  ;; Install libraries to $prefix/lib, not $prefix/lib64.
+                  "-DCMAKE_INSTALL_LIBDIR=lib"
                   ;; add input libraries to rpath
                   "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
                   ;; add (other) libraries of the project itself to rpath

According to <http://www.cmake.org/Wiki/CMake_Useful_Variables>,
LIBRARY_OUTPUT_PATH might be better for this, no?

> if CMAKE_PREFIX_PATH not set to PATH of `inputs`, cmake will unable to
> find cmake modules of inputs.

You’re talking about .cmake files, right?

Could you try the attached patch and report back?

>From 536c143997fa146dc77d6e8defc24032452e5a4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <[email-masked]>
Date: Sun, 2 Nov 2014 23:54:28 +0100
Subject: [PATCH] gnu: cmake: Add search paths for
 CMAKE_{INCLUDE,LIBRARY,MODULE}_PATH.

* gnu/packages/cmake.scm (cmake)[native-search-paths]: New field.
* guix/build/cmake-build-system.scm (configure): Remove 'setenv' calls
  for "CMAKE_LIBRARY_PATH" and "CMAKE_INCLUDE_PATH".
---
 gnu/packages/cmake.scm            | 19 +++++++++++++++++++
 guix/build/cmake-build-system.scm |  2 --
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 63805ef..e0349be 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -100,6 +100,25 @@
        ("expat"      ,expat)
        ("bzip2"      ,bzip2)
        ("libarchive" ,libarchive)))
+
+    (native-search-paths
+     (list
+      ;; Search path used by the 'FIND_XXX' functions.
+      (search-path-specification
+       (variable "CMAKE_PROGRAM_PATH")
+       (directories '("bin")))
+      (search-path-specification
+       (variable "CMAKE_INCLUDE_PATH")
+       (directories '("include")))
+      (search-path-specification
+       (variable "CMAKE_LIBRARY_PATH")
+       (directories '("lib" "lib64")))
+
+      ;; Search path used by 'FIND_PACKAGE' and 'INCLUDE'.
+      (search-path-specification
+       (variable "CMAKE_MODULE_PATH")
+       (directories '("lib/cmake")))))
+
     (home-page "http://www.cmake.org/")
     (synopsis "Cross-platform build system")
     (description
diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm
index b1598dd..766797e 100644
--- a/guix/build/cmake-build-system.scm
+++ b/guix/build/cmake-build-system.scm
@@ -60,8 +60,6 @@
                   ;; add (other) libraries of the project itself to rpath
                   ,(string-append "-DCMAKE_INSTALL_RPATH=" out "/lib")
                   ,@configure-flags)))
-      (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
-      (setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH"))
       (format #t "running 'cmake' with arguments ~s~%" args)
       (zero? (apply system* "cmake" args)))))
 
-- 
2.1.2

> I find this when packaging https://github.com/lxdg/libqtxdg.

It’s 404.

Thanks,
Ludo’.