(use posix) (define madvise-test #< int main(){ int fake_fd = 0; posix_fadvise(fake_fd,0,0,POSIX_FADV_SEQUENTIAL); return posix_fadvise(fake_fd,0,0,POSIX_FADV_NOREUSE); } CODE ) (define sendfile-bsd-test #< #include #include int main(){ int src,dst; off_t offset,res; return sendfile(src,dst,offset,0,NULL,&res,0); } CODE ) (define sendfile-macos-test #< #include #include int main(){ int src,dst; off_t offset,res; return sendfile(src,dst,offset,&res,0,0); } CODE ) (define sendfile-sun-test #< int main(){ int dst; sendfilevec_t fvec; size_t written; return sendfile(dst,&fvec,1,&written); } CODE ) (define sendfile-linux-test #< int main(){ int in,out; off_t offset; return sendfile(in,out,&offset,0); } CODE ) (define mmap-test #< int main(){ int src; return mmap(0, 100, PROT_READ | PROT_WRITE, MAP_SHARED,src, 0); } CODE ) (define madvise? (try-compile madvise-test compile-only: #t)) (define posix-fadvise? (try-compile posix-fadvise-test compile-only: #t)) (define mmap? (try-compile mmap-test compile-only: #t)) (define sendfile? (cond-expand (linux (try-compile sendfile-linux-test compile-only: #t)) ((or netbsd openbsd freebsd) (try-compile sendfile-bsd-test compile-only: #t)) (macosx (try-compile sendfile-macos-test compile-only: #t)) (sun (try-compile sendfile-sun-test compile-only: #t)) (else #f))) ;; Compatibility with older chickens (if (string< (chicken-version) "4.6") (copy-file (make-pathname "backward-compatibility" "copy-port.scm") (make-pathname (current-directory) "backward-compatibility.scm")) (with-output-to-file "backward-compatibility.scm" (cut display ""))) (let ((features '())) (when madvise? (set! features (cons '-D (cons 'madvise features)))) (when posix-fadvise? (set! features (cons '-D (cons 'posix-fadvise features)))) (when mmap? (set! features (cons '-D (cons 'mmap features)))) (when sendfile? (set! features (cons '-D (cons 'sendfile features)))) (compile -s -O2 -d0 ,@features sendfile.scm -j sendfile) (compile -s -O2 -d0 sendfile.import.scm) (compile -c -O2 -d0 ,@features sendfile.scm -unit sendfile -o sendfile-static.o) (install-extension 'sendfile '("sendfile.so" "sendfile.import.so" "sendfile-static.o") '((version "1.7.25") (static "sendfile-static.o") (documentation "sendfile.html"))))