summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2017-08-22 18:11:35 +0100
committerChristopher Baines <mail@cbaines.net>2017-09-01 22:00:44 +0100
commit81fe131e0fc3c1fcfa29c140071c8cc4cff7cd2f (patch)
tree98bd32036f6aeea8c62bc0906266e0e0ac1fcdae
parentebbb6301a34716dd8047d2105d668e192060342d (diff)
downloadguix-81fe131e0fc3c1fcfa29c140071c8cc4cff7cd2f.tar.gz
build: emacs-build-system: Make the install phase more helpful.
Modify the install phase to detect when nothing has been installed, and error
if this happens. This is preferable to continuing, and allowing the next phase
to fail.

Also, when nothing can be found to be installed, print out each file that was
considered, along with the regular expressions that were used to include and
exclude it.

* gnu/build/emacs-build-system.scm (install-file?): Add additional error
  checking and logging.
-rw-r--r--guix/build/emacs-build-system.scm45
1 files changed, 32 insertions, 13 deletions
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index bda699ddf4..202ce5392d 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -110,22 +110,41 @@ store in '.el' files."
 
   (define source (getcwd))
 
-  (define (install-file? file stat)
-    (let ((stripped-file (string-trim (string-drop file (string-length source)) #\/)))
-      (and (any (cut string-match <> stripped-file) include)
-           (not (any (cut string-match <> stripped-file) exclude)))))
+  (define* (install-file? file stat #:key verbose?)
+    (let* ((stripped-file (string-trim
+                           (string-drop file (string-length source)) #\/)))
+      (define (match-stripped-file action regex)
+        (let ((result (string-match regex stripped-file)))
+          (when (and result verbose?)
+                (format #t "info: ~A ~A as it matches \"~A\"\n"
+                        stripped-file action regex))
+          result))
+
+      (when verbose?
+            (format #t "info: considering installing ~A\n" stripped-file))
+
+      (and (any (cut match-stripped-file "included" <>) include)
+           (not (any (cut match-stripped-file "excluded" <>) exclude)))))
 
   (let* ((out (assoc-ref outputs "out"))
          (elpa-name-ver (store-directory->elpa-name-version out))
-         (target-directory (string-append out %install-suffix "/" elpa-name-ver)))
-    (for-each
-     (lambda (file)
-       (let* ((stripped-file (string-drop file (string-length source)))
-              (target-file (string-append target-directory stripped-file)))
-         (format #t "`~a' -> `~a'~%" file target-file)
-         (install-file file (dirname target-file))))
-     (find-files source install-file?)))
-  #t)
+         (target-directory (string-append out %install-suffix "/" elpa-name-ver))
+         (files-to-install (find-files source install-file?)))
+    (cond
+     (files-to-install
+      (for-each
+       (lambda (file)
+         (let* ((stripped-file (string-drop file (string-length source)))
+                (target-file (string-append target-directory stripped-file)))
+           (format #t "`~a' -> `~a'~%" file target-file)
+           (install-file file (dirname target-file))))
+       files-to-install)
+      #t)
+     (else
+      (format #t "error: No files found to install.\n")
+      (find-files source (lambda (file stat)
+                           (install-file? file stat #:verbose? #t)))
+      #f))))
 
 (define* (move-doc #:key outputs #:allow-other-keys)
   "Move info files from the ELPA package directory to the info directory."