summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/build-system/cmake.scm2
-rw-r--r--guix/build/cmake-build-system.scm30
2 files changed, 21 insertions, 11 deletions
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
index e09f165b97..1a5f4b6ad1 100644
--- a/guix/build-system/cmake.scm
+++ b/guix/build-system/cmake.scm
@@ -48,7 +48,7 @@
                      (search-paths '())
                      (make-flags ''())
                      (cmake (default-cmake))
-                     (out-of-source? #f)
+                     (out-of-source? #t)
                      (tests? #t)
                      (test-target "test")
                      (parallel-build? #t) (parallel-tests? #f)
diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm
index 449c609398..75998568bc 100644
--- a/guix/build/cmake-build-system.scm
+++ b/guix/build/cmake-build-system.scm
@@ -31,18 +31,28 @@
 ;;
 ;; Code:
 
-(define* (configure #:key outputs (configure-flags '())
+(define* (configure #:key outputs (configure-flags '()) (out-of-source? #t)
                     #:allow-other-keys)
   "Configure the given package."
-  (let ((out (assoc-ref outputs "out")))
-    (if (file-exists? "CMakeLists.txt")
-        (let ((args `(,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
-                      ,@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)))
-        (error "no CMakeLists.txt found"))))
+  (let* ((out        (assoc-ref outputs "out"))
+         (abs-srcdir (getcwd))
+         (srcdir     (if out-of-source?
+                         (string-append "../" (basename abs-srcdir))
+                         ".")))
+    (format #t "source directory: ~s (relative from build: ~s)~%"
+            abs-srcdir srcdir)
+    (when out-of-source?
+      (mkdir "../build")
+      (chdir "../build"))
+    (format #t "build directory: ~s~%" (getcwd))
+
+    (let ((args `(,srcdir
+                  ,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
+                  ,@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)))))
 
 (define* (check #:key (tests? #t) (parallel-tests? #t) (test-target "test")
                 #:allow-other-keys)