summaryrefslogtreecommitdiffstats
path: root/build.features
blob: 1921d3ca3c49fadedc3867c829e6169fda91db47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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: