mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	svn+ssh://pythondev@svn.python.org/python/trunk ........ r77919 | tarek.ziade | 2010-02-02 23:50:23 +0100 (Tue, 02 Feb 2010) | 1 line module reorganization + missing doctests ........ r77921 | tarek.ziade | 2010-02-02 23:54:28 +0100 (Tue, 02 Feb 2010) | 1 line sysconfig.get_scheme_names now returns a sorted tuple ........ r77922 | tarek.ziade | 2010-02-02 23:55:00 +0100 (Tue, 02 Feb 2010) | 1 line fixed a typo on distutils.sysconfig. thanks arfever ........
		
			
				
	
	
		
			168 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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.3)**
 | 
						|
"""
 | 
						|
 | 
						|
__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
 |