Windows code-signing and ".tgz" options
This commit is contained in:
parent
490d1677fe
commit
a4b7d3bbba
|
@ -3,6 +3,7 @@
|
||||||
racket/list
|
racket/list
|
||||||
racket/system
|
racket/system
|
||||||
racket/path
|
racket/path
|
||||||
|
racket/file
|
||||||
racket/runtime-path
|
racket/runtime-path
|
||||||
setup/getinfo
|
setup/getinfo
|
||||||
setup/cross-system)
|
setup/cross-system)
|
||||||
|
@ -411,7 +412,7 @@ SectionEnd
|
||||||
"-V3"))
|
"-V3"))
|
||||||
(system* makensis verbose "installer.nsi")))
|
(system* makensis verbose "installer.nsi")))
|
||||||
|
|
||||||
(define (installer-exe human-name base-name versionless? dist-suffix readme)
|
(define (installer-exe human-name base-name versionless? dist-suffix readme osslsigncode-args)
|
||||||
(define makensis (or (case (system-type)
|
(define makensis (or (case (system-type)
|
||||||
[(windows)
|
[(windows)
|
||||||
(or (find-executable-path "makensis.exe")
|
(or (find-executable-path "makensis.exe")
|
||||||
|
@ -437,4 +438,19 @@ SectionEnd
|
||||||
#:extension-registers (get-extreg "bundle/racket")
|
#:extension-registers (get-extreg "bundle/racket")
|
||||||
#:start-menus (get-startmenu "bundle/racket")
|
#:start-menus (get-startmenu "bundle/racket")
|
||||||
#:auto-launch (get-auto-launch "bundle/racket"))
|
#:auto-launch (get-auto-launch "bundle/racket"))
|
||||||
|
(unless (null? osslsigncode-args)
|
||||||
|
(define unsigned-exe-path (let-values ([(base name dir?) (split-path exe-path)])
|
||||||
|
(build-path base "unsigned" name)))
|
||||||
|
(make-directory* "bundle/unsigned")
|
||||||
|
(rename-file-or-directory exe-path unsigned-exe-path #t)
|
||||||
|
(unless (apply system*
|
||||||
|
(or (find-executable-path (case (system-type)
|
||||||
|
[(windows) "osslsigncode.exe"]
|
||||||
|
[else "osslsigncode"]))
|
||||||
|
(error "cannot find `osslsigncode`"))
|
||||||
|
(append osslsigncode-args
|
||||||
|
(list "-n" human-name
|
||||||
|
"-t" "http://timestamp.verisign.com/scripts/timstamp.dll"
|
||||||
|
"-in" unsigned-exe-path "-out" exe-path)))
|
||||||
|
(error "signing failed")))
|
||||||
exe-path)
|
exe-path)
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
(require racket/system
|
(require racket/system
|
||||||
racket/file
|
racket/file
|
||||||
racket/format
|
racket/format
|
||||||
file/tar)
|
file/tar
|
||||||
|
setup/cross-system)
|
||||||
|
|
||||||
(provide installer-tgz)
|
(provide installer-tgz)
|
||||||
|
|
||||||
|
@ -25,11 +26,22 @@
|
||||||
(parameterize ([current-directory src-dir])
|
(parameterize ([current-directory src-dir])
|
||||||
(apply tar-gzip dest #:path-prefix target-dir-name (directory-list))))
|
(apply tar-gzip dest #:path-prefix target-dir-name (directory-list))))
|
||||||
|
|
||||||
(define (installer-tgz base-name dir-name dist-suffix readme)
|
(define (installer-tgz source? base-name dir-name dist-suffix readme)
|
||||||
(define tgz-path (format "bundle/~a-src~a.tgz"
|
(define tgz-path (format "bundle/~a-~a~a.tgz"
|
||||||
base-name
|
base-name
|
||||||
|
(if source?
|
||||||
|
"src"
|
||||||
|
(get-platform-name))
|
||||||
dist-suffix))
|
dist-suffix))
|
||||||
(generate-tgz "bundle/racket" tgz-path
|
(generate-tgz "bundle/racket" tgz-path
|
||||||
dir-name
|
dir-name
|
||||||
readme)
|
readme)
|
||||||
tgz-path)
|
tgz-path)
|
||||||
|
|
||||||
|
(define (get-platform-name)
|
||||||
|
(case (cross-system-type)
|
||||||
|
[(windows)
|
||||||
|
(define-values (base name dir?) (split-path (cross-system-library-subpath #f)))
|
||||||
|
(format "~a-win32" (bytes->string/utf-8 (path-element->bytes name)))]
|
||||||
|
[else
|
||||||
|
(format "~a" (cross-system-library-subpath #f))]))
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
racket/file
|
racket/file
|
||||||
racket/path
|
racket/path
|
||||||
racket/port
|
racket/port
|
||||||
|
net/base64
|
||||||
setup/cross-system
|
setup/cross-system
|
||||||
"display-time.rkt")
|
"display-time.rkt")
|
||||||
|
|
||||||
|
@ -17,12 +18,14 @@
|
||||||
(define release? #f)
|
(define release? #f)
|
||||||
(define source? #f)
|
(define source? #f)
|
||||||
(define versionless? #f)
|
(define versionless? #f)
|
||||||
|
(define tgz? #f)
|
||||||
(define mac-pkg? #f)
|
(define mac-pkg? #f)
|
||||||
(define upload-to #f)
|
(define upload-to #f)
|
||||||
(define upload-desc "")
|
(define upload-desc "")
|
||||||
(define download-readme #f)
|
(define download-readme #f)
|
||||||
|
|
||||||
(define-values (short-human-name human-name base-name dir-name dist-suffix sign-identity)
|
(define-values (short-human-name human-name base-name dir-name dist-suffix
|
||||||
|
sign-identity osslsigncode-args-base64)
|
||||||
(command-line
|
(command-line
|
||||||
#:once-each
|
#:once-each
|
||||||
[("--release") "Create a release installer"
|
[("--release") "Create a release installer"
|
||||||
|
@ -31,6 +34,8 @@
|
||||||
(set! source? #t)]
|
(set! source? #t)]
|
||||||
[("--versionless") "Avoid version number in names and paths"
|
[("--versionless") "Avoid version number in names and paths"
|
||||||
(set! versionless? #t)]
|
(set! versionless? #t)]
|
||||||
|
[("--tgz") "Create a \".tgz\" archive instead of an installer"
|
||||||
|
(set! tgz? #t)]
|
||||||
[("--mac-pkg") "Create a \".pkg\" installer on Mac OS X"
|
[("--mac-pkg") "Create a \".pkg\" installer on Mac OS X"
|
||||||
(set! mac-pkg? #t)]
|
(set! mac-pkg? #t)]
|
||||||
[("--upload") url "Upload installer"
|
[("--upload") url "Upload installer"
|
||||||
|
@ -42,7 +47,7 @@
|
||||||
(unless (string=? readme "")
|
(unless (string=? readme "")
|
||||||
(set! download-readme readme))]
|
(set! download-readme readme))]
|
||||||
#:args
|
#:args
|
||||||
(human-name base-name dir-name dist-suffix sign-identity)
|
(human-name base-name dir-name dist-suffix sign-identity osslsigncode-args-base64)
|
||||||
(values human-name
|
(values human-name
|
||||||
(format "~a v~a" human-name (version))
|
(format "~a v~a" human-name (version))
|
||||||
(if versionless?
|
(if versionless?
|
||||||
|
@ -55,7 +60,7 @@
|
||||||
(if (string=? dist-suffix "")
|
(if (string=? dist-suffix "")
|
||||||
""
|
""
|
||||||
(string-append "-" dist-suffix))
|
(string-append "-" dist-suffix))
|
||||||
sign-identity)))
|
sign-identity osslsigncode-args-base64)))
|
||||||
|
|
||||||
(display-time)
|
(display-time)
|
||||||
|
|
||||||
|
@ -68,22 +73,39 @@
|
||||||
(port->string i)
|
(port->string i)
|
||||||
(close-input-port i)))))
|
(close-input-port i)))))
|
||||||
|
|
||||||
|
(define (unpack-base64-arguments str)
|
||||||
|
(define p (open-input-bytes (base64-decode (string->bytes/utf-8 str))))
|
||||||
|
(define l (read p))
|
||||||
|
(unless (and (list? l)
|
||||||
|
(andmap string? l)
|
||||||
|
(eof-object? (read p)))
|
||||||
|
(error 'unpack-base64-arguments
|
||||||
|
"encoded arguments didn't decode and `read` as a list of strings: ~e" str))
|
||||||
|
l)
|
||||||
|
|
||||||
(define installer-file
|
(define installer-file
|
||||||
(if source?
|
(if (or source? tgz?)
|
||||||
(installer-tgz base-name dir-name dist-suffix readme)
|
(installer-tgz source? base-name dir-name dist-suffix readme)
|
||||||
(case (cross-system-type)
|
(case (cross-system-type)
|
||||||
[(unix) (installer-sh human-name base-name dir-name release? dist-suffix readme)]
|
[(unix)
|
||||||
[(macosx) (if mac-pkg?
|
(installer-sh human-name base-name dir-name release? dist-suffix readme)]
|
||||||
(installer-pkg (if (or release? versionless?)
|
[(macosx)
|
||||||
short-human-name
|
(if mac-pkg?
|
||||||
human-name)
|
(installer-pkg (if (or release? versionless?)
|
||||||
base-name dist-suffix readme sign-identity)
|
short-human-name
|
||||||
(installer-dmg (if versionless?
|
human-name)
|
||||||
short-human-name
|
base-name dist-suffix readme sign-identity)
|
||||||
human-name)
|
(installer-dmg (if versionless?
|
||||||
base-name dist-suffix readme sign-identity))]
|
short-human-name
|
||||||
[(windows) (installer-exe short-human-name base-name (or release? versionless?)
|
human-name)
|
||||||
dist-suffix readme)])))
|
base-name dist-suffix readme sign-identity))]
|
||||||
|
[(windows)
|
||||||
|
(define osslsigncode-args
|
||||||
|
(and (not (equal? osslsigncode-args-base64 ""))
|
||||||
|
(unpack-base64-arguments osslsigncode-args-base64)))
|
||||||
|
(installer-exe short-human-name base-name (or release? versionless?)
|
||||||
|
dist-suffix readme
|
||||||
|
osslsigncode-args)])))
|
||||||
|
|
||||||
(call-with-output-file*
|
(call-with-output-file*
|
||||||
(build-path "bundle" "installer.txt")
|
(build-path "bundle" "installer.txt")
|
||||||
|
|
|
@ -352,9 +352,14 @@ spaces, etc.):
|
||||||
on the value of @racket[#:bits]}
|
on the value of @racket[#:bits]}
|
||||||
|
|
||||||
@item{@racket[#:sign-identity _string] --- provides an identity to
|
@item{@racket[#:sign-identity _string] --- provides an identity to
|
||||||
be passed to @exec{codesign} for code signing on Mac OS X (for all
|
be passed to @exec{codesign} for code signing on Mac OS X (for a
|
||||||
executables in a distribution), where an empty string disables
|
package or all executables in a distribution), where an empty
|
||||||
signing; the default is @racket[""]}
|
string disables signing; the default is @racket[""]}
|
||||||
|
|
||||||
|
@item{@racket[#:osslsigncode-args (list _string ...)] --- provides
|
||||||
|
arguments for signing a Windows executable using
|
||||||
|
@exec{osslsigncode}, where @Flag{n}, @Flag{t}, @Flag{in}, and
|
||||||
|
@Flag{-out} arguments are supplied automatically.}
|
||||||
|
|
||||||
@item{@racket[#:j _integer] --- parallelism for @tt{make} on Unix
|
@item{@racket[#:j _integer] --- parallelism for @tt{make} on Unix
|
||||||
and Mac OS X and for @exec{raco setup} on all platforms; defaults
|
and Mac OS X and for @exec{raco setup} on all platforms; defaults
|
||||||
|
@ -408,6 +413,10 @@ spaces, etc.):
|
||||||
@filepath{.pkg} for Mac OS X (in single-file format) instead of a
|
@filepath{.pkg} for Mac OS X (in single-file format) instead of a
|
||||||
@filepath{.dmg}; the default is @racket[#f]}
|
@filepath{.dmg}; the default is @racket[#f]}
|
||||||
|
|
||||||
|
@item{@racket[#:tgz? _boolean] --- if true, creates a
|
||||||
|
@filepath{.tgz} archive instead of an installer; the default is
|
||||||
|
@racket[#f]}
|
||||||
|
|
||||||
@item{@racket[#:pause-before _nonnegative-real] --- a pause in
|
@item{@racket[#:pause-before _nonnegative-real] --- a pause in
|
||||||
seconds to wait before starting a machine, which may help a
|
seconds to wait before starting a machine, which may help a
|
||||||
virtual machine avoid confusion from being stopped and started too
|
virtual machine avoid confusion from being stopped and started too
|
||||||
|
|
|
@ -146,6 +146,7 @@
|
||||||
[(#:bits) (or (equal? val 32) (equal? val 64))]
|
[(#:bits) (or (equal? val 32) (equal? val 64))]
|
||||||
[(#:vc) (string? val)]
|
[(#:vc) (string? val)]
|
||||||
[(#:sign-identity) (string? val)]
|
[(#:sign-identity) (string? val)]
|
||||||
|
[(#:osslsigncode-args) (and (list? val) (andmap string? val))]
|
||||||
[(#:timeout) (real? val)]
|
[(#:timeout) (real? val)]
|
||||||
[(#:j) (exact-positive-integer? val)]
|
[(#:j) (exact-positive-integer? val)]
|
||||||
[(#:repo) (string? val)]
|
[(#:repo) (string? val)]
|
||||||
|
@ -157,6 +158,7 @@
|
||||||
[(#:source-pkgs?) (boolean? val)]
|
[(#:source-pkgs?) (boolean? val)]
|
||||||
[(#:versionless?) (boolean? val)]
|
[(#:versionless?) (boolean? val)]
|
||||||
[(#:mac-pkg?) (boolean? val)]
|
[(#:mac-pkg?) (boolean? val)]
|
||||||
|
[(#:tgz?) (boolean? val)]
|
||||||
[(#:site-dest) (path-string? val)]
|
[(#:site-dest) (path-string? val)]
|
||||||
[(#:site-help) (hash? val)]
|
[(#:site-help) (hash? val)]
|
||||||
[(#:site-title) (string? val)]
|
[(#:site-title) (string? val)]
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
racket/file
|
racket/file
|
||||||
racket/string
|
racket/string
|
||||||
racket/path
|
racket/path
|
||||||
|
net/base64
|
||||||
(only-in distro-build/config
|
(only-in distro-build/config
|
||||||
current-mode
|
current-mode
|
||||||
site-config?
|
site-config?
|
||||||
|
@ -233,6 +234,10 @@
|
||||||
"\"\\&\\&\"")]
|
"\"\\&\\&\"")]
|
||||||
[else s]))
|
[else s]))
|
||||||
|
|
||||||
|
(define (pack-base64-arguments args)
|
||||||
|
(bytes->string/utf-8 (base64-encode (string->bytes/utf-8 (format "~s" args))
|
||||||
|
#"")))
|
||||||
|
|
||||||
(define (client-args c server server-port kind readme)
|
(define (client-args c server server-port kind readme)
|
||||||
(define desc (client-name c))
|
(define desc (client-name c))
|
||||||
(define pkgs (let ([l (get-opt c '#:pkgs)])
|
(define pkgs (let ([l (get-opt c '#:pkgs)])
|
||||||
|
@ -250,12 +255,14 @@
|
||||||
(define dist-suffix (get-opt c '#:dist-suffix ""))
|
(define dist-suffix (get-opt c '#:dist-suffix ""))
|
||||||
(define dist-catalogs (choose-catalogs c '("")))
|
(define dist-catalogs (choose-catalogs c '("")))
|
||||||
(define sign-identity (get-opt c '#:sign-identity ""))
|
(define sign-identity (get-opt c '#:sign-identity ""))
|
||||||
|
(define osslsigncode-args (get-opt c '#:osslsigncode-args))
|
||||||
(define release? (get-opt c '#:release? default-release?))
|
(define release? (get-opt c '#:release? default-release?))
|
||||||
(define source? (get-opt c '#:source? default-source?))
|
(define source? (get-opt c '#:source? default-source?))
|
||||||
(define versionless? (get-opt c '#:versionless? default-versionless?))
|
(define versionless? (get-opt c '#:versionless? default-versionless?))
|
||||||
(define source-pkgs? (get-opt c '#:source-pkgs? source?))
|
(define source-pkgs? (get-opt c '#:source-pkgs? source?))
|
||||||
(define source-runtime? (get-opt c '#:source-runtime? source?))
|
(define source-runtime? (get-opt c '#:source-runtime? source?))
|
||||||
(define mac-pkg? (get-opt c '#:mac-pkg? #f))
|
(define mac-pkg? (get-opt c '#:mac-pkg? #f))
|
||||||
|
(define tgz? (get-opt c '#:tgz? #f))
|
||||||
(define install-name (get-opt c '#:install-name (if release?
|
(define install-name (get-opt c '#:install-name (if release?
|
||||||
""
|
""
|
||||||
snapshot-install-name)))
|
snapshot-install-name)))
|
||||||
|
@ -276,6 +283,9 @@
|
||||||
" DIST_SUFFIX=" (q dist-suffix)
|
" DIST_SUFFIX=" (q dist-suffix)
|
||||||
" DIST_CATALOGS_q=" (qq dist-catalogs kind)
|
" DIST_CATALOGS_q=" (qq dist-catalogs kind)
|
||||||
" SIGN_IDENTITY=" (q sign-identity)
|
" SIGN_IDENTITY=" (q sign-identity)
|
||||||
|
" OSSLSIGNCODE_ARGS_BASE64=" (q (if osslsigncode-args
|
||||||
|
(pack-base64-arguments osslsigncode-args)
|
||||||
|
""))
|
||||||
" INSTALL_NAME=" (q install-name)
|
" INSTALL_NAME=" (q install-name)
|
||||||
" BUILD_STAMP=" (q build-stamp)
|
" BUILD_STAMP=" (q build-stamp)
|
||||||
" RELEASE_MODE=" (if release? "--release" (q ""))
|
" RELEASE_MODE=" (if release? "--release" (q ""))
|
||||||
|
@ -285,6 +295,7 @@
|
||||||
(q "--source --no-setup")
|
(q "--source --no-setup")
|
||||||
(q ""))
|
(q ""))
|
||||||
" MAC_PKG_MODE=" (if mac-pkg? "--mac-pkg" (q ""))
|
" MAC_PKG_MODE=" (if mac-pkg? "--mac-pkg" (q ""))
|
||||||
|
" TGZ_MODE=" (if tgz? "--tgz" (q ""))
|
||||||
" UPLOAD=http://" server ":" server-port "/upload/"
|
" UPLOAD=http://" server ":" server-port "/upload/"
|
||||||
" README=http://" server ":" server-port "/" (q (file-name-from-path readme))))
|
" README=http://" server ":" server-port "/" (q (file-name-from-path readme))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user