1#
2# Scons variable importer
3#
4# Version 1.1
5# 16-Aug-2019
6#
7import os
8
9def _setvariable(env,name,value):
10   """Sets SCons variable.
11
12   Sets Scons variable name in environment env to value
13
14   """
15   kw={}
16   kw[name]=value
17   env.Replace(**kw)
18
19def _setenvvariable(env,name,value):
20   """Sets SCons environment variable.
21
22   Sets Scons environment variable name in environment env to value.
23   This variable will be used as environment variable for
24   external jobs started by SCons.
25
26   """
27   env['ENV'][name]=value
28
29def importVariable(env,varlist=None,target=None,prefix=None):
30   """Imports variables from OS to SCons environment.
31
32   Imports environment variables from Operation System into SCons
33   variable.
34
35   keyword arguments:
36   env -- SCons environment to be imported into
37   varlist -- list or environment variable name to be imported
38   target -- output variable names (optional)
39   prefix -- import all variables starting with this prefix
40
41   """
42   _importcore(env,varlist,target,prefix,_setvariable)
43
44def importEnvironment(env,varlist=None,target=None,prefix=None):
45   """Imports variables from OS to SCons environment.
46
47   Imports environment variables from Operation System into SCons
48   variable.
49
50   keyword arguments:
51   env -- SCons environment to be imported into
52   varlist -- list or environment variable name to be imported
53   target -- output variable names (optional)
54   prefix -- import all variables starting with this prefix
55
56   """
57   _importcore(env,varlist,target,prefix,_setenvvariable)
58
59def _importcore(env,varlist,targets,prefix,setter):
60   """Imports env. variables from OS using setter.
61
62   keyword arguments:
63   env -- SCons environment to be imported into
64   varlist -- list or environment variable name to be imported
65   targets -- target variable names if you want to import variable
66              using different name
67   prefix -- import all variables starting with this prefix
68   setter -- function for setting variable in env
69
70   """
71   if varlist:
72       if not isinstance(varlist, list):
73           if isinstance(varlist, str):
74               varlist=[varlist]
75           else:
76               raise TypeError("varlist must be list or string")
77       if targets:
78           if not isinstance(targets, list):
79               if isinstance(targets, str):
80                   targets=[targets]
81               else:
82                   raise TypeError("targets must be list of string")
83       for i in range(0,len(varlist)):
84           value=os.environ.get(varlist[i])
85           if value:
86               if targets:
87                  setter(*[env,targets[i],value])
88               else:
89                  setter(*[env,varlist[i],value])
90   if prefix:
91       if not isinstance(prefix, str):
92           raise TypeError("prefix must be string")
93       for i in os.environ.keys():
94           if i.startswith(prefix):
95               setter(*[env,i,os.environ.get(i)])
96