diff --git a/.gitmodules b/.gitmodules
index 053f00a6fb..57a4e62df1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
[submodule "nanopass"]
path = nanopass
url = https://github.com/nanopass/nanopass-framework-scheme.git
+[submodule "stex"]
+ path = stex
+ url = https://github.com/dybvig/stex
diff --git a/LOG b/LOG
index 678b74a384..bce3b12eda 100644
--- a/LOG
+++ b/LOG
@@ -88,3 +88,19 @@
- added pdtml flag, which if set to t causes profile-dump-html to be
called at the end of a mat run.
mats/Mf-base
+- compile-whole-program and compile-whole-library now copy the hash-bang
+ line from the wpo file (if it has one) to the object file.
+ compile.ss,
+ 7.ms
+- stex is now a submodule. csug/Makefile and release_notes/Makefile
+ set and use the required Scheme and STEXLIB variables accordingly.
+ they default the machine type to a6le, but this can be overridden
+ and is by the generated top-level Makefile. the generated top-level
+ Makefile now has a new docs target that runs make in both csug and
+ release_notes, and an updated distclean target that cleans the same.
+ the annoying csug Makefile .fig.pdf rule redefinition is now gone.
+ copyright.stex and csug.stex now list May 2016 as the revision month
+ and date; this will have to be updated for future releases.
+ configure, makefiles/Makefile.in,
+ csug/Makefile, copyright.stex, csug.stex,
+ release_notes/Makefile
diff --git a/configure b/configure
index 1493aaab76..c15a117af2 100755
--- a/configure
+++ b/configure
@@ -239,7 +239,9 @@ git submodule init && git submodule update || exit 1
./workarea $m $w
-sed -e 's/$(workarea)/'$w'/g' makefiles/Makefile.in > Makefile
+sed -e 's/$(m)/'$m'/g'\
+ -e 's/$(workarea)/'$w'/g'\
+ makefiles/Makefile.in > Makefile
cat makefiles/Makefile-workarea.in > $w/Makefile
diff --git a/csug/Makefile b/csug/Makefile
index 2d916f59a9..8029d02adc 100644
--- a/csug/Makefile
+++ b/csug/Makefile
@@ -1,9 +1,13 @@
+m = a6le
+Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot
+STEXLIB=../stex
+installdir=/tmp/csug9
+
x = csug
latex = pdflatex
stexmacrofiles = tspl4-prep
bib = $(x).bib
index=yes
-installdir=/u/dyb/crs/www/csug9
TSPL=tspl4
DIR=$(shell basename `pwd`)
@@ -39,15 +43,7 @@ logcheck2: $(x).thirdrun
false;\
fi
-include ~/stex/Mf-stex
-
-# HACK to prevent lines from dropping below .5pt
-# .5pt = 1/144in = 8.3 1200ths, so go for 10 1200ths
-.fig.pdf:
- fig2dev -Leps $*.fig > $*.eps\
- && grep -q '7.500 slw' $*.eps\
- && sed -e 's/7.500 slw/10.000 slw/' $*.eps | epstopdf --filter > $*.pdf\
- && /bin/rm $*.eps || (echo "CHECK GREP"; false)
+include $(STEXLIB)/Mf-stex
stexsrc = csug.stex title.stex copyright.stex contents.stex\
preface.stex intro.stex use.stex expeditor.stex debug.stex foreign.stex\
@@ -79,7 +75,7 @@ $(x).secondrun: $(x).presecondrun
$(x).presecondrun: $(x).firstrun
cat tspl.aux >> $x.aux
cat tspl.rfm >> $x.rfm
- echo '(summary-make "$x")' | scheme setup.ss summary.ss
+ echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss
cat tspl.idx >> $x.idx
touch $(x).presecondrun
@@ -87,7 +83,7 @@ $(x).thirdrun: $(x).prethirdrun canned/cisco-logo.png
$(x).prethirdrun: $(x).secondrun
cat tspl.aux >> $x.aux
cat tspl.rfm >> $x.rfm
- echo '(summary-make "$x")' | scheme setup.ss summary.ss
+ echo '(summary-make "$x")' | $(Scheme) setup.ss summary.ss
cat tspl.idx >> $x.idx
touch $(x).prethirdrun
@@ -146,7 +142,7 @@ checklibs: $(x).thirdrun
code: $(stexsrc)
extract.pl $(stexsrc) > code
- echo '(load "code" pretty-print)' | vscheme csv7.5 -q
+ echo '(load "code" pretty-print)' | $(Scheme) -q
$(x).clean:
-/bin/rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\
diff --git a/csug/copyright.stex b/csug/copyright.stex
index cb03cf152e..b17e550eba 100644
--- a/csug/copyright.stex
+++ b/csug/copyright.stex
@@ -22,7 +22,7 @@ Licensed under the Apache License Version 2.0\\
http://www.apache.org/licenses/LICENSE-2.0
% NB: also update corresponding notice in csug.stex
-Revised \INSERTREVISIONMONTHSPACEYEAR for Chez Scheme Version 9.4.
+Revised May 2016 for Chez Scheme Version 9.4.
\medskip\noindent
Cisco and the Cisco logo are trademarks or registered trademarks
diff --git a/csug/csug.stex b/csug/csug.stex
index 664c66575d..60e83e06bf 100644
--- a/csug/csug.stex
+++ b/csug/csug.stex
@@ -44,7 +44,7 @@
Copyright © 2016 Cisco Systems, Inc.
Licensed under the Apache License Version 2.0
(full copyright notice.).
-Revised \INSERTREVISIONMONTHSPACEYEAR for Chez Scheme Version 9.4
+Revised May 2016 for Chez Scheme Version 9.4
about this book
}}
diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in
index 85c73a7db3..861e84bab4 100644
--- a/makefiles/Makefile.in
+++ b/makefiles/Makefile.in
@@ -27,10 +27,16 @@ test:
bootfiles:
(cd $(workarea) && $(MAKE) bootfiles)
+docs: build
+ (cd csug && $(MAKE) m=$(m))
+ (cd release_notes && $(MAKE) m=$(m))
+
clean:
(cd $(workarea) && $(MAKE) clean)
distclean:
rm -rf $(workarea)
+ (cd csug ; make reallyreallyclean)
+ (cd release_notes ; make reallyreallyclean)
rm -f Makefile
rm -f Make.out
diff --git a/mats/7.ms b/mats/7.ms
index 4617c2e411..21ea012a2f 100644
--- a/mats/7.ms
+++ b/mats/7.ms
@@ -1952,6 +1952,44 @@ evaluating module init
(equal?
(separate-eval '(load "testfile-wpo-ext-all.so"))
"(9 . 5)\n")
+
+ ; test propagation of #! shell-script line
+ (begin
+ (define $hash-bang-line "#! /usr/bin/scheme --program\n")
+ (delete-file "testfile-wpo-c8.so")
+ (delete-file "testfile-wpo-c8-all.so")
+ (delete-file "testfile-wpo-c8.wpo")
+ (with-output-to-file "testfile-wpo-c8.ss"
+ (lambda ()
+ (display-string $hash-bang-line)
+ (for-each pretty-print
+ '((import (chezscheme))
+ (printf "hello\n"))))
+ 'replace)
+ (separate-compile
+ '(lambda (x)
+ (parameterize ([generate-wpo-files #t])
+ (compile-program x)))
+ 'wpo-c8)
+ (separate-compile
+ '(lambda (x)
+ (compile-whole-program (format "~a.wpo" x) (format "~a-all.so" x)))
+ 'wpo-c8)
+ #t)
+
+ (equal?
+ (separate-eval '(load "testfile-wpo-c8.so"))
+ "hello\n")
+
+ (equal?
+ (separate-eval '(load "testfile-wpo-c8-all.so"))
+ "hello\n")
+
+ (equal?
+ (call-with-port (open-file-input-port "testfile-wpo-c8-all.so")
+ (lambda (ip)
+ (get-bytevector-n ip (string-length $hash-bang-line))))
+ (string->utf8 $hash-bang-line))
)
(mat compile-whole-library
@@ -3037,8 +3075,7 @@ evaluating module init
'cwl-c13)
(separate-compile
'(lambda (x)
- (lambda (op)
- (compile-whole-program (format "~a.wpo" x) (format "~a.so" x))))
+ (compile-whole-program (format "~a.wpo" x) (format "~a.so" x)))
'cwl-c13)
#t)
diff --git a/release_notes/Makefile b/release_notes/Makefile
index 750313002c..257a0d31e8 100644
--- a/release_notes/Makefile
+++ b/release_notes/Makefile
@@ -1,3 +1,7 @@
+m = a6le
+Scheme=../$m/bin/$m/scheme -b ../$m/boot/$m/petite.boot -b ../$m/boot/$m/scheme.boot
+STEXLIB=../stex
+
# define default document pathname here
# override on command line with 'make x=newdoc'
x = release_notes
@@ -17,7 +21,7 @@ bib =
# define index if an index is to be generated
# index=yes
-include ~/stex/Mf-stex
+include $(STEXLIB)/Mf-stex
# define or override suffixes here
diff --git a/s/compile.ss b/s/compile.ss
index 7a55d5be81..7050af26c4 100644
--- a/s/compile.ss
+++ b/s/compile.ss
@@ -757,17 +757,36 @@
(define read-input-file
(lambda (who ifn)
- (call-with-port ($open-file-input-port who ifn (file-options compressed))
+ (call-with-port ($open-file-input-port who ifn)
(lambda (ip)
(on-reset (close-port ip)
- (if ($compiled-file-header? ip)
- (let loop ([rls '()])
- (let ([x (fasl-read ip)])
- (cond
- [(eof-object? x) (reverse rls)]
- [(Lexpand? x) (loop (cons x rls))]
- [else ($oops who "unexpected wpo file object ~s" x)])))
- ($oops who "input file is source ~s" ifn)))))))
+ (let ([hash-bang-line
+ (let ([start-pos (port-position ip)])
+ (if (and (eqv? (get-u8 ip) (char->integer #\#))
+ (eqv? (get-u8 ip) (char->integer #\!))
+ (let ([b (lookahead-u8 ip)])
+ (or (eqv? b (char->integer #\space))
+ (eqv? b (char->integer #\/)))))
+ (let-values ([(op get-bv) (open-bytevector-output-port)])
+ (put-u8 op (char->integer #\#))
+ (put-u8 op (char->integer #\!))
+ (let loop ()
+ (let ([b (get-u8 ip)])
+ (unless (eof-object? b)
+ (put-u8 op b)
+ (unless (eqv? b (char->integer #\newline))
+ (loop)))))
+ (get-bv))
+ (begin (set-port-position! ip start-pos) #f)))])
+ (port-file-compressed! ip)
+ (if ($compiled-file-header? ip)
+ (let loop ([rls '()])
+ (let ([x (fasl-read ip)])
+ (cond
+ [(eof-object? x) (values hash-bang-line (reverse rls))]
+ [(Lexpand? x) (loop (cons x rls))]
+ [else ($oops who "unexpected wpo file object ~s" x)])))
+ ($oops who "input file is source ~s" ifn))))))))
(define find-library
(lambda (who path what library-ext*)
@@ -794,7 +813,8 @@
(cond
[(find-library who path "wpo" (map (lambda (ext) (cons (car ext) (string-append (path-root (cdr ext)) ".wpo"))) (library-extensions))) =>
(lambda (fn)
- (let-values ([(no-program node*) (process-ir*! (read-input-file who fn) fn #f libs-visible?)])
+ (let*-values ([(hash-bang-line ir*) (read-input-file who fn)]
+ [(no-program node*) (process-ir*! ir* fn #f libs-visible?)])
(values fn node*)))]
[(find-library who path "so" (library-extensions)) =>
(lambda (fn) (values fn (read-binary-file path fn libs-visible?)))]
@@ -1250,13 +1270,12 @@
`(revisit-only ,(build-combined-library-ir node*)))))))
(define finish-compile
- (lambda (who msg ifn ofn x1)
- (let ([op ($open-file-output-port who ofn
- (if (compile-compressed)
- (file-options replace compressed)
- (file-options replace)))])
+ (lambda (who msg ifn ofn hash-bang-line x1)
+ (let ([op ($open-file-output-port who ofn (file-options replace))])
(on-reset (delete-file ofn #f)
(on-reset (close-port op)
+ (when hash-bang-line (put-bytevector op hash-bang-line))
+ (when (compile-compressed) (port-file-compressed! op))
(parameterize ([$target-machine (constant machine-type-name)]
; dummy sfd for block-profile optimization
[$sfd (source-file-descriptor ifn #xc7c7c7)]
@@ -1310,29 +1329,29 @@
[(ifn ofn libs-visible?)
(unless (string? ifn) ($oops who "~s is not a string" ifn))
(unless (string? ofn) ($oops who "~s is not a string" ofn))
- (let ([entry* (read-input-file who ifn)])
- (let-values ([(program-entry lib* no-wpo*) (build-graph who entry* ifn #t #f libs-visible?)])
- (safe-assert program-entry)
- (safe-assert (null? no-wpo*))
- (let ([node* (topological-sort program-entry lib*)])
- (finish-compile who "whole program" ifn ofn
- (build-program-body program-entry node* lib*))
- (build-required-library-list node* lib*))))])))
+ (let*-values ([(hash-bang-line ir*) (read-input-file who ifn)]
+ [(program-entry lib* no-wpo*) (build-graph who ir* ifn #t #f libs-visible?)])
+ (safe-assert program-entry)
+ (safe-assert (null? no-wpo*))
+ (let ([node* (topological-sort program-entry lib*)])
+ (finish-compile who "whole program" ifn ofn hash-bang-line
+ (build-program-body program-entry node* lib*))
+ (build-required-library-list node* lib*)))])))
(set-who! compile-whole-library
(lambda (ifn ofn)
(unless (string? ifn) ($oops who "~s is not a string" ifn))
(unless (string? ofn) ($oops who "~s is not a string" ofn))
- (let ([entry* (read-input-file who ifn)])
- (let-values ([(no-program lib* wpo*) (build-graph who entry* ifn #f (generate-wpo-files) #t)])
- (safe-assert (not no-program))
- (safe-assert (or (not (generate-wpo-files)) (not (null? wpo*))))
- (when (null? lib*) ($oops "did not find libraries in input file ~s" ifn))
- (let ([node* (topological-sort #f lib*)])
- (write-wpo-file who ofn wpo*)
- (finish-compile who "whole library" ifn ofn
- (build-library-body node* lib*))
- (build-required-library-list node* lib*)))))))
+ (let*-values ([(hash-bang-line ir*) (read-input-file who ifn)]
+ [(no-program lib* wpo*) (build-graph who ir* ifn #f (generate-wpo-files) #t)])
+ (safe-assert (not no-program))
+ (safe-assert (or (not (generate-wpo-files)) (not (null? wpo*))))
+ (when (null? lib*) ($oops "did not find libraries in input file ~s" ifn))
+ (let ([node* (topological-sort #f lib*)])
+ (write-wpo-file who ofn wpo*)
+ (finish-compile who "whole library" ifn ofn hash-bang-line
+ (build-library-body node* lib*))
+ (build-required-library-list node* lib*))))))
(set! $c-make-code
(lambda (func subtype free name size code-list info pinfo*)
diff --git a/stex b/stex
new file mode 160000
index 0000000000..3bd2b86cc5
--- /dev/null
+++ b/stex
@@ -0,0 +1 @@
+Subproject commit 3bd2b86cc5ae1797d05fc5cc6f11cc43383f741d