summaryrefslogtreecommitdiff
path: root/numpy/distutils/environment.py
diff options
context:
space:
mode:
authorcookedm <cookedm@localhost>2007-05-25 11:41:16 +0000
committercookedm <cookedm@localhost>2007-05-25 11:41:16 +0000
commit5267b3e16654ef326f525fdb9a1287a88396c616 (patch)
tree9e7137815415c08577f5451266cdc70f7caa3ea7 /numpy/distutils/environment.py
parentd11dbc78c0df5055a6ed57285775cc18dbe1721a (diff)
downloadnumpy-5267b3e16654ef326f525fdb9a1287a88396c616.tar.gz
merge from distutils-revamp branch (step 2)
- fcompiler changes. All flags, executables, etc., should be overridable by the user with config_fc (either command line or setup.cfg) or by environment variables
Diffstat (limited to 'numpy/distutils/environment.py')
-rw-r--r--numpy/distutils/environment.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/numpy/distutils/environment.py b/numpy/distutils/environment.py
new file mode 100644
index 000000000..fa4a77905
--- /dev/null
+++ b/numpy/distutils/environment.py
@@ -0,0 +1,49 @@
+import os
+from distutils.dist import Distribution
+
+__metaclass__ = type
+
+class EnvironmentConfig:
+ def __init__(self, distutils_section='DEFAULT', **kw):
+ self._distutils_section = distutils_section
+ self._conf_keys = kw
+ self._conf = None
+ self._hook_handler = None
+
+ def __getattr__(self, name):
+ try:
+ conf_desc = self._conf_keys[name]
+ except KeyError:
+ raise AttributeError(name)
+ return self._get_var(name, conf_desc)
+
+ def get(self, name, default=None):
+ try:
+ conf_desc = self._conf_keys[name]
+ except KeyError:
+ return default
+ var = self._get_var(name, conf_desc)
+ if var is None:
+ var = default
+ return var
+
+ def _get_var(self, name, conf_desc):
+ hook, envvar, confvar = conf_desc
+ var = self._hook_handler(name, hook)
+ if envvar is not None:
+ var = os.environ.get(envvar, var)
+ if confvar is not None and self._conf:
+ var = self._conf.get(confvar, (None, var))[1]
+ return var
+
+ def clone(self, hook_handler):
+ ec = self.__class__(distutils_section=self._distutils_section,
+ **self._conf_keys)
+ ec._hook_handler = hook_handler
+ return ec
+
+ def use_distribution(self, dist):
+ if isinstance(dist, Distribution):
+ self._conf = dist.get_option_dict(self._distutils_section)
+ else:
+ self._conf = dist