cooperate with tethered-executable builds

This commit is contained in:
Matthew Flatt 2016-04-12 17:58:36 -06:00
parent 32f8bfd90e
commit fc813b32ca
5 changed files with 63 additions and 21 deletions

View File

@ -4,7 +4,7 @@
(define deps '("srfi-lite-lib" (define deps '("srfi-lite-lib"
"data-lib" "data-lib"
["base" #:version "6.4"] ["base" #:version "6.5.0.2"]
"syntax-color-lib" "syntax-color-lib"
["draw-lib" #:version "1.13"] ["draw-lib" #:version "1.13"]
["snip-lib" #:version "1.2"] ["snip-lib" #:version "1.2"]

View File

@ -1,7 +1,7 @@
#lang info #lang info
(define version '(400)) (define version '(400))
(define post-install-collection "installer.rkt") (define install-collection "installer.rkt")
(define copy-man-pages '("mred.1")) (define copy-man-pages '("mred.1"))
(define release-note-files (define release-note-files

View File

@ -3,44 +3,71 @@
compiler/embed compiler/embed
racket/file racket/file
racket/path racket/path
setup/dirs
setup/cross-system) setup/cross-system)
(provide post-installer) (provide installer)
;; Platforms that get a `MrEd' executable: ;; Platforms that get a `MrEd' executable:
(define mred-exe-systems '(unix)) (define mred-exe-systems '(unix))
(define (post-installer path coll user?) (define (installer path coll user? no-main?)
(unless no-main?
(do-installer path coll user? #f)
(when (and (not user?)
(find-config-tethered-console-bin-dir))
(do-installer path coll #f #t)))
(when (find-addon-tethered-console-bin-dir)
(do-installer path coll #t #t)))
(define (do-installer path coll user? tethered?)
(define variants (available-mred-variants)) (define variants (available-mred-variants))
(when (memq (cross-system-type) mred-exe-systems) (when (memq (cross-system-type) mred-exe-systems)
(for ([v variants] #:when (memq v '(3m cgc))) (for ([v variants] #:when (memq v '(3m cgc)))
(parameterize ([current-launcher-variant v]) (parameterize ([current-launcher-variant v])
(create-embedding-executable (create-embedding-executable
(prep-dir (mred-program-launcher-path "MrEd" #:user? user?)) (prep-dir (mred-program-launcher-path "MrEd" #:user? user? #:tethered? tethered?))
#:cmdline '("-I" "scheme/gui/init") #:cmdline (append
(if tethered? (if user? (addon-flags) (config-flags)) null)
'("-I" "scheme/gui/init"))
#:variant v #:variant v
#:launcher? #t #:launcher? #t
#:gracket? #t #:gracket? #t
#:aux `((relative? . ,(not user?))))))) #:aux `((relative? . ,(not user?)))))))
;; add a mred-text executable that uses the -z flag (preferring a script) ;; add a mred-text executable that uses the -z flag (preferring a script)
(define tether-mode (and tethered? (if user? 'addon 'config)))
(for ([vs '((script-3m 3m) (script-cgc cgc))]) (for ([vs '((script-3m 3m) (script-cgc cgc))])
(let ([v (findf (lambda (v) (memq v variants)) vs)]) (let ([v (findf (lambda (v) (memq v variants)) vs)])
(when v (when v
(parameterize ([current-launcher-variant v]) (parameterize ([current-launcher-variant v])
(make-gracket-launcher (make-gracket-launcher
#:tether-mode tether-mode
'("-I" "scheme/gui/init" "-z") '("-I" "scheme/gui/init" "-z")
(prep-dir (mred-program-launcher-path "mred-text" #:user? user?)) (prep-dir (mred-program-launcher-path "mred-text" #:user? user? #:tethered? tethered?))
`([relative? . ,(not user?)] [subsystem . console] [single-instance? . #f])))))) `([relative? . ,(not (or user? tethered?))]
[subsystem . console]
[single-instance? . #f]))))))
;; add bin/mred script under OS X ;; add bin/mred script under OS X
(when (eq? 'macosx (cross-system-type)) (when (eq? 'macosx (cross-system-type))
(for ([v variants] #:when (memq v '(script-3m script-cgc))) (for ([v variants] #:when (memq v '(script-3m script-cgc)))
(parameterize ([current-launcher-variant v]) (parameterize ([current-launcher-variant v])
(make-gracket-launcher (make-gracket-launcher
'() #:tether-mode tether-mode
(prep-dir (mred-program-launcher-path "MrEd" #:user? user?)) null
'([exe-name . "GRacket"] [relative? . ,(not user?)] [exe-is-gracket . #t])))))) (prep-dir (mred-program-launcher-path "MrEd" #:user? user? #:tethered? tethered?))
`([exe-name . "GRacket"]
[relative? . ,(not (or user? tethered?))]
[exe-is-gracket . #t]))))))
(define (prep-dir p) (define (prep-dir p)
(define dir (path-only p)) (define dir (path-only p))
(make-directory* dir) (make-directory* dir)
p) p)
(define (addon-flags)
(append
(config-flags)
(list "-A" (path->string (find-system-path 'addon-dir)))))
(define (config-flags)
(list "-C" (path->string (find-config-dir))))

View File

@ -1,4 +1,4 @@
#lang info #lang info
(define post-install-collection "installer.rkt") (define install-collection "installer.rkt")
(define copy-man-pages '("gracket.1")) (define copy-man-pages '("gracket.1"))

View File

@ -1,32 +1,47 @@
#lang racket/base #lang racket/base
(require launcher (require launcher
racket/path racket/path
racket/file) racket/file
setup/dirs)
(provide post-installer) (provide installer)
(define (post-installer path collection user?) (define (installer path coll user? no-main?)
(unless no-main?
(do-installer path coll user? #f)
(when (and (not user?)
(find-config-tethered-console-bin-dir))
(do-installer path coll #f #t)))
(when (find-addon-tethered-console-bin-dir)
(do-installer path coll #t #t)))
(define (do-installer path collection user? tethered?)
(define variants (available-mred-variants)) (define variants (available-mred-variants))
(define tether-mode (and tethered? (if user? 'addon 'config)))
;; add a gracket-text executable that uses the -z flag (preferring a script) ;; add a gracket-text executable that uses the -z flag (preferring a script)
(for ([vs '((script-3m 3m) (script-cgc cgc))]) (for ([vs '((script-3m 3m) (script-cgc cgc))])
(let ([v (findf (lambda (v) (memq v variants)) vs)]) (let ([v (findf (lambda (v) (memq v variants)) vs)])
(when v (when v
(parameterize ([current-launcher-variant v]) (parameterize ([current-launcher-variant v])
(make-mred-launcher (make-mred-launcher
#:tether-mode tether-mode
'("-z") '("-z")
(prep-dir (prep-dir
(mred-program-launcher-path "gracket-text" #:user? user?)) (mred-program-launcher-path "gracket-text" #:user? user? #:tethered? tethered?))
`([subsystem . console] [single-instance? . #f] `([subsystem . console]
[relative? . ,(not user?)])))))) [single-instance? . #f]
[relative? . ,(not (or user? tethered?))]))))))
;; add a bin/gracket (in addition to lib/gracket) ;; add a bin/gracket (in addition to lib/gracket)
(for ([vs '((script-3m 3m) (script-cgc cgc))]) (for ([vs '((script-3m 3m) (script-cgc cgc))])
(let ([v (findf (lambda (v) (memq v variants)) vs)]) (let ([v (findf (lambda (v) (memq v variants)) vs)])
(when v (when v
(parameterize ([current-launcher-variant v]) (parameterize ([current-launcher-variant v])
(make-mred-launcher null (make-mred-launcher #:tether-mode tether-mode
null
(prep-dir (prep-dir
(mred-program-launcher-path "GRacket" #:user? user?)) (mred-program-launcher-path "GRacket" #:user? user? #:tethered? tethered?))
'([exe-name . "GRacket"] [relative? . ,(not user?)] `([exe-name . "GRacket"]
[relative? . ,(not (or user? tethered?))]
[exe-is-gracket . #t]))))))) [exe-is-gracket . #t])))))))
(define (prep-dir p) (define (prep-dir p)