blob: 558ff2938e5ad01d30396dc2061c8c706c3e3a5a [file] [log] [blame]
Fred Drake70b014d2001-07-18 18:39:56 +00001"""Provide access to Python's configuration information. The specific
2configuration variables available depend heavily on the platform and
3configuration. The values may be retrieved using
4get_config_var(name), and the list of variables is available via
5get_config_vars().keys(). Additional convenience functions are also
6available.
Greg Ward1190ee31998-12-18 23:46:33 +00007
8Written by: Fred L. Drake, Jr.
9Email: <fdrake@acm.org>
10Initial date: 17-Dec-1998
11"""
12
Greg Ward82d71ca2000-06-03 00:44:30 +000013__revision__ = "$Id$"
Greg Ward1190ee31998-12-18 23:46:33 +000014
Greg Ward9ddaaa11999-01-06 14:46:06 +000015import os
16import re
17import string
18import sys
Greg Ward1190ee31998-12-18 23:46:33 +000019
Fred Drakec1ee39a2000-03-09 15:54:52 +000020from errors import DistutilsPlatformError
Greg Warda0ca3f22000-02-02 00:05:14 +000021
Greg Ward879f0f12000-09-15 01:15:08 +000022# These are needed in a couple of spots, so just compute them once.
Greg Wardcf6bea32000-04-10 01:15:06 +000023PREFIX = os.path.normpath(sys.prefix)
24EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
Fred Drakec1ee39a2000-03-09 15:54:52 +000025
Andrew M. Kuchlingc14fa302001-01-17 15:16:52 +000026# Boolean; if it's true, we're still building Python, so
27# we use different (hard-wired) directories.
28
29python_build = 0
30
31def set_python_build():
Fred Drakec916cdc2001-08-02 20:03:12 +000032 """Set the python_build flag to true.
33
34 This means that we're building Python itself. Only called from
35 the setup.py script shipped with Python.
Andrew M. Kuchlingc14fa302001-01-17 15:16:52 +000036 """
Andrew M. Kuchlingc14fa302001-01-17 15:16:52 +000037 global python_build
38 python_build = 1
Fred Drakec1ee39a2000-03-09 15:54:52 +000039
Fred Drakec916cdc2001-08-02 20:03:12 +000040
Greg Wardd38e6f72000-04-10 01:17:49 +000041def get_python_inc(plat_specific=0, prefix=None):
Greg Ward7d73b9e2000-03-09 03:16:05 +000042 """Return the directory containing installed Python header files.
Fred Drakec1ee39a2000-03-09 15:54:52 +000043
44 If 'plat_specific' is false (the default), this is the path to the
45 non-platform-specific header files, i.e. Python.h and so on;
46 otherwise, this is the path to platform-specific header files
Martin v. Löwis4f1cd8b2001-07-26 13:41:06 +000047 (namely pyconfig.h).
Fred Drakec1ee39a2000-03-09 15:54:52 +000048
Greg Wardd38e6f72000-04-10 01:17:49 +000049 If 'prefix' is supplied, use it instead of sys.prefix or
50 sys.exec_prefix -- i.e., ignore 'plat_specific'.
Fred Drakec1ee39a2000-03-09 15:54:52 +000051 """
Greg Wardd38e6f72000-04-10 01:17:49 +000052 if prefix is None:
Fred Drake70b014d2001-07-18 18:39:56 +000053 prefix = plat_specific and EXEC_PREFIX or PREFIX
Greg Ward7d73b9e2000-03-09 03:16:05 +000054 if os.name == "posix":
Andrew M. Kuchlingc14fa302001-01-17 15:16:52 +000055 if python_build:
56 return "Include/"
Greg Wardcf6bea32000-04-10 01:15:06 +000057 return os.path.join(prefix, "include", "python" + sys.version[:3])
Greg Ward7d73b9e2000-03-09 03:16:05 +000058 elif os.name == "nt":
Fred Drakec916cdc2001-08-02 20:03:12 +000059 return os.path.join(prefix, "include")
Greg Ward7d73b9e2000-03-09 03:16:05 +000060 elif os.name == "mac":
Greg Wardcf6bea32000-04-10 01:15:06 +000061 return os.path.join(prefix, "Include")
Greg Ward7d73b9e2000-03-09 03:16:05 +000062 else:
Fred Drake70b014d2001-07-18 18:39:56 +000063 raise DistutilsPlatformError(
64 "I don't know where Python installs its C header files "
65 "on platform '%s'" % os.name)
Greg Ward7d73b9e2000-03-09 03:16:05 +000066
67
Greg Wardd38e6f72000-04-10 01:17:49 +000068def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
Greg Ward7d73b9e2000-03-09 03:16:05 +000069 """Return the directory containing the Python library (standard or
Fred Drakec1ee39a2000-03-09 15:54:52 +000070 site additions).
Greg Ward7d73b9e2000-03-09 03:16:05 +000071
Fred Drakec1ee39a2000-03-09 15:54:52 +000072 If 'plat_specific' is true, return the directory containing
73 platform-specific modules, i.e. any module from a non-pure-Python
74 module distribution; otherwise, return the platform-shared library
75 directory. If 'standard_lib' is true, return the directory
76 containing standard Python library modules; otherwise, return the
77 directory for site-specific modules.
78
Greg Wardd38e6f72000-04-10 01:17:49 +000079 If 'prefix' is supplied, use it instead of sys.prefix or
80 sys.exec_prefix -- i.e., ignore 'plat_specific'.
Fred Drakec1ee39a2000-03-09 15:54:52 +000081 """
Greg Wardd38e6f72000-04-10 01:17:49 +000082 if prefix is None:
Fred Drake70b014d2001-07-18 18:39:56 +000083 prefix = plat_specific and EXEC_PREFIX or PREFIX
Fred Drakec916cdc2001-08-02 20:03:12 +000084
Greg Ward7d73b9e2000-03-09 03:16:05 +000085 if os.name == "posix":
Greg Wardcf6bea32000-04-10 01:15:06 +000086 libpython = os.path.join(prefix,
Fred Drakec1ee39a2000-03-09 15:54:52 +000087 "lib", "python" + sys.version[:3])
Greg Ward7d73b9e2000-03-09 03:16:05 +000088 if standard_lib:
89 return libpython
90 else:
Fred Drakec1ee39a2000-03-09 15:54:52 +000091 return os.path.join(libpython, "site-packages")
Greg Ward7d73b9e2000-03-09 03:16:05 +000092
93 elif os.name == "nt":
94 if standard_lib:
Fred Drakec916cdc2001-08-02 20:03:12 +000095 return os.path.join(prefix, "Lib")
Greg Ward7d73b9e2000-03-09 03:16:05 +000096 else:
Greg Wardf17efb92001-08-23 20:53:27 +000097 if sys.version < "2.2":
98 return prefix
99 else:
100 return os.path.join(PREFIX, "Lib", "site-packages")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000101
102 elif os.name == "mac":
Greg Warddc9fe8a2000-08-02 01:49:40 +0000103 if plat_specific:
Greg Ward7d73b9e2000-03-09 03:16:05 +0000104 if standard_lib:
Fred Drakec916cdc2001-08-02 20:03:12 +0000105 return os.path.join(prefix, "Mac", "Plugins")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000106 else:
Fred Drake70b014d2001-07-18 18:39:56 +0000107 raise DistutilsPlatformError(
108 "OK, where DO site-specific extensions go on the Mac?")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000109 else:
110 if standard_lib:
Fred Drakec916cdc2001-08-02 20:03:12 +0000111 return os.path.join(prefix, "Lib")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000112 else:
Fred Drake70b014d2001-07-18 18:39:56 +0000113 raise DistutilsPlatformError(
114 "OK, where DO site-specific modules go on the Mac?")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000115 else:
Fred Drake70b014d2001-07-18 18:39:56 +0000116 raise DistutilsPlatformError(
117 "I don't know where Python installs its library "
118 "on platform '%s'" % os.name)
Greg Ward7d73b9e2000-03-09 03:16:05 +0000119
Greg Ward7d73b9e2000-03-09 03:16:05 +0000120
Fred Drake70b014d2001-07-18 18:39:56 +0000121def customize_compiler(compiler):
Fred Drakec916cdc2001-08-02 20:03:12 +0000122 """Do any platform-specific customization of a CCompiler instance.
123
124 Mainly needed on Unix, so we can plug in the information that
125 varies across Unices and is stored in Python's Makefile.
Greg Wardbb7baa72000-06-25 02:09:14 +0000126 """
127 if compiler.compiler_type == "unix":
Greg Ward879f0f12000-09-15 01:15:08 +0000128 (cc, opt, ccshared, ldshared, so_ext) = \
129 get_config_vars('CC', 'OPT', 'CCSHARED', 'LDSHARED', 'SO')
Greg Wardbb7baa72000-06-25 02:09:14 +0000130
Greg Ward879f0f12000-09-15 01:15:08 +0000131 cc_cmd = cc + ' ' + opt
132 compiler.set_executables(
133 preprocessor=cc + " -E", # not always!
134 compiler=cc_cmd,
135 compiler_so=cc_cmd + ' ' + ccshared,
136 linker_so=ldshared,
137 linker_exe=cc)
138
139 compiler.shared_lib_extension = so_ext
Greg Wardbb7baa72000-06-25 02:09:14 +0000140
141
Greg Ward9ddaaa11999-01-06 14:46:06 +0000142def get_config_h_filename():
Martin v. Löwis4f1cd8b2001-07-26 13:41:06 +0000143 """Return full pathname of installed pyconfig.h file."""
Fred Drakec916cdc2001-08-02 20:03:12 +0000144 if python_build:
145 inc_dir = os.curdir
146 else:
147 inc_dir = get_python_inc(plat_specific=1)
Marc-André Lemburg7cf92fa2001-07-26 18:06:58 +0000148 if sys.version < '2.2':
149 config_h = 'config.h'
150 else:
151 # The name of the config.h file changed in 2.2
152 config_h = 'pyconfig.h'
153 return os.path.join(inc_dir, config_h)
Greg Ward7d73b9e2000-03-09 03:16:05 +0000154
Greg Ward1190ee31998-12-18 23:46:33 +0000155
Greg Ward9ddaaa11999-01-06 14:46:06 +0000156def get_makefile_filename():
Fred Drake522af3a1999-01-06 16:28:34 +0000157 """Return full pathname of installed Makefile from the Python build."""
Andrew M. Kuchlingc14fa302001-01-17 15:16:52 +0000158 if python_build:
Neil Schemenauer84d14ba2001-01-24 17:17:20 +0000159 return './Makefile'
Fred Drakec1ee39a2000-03-09 15:54:52 +0000160 lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
161 return os.path.join(lib_dir, "config", "Makefile")
Greg Ward7d73b9e2000-03-09 03:16:05 +0000162
Greg Ward1190ee31998-12-18 23:46:33 +0000163
Greg Ward9ddaaa11999-01-06 14:46:06 +0000164def parse_config_h(fp, g=None):
Fred Drakec1ee39a2000-03-09 15:54:52 +0000165 """Parse a config.h-style file.
166
167 A dictionary containing name/value pairs is returned. If an
168 optional dictionary is passed in as the second argument, it is
169 used instead of a new dictionary.
Fred Drake522af3a1999-01-06 16:28:34 +0000170 """
Greg Ward9ddaaa11999-01-06 14:46:06 +0000171 if g is None:
172 g = {}
Greg Ward1190ee31998-12-18 23:46:33 +0000173 define_rx = re.compile("#define ([A-Z][A-Z0-9_]+) (.*)\n")
174 undef_rx = re.compile("/[*] #undef ([A-Z][A-Z0-9_]+) [*]/\n")
Greg Ward9ddaaa11999-01-06 14:46:06 +0000175 #
Greg Ward1190ee31998-12-18 23:46:33 +0000176 while 1:
177 line = fp.readline()
178 if not line:
179 break
180 m = define_rx.match(line)
181 if m:
182 n, v = m.group(1, 2)
Greg Ward3c8e54b1998-12-22 12:42:04 +0000183 try: v = string.atoi(v)
184 except ValueError: pass
185 g[n] = v
Greg Ward1190ee31998-12-18 23:46:33 +0000186 else:
187 m = undef_rx.match(line)
188 if m:
189 g[m.group(1)] = 0
Greg Ward9ddaaa11999-01-06 14:46:06 +0000190 return g
Greg Ward1190ee31998-12-18 23:46:33 +0000191
Greg Wardd283ce72000-09-17 00:53:02 +0000192
193# Regexes needed for parsing Makefile (and similar syntaxes,
194# like old-style Setup files).
195_variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
196_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
197_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
198
Greg Ward3fff8d22000-09-15 00:03:13 +0000199def parse_makefile(fn, g=None):
Fred Drakec1ee39a2000-03-09 15:54:52 +0000200 """Parse a Makefile-style file.
201
202 A dictionary containing name/value pairs is returned. If an
203 optional dictionary is passed in as the second argument, it is
204 used instead of a new dictionary.
Fred Drake522af3a1999-01-06 16:28:34 +0000205 """
Greg Ward3fff8d22000-09-15 00:03:13 +0000206 from distutils.text_file import TextFile
Greg Wardd283ce72000-09-17 00:53:02 +0000207 fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1)
Greg Ward3fff8d22000-09-15 00:03:13 +0000208
Greg Ward9ddaaa11999-01-06 14:46:06 +0000209 if g is None:
210 g = {}
Greg Ward1190ee31998-12-18 23:46:33 +0000211 done = {}
212 notdone = {}
Greg Ward3fff8d22000-09-15 00:03:13 +0000213
Greg Ward1190ee31998-12-18 23:46:33 +0000214 while 1:
215 line = fp.readline()
Greg Wardd283ce72000-09-17 00:53:02 +0000216 if line is None: # eof
Greg Ward1190ee31998-12-18 23:46:33 +0000217 break
Greg Wardd283ce72000-09-17 00:53:02 +0000218 m = _variable_rx.match(line)
Greg Ward1190ee31998-12-18 23:46:33 +0000219 if m:
220 n, v = m.group(1, 2)
Greg Ward3c8e54b1998-12-22 12:42:04 +0000221 v = string.strip(v)
Greg Ward1190ee31998-12-18 23:46:33 +0000222 if "$" in v:
223 notdone[n] = v
224 else:
Greg Ward3c8e54b1998-12-22 12:42:04 +0000225 try: v = string.atoi(v)
226 except ValueError: pass
Greg Ward1190ee31998-12-18 23:46:33 +0000227 done[n] = v
228
229 # do variable interpolation here
Greg Ward1190ee31998-12-18 23:46:33 +0000230 while notdone:
231 for name in notdone.keys():
232 value = notdone[name]
Greg Wardd283ce72000-09-17 00:53:02 +0000233 m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
Greg Ward1190ee31998-12-18 23:46:33 +0000234 if m:
235 n = m.group(1)
236 if done.has_key(n):
237 after = value[m.end():]
Andrew M. Kuchlingb11bd032001-01-16 16:33:28 +0000238 value = value[:m.start()] + str(done[n]) + after
Greg Ward1190ee31998-12-18 23:46:33 +0000239 if "$" in after:
240 notdone[name] = value
241 else:
Greg Ward3c8e54b1998-12-22 12:42:04 +0000242 try: value = string.atoi(value)
Andrew M. Kuchlingb11bd032001-01-16 16:33:28 +0000243 except ValueError:
244 done[name] = string.strip(value)
245 else:
246 done[name] = value
Greg Ward1190ee31998-12-18 23:46:33 +0000247 del notdone[name]
248 elif notdone.has_key(n):
249 # get it on a subsequent round
250 pass
251 else:
252 done[n] = ""
253 after = value[m.end():]
254 value = value[:m.start()] + after
255 if "$" in after:
256 notdone[name] = value
257 else:
Greg Ward3c8e54b1998-12-22 12:42:04 +0000258 try: value = string.atoi(value)
Andrew M. Kuchlingb11bd032001-01-16 16:33:28 +0000259 except ValueError:
260 done[name] = string.strip(value)
261 else:
262 done[name] = value
Greg Ward1190ee31998-12-18 23:46:33 +0000263 del notdone[name]
264 else:
Greg Ward3c8e54b1998-12-22 12:42:04 +0000265 # bogus variable reference; just drop it since we can't deal
Greg Ward1190ee31998-12-18 23:46:33 +0000266 del notdone[name]
267
Greg Wardd283ce72000-09-17 00:53:02 +0000268 fp.close()
269
Greg Ward1190ee31998-12-18 23:46:33 +0000270 # save the results in the global dictionary
271 g.update(done)
Greg Ward9ddaaa11999-01-06 14:46:06 +0000272 return g
Greg Ward1190ee31998-12-18 23:46:33 +0000273
274
Greg Wardd283ce72000-09-17 00:53:02 +0000275def expand_makefile_vars(s, vars):
276 """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in
277 'string' according to 'vars' (a dictionary mapping variable names to
278 values). Variables not present in 'vars' are silently expanded to the
279 empty string. The variable values in 'vars' should not contain further
280 variable expansions; if 'vars' is the output of 'parse_makefile()',
281 you're fine. Returns a variable-expanded version of 's'.
282 """
283
284 # This algorithm does multiple expansion, so if vars['foo'] contains
285 # "${bar}", it will expand ${foo} to ${bar}, and then expand
286 # ${bar}... and so forth. This is fine as long as 'vars' comes from
287 # 'parse_makefile()', which takes care of such expansions eagerly,
288 # according to make's variable expansion semantics.
289
290 while 1:
291 m = _findvar1_rx.search(s) or _findvar2_rx.search(s)
292 if m:
293 name = m.group(1)
294 (beg, end) = m.span()
295 s = s[0:beg] + vars.get(m.group(1)) + s[end:]
296 else:
297 break
298 return s
299
300
Greg Ward879f0f12000-09-15 01:15:08 +0000301_config_vars = None
302
Greg Ward9ddaaa11999-01-06 14:46:06 +0000303def _init_posix():
Fred Drake522af3a1999-01-06 16:28:34 +0000304 """Initialize the module as appropriate for POSIX systems."""
Greg Ward879f0f12000-09-15 01:15:08 +0000305 g = {}
Greg Warda0ca3f22000-02-02 00:05:14 +0000306 # load the installed Makefile:
Greg Warda570c052000-05-23 23:14:00 +0000307 try:
308 filename = get_makefile_filename()
Greg Ward3fff8d22000-09-15 00:03:13 +0000309 parse_makefile(filename, g)
Greg Warda570c052000-05-23 23:14:00 +0000310 except IOError, msg:
311 my_msg = "invalid Python installation: unable to open %s" % filename
312 if hasattr(msg, "strerror"):
313 my_msg = my_msg + " (%s)" % msg.strerror
314
Fred Drake70b014d2001-07-18 18:39:56 +0000315 raise DistutilsPlatformError(my_msg)
Fred Drakec916cdc2001-08-02 20:03:12 +0000316
317
Greg Ward4f880282000-06-27 01:59:06 +0000318 # On AIX, there are wrong paths to the linker scripts in the Makefile
319 # -- these paths are relative to the Python source, but when installed
320 # the scripts are in another directory.
Neil Schemenauer1a020862001-02-16 03:31:13 +0000321 if python_build:
Andrew M. Kuchling63357732001-02-28 19:40:27 +0000322 g['LDSHARED'] = g['BLDSHARED']
Greg Ward879f0f12000-09-15 01:15:08 +0000323
324 global _config_vars
325 _config_vars = g
Greg Ward66e966f2000-09-01 01:23:26 +0000326
Greg Ward9ddaaa11999-01-06 14:46:06 +0000327
Greg Ward4d74d731999-06-08 01:58:36 +0000328def _init_nt():
329 """Initialize the module as appropriate for NT"""
Greg Ward879f0f12000-09-15 01:15:08 +0000330 g = {}
Greg Ward4d74d731999-06-08 01:58:36 +0000331 # set basic install directories
Fred Drakec1ee39a2000-03-09 15:54:52 +0000332 g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
333 g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
Greg Ward4d74d731999-06-08 01:58:36 +0000334
Greg Ward32162e81999-08-29 18:22:13 +0000335 # XXX hmmm.. a normal install puts include files here
Fred Drakec1ee39a2000-03-09 15:54:52 +0000336 g['INCLUDEPY'] = get_python_inc(plat_specific=0)
Greg Ward32162e81999-08-29 18:22:13 +0000337
Fred Drake69e2c6e2000-02-08 15:55:42 +0000338 g['SO'] = '.pyd'
Greg Ward82d71ca2000-06-03 00:44:30 +0000339 g['EXE'] = ".exe"
Greg Ward879f0f12000-09-15 01:15:08 +0000340
341 global _config_vars
342 _config_vars = g
Greg Ward82d71ca2000-06-03 00:44:30 +0000343
Fred Drake69e2c6e2000-02-08 15:55:42 +0000344
Greg Ward0eff87a2000-03-07 03:30:09 +0000345def _init_mac():
346 """Initialize the module as appropriate for Macintosh systems"""
Greg Ward879f0f12000-09-15 01:15:08 +0000347 g = {}
Greg Ward0eff87a2000-03-07 03:30:09 +0000348 # set basic install directories
Fred Drakec1ee39a2000-03-09 15:54:52 +0000349 g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1)
350 g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1)
Greg Ward0eff87a2000-03-07 03:30:09 +0000351
352 # XXX hmmm.. a normal install puts include files here
Fred Drakec1ee39a2000-03-09 15:54:52 +0000353 g['INCLUDEPY'] = get_python_inc(plat_specific=0)
Greg Ward0eff87a2000-03-07 03:30:09 +0000354
Jack Jansendd13a202001-05-17 12:52:01 +0000355 import MacOS
356 if not hasattr(MacOS, 'runtimemodel'):
Guido van Rossum99f9baa2001-05-17 15:03:14 +0000357 g['SO'] = '.ppc.slb'
Jack Jansendd13a202001-05-17 12:52:01 +0000358 else:
359 g['SO'] = '.%s.slb' % MacOS.runtimemodel
Greg Ward7d73b9e2000-03-09 03:16:05 +0000360
361 # XXX are these used anywhere?
Greg Wardcf6bea32000-04-10 01:15:06 +0000362 g['install_lib'] = os.path.join(EXEC_PREFIX, "Lib")
363 g['install_platlib'] = os.path.join(EXEC_PREFIX, "Mac", "Lib")
Greg Ward0eff87a2000-03-07 03:30:09 +0000364
Greg Ward879f0f12000-09-15 01:15:08 +0000365 global _config_vars
366 _config_vars = g
Greg Ward9ddaaa11999-01-06 14:46:06 +0000367
Fred Drake69e2c6e2000-02-08 15:55:42 +0000368
Greg Ward879f0f12000-09-15 01:15:08 +0000369def get_config_vars(*args):
370 """With no arguments, return a dictionary of all configuration
371 variables relevant for the current platform. Generally this includes
372 everything needed to build extensions and install both pure modules and
373 extensions. On Unix, this means every variable defined in Python's
374 installed Makefile; on Windows and Mac OS it's a much smaller set.
375
376 With arguments, return a list of values that result from looking up
377 each argument in the configuration variable dictionary.
378 """
379 global _config_vars
380 if _config_vars is None:
Greg Ward879f0f12000-09-15 01:15:08 +0000381 func = globals().get("_init_" + os.name)
382 if func:
383 func()
384 else:
385 _config_vars = {}
386
387 # Normalized versions of prefix and exec_prefix are handy to have;
388 # in fact, these are the standard versions used most places in the
389 # Distutils.
390 _config_vars['prefix'] = PREFIX
391 _config_vars['exec_prefix'] = EXEC_PREFIX
392
393 if args:
394 vals = []
395 for name in args:
396 vals.append(_config_vars.get(name))
397 return vals
398 else:
399 return _config_vars
400
401def get_config_var(name):
402 """Return the value of a single variable using the dictionary
403 returned by 'get_config_vars()'. Equivalent to
Fred Drakec916cdc2001-08-02 20:03:12 +0000404 get_config_vars().get(name)
Greg Ward879f0f12000-09-15 01:15:08 +0000405 """
406 return get_config_vars().get(name)