gnu: packages: Use 'search-patches' everywhere.
[jackhill/guix/guix.git] / gnu / packages / cmake.scm
index 87a70de..1cb1e06 100644 (file)
@@ -1,6 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
+;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages cmake)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:select (bsd-3))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages backup)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages file)
-  #:use-module (srfi srfi-1))
+  #:use-module (gnu packages xml))
 
 (define-public cmake
   (package
     (name "cmake")
-    (version "2.8.12")
+    (version "3.3.2")
     (source (origin
              (method url-fetch)
-             (uri (string-append
-                   "http://www.cmake.org/files/v"
-                   (string-join (take (string-split version #\.) 2)
-                                ".")
-                   "/cmake-" version ".tar.gz"))
+             (uri (string-append "https://www.cmake.org/files/v"
+                                 (version-major+minor version)
+                                 "/cmake-" version ".tar.gz"))
              (sha256
-              (base32 "11q21vyrr6c6smyjy81k2k07zmn96ggjia9im9cxwvj0n88bm1fq"))
-             (patches (list (search-patch "cmake-fix-tests.patch")))))
+              (base32
+               "08pwy9ip9cgwgynhn5vrjw8drw29gijy1rmziq22n65zds6ifnp7"))
+             (patches (search-patches "cmake-fix-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
-       #:phases (alist-replace
-                 'configure
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let ((out (assoc-ref outputs "out")))
-                     ;; Replace "/bin/sh" by the right path in... a lot of
-                     ;; files.
-                     (substitute*
+       #:phases (alist-cons-before
+                 'configure 'patch-bin-sh
+                 (lambda _
+                   ;; Replace "/bin/sh" by the right path in... a lot of
+                   ;; files.
+                   (substitute*
                        '("Modules/CompilerId/Xcode-3.pbxproj.in"
                          "Modules/CompilerId/Xcode-1.pbxproj.in"
                          "Modules/CompilerId/Xcode-2.pbxproj.in"
                          "Source/cmGlobalXCodeGenerator.cxx"
                          "Source/CTest/cmCTestBatchTestHandler.cxx"
                          "Source/cmLocalUnixMakefileGenerator3.cxx"
+                         "Source/cmExecProgramCommand.cxx"
                          "Utilities/cmbzip2/Makefile-libbz2_so"
                          "Utilities/Release/release_cmake.cmake"
-                         "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
-                         "Tests/CMakeLists.txt")
-                       (("/bin/sh") (which "sh")))
-                     (zero? (system*
-                             "./configure"
-                             (string-append "--prefix=" out)
-                             ;; By default, the man pages and other docs land
-                             ;; in PREFIX/man and PREFIX/doc, but we want them
-                             ;; in share/{man,doc}.  Note that unlike
-                             ;; autoconf-generated configure scripts, cmake's
-                             ;; configure prepends "PREFIX/" to what we pass
-                             ;; to --mandir and --docdir.
-                             "--mandir=share/man"
-                             ,(string-append
-                               "--docdir=share/doc/cmake-"
-                               (string-join (take (string-split version #\.) 2)
-                                            "."))))))
-                 %standard-phases)))
+                         "Utilities/cmlibarchive/libarchive/\
+archive_write_set_format_shar.c"
+                         "Tests/CMakeLists.txt"
+                         "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
+                     (("/bin/sh") (which "sh"))))
+                 (alist-cons-before
+                  'configure 'set-paths
+                  (lambda _
+                    ;; Help cmake's bootstrap process to find system libraries
+                    (begin
+                      (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+                      (setenv "CMAKE_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+                      ;; Get verbose output from failed tests
+                      (setenv "CTEST_OUTPUT_ON_FAILURE" "TRUE")))
+                  (alist-replace
+                   'configure
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let ((out (assoc-ref outputs "out")))
+                       (zero? (system*
+                               "./configure"
+                               (string-append "--prefix=" out)
+                               "--system-libs"
+                               "--no-system-jsoncpp" ; not packaged yet
+                               ;; By default, the man pages and other docs land
+                               ;; in PREFIX/man and PREFIX/doc, but we want them
+                               ;; in share/{man,doc}.  Note that unlike
+                               ;; autoconf-generated configure scripts, cmake's
+                               ;; configure prepends "PREFIX/" to what we pass
+                               ;; to --mandir and --docdir.
+                               "--mandir=share/man"
+                               ,(string-append
+                                 "--docdir=share/doc/cmake-"
+                                 (version-major+minor version))))))
+                   %standard-phases)))))
     (inputs
-     `(("file" ,file)))
+     `(("file"       ,file)
+       ("curl"       ,curl)
+       ("zlib"       ,zlib)
+       ("expat"      ,expat)
+       ("bzip2"      ,bzip2)
+       ("libarchive" ,libarchive)))
+    (native-search-paths
+     (list (search-path-specification
+             (variable "CMAKE_PREFIX_PATH")
+             (files '("")))))
     (home-page "http://www.cmake.org/")
     (synopsis "Cross-platform build system")
     (description
      "CMake is a 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. CMake generates native makefiles
+and compiler independent configuration files.  CMake generates native makefiles
 and workspaces that can be used in the compiler environment of your choice.")
     (license bsd-3)))