Subject: bug#26559: closed (Re: bug#26559: [PATCH] build: emacs: Install only a subset of files.)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 23 May 2017 00:49:01 +0000

Your bug report

#26559: [PATCH] build: emacs: Install only a subset of files.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
26559: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=26559
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#26559: [PATCH] build: emacs: Install only a subset of files.
From: Arun Isaac <[email-masked]>
To: Alex Kost <[email-masked]>
Cc: [email-masked], Ludovic Courtès <[email-masked]>
Date: Tue, 23 May 2017 06:18:00 +0530
List-Id: <debbugs-submit.debbugs.gnu.org>

Pushed with a few minor changes!

Subject: [PATCH] build: emacs: Install only a subset of files.
From: Arun Isaac <[email-masked]>
To: [email-masked]
Cc: Arun Isaac <[email-masked]>
Date: Wed, 19 Apr 2017 13:05:25 +0530
List-Id: <debbugs-submit.debbugs.gnu.org>

* guix/build/emacs-build-system.scm (install): Install files matching
  #:include while excluding files matching #:exclude.
* guix/build-system/emacs.scm (emacs-build): Add keyword arguments #:include
  and #:exclude.
---
 guix/build-system/emacs.scm       |  6 ++++++
 guix/build/emacs-build-system.scm | 24 +++++++++++++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm
index a7982002b..e6c021c7e 100644
--- a/guix/build-system/emacs.scm
+++ b/guix/build-system/emacs.scm
@@ -83,6 +83,10 @@
                       (phases '(@ (guix build emacs-build-system)
                                   %standard-phases))
                       (outputs '("out"))
+                      (include ''(".*.el$" ".*.el.in$" "^dir$"
+                                 ".*.info$" ".*.texi$" ".*.texinfo$"
+                                 "doc/dir" "doc/*.info$" "doc/*.texi$" "doc/*.texinfo$"))
+                      (exclude ''("^.dir-locals.el$" "^test.el$" "^tests.el$" ".*-test.el$" ".*-tests.el$"))
                       (search-paths '())
                       (system (%current-system))
                       (guile #f)
@@ -108,6 +112,8 @@
                     #:tests? ,tests?
                     #:phases ,phases
                     #:outputs %outputs
+                    #:include ,include
+                    #:exclude ,exclude
                     #:search-paths ',(map search-path-specification->sexp
                                           search-paths)
                     #:inputs %build-inputs)))
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index 44e8b0d31..579596d72 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -28,6 +28,7 @@
   #:use-module (ice-9 rdelim)
   #:use-module (ice-9 regex)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 ftw)
   #:export (%standard-phases
             emacs-build))
 
@@ -93,14 +94,31 @@ store in '.el' files."
           (substitute-cmd))))
     #t))
 
-(define* (install #:key outputs #:allow-other-keys)
+(define* (install #:key outputs
+                  (include '(".*.el$" ".*.el.in$" "^dir$"
+                             ".*.info$" ".*.texi$" ".*.texinfo$"
+                             "^doc/dir" "^doc/*.info$" "^doc/*.texi$" "^doc/*.texinfo$"))
+                  (exclude '("^.dir-locals.el$" "^test.el$" "^tests.el$" ".*-test.el$" ".*-tests.el$"))
+                  #:allow-other-keys)
   "Install the package contents."
+
+  (define (include-file? file)
+    (and (any (cut string-match <> file) include)
+         (not (any (cut string-match <> file) exclude))))
+
   (let* ((out (assoc-ref outputs "out"))
          (elpa-name-ver (store-directory->elpa-name-version out))
          (src-dir (getcwd))
          (tgt-dir (string-append out %install-suffix "/" elpa-name-ver)))
-    (copy-recursively src-dir tgt-dir)
-    #t))
+    (ftw src-dir
+         (lambda (file stat flag)
+           (let ((stripped-file (substring file (string-length src-dir))))
+             (when (and (eq? flag 'regular)
+                        (include-file? (string-trim stripped-file #\/)))
+               (format #t "`~a' -> `~a'~%"
+                       file (string-append tgt-dir stripped-file))
+               (install-file file tgt-dir)))
+           #t))))
 
 (define* (move-doc #:key outputs #:allow-other-keys)
   "Move info files from the ELPA package directory to the info directory."
-- 
2.12.2