symbian-qemu-0.9.1-12/python-win32-2.6.1/lib/distutils/sysconfig.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """Provide access to Python's configuration information.  The specific
       
     2 configuration variables available depend heavily on the platform and
       
     3 configuration.  The values may be retrieved using
       
     4 get_config_var(name), and the list of variables is available via
       
     5 get_config_vars().keys().  Additional convenience functions are also
       
     6 available.
       
     7 
       
     8 Written by:   Fred L. Drake, Jr.
       
     9 Email:        <fdrake@acm.org>
       
    10 """
       
    11 
       
    12 __revision__ = "$Id: sysconfig.py 63955 2008-06-05 12:58:24Z ronald.oussoren $"
       
    13 
       
    14 import os
       
    15 import re
       
    16 import string
       
    17 import sys
       
    18 
       
    19 from distutils.errors import DistutilsPlatformError
       
    20 
       
    21 # These are needed in a couple of spots, so just compute them once.
       
    22 PREFIX = os.path.normpath(sys.prefix)
       
    23 EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
       
    24 
       
    25 # Path to the base directory of the project. On Windows the binary may
       
    26 # live in project/PCBuild9.  If we're dealing with an x64 Windows build,
       
    27 # it'll live in project/PCbuild/amd64.
       
    28 project_base = os.path.dirname(os.path.abspath(sys.executable))
       
    29 if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
       
    30     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
       
    31 # PC/VS7.1
       
    32 if os.name == "nt" and "\\pc\\v" in project_base[-10:].lower():
       
    33     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir,
       
    34                                                 os.path.pardir))
       
    35 # PC/AMD64
       
    36 if os.name == "nt" and "\\pcbuild\\amd64" in project_base[-14:].lower():
       
    37     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir,
       
    38                                                 os.path.pardir))
       
    39 
       
    40 # python_build: (Boolean) if true, we're either building Python or
       
    41 # building an extension with an un-installed Python, so we use
       
    42 # different (hard-wired) directories.
       
    43 # Setup.local is available for Makefile builds including VPATH builds,
       
    44 # Setup.dist is available on Windows
       
    45 def _python_build():
       
    46     for fn in ("Setup.dist", "Setup.local"):
       
    47         if os.path.isfile(os.path.join(project_base, "Modules", fn)):
       
    48             return True
       
    49     return False
       
    50 python_build = _python_build()
       
    51 
       
    52 
       
    53 def get_python_version():
       
    54     """Return a string containing the major and minor Python version,
       
    55     leaving off the patchlevel.  Sample return values could be '1.5'
       
    56     or '2.2'.
       
    57     """
       
    58     return sys.version[:3]
       
    59 
       
    60 
       
    61 def get_python_inc(plat_specific=0, prefix=None):
       
    62     """Return the directory containing installed Python header files.
       
    63 
       
    64     If 'plat_specific' is false (the default), this is the path to the
       
    65     non-platform-specific header files, i.e. Python.h and so on;
       
    66     otherwise, this is the path to platform-specific header files
       
    67     (namely pyconfig.h).
       
    68 
       
    69     If 'prefix' is supplied, use it instead of sys.prefix or
       
    70     sys.exec_prefix -- i.e., ignore 'plat_specific'.
       
    71     """
       
    72     if prefix is None:
       
    73         prefix = plat_specific and EXEC_PREFIX or PREFIX
       
    74     if os.name == "posix":
       
    75         if python_build:
       
    76             base = os.path.dirname(os.path.abspath(sys.executable))
       
    77             if plat_specific:
       
    78                 inc_dir = base
       
    79             else:
       
    80                 inc_dir = os.path.join(base, "Include")
       
    81                 if not os.path.exists(inc_dir):
       
    82                     inc_dir = os.path.join(os.path.dirname(base), "Include")
       
    83             return inc_dir
       
    84         return os.path.join(prefix, "include", "python" + get_python_version())
       
    85     elif os.name == "nt":
       
    86         return os.path.join(prefix, "include")
       
    87     elif os.name == "mac":
       
    88         if plat_specific:
       
    89             return os.path.join(prefix, "Mac", "Include")
       
    90         else:
       
    91             return os.path.join(prefix, "Include")
       
    92     elif os.name == "os2":
       
    93         return os.path.join(prefix, "Include")
       
    94     else:
       
    95         raise DistutilsPlatformError(
       
    96             "I don't know where Python installs its C header files "
       
    97             "on platform '%s'" % os.name)
       
    98 
       
    99 
       
   100 def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
       
   101     """Return the directory containing the Python library (standard or
       
   102     site additions).
       
   103 
       
   104     If 'plat_specific' is true, return the directory containing
       
   105     platform-specific modules, i.e. any module from a non-pure-Python
       
   106     module distribution; otherwise, return the platform-shared library
       
   107     directory.  If 'standard_lib' is true, return the directory
       
   108     containing standard Python library modules; otherwise, return the
       
   109     directory for site-specific modules.
       
   110 
       
   111     If 'prefix' is supplied, use it instead of sys.prefix or
       
   112     sys.exec_prefix -- i.e., ignore 'plat_specific'.
       
   113     """
       
   114     if prefix is None:
       
   115         prefix = plat_specific and EXEC_PREFIX or PREFIX
       
   116 
       
   117     if os.name == "posix":
       
   118         libpython = os.path.join(prefix,
       
   119                                  "lib", "python" + get_python_version())
       
   120         if standard_lib:
       
   121             return libpython
       
   122         else:
       
   123             return os.path.join(libpython, "site-packages")
       
   124 
       
   125     elif os.name == "nt":
       
   126         if standard_lib:
       
   127             return os.path.join(prefix, "Lib")
       
   128         else:
       
   129             if get_python_version() < "2.2":
       
   130                 return prefix
       
   131             else:
       
   132                 return os.path.join(PREFIX, "Lib", "site-packages")
       
   133 
       
   134     elif os.name == "mac":
       
   135         if plat_specific:
       
   136             if standard_lib:
       
   137                 return os.path.join(prefix, "Lib", "lib-dynload")
       
   138             else:
       
   139                 return os.path.join(prefix, "Lib", "site-packages")
       
   140         else:
       
   141             if standard_lib:
       
   142                 return os.path.join(prefix, "Lib")
       
   143             else:
       
   144                 return os.path.join(prefix, "Lib", "site-packages")
       
   145 
       
   146     elif os.name == "os2":
       
   147         if standard_lib:
       
   148             return os.path.join(PREFIX, "Lib")
       
   149         else:
       
   150             return os.path.join(PREFIX, "Lib", "site-packages")
       
   151 
       
   152     else:
       
   153         raise DistutilsPlatformError(
       
   154             "I don't know where Python installs its library "
       
   155             "on platform '%s'" % os.name)
       
   156 
       
   157 
       
   158 def customize_compiler(compiler):
       
   159     """Do any platform-specific customization of a CCompiler instance.
       
   160 
       
   161     Mainly needed on Unix, so we can plug in the information that
       
   162     varies across Unices and is stored in Python's Makefile.
       
   163     """
       
   164     if compiler.compiler_type == "unix":
       
   165         (cc, cxx, opt, cflags, ccshared, ldshared, so_ext) = \
       
   166             get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
       
   167                             'CCSHARED', 'LDSHARED', 'SO')
       
   168 
       
   169         if 'CC' in os.environ:
       
   170             cc = os.environ['CC']
       
   171         if 'CXX' in os.environ:
       
   172             cxx = os.environ['CXX']
       
   173         if 'LDSHARED' in os.environ:
       
   174             ldshared = os.environ['LDSHARED']
       
   175         if 'CPP' in os.environ:
       
   176             cpp = os.environ['CPP']
       
   177         else:
       
   178             cpp = cc + " -E"           # not always
       
   179         if 'LDFLAGS' in os.environ:
       
   180             ldshared = ldshared + ' ' + os.environ['LDFLAGS']
       
   181         if 'CFLAGS' in os.environ:
       
   182             cflags = opt + ' ' + os.environ['CFLAGS']
       
   183             ldshared = ldshared + ' ' + os.environ['CFLAGS']
       
   184         if 'CPPFLAGS' in os.environ:
       
   185             cpp = cpp + ' ' + os.environ['CPPFLAGS']
       
   186             cflags = cflags + ' ' + os.environ['CPPFLAGS']
       
   187             ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
       
   188 
       
   189         cc_cmd = cc + ' ' + cflags
       
   190         compiler.set_executables(
       
   191             preprocessor=cpp,
       
   192             compiler=cc_cmd,
       
   193             compiler_so=cc_cmd + ' ' + ccshared,
       
   194             compiler_cxx=cxx,
       
   195             linker_so=ldshared,
       
   196             linker_exe=cc)
       
   197 
       
   198         compiler.shared_lib_extension = so_ext
       
   199 
       
   200 
       
   201 def get_config_h_filename():
       
   202     """Return full pathname of installed pyconfig.h file."""
       
   203     if python_build:
       
   204         if os.name == "nt":
       
   205             inc_dir = os.path.join(project_base, "PC")
       
   206         else:
       
   207             inc_dir = project_base
       
   208     else:
       
   209         inc_dir = get_python_inc(plat_specific=1)
       
   210     if get_python_version() < '2.2':
       
   211         config_h = 'config.h'
       
   212     else:
       
   213         # The name of the config.h file changed in 2.2
       
   214         config_h = 'pyconfig.h'
       
   215     return os.path.join(inc_dir, config_h)
       
   216 
       
   217 
       
   218 def get_makefile_filename():
       
   219     """Return full pathname of installed Makefile from the Python build."""
       
   220     if python_build:
       
   221         return os.path.join(os.path.dirname(sys.executable), "Makefile")
       
   222     lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
       
   223     return os.path.join(lib_dir, "config", "Makefile")
       
   224 
       
   225 
       
   226 def parse_config_h(fp, g=None):
       
   227     """Parse a config.h-style file.
       
   228 
       
   229     A dictionary containing name/value pairs is returned.  If an
       
   230     optional dictionary is passed in as the second argument, it is
       
   231     used instead of a new dictionary.
       
   232     """
       
   233     if g is None:
       
   234         g = {}
       
   235     define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
       
   236     undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
       
   237     #
       
   238     while 1:
       
   239         line = fp.readline()
       
   240         if not line:
       
   241             break
       
   242         m = define_rx.match(line)
       
   243         if m:
       
   244             n, v = m.group(1, 2)
       
   245             try: v = int(v)
       
   246             except ValueError: pass
       
   247             g[n] = v
       
   248         else:
       
   249             m = undef_rx.match(line)
       
   250             if m:
       
   251                 g[m.group(1)] = 0
       
   252     return g
       
   253 
       
   254 
       
   255 # Regexes needed for parsing Makefile (and similar syntaxes,
       
   256 # like old-style Setup files).
       
   257 _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
       
   258 _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
       
   259 _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
       
   260 
       
   261 def parse_makefile(fn, g=None):
       
   262     """Parse a Makefile-style file.
       
   263 
       
   264     A dictionary containing name/value pairs is returned.  If an
       
   265     optional dictionary is passed in as the second argument, it is
       
   266     used instead of a new dictionary.
       
   267     """
       
   268     from distutils.text_file import TextFile
       
   269     fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1)
       
   270 
       
   271     if g is None:
       
   272         g = {}
       
   273     done = {}
       
   274     notdone = {}
       
   275 
       
   276     while 1:
       
   277         line = fp.readline()
       
   278         if line is None:                # eof
       
   279             break
       
   280         m = _variable_rx.match(line)
       
   281         if m:
       
   282             n, v = m.group(1, 2)
       
   283             v = string.strip(v)
       
   284             if "$" in v:
       
   285                 notdone[n] = v
       
   286             else:
       
   287                 try: v = int(v)
       
   288                 except ValueError: pass
       
   289                 done[n] = v
       
   290 
       
   291     # do variable interpolation here
       
   292     while notdone:
       
   293         for name in notdone.keys():
       
   294             value = notdone[name]
       
   295             m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
       
   296             if m:
       
   297                 n = m.group(1)
       
   298                 found = True
       
   299                 if n in done:
       
   300                     item = str(done[n])
       
   301                 elif n in notdone:
       
   302                     # get it on a subsequent round
       
   303                     found = False
       
   304                 elif n in os.environ:
       
   305                     # do it like make: fall back to environment
       
   306                     item = os.environ[n]
       
   307                 else:
       
   308                     done[n] = item = ""
       
   309                 if found:
       
   310                     after = value[m.end():]
       
   311                     value = value[:m.start()] + item + after
       
   312                     if "$" in after:
       
   313                         notdone[name] = value
       
   314                     else:
       
   315                         try: value = int(value)
       
   316                         except ValueError:
       
   317                             done[name] = string.strip(value)
       
   318                         else:
       
   319                             done[name] = value
       
   320                         del notdone[name]
       
   321             else:
       
   322                 # bogus variable reference; just drop it since we can't deal
       
   323                 del notdone[name]
       
   324 
       
   325     fp.close()
       
   326 
       
   327     # save the results in the global dictionary
       
   328     g.update(done)
       
   329     return g
       
   330 
       
   331 
       
   332 def expand_makefile_vars(s, vars):
       
   333     """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in
       
   334     'string' according to 'vars' (a dictionary mapping variable names to
       
   335     values).  Variables not present in 'vars' are silently expanded to the
       
   336     empty string.  The variable values in 'vars' should not contain further
       
   337     variable expansions; if 'vars' is the output of 'parse_makefile()',
       
   338     you're fine.  Returns a variable-expanded version of 's'.
       
   339     """
       
   340 
       
   341     # This algorithm does multiple expansion, so if vars['foo'] contains
       
   342     # "${bar}", it will expand ${foo} to ${bar}, and then expand
       
   343     # ${bar}... and so forth.  This is fine as long as 'vars' comes from
       
   344     # 'parse_makefile()', which takes care of such expansions eagerly,
       
   345     # according to make's variable expansion semantics.
       
   346 
       
   347     while 1:
       
   348         m = _findvar1_rx.search(s) or _findvar2_rx.search(s)
       
   349         if m:
       
   350             (beg, end) = m.span()
       
   351             s = s[0:beg] + vars.get(m.group(1)) + s[end:]
       
   352         else:
       
   353             break
       
   354     return s
       
   355 
       
   356 
       
   357 _config_vars = None
       
   358 
       
   359 def _init_posix():
       
   360     """Initialize the module as appropriate for POSIX systems."""
       
   361     g = {}
       
   362     # load the installed Makefile:
       
   363     try:
       
   364         filename = get_makefile_filename()
       
   365         parse_makefile(filename, g)
       
   366     except IOError, msg:
       
   367         my_msg = "invalid Python installation: unable to open %s" % filename
       
   368         if hasattr(msg, "strerror"):
       
   369             my_msg = my_msg + " (%s)" % msg.strerror
       
   370 
       
   371         raise DistutilsPlatformError(my_msg)
       
   372 
       
   373     # load the installed pyconfig.h:
       
   374     try:
       
   375         filename = get_config_h_filename()
       
   376         parse_config_h(file(filename), g)
       
   377     except IOError, msg:
       
   378         my_msg = "invalid Python installation: unable to open %s" % filename
       
   379         if hasattr(msg, "strerror"):
       
   380             my_msg = my_msg + " (%s)" % msg.strerror
       
   381 
       
   382         raise DistutilsPlatformError(my_msg)
       
   383 
       
   384     # On MacOSX we need to check the setting of the environment variable
       
   385     # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so
       
   386     # it needs to be compatible.
       
   387     # If it isn't set we set it to the configure-time value
       
   388     if sys.platform == 'darwin' and 'MACOSX_DEPLOYMENT_TARGET' in g:
       
   389         cfg_target = g['MACOSX_DEPLOYMENT_TARGET']
       
   390         cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '')
       
   391         if cur_target == '':
       
   392             cur_target = cfg_target
       
   393             os.putenv('MACOSX_DEPLOYMENT_TARGET', cfg_target)
       
   394         elif map(int, cfg_target.split('.')) > map(int, cur_target.split('.')):
       
   395             my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configure'
       
   396                 % (cur_target, cfg_target))
       
   397             raise DistutilsPlatformError(my_msg)
       
   398 
       
   399     # On AIX, there are wrong paths to the linker scripts in the Makefile
       
   400     # -- these paths are relative to the Python source, but when installed
       
   401     # the scripts are in another directory.
       
   402     if python_build:
       
   403         g['LDSHARED'] = g['BLDSHARED']
       
   404 
       
   405     elif get_python_version() < '2.1':
       
   406         # The following two branches are for 1.5.2 compatibility.
       
   407         if sys.platform == 'aix4':          # what about AIX 3.x ?
       
   408             # Linker script is in the config directory, not in Modules as the
       
   409             # Makefile says.
       
   410             python_lib = get_python_lib(standard_lib=1)
       
   411             ld_so_aix = os.path.join(python_lib, 'config', 'ld_so_aix')
       
   412             python_exp = os.path.join(python_lib, 'config', 'python.exp')
       
   413 
       
   414             g['LDSHARED'] = "%s %s -bI:%s" % (ld_so_aix, g['CC'], python_exp)
       
   415 
       
   416         elif sys.platform == 'beos':
       
   417             # Linker script is in the config directory.  In the Makefile it is
       
   418             # relative to the srcdir, which after installation no longer makes
       
   419             # sense.
       
   420             python_lib = get_python_lib(standard_lib=1)
       
   421             linkerscript_path = string.split(g['LDSHARED'])[0]
       
   422             linkerscript_name = os.path.basename(linkerscript_path)
       
   423             linkerscript = os.path.join(python_lib, 'config',
       
   424                                         linkerscript_name)
       
   425 
       
   426             # XXX this isn't the right place to do this: adding the Python
       
   427             # library to the link, if needed, should be in the "build_ext"
       
   428             # command.  (It's also needed for non-MS compilers on Windows, and
       
   429             # it's taken care of for them by the 'build_ext.get_libraries()'
       
   430             # method.)
       
   431             g['LDSHARED'] = ("%s -L%s/lib -lpython%s" %
       
   432                              (linkerscript, PREFIX, get_python_version()))
       
   433 
       
   434     global _config_vars
       
   435     _config_vars = g
       
   436 
       
   437 
       
   438 def _init_nt():
       
   439     """Initialize the module as appropriate for NT"""
       
   440     g = {}
       
   441     # set basic install directories
       
   442     g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
       
   443     g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
       
   444 
       
   445     # XXX hmmm.. a normal install puts include files here
       
   446     g['INCLUDEPY'] = get_python_inc(plat_specific=0)
       
   447 
       
   448     g['SO'] = '.pyd'
       
   449     g['EXE'] = ".exe"
       
   450     g['VERSION'] = get_python_version().replace(".", "")
       
   451     g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
       
   452 
       
   453     global _config_vars
       
   454     _config_vars = g
       
   455 
       
   456 
       
   457 def _init_mac():
       
   458     """Initialize the module as appropriate for Macintosh systems"""
       
   459     g = {}
       
   460     # set basic install directories
       
   461     g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
       
   462     g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
       
   463 
       
   464     # XXX hmmm.. a normal install puts include files here
       
   465     g['INCLUDEPY'] = get_python_inc(plat_specific=0)
       
   466 
       
   467     import MacOS
       
   468     if not hasattr(MacOS, 'runtimemodel'):
       
   469         g['SO'] = '.ppc.slb'
       
   470     else:
       
   471         g['SO'] = '.%s.slb' % MacOS.runtimemodel
       
   472 
       
   473     # XXX are these used anywhere?
       
   474     g['install_lib'] = os.path.join(EXEC_PREFIX, "Lib")
       
   475     g['install_platlib'] = os.path.join(EXEC_PREFIX, "Mac", "Lib")
       
   476 
       
   477     # These are used by the extension module build
       
   478     g['srcdir'] = ':'
       
   479     global _config_vars
       
   480     _config_vars = g
       
   481 
       
   482 
       
   483 def _init_os2():
       
   484     """Initialize the module as appropriate for OS/2"""
       
   485     g = {}
       
   486     # set basic install directories
       
   487     g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
       
   488     g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
       
   489 
       
   490     # XXX hmmm.. a normal install puts include files here
       
   491     g['INCLUDEPY'] = get_python_inc(plat_specific=0)
       
   492 
       
   493     g['SO'] = '.pyd'
       
   494     g['EXE'] = ".exe"
       
   495 
       
   496     global _config_vars
       
   497     _config_vars = g
       
   498 
       
   499 
       
   500 def get_config_vars(*args):
       
   501     """With no arguments, return a dictionary of all configuration
       
   502     variables relevant for the current platform.  Generally this includes
       
   503     everything needed to build extensions and install both pure modules and
       
   504     extensions.  On Unix, this means every variable defined in Python's
       
   505     installed Makefile; on Windows and Mac OS it's a much smaller set.
       
   506 
       
   507     With arguments, return a list of values that result from looking up
       
   508     each argument in the configuration variable dictionary.
       
   509     """
       
   510     global _config_vars
       
   511     if _config_vars is None:
       
   512         func = globals().get("_init_" + os.name)
       
   513         if func:
       
   514             func()
       
   515         else:
       
   516             _config_vars = {}
       
   517 
       
   518         # Normalized versions of prefix and exec_prefix are handy to have;
       
   519         # in fact, these are the standard versions used most places in the
       
   520         # Distutils.
       
   521         _config_vars['prefix'] = PREFIX
       
   522         _config_vars['exec_prefix'] = EXEC_PREFIX
       
   523 
       
   524         if sys.platform == 'darwin':
       
   525             kernel_version = os.uname()[2] # Kernel version (8.4.3)
       
   526             major_version = int(kernel_version.split('.')[0])
       
   527 
       
   528             if major_version < 8:
       
   529                 # On Mac OS X before 10.4, check if -arch and -isysroot
       
   530                 # are in CFLAGS or LDFLAGS and remove them if they are.
       
   531                 # This is needed when building extensions on a 10.3 system
       
   532                 # using a universal build of python.
       
   533                 for key in ('LDFLAGS', 'BASECFLAGS',
       
   534                         # a number of derived variables. These need to be
       
   535                         # patched up as well.
       
   536                         'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
       
   537                     flags = _config_vars[key]
       
   538                     flags = re.sub('-arch\s+\w+\s', ' ', flags)
       
   539                     flags = re.sub('-isysroot [^ \t]*', ' ', flags)
       
   540                     _config_vars[key] = flags
       
   541 
       
   542             else:
       
   543 
       
   544                 # Allow the user to override the architecture flags using
       
   545                 # an environment variable.
       
   546                 # NOTE: This name was introduced by Apple in OSX 10.5 and
       
   547                 # is used by several scripting languages distributed with
       
   548                 # that OS release.
       
   549 
       
   550                 if 'ARCHFLAGS' in os.environ:
       
   551                     arch = os.environ['ARCHFLAGS']
       
   552                     for key in ('LDFLAGS', 'BASECFLAGS',
       
   553                         # a number of derived variables. These need to be
       
   554                         # patched up as well.
       
   555                         'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
       
   556 
       
   557                         flags = _config_vars[key]
       
   558                         flags = re.sub('-arch\s+\w+\s', ' ', flags)
       
   559                         flags = flags + ' ' + arch
       
   560                         _config_vars[key] = flags
       
   561 
       
   562     if args:
       
   563         vals = []
       
   564         for name in args:
       
   565             vals.append(_config_vars.get(name))
       
   566         return vals
       
   567     else:
       
   568         return _config_vars
       
   569 
       
   570 def get_config_var(name):
       
   571     """Return the value of a single variable using the dictionary
       
   572     returned by 'get_config_vars()'.  Equivalent to
       
   573     get_config_vars().get(name)
       
   574     """
       
   575     return get_config_vars().get(name)