From 7bef05430de5e39bf2937b026d68d63116c46233 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Tue, 3 Jan 2023 16:55:56 +0000 Subject: Quit the autotools build system. For a simple package like guile-email, the autotools build system is more trouble than it is worth. We prefer a hand-written Makefile. As the commit summary suggests, the autotools are indeed a bad habit that we must "quit". * Makefile: New file. * Makefile.am, bootstrap.sh, configure.ac, pre-inst-env.in: Delete files. * build-aux/test-corpus.scm.in: Rename to ... * build-aux/test-corpus.scm: ... this. Remove shebang. * build-aux/test-driver.scm.in: Rename to ... * build-aux/test-driver.scm: ... this. Remove autotools specific parts. * guix.scm: Import (guix utils). (guile-email)[arguments]: Add prefix to #:make-flags. Delete configure phase. * .gitignore: Remove INSTALL, Makefile, Makefile.in, aclocal.m4, autom4te.cache, build-aux/install-sh, build-aux/missing, build-aux/test-corpus.scm, config.log, config.status, configure, doc/.dirstamp, pre-inst-env, test-suite.log, tests/*.log and tests/*.trs. --- .gitignore | 16 ------- Makefile | 80 +++++++++++++++++++++++++++++++++ Makefile.am | 92 -------------------------------------- bootstrap.sh | 22 --------- build-aux/test-corpus.scm | 100 +++++++++++++++++++++++++++++++++++++++++ build-aux/test-corpus.scm.in | 103 ------------------------------------------- build-aux/test-driver.scm | 46 +++++++++++++++++++ build-aux/test-driver.scm.in | 66 --------------------------- configure.ac | 33 -------------- guix.scm | 8 ++++ pre-inst-env.in | 37 ---------------- 11 files changed, 234 insertions(+), 369 deletions(-) create mode 100644 Makefile delete mode 100644 Makefile.am delete mode 100755 bootstrap.sh create mode 100644 build-aux/test-corpus.scm delete mode 100644 build-aux/test-corpus.scm.in create mode 100644 build-aux/test-driver.scm delete mode 100644 build-aux/test-driver.scm.in delete mode 100644 configure.ac delete mode 100644 pre-inst-env.in diff --git a/.gitignore b/.gitignore index 945566e..750784c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,4 @@ *.go -INSTALL -Makefile -Makefile.in -aclocal.m4 -autom4te.cache -build-aux/install-sh -build-aux/missing -build-aux/test-corpus.scm -config.log -config.status -configure -doc/.dirstamp doc/guile-email.html doc/guile-email.info -pre-inst-env -test-suite.log -tests/*.log -tests/*.trs website \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..979c4f1 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +# guile-email --- Guile email parser +# Copyright © 2023 Arun Isaac +# +# This file is part of guile-email. +# +# guile-email is free software; you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation; either version 3 of the +# License, or (at your option) any later version. +# +# guile-email 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 +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with guile-email. If not, see +# . + +project = guile-email +# FIXME: Do not hardcode the effective version. +guile_effective_version = 3.0 + +EMACS ?= emacs +GUILD ?= guild +GUILE ?= guile +MAKEINFO ?= makeinfo + +prefix ?= /usr/local +exec_prefix ?= $(prefix) +libdir ?= $(exec_prefix)/lib +datarootdir ?= $(prefix)/share +infodir ?= $(datarootdir)/info + +top_level_module_dir = email +sources = $(wildcard $(top_level_module_dir)/*.scm) +objects = $(sources:.scm=.go) +tests = $(wildcard tests/*.scm) +doc_texi = doc/$(project).texi +doc_html = $(doc_texi:.texi=.html) +doc_info = $(doc_texi:.texi=.info) + +scmdir = $(datarootdir)/guile/site/$(guile_effective_version) +godir = $(libdir)/guile/$(guile_effective_version)/site-ccache + +.PHONY: all check install clean + +all: $(objects) + +%.go: %.scm + GUILE_AUTO_COMPILE=0 $(GUILD) compile -L . -o $@ $< + +$(doc_html): $(doc_texi) + $(MAKEINFO) --html --output=$@ --css-ref=/style.css $< + +$(doc_info): $(doc_texi) + $(MAKEINFO) --output=$@ $< + +website: website/index.html website/manual/dev/en + +website/index.html: README.org + mkdir -p $(dir $@) + $(EMACS) -Q --script build-aux/build-website.el + +website/manual/dev/en: $(doc_html) + rm -rf $@ + mkdir -p $(dir $@) + cp -vr $< $@ + +check: $(tests) + $(GUILE) --no-auto-compile -L . build-aux/test-driver.scm $^ + +install: $(doc_info) + mkdir -p $(scmdir) $(godir) + cp --parents -vr $(sources) $(scmdir) + cp --parents -vr $(objects) $(godir) + install -D $(doc_info) --target-directory $(infodir) + +clean: + rm -rf $(objects) $(doc_html) $(doc_info) website/index.tml website/manual/dev/en diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 6c29b96..0000000 --- a/Makefile.am +++ /dev/null @@ -1,92 +0,0 @@ -# guile-email --- Guile email parser -# Copyright © 2016, 2017, 2018 Ricardo Wurmus -# Copyright © 2018, 2019, 2021 Arun Isaac -# -# This file was adapted from mumi and is part of guile-email. -# -# guile-email is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# guile-email 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 -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with guile-email. If not, see -# . - -GOBJECTS = $(SOURCES:%.scm=%.go) - -nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES) -nobase_go_DATA = $(GOBJECTS) - -# Make sure source files are installed first, so that the mtime of -# installed compiled files is greater than that of installed source -# files. See -# -# for details. -guile_install_go_files = install-nobase_goDATA -$(guile_install_go_files): install-nobase_modDATA - -CLEANFILES = $(GOBJECTS) -EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES) -GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat -SUFFIXES = .scm .go -.scm.go: - $(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILD) compile $(GUILE_WARNINGS) -o "$@" "$<" - -moddir = $(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION) -godir = $(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache - -SOURCES = \ - email/base64.scm \ - email/email.scm \ - email/quoted-printable.scm \ - email/utils.scm - -TEST_EXTENSIONS = .scm - -SCM_TESTS = \ - tests/base64.scm \ - tests/email.scm \ - tests/quoted-printable.scm \ - tests/utils.scm - -TESTS = $(SCM_TESTS) - -SCM_LOG_DRIVER = \ - $(top_builddir)/pre-inst-env \ - $(GUILE) --no-auto-compile -s \ - $(top_builddir)/build-aux/test-driver.scm - -info_TEXINFOS = doc/guile-email.texi - -EXTRA_DIST += \ - $(TESTS) \ - tests/multipart-email-with-a-8bit-encoding-and-non-utf8-charset-part \ - tests/email-with-8bit-encoding-and-non-utf8-charset \ - build-aux/test-driver.scm.in \ - COPYING \ - README.org - -# Build website. -AM_MAKEINFOHTMLFLAGS = --css-ref=/style.css - -website: website/index.html website/manual/dev/en - -website/index.html: README.org - $(MKDIR_P) $(dir $@) - $(EMACS) -Q --script build-aux/build-website.el - -website/manual/dev/en: doc/guile-email.html - rm -rf $@ - $(MKDIR_P) $(dir $@) - cp -vr $< $@ - -# The clean target depends on clean-local. We use clean-local to clean -# up the website. -clean-local: - rm -rf website/index.html website/manual/dev/en diff --git a/bootstrap.sh b/bootstrap.sh deleted file mode 100755 index fa24661..0000000 --- a/bootstrap.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /bin/sh - -# guile-email --- Guile email parser -# Copyright © 2018 Arun Isaac -# -# This file is part of guile-email. -# -# guile-email is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# guile-email 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 -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with guile-email. If not, see -# . - -autoreconf --verbose --install --force diff --git a/build-aux/test-corpus.scm b/build-aux/test-corpus.scm new file mode 100644 index 0000000..83a359f --- /dev/null +++ b/build-aux/test-corpus.scm @@ -0,0 +1,100 @@ +;;; guile-email --- Guile email parser +;;; Copyright © 2021 Arun Isaac +;;; +;;; This file is part of guile-email. +;;; +;;; guile-email is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU Affero General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; guile-email 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 +;;; Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public +;;; License along with guile-email. If not, see +;;; . + +;;; Commentary: + +;; This script recursively finds all mbox files in the current +;; directory, and tests if guile-email can parse all messages without +;; erroring out. + +;;; Code: + +(use-modules (rnrs io ports) + (srfi srfi-26) + (srfi srfi-28) + (srfi srfi-171) + (ice-9 ftw) + (ice-9 match) + (email email)) + +(define %fail-directory + (match (command-line) + ((_ fail-directory) fail-directory) + ((arg0 _ ...) + (scm-error 'misc-error + #f + "Usage: ~A fail-directory" + (list arg0) + #f)))) + +(define (directory-files directory) + "Return files in DIRECTORY." + (scandir directory (lambda (filename) + (not (member filename (list "." "..")))))) + +(define (write-failed-email corpus mbox index email) + "Write EMAIL, the INDEXth email in MBOX of CORPUS, for which +parse-email fails to fail directory." + (display (format "Failed on index ~a of ~a/~a~%" index corpus mbox)) + (call-with-output-file (format "~a/~a_~a_~a" + %fail-directory + corpus + (basename mbox ".mbox") + index) + (cut put-bytevector <> email))) + +(define read-next-email-in-mbox + (@@ (email email) + read-next-email-in-mbox)) + +(define (test-corpus corpus) + "Test CORPUS, a directory containing mbox files." + (for-each (lambda (mbox) + (let ((mbox-path (string-append corpus "/" mbox))) + (display (format "~a~%" mbox-path)) + (call-with-input-file mbox-path + (lambda (port) + (port-transduce (compose (tenumerate) + (tmap (match-lambda + ((index . bv) + (catch #t + (lambda () + (parse-email bv)) + (lambda _ + (write-failed-email corpus mbox index bv))))))) + (const #t) + read-next-email-in-mbox + port))))) + (directory-files corpus))) + +;; If fail directory exists, delete its contents. Else, create it. +(if (file-exists? %fail-directory) + (for-each (lambda (file) + (delete-file (string-append %fail-directory "/" file))) + (directory-files %fail-directory)) + (mkdir %fail-directory)) + +;; Test corpora. +(test-corpus "guix-commits") +(test-corpus "guix-patches") +(test-corpus "bug-guix") + +;; If fail directory has any emails, then error out. +(unless (null? (directory-files %fail-directory)) + (error "Corpus test failed for some messages")) diff --git a/build-aux/test-corpus.scm.in b/build-aux/test-corpus.scm.in deleted file mode 100644 index b069186..0000000 --- a/build-aux/test-corpus.scm.in +++ /dev/null @@ -1,103 +0,0 @@ -#! @GUILE@ --*- scheme -*- -!# -;;; guile-email --- Guile email parser -;;; Copyright © 2021 Arun Isaac -;;; -;;; This file is part of guile-email. -;;; -;;; guile-email is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU Affero General Public License as -;;; published by the Free Software Foundation; either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; guile-email 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 -;;; Affero General Public License for more details. -;;; -;;; You should have received a copy of the GNU Affero General Public -;;; License along with guile-email. If not, see -;;; . - -;;; Commentary: - -;; This script recursively finds all mbox files in the current -;; directory, and tests if guile-email can parse all messages without -;; erroring out. - -;;; Code: - -(use-modules (rnrs io ports) - (srfi srfi-26) - (srfi srfi-28) - (srfi srfi-171) - (ice-9 ftw) - (ice-9 match) - (email email)) - -(define %fail-directory - (match (command-line) - ((_ fail-directory) fail-directory) - ((arg0 _ ...) - (scm-error 'misc-error - #f - "Usage: ~A fail-directory" - (list arg0) - #f)))) - -(define (directory-files directory) - "Return files in DIRECTORY." - (scandir directory (lambda (filename) - (not (member filename (list "." "..")))))) - -(define (write-failed-email corpus mbox index email) - "Write EMAIL, the INDEXth email in MBOX of CORPUS, for which -parse-email fails to fail directory." - (display (format "Failed on index ~a of ~a/~a~%" index corpus mbox)) - (call-with-output-file (format "~a/~a_~a_~a" - %fail-directory - corpus - (basename mbox ".mbox") - index) - (cut put-bytevector <> email))) - -(define read-next-email-in-mbox - (@@ (email email) - read-next-email-in-mbox)) - -(define (test-corpus corpus) - "Test CORPUS, a directory containing mbox files." - (for-each (lambda (mbox) - (let ((mbox-path (string-append corpus "/" mbox))) - (display (format "~a~%" mbox-path)) - (call-with-input-file mbox-path - (lambda (port) - (port-transduce (compose (tenumerate) - (tmap (match-lambda - ((index . bv) - (catch #t - (lambda () - (parse-email bv)) - (lambda _ - (write-failed-email corpus mbox index bv))))))) - (const #t) - read-next-email-in-mbox - port))))) - (directory-files corpus))) - -;; If fail directory exists, delete its contents. Else, create it. -(if (file-exists? %fail-directory) - (for-each (lambda (file) - (delete-file (string-append %fail-directory "/" file))) - (directory-files %fail-directory)) - (mkdir %fail-directory)) - -;; Test corpora. -(test-corpus "guix-commits") -(test-corpus "guix-patches") -(test-corpus "bug-guix") - -;; If fail directory has any emails, then error out. -(unless (null? (directory-files %fail-directory)) - (error "Corpus test failed for some messages")) diff --git a/build-aux/test-driver.scm b/build-aux/test-driver.scm new file mode 100644 index 0000000..8d60cd4 --- /dev/null +++ b/build-aux/test-driver.scm @@ -0,0 +1,46 @@ +;;; guile-email --- Guile email parser +;;; Copyright © 2018, 2019 Arun Isaac +;;; +;;; This file is part of guile-email. +;;; +;;; guile-email is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU Affero General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; guile-email 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 +;;; Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public +;;; License along with guile-email. If not, see +;;; . + +(use-modules (ice-9 format) + (ice-9 match) + (srfi srfi-64)) + +(define %my-gnu-runner + (let ((runner (test-runner-simple))) + (test-runner-on-group-begin! runner + (lambda (runner suite-name count) + (format (current-error-port) + "%%%% Starting test ~a~%" suite-name))) + (test-runner-on-group-end! runner (const #f)) + (test-runner-on-test-end! runner + (lambda (runner) + (let ((name (test-runner-test-name runner)) + (result (string-upcase + (symbol->string (test-result-kind runner))))) + (format (current-error-port) + "\x1b[~:[31~;32~]m~a\x1b[0m ~a~%" + (eq? (test-result-kind runner) 'pass) + result name)))) + runner)) + +(match (command-line) + ((_ test-files ...) + (test-with-runner %my-gnu-runner + (for-each load test-files)) + (exit (zero? (test-runner-fail-count %my-gnu-runner))))) diff --git a/build-aux/test-driver.scm.in b/build-aux/test-driver.scm.in deleted file mode 100644 index 96d84e0..0000000 --- a/build-aux/test-driver.scm.in +++ /dev/null @@ -1,66 +0,0 @@ -;;; guile-email --- Guile email parser -;;; Copyright © 2018, 2019 Arun Isaac -;;; -;;; This file is part of guile-email. -;;; -;;; guile-email is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU Affero General Public License as -;;; published by the Free Software Foundation; either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; guile-email 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 -;;; Affero General Public License for more details. -;;; -;;; You should have received a copy of the GNU Affero General Public -;;; License along with guile-email. If not, see -;;; . - -(use-modules (ice-9 format) - (ice-9 getopt-long) - (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 (my-gnu-runner log-port trs-port) - (let ((runner (test-runner-simple))) - (test-runner-on-group-begin! runner - (lambda (runner suite-name count) - (format #t "%%%% Starting test ~a~%" suite-name) - (format log-port "%%%% Starting test ~a~%" suite-name) - ;; Set log-port in the aux-value field for use by other parts - ;; of test-runner-simple - (test-runner-aux-value! runner log-port) - (format #t " (Writing full log to \"~a\")~%" (port-filename log-port)))) - (test-runner-on-group-end! runner (const #f)) - (test-runner-on-test-end! runner - (lambda (runner) - (let ((name (test-runner-test-name runner)) - (result (string-upcase - (symbol->string (test-result-kind runner))))) - (format trs-port ":test-result: ~a ~a~%" result name) - (format (current-error-port) - "\x1b[~:[31~;32~]m~a\x1b[0m ~a~%" - (eq? (test-result-kind runner) 'pass) - result name)))) - 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) - (load-from-path (option-ref opts 'test-name #f)))))))) diff --git a/configure.ac b/configure.ac deleted file mode 100644 index c418e88..0000000 --- a/configure.ac +++ /dev/null @@ -1,33 +0,0 @@ -dnl guile-email --- Guile email parser -dnl Copyright © 2018, 2019, 2021 Arun Isaac -dnl -dnl This file is part of guile-email. -dnl -dnl guile-email is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU Affero General Public License as -dnl published by the Free Software Foundation; either version 3 of the -dnl License, or (at your option) any later version. -dnl -dnl guile-email is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Affero General Public License for more details. -dnl -dnl You should have received a copy of the GNU Affero General Public -dnl License along with guile-email. If not, see -dnl . - -AC_INIT([guile-email], [0.2.2]) -AC_CONFIG_AUX_DIR([build-aux]) -AM_INIT_AUTOMAKE([color-tests -Wall -Wno-portability foreign check-news no-dist-gzip dist-lzip]) -AM_SILENT_RULES([yes]) - -GUILE_PKG([3.0 2.2]) -GUILE_PROGS -AC_PATH_PROG([EMACS], [emacs]) - -AC_CONFIG_FILES([Makefile]) -AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) -AC_CONFIG_FILES([build-aux/test-driver.scm]) -AC_CONFIG_FILES([build-aux/test-corpus.scm], [chmod +x build-aux/test-corpus.scm]) -AC_OUTPUT diff --git a/guix.scm b/guix.scm index f9d8c2d..ba84870 100644 --- a/guix.scm +++ b/guix.scm @@ -25,6 +25,7 @@ (use-modules (guix gexp) (guix git-download) (guix packages) + (guix utils) (gnu packages autotools) (gnu packages guile-xyz) (gnu packages texinfo)) @@ -36,6 +37,13 @@ (source (local-file %source-dir #:recursive? #t #:select? (git-predicate %source-dir))) + (arguments + (substitute-keyword-arguments (package-arguments guile-email) + ((#:make-flags make-flags #~(list)) + #~(list (string-append "prefix=" #$output))) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (delete 'configure))))) (native-inputs (modify-inputs (package-native-inputs guile-email) (prepend autoconf) diff --git a/pre-inst-env.in b/pre-inst-env.in deleted file mode 100644 index e6b281f..0000000 --- a/pre-inst-env.in +++ /dev/null @@ -1,37 +0,0 @@ -#! @GUILE@ --no-auto-compile --*- scheme -*- -!# -;;; guile-email --- Guile email parser -;;; Copyright © 2021 Arun Isaac -;;; -;;; This file is part of guile-email. -;;; -;;; guile-email is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU Affero General Public License as -;;; published by the Free Software Foundation; either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; guile-email 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 -;;; Affero General Public License for more details. -;;; -;;; You should have received a copy of the GNU Affero General Public -;;; License along with guile-email. If not, see -;;; . - -(import (ice-9 match)) - -(define (prepend-path-environment-variable name . values) - (setenv name (string-join (append values - (if (getenv name) - (string-split (getenv name) #\:) - '())) - ":"))) - -(prepend-path-environment-variable "GUILE_LOAD_PATH" "@abs_top_builddir@" "@abs_top_srcdir@") -(prepend-path-environment-variable "GUILE_LOAD_COMPILED_PATH" "@abs_top_builddir@") - -(match (command-line) - ((_ command args ...) - (apply execlp command command args))) -- cgit v1.2.3