[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#18926: cmake-build-system should set CMAKE_INSTALL_LIBDIR and CMAKE_
From: |
宋文武 |
Subject: |
bug#18926: cmake-build-system should set CMAKE_INSTALL_LIBDIR and CMAKE_PREFIX_PATH |
Date: |
Mon, 03 Nov 2014 21:44:54 +0800 |
User-agent: |
Notmuch/0.18.1 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-unknown-linux-gnu) |
Ludovic Courtès <address@hidden> writes:
> 宋文武 <address@hidden> 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?
libftdi (not using GNUInstallDirs.cmake) handle this itself by
set LIB_SUFFIX, look like we have to set it specifically.
>
> 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?
no, this is for build phase.
>
>> 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?
yes, but now I find out that they can under both lib/cmake and share/cmake.
>
> 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?= <address@hidden>
> 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
thanks for the patch, I have apply it, but it does not work.
because libqtxdg have qtxdg-config.cmake in $out/share/cmake/qt5xdg.
after add CMAKE_PREFIX_PATH with:
(search-path-specification
(variable "CMAKE_PREFIX_PATH")
(directories '("")))
I could get liblxqt(use libqtxdg) build ok.
and by setting CMAKE_PREFIX_PATH, I think we can get rid of
CMAKE_PROGRAM_PATH, CMAKE_INCLUDE_PATH, and maybe CMAKE_LIBRARY_PATH.
see: http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_PREFIX_PATH.html.
>
>
>> I find this when packaging https://github.com/lxdg/libqtxdg.
>
> It’s 404.
oh, sorry, it's https://github.com/lxde/libqtxdg
and here is the packages I'm working on:
lxqt.scm
Description: Binary data