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