distro-build: add support for source installers

original commit: 8820ae91a6423c8f02cc3da3754c97f597303403
This commit is contained in:
Matthew Flatt 2013-07-19 09:51:14 -06:00
parent a35f2373f8
commit 67b26b34b3
6 changed files with 60 additions and 7 deletions

View File

@ -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)]

View File

@ -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"

View File

@ -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)

View File

@ -85,4 +85,3 @@
release?
readme)
sh-path)

View File

@ -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)

View File

@ -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")