commit afd422039fb9716b653b7f30c092ab993c72884d Author: Vivianne Langdon Date: Fri Feb 3 05:18:17 2023 -0800 Initial commit with RPS functionality diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a123e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,65 @@ +*.eps +*.go +*.log +*.pdf +*.png +*.tar.xz +*.tar.gz +*.tmp +*~ +.#* +\#*\# +,* +/ABOUT-NLS +/INSTALL +/aclocal.m4 +/autom4te.cache +/build-aux/ar-lib +/build-aux/compile +/build-aux/config.guess +/build-aux/config.rpath +/build-aux/config.sub +/build-aux/depcomp +/build-aux/install-sh +/build-aux/mdate-sh +/build-aux/missing +/build-aux/test-driver +/build-aux/texinfo.tex +/config.status +/configure +/doc/*.1 +/doc/.dirstamp +/doc/contributing.*.texi +/doc/*.aux +/doc/*.cp +/doc/*.cps +/doc/*.fn +/doc/*.fns +/doc/*.html +/doc/*.info +/doc/*.info-[0-9] +/doc/*.ky +/doc/*.pg +/doc/*.toc +/doc/*.t2p +/doc/*.tp +/doc/*.vr +/doc/*.vrs +/doc/stamp-vti +/doc/version.texi +/doc/version-*.texi +/m4/* +/pre-inst-env +/test-env +/test-tmp +/tests/*.trs +GPATH +GRTAGS +GTAGS +Makefile +Makefile.in +config.cache +stamp-h[0-9] +tmp +/.version +/doc/stamp-[0-9] diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..3c0995c --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +Contributers to Gib-Gab-Gob 0.1: + + Vivi Langdon diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f658e91 --- /dev/null +++ b/COPYING @@ -0,0 +1,3 @@ +This project's license is GPL 3+. + +You can read the full license at https://www.gnu.org/licenses/gpl.html. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..bef0f57 --- /dev/null +++ b/ChangeLog @@ -0,0 +1 @@ +For a complete log, please see the Git commit log at . diff --git a/HACKING b/HACKING new file mode 100644 index 0000000..7c78ba2 --- /dev/null +++ b/HACKING @@ -0,0 +1,47 @@ +# -*- mode: org; coding: utf-8; -*- + +#+TITLE: Hacking gib-gab-gob + +* Contributing + +By far the easiest way to hack on gib-gab-gob is to develop using Guix: + +#+BEGIN_SRC bash + # Obtain the source code + cd /path/to/source-code + guix environment -l guix.scm + # In the new shell, run: + hall dist --execute && autoreconf -vif && ./configure && make check +#+END_SRC + +You can now hack this project's files to your heart's content, whilst +testing them from your `guix environment' shell. + +To try out any scripts in the project you can now use + +#+BEGIN_SRC bash + ./pre-inst-env scripts/${script-name} +#+END_SRC + +If you'd like to tidy the project again, but retain the ability to test the +project from the commandline, simply run: + +#+BEGIN_SRC bash + ./hall clean --skip "scripts/${script-name},pre-inst-env" --execute +#+END_SRC + +** Manual Installation + +If you do not yet use Guix, you will have to install this project's +dependencies manually: + - autoconf + - automake + - pkg-config + - texinfo + - guile-hall + +Once those dependencies are installed you can run: + +#+BEGIN_SRC bash + hall dist -x && autoreconf -vif && ./configure && make check +#+END_SRC diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..a95f9e0 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,73 @@ +bin_SCRIPTS = + +# Handle substitution of fully-expanded Autoconf variables. +do_subst = $(SED) \ + -e 's,[@]GUILE[@],$(GUILE),g' \ + -e 's,[@]guilemoduledir[@],$(guilemoduledir),g' \ + -e 's,[@]guileobjectdir[@],$(guileobjectdir),g' \ + -e 's,[@]localedir[@],$(localedir),g' + +nodist_noinst_SCRIPTS = pre-inst-env + +GOBJECTS = $(SOURCES:%.scm=%.go) + +moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION) +godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache +ccachedir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache + +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 + +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 $(GUILE_TOOLS) compile $(GUILE_WARNINGS) -o "$@" "$<" + +SOURCES = gib-gab-gob/rps.scm \ + gib-gab-gob/actors.scm + +TESTS = + +TEST_EXTENSIONS = .scm +SCM_LOG_DRIVER = \ + $(top_builddir)/pre-inst-env \ + $(GUILE) --no-auto-compile -e main \ + $(top_srcdir)/build-aux/test-driver.scm + +# Tell 'build-aux/test-driver.scm' to display only source file names, +# not indivdual test names. +AM_SCM_LOG_DRIVER_FLAGS = --brief=yes + +AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)" + +AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)" + +info_TEXINFOS = doc/gib-gab-gob.texi +dvi: # Don't build dvi docs + +EXTRA_DIST += README \ + HACKING \ + COPYING \ + .gitignore \ + hall.scm \ + build-aux/test-driver.scm \ + $(TESTS) + +ACLOCAL_AMFLAGS = -I m4 + +clean-go: + -$(RM) $(GOBJECTS) +.PHONY: clean-go + +CLEANFILES = \ + $(GOBJECTS) \ + $(TESTS:tests/%.scm=%.log) diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..650b9b6 --- /dev/null +++ b/NEWS @@ -0,0 +1,14 @@ +# -*- mode: org; coding: utf-8; -*- + +#+TITLE: Gib-Gab-Gob NEWS ? history of user-visible changes +#+STARTUP: content hidestars + +Copyright ? (2023) Vivi Langdon + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Please send Gib-Gab-Gob bug reports to INSERT EMAIL HERE. + +* Publication at 0.1 diff --git a/README b/README new file mode 100644 index 0000000..36ed357 --- /dev/null +++ b/README @@ -0,0 +1,2 @@ +* Gib Gab Gob +** It's Rock Paper Scissors, but for Goblins diff --git a/README.org b/README.org new file mode 100644 index 0000000..36ed357 --- /dev/null +++ b/README.org @@ -0,0 +1,2 @@ +* Gib Gab Gob +** It's Rock Paper Scissors, but for Goblins diff --git a/build-aux/test-driver.scm b/build-aux/test-driver.scm new file mode 100644 index 0000000..99007e8 --- /dev/null +++ b/build-aux/test-driver.scm @@ -0,0 +1,179 @@ +;;;; test-driver.scm - Guile test driver for Automake testsuite harness + +(define script-version "2019-01-15.13") ;UTC + +;;; Copyright ? 2015, 2016 Mathieu Lirzin +;;; Copyright ? 2019 Alex Sassmannshausen +;;; +;;; This program 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. +;;; +;;; This program 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 this program. If not, see . + +;;;; Commentary: +;;; +;;; This script provides a Guile test driver using the SRFI-64 Scheme API for +;;; test suites. SRFI-64 is distributed with Guile since version 2.0.9. +;;; +;;; This script is a lightly modified version of the orignal written by +;;; Matthieu Lirzin. The changes make it suitable for use as part of the +;;; guile-hall infrastructure. +;;; +;;;; Code: + +(use-modules (ice-9 getopt-long) + (ice-9 pretty-print) + (srfi srfi-26) + (srfi srfi-64)) + +(define (show-help) + (display "Usage: + test-driver --test-name=NAME --log-file=PATH --trs-file=PATH + [--expect-failure={yes|no}] [--color-tests={yes|no}] + [--enable-hard-errors={yes|no}] [--brief={yes|no}}] [--] + TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] +The '--test-name', '--log-file' and '--trs-file' options are mandatory. +")) + +(define %options + '((test-name (value #t)) + (log-file (value #t)) + (trs-file (value #t)) + (color-tests (value #t)) + (expect-failure (value #t)) ;XXX: not implemented yet + (enable-hard-errors (value #t)) ;not implemented in SRFI-64 + (brief (value #t)) + (help (single-char #\h) (value #f)) + (version (single-char #\V) (value #f)))) + +(define (option->boolean options key) + "Return #t if the value associated with KEY in OPTIONS is 'yes'." + (and=> (option-ref options key #f) (cut string=? <> "yes"))) + +(define* (test-display field value #:optional (port (current-output-port)) + #:key pretty?) + "Display 'FIELD: VALUE\n' on PORT." + (if pretty? + (begin + (format port "~A:~%" field) + (pretty-print value port #:per-line-prefix "+ ")) + (format port "~A: ~S~%" field value))) + +(define* (result->string symbol #:key colorize?) + "Return SYMBOL as an upper case string. Use colors when COLORIZE is #t." + (let ((result (string-upcase (symbol->string symbol)))) + (if colorize? + (string-append (case symbol + ((pass) "") ;green + ((xfail) "") ;light green + ((skip) "") ;blue + ((fail xpass) "") ;red + ((error) "")) ;magenta + result + "") ;no color + result))) + +(define* (test-runner-gnu test-name #:key color? brief? out-port trs-port) + "Return an custom SRFI-64 test runner. TEST-NAME is a string specifying the +file name of the current the test. COLOR? specifies whether to use colors, +and BRIEF?, well, you know. OUT-PORT and TRS-PORT must be output ports. The +current output port is supposed to be redirected to a '.log' file." + + (define (test-on-test-begin-gnu runner) + ;; Procedure called at the start of an individual test case, before the + ;; test expression (and expected value) are evaluated. + (let ((result (cute assq-ref (test-result-alist runner) <>))) + (format #t "test-name: ~A~%" (result 'test-name)) + (format #t "location: ~A~%" + (string-append (result 'source-file) ":" + (number->string (result 'source-line)))) + (test-display "source" (result 'source-form) #:pretty? #t))) + + (define (test-on-test-end-gnu runner) + ;; Procedure called at the end of an individual test case, when the result + ;; of the test is available. + (let* ((results (test-result-alist runner)) + (result? (cut assq <> results)) + (result (cut assq-ref results <>))) + (unless brief? + ;; Display the result of each test case on the console. + (format out-port "~A: ~A - ~A~%" + (result->string (test-result-kind runner) #:colorize? color?) + test-name (test-runner-test-name runner))) + (when (result? 'expected-value) + (test-display "expected-value" (result 'expected-value))) + (when (result? 'expected-error) + (test-display "expected-error" (result 'expected-error) #:pretty? #t)) + (when (result? 'actual-value) + (test-display "actual-value" (result 'actual-value))) + (when (result? 'actual-error) + (test-display "actual-error" (result 'actual-error) #:pretty? #t)) + (format #t "result: ~a~%" (result->string (result 'result-kind))) + (newline) + (format trs-port ":test-result: ~A ~A~%" + (result->string (test-result-kind runner)) + (test-runner-test-name runner)))) + + (define (test-on-group-end-gnu runner) + ;; Procedure called by a 'test-end', including at the end of a test-group. + (let ((fail (or (positive? (test-runner-fail-count runner)) + (positive? (test-runner-xpass-count runner)))) + (skip (or (positive? (test-runner-skip-count runner)) + (positive? (test-runner-xfail-count runner))))) + ;; XXX: The global results need some refinements for XPASS. + (format trs-port ":global-test-result: ~A~%" + (if fail "FAIL" (if skip "SKIP" "PASS"))) + (format trs-port ":recheck: ~A~%" + (if fail "yes" "no")) + (format trs-port ":copy-in-global-log: ~A~%" + (if (or fail skip) "yes" "no")) + (when brief? + ;; Display the global test group result on the console. + (format out-port "~A: ~A~%" + (result->string (if fail 'fail (if skip 'skip 'pass)) + #:colorize? color?) + test-name)) + #f)) + + (let ((runner (test-runner-null))) + (test-runner-on-test-begin! runner test-on-test-begin-gnu) + (test-runner-on-test-end! runner test-on-test-end-gnu) + (test-runner-on-group-end! runner test-on-group-end-gnu) + (test-runner-on-bad-end-name! runner test-on-bad-end-name-simple) + runner)) + +;;; +;;; Entry point. +;;; + +(define (main . args) + (let* ((opts (getopt-long (command-line) %options)) + (option (cut option-ref opts <> <>))) + (cond + ((option 'help #f) (show-help)) + ((option 'version #f) (format #t "test-driver.scm ~A" script-version)) + (else + (let ((log (open-file (option 'log-file "") "w0")) + (trs (open-file (option 'trs-file "") "wl")) + (out (duplicate-port (current-output-port) "wl"))) + (redirect-port log (current-output-port)) + (redirect-port log (current-warning-port)) + (redirect-port log (current-error-port)) + (test-with-runner + (test-runner-gnu (option 'test-name #f) + #:color? (option->boolean opts 'color-tests) + #:brief? (option->boolean opts 'brief) + #:out-port out #:trs-port trs) + (load-from-path (option 'test-name #f))) + (close-port log) + (close-port trs) + (close-port out)))) + (exit 0))) diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..65dbbd8 --- /dev/null +++ b/configure.ac @@ -0,0 +1,34 @@ +dnl -*- Autoconf -*- + +AC_INIT(gib-gab-gob, 0.1) +AC_SUBST(HVERSION, "\"0.1\"") +AC_SUBST(AUTHOR, "\"Vivi Langdon\"") +AC_SUBST(COPYRIGHT, "'(2023)") +AC_SUBST(LICENSE, gpl3+) +AC_CONFIG_SRCDIR(gib-gab-gob) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([1.12 gnu silent-rules subdir-objects color-tests parallel-tests -Woverride -Wno-portability]) +AM_SILENT_RULES([yes]) + +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) + +dnl Search for 'guile' and 'guild'. This macro defines +dnl 'GUILE_EFFECTIVE_VERSION'. +GUILE_PKG([3.0 2.2 2.0]) +GUILE_PROGS +GUILE_SITE_DIR +if test "x$GUILD" = "x"; then + AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.]) +fi + +dnl Hall auto-generated guile-module dependencies +GUILE_MODULE_REQUIRED([goblins]) + +dnl Installation directories for .scm and .go files. +guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION" +guileobjectdir="${libdir}/guile/$GUILE_EFFECTIVE_VERSION/site-ccache" +AC_SUBST([guilemoduledir]) +AC_SUBST([guileobjectdir]) + +AC_OUTPUT diff --git a/doc/gib-gab-gob.texi b/doc/gib-gab-gob.texi new file mode 100644 index 0000000..953c100 --- /dev/null +++ b/doc/gib-gab-gob.texi @@ -0,0 +1,60 @@ +\input texinfo +@c -*-texinfo-*- + +@c %**start of header +@setfilename gib-gab-gob.info +@documentencoding UTF-8 +@settitle Gib-Gab-Gob Reference Manual +@c %**end of header + +@include version.texi + +@copying +Copyright @copyright{} 2023 Vivi Langdon + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License''. +@end copying + +@dircategory The Algorithmic Language Scheme +@direntry +* Gib-Gab-Gob: (gib-gab-gob). +@end direntry + +@titlepage +@title The Gib-Gab-Gob Manual +@author Vivi Langdon + +@page +@vskip 0pt plus 1filll +Edition @value{EDITION} @* +@value{UPDATED} @* + +@insertcopying +@end titlepage + +@contents + +@c ********************************************************************* +@node Top +@top Gib-Gab-Gob + +This document describes Gib-Gab-Gob version @value{VERSION}. + +@menu +* Introduction:: Why Gib-Gab-Gob? +@end menu + +@c ********************************************************************* +@node Introduction +@chapter Introduction + +INTRODUCTION HERE + +This documentation is a stub. + +@bye diff --git a/gib-gab-gob/actors.scm b/gib-gab-gob/actors.scm new file mode 100644 index 0000000..d168ce0 --- /dev/null +++ b/gib-gab-gob/actors.scm @@ -0,0 +1,28 @@ +(define-module (gib-gab-gob actors) + #:use-module (gib-gab-gob rps) + #:use-module (goblins) + #:use-module (goblins actor-lib methods) + #:use-module (goblins actor-lib sealers) + #:use-module (oop goops) + #:export (^rps ^client-picker)) + +(define* (^rps bcom) + (define pick 'scissors) + (methods + ((register-opponent name client sealed-pick) + (format #t "Hey there, ~a! You sent me your pick of rock-paper-scissors; now I will send mine.\n" name) + ;; server always picks scissors, it's the best strat + (on (<- (<- client 'exchange-pick-for-unsealer pick) sealed-pick) + (lambda (peer-pick) + (format #t "The peer has picked ~a (do I win? ~s)\n" peer-pick (rps-winner pick peer-pick))))))) + +(define (^client-picker bcom) + (define-values (seal-pick unseal-pick my-pick?) + (spawn-sealer-triplet)) + (define pick 'rock) + (methods + ;; client always picks rock, it's the real good strat + ((get-sealed-pick) ($ seal-pick pick)) + ((exchange-pick-for-unsealer peer-pick) + (format #t "Peer picked ~a... (do I win? ~s), i will send my unsealer\n" peer-pick (rps-winner pick peer-pick)) + unseal-pick))) diff --git a/gib-gab-gob/rps.scm b/gib-gab-gob/rps.scm new file mode 100644 index 0000000..59f47e0 --- /dev/null +++ b/gib-gab-gob/rps.scm @@ -0,0 +1,72 @@ +(define-module (gib-gab-gob rps) + #:use-module (gib-gab-gob actors) + #:use-module (ice-9 match) + #:use-module (goblins) + #:use-module (goblins ocapn captp) + #:use-module (goblins ocapn ids) + #:use-module (goblins ocapn netlayer testuds) + #:use-module (oop goops) + #:export (do-rps join-rps rps-winner rock-paper-scissors)) + +(define-class () + (vat #:accessor vat) + (rps #:accessor rps) + (user-name #:accessor user-name #:init-keyword #:user-name) + (ocapn-vat #:getter ocapn-vat #:init-thunk spawn-vat)) + +(define-method (init (host )) + (set! (vat host) (spawn-vat)) + (with-vat (vat host) + (set! (rps host) + (spawn ^rps))) + (with-vat (ocapn-vat host) + (define uds-netlayer (new-testuds-netlayer)) + (define mycapn (spawn-mycapn uds-netlayer)) + (let ((rps-sref ($ mycapn 'register (rps host) 'testuds))) + (format #t "Connect to: ~a\n" (ocapn-id->string rps-sref))))) + + +(define (new-testuds-netlayer) + (spawn ^testuds-netlayer "/tmp/netlayers")) + +(define (do-rps user-name) + (init (make #:user-name user-name))) + +(define-class () + (vat #:accessor vat #:init-keyword #:vat #:init-thunk spawn-vat) + (rps #:accessor rps) + (rps-addr #:accessor rps-addr #:init-keyword #:rps-addr) + (user-name #:accessor user-name #:init-keyword #:user-name)) + +(define-method (init (client )) + (define rps-sref (string->ocapn-id (rps-addr client))) + (define uds-netlayer (new-testuds-netlayer)) + (define mycapn (spawn-mycapn uds-netlayer)) + (set! (rps client) + (<- mycapn 'enliven rps-sref)) + (on (rps client) pk)) + +(define (join-rps user-name rps-addr) + (define client (make #:user-name user-name #:rps-addr rps-addr)) + (with-vat (vat client) + (init client) + (format #t "Tor will take a bit...\n") + (let ((client-picker (spawn ^client-picker)) + (rps (rps client))) + (on (<- rps 'register-opponent user-name client-picker ($ client-picker 'get-sealed-pick)) + (lambda (_) + (format #t "Ok! we are registered.\n")))))) + + +(define rock-paper-scissors (list 'rock 'paper 'scissors)) + +(define (rps-winner a b) + (if (and (memq a rock-paper-scissors) (memq b rock-paper-scissors)) + (match (list a b) + ((x x) 'tie) + (('rock 'scissors) #t) + (('rock 'paper) #f) + (('scissors 'paper) #t) + (('paper 'scissors) #f) + ((x y) (not (rps-winner y x)))) + (error "Unexpected item in the shooting area" a b))) diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000..aa1a518 --- /dev/null +++ b/guix.scm @@ -0,0 +1,33 @@ +(use-modules + (guix packages) + ((guix licenses) #:prefix license:) + (guix download) + (guix build-system gnu) + (gnu packages) + (gnu packages autotools) + (gnu packages guile) + (gnu packages guile-xyz) + (gnu packages pkg-config) + (gnu packages texinfo)) + +(package + (name "gib-gab-gob") + (version "0.1") + (source "./gib-gab-gob-0.1.tar.gz") + (build-system gnu-build-system) + (arguments `()) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("pkg-config" ,pkg-config) + ("texinfo" ,texinfo))) + (inputs `(("guile" ,guile-3.0))) + (propagated-inputs + `(("guile-goblins" ,guile-goblins))) + (synopsis + "Rock Paper Scissors and Tic Tac Toe in Goblins!") + (description + "This project demonstrates both Rock Paper Scissors and Tic Tac Toe in Goblins!") + (home-page "https://solarpunk.moe") + (license license:gpl3+)) + diff --git a/hall.scm b/hall.scm new file mode 100644 index 0000000..909e5f8 --- /dev/null +++ b/hall.scm @@ -0,0 +1,42 @@ +(hall-description + (name "gib-gab-gob") + (prefix "") + (version "0.1") + (author "Vivi Langdon") + (copyright (2023)) + (synopsis + "Rock Paper Scissors and Tic Tac Toe in Goblins!") + (description + "This project demonstrates both Rock Paper Scissors and Tic Tac Toe in Goblins!") + (home-page "https://solarpunk.moe") + (license gpl3+) + (dependencies + `(("guile-goblins" (goblins) ,guile-goblins))) + (skip ()) + (files (libraries + ((directory + "gib-gab-gob" + ((scheme-file "rps") (scheme-file "actors"))))) + (tests ((directory "tests" ()))) + (programs ((directory "scripts" ()))) + (documentation + ((text-file "ChangeLog") + (text-file "AUTHORS") + (text-file "NEWS") + (directory "doc" ((texi-file "gib-gab-gob"))) + (text-file "COPYING") + (text-file "HACKING") + (text-file "README"))) + (infrastructure + ((in-file "pre-inst-env") + (automake-file "Makefile") + (autoconf-file "configure") + (directory + "build-aux" + ((tex-file "texinfo") + (scheme-file "test-driver") + (text-file "missing") + (text-file "install-sh") + (text-file "mdate-sh"))) + (scheme-file "hall") + (text-file ".gitignore"))))) diff --git a/pre-inst-env.in b/pre-inst-env.in new file mode 100644 index 0000000..31c499d --- /dev/null +++ b/pre-inst-env.in @@ -0,0 +1,13 @@ +#!/bin/sh + +abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`" +abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`" + +GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" +GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH" +export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH + +PATH="$abs_top_builddir/scripts:$PATH" +export PATH + +exec "$@"