(define (warn . lines) (parameterize ((current-output-port (current-error-port))) (newline) (for-each (lambda (s) (printf "fuse: ~a~n" s)) lines) (newline))) (cond-expand ((or linux openbsd fuse-force-install)) ((or freebsd macosx) (warn "This extension is only officially supported on Linux and OpenBSD." "It has been lightly tested on this platform, but may not work correctly." "See http://api.call-cc.org/doc/fuse#sec:Platform_Notes for more information.")) (else (warn "This extension is only officially supported on Linux and OpenBSD." "To force installation anyway, provide `-D fuse-force-install`.") (exit 78))) (define compiler-flags (let ((f (with-input-from-pipe "pkg-config --libs --cflags fuse" read-line))) (cond ((eof-object? f) (warn "pkg-config failed." "Guessing at the correct compiler flags." "This is unlikely to work.") (cond-expand (openbsd '(-lfuse -C -pthread)) (else '(-lfuse -C -D_FILE_OFFSET_BITS=64 -C -pthread)))) (else (foldl (lambda (a s) (if (string-prefix? "-l" s) `(,s ,@a) `(-C ,s ,@a))) '() (string-split f)))))) (compile -d0 -O2 ,@compiler-flags -sJ libfuse.scm) (compile -d0 -O2 ,@compiler-flags -cs -unit libfuse -no-module-registration libfuse.scm) (compile -d0 -O2 ,@compiler-flags -sJ -uses libfuse fuse.scm libfuse.o) (compile -d0 -O2 -s libfuse.import.scm) (compile -d0 -O2 -s fuse.import.scm) (compile -ot fuse.types -A fuse.scm) (install-extension 'fuse '("fuse.so" "fuse.import.so" "libfuse.so" "libfuse.import.so" "fuse.types") '((version "0.0.16")))