Module: projects-protocol-internals Synopsis: Project manager protocol library Author: 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 /// Useful constants //---*** What should these really be? define constant = ; define constant = ; define constant = ; define constant = one-of(#"never", #"warnings", #"serious-warnings"); define variable *copy-canonical-sources?* :: = #t; /// Workspaces define open abstract primary class () end class ; define open generic make-workspace-project (workspace :: , #key, #all-keys) => (project :: ); define open generic make-workspace-build-target (workspace :: , #key, #all-keys) => (build-target :: ); define open generic workspace-processor (workspace :: ) => (processor :: ); define open generic workspace-operating-system (workspace :: ) => (os :: ); define open generic workspace-projects (workspace :: ) => (projects :: ); define open generic workspace-build-request (workspace :: ) => (request :: false-or()); define variable *default-workspace* :: false-or() = #f; define function default-workspace () => (workspace :: ) *default-workspace* | error("No default project workspace!") end function default-workspace; define function default-workspace-setter (workspace :: ) => (workspace :: ) *default-workspace* := workspace end function default-workspace-setter; define macro with-workspace-build { with-workspace-build (?workspace:name, ?target:name) ?body:body end } => { do-with-workspace-build (method (?workspace :: , ?target :: ) ?body end, ?workspace, ?target) } end macro with-workspace-build; define method do-with-workspace-build (function :: , workspace :: , target :: ) => () block () note-workspace-build-operation-started(workspace, target); function(workspace, target) cleanup note-workspace-build-operation-finished(workspace) end end method do-with-workspace-build; /// File extensions define constant $dylan-file-extension = "dylan"; define constant $dylan-alternate-extension = "dyl"; define constant $project-file-extension = "hdp"; define constant $lid-file-extension = "lid"; define constant $database-file-extension = "ddb"; define constant $profile-file-extension = "prf"; define constant $cache-file-extension = "cache"; define function dylan-file-extension () => (extension :: ) $dylan-file-extension end function dylan-file-extension; define function project-file-extension () => (extension :: ) $project-file-extension end function project-file-extension; define function lid-file-extension () => (extension :: ) $lid-file-extension end function lid-file-extension; define function database-file-extension () => (extension :: ) $database-file-extension end function database-file-extension; define function profile-file-extension () => (extension :: ) $profile-file-extension end function profile-file-extension; define function project-cache-file-extension () => (extension :: ) $cache-file-extension end function project-cache-file-extension; define function locator-extension-type (locator :: ) => (type :: ) let extension = locator.locator-extension | dylan-file-extension(); select (extension by \=) dylan-file-extension() => #"dylan"; $dylan-alternate-extension => #"dylan"; project-file-extension() => #"hdp"; lid-file-extension() => #"lid"; database-file-extension() => #"ddb"; otherwise => as(, extension); end end function locator-extension-type;