commit 67b26b34b34c8b9f4ce5a7259e26c47100f73985
parent a35f2373f87fc656d0e49c4f5b036894a3021ff1
Author: Matthew Flatt <mflatt@racket-lang.org>
Date: Fri, 19 Jul 2013 09:51:14 -0600
distro-build: add support for source installers
original commit: 8820ae91a6423c8f02cc3da3754c97f597303403
Diffstat:
6 files changed, 60 insertions(+), 7 deletions(-)
diff --git 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
@@ -199,6 +199,14 @@ Site-configuration keywords (where <string*> means no spaces, etc.):
unless `#:host' is "localhost", `#:user' is #f, and `#:dir' is not
specified, in which case the default is #f
+ #:release? <boolean> --- if true, then create release-mode
+ installers; the default is determined by the `RELEASE_MODE'
+ makefile variable
+
+ #:source? <boolean> --- if true, then create a source archive (with
+ pre-build packages), instead of a platform-specific installer; the
+ default is #f
+
#:site-dest <path-string> --- 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
@@ -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
@@ -85,4 +85,3 @@
release?
readme)
sh-path)
-
diff --git a/pkgs/distro-build/installer-tgz.rkt 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
@@ -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")