installer-tgz.rkt (1555B)
1 #lang at-exp racket/base 2 (require racket/system 3 racket/file 4 racket/format 5 file/tar 6 setup/cross-system) 7 8 (provide installer-tgz) 9 10 (define (system/show . l) 11 (displayln (apply ~a #:separator " " l)) 12 (unless (apply system* (find-executable-path (car l)) (cdr l)) 13 (error "failed"))) 14 15 (define (generate-tgz src-dir dest-path target-dir-name readme) 16 (system/show "chmod" "-R" "g+w" src-dir) 17 (define dest (path->complete-path dest-path)) 18 (when (file-exists? dest) (delete-file dest)) 19 (printf "Tarring to ~s\n" dest) 20 (when readme 21 (call-with-output-file* 22 (build-path src-dir "README") 23 #:exists 'truncate 24 (lambda (o) 25 (display readme o)))) 26 (parameterize ([current-directory src-dir]) 27 (apply tar-gzip dest #:path-prefix target-dir-name (directory-list)))) 28 29 (define (installer-tgz source? base-name dir-name dist-suffix readme) 30 (define tgz-path (format "bundle/~a-~a~a.tgz" 31 base-name 32 (if source? 33 "src" 34 (get-platform-name)) 35 dist-suffix)) 36 (generate-tgz "bundle/racket" tgz-path 37 dir-name 38 readme) 39 tgz-path) 40 41 (define (get-platform-name) 42 (case (cross-system-type) 43 [(windows) 44 (define-values (base name dir?) (split-path (cross-system-library-subpath #f))) 45 (format "~a-win32" (bytes->string/utf-8 (path-element->bytes name)))] 46 [else 47 (format "~a" (cross-system-library-subpath #f))]))