about summary refs log tree commit diff
path: root/build-aux
diff options
context:
space:
mode:
authorArun Isaac2022-01-10 16:36:09 +0530
committerArun Isaac2022-01-10 23:32:22 +0530
commit670b0b68602288b44ad459230be4f701140bca66 (patch)
treef317e2b922da71e214109386d53d310d1a461414 /build-aux
parent51c12b7e58685b70e7cfd9612dac403cf9ee845c (diff)
downloadccwl-670b0b68602288b44ad459230be4f701140bca66.tar.gz
ccwl-670b0b68602288b44ad459230be4f701140bca66.tar.lz
ccwl-670b0b68602288b44ad459230be4f701140bca66.zip
Migrate to hand-written Makefiles.
The autotools are really overkill for a simple Guile project like
ccwl.

* .gitignore: Delete autotool generated files. Add Makefile.include.
* Makefile.am, Makefile, build-aux/distcheck.scm, configure,
configure.ac, configure.scm: New files.
* NEWS: Rename to NEWS.org. Remove Emacs file-local variable to use
org mode.
* bootstrap.sh: Delete file.
* build-aux/generate-cwl-output.sh.in: Rename to ...
* build-aux/generate-cwl-output.sh: ... this. Replace autoconf
variables for cwltool and sed.
* build-aux/test-driver.scm.in: Rename to ...
* build-aux/test-driver.scm: ... this. Do not import (ice-9
getopt-long).
(%options): Delete variable.
(my-gnu-runner): Do not write to log or trs ports.
Accept test files as command-line arguments. Update invocation of
my-gnu-runner. Print summary of results.
* guix.scm (ccwl)[native-inputs]: Remove autoconf and automake.
* pre-inst-env.in: Rename to ...
* pre-inst-env: ... this. Replace autoconf variables for guile,
abs_top_builddir and abs_top_srcdir.
* scripts/ccwl.in: Rename to ...
* scripts/ccwl: ... this. Replace autoconf variable for guile.
Diffstat (limited to 'build-aux')
-rw-r--r--build-aux/distcheck.scm76
-rwxr-xr-xbuild-aux/generate-cwl-output.sh (renamed from build-aux/generate-cwl-output.sh.in)8
-rw-r--r--build-aux/test-driver.scm (renamed from build-aux/test-driver.scm.in)66
3 files changed, 109 insertions, 41 deletions
diff --git a/build-aux/distcheck.scm b/build-aux/distcheck.scm
new file mode 100644
index 0000000..4cca909
--- /dev/null
+++ b/build-aux/distcheck.scm
@@ -0,0 +1,76 @@
+;;; ccwl --- Concise Common Workflow Language
+;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
+;;;
+;;; This file is part of ccwl.
+;;;
+;;; ccwl is free software: you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; ccwl is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with ccwl.  If not, see <https://www.gnu.org/licenses/>.
+
+(import (rnrs io ports)
+        (srfi srfi-26)
+        (ice-9 eval-string)
+        (ice-9 match)
+        (ice-9 popen)
+        (guix gexp)
+        (guix packages)
+        (guix scripts)
+        (guix store))
+
+(define (call-with-input-pipe command proc)
+  "Call PROC with input pipe to COMMAND. COMMAND is a list of program
+arguments."
+  (match command
+    ((prog args ...)
+     (let ((port #f))
+       (dynamic-wind
+         (lambda ()
+           (set! port (apply open-pipe* OPEN_READ prog args)))
+         (cut proc port)
+         (cut close-pipe port))))))
+
+(define (call-with-archive-file archive file proc)
+  "Call PROC with port reading FILE in lzip compressed tar ARCHIVE."
+  (call-with-input-pipe (list "tar" "--extract" "--to-stdout"
+                              "--file" archive
+                              (string-append (basename archive ".tar.lz")
+                                             "/" file))
+    proc))
+
+(define (package-in-archive dist-archive)
+  "Return the package object in guix.scm of DIST-ARCHIVE."
+  (call-with-archive-file dist-archive "guix.scm"
+    (lambda (port)
+      (eval-string (get-string-all port)
+                   #:file (string-append (getcwd) "/guix.scm")))))
+
+(define (check-build dist-archive)
+  "Check if package in DIST-ARCHIVE builds correctly."
+  (run-with-store (open-connection)
+    (build-package
+     (package
+       (inherit (package-in-archive dist-archive))
+       (source (local-file dist-archive))))))
+
+(define (check-news version dist-archive)
+  "Check if VERSION appears in the first 200 characters of the news
+file in DIST-ARCHIVE."
+  (call-with-archive-file dist-archive "NEWS.org"
+    (lambda (port)
+      (unless (string-contains (get-string-n port 200)
+                               version)
+        (error "NEWS.org does not mention current version:" version)))))
+
+(match (program-arguments)
+  ((_ version dist-archive)
+   (check-build dist-archive)
+   (check-news version dist-archive)))
diff --git a/build-aux/generate-cwl-output.sh.in b/build-aux/generate-cwl-output.sh
index 4f92cc6..b5bed39 100755
--- a/build-aux/generate-cwl-output.sh.in
+++ b/build-aux/generate-cwl-output.sh
@@ -35,8 +35,8 @@ output_file=$(basename $cwl_file .cwl).out
 
     # On Guix, workflows involving gcc need to preserve the
     # LIBRARY_PATH environment variable.
-    @CWLTOOL@ --preserve-environment LIBRARY_PATH --outdir doc/cwl-output $cwl_file "$@" 2>&1 \
-        | @SED@ '1,2d' \
-        | @SED@ 's|\[1;30mINFO\[0m ||g' \
-        | @SED@ "s|$(pwd)/doc/cwl-output|/home/manimekalai|g"
+    cwltool --preserve-environment LIBRARY_PATH --outdir doc/cwl-output $cwl_file "$@" 2>&1 \
+        | sed '1,2d' \
+        | sed 's|\[1;30mINFO\[0m ||g' \
+        | sed "s|$(pwd)/doc/cwl-output|/home/manimekalai|g"
 } > doc/$output_file
diff --git a/build-aux/test-driver.scm.in b/build-aux/test-driver.scm
index 1407fc8..8fc5236 100644
--- a/build-aux/test-driver.scm.in
+++ b/build-aux/test-driver.scm
@@ -1,5 +1,5 @@
 ;;; ccwl --- Concise Common Workflow Language
-;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021, 2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of ccwl.
 ;;;
@@ -26,21 +26,10 @@
 ;;; Code:
 
 (use-modules (ice-9 format)
-             (ice-9 getopt-long)
              (ice-9 match)
              (srfi srfi-26)
              (srfi srfi-64))
 
-;; Currently, only log-file and trs-file are understood. Everything
-;; else is ignored.
-(define %options
-  '((test-name (value #t))
-    (log-file (value #t))
-    (trs-file (value #t))
-    (color-tests (value #t))
-    (expect-failure (value #t))
-    (enable-hard-errors (value #t))))
-
 (define (color code str color?)
   (if color?
       (format #f "~a[~am~a~a[0m" #\esc code str #\esc)
@@ -50,7 +39,7 @@
 (define green (cut color 32 <> <>))
 (define magenta (cut color 35 <> <>))
 
-(define (my-gnu-runner log-port trs-port color?)
+(define (my-gnu-runner color?)
   (let ((runner (test-runner-null)))
     (test-runner-on-group-begin! runner
       (lambda (runner suite-name count)
@@ -64,36 +53,39 @@
               (result (string-upcase
                        (symbol->string (test-result-kind runner))))
               (result-alist (test-result-alist runner)))
-          (format trs-port ":test-result: ~a ~a~%" result name)
           (format #t "~a ~a~%"
                   (case (test-result-kind runner)
                     ((pass) (green result color?))
                     (else (red result color?)))
                   name)
-          (format log-port "~a ~a~%" result name)
           ;; If test did not pass, print details.
           (unless (eq? (test-result-kind runner) 'pass)
-            (let* ((expected-value (match (assq-ref result-alist 'source-form)
-                                     (('test-assert _ ...) #t)
-                                     (_ (assq-ref result-alist 'expected-value))))
-                   (log-output
-                    (format #f "~a:~a~%expected: ~s~%actual: ~s~%"
-                            (assq-ref result-alist 'source-file)
-                            (assq-ref result-alist 'source-line)
-                            expected-value
-                            (assq-ref result-alist 'actual-value))))
-              (display log-output log-port)
-              (display log-output (current-error-port)))))))
+            (format (current-error-port)
+                    "~a:~a~%expected: ~s~%actual: ~s~%"
+                    (assq-ref result-alist 'source-file)
+                    (assq-ref result-alist 'source-line)
+                    (match (assq-ref result-alist 'source-form)
+                      (('test-assert _ ...) #t)
+                      (_ (assq-ref result-alist 'expected-value)))
+                    (assq-ref result-alist 'actual-value))))))
     runner))
 
-(let ((opts (getopt-long (command-line) %options)))
-  (call-with-output-file (string-append "@abs_top_builddir@/"
-                                        (option-ref opts 'log-file #f))
-    (lambda (log-port)
-      (call-with-output-file (option-ref opts 'trs-file #f)
-        (lambda (trs-port)
-          (chdir "@abs_top_srcdir@")
-          (test-with-runner (my-gnu-runner log-port trs-port
-                                           (string=? (option-ref opts 'color-tests "yes")
-                                                     "yes"))
-            (load-from-path (option-ref opts 'test-name #f))))))))
+(match (command-line)
+  ((_ test-files ...)
+   (let ((runner (my-gnu-runner #t)))
+     (test-with-runner runner
+       (for-each load-from-path test-files)
+       (display (magenta "SUMMARY" #t))
+       (newline)
+       (format #t "PASS: ~a
+FAIL: ~a
+XPASS: ~a
+XFAIL: ~a
+SKIP: ~a
+"
+               (test-runner-pass-count runner)
+               (test-runner-fail-count runner)
+               (test-runner-xpass-count runner)
+               (test-runner-xfail-count runner)
+               (test-runner-skip-count runner))
+       (exit (zero? (test-runner-fail-count runner)))))))