gui/gui-lib/racket/gui/installer.rkt
Matthew Flatt 138088ce9a install {gracket,mred}-text as a console application
Requesting console mode matters when 'gui-bin-dir is configured.
2017-03-24 16:08:37 -06:00

54 lines
2.0 KiB
Racket

#lang racket/base
(require launcher
racket/path
racket/file
setup/dirs)
(provide installer)
(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 tether-mode (and tethered? (if user? 'addon 'config)))
;; add a gracket-text executable that uses the -z flag (preferring a script)
(for ([vs '((script-3m 3m) (script-cgc cgc))])
(let ([v (findf (lambda (v) (memq v variants)) vs)])
(when v
(parameterize ([current-launcher-variant v])
(make-mred-launcher
#:tether-mode tether-mode
'("-z")
(prep-dir
(mred-program-launcher-path "gracket-text"
#:user? user?
#:tethered? tethered?
#:console? #t))
`([subsystem . console]
[single-instance? . #f]
[relative? . ,(not (or user? tethered?))]))))))
;; add a bin/gracket (in addition to lib/gracket)
(for ([vs '((script-3m 3m) (script-cgc cgc))])
(let ([v (findf (lambda (v) (memq v variants)) vs)])
(when v
(parameterize ([current-launcher-variant v])
(make-mred-launcher #:tether-mode tether-mode
null
(prep-dir
(mred-program-launcher-path "GRacket" #:user? user? #:tethered? tethered?))
`([exe-name . "GRacket"]
[relative? . ,(not (or user? tethered?))]
[exe-is-gracket . #t])))))))
(define (prep-dir p)
(define dir (path-only p))
(make-directory* dir)
p)