527 lines
34 KiB
Scheme
527 lines
34 KiB
Scheme
(define-library
|
|
(libs data)
|
|
(import (scheme base)
|
|
(scheme write)
|
|
(scheme file)
|
|
(scheme process-context)
|
|
(srfi 170)
|
|
(libs util))
|
|
(export data)
|
|
(begin
|
|
(define data
|
|
`((chezscheme
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((separator (cond-expand (windows ";") (else ":"))))
|
|
(apply string-append
|
|
`("chezscheme "
|
|
,(util-getenv "COMPILE_R7RS_CHEZSCHEME")
|
|
" "
|
|
,(if (and (null? prepend-directories)
|
|
(null? append-directories))
|
|
""
|
|
(apply string-append
|
|
(list "--libdirs "
|
|
"\""
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item separator))
|
|
(append prepend-directories append-directories)))
|
|
"\"")))
|
|
" --program "))))))
|
|
(chibi
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("chibi-scheme"
|
|
" "
|
|
,(util-getenv "COMPILE_R7RS_CHIBI")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I" " " item " "))
|
|
prepend-directories)
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-A" " " item " "))
|
|
append-directories))))))
|
|
(chicken
|
|
(type . compiler)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
(let ((unit (string-append (if (string-starts-with? library-file "srfi")
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\.))))
|
|
(out (string-append (if (string-starts-with? library-file "srfi")
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\.))
|
|
".o"))
|
|
(static-out (string-append (if (string-starts-with? library-file "srfi")
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\.))
|
|
".a")))
|
|
`(,(string-append "csc -R r7rs -X r7rs "
|
|
(util-getenv "COMPILE_R7RS_CHICKEN")
|
|
" -static -c -J -o "
|
|
out
|
|
" "
|
|
(search-library-file (append prepend-directories append-directories) library-file)
|
|
" "
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append "-I " item " "))
|
|
(append append-directories
|
|
prepend-directories)))
|
|
"-unit "
|
|
unit)
|
|
,(string-append "ar rcs " static-out " " out)))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
`(,(string-append "csc -R r7rs -X r7rs "
|
|
(util-getenv "COMPILE_R7RS_CHICKEN")
|
|
" -static "
|
|
" "
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append "-I " item " "))
|
|
(append append-directories prepend-directories)))
|
|
(apply string-append
|
|
(map (lambda (library-file)
|
|
(string-append "-uses "
|
|
(if (string-starts-with? library-file "srfi")
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
|
|
(string-replace (string-cut-from-end library-file 4) #\/ #\.))
|
|
" "))
|
|
library-files))
|
|
" -output-file "
|
|
output-file
|
|
" "
|
|
input-file)))))
|
|
(cyclone
|
|
(type . compiler)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
`(,(string-append "cyclone "
|
|
(util-getenv "COMPILE_R7RS_CYCLONE")
|
|
" "
|
|
(apply string-append
|
|
(map (lambda (item) (string-append "-I " item " ")) prepend-directories))
|
|
(apply string-append
|
|
(map (lambda (item) (string-append "-A " item " ")) append-directories))
|
|
(search-library-file (append prepend-directories
|
|
append-directories)
|
|
library-file)))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
`(,(string-append "cyclone "
|
|
(util-getenv "COMPILE_R7RS_CYCLONE")
|
|
" "
|
|
(apply string-append
|
|
(map (lambda (item) (string-append "-I " item " ")) prepend-directories))
|
|
(apply string-append
|
|
(map (lambda (item) (string-append "-A " item " ")) append-directories))
|
|
input-file)
|
|
,(string-append (if (not (string=? (string-cut-from-end input-file 4) output-file))
|
|
(string-append
|
|
"mv "
|
|
(string-cut-from-end input-file 4)
|
|
" "
|
|
output-file)
|
|
"sleep 0"))))))
|
|
(foment
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("foment "
|
|
,(util-getenv "COMPILE_R7RS_FOMENT")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I" " " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A" " " item " "))
|
|
append-directories))))))
|
|
#;(gambit
|
|
(type . compiler)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
`(,(string-append "gsc "
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item "/ "))
|
|
(append prepend-directories
|
|
append-directories)))
|
|
(search-library-file (append append-directories
|
|
prepend-directories)
|
|
library-file)))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((output-tmp-file (string-append output-file ".tmp")))
|
|
`(,(string-append "echo \"#!/usr/bin/env gsi -:r7rs,search="
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item "/ "))
|
|
(append prepend-directories
|
|
append-directories)))
|
|
"\" > " output-tmp-file)
|
|
,(string-append "cat " input-file " >> " output-tmp-file)
|
|
,(string-append "gsc "
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item "/ "))
|
|
(append prepend-directories
|
|
append-directories)))
|
|
" -o " output-file
|
|
" -exe -nopreload "
|
|
output-tmp-file))))))
|
|
(gauche
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("gosh "
|
|
,(util-getenv "COMPILE_R7RS_GAUCHE")
|
|
" -r7 "
|
|
,@(map (lambda (item)
|
|
(string-append "-I" " " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A" " " item " "))
|
|
append-directories))))))
|
|
(guile
|
|
(type . interpreter)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
(let ((library-path (search-library-file (append append-directories
|
|
prepend-directories)
|
|
library-file)))
|
|
`(,(string-append "guild compile "
|
|
(if r6rs? " --r6rs -x .sls " " --r7rs -x .sld ")
|
|
" -O0 "
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append "-L" " " item " "))
|
|
(append prepend-directories
|
|
append-directories)))
|
|
" -o "
|
|
(string-append
|
|
(string-cut-from-end library-path 4)
|
|
".go")
|
|
library-path)))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("guile "
|
|
,(util-getenv "COMPILE_R7RS_GUILE")
|
|
,(if r6rs? " --r6rs -x .sls " " --r7rs -x .sld ")
|
|
,@(map (lambda (item)
|
|
(string-append "-L " item " "
|
|
"-L " (dirname item) " "))
|
|
(append prepend-directories
|
|
append-directories))
|
|
" -s"
|
|
,(string #\newline)
|
|
"!#")))))
|
|
(ikarus
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`( "IKARUS_LIBRARY_PATH="
|
|
,@(map (lambda (item) (string-append item ":")) prepend-directories)
|
|
,@(map (lambda (item) (string-append item ":")) append-directories)
|
|
" ikarus "
|
|
,(util-getenv "COMPILE_R7RS_IKARUS")
|
|
" --r6rs-script"
|
|
)))))
|
|
(ironscheme
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("ironscheme "
|
|
,(util-getenv "COMPILE_R7RS_IRONSCHEME")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I \"" item "\" "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-I \"" item "\" "))
|
|
append-directories))))))
|
|
(kawa
|
|
(type . interpreter)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
(let* ((load-paths (apply string-append
|
|
(append (list "-Dkawa.import.path=")
|
|
(map (lambda (item)
|
|
(string-append item "/*.sld:"))
|
|
(append prepend-directories
|
|
append-directories)))))
|
|
(library-file-path (search-library-file (append prepend-directories
|
|
append-directories)
|
|
library-file))
|
|
(output-dir
|
|
(let ((output-dir "."))
|
|
(for-each
|
|
(lambda (dir)
|
|
(when (string-starts-with? library-file-path
|
|
dir)
|
|
(set! output-dir dir)))
|
|
(append prepend-directories
|
|
append-directories))
|
|
output-dir))
|
|
(classpath
|
|
(apply
|
|
string-append
|
|
(map (lambda (dir)
|
|
(string-append dir ":"))
|
|
(append prepend-directories append-directories)))))
|
|
`(,(string-append
|
|
"CLASSPATH=" classpath
|
|
" kawa -J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED -J--enable-native-access=ALL-UNNAMED -J--enable-preview "
|
|
(util-getenv "COMPILE_R7RS_KAWA")
|
|
" "
|
|
load-paths
|
|
" -d " output-dir
|
|
" "
|
|
load-paths
|
|
" -C "
|
|
library-file-path)))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((dirs (append prepend-directories
|
|
append-directories
|
|
(list "/usr/local/share/kawa/lib"))))
|
|
(string-append "CLASSPATH="
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item ":"))
|
|
dirs))
|
|
" kawa --r7rs --full-tailcalls "
|
|
(util-getenv "COMPILE_R7RS_KAWA")
|
|
" -Dkawa.import.path="
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item "/*.sld:"))
|
|
dirs))
|
|
" ")))))
|
|
(larceny
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("sh"
|
|
,(string #\newline)
|
|
"filename=\"$(basename ${0})\""
|
|
,(string #\newline)
|
|
"tmpfile=\"/tmp/larceny.${filename}\""
|
|
,(string #\newline)
|
|
"tail -n+8 \"${0}\" > \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"larceny -nobanner -quiet -utf8 "
|
|
,(if r6rs? " -r6 " " -r7 ")
|
|
,(util-getenv "COMPILE_R7RS_LARCENY")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A " item " "))
|
|
append-directories)
|
|
" -program \"${tmpfile}\" -- \"$@\""
|
|
,(string #\newline)
|
|
"rm -rf \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"exit")))))
|
|
(loko
|
|
(type . compiler)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((out (string-cut-from-end input-file 4)))
|
|
`(,(string-append "LOKO_LIBRARY_PATH="
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item ":"))
|
|
prepend-directories))
|
|
(apply string-append
|
|
(map (lambda (item)
|
|
(string-append item ":"))
|
|
append-directories))
|
|
" loko "
|
|
(util-getenv "COMPILE_R7RS_LOKO")
|
|
" "
|
|
(if r6rs? "-std=r6rs" "-std=r7rs")
|
|
" "
|
|
"--compile"
|
|
" "
|
|
input-file)
|
|
,(string-append "mv " out " " output-file))))))
|
|
(meevax
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("meevax "
|
|
,(util-getenv "COMPILE_R7RS_MEEVAX")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I" " " item " "))
|
|
prepend-directories)
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-A" " " item " "))
|
|
append-directories)
|
|
)))))
|
|
(mit-scheme
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`(,"sh"
|
|
,(string #\newline)
|
|
"filename=\"$(basename ${0})\""
|
|
,(string #\newline)
|
|
"tmpfile=\"/tmp/mit-scheme.${filename}\""
|
|
,(string #\newline)
|
|
"tail -n+8 \"${0}\" > \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"mit-scheme --batch-mode --no-init-file "
|
|
,@(map
|
|
(lambda (item)
|
|
(string-append "--load "
|
|
(search-library-file (append append-directories
|
|
prepend-directories)
|
|
item)
|
|
" "))
|
|
library-files)
|
|
" --load \"${tmpfile}\" --eval \"(exit 0)\" --args \"$@\""
|
|
,(string #\newline)
|
|
"rm -rf \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"exit"
|
|
,(string #\newline))))))
|
|
(mosh
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((dirs (append append-directories prepend-directories)))
|
|
(apply string-append
|
|
`(,(if (> (length dirs) 0)
|
|
(string-append
|
|
"MOSH_LOADPATH="
|
|
(apply string-append
|
|
(map (lambda (item) (string-append item ":")) dirs)))
|
|
"")
|
|
" mosh "
|
|
,(util-getenv "COMPILE_R7RS_MOSH")))))))
|
|
(racket
|
|
(type . interpreter)
|
|
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
|
|
(let* ((full-path (search-library-file (append append-directories
|
|
prepend-directories)
|
|
library-file))
|
|
(library-rkt-file (change-file-suffix full-path ".rkt")))
|
|
(if r6rs?
|
|
`(,(string-append "plt-r6rs --compile " library-file))
|
|
`(,(string-append "printf "
|
|
"'#lang r7rs\\n"
|
|
"(import (except (scheme base) let let-values let*-values string-copy string-copy! string-for-each string-map string-fill! string->list))\\n"
|
|
"(include \"" (path->filename library-file) "\")\\n' > "
|
|
library-rkt-file))))))
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(let ((rkt-input-file (if (string=? input-file "")
|
|
""
|
|
(change-file-suffix input-file ".rkt"))))
|
|
(apply string-append
|
|
`("racket "
|
|
,(util-getenv "COMPILE_R7RS_RACKET")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-S " item " "))
|
|
(append prepend-directories
|
|
append-directories))
|
|
,(if r6rs?
|
|
""
|
|
(string-append (string #\newline) "#lang r7rs"))))))))
|
|
(sagittarius
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("sash -d "
|
|
,(util-getenv "COMPILE_R7RS_SAGITTARIUS")
|
|
,(if r6rs? " -r6 " " -r7 ")
|
|
,@(map (lambda (item)
|
|
(string-append " -L " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append " -A " item " "))
|
|
append-directories))))))
|
|
(skint
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("sh"
|
|
,(string #\newline)
|
|
"filename=\"$(basename ${0})\""
|
|
,(string #\newline)
|
|
"tmpfile=\"/tmp/skint.${filename}\""
|
|
,(string #\newline)
|
|
"tail -n+8 \"${0}\" > \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"skint "
|
|
,(util-getenv "COMPILE_R7RS_SKINT")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I " item "/ "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A " item "/ "))
|
|
append-directories)
|
|
" --program=\"${tmpfile}\" \"$@\""
|
|
,(string #\newline)
|
|
"rm -rf \"${tmpfile}\""
|
|
,(string #\newline)
|
|
"exit"
|
|
,(string #\newline))))))
|
|
(stklos
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("stklos "
|
|
,(util-getenv "COMPILE_R7RS_STKLOS")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A " item " "))
|
|
append-directories))))))
|
|
(tr7
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("TR7_LIB_PATH="
|
|
,@(map (lambda (item)
|
|
(string-append item ":"))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append item ":"))
|
|
append-directories)
|
|
" tr7i "
|
|
,(util-getenv "COMPILE_R7RS_TR7"))))))
|
|
(vicare
|
|
(type . compiler)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("vicare"
|
|
" "
|
|
,(util-getenv "COMPILE_R7RS_VICARE")
|
|
" "
|
|
,@(map (lambda (item)
|
|
(string-append "-I " item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "-A " item " "))
|
|
append-directories)
|
|
" "
|
|
"--compile-program"
|
|
,input-file)))))
|
|
(ypsilon
|
|
(type . interpreter)
|
|
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
|
|
(apply string-append
|
|
`("ypsilon "
|
|
,(util-getenv "COMPILE_R7RS_YPSILON")
|
|
,(if r6rs? " --r6rs " " --r7rs ")
|
|
" --mute"
|
|
" --quiet "
|
|
,@(map (lambda (item)
|
|
(string-append "--sitelib=" item " "))
|
|
prepend-directories)
|
|
,@(map (lambda (item)
|
|
(string-append "--sitelib=" item " "))
|
|
append-directories)
|
|
" --top-level-program")))))))))
|