From 7dd10fc9bd35d8cf10d26c50e4489f9bd6922b53 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 10 Nov 2013 12:17:01 -0700 Subject: [PATCH] make installers: support Mac OS X ".pkg" format The ".pkg"-based installer doesn't provide the option of picking an installation path, but it can add a path in "/etc/paths.d" so that users do not have to explicitly set the `PATH` environment variable. --- Makefile | 8 +- pkgs/distro-build/config.rkt | 1 + pkgs/distro-build/doc.txt | 5 +- pkgs/distro-build/drive-clients.rkt | 2 + pkgs/distro-build/installer-pkg.rkt | 134 ++++++++++++++++++ pkgs/distro-build/installer.rkt | 9 +- pkgs/distro-build/macosx-installer/pkg-bg.png | Bin 0 -> 11559 bytes pkgs/distro-build/readme.rkt | 24 +++- 8 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 pkgs/distro-build/installer-pkg.rkt create mode 100644 pkgs/distro-build/macosx-installer/pkg-bg.png diff --git a/Makefile b/Makefile index ec1e5231d1..5ff1eaef70 100644 --- a/Makefile +++ b/Makefile @@ -134,6 +134,10 @@ RELEASE_MODE = # proper) on a client that has the run-time system in source form: SOURCE_MODE = +# Set to "--mac-pkg" to create ".pkg"-based installers for Mac OS X, +# instead of a ".dmg" for drag-and-drop installation: +MAC_PKG_MODE = + # Set to "--source --no-setup" to include packages in an installer # (or archive) only in source form: PKG_SOURCE_MODE = @@ -380,7 +384,7 @@ binary-catalog-server: COPY_ARGS = SERVER=$(SERVER) SERVER_PORT=$(SERVER_PORT) SERVER_HOSTS="$(SERVER_HOSTS)" \ PKGS="$(PKGS)" BUILD_STAMP="$(BUILD_STAMP)" \ - RELEASE_MODE=$(RELEASE_MODE) SOURCE_MODE=$(SOURCE_MODE) \ + RELEASE_MODE=$(RELEASE_MODE) SOURCE_MODE=$(SOURCE_MODE) MAC_PKG_MODE=$(MAC_PKG_MODE) \ PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" INSTALL_NAME="$(INSTALL_NAME)"\ DIST_NAME="$(DIST_NAME)" DIST_BASE=$(DIST_BASE) \ DIST_DIR=$(DIST_DIR) DIST_SUFFIX=$(DIST_SUFFIX) \ @@ -426,7 +430,7 @@ bundle-config: $(RACKET) -l distro-build/set-config $(SET_BUNDLE_CONFIG_q) UPLOAD_q = --readme http://$(SVR_PRT)/$(README) --upload http://$(SVR_PRT)/ --desc "$(DIST_DESC)" -DIST_ARGS_q = $(UPLOAD_q) $(RELEASE_MODE) $(SOURCE_MODE) \ +DIST_ARGS_q = $(UPLOAD_q) $(RELEASE_MODE) $(SOURCE_MODE) $(MAC_PKG_MODE) \ "$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR) "$(DIST_SUFFIX)" \ "$(SIGN_IDENTITY)" diff --git a/pkgs/distro-build/config.rkt b/pkgs/distro-build/config.rkt index 6294d0c505..199e68583a 100644 --- a/pkgs/distro-build/config.rkt +++ b/pkgs/distro-build/config.rkt @@ -145,6 +145,7 @@ [(#:source?) (boolean? val)] [(#:source-runtime?) (boolean? val)] [(#:source-pkgs?) (boolean? val)] + [(#:mac-pkg?) (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 ed16a93f65..3f4f91bedd 100644 --- a/pkgs/distro-build/doc.txt +++ b/pkgs/distro-build/doc.txt @@ -244,7 +244,7 @@ Site-configuration keywords (where means no spaces, etc.): makefile variable #:source? --- determines the default value for - `#:source-runtime' and `#:source-pkgs' + `#:source-runtime?' and `#:source-pkgs' #:source-runtime? --- if true, then create an archive that contains the run-time system in source form (possibly with built @@ -258,6 +258,9 @@ Site-configuration keywords (where means no spaces, etc.): when the `#:source-runtime?' value is also #t; the default is the value of `#:source?' + #:mac-pkg? --- if true, creates a ".pkg" for Mac OS X (in + single-file format) instead of a ".dmg"; the default is #f + #:max-snapshots --- number of snapshots to keep, used by the `snapshot-site' makefile target diff --git a/pkgs/distro-build/drive-clients.rkt b/pkgs/distro-build/drive-clients.rkt index b08051ef73..eb4a901a9f 100644 --- a/pkgs/distro-build/drive-clients.rkt +++ b/pkgs/distro-build/drive-clients.rkt @@ -277,6 +277,7 @@ (define source? (get-opt c '#:source? #f)) (define source-pkgs? (get-opt c '#:source-pkgs? source?)) (define source-runtime? (get-opt c '#:source-runtime? source?)) + (define mac-pkg? (get-opt c '#:mac-pkg? #f)) (define install-name (get-opt c '#:install-name (if release? "" snapshot-install-name))) @@ -301,6 +302,7 @@ " PKG_SOURCE_MODE=" (if source-pkgs? (q "--source --no-setup") (q "")) + " MAC_PKG_MODE=" (if mac-pkg? "--mac-pkg" (q "")) " README=" (q (file-name-from-path readme)))) (define (unix-build c platform host port user server server-port repo clean? pull? readme) diff --git a/pkgs/distro-build/installer-pkg.rkt b/pkgs/distro-build/installer-pkg.rkt new file mode 100644 index 0000000000..352f0cc122 --- /dev/null +++ b/pkgs/distro-build/installer-pkg.rkt @@ -0,0 +1,134 @@ +#lang at-exp racket/base +(require racket/system + racket/file + racket/format + racket/runtime-path + ds-store + ds-store/alias + xml) + +(provide installer-pkg) + +(define pkgbuild "/usr/bin/pkgbuild") +(define productbuild "/usr/bin/productbuild") + +(define-runtime-path bg-image "macosx-installer/pkg-bg.png") + +(define (system*/show . l) + (displayln (apply ~a #:separator " " l)) + (flush-output) + (unless (apply system* l) + (error "failed"))) + +(define (gen-install-script install-dest) + (~a "#!/bin/sh\n" + "echo \"" (regexp-replace* #rx"\"" + install-dest + "\"'\"'\"") + "\"/bin > /etc/paths.d/racket\n")) + +(define (make-pkg human-name src-dir pkg-name readme sign-identity) + (define install-dest (string-append "/Applications/" human-name)) + (define id (string-append "org.racket-lang." + (regexp-replace* #rx" " + human-name + "-"))) + + (define (make-rel dir-name) + (let-values ([(base name dir?) (split-path src-dir)]) + (build-path base dir-name))) + + (define work-dir (make-rel "work")) + (delete-directory/files work-dir #:must-exist? #f) + (define scripts-dir (make-rel "scripts")) + (delete-directory/files scripts-dir #:must-exist? #f) + (define resources-dir (make-rel "resources")) + (delete-directory/files resources-dir #:must-exist? #f) + + (printf "Creating ~a\n" scripts-dir) + (make-directory* scripts-dir) + (define postinstall (build-path scripts-dir "postinstall")) + (call-with-output-file* + postinstall + (lambda (o) + (write-string (gen-install-script install-dest) o))) + (file-or-directory-permissions postinstall #o770) + + (printf "Creating ~a\n" resources-dir) + (make-directory* resources-dir) + (copy-file bg-image (build-path resources-dir "background.png")) + + (printf "Copying ~a\n" src-dir) + (define dest-dir work-dir) + (copy-directory/files src-dir dest-dir + #:keep-modify-seconds? #t) + (when readme + (call-with-output-file* + (build-path dest-dir "README.txt") + #:exists 'truncate + (lambda (o) + (display readme o)))) + (copy-file (build-path dest-dir "README.txt") + (build-path resources-dir "README.txt")) + + (apply system*/show + pkgbuild + (append + (list "--root" dest-dir + "--install-location" install-dest + "--scripts" scripts-dir + "--identifier" id + "--version" (version)) + (if (string=? sign-identity "") + null + (list "--sign" sign-identity)) + (list (make-rel "racket.pkg")))) + (define pkg-xml (make-rel "racket.xml")) + (system*/show productbuild + "--synthesize" + "--package" (make-rel "racket.pkg") + pkg-xml) + (define synthesized (call-with-input-file* + pkg-xml + read-xml)) + (define updated + (struct-copy document synthesized + [element (let ([e (document-element synthesized)]) + (struct-copy element e + [content + (list* + (element #f #f + 'title + null + (list (pcdata #f #f human-name))) + (element #f #f + 'readme + (list (attribute #f #f 'file "README.txt")) + null) + (element #f #f + 'background + (list (attribute #f #f 'file "background.png") + (attribute #f #f 'alignment "topleft") + (attribute #f #f 'scaling "none")) + null) + (element-content e))]))])) + (call-with-output-file* + pkg-xml + #:exists 'truncate + (lambda (o) + (write-xml updated o))) + (system*/show productbuild + "--distribution" pkg-xml + "--package-path" (make-rel 'same) + "--resources" resources-dir + "--identifier" id + "--version" (version) + pkg-name)) + +(define (installer-pkg human-name base-name dist-suffix readme sign-identity) + (define pkg-name (format "bundle/~a-~a~a.pkg" + base-name + (system-library-subpath #f) + dist-suffix)) + (make-pkg human-name "bundle/racket" pkg-name readme sign-identity) + pkg-name) diff --git a/pkgs/distro-build/installer.rkt b/pkgs/distro-build/installer.rkt index ce13618520..17fe981be5 100644 --- a/pkgs/distro-build/installer.rkt +++ b/pkgs/distro-build/installer.rkt @@ -2,6 +2,7 @@ (require racket/cmdline "installer-sh.rkt" "installer-dmg.rkt" + "installer-pkg.rkt" "installer-exe.rkt" "installer-tgz.rkt" net/url @@ -12,6 +13,7 @@ (define release? #f) (define source? #f) +(define mac-pkg? #f) (define upload-to #f) (define upload-desc "") (define download-readme #f) @@ -23,6 +25,8 @@ (set! release? #t)] [("--source") "Create a source installer" (set! source? #t)] + [("--mac-pkg") "Create a \".pkg\" installer on Mac OS X" + (set! mac-pkg? #t)] [("--upload") url "Upload installer" (set! upload-to url)] [("--desc") desc "Description to accompany upload" @@ -58,7 +62,10 @@ (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 sign-identity)] + [(macosx) (if mac-pkg? + (installer-pkg (if release? short-human-name human-name) + base-name dist-suffix readme sign-identity) + (installer-dmg human-name base-name dist-suffix readme sign-identity))] [(windows) (installer-exe short-human-name base-name release? dist-suffix readme)]))) (call-with-output-file* diff --git a/pkgs/distro-build/macosx-installer/pkg-bg.png b/pkgs/distro-build/macosx-installer/pkg-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1d606577d00ad436aff25e7c403114a80a549a0b GIT binary patch literal 11559 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 literal 0 HcmV?d00001 diff --git a/pkgs/distro-build/readme.rkt b/pkgs/distro-build/readme.rkt index e7accdb5fe..b8a0358a95 100644 --- a/pkgs/distro-build/readme.rkt +++ b/pkgs/distro-build/readme.rkt @@ -105,10 +105,20 @@ @~a{The distribution includes any pre-installed packages in source form.}])) (define (make-macosx-notes config) - @~a{Install by dragging the enclosing - @|(hash-ref config '#:dist-name "Racket")| v@(version) - folder to your Applications folder --- or wherever you like. You can - move the folder at any time, but do not move applications or other - files within the folder. If you want to use the Racket command-line - programs, then (optionally) add the path of the "bin" subdirectory to - your PATH environment variable.}) + (if (hash-ref config '#:mac-pkg? #f) + @~a{The installation directory is + /Applications/@(string-append + (hash-ref config '#:dist-name "Racket") + (if (hash-ref config '#:release? #f) + "" + (string-append " v" (version)))) + The installer also adjusts "/etc/paths.d/racket" to point to that + directory's "bin" directory, which adjusts the default PATH + environment variable for all users.} + @~a{Install by dragging the enclosing + @|(hash-ref config '#:dist-name "Racket")| v@(version) + folder to your Applications folder --- or wherever you like. You can + move the folder at any time, but do not move applications or other + files within the folder. If you want to use the Racket command-line + programs, then (optionally) add the path of the "bin" subdirectory to + your PATH environment variable.}))