scsh-make/makefile-diplom.scm

102 lines
2.8 KiB
Scheme
Raw Normal View History

(define-structure makefile
(export fix-broken-urls
make-all!
make-pdf!
make-ps!
make-clean!
make-mrproper!)
(open scheme-with-scsh
srfi-1
srfi-9
macros
make
to-rule-set
templates
autovars)
(begin
(define clean-files
(list "scsh-make.aux" "scsh-make.log" "scsh-make.blg"))
(define mrproper-files
(list "scsh-make.pdf" "scsh-make.ps" "scsh-make.advi"
"scsh-make.bbl" "scsh-make.dvi" "fig/mcast.eps"))
(define (rerun? target prereqs)
(let ((re (rx (: "Rerun to get cross-references right."))))
(if (file-not-exists? target)
#t
(if (null? prereqs)
#f
(let* ((inp (open-input-file (car prereqs)))
(str (port->string inp)))
(close inp)
(regexp-search re str))))))
;; fix lines with broken wrapped URLs
(define (fix-broken-urls fname)
(let* ((re (rx (: (submatch (* (- any #\newline "%")))
(submatch "%" #\newline))))
(inp (open-input-file fname))
(s (port->string inp)))
(close inp)
(with-current-output-port
(open-output-file fname)
(display (regexp-substitute/global #f re s 'pre 1 'post)))))
(define rule-set
(makefile
(common-%
(file "fig/%.eps"
("fig/%.fig")
(run (fig2dev -L "eps" ,($<) ,($@))))
(file "png/%.eps"
("png/%.png")
(run (convert ,($<) ,($@))))
(file "jpg/%.eps"
("jpg/%.jpg")
(run (convert ,($<) ,($@))))
(file "%.advi"
("%.dvi")
(run (dvicopy ,($<) ,($@))))
(file "%.pdf"
("%.ps")
(run (ps2pdf ,"-sPAPERSIZE=a4" ,($<) ,($@))))
(file "%.ps"
("%.dvi")
(run (dvips -o ,($@) ,($<))))
(once "%.dvi"
("%.aux" "%.aux" "%.aux" "%.aux")
#t)
(rerun? "%.aux"
("%.log")
(run (latex ,($*))))
(file "scsh-make.log"
("scsh-make.tex" "scsh-make.bst"
"einleitung.tex" "konzepte.tex" "makefile.tex"
"embedded.tex" "jobserver.tex" "zusammenfassung.tex"
"fig/mcast.eps" "makefile.scm")
(run (latex ,($<)))
(run (bibtex ,"scsh-make"))
(fix-broken-urls "scsh-make.bbl")
(run (latex ,"scsh-make"))))
(always "all"
("scsh-make.pdf" "scsh-make.ps" "scsh-make.advi")
(display ";;; done: building ")
(display ($@))
(newline))
(always "clean"
()
(for-each (lambda (f) (delete-filesys-object f))
clean-files))
(always "mrproper"
()
(for-each (lambda (f) (delete-filesys-object f))
mrproper-files))))
(define (make-all!) (make rule-set (list "all")))
(define (make-pdf!) (make rule-set (list "scsh-make.pdf")))
(define (make-ps!) (make rule-set (list "scsh-make.ps")))
(define (make-clean!) (make rule-set (list "clean")))
(define (make-mrproper!) (make rule-set (list "mrproper")))))