Module: dfmc-environment Author: Jason Trenouth, Andy Armstrong Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND define sealed primary class () constant sealed slot %name :: , required-init-keyword: name:; sealed slot project-debug-filename :: , required-init-keyword: debug-filename:; sealed slot project-debug-arguments :: = ""; sealed slot project-debug-machine-address :: false-or() = #f; sealed slot project-start-function-name :: false-or() = #f; end class ; define sideways sealed method create-exe-project-from-file (locator :: ) => (project :: false-or()) let project-name = locator.locator-name; let project :: = make(, name: project-name, debug-filename: locator); note-user-project-opened(project); project end method create-exe-project-from-file; define sealed method get-environment-object-primitive-name (server :: , project :: ) => (name :: false-or()) project.%name end method get-environment-object-primitive-name; define sealed method open-project-compiler-database (project-object :: , #key warning-callback, error-handler) => (database :: false-or()) #f end method open-project-compiler-database; define method project-opened-by-user? (project-object :: ) => (by-user? :: ) #t end method project-opened-by-user?; define method project-opened-by-user?-setter (by-user? :: , project-object :: ) => (by-user? :: ) by-user? end method project-opened-by-user?-setter; define sealed method project-sources (project :: , #key) => (sources :: ) #[] end method project-sources; define sealed method project-canonical-sources (project :: ) => (sources :: ) #[] end method project-canonical-sources; define sealed method env/project-other-sources (project :: , #key) => (sources :: ) #[] end method env/project-other-sources; define sealed method project-directory (project :: ) => (directory :: ) project.project-debug-filename.locator-directory end method project-directory; define sealed method project-build-filename (project :: ) => (filename :: ) project.project-debug-filename end method project-build-filename; define sealed method project-build-directory (project :: ) => (directory :: ) project.project-directory end method project-build-directory; define sealed method project-bin-directory (project :: ) => (filename :: ) project.project-directory end method project-bin-directory; define sealed method update-application (project :: , #key progress-callback) => () values(); end method update-application; define sealed method parse-project-source (project-object :: , #key warning-callback, progress-callback, error-handler, process-subprojects?) => (well? :: ) error("You cannot parse an executable-only project!") end method parse-project-source; define sealed method build-project (project :: , #key clean?, link? = #t, release?, output = #[], warning-callback, progress-callback, error-handler, save-databases?, copy-sources?, process-subprojects?, messages) => (well? :: ) error("You cannot build an executable-only project!") end method build-project; define sealed method remove-project-build-products (project-object :: , #key error-handler, process-subprojects? = #t) => () error("You cannot remove build products for executable-only projects!") end method remove-project-build-products; define sealed method link-project (project-object :: , #key progress-callback, error-handler, process-subprojects?, build-script, target, force?, unify?, release?, messages) => () error("You cannot link an executable-only project!") end method link-project; define sealed method do-used-projects (function :: , project-object :: , #key indirect?, read-only?) => () #f end method do-used-projects; /// PROJECT-FILENAME (environment-protocols) define sealed method project-filename (project :: ) => (filename == #f) #f end method project-filename; define sealed method project-object-file-location (project :: ) => (filename == #f) #f end method project-object-file-location; /// CLOSE-PROJECT (environment-protocols) define sealed method env/close-project (project :: ) => () #f end method env/close-project; /// PROJECT-DATABASE-CHANGED? (environment-protocols) define sealed method project-database-changed?(project-object :: ) => (yes :: ); #f end method project-database-changed?; /// PROJECT-SOURCES-CHANGED? (environment-protocols) define sealed method project-sources-changed?(project-object :: ) => (yes :: ); #f end method project-sources-changed?; /// Project properties define sealed method env/project-read-only? (project-object :: ) => (read-only? :: ) #t end method env/project-read-only?; define sealed method project-can-be-built? (project-object :: ) => (can-be-built? :: ) #f end method project-can-be-built?; define sealed method project-can-be-debugged? (project-object :: ) => (can-be-debugged? :: ) #t end method project-can-be-debugged?; define sealed method project-compiled? (project-object :: ) => (compiled? :: ) #t end method project-compiled?; define sealed method project-interface-type (project-object :: ) => (interface-type :: ) //--- Is there any way for us to really tell? #"gui" end method project-interface-type; define sealed method env/project-target-type (project-object :: ) => (target-type :: env/) let filename = project-build-filename(project-object); select (filename.environment-locator-type) #"exe" => #"executable"; #"dll" => #"dll"; otherwise => error("Unexpected extension for exe project %=", filename); end end method env/project-target-type;