# (C) Copyright David Abrahams 2001. Permission to copy, use, modify, sell and # distribute this software is granted provided this copyright notice appears in # all copies. This software is provided "as is" without express or implied # warranty, and with no claim as to its suitability for any purpose. import modules ; # Return the value(s) of the given environment variable(s) at the time # bjam was invoked. rule environ ( variable-names + ) { return [ modules.peek .ENVIRON : $(variable-names) ] ; } .name = [ modules.peek : OS ] ; .platform = [ modules.peek : OSPLAT ] ; .version = [ modules.peek : OSVER ] ; local rule constant ( c ) { # First look for platform-specific name, then general value local variables = .$(c)-$(.name) .$(c) ; local result = $($(variables)) ; return $(result[1]) ; } rule get-constant ( ) { # Find the name of the constant being accessed, which is # equal to the name used to invoke us. local bt = [ BACKTRACE 1 ] ; local rulename = [ MATCH ([^.]*)$ : $(bt[4]) ] ; return [ constant $(rulename) ] ; } # export all the common constants .constants = name platform version shared-library-path-variable path-separator ; for local constant in $(.constants) { IMPORT $(__name__) : get-constant : $(__name__) : $(constant) ; } EXPORT $(__name__) : $(.constants) ; .shared-library-path-variable-NT = PATH ; .path-separator-NT = ";" ; .expand-variable-prefix-NT = % ; .expand-variable-suffix-NT = % ; .shared-library-path-variable-CYGWIN = PATH ; .path-separator-CYGWIN = ":" ; .expand-variable-prefix-CYGWIN = $ ; .expand-variable-suffix-CYGWIN = "" ; .shared-library-path-variable-MACOSX = DYLD_LIBRARY_PATH ; .shared-library-path-variable = LD_LIBRARY_PATH ; .path-separator = ":" ; .expand-variable-prefix = $ ; .expand-variable-suffix = "" ; if $(.name) = NT { local home = [ environ HOMEDRIVE HOMEPATH ] ; .home-directories = $(home[1])$(home[2]) [ environ HOME ] ; } else { .home-directories = [ environ HOME ] ; } # Can't use 'constant' mechanism because it only returns 1-element # values. rule home-directories ( ) { return $(.home-directories) ; } # Return the string needed to represent the expansion of the named # shell variable. rule expand-variable ( variable ) { local prefix = [ constant expand-variable-prefix ] ; local suffix = [ constant expand-variable-suffix ] ; return $(prefix)$(variable)$(suffix) ; } # Returns true if running on windows, whether in cygwin or not. rule on-windows { local result ; if [ modules.peek : NT ] { result = true ; } else if [ modules.peek : UNIX ] { switch [ modules.peek : JAMUNAME ] { case CYGWIN* : { result = true ; } } } return $(result) ; } if ! [ on-windows ] { .on-unix = 1 ; } rule on-unix { return $(.on-unix) ; } import regex ; rule __test__ { import assert ; rule identity ( args * ) { return $(args) ; } if ! ( --quiet in [ modules.peek : ARGV ] ) { ECHO os: name= [ name ] ; ECHO os: version= [ version ] ; } assert.true name ; }