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
8
Written by: Fred L. Drake, Jr.
9
Email: <fdrake@acm.org>
19
from distutils.errors import DistutilsPlatformError
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)
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))
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,
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,
40
# set for cross builds
41
if "_PYTHON_PROJECT_BASE" in os.environ:
42
# this is the build directory, at least for posix
43
project_base = os.path.normpath(os.environ["_PYTHON_PROJECT_BASE"])
45
# python_build: (Boolean) if true, we're either building Python or
46
# building an extension with an un-installed Python, so we use
47
# different (hard-wired) directories.
48
# Setup.local is available for Makefile builds including VPATH builds,
49
# Setup.dist is available on Windows
51
for fn in ("Setup.dist", "Setup.local"):
52
if os.path.isfile(os.path.join(project_base, "Modules", fn)):
55
python_build = _python_build()
58
def get_python_version():
59
"""Return a string containing the major and minor Python version,
60
leaving off the patchlevel. Sample return values could be '1.5'
63
return sys.version[:3]
66
def get_python_inc(plat_specific=0, prefix=None):
67
"""Return the directory containing installed Python header files.
69
If 'plat_specific' is false (the default), this is the path to the
70
non-platform-specific header files, i.e. Python.h and so on;
71
otherwise, this is the path to platform-specific header files
74
If 'prefix' is supplied, use it instead of sys.prefix or
75
sys.exec_prefix -- i.e., ignore 'plat_specific'.
78
prefix = plat_specific and EXEC_PREFIX or PREFIX
80
if os.name == "posix":
82
buildir = os.path.dirname(sys.executable)
84
# python.h is located in the buildir
87
# the source dir is relative to the buildir
88
srcdir = os.path.abspath(os.path.join(buildir,
89
get_config_var('srcdir')))
90
# Include is located in the srcdir
91
inc_dir = os.path.join(srcdir, "Include")
93
return os.path.join(prefix, "include", "python" + get_python_version())
95
return os.path.join(prefix, "include")
96
elif os.name == "os2":
97
return os.path.join(prefix, "Include")
99
raise DistutilsPlatformError(
100
"I don't know where Python installs its C header files "
101
"on platform '%s'" % os.name)
104
def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
105
"""Return the directory containing the Python library (standard or
108
If 'plat_specific' is true, return the directory containing
109
platform-specific modules, i.e. any module from a non-pure-Python
110
module distribution; otherwise, return the platform-shared library
111
directory. If 'standard_lib' is true, return the directory
112
containing standard Python library modules; otherwise, return the
113
directory for site-specific modules.
115
If 'prefix' is supplied, use it instead of sys.prefix or
116
sys.exec_prefix -- i.e., ignore 'plat_specific'.
119
prefix = plat_specific and EXEC_PREFIX or PREFIX
121
if os.name == "posix":
122
libpython = os.path.join(prefix,
123
"lib", "python" + get_python_version())
127
return os.path.join(libpython, "site-packages")
129
elif os.name == "nt":
131
return os.path.join(prefix, "Lib")
133
if get_python_version() < "2.2":
136
return os.path.join(prefix, "Lib", "site-packages")
138
elif os.name == "os2":
140
return os.path.join(prefix, "Lib")
142
return os.path.join(prefix, "Lib", "site-packages")
145
raise DistutilsPlatformError(
146
"I don't know where Python installs its library "
147
"on platform '%s'" % os.name)
151
def customize_compiler(compiler):
152
"""Do any platform-specific customization of a CCompiler instance.
154
Mainly needed on Unix, so we can plug in the information that
155
varies across Unices and is stored in Python's Makefile.
157
if compiler.compiler_type == "unix":
158
if sys.platform == "darwin":
159
# Perform first-time customization of compiler-related
160
# config vars on OS X now that we know we need a compiler.
161
# This is primarily to support Pythons from binary
162
# installers. The kind and paths to build tools on
163
# the user system may vary significantly from the system
164
# that Python itself was built on. Also the user OS
165
# version and build tools may not support the same set
166
# of CPU architectures for universal builds.
168
# Use get_config_var() to ensure _config_vars is initialized.
169
if not get_config_var('CUSTOMIZED_OSX_COMPILER'):
171
_osx_support.customize_compiler(_config_vars)
172
_config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True'
174
(cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \
175
get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
176
'CCSHARED', 'LDSHARED', 'SO', 'AR',
179
if 'CC' in os.environ:
180
newcc = os.environ['CC']
181
if (sys.platform == 'darwin'
182
and 'LDSHARED' not in os.environ
183
and ldshared.startswith(cc)):
184
# On OS X, if CC is overridden, use that as the default
185
# command for LDSHARED as well
186
ldshared = newcc + ldshared[len(cc):]
188
if 'CXX' in os.environ:
189
cxx = os.environ['CXX']
190
if 'LDSHARED' in os.environ:
191
ldshared = os.environ['LDSHARED']
192
if 'CPP' in os.environ:
193
cpp = os.environ['CPP']
195
cpp = cc + " -E" # not always
196
if 'LDFLAGS' in os.environ:
197
ldshared = ldshared + ' ' + os.environ['LDFLAGS']
198
if 'CFLAGS' in os.environ:
199
cflags = opt + ' ' + os.environ['CFLAGS']
200
ldshared = ldshared + ' ' + os.environ['CFLAGS']
201
if 'CPPFLAGS' in os.environ:
202
cpp = cpp + ' ' + os.environ['CPPFLAGS']
203
cflags = cflags + ' ' + os.environ['CPPFLAGS']
204
ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
205
if 'AR' in os.environ:
206
ar = os.environ['AR']
207
if 'ARFLAGS' in os.environ:
208
archiver = ar + ' ' + os.environ['ARFLAGS']
210
archiver = ar + ' ' + ar_flags
212
cc_cmd = cc + ' ' + cflags
213
compiler.set_executables(
216
compiler_so=cc_cmd + ' ' + ccshared,
222
compiler.shared_lib_extension = so_ext
225
def get_config_h_filename():
226
"""Return full pathname of installed pyconfig.h file."""
229
inc_dir = os.path.join(project_base, "PC")
231
inc_dir = project_base
233
inc_dir = get_python_inc(plat_specific=1)
234
if get_python_version() < '2.2':
235
config_h = 'config.h'
237
# The name of the config.h file changed in 2.2
238
config_h = 'pyconfig.h'
239
return os.path.join(inc_dir, config_h)
242
def get_makefile_filename():
243
"""Return full pathname of installed Makefile from the Python build."""
245
return os.path.join(project_base, "Makefile")
246
lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
247
return os.path.join(lib_dir, "config", "Makefile")
250
def parse_config_h(fp, g=None):
251
"""Parse a config.h-style file.
253
A dictionary containing name/value pairs is returned. If an
254
optional dictionary is passed in as the second argument, it is
255
used instead of a new dictionary.
259
define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
260
undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
266
m = define_rx.match(line)
270
except ValueError: pass
273
m = undef_rx.match(line)
279
# Regexes needed for parsing Makefile (and similar syntaxes,
280
# like old-style Setup files).
281
_variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
282
_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
283
_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
285
def parse_makefile(fn, g=None):
286
"""Parse a Makefile-style file.
288
A dictionary containing name/value pairs is returned. If an
289
optional dictionary is passed in as the second argument, it is
290
used instead of a new dictionary.
292
from distutils.text_file import TextFile
293
fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1)
302
if line is None: # eof
304
m = _variable_rx.match(line)
308
# `$$' is a literal `$' in make
309
tmpv = v.replace('$$', '')
318
done[n] = v.replace('$$', '$')
322
# do variable interpolation here
324
for name in notdone.keys():
325
value = notdone[name]
326
m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
333
# get it on a subsequent round
335
elif n in os.environ:
336
# do it like make: fall back to environment
341
after = value[m.end():]
342
value = value[:m.start()] + item + after
344
notdone[name] = value
346
try: value = int(value)
348
done[name] = value.strip()
353
# bogus variable reference; just drop it since we can't deal
358
# strip spurious spaces
359
for k, v in done.items():
360
if isinstance(v, str):
363
# save the results in the global dictionary
368
def expand_makefile_vars(s, vars):
369
"""Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in
370
'string' according to 'vars' (a dictionary mapping variable names to
371
values). Variables not present in 'vars' are silently expanded to the
372
empty string. The variable values in 'vars' should not contain further
373
variable expansions; if 'vars' is the output of 'parse_makefile()',
374
you're fine. Returns a variable-expanded version of 's'.
377
# This algorithm does multiple expansion, so if vars['foo'] contains
378
# "${bar}", it will expand ${foo} to ${bar}, and then expand
379
# ${bar}... and so forth. This is fine as long as 'vars' comes from
380
# 'parse_makefile()', which takes care of such expansions eagerly,
381
# according to make's variable expansion semantics.
384
m = _findvar1_rx.search(s) or _findvar2_rx.search(s)
386
(beg, end) = m.span()
387
s = s[0:beg] + vars.get(m.group(1)) + s[end:]
396
"""Initialize the module as appropriate for POSIX systems."""
397
# _sysconfigdata is generated at build time, see the sysconfig module
398
from _sysconfigdata import build_time_vars
401
_config_vars.update(build_time_vars)
405
"""Initialize the module as appropriate for NT"""
407
# set basic install directories
408
g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
409
g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
411
# XXX hmmm.. a normal install puts include files here
412
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
416
g['VERSION'] = get_python_version().replace(".", "")
417
g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
424
"""Initialize the module as appropriate for OS/2"""
426
# set basic install directories
427
g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
428
g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
430
# XXX hmmm.. a normal install puts include files here
431
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
440
def get_config_vars(*args):
441
"""With no arguments, return a dictionary of all configuration
442
variables relevant for the current platform. Generally this includes
443
everything needed to build extensions and install both pure modules and
444
extensions. On Unix, this means every variable defined in Python's
445
installed Makefile; on Windows and Mac OS it's a much smaller set.
447
With arguments, return a list of values that result from looking up
448
each argument in the configuration variable dictionary.
451
if _config_vars is None:
452
func = globals().get("_init_" + os.name)
458
# Normalized versions of prefix and exec_prefix are handy to have;
459
# in fact, these are the standard versions used most places in the
461
_config_vars['prefix'] = PREFIX
462
_config_vars['exec_prefix'] = EXEC_PREFIX
464
# OS X platforms require special customization to handle
465
# multi-architecture, multi-os-version installers
466
if sys.platform == 'darwin':
468
_osx_support.customize_config_vars(_config_vars)
473
vals.append(_config_vars.get(name))
478
def get_config_var(name):
479
"""Return the value of a single variable using the dictionary
480
returned by 'get_config_vars()'. Equivalent to
481
get_config_vars().get(name)
483
return get_config_vars().get(name)
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
8
Written by: Fred L. Drake, Jr.
9
Email: <fdrake@acm.org>
19
from distutils.errors import DistutilsPlatformError
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)
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))
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,
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,
40
# set for cross builds
41
if "_PYTHON_PROJECT_BASE" in os.environ:
42
# this is the build directory, at least for posix
43
project_base = os.path.normpath(os.environ["_PYTHON_PROJECT_BASE"])
45
# python_build: (Boolean) if true, we're either building Python or
46
# building an extension with an un-installed Python, so we use
47
# different (hard-wired) directories.
48
# Setup.local is available for Makefile builds including VPATH builds,
49
# Setup.dist is available on Windows
51
for fn in ("Setup.dist", "Setup.local"):
52
if os.path.isfile(os.path.join(project_base, "Modules", fn)):
55
python_build = _python_build()
58
def get_python_version():
59
"""Return a string containing the major and minor Python version,
60
leaving off the patchlevel. Sample return values could be '1.5'
63
return sys.version[:3]
66
def get_python_inc(plat_specific=0, prefix=None):
67
"""Return the directory containing installed Python header files.
69
If 'plat_specific' is false (the default), this is the path to the
70
non-platform-specific header files, i.e. Python.h and so on;
71
otherwise, this is the path to platform-specific header files
74
If 'prefix' is supplied, use it instead of sys.prefix or
75
sys.exec_prefix -- i.e., ignore 'plat_specific'.
78
prefix = plat_specific and EXEC_PREFIX or PREFIX
80
if os.name == "posix":
82
buildir = os.path.dirname(sys.executable)
84
# python.h is located in the buildir
87
# the source dir is relative to the buildir
88
srcdir = os.path.abspath(os.path.join(buildir,
89
get_config_var('srcdir')))
90
# Include is located in the srcdir
91
inc_dir = os.path.join(srcdir, "Include")
93
return os.path.join(prefix, "include", "python" + get_python_version())
95
return os.path.join(prefix, "include")
96
elif os.name == "os2":
97
return os.path.join(prefix, "Include")
99
raise DistutilsPlatformError(
100
"I don't know where Python installs its C header files "
101
"on platform '%s'" % os.name)
104
def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
105
"""Return the directory containing the Python library (standard or
108
If 'plat_specific' is true, return the directory containing
109
platform-specific modules, i.e. any module from a non-pure-Python
110
module distribution; otherwise, return the platform-shared library
111
directory. If 'standard_lib' is true, return the directory
112
containing standard Python library modules; otherwise, return the
113
directory for site-specific modules.
115
If 'prefix' is supplied, use it instead of sys.prefix or
116
sys.exec_prefix -- i.e., ignore 'plat_specific'.
119
prefix = plat_specific and EXEC_PREFIX or PREFIX
121
if os.name == "posix":
122
libpython = os.path.join(prefix,
123
"lib", "python" + get_python_version())
127
return os.path.join(libpython, "site-packages")
129
elif os.name == "nt":
131
return os.path.join(prefix, "Lib")
133
if get_python_version() < "2.2":
136
return os.path.join(prefix, "Lib", "site-packages")
138
elif os.name == "os2":
140
return os.path.join(prefix, "Lib")
142
return os.path.join(prefix, "Lib", "site-packages")
145
raise DistutilsPlatformError(
146
"I don't know where Python installs its library "
147
"on platform '%s'" % os.name)
151
def customize_compiler(compiler):
152
"""Do any platform-specific customization of a CCompiler instance.
154
Mainly needed on Unix, so we can plug in the information that
155
varies across Unices and is stored in Python's Makefile.
157
if compiler.compiler_type == "unix":
158
if sys.platform == "darwin":
159
# Perform first-time customization of compiler-related
160
# config vars on OS X now that we know we need a compiler.
161
# This is primarily to support Pythons from binary
162
# installers. The kind and paths to build tools on
163
# the user system may vary significantly from the system
164
# that Python itself was built on. Also the user OS
165
# version and build tools may not support the same set
166
# of CPU architectures for universal builds.
168
# Use get_config_var() to ensure _config_vars is initialized.
169
if not get_config_var('CUSTOMIZED_OSX_COMPILER'):
171
_osx_support.customize_compiler(_config_vars)
172
_config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True'
174
(cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \
175
get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
176
'CCSHARED', 'LDSHARED', 'SO', 'AR',
179
if 'CC' in os.environ:
180
newcc = os.environ['CC']
181
if (sys.platform == 'darwin'
182
and 'LDSHARED' not in os.environ
183
and ldshared.startswith(cc)):
184
# On OS X, if CC is overridden, use that as the default
185
# command for LDSHARED as well
186
ldshared = newcc + ldshared[len(cc):]
188
if 'CXX' in os.environ:
189
cxx = os.environ['CXX']
190
if 'LDSHARED' in os.environ:
191
ldshared = os.environ['LDSHARED']
192
if 'CPP' in os.environ:
193
cpp = os.environ['CPP']
195
cpp = cc + " -E" # not always
196
if 'LDFLAGS' in os.environ:
197
ldshared = ldshared + ' ' + os.environ['LDFLAGS']
198
if 'CFLAGS' in os.environ:
199
cflags = opt + ' ' + os.environ['CFLAGS']
200
ldshared = ldshared + ' ' + os.environ['CFLAGS']
201
if 'CPPFLAGS' in os.environ:
202
cpp = cpp + ' ' + os.environ['CPPFLAGS']
203
cflags = cflags + ' ' + os.environ['CPPFLAGS']
204
ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
205
if 'AR' in os.environ:
206
ar = os.environ['AR']
207
if 'ARFLAGS' in os.environ:
208
archiver = ar + ' ' + os.environ['ARFLAGS']
210
archiver = ar + ' ' + ar_flags
212
cc_cmd = cc + ' ' + cflags
213
compiler.set_executables(
216
compiler_so=cc_cmd + ' ' + ccshared,
222
compiler.shared_lib_extension = so_ext
225
def get_config_h_filename():
226
"""Return full pathname of installed pyconfig.h file."""
229
inc_dir = os.path.join(project_base, "PC")
231
inc_dir = project_base
233
inc_dir = get_python_inc(plat_specific=1)
234
if get_python_version() < '2.2':
235
config_h = 'config.h'
237
# The name of the config.h file changed in 2.2
238
config_h = 'pyconfig.h'
239
return os.path.join(inc_dir, config_h)
242
def get_makefile_filename():
243
"""Return full pathname of installed Makefile from the Python build."""
245
return os.path.join(project_base, "Makefile")
246
lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
247
return os.path.join(lib_dir, "config", "Makefile")
250
def parse_config_h(fp, g=None):
251
"""Parse a config.h-style file.
253
A dictionary containing name/value pairs is returned. If an
254
optional dictionary is passed in as the second argument, it is
255
used instead of a new dictionary.
259
define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
260
undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
266
m = define_rx.match(line)
270
except ValueError: pass
273
m = undef_rx.match(line)
279
# Regexes needed for parsing Makefile (and similar syntaxes,
280
# like old-style Setup files).
281
_variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
282
_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
283
_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
285
def parse_makefile(fn, g=None):
286
"""Parse a Makefile-style file.
288
A dictionary containing name/value pairs is returned. If an
289
optional dictionary is passed in as the second argument, it is
290
used instead of a new dictionary.
292
from distutils.text_file import TextFile
293
fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1)
302
if line is None: # eof
304
m = _variable_rx.match(line)
308
# `$$' is a literal `$' in make
309
tmpv = v.replace('$$', '')
318
done[n] = v.replace('$$', '$')
322
# do variable interpolation here
324
for name in notdone.keys():
325
value = notdone[name]
326
m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
333
# get it on a subsequent round
335
elif n in os.environ:
336
# do it like make: fall back to environment
341
after = value[m.end():]
342
value = value[:m.start()] + item + after
344
notdone[name] = value
346
try: value = int(value)
348
done[name] = value.strip()
353
# bogus variable reference; just drop it since we can't deal
358
# strip spurious spaces
359
for k, v in done.items():
360
if isinstance(v, str):
363
# save the results in the global dictionary
368
def expand_makefile_vars(s, vars):
369
"""Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in
370
'string' according to 'vars' (a dictionary mapping variable names to
371
values). Variables not present in 'vars' are silently expanded to the
372
empty string. The variable values in 'vars' should not contain further
373
variable expansions; if 'vars' is the output of 'parse_makefile()',
374
you're fine. Returns a variable-expanded version of 's'.
377
# This algorithm does multiple expansion, so if vars['foo'] contains
378
# "${bar}", it will expand ${foo} to ${bar}, and then expand
379
# ${bar}... and so forth. This is fine as long as 'vars' comes from
380
# 'parse_makefile()', which takes care of such expansions eagerly,
381
# according to make's variable expansion semantics.
384
m = _findvar1_rx.search(s) or _findvar2_rx.search(s)
386
(beg, end) = m.span()
387
s = s[0:beg] + vars.get(m.group(1)) + s[end:]
396
"""Initialize the module as appropriate for POSIX systems."""
397
# _sysconfigdata is generated at build time, see the sysconfig module
398
from _sysconfigdata import build_time_vars
401
_config_vars.update(build_time_vars)
405
"""Initialize the module as appropriate for NT"""
407
# set basic install directories
408
g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
409
g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
411
# XXX hmmm.. a normal install puts include files here
412
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
416
g['VERSION'] = get_python_version().replace(".", "")
417
g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
424
"""Initialize the module as appropriate for OS/2"""
426
# set basic install directories
427
g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
428
g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
430
# XXX hmmm.. a normal install puts include files here
431
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
440
def get_config_vars(*args):
441
"""With no arguments, return a dictionary of all configuration
442
variables relevant for the current platform. Generally this includes
443
everything needed to build extensions and install both pure modules and
444
extensions. On Unix, this means every variable defined in Python's
445
installed Makefile; on Windows and Mac OS it's a much smaller set.
447
With arguments, return a list of values that result from looking up
448
each argument in the configuration variable dictionary.
451
if _config_vars is None:
452
func = globals().get("_init_" + os.name)
458
# Normalized versions of prefix and exec_prefix are handy to have;
459
# in fact, these are the standard versions used most places in the
461
_config_vars['prefix'] = PREFIX
462
_config_vars['exec_prefix'] = EXEC_PREFIX
464
# OS X platforms require special customization to handle
465
# multi-architecture, multi-os-version installers
466
if sys.platform == 'darwin':
468
_osx_support.customize_config_vars(_config_vars)
473
vals.append(_config_vars.get(name))
478
def get_config_var(name):
479
"""Return the value of a single variable using the dictionary
480
returned by 'get_config_vars()'. Equivalent to
481
get_config_vars().get(name)
483
return get_config_vars().get(name)