1#lang racket/base 2(require compiler/compilation-path 3 compiler/private/dep 4 setup/collects) 5 6(provide module-recorded-dependencies) 7 8(define (module-recorded-dependencies path) 9 (define collection-cache (make-hash)) 10 (define (module-dependencies path all-deps) 11 (define dep-path (path-add-extension (get-compilation-path path) #".dep")) 12 (define deps (with-handlers ([exn:fail:filesystem? (lambda (exn) #f)] 13 [exn:fail:read? (lambda (exn) #f)]) 14 (call-with-input-file* dep-path read))) 15 (for/fold ([all-deps all-deps]) ([dep (in-list (if (and (list? deps) 16 (pair? deps) 17 (pair? (cdr deps)) 18 (pair? (cddr deps))) 19 (cdddr deps) 20 '()))]) 21 (define p (collects-relative*->path (dep->encoded-path dep) collection-cache)) 22 (cond 23 [(hash-ref all-deps p #f) all-deps] 24 [else 25 (define new-deps (hash-set all-deps p #t)) 26 (cond 27 [(external-dep? dep) new-deps] 28 [else (module-dependencies p new-deps)])]))) 29 (hash-keys (module-dependencies (simplify-path path) #hash()))) 30 31(define (get-compilation-path path) 32 (define-values (dir name) (get-compilation-dir+name path)) 33 (build-path dir name)) 34 35(define (collects-relative*->path p cache) 36 (if (bytes? p) 37 (bytes->path p) 38 (hash-ref! cache p (lambda () (collects-relative->path p))))) 39