From cce6f28d4d07f004a9f1862ed581a03e9600b46a Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sat, 5 Jan 2013 12:17:35 -0600 Subject: [PATCH] remove 'create executable' functionality from drracket for all langauges except The Racket Language and the HtDP and DMdA languages --- collects/deinprogramm/deinprogramm-langs.rkt | 4 +- collects/drracket/private/drsig.rkt | 3 +- .../private/language-configuration.rkt | 60 ++++++++----------- collects/drracket/private/language.rkt | 9 +-- collects/drracket/private/module-language.rkt | 3 +- collects/drracket/private/unit.rkt | 56 ++++++++++------- collects/drracket/tool-lib.rkt | 19 ++++-- collects/lang/htdp-langs.rkt | 4 +- doc/release-notes/drracket/HISTORY.txt | 4 ++ 9 files changed, 86 insertions(+), 76 deletions(-) diff --git a/collects/deinprogramm/deinprogramm-langs.rkt b/collects/deinprogramm/deinprogramm-langs.rkt index b70a9a438c..8d76eb8f3b 100644 --- a/collects/deinprogramm/deinprogramm-langs.rkt +++ b/collects/deinprogramm/deinprogramm-langs.rkt @@ -1350,7 +1350,9 @@ ;; add-deinprogramm-language : (instanceof deinprogramm-language<%>) -> void (define (add-deinprogramm-language o) - (drscheme:language-configuration:add-language o)) + (drscheme:language-configuration:add-language + o + #:allow-executable-creation? #t)) (define (phase1) (void)) diff --git a/collects/drracket/private/drsig.rkt b/collects/drracket/private/drsig.rkt index b35d146d53..f852dc916a 100644 --- a/collects/drracket/private/drsig.rkt +++ b/collects/drracket/private/drsig.rkt @@ -147,7 +147,8 @@ make-language-settings get-settings-preferences-symbol language-dialog - fill-language-dialog)) + fill-language-dialog + language-allows-executable-creation?)) (define-signature drracket:language-configuration/internal^ extends drracket:language-configuration^ (add-info-specified-languages diff --git a/collects/drracket/private/language-configuration.rkt b/collects/drracket/private/language-configuration.rkt index b5f3ab4cbb..8e9303095b 100644 --- a/collects/drracket/private/language-configuration.rkt +++ b/collects/drracket/private/language-configuration.rkt @@ -84,26 +84,33 @@ ;; all of the languages supported in DrRacket (define languages null) + (define languages-allowing-executable-creation '()) + (define (language-allows-executable-creation? lang) + (and (memq lang languages-allowing-executable-creation) + #t)) + ;; add-language : (instanceof language%) -> void ;; only allows addition on phase2 ;; effect: updates `languages' - (define add-language - (λ (language [front? #f]) - - (drracket:tools:only-in-phase 'drracket:language:add-language 'phase2) - (for-each - (λ (i<%>) - (unless (is-a? language i<%>) - (error 'drracket:language:add-language - "expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?" - language i<%>))) - (drracket:language:get-language-extensions)) - - (ensure-no-duplicate-numbers language languages) - (set! languages - (if front? - (cons language languages) - (append languages (list language)))))) + (define (add-language language [front? #f] #:allow-executable-creation? [allow-executable-creation? #f]) + + (drracket:tools:only-in-phase 'drracket:language:add-language 'phase2) + (for-each + (λ (i<%>) + (unless (is-a? language i<%>) + (error 'drracket:language:add-language + "expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?" + language i<%>))) + (drracket:language:get-language-extensions)) + + (ensure-no-duplicate-numbers language languages) + (when allow-executable-creation? + (set! languages-allowing-executable-creation + (cons language languages-allowing-executable-creation))) + (set! languages + (if front? + (cons language languages) + (append languages (list language))))) (define (ensure-no-duplicate-numbers l1 languages) (for-each @@ -1956,25 +1963,6 @@ [else (inner (drracket:language:get-capability-default key) capability-value key)])) - (define/override (create-executable setting parent program-filename) - (let ([executable-fn - (drracket:language:put-executable - parent - program-filename - #t - mred-launcher? - (if mred-launcher? - (string-constant save-a-mred-launcher) - (string-constant save-a-mzscheme-launcher)))]) - (when executable-fn - (drracket:language:create-module-based-launcher - program-filename - executable-fn - (get-module) - (get-transformer-module) - (get-init-code setting) - mred-launcher? - (use-namespace-require/copy-from-setting? setting))))) (super-new))))] [make-simple (λ (module id position numbers mred-launcher? one-line-summary extra-mixin) diff --git a/collects/drracket/private/language.rkt b/collects/drracket/private/language.rkt index abdbc5ad45..dc9e0a3684 100644 --- a/collects/drracket/private/language.rkt +++ b/collects/drracket/private/language.rkt @@ -647,14 +647,7 @@ (module-based-language-front-end port (get-reader))) (define/public (front-end/interaction port settings) (module-based-language-front-end port (get-reader))) - (define/public (create-executable setting parent program-filename) - (create-module-based-language-executable parent - program-filename - (get-module) - (get-transformer-module) - (get-init-code setting) - (use-mred-launcher) - (use-namespace-require/copy-from-setting? setting))) + (define/public (create-executable setting parent program-filename) (void)) (define/public (extra-repl-information _1 _2) (void)) (define/public (get-reader-module) #f) (define/public (get-metadata a b) #f) diff --git a/collects/drracket/private/module-language.rkt b/collects/drracket/private/module-language.rkt index f5cb374da1..2063b6b69f 100644 --- a/collects/drracket/private/module-language.rkt +++ b/collects/drracket/private/module-language.rkt @@ -80,7 +80,8 @@ (drracket:language:simple-module-based-language->module-based-language-mixin drracket:language:simple-module-based-language%))))) (drracket:language-configuration:add-language - (new module-language%))) + (new module-language%) + #:allow-executable-creation? #t)) ;; collection-paths : (listof (union 'default string)) ;; command-line-args : (vectorof string) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index 385b35914c..f42dd722c4 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -405,29 +405,39 @@ module browser threading seems wrong. ;; create-executable : (instanceof drracket:unit:frame<%>) -> void (define (create-executable frame) - (let* ([definitions-text (send frame get-definitions-text)] - [program-filename (send definitions-text get-filename)]) - (cond - [(not program-filename) - (message-box (string-constant create-executable-title) - (string-constant must-save-before-executable) - frame - #:dialog-mixin frame:focus-table-mixin)] - [else - (when (or (not (send definitions-text is-modified?)) - (gui-utils:get-choice - (string-constant definitions-not-saved) - (string-constant yes) - (string-constant no) - (string-constant drscheme) - #f - frame)) - (let ([settings (send definitions-text get-next-settings)]) - (send (drracket:language-configuration:language-settings-language settings) - create-executable - (drracket:language-configuration:language-settings-settings settings) - frame - program-filename)))]))) + (define definitions-text (send frame get-definitions-text)) + (define program-filename (send definitions-text get-filename)) + (define settings (send definitions-text get-next-settings)) + (cond + [(not (drracket:language-configuration:language-allows-executable-creation? + (drracket:language-configuration:language-settings-language settings))) + (message-box (string-constant drscheme) + (string-append + "Executable creation in DrRacket is supported only in the teaching languages and" + " when the #lang line specifies the language (in “The Racket Language”)" + "\n\n" + "Consider using the raco exe command-line tool instead.") + frame + #:dialog-mixin frame:focus-table-mixin)] + [(not program-filename) + (message-box (string-constant create-executable-title) + (string-constant must-save-before-executable) + frame + #:dialog-mixin frame:focus-table-mixin)] + [else + (when (or (not (send definitions-text is-modified?)) + (gui-utils:get-choice + (string-constant definitions-not-saved) + (string-constant yes) + (string-constant no) + (string-constant drscheme) + #f + frame)) + (send (drracket:language-configuration:language-settings-language settings) + create-executable + (drracket:language-configuration:language-settings-settings settings) + frame + program-filename))])) (define-values (get-program-editor-mixin add-to-program-editor-mixin) (let* ([program-editor-mixin diff --git a/collects/drracket/tool-lib.rkt b/collects/drracket/tool-lib.rkt index 7671016193..d7a998dcdb 100644 --- a/collects/drracket/tool-lib.rkt +++ b/collects/drracket/tool-lib.rkt @@ -1156,14 +1156,23 @@ all of the names in the tools library, for use defining keybindings (proc-doc/names drracket:language-configuration:add-language - ((and/c (is-a?/c drracket:language:language<%>) - drracket:language:object/c) - . -> . void?) - (language) + (->* ((and/c (is-a?/c drracket:language:language<%>) + drracket:language:object/c)) + (#:allow-executable-creation? boolean?) + void?) + ((language) ((allow-executable-creation? #f))) @{@phase[2] - Adds @racket[language] to the languages offerend by DrRacket.}) + Adds @racket[language] to the languages offered by DrRacket. + + If @racket[allow-executable-creation?] is @racket[#f], then + choosing the @onscreen{Create Executable...} menu item results + in a dialog box saying that executable creation is disabled. + If it is @racket[#t], then the + @method[drracket:language:language<%> create-executable] + is called when that menu item is selected (after checking + to make sure the file is saved).}) (proc-doc/names drracket:language-configuration:get-settings-preferences-symbol diff --git a/collects/lang/htdp-langs.rkt b/collects/lang/htdp-langs.rkt index a9a86d0da8..cebb3810fe 100644 --- a/collects/lang/htdp-langs.rkt +++ b/collects/lang/htdp-langs.rkt @@ -1153,7 +1153,9 @@ ;; add-htdp-language : (instanceof htdp-language<%>) -> void (define (add-htdp-language o) - (drscheme:language-configuration:add-language o)) + (drscheme:language-configuration:add-language + o + #:allow-executable-creation? #t)) (define (phase1) (void)) diff --git a/doc/release-notes/drracket/HISTORY.txt b/doc/release-notes/drracket/HISTORY.txt index 45a5deacc1..fa84ec3909 100644 --- a/doc/release-notes/drracket/HISTORY.txt +++ b/doc/release-notes/drracket/HISTORY.txt @@ -2,6 +2,10 @@ Version 5.3.2 ------------------------------ + . Removed 'Create Executable...' functionality from DrRacket, + except in the "The Racket Language" (#lang-based) language + and the teaching languages (HtDP and DMdA). + . DrRacket is more responsive when editing . The language dialog has been revamped to encourage people even