From 67b26b34b34c8b9f4ce5a7259e26c47100f73985 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 19 Jul 2013 09:51:14 -0600 Subject: [PATCH] distro-build: add support for source installers original commit: 8820ae91a6423c8f02cc3da3754c97f597303403 --- pkgs/distro-build/config.rkt | 2 ++ pkgs/distro-build/doc.txt | 8 +++++++ pkgs/distro-build/drive-clients.rkt | 7 ++++-- pkgs/distro-build/installer-sh.rkt | 1 - pkgs/distro-build/installer-tgz.rkt | 35 +++++++++++++++++++++++++++++ pkgs/distro-build/installer.rkt | 14 ++++++++---- 6 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 pkgs/distro-build/installer-tgz.rkt diff --git a/pkgs/distro-build/config.rkt b/pkgs/distro-build/config.rkt index 3f8c800..2e5b0b6 100644 --- a/pkgs/distro-build/config.rkt +++ b/pkgs/distro-build/config.rkt @@ -136,6 +136,8 @@ [(#:repo) (string? val)] [(#:clean?) (boolean? val)] [(#:pull?) (boolean? val)] + [(#:release?) (boolean? val)] + [(#:source?) (boolean? val)] [(#:site-dest) (path-string? val)] [(#:pdf-doc?) (boolean? val)] [(#:max-snapshots) (real? val)] diff --git a/pkgs/distro-build/doc.txt b/pkgs/distro-build/doc.txt index 143a8a2..5badd9d 100644 --- a/pkgs/distro-build/doc.txt +++ b/pkgs/distro-build/doc.txt @@ -199,6 +199,14 @@ Site-configuration keywords (where means no spaces, etc.): unless `#:host' is "localhost", `#:user' is #f, and `#:dir' is not specified, in which case the default is #f + #:release? --- if true, then create release-mode + installers; the default is determined by the `RELEASE_MODE' + makefile variable + + #:source? --- if true, then create a source archive (with + pre-build packages), instead of a platform-specific installer; the + default is #f + #:site-dest --- destination for completed build, used by the `site' and `snapshot-site' makefile targets; the default is "build/site" diff --git a/pkgs/distro-build/drive-clients.rkt b/pkgs/distro-build/drive-clients.rkt index f17363b..5b32a05 100644 --- a/pkgs/distro-build/drive-clients.rkt +++ b/pkgs/distro-build/drive-clients.rkt @@ -18,7 +18,7 @@ ;; ---------------------------------------- -(define release? #f) +(define default-release? #f) (define default-clean? #f) (define-values (config-file config-mode @@ -27,7 +27,7 @@ (command-line #:once-each [("--release") "Create release-mode installers" - (set! release? #t)] + (set! default-release? #t)] [("--clean") "Erase client directories before building" (set! default-clean? #t)] #:args (config-file config-mode @@ -237,6 +237,8 @@ default-dist-dir)) (define dist-suffix (get-opt c '#:dist-suffix "")) (define dist-catalogs (choose-catalogs c '(""))) + (define release? (get-opt c '#:release? default-release?)) + (define source? (get-opt c '#:source? #f)) (~a " SERVER=" server " PKGS=" (q pkgs) " DOC_SEARCH=" (q doc-search) @@ -247,6 +249,7 @@ " DIST_SUFFIX=" (q dist-suffix) " DIST_CATALOGS_q=" (qq dist-catalogs kind) " RELEASE_MODE=" (if release? "--release" (q "")) + " SOURCE_MODE=" (if source? "--source" (q "")) " README=" (q (file-name-from-path readme)))) (define (unix-build c host port user server repo clean? pull? readme) diff --git a/pkgs/distro-build/installer-sh.rkt b/pkgs/distro-build/installer-sh.rkt index d52a466..5bec270 100644 --- a/pkgs/distro-build/installer-sh.rkt +++ b/pkgs/distro-build/installer-sh.rkt @@ -85,4 +85,3 @@ release? readme) sh-path) - diff --git a/pkgs/distro-build/installer-tgz.rkt b/pkgs/distro-build/installer-tgz.rkt new file mode 100644 index 0000000..5e813e7 --- /dev/null +++ b/pkgs/distro-build/installer-tgz.rkt @@ -0,0 +1,35 @@ +#lang at-exp racket/base +(require racket/system + racket/file + racket/format + file/tar) + +(provide installer-tgz) + +(define (system/show . l) + (displayln (apply ~a #:separator " " l)) + (unless (apply system* (find-executable-path (car l)) (cdr l)) + (error "failed"))) + +(define (generate-tgz src-dir dest-path target-dir-name readme) + (system/show "chmod" "-R" "g+w" src-dir) + (define dest (path->complete-path dest-path)) + (when (file-exists? dest) (delete-file dest)) + (printf "Tarring to ~s\n" dest) + (when readme + (call-with-output-file* + (build-path src-dir "README") + #:exists 'truncate + (lambda (o) + (display readme o)))) + (parameterize ([current-directory src-dir]) + (apply tar-gzip dest #:path-prefix target-dir-name (directory-list)))) + +(define (installer-tgz base-name dir-name dist-suffix readme) + (define tgz-path (format "bundle/~a-src~a.tgz" + base-name + dist-suffix)) + (generate-tgz "bundle/racket" tgz-path + dir-name + readme) + tgz-path) diff --git a/pkgs/distro-build/installer.rkt b/pkgs/distro-build/installer.rkt index e0d1ea3..bbd351d 100644 --- a/pkgs/distro-build/installer.rkt +++ b/pkgs/distro-build/installer.rkt @@ -3,6 +3,7 @@ "installer-sh.rkt" "installer-dmg.rkt" "installer-exe.rkt" + "installer-tgz.rkt" net/url racket/file racket/path @@ -10,6 +11,7 @@ "display-time.rkt") (define release? #f) +(define source? #f) (define upload-to #f) (define upload-desc "") (define download-readme #f) @@ -19,6 +21,8 @@ #:once-each [("--release") "Create a release installer" (set! release? #t)] + [("--source") "Create a source installer" + (set! source? #t)] [("--upload") url "Upload installer" (set! upload-to url)] [("--desc") desc "Description to accompany upload" @@ -49,10 +53,12 @@ (close-input-port i))))) (define installer-file - (case (system-type) - [(unix) (installer-sh human-name base-name dir-name release? dist-suffix readme)] - [(macosx) (installer-dmg human-name base-name dist-suffix readme)] - [(windows) (installer-exe short-human-name base-name release? dist-suffix readme)])) + (if source? + (installer-tgz base-name dir-name dist-suffix readme) + (case (system-type) + [(unix) (installer-sh human-name base-name dir-name release? dist-suffix readme)] + [(macosx) (installer-dmg human-name base-name dist-suffix readme)] + [(windows) (installer-exe short-human-name base-name release? dist-suffix readme)]))) (call-with-output-file* (build-path "bundle" "installer.txt")