diff options
Diffstat (limited to 'build.features')
-rw-r--r-- | build.features | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/build.features b/build.features new file mode 100644 index 0000000..1921d3c --- /dev/null +++ b/build.features @@ -0,0 +1,123 @@ +#!/bin/sh +:;exec scmlit -f $0 -e"(bi)" build $* + +(require (in-vicinity (program-vicinity) "build.scm")) +(require 'getopt) +(require 'getopt-parameters) + +(define (make-features-txi) + (call-with-output-file "features.txi" + (lambda (port) + ((((build 'open-table) 'features #f) 'for-each-row) + (lambda (row) + (apply (lambda (name spec documentation) + (display "@item " port) (display name port) (newline port) + (display "@cindex " port) (display name port) (newline port) + (display documentation port) (newline port) (newline port)) + row)))))) + +(define (print-manifest port) + (display "@multitable @columnfractions .22 .78" port) (newline port) + ((((build 'open-table) 'manifest #f) 'for-each-row) + (lambda (row) + (apply (lambda (file format category documentation) + (display (string-append "@item @code{" file) port) + (display "}" port) (newline port) + (display (string-append "@tab " documentation) port) + (newline port)) + row))) + (display "@end multitable" port) (newline port)) + +(define (append-info-node path node afile) + (let ((cat (open-file afile "a"))) + (do ((n (+ -1 2) (+ -1 n))) + ((negative? n) (close-port cat)) + (newline cat))) + (system (string-append "info -f " path " -n '" node "' -o - >> " afile))) + +(define (make-readme) + (require 'posix) + (let ((pipe (open-output-pipe "makeinfo --no-headers -o README")) + (scm-info (read-version + (in-vicinity (implementation-vicinity) "patchlvl.h")))) + (if (not pipe) (slib:error 'make-readme 'couldn't 'open 'pipe)) + (display "\ +This directory contains the distribution of scm" pipe) + (display scm-info pipe) + (display ". Scm conforms to +Revised^5 Report on the Algorithmic Language Scheme and the IEEE P1178 +specification. SCM runs under Amiga, Atari-ST, MacOS, MS-DOS, OS/2, +NOS/VE, Unicos, VMS, Unix and similar systems. + +@center @url{http://swissnet.ai.mit.edu/~jaffer/SCM.html} + +@section Manifest +" + pipe) + (print-manifest pipe) + (close-port pipe) + (set! scm-info (string-append "scm" scm-info ".info")) + (append-info-node scm-info "SLIB" "README") + (append-info-node scm-info "Making SCM" "README") + (append-info-node scm-info "Editing Scheme Code" "README") + (append-info-node scm-info "Problems Compiling" "README") + (append-info-node scm-info "Problems Linking" "README") + (append-info-node scm-info "Problems Running" "README") + (append-info-node scm-info "Testing" "README"))) + +(define (build-from-argv argv) + (cond ((string? argv) + (require 'read-command) + (set! argv (call-with-input-string argv read-command)))) + (let () + (define command (string->symbol (list-ref argv *optind*))) + (define argc (length argv)) + (cond + ((pair? argv) + (set! *optind* (+ 1 *optind*)) + ((make-command-server build '*commands*) + command + (lambda (comname comval options positions arities types + defaulters checks aliases) + (let* ((params (getopt->parameter-list + argc argv options arities types aliases)) + (fparams (fill-empty-parameters defaulters params))) + (cond ((not (list? params)) + (slib:warn 'build-from-argv 'not-parameters? fparams) + #f) + ((not (check-parameters checks fparams)) + (slib:warn 'build-from-argv 'check-parameters 'failed) + #f) + ((not (check-arities (map arity->arity-spec arities) fparams)) + (slib:error 'build-from-argv "arity error" fparams) #f) + (else (comval fparams)))))))))) + +(define (build-from-whole-argv argv) + (set! *optind* 0) + (set! *optarg* #f) + (build-from-argv argv)) + +(define b build-from-whole-argv) + +(define (b*) + (require 'read-command) + (do ((e (read-command) (read-command))) + ((eof-object? e)) + (cond ((null? e)) + (else + (cond ((not (string-ci=? (car e) "build")) + (set! e (cons "build" e)))) + (write (build-from-whole-argv e)) + (newline))) + (display "build> ") + (force-output))) + +(define (bi) (if (build-from-argv *argv*) #t (exit #f))) + +(cond (*interactive* + (display "type (b \"build <command-line>\") to build") (newline) + (display "type (b*) to enter build command loop") (newline))) + +;;; Local Variables: +;;; mode:scheme +;;; End: |