| """Provide access to Python's configuration information. The specific |
| configuration variables available depend heavily on the platform and |
| configuration. The values may be retrieved using |
| get_config_var(name), and the list of variables is available via |
| get_config_vars().keys(). Additional convenience functions are also |
| available. |
| |
| Written by: Fred L. Drake, Jr. |
| Email: <fdrake@acm.org> |
| |
| **This module has been moved out of Distutils and will be removed from |
| Python in the next version (3.2)** |
| """ |
| |
| __revision__ = "$Id$" |
| |
| import io |
| import os |
| import re |
| from warnings import warn |
| |
| from distutils.errors import DistutilsPlatformError |
| |
| # importing sysconfig from Lib |
| # to avoid this module to shadow it |
| _sysconfig = __import__('sysconfig') |
| |
| # names defined here to keep backward compatibility |
| # for APIs that were relocated |
| get_python_version = _sysconfig.get_python_version |
| get_config_h_filename = _sysconfig.get_config_h_filename |
| parse_config_h = _sysconfig.parse_config_h |
| get_config_vars = _sysconfig.get_config_vars |
| get_config_var = _sysconfig.get_config_var |
| from distutils.ccompiler import customize_compiler |
| |
| _DEPRECATION_MSG = ("distutils.sysconfig.%s is deprecated. " |
| "Use the APIs provided by the sysconfig module instead") |
| |
| def _get_project_base(): |
| return _sysconfig._PROJECT_BASE |
| |
| project_base = _get_project_base() |
| |
| class _DeprecatedBool(int): |
| def __nonzero__(self): |
| warn(_DEPRECATION_MSG % 'get_python_version', DeprecationWarning) |
| return super(_DeprecatedBool, self).__nonzero__() |
| |
| def _python_build(): |
| return _DeprecatedBool(_sysconfig.is_python_build()) |
| |
| python_build = _python_build() |
| |
| def get_python_inc(plat_specific=0, prefix=None): |
| """This function is deprecated. |
| |
| Return the directory containing installed Python header files. |
| |
| If 'plat_specific' is false (the default), this is the path to the |
| non-platform-specific header files, i.e. Python.h and so on; |
| otherwise, this is the path to platform-specific header files |
| (namely pyconfig.h). |
| |
| If 'prefix' is supplied, use it instead of sys.prefix or |
| sys.exec_prefix -- i.e., ignore 'plat_specific'. |
| """ |
| warn(_DEPRECATION_MSG % 'get_python_inc', DeprecationWarning) |
| get_path = _sysconfig.get_path |
| |
| if prefix is not None: |
| vars = {'base': prefix} |
| return get_path('include', vars=vars) |
| |
| if not plat_specific: |
| return get_path('include') |
| else: |
| return get_path('platinclude') |
| |
| def get_python_lib(plat_specific=False, standard_lib=False, prefix=None): |
| """This function is deprecated. |
| |
| Return the directory containing the Python library (standard or |
| site additions). |
| |
| If 'plat_specific' is true, return the directory containing |
| platform-specific modules, i.e. any module from a non-pure-Python |
| module distribution; otherwise, return the platform-shared library |
| directory. If 'standard_lib' is true, return the directory |
| containing standard Python library modules; otherwise, return the |
| directory for site-specific modules. |
| |
| If 'prefix' is supplied, use it instead of sys.prefix or |
| sys.exec_prefix -- i.e., ignore 'plat_specific'. |
| """ |
| warn(_DEPRECATION_MSG % 'get_python_lib', DeprecationWarning) |
| vars = {} |
| get_path = _sysconfig.get_path |
| if prefix is not None: |
| if plat_specific: |
| vars['platbase'] = prefix |
| else: |
| vars['base'] = prefix |
| if standard_lib: |
| if plat_specific: |
| return get_path('platstdlib', vars=vars) |
| else: |
| return get_path('stdlib', vars=vars) |
| else: |
| if plat_specific: |
| return get_path('platlib', vars=vars) |
| else: |
| return get_path('purelib', vars=vars) |
| |
| def get_makefile_filename(): |
| """This function is deprecated. |
| |
| Return full pathname of installed Makefile from the Python build. |
| """ |
| |
| warn(_DEPRECATION_MSG % 'get_makefile_filename', DeprecationWarning) |
| return _sysconfig._get_makefile_filename() |
| |
| # Regexes needed for parsing Makefile (and similar syntaxes, |
| # like old-style Setup files). |
| _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") |
| _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") |
| _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") |
| |
| def parse_makefile(fn, g=None): |
| """This function is deprecated. |
| |
| Parse a Makefile-style file. |
| |
| A dictionary containing name/value pairs is returned. If an |
| optional dictionary is passed in as the second argument, it is |
| used instead of a new dictionary. |
| """ |
| warn(_DEPRECATION_MSG % 'parse_makefile', DeprecationWarning) |
| return _sysconfig._parse_makefile(fn, g) |
| |
| def expand_makefile_vars(s, vars): |
| """This function is deprecated. |
| |
| Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in |
| 'string' according to 'vars' (a dictionary mapping variable names to |
| values). Variables not present in 'vars' are silently expanded to the |
| empty string. The variable values in 'vars' should not contain further |
| variable expansions; if 'vars' is the output of 'parse_makefile()', |
| you're fine. Returns a variable-expanded version of 's'. |
| """ |
| warn('this function will be removed in then next version of Python', |
| DeprecationWarning) |
| |
| # This algorithm does multiple expansion, so if vars['foo'] contains |
| # "${bar}", it will expand ${foo} to ${bar}, and then expand |
| # ${bar}... and so forth. This is fine as long as 'vars' comes from |
| # 'parse_makefile()', which takes care of such expansions eagerly, |
| # according to make's variable expansion semantics. |
| |
| while True: |
| m = _findvar1_rx.search(s) or _findvar2_rx.search(s) |
| if m: |
| (beg, end) = m.span() |
| s = s[0:beg] + vars.get(m.group(1)) + s[end:] |
| else: |
| break |
| return s |