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)