;;;; readline.setup -*- Scheme -*- ;;;; vim:ft=scheme: (use files) ;; get environment CFLAGS bindings (define old-files (append (filter (lambda (y) (or (string-suffix? ".o" y) (string-suffix? ".out" y))) (find-files "./")) '("readline-test" "readline.c"))) ;; cleans up from previous builds (do ((lst old-files (cdr lst))) ((null? lst)) (display (string-append "rm -f " (car lst))) (newline) (delete-file* (car lst))) (define-syntax compile/error ;; Required for Chicken < 4.6, which calls (reset) on (compile) error. (syntax-rules () ((compile/error args ...) (let ((old-reset (reset-handler))) (parameterize ((reset-handler (lambda () (parameterize ((reset-handler old-reset)) (error 'compile "compilation error"))))) (compile args ...)))))) (define rl-extra-cflags (string-append "-C -D_GNU_SOURCE=1" " -C -std=gnu99" (let ((cflags (get-environment-variable "CFLAGS"))) (if (and cflags (not (string=? cflags ""))) (string-append " -C " (string-join (string-split cflags " ") " -C ")) "")) )) (define-syntax check-rllibs (syntax-rules () ((_ libs) (and (print "trying: " libs) (handle-exceptions e #f (compile/error readline-test.scm ,rl-extra-cflags ,libs)) libs)))) ;(define curry (lambda (f . c) (lambda x (apply f (append c x))))) #;(define rl-extralib (list-ref (list-index (lambda (y) (equal? #t y)) (list (check-rllibs " -lreadline") (check-rllibs " -lreadinline -lhistory") (check-rllibs " -lreadline -lncurses") (check-rllibs " -lreadline -lcurses") (check-rllibs " -lreadline -ltermcap") (check-rllibs " -lreadline -lhistory -lncurses") (check-rllibs " -lreadline -lhistory -lcurses") (check-rllibs " -lreadline -lhistory -ltermcap") (check-rllibs " -lreadline -lhistory -lncurses") (check-rllibs " -lreadline -lhistory -lcurses") (check-rllibs " -lreadline -lhistory -ltermcap"))))) (define rl-extralib (or (check-rllibs "-lreadline -lhistory -ltermcap") (check-rllibs "-lreadline -lhistory -lcurses") (check-rllibs "-lreadline -lhistory -lncurses") (check-rllibs "-lreadline -ltermcap") (check-rllibs "-lreadline -lcurses") (check-rllibs "-lreadline -lhistory") (check-rllibs "-lreadline -lncurses") (check-rllibs "-lreadline") (error (string-append "This extension requires GNU readline. GNU readline " "may be found at ftp://ftp.gnu.org/pub/gnu/readline\n" "For more information, please consult " "http://wiki.call-cc.org/egg/readline#installation-problems\n")))) (compile -s -O2 readline.scm ,rl-extra-cflags ,rl-extralib) (compile -c -O2 -d0 -j readline readline.scm -o readline-static.o -unit readline ,rl-extra-cflags ,rl-extralib) (compile -s -O2 -d0 readline.import.scm) (install-extension 'readline '("readline.so" "readline.import.so" "readline-static.o") `((version "4.1.3") (static "readline-static.o") (static-options ,rl-extralib)))