#lang scheme (require dynext/compile dynext/link dynext/file) (define name "extension") (define source (append-c-suffix name)) (define obj (append-object-suffix name)) (define libdir (build-path "compiled" "native" (system-library-subpath))) (when (not (directory-exists? libdir)) (make-directory* libdir)) (define lib (build-path libdir (append-extension-suffix (string-append name "_ss")))) (define (newer-than? dest source) (call/cc (λ (return) (> (file-or-directory-modify-seconds source #f (λ () (return #f))) (file-or-directory-modify-seconds dest #f (λ () (return #t))))))) (when (newer-than? obj source) (compile-extension #f source obj null)) (when (newer-than? lib obj) (link-extension #f (list obj) lib))