blob: 407cabda4607823ba54ea25eecfc0ee63c6f6473 [file] [log] [blame]
Greg Ward3f81cf71999-07-10 02:03:53 +00001"""distutils.ccompiler
2
3Contains CCompiler, an abstract base class that defines the interface
4for the Distutils compiler abstraction model."""
5
Greg Ward3ce77fd2000-03-02 01:49:45 +00006__revision__ = "$Id$"
Greg Ward3f81cf71999-07-10 02:03:53 +00007
Tarek Ziadé88e2c5d2009-12-21 01:49:00 +00008import sys
9import os
10import re
11
12from distutils.errors import CompileError, LinkError, UnknownFileError
Greg Warde1aaaa61999-08-14 23:50:50 +000013from distutils.spawn import spawn
Greg Warde5c62bf2000-06-25 02:08:18 +000014from distutils.file_util import move_file
15from distutils.dir_util import mkpath
16from distutils.dep_util import newer_pairwise, newer_group
Greg Ward9dddbb42000-08-02 01:38:20 +000017from distutils.util import split_quoted, execute
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +000018from distutils import log
Greg Ward3f81cf71999-07-10 02:03:53 +000019
20class CCompiler:
21 """Abstract base class to define the interface that must be implemented
Greg Wardc3a43b42000-06-24 18:10:48 +000022 by real compiler classes. Also has some utility methods used by
23 several compiler classes.
Greg Ward3f81cf71999-07-10 02:03:53 +000024
Greg Wardc3a43b42000-06-24 18:10:48 +000025 The basic idea behind a compiler abstraction class is that each
26 instance can be used for all the compile/link steps in building a
27 single project. Thus, attributes common to all of those compile and
28 link steps -- include directories, macros to define, libraries to link
29 against, etc. -- are attributes of the compiler instance. To allow for
30 variability in how individual files are treated, most of those
31 attributes may be varied on a per-compilation or per-link basis.
32 """
Greg Ward3f81cf71999-07-10 02:03:53 +000033
Greg Ward802d6b71999-09-29 12:20:55 +000034 # 'compiler_type' is a class attribute that identifies this class. It
35 # keeps code that wants to know what kind of compiler it's dealing with
36 # from having to import all possible compiler classes just to do an
37 # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type'
38 # should really, really be one of the keys of the 'compiler_class'
39 # dictionary (see below -- used by the 'new_compiler()' factory
40 # function) -- authors of new compiler interface classes are
41 # responsible for updating 'compiler_class'!
42 compiler_type = None
Greg Ward3f81cf71999-07-10 02:03:53 +000043
44 # XXX things not handled by this compiler abstraction model:
45 # * client can't provide additional options for a compiler,
46 # e.g. warning, optimization, debugging flags. Perhaps this
47 # should be the domain of concrete compiler abstraction classes
48 # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base
49 # class should have methods for the common ones.
Greg Ward3f81cf71999-07-10 02:03:53 +000050 # * can't completely override the include or library searchg
51 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
Greg Warde1aaaa61999-08-14 23:50:50 +000052 # I'm not sure how widely supported this is even by Unix
Greg Ward3f81cf71999-07-10 02:03:53 +000053 # compilers, much less on other platforms. And I'm even less
Greg Warde1aaaa61999-08-14 23:50:50 +000054 # sure how useful it is; maybe for cross-compiling, but
55 # support for that is a ways off. (And anyways, cross
56 # compilers probably have a dedicated binary with the
57 # right paths compiled in. I hope.)
Greg Ward3f81cf71999-07-10 02:03:53 +000058 # * can't do really freaky things with the library list/library
59 # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against
60 # different versions of libfoo.a in different locations. I
61 # think this is useless without the ability to null out the
62 # library search path anyways.
Fred Drakeb94b8492001-12-06 20:51:35 +000063
Greg Ward3f81cf71999-07-10 02:03:53 +000064
Greg Ward32c4a8a2000-03-06 03:40:29 +000065 # Subclasses that rely on the standard filename generation methods
66 # implemented below should override these; see the comment near
67 # those methods ('object_filenames()' et. al.) for details:
68 src_extensions = None # list of strings
69 obj_extension = None # string
70 static_lib_extension = None
71 shared_lib_extension = None # string
72 static_lib_format = None # format string
73 shared_lib_format = None # prob. same as static_lib_format
74 exe_extension = None # string
75
Gustavo Niemeyer6b016852002-11-05 16:12:02 +000076 # Default language settings. language_map is used to detect a source
77 # file or Extension target language, checking source filenames.
78 # language_order is used to detect the language precedence, when deciding
79 # what language to use when mixing source types. For example, if some
80 # extension has two files with ".c" extension, and one with ".cpp", it
81 # is still linked as c++.
82 language_map = {".c" : "c",
83 ".cc" : "c++",
84 ".cpp" : "c++",
85 ".cxx" : "c++",
86 ".m" : "objc",
87 }
88 language_order = ["c++", "objc", "c"]
Greg Ward32c4a8a2000-03-06 03:40:29 +000089
Collin Winter5b7e9d72007-08-30 03:52:21 +000090 def __init__(self, verbose=0, dry_run=0, force=0):
Greg Warde1aaaa61999-08-14 23:50:50 +000091 self.dry_run = dry_run
Greg Ward3febd601999-10-03 20:41:02 +000092 self.force = force
Skip Montanaro70e1d9b2002-10-01 17:39:59 +000093 self.verbose = verbose
Greg Ward3f81cf71999-07-10 02:03:53 +000094
Greg Ward9b17cb51999-09-13 03:07:24 +000095 # 'output_dir': a common output directory for object, library,
96 # shared object, and shared library files
97 self.output_dir = None
98
Greg Ward3f81cf71999-07-10 02:03:53 +000099 # 'macros': a list of macro definitions (or undefinitions). A
100 # macro definition is a 2-tuple (name, value), where the value is
101 # either a string or None (no explicit value). A macro
102 # undefinition is a 1-tuple (name,).
103 self.macros = []
104
Greg Ward3f81cf71999-07-10 02:03:53 +0000105 # 'include_dirs': a list of directories to search for include files
106 self.include_dirs = []
107
108 # 'libraries': a list of libraries to include in any link
109 # (library names, not filenames: eg. "foo" not "libfoo.a")
110 self.libraries = []
111
112 # 'library_dirs': a list of directories to search for libraries
113 self.library_dirs = []
114
Greg Warde1aaaa61999-08-14 23:50:50 +0000115 # 'runtime_library_dirs': a list of directories to search for
116 # shared libraries/objects at runtime
117 self.runtime_library_dirs = []
118
Greg Ward3f81cf71999-07-10 02:03:53 +0000119 # 'objects': a list of object files (or similar, such as explicitly
120 # named library files) to include on any link
121 self.objects = []
122
Greg Warde5c62bf2000-06-25 02:08:18 +0000123 for key in self.executables.keys():
124 self.set_executable(key, self.executables[key])
125
Collin Winter5b7e9d72007-08-30 03:52:21 +0000126 def set_executables(self, **kwargs):
Greg Warde5c62bf2000-06-25 02:08:18 +0000127 """Define the executables (and options for them) that will be run
128 to perform the various stages of compilation. The exact set of
129 executables that may be specified here depends on the compiler
130 class (via the 'executables' class attribute), but most will have:
131 compiler the C/C++ compiler
132 linker_so linker used to create shared objects and libraries
133 linker_exe linker used to create binary executables
134 archiver static library creator
135
136 On platforms with a command-line (Unix, DOS/Windows), each of these
137 is a string that will be split into executable name and (optional)
138 list of arguments. (Splitting the string is done similarly to how
139 Unix shells operate: words are delimited by spaces, but quotes and
140 backslashes can override this. See
141 'distutils.util.split_quoted()'.)
142 """
143
144 # Note that some CCompiler implementation classes will define class
145 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
146 # this is appropriate when a compiler class is for exactly one
147 # compiler/OS combination (eg. MSVCCompiler). Other compiler
148 # classes (UnixCCompiler, in particular) are driven by information
149 # discovered at run-time, since there are many different ways to do
150 # basically the same things with Unix C compilers.
151
Christian Heimesc3f30c42008-02-22 16:37:40 +0000152 for key in kwargs:
Guido van Rossume2b70bc2006-08-18 22:13:04 +0000153 if key not in self.executables:
Christian Heimesc3f30c42008-02-22 16:37:40 +0000154 raise ValueError("unknown executable '%s' for class %s" %
Collin Winter5b7e9d72007-08-30 03:52:21 +0000155 (key, self.__class__.__name__))
Christian Heimesc3f30c42008-02-22 16:37:40 +0000156 self.set_executable(key, kwargs[key])
Greg Warde5c62bf2000-06-25 02:08:18 +0000157
158 def set_executable(self, key, value):
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000159 if isinstance(value, str):
Greg Warde5c62bf2000-06-25 02:08:18 +0000160 setattr(self, key, split_quoted(value))
161 else:
162 setattr(self, key, value)
Fred Drakeb94b8492001-12-06 20:51:35 +0000163
Collin Winter5b7e9d72007-08-30 03:52:21 +0000164 def _find_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000165 i = 0
166 for defn in self.macros:
167 if defn[0] == name:
168 return i
Collin Winter5b7e9d72007-08-30 03:52:21 +0000169 i += 1
Greg Ward3f81cf71999-07-10 02:03:53 +0000170 return None
171
Collin Winter5b7e9d72007-08-30 03:52:21 +0000172 def _check_macro_definitions(self, definitions):
Greg Ward3f81cf71999-07-10 02:03:53 +0000173 """Ensures that every element of 'definitions' is a valid macro
Greg Wardc3a43b42000-06-24 18:10:48 +0000174 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
175 nothing if all definitions are OK, raise TypeError otherwise.
176 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000177 for defn in definitions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000178 if not (isinstance(defn, tuple) and
179 (len(defn) in (1, 2) and
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000180 (isinstance (defn[1], str) or defn[1] is None)) and
181 isinstance (defn[0], str)):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000182 raise TypeError(("invalid macro definition '%s': " % defn) + \
Greg Ward3f81cf71999-07-10 02:03:53 +0000183 "must be tuple (string,), (string, string), or " + \
Collin Winter5b7e9d72007-08-30 03:52:21 +0000184 "(string, None)")
Greg Ward3f81cf71999-07-10 02:03:53 +0000185
186
187 # -- Bookkeeping methods -------------------------------------------
188
Collin Winter5b7e9d72007-08-30 03:52:21 +0000189 def define_macro(self, name, value=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000190 """Define a preprocessor macro for all compilations driven by this
191 compiler object. The optional parameter 'value' should be a
192 string; if it is not supplied, then the macro will be defined
193 without an explicit value and the exact outcome depends on the
194 compiler used (XXX true? does ANSI say anything about this?)
195 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000196 # Delete from the list of macro definitions/undefinitions if
197 # already there (so that this one will take precedence).
198 i = self._find_macro (name)
199 if i is not None:
200 del self.macros[i]
201
Collin Winter5b7e9d72007-08-30 03:52:21 +0000202 self.macros.append((name, value))
Greg Ward3f81cf71999-07-10 02:03:53 +0000203
Collin Winter5b7e9d72007-08-30 03:52:21 +0000204 def undefine_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000205 """Undefine a preprocessor macro for all compilations driven by
Greg Wardc3a43b42000-06-24 18:10:48 +0000206 this compiler object. If the same macro is defined by
207 'define_macro()' and undefined by 'undefine_macro()' the last call
208 takes precedence (including multiple redefinitions or
209 undefinitions). If the macro is redefined/undefined on a
210 per-compilation basis (ie. in the call to 'compile()'), then that
211 takes precedence.
212 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000213 # Delete from the list of macro definitions/undefinitions if
214 # already there (so that this one will take precedence).
215 i = self._find_macro (name)
216 if i is not None:
217 del self.macros[i]
218
219 undefn = (name,)
Collin Winter5b7e9d72007-08-30 03:52:21 +0000220 self.macros.append(undefn)
Greg Ward3f81cf71999-07-10 02:03:53 +0000221
Collin Winter5b7e9d72007-08-30 03:52:21 +0000222 def add_include_dir(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000223 """Add 'dir' to the list of directories that will be searched for
224 header files. The compiler is instructed to search directories in
225 the order in which they are supplied by successive calls to
226 'add_include_dir()'.
227 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000228 self.include_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000229
Collin Winter5b7e9d72007-08-30 03:52:21 +0000230 def set_include_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000231 """Set the list of directories that will be searched to 'dirs' (a
232 list of strings). Overrides any preceding calls to
233 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
234 to the list passed to 'set_include_dirs()'. This does not affect
235 any list of standard include directories that the compiler may
236 search by default.
237 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000238 self.include_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000239
Collin Winter5b7e9d72007-08-30 03:52:21 +0000240 def add_library(self, libname):
Greg Wardc3a43b42000-06-24 18:10:48 +0000241 """Add 'libname' to the list of libraries that will be included in
242 all links driven by this compiler object. Note that 'libname'
243 should *not* be the name of a file containing a library, but the
244 name of the library itself: the actual filename will be inferred by
245 the linker, the compiler, or the compiler class (depending on the
246 platform).
Greg Ward3f81cf71999-07-10 02:03:53 +0000247
Greg Wardc3a43b42000-06-24 18:10:48 +0000248 The linker will be instructed to link against libraries in the
249 order they were supplied to 'add_library()' and/or
250 'set_libraries()'. It is perfectly valid to duplicate library
251 names; the linker will be instructed to link against libraries as
252 many times as they are mentioned.
253 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000254 self.libraries.append(libname)
Greg Ward3f81cf71999-07-10 02:03:53 +0000255
Collin Winter5b7e9d72007-08-30 03:52:21 +0000256 def set_libraries(self, libnames):
Greg Wardc3a43b42000-06-24 18:10:48 +0000257 """Set the list of libraries to be included in all links driven by
258 this compiler object to 'libnames' (a list of strings). This does
259 not affect any standard system libraries that the linker may
260 include by default.
261 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000262 self.libraries = libnames[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000263
Collin Winter5b7e9d72007-08-30 03:52:21 +0000264 def add_library_dir(self, dir):
Greg Ward3f81cf71999-07-10 02:03:53 +0000265 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000266 libraries specified to 'add_library()' and 'set_libraries()'. The
267 linker will be instructed to search for libraries in the order they
268 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
269 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000270 self.library_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000271
Collin Winter5b7e9d72007-08-30 03:52:21 +0000272 def set_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000273 """Set the list of library search directories to 'dirs' (a list of
274 strings). This does not affect any standard library search path
275 that the linker may search by default.
276 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000277 self.library_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000278
Collin Winter5b7e9d72007-08-30 03:52:21 +0000279 def add_runtime_library_dir(self, dir):
Greg Warde1aaaa61999-08-14 23:50:50 +0000280 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000281 shared libraries at runtime.
282 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000283 self.runtime_library_dirs.append(dir)
Greg Warde1aaaa61999-08-14 23:50:50 +0000284
Collin Winter5b7e9d72007-08-30 03:52:21 +0000285 def set_runtime_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000286 """Set the list of directories to search for shared libraries at
287 runtime to 'dirs' (a list of strings). This does not affect any
288 standard search path that the runtime linker may search by
289 default.
290 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000291 self.runtime_library_dirs = dirs[:]
Greg Warde1aaaa61999-08-14 23:50:50 +0000292
Collin Winter5b7e9d72007-08-30 03:52:21 +0000293 def add_link_object(self, object):
Greg Wardc3a43b42000-06-24 18:10:48 +0000294 """Add 'object' to the list of object files (or analogues, such as
Greg Ward612eb9f2000-07-27 02:13:20 +0000295 explicitly named library files or the output of "resource
Greg Wardc3a43b42000-06-24 18:10:48 +0000296 compilers") to be included in every link driven by this compiler
297 object.
298 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000299 self.objects.append(object)
Greg Ward3f81cf71999-07-10 02:03:53 +0000300
Collin Winter5b7e9d72007-08-30 03:52:21 +0000301 def set_link_objects(self, objects):
Greg Wardc3a43b42000-06-24 18:10:48 +0000302 """Set the list of object files (or analogues) to be included in
303 every link to 'objects'. This does not affect any standard object
304 files that the linker may include by default (such as system
305 libraries).
306 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000307 self.objects = objects[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000308
309
Thomas Hellere6500802002-04-25 17:03:30 +0000310 # -- Private utility methods --------------------------------------
Greg Ward32c4a8a2000-03-06 03:40:29 +0000311 # (here for the convenience of subclasses)
312
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000313 # Helper method to prep compiler in subclass compile() methods
314
315 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
316 extra):
317 """Process arguments and decide which source files to compile.
318
319 Merges _fix_compile_args() and _prep_compile().
320 """
321 if outdir is None:
322 outdir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000323 elif not isinstance(outdir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000324 raise TypeError("'output_dir' must be a string or None")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000325
326 if macros is None:
327 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000328 elif isinstance(macros, list):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000329 macros = macros + (self.macros or [])
330 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000331 raise TypeError("'macros' (if supplied) must be a list of tuples")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000332
333 if incdirs is None:
334 incdirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000335 elif isinstance(incdirs, (list, tuple)):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000336 incdirs = list(incdirs) + (self.include_dirs or [])
337 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000338 raise TypeError(
339 "'include_dirs' (if supplied) must be a list of strings")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000340
341 if extra is None:
342 extra = []
343
344 # Get the list of expected output (object) files
Collin Winter5b7e9d72007-08-30 03:52:21 +0000345 objects = self.object_filenames(sources, strip_dir=0,
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000346 output_dir=outdir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000347 assert len(objects) == len(sources)
348
349 # XXX should redo this code to eliminate skip_source entirely.
350 # XXX instead create build and issue skip messages inline
351
352 if self.force:
353 skip_source = {} # rebuild everything
354 for source in sources:
355 skip_source[source] = 0
356 elif depends is None:
357 # If depends is None, figure out which source files we
358 # have to recompile according to a simplistic check. We
359 # just compare the source and object file, no deep
360 # dependency checking involving header files.
361 skip_source = {} # rebuild everything
362 for source in sources: # no wait, rebuild nothing
363 skip_source[source] = 1
364
365 n_sources, n_objects = newer_pairwise(sources, objects)
366 for source in n_sources: # no really, only rebuild what's
367 skip_source[source] = 0 # out-of-date
368 else:
369 # If depends is a list of files, then do a different
370 # simplistic check. Assume that each object depends on
371 # its source and all files in the depends list.
372 skip_source = {}
373 # L contains all the depends plus a spot at the end for a
374 # particular source file
375 L = depends[:] + [None]
376 for i in range(len(objects)):
377 source = sources[i]
378 L[-1] = source
379 if newer_group(L, objects[i]):
380 skip_source[source] = 0
381 else:
382 skip_source[source] = 1
383
384 pp_opts = gen_preprocess_options(macros, incdirs)
385
386 build = {}
387 for i in range(len(sources)):
388 src = sources[i]
389 obj = objects[i]
390 ext = os.path.splitext(src)[1]
391 self.mkpath(os.path.dirname(obj))
392 if skip_source[src]:
393 log.debug("skipping %s (%s up-to-date)", src, obj)
394 else:
395 build[obj] = src, ext
396
397 return macros, objects, extra, pp_opts, build
398
399 def _get_cc_args(self, pp_opts, debug, before):
400 # works for unixccompiler, emxccompiler, cygwinccompiler
401 cc_args = pp_opts + ['-c']
402 if debug:
403 cc_args[:0] = ['-g']
404 if before:
405 cc_args[:0] = before
406 return cc_args
407
Collin Winter5b7e9d72007-08-30 03:52:21 +0000408 def _fix_compile_args(self, output_dir, macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000409 """Typecheck and fix-up some of the arguments to the 'compile()'
410 method, and return fixed-up values. Specifically: if 'output_dir'
411 is None, replaces it with 'self.output_dir'; ensures that 'macros'
412 is a list, and augments it with 'self.macros'; ensures that
413 'include_dirs' is a list, and augments it with 'self.include_dirs'.
414 Guarantees that the returned values are of the correct type,
415 i.e. for 'output_dir' either string or None, and for 'macros' and
416 'include_dirs' either list or None.
417 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000418 if output_dir is None:
419 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000420 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000421 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000422
423 if macros is None:
424 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000425 elif isinstance(macros, list):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000426 macros = macros + (self.macros or [])
427 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000428 raise TypeError("'macros' (if supplied) must be a list of tuples")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000429
430 if include_dirs is None:
431 include_dirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000432 elif isinstance(include_dirs, (list, tuple)):
433 include_dirs = list(include_dirs) + (self.include_dirs or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000434 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000435 raise TypeError(
436 "'include_dirs' (if supplied) must be a list of strings")
Fred Drakeb94b8492001-12-06 20:51:35 +0000437
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000438 return output_dir, macros, include_dirs
Greg Ward32c4a8a2000-03-06 03:40:29 +0000439
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000440 def _prep_compile(self, sources, output_dir, depends=None):
441 """Decide which souce files must be recompiled.
442
443 Determine the list of object files corresponding to 'sources',
444 and figure out which ones really need to be recompiled.
445 Return a list of all object files and a dictionary telling
446 which source files can be skipped.
Greg Wardc3a43b42000-06-24 18:10:48 +0000447 """
Fred Drakeb94b8492001-12-06 20:51:35 +0000448 # Get the list of expected output (object) files
Thomas Wouters477c8d52006-05-27 19:21:47 +0000449 objects = self.object_filenames(sources, output_dir=output_dir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000450 assert len(objects) == len(sources)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000451
452 if self.force:
453 skip_source = {} # rebuild everything
454 for source in sources:
455 skip_source[source] = 0
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000456 elif depends is None:
457 # If depends is None, figure out which source files we
458 # have to recompile according to a simplistic check. We
459 # just compare the source and object file, no deep
460 # dependency checking involving header files.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000461 skip_source = {} # rebuild everything
462 for source in sources: # no wait, rebuild nothing
463 skip_source[source] = 1
464
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000465 n_sources, n_objects = newer_pairwise(sources, objects)
Greg Wardc3a43b42000-06-24 18:10:48 +0000466 for source in n_sources: # no really, only rebuild what's
467 skip_source[source] = 0 # out-of-date
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000468 else:
469 # If depends is a list of files, then do a different
470 # simplistic check. Assume that each object depends on
471 # its source and all files in the depends list.
472 skip_source = {}
473 # L contains all the depends plus a spot at the end for a
474 # particular source file
475 L = depends[:] + [None]
476 for i in range(len(objects)):
477 source = sources[i]
478 L[-1] = source
479 if newer_group(L, objects[i]):
480 skip_source[source] = 0
481 else:
482 skip_source[source] = 1
Greg Ward32c4a8a2000-03-06 03:40:29 +0000483
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000484 return objects, skip_source
Greg Ward32c4a8a2000-03-06 03:40:29 +0000485
Greg Ward32c4a8a2000-03-06 03:40:29 +0000486
Collin Winter5b7e9d72007-08-30 03:52:21 +0000487 def _fix_object_args(self, objects, output_dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000488 """Typecheck and fix up some arguments supplied to various methods.
489 Specifically: ensure that 'objects' is a list; if output_dir is
490 None, replace with self.output_dir. Return fixed versions of
491 'objects' and 'output_dir'.
492 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000493 if not isinstance(objects, (list, tuple)):
494 raise TypeError("'objects' must be a list or tuple of strings")
495 objects = list(objects)
Fred Drakeb94b8492001-12-06 20:51:35 +0000496
Greg Ward32c4a8a2000-03-06 03:40:29 +0000497 if output_dir is None:
498 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000499 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000500 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000501
Greg Wardf10f95d2000-03-26 21:37:09 +0000502 return (objects, output_dir)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000503
Collin Winter5b7e9d72007-08-30 03:52:21 +0000504 def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
Greg Wardf10f95d2000-03-26 21:37:09 +0000505 """Typecheck and fix up some of the arguments supplied to the
Greg Wardc3a43b42000-06-24 18:10:48 +0000506 'link_*' methods. Specifically: ensure that all arguments are
507 lists, and augment them with their permanent versions
508 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
509 fixed versions of all arguments.
510 """
Greg Wardf10f95d2000-03-26 21:37:09 +0000511 if libraries is None:
512 libraries = self.libraries
Collin Winter5b7e9d72007-08-30 03:52:21 +0000513 elif isinstance(libraries, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000514 libraries = list (libraries) + (self.libraries or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000515 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000516 raise TypeError(
517 "'libraries' (if supplied) must be a list of strings")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000518
Greg Wardf10f95d2000-03-26 21:37:09 +0000519 if library_dirs is None:
520 library_dirs = self.library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000521 elif isinstance(library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000522 library_dirs = list (library_dirs) + (self.library_dirs or [])
523 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000524 raise TypeError(
525 "'library_dirs' (if supplied) must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000526
527 if runtime_library_dirs is None:
528 runtime_library_dirs = self.runtime_library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000529 elif isinstance(runtime_library_dirs, (list, tuple)):
530 runtime_library_dirs = (list(runtime_library_dirs) +
Greg Wardf10f95d2000-03-26 21:37:09 +0000531 (self.runtime_library_dirs or []))
532 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000533 raise TypeError("'runtime_library_dirs' (if supplied) "
534 "must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000535
536 return (libraries, library_dirs, runtime_library_dirs)
537
Collin Winter5b7e9d72007-08-30 03:52:21 +0000538 def _need_link(self, objects, output_file):
Greg Wardc3a43b42000-06-24 18:10:48 +0000539 """Return true if we need to relink the files listed in 'objects'
540 to recreate 'output_file'.
541 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000542 if self.force:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000543 return True
Greg Ward32c4a8a2000-03-06 03:40:29 +0000544 else:
545 if self.dry_run:
546 newer = newer_group (objects, output_file, missing='newer')
547 else:
548 newer = newer_group (objects, output_file)
549 return newer
550
Collin Winter5b7e9d72007-08-30 03:52:21 +0000551 def detect_language(self, sources):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000552 """Detect the language of a given file, or list of files. Uses
553 language_map, and language_order to do the job.
554 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000555 if not isinstance(sources, list):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000556 sources = [sources]
557 lang = None
558 index = len(self.language_order)
559 for source in sources:
560 base, ext = os.path.splitext(source)
561 extlang = self.language_map.get(ext)
562 try:
563 extindex = self.language_order.index(extlang)
564 if extindex < index:
565 lang = extlang
566 index = extindex
567 except ValueError:
568 pass
569 return lang
570
Greg Ward32c4a8a2000-03-06 03:40:29 +0000571
Greg Ward3f81cf71999-07-10 02:03:53 +0000572 # -- Worker methods ------------------------------------------------
573 # (must be implemented by subclasses)
574
Collin Winter5b7e9d72007-08-30 03:52:21 +0000575 def preprocess(self, source, output_file=None, macros=None,
576 include_dirs=None, extra_preargs=None, extra_postargs=None):
Greg Ward3ff3b032000-06-21 02:58:46 +0000577 """Preprocess a single C/C++ source file, named in 'source'.
578 Output will be written to file named 'output_file', or stdout if
579 'output_file' not supplied. 'macros' is a list of macro
580 definitions as for 'compile()', which will augment the macros set
581 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
582 list of directory names that will be added to the default list.
Greg Warde5c62bf2000-06-25 02:08:18 +0000583
584 Raises PreprocessError on failure.
Greg Ward3ff3b032000-06-21 02:58:46 +0000585 """
586 pass
587
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000588 def compile(self, sources, output_dir=None, macros=None,
589 include_dirs=None, debug=0, extra_preargs=None,
590 extra_postargs=None, depends=None):
591 """Compile one or more source files.
592
593 'sources' must be a list of filenames, most likely C/C++
594 files, but in reality anything that can be handled by a
595 particular compiler and compiler class (eg. MSVCCompiler can
596 handle resource files in 'sources'). Return a list of object
597 filenames, one per source filename in 'sources'. Depending on
598 the implementation, not all source files will necessarily be
599 compiled, but all corresponding object filenames will be
600 returned.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000601
Greg Wardc3a43b42000-06-24 18:10:48 +0000602 If 'output_dir' is given, object files will be put under it, while
603 retaining their original path component. That is, "foo/bar.c"
604 normally compiles to "foo/bar.o" (for a Unix implementation); if
605 'output_dir' is "build", then it would compile to
606 "build/foo/bar.o".
Greg Ward3f81cf71999-07-10 02:03:53 +0000607
Greg Wardc3a43b42000-06-24 18:10:48 +0000608 'macros', if given, must be a list of macro definitions. A macro
609 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
610 The former defines a macro; if the value is None, the macro is
611 defined without an explicit value. The 1-tuple case undefines a
612 macro. Later definitions/redefinitions/ undefinitions take
613 precedence.
Greg Ward3f81cf71999-07-10 02:03:53 +0000614
Greg Wardc3a43b42000-06-24 18:10:48 +0000615 'include_dirs', if given, must be a list of strings, the
616 directories to add to the default include file search path for this
617 compilation only.
Greg Ward3c045a52000-02-09 02:16:14 +0000618
Greg Wardc3a43b42000-06-24 18:10:48 +0000619 'debug' is a boolean; if true, the compiler will be instructed to
620 output debug symbols in (or alongside) the object file(s).
Greg Ward802d6b71999-09-29 12:20:55 +0000621
Greg Wardc3a43b42000-06-24 18:10:48 +0000622 'extra_preargs' and 'extra_postargs' are implementation- dependent.
623 On platforms that have the notion of a command-line (e.g. Unix,
624 DOS/Windows), they are most likely lists of strings: extra
625 command-line arguments to prepand/append to the compiler command
626 line. On other platforms, consult the implementation class
627 documentation. In any event, they are intended as an escape hatch
628 for those occasions when the abstract compiler framework doesn't
629 cut the mustard.
Greg Wardd1517112000-05-30 01:56:44 +0000630
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000631 'depends', if given, is a list of filenames that all targets
632 depend on. If a source file is older than any file in
633 depends, then the source file will be recompiled. This
634 supports dependency tracking, but only at a coarse
635 granularity.
636
Greg Wardc3a43b42000-06-24 18:10:48 +0000637 Raises CompileError on failure.
638 """
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000639 # A concrete compiler class can either override this method
640 # entirely or implement _compile().
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000641 macros, objects, extra_postargs, pp_opts, build = \
642 self._setup_compile(output_dir, macros, include_dirs, sources,
643 depends, extra_postargs)
644 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
645
Thomas Heller9436a752003-12-05 20:12:23 +0000646 for obj in objects:
647 try:
648 src, ext = build[obj]
649 except KeyError:
650 continue
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000651 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
652
653 # Return *all* object filenames, not just the ones we just built.
654 return objects
655
656 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
657 """Compile 'src' to product 'obj'."""
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000658 # A concrete compiler class that does not override compile()
659 # should implement _compile().
660 pass
Greg Ward3f81cf71999-07-10 02:03:53 +0000661
Collin Winter5b7e9d72007-08-30 03:52:21 +0000662 def create_static_lib(self, objects, output_libname, output_dir=None,
663 debug=0, target_lang=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000664 """Link a bunch of stuff together to create a static library file.
665 The "bunch of stuff" consists of the list of object files supplied
666 as 'objects', the extra object files supplied to
667 'add_link_object()' and/or 'set_link_objects()', the libraries
668 supplied to 'add_library()' and/or 'set_libraries()', and the
669 libraries supplied as 'libraries' (if any).
Greg Ward3f81cf71999-07-10 02:03:53 +0000670
Greg Wardc3a43b42000-06-24 18:10:48 +0000671 'output_libname' should be a library name, not a filename; the
672 filename will be inferred from the library name. 'output_dir' is
673 the directory where the library file will be put.
Greg Ward3c045a52000-02-09 02:16:14 +0000674
Greg Wardc3a43b42000-06-24 18:10:48 +0000675 'debug' is a boolean; if true, debugging information will be
676 included in the library (note that on most platforms, it is the
677 compile step where this matters: the 'debug' flag is included here
678 just for consistency).
Greg Wardd1517112000-05-30 01:56:44 +0000679
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000680 'target_lang' is the target language for which the given objects
681 are being compiled. This allows specific linkage time treatment of
682 certain languages.
683
Greg Wardc3a43b42000-06-24 18:10:48 +0000684 Raises LibError on failure.
685 """
Greg Ward3c045a52000-02-09 02:16:14 +0000686 pass
Fred Drakeb94b8492001-12-06 20:51:35 +0000687
Greg Ward3c045a52000-02-09 02:16:14 +0000688
Greg Ward42406482000-09-27 02:08:14 +0000689 # values for target_desc parameter in link()
690 SHARED_OBJECT = "shared_object"
691 SHARED_LIBRARY = "shared_library"
692 EXECUTABLE = "executable"
693
Collin Winter5b7e9d72007-08-30 03:52:21 +0000694 def link(self,
695 target_desc,
696 objects,
697 output_filename,
698 output_dir=None,
699 libraries=None,
700 library_dirs=None,
701 runtime_library_dirs=None,
702 export_symbols=None,
703 debug=0,
704 extra_preargs=None,
705 extra_postargs=None,
706 build_temp=None,
707 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000708 """Link a bunch of stuff together to create an executable or
709 shared library file.
710
711 The "bunch of stuff" consists of the list of object files supplied
712 as 'objects'. 'output_filename' should be a filename. If
713 'output_dir' is supplied, 'output_filename' is relative to it
714 (i.e. 'output_filename' can provide directory components if
715 needed).
Greg Ward3febd601999-10-03 20:41:02 +0000716
Greg Wardc3a43b42000-06-24 18:10:48 +0000717 'libraries' is a list of libraries to link against. These are
718 library names, not filenames, since they're translated into
719 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
720 on Unix and "foo.lib" on DOS/Windows). However, they can include a
721 directory component, which means the linker will look in that
722 specific directory rather than searching all the normal locations.
Greg Ward5299b6a2000-05-20 13:23:21 +0000723
Greg Wardc3a43b42000-06-24 18:10:48 +0000724 'library_dirs', if supplied, should be a list of directories to
725 search for libraries that were specified as bare library names
726 (ie. no directory component). These are on top of the system
727 default and those supplied to 'add_library_dir()' and/or
728 'set_library_dirs()'. 'runtime_library_dirs' is a list of
729 directories that will be embedded into the shared library and used
730 to search for other shared libraries that *it* depends on at
731 run-time. (This may only be relevant on Unix.)
Greg Ward802d6b71999-09-29 12:20:55 +0000732
Greg Wardc3a43b42000-06-24 18:10:48 +0000733 'export_symbols' is a list of symbols that the shared library will
734 export. (This appears to be relevant only on Windows.)
Greg Ward3c045a52000-02-09 02:16:14 +0000735
Greg Wardc3a43b42000-06-24 18:10:48 +0000736 'debug' is as for 'compile()' and 'create_static_lib()', with the
737 slight distinction that it actually matters on most platforms (as
738 opposed to 'create_static_lib()', which includes a 'debug' flag
739 mostly for form's sake).
Greg Wardd1517112000-05-30 01:56:44 +0000740
Greg Wardc3a43b42000-06-24 18:10:48 +0000741 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
742 of course that they supply command-line arguments for the
743 particular linker being used).
Greg Ward3f81cf71999-07-10 02:03:53 +0000744
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000745 'target_lang' is the target language for which the given objects
746 are being compiled. This allows specific linkage time treatment of
747 certain languages.
748
Greg Wardc3a43b42000-06-24 18:10:48 +0000749 Raises LinkError on failure.
750 """
Greg Ward42406482000-09-27 02:08:14 +0000751 raise NotImplementedError
752
Fred Drakeb94b8492001-12-06 20:51:35 +0000753
Greg Ward264cf742000-09-27 02:24:21 +0000754 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
Greg Ward42406482000-09-27 02:08:14 +0000755
Collin Winter5b7e9d72007-08-30 03:52:21 +0000756 def link_shared_lib(self,
757 objects,
758 output_libname,
759 output_dir=None,
760 libraries=None,
761 library_dirs=None,
762 runtime_library_dirs=None,
763 export_symbols=None,
764 debug=0,
765 extra_preargs=None,
766 extra_postargs=None,
767 build_temp=None,
768 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000769 self.link(CCompiler.SHARED_LIBRARY, objects,
Greg Ward42406482000-09-27 02:08:14 +0000770 self.library_filename(output_libname, lib_type='shared'),
771 output_dir,
772 libraries, library_dirs, runtime_library_dirs,
773 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000774 extra_preargs, extra_postargs, build_temp, target_lang)
Fred Drakeb94b8492001-12-06 20:51:35 +0000775
Greg Ward3f81cf71999-07-10 02:03:53 +0000776
Collin Winter5b7e9d72007-08-30 03:52:21 +0000777 def link_shared_object(self,
778 objects,
779 output_filename,
780 output_dir=None,
781 libraries=None,
782 library_dirs=None,
783 runtime_library_dirs=None,
784 export_symbols=None,
785 debug=0,
786 extra_preargs=None,
787 extra_postargs=None,
788 build_temp=None,
789 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000790 self.link(CCompiler.SHARED_OBJECT, objects,
791 output_filename, output_dir,
792 libraries, library_dirs, runtime_library_dirs,
793 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000794 extra_preargs, extra_postargs, build_temp, target_lang)
Greg Ward3f81cf71999-07-10 02:03:53 +0000795
Greg Warde1aaaa61999-08-14 23:50:50 +0000796
Collin Winter5b7e9d72007-08-30 03:52:21 +0000797 def link_executable(self,
798 objects,
799 output_progname,
800 output_dir=None,
801 libraries=None,
802 library_dirs=None,
803 runtime_library_dirs=None,
804 debug=0,
805 extra_preargs=None,
806 extra_postargs=None,
807 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000808 self.link(CCompiler.EXECUTABLE, objects,
Greg Ward264cf742000-09-27 02:24:21 +0000809 self.executable_filename(output_progname), output_dir,
Fred Drakeb94b8492001-12-06 20:51:35 +0000810 libraries, library_dirs, runtime_library_dirs, None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000811 debug, extra_preargs, extra_postargs, None, target_lang)
Greg Ward5baf1c22000-01-09 22:41:02 +0000812
813
Greg Wardf7edea72000-05-20 13:31:32 +0000814 # -- Miscellaneous methods -----------------------------------------
815 # These are all used by the 'gen_lib_options() function; there is
816 # no appropriate default implementation so subclasses should
817 # implement all of these.
818
Collin Winter5b7e9d72007-08-30 03:52:21 +0000819 def library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000820 """Return the compiler option to add 'dir' to the list of
821 directories searched for libraries.
822 """
Greg Wardf7edea72000-05-20 13:31:32 +0000823 raise NotImplementedError
824
Collin Winter5b7e9d72007-08-30 03:52:21 +0000825 def runtime_library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000826 """Return the compiler option to add 'dir' to the list of
827 directories searched for runtime libraries.
828 """
Greg Wardf7edea72000-05-20 13:31:32 +0000829 raise NotImplementedError
830
Collin Winter5b7e9d72007-08-30 03:52:21 +0000831 def library_option(self, lib):
Greg Wardf7edea72000-05-20 13:31:32 +0000832 """Return the compiler option to add 'dir' to the list of libraries
Greg Wardc3a43b42000-06-24 18:10:48 +0000833 linked into the shared library or executable.
834 """
Greg Wardf7edea72000-05-20 13:31:32 +0000835 raise NotImplementedError
836
Collin Winter5b7e9d72007-08-30 03:52:21 +0000837 def has_function(self, funcname, includes=None, include_dirs=None,
838 libraries=None, library_dirs=None):
Skip Montanarofa012612003-04-24 19:49:23 +0000839 """Return a boolean indicating whether funcname is supported on
840 the current platform. The optional arguments can be used to
841 augment the compilation environment.
842 """
Skip Montanarofa012612003-04-24 19:49:23 +0000843 # this can't be included at module scope because it tries to
844 # import math which might not be available at that point - maybe
845 # the necessary logic should just be inlined?
846 import tempfile
847 if includes is None:
848 includes = []
849 if include_dirs is None:
850 include_dirs = []
851 if libraries is None:
852 libraries = []
853 if library_dirs is None:
854 library_dirs = []
855 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
856 f = os.fdopen(fd, "w")
857 for incl in includes:
858 f.write("""#include "%s"\n""" % incl)
859 f.write("""\
860main (int argc, char **argv) {
861 %s();
862}
863""" % funcname)
864 f.close()
865 try:
866 objects = self.compile([fname], include_dirs=include_dirs)
867 except CompileError:
868 return False
869
870 try:
871 self.link_executable(objects, "a.out",
872 libraries=libraries,
873 library_dirs=library_dirs)
874 except (LinkError, TypeError):
875 return False
876 return True
877
Greg Warde5e60152000-08-04 01:28:39 +0000878 def find_library_file (self, dirs, lib, debug=0):
Greg Wardf7edea72000-05-20 13:31:32 +0000879 """Search the specified list of directories for a static or shared
Greg Warde5e60152000-08-04 01:28:39 +0000880 library file 'lib' and return the full path to that file. If
881 'debug' true, look for a debugging version (if that makes sense on
882 the current platform). Return None if 'lib' wasn't found in any of
883 the specified directories.
Greg Wardc3a43b42000-06-24 18:10:48 +0000884 """
Greg Wardf7edea72000-05-20 13:31:32 +0000885 raise NotImplementedError
886
Greg Ward32c4a8a2000-03-06 03:40:29 +0000887 # -- Filename generation methods -----------------------------------
Greg Warde1aaaa61999-08-14 23:50:50 +0000888
Greg Ward32c4a8a2000-03-06 03:40:29 +0000889 # The default implementation of the filename generating methods are
890 # prejudiced towards the Unix/DOS/Windows view of the world:
891 # * object files are named by replacing the source file extension
892 # (eg. .c/.cpp -> .o/.obj)
893 # * library files (shared or static) are named by plugging the
894 # library name and extension into a format string, eg.
895 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
896 # * executables are named by appending an extension (possibly
897 # empty) to the program name: eg. progname + ".exe" for
898 # Windows
899 #
900 # To reduce redundant code, these methods expect to find
901 # several attributes in the current object (presumably defined
902 # as class attributes):
903 # * src_extensions -
904 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
905 # * obj_extension -
906 # object file extension, eg. '.o' or '.obj'
907 # * static_lib_extension -
908 # extension for static library files, eg. '.a' or '.lib'
909 # * shared_lib_extension -
910 # extension for shared library/object files, eg. '.so', '.dll'
911 # * static_lib_format -
912 # format string for generating static library filenames,
913 # eg. 'lib%s.%s' or '%s.%s'
914 # * shared_lib_format
915 # format string for generating shared library filenames
916 # (probably same as static_lib_format, since the extension
917 # is one of the intended parameters to the format string)
918 # * exe_extension -
919 # extension for executable files, eg. '' or '.exe'
Greg Ward9b17cb51999-09-13 03:07:24 +0000920
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000921 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
Guido van Rossumcc3a6df2002-10-01 04:14:17 +0000922 if output_dir is None:
923 output_dir = ''
Greg Ward32c4a8a2000-03-06 03:40:29 +0000924 obj_names = []
925 for src_name in source_filenames:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000926 base, ext = os.path.splitext(src_name)
Andrew M. Kuchling10da45e2003-02-26 18:52:07 +0000927 base = os.path.splitdrive(base)[1] # Chop off the drive
928 base = base[os.path.isabs(base):] # If abs, chop off leading /
Greg Ward32c4a8a2000-03-06 03:40:29 +0000929 if ext not in self.src_extensions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000930 raise UnknownFileError(
931 "unknown file type '%s' (from '%s')" % (ext, src_name))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000932 if strip_dir:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000933 base = os.path.basename(base)
934 obj_names.append(os.path.join(output_dir,
935 base + self.obj_extension))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000936 return obj_names
Greg Warde1aaaa61999-08-14 23:50:50 +0000937
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000938 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
939 assert output_dir is not None
Greg Ward32c4a8a2000-03-06 03:40:29 +0000940 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000941 basename = os.path.basename(basename)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000942 return os.path.join(output_dir, basename + self.shared_lib_extension)
Greg Warde1aaaa61999-08-14 23:50:50 +0000943
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000944 def executable_filename(self, basename, strip_dir=0, output_dir=''):
945 assert output_dir is not None
Greg Ward42406482000-09-27 02:08:14 +0000946 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000947 basename = os.path.basename(basename)
Greg Ward42406482000-09-27 02:08:14 +0000948 return os.path.join(output_dir, basename + (self.exe_extension or ''))
Greg Ward26e48ea1999-08-29 18:17:36 +0000949
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000950 def library_filename(self, libname, lib_type='static', # or 'shared'
951 strip_dir=0, output_dir=''):
952 assert output_dir is not None
953 if lib_type not in ("static", "shared", "dylib"):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000954 raise ValueError(
955 "'lib_type' must be \"static\", \"shared\" or \"dylib\"")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000956 fmt = getattr(self, lib_type + "_lib_format")
957 ext = getattr(self, lib_type + "_lib_extension")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000958
Collin Winter5b7e9d72007-08-30 03:52:21 +0000959 dir, base = os.path.split(libname)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000960 filename = fmt % (base, ext)
961 if strip_dir:
962 dir = ''
963
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000964 return os.path.join(output_dir, dir, filename)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000965
Greg Warde1aaaa61999-08-14 23:50:50 +0000966
967 # -- Utility methods -----------------------------------------------
968
Collin Winter5b7e9d72007-08-30 03:52:21 +0000969 def announce(self, msg, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000970 log.debug(msg)
Greg Ward9b17cb51999-09-13 03:07:24 +0000971
Collin Winter5b7e9d72007-08-30 03:52:21 +0000972 def debug_print(self, msg):
Jeremy Hyltonfcd73532002-09-11 16:31:53 +0000973 from distutils.debug import DEBUG
Greg Wardf813e592000-08-04 01:31:13 +0000974 if DEBUG:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000975 print(msg)
Greg Wardf813e592000-08-04 01:31:13 +0000976
Collin Winter5b7e9d72007-08-30 03:52:21 +0000977 def warn(self, msg):
978 sys.stderr.write("warning: %s\n" % msg)
Greg Ward3febd601999-10-03 20:41:02 +0000979
Collin Winter5b7e9d72007-08-30 03:52:21 +0000980 def execute(self, func, args, msg=None, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000981 execute(func, args, msg, self.dry_run)
Greg Ward9dddbb42000-08-02 01:38:20 +0000982
Collin Winter5b7e9d72007-08-30 03:52:21 +0000983 def spawn(self, cmd):
984 spawn(cmd, dry_run=self.dry_run)
Greg Warde1aaaa61999-08-14 23:50:50 +0000985
Collin Winter5b7e9d72007-08-30 03:52:21 +0000986 def move_file(self, src, dst):
987 return move_file(src, dst, dry_run=self.dry_run)
Greg Ward9b17cb51999-09-13 03:07:24 +0000988
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000989 def mkpath (self, name, mode=0o777):
990 mkpath(name, mode, dry_run=self.dry_run)
Greg Ward3f81cf71999-07-10 02:03:53 +0000991
992
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000993# Map a sys.platform/os.name ('posix', 'nt') to the default compiler
994# type for that platform. Keys are interpreted as re match
995# patterns. Order is important; platform mappings are preferred over
996# OS names.
997_default_compilers = (
998
999 # Platform string mappings
Andrew M. Kuchlinga34dbe02001-02-27 19:13:15 +00001000
1001 # on a cygwin built python we can use gcc like an ordinary UNIXish
1002 # compiler
1003 ('cygwin.*', 'unix'),
Marc-André Lemburg2544f512002-01-31 18:56:00 +00001004 ('os2emx', 'emx'),
Fred Drakeb94b8492001-12-06 20:51:35 +00001005
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001006 # OS name mappings
1007 ('posix', 'unix'),
1008 ('nt', 'msvc'),
Fred Drakeb94b8492001-12-06 20:51:35 +00001009
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001010 )
1011
1012def get_default_compiler(osname=None, platform=None):
Collin Winter5b7e9d72007-08-30 03:52:21 +00001013 """Determine the default compiler to use for the given platform.
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001014
Collin Winter5b7e9d72007-08-30 03:52:21 +00001015 osname should be one of the standard Python OS names (i.e. the
1016 ones returned by os.name) and platform the common value
1017 returned by sys.platform for the platform in question.
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001018
Collin Winter5b7e9d72007-08-30 03:52:21 +00001019 The default values are os.name and sys.platform in case the
1020 parameters are not given.
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001021 """
1022 if osname is None:
1023 osname = os.name
1024 if platform is None:
1025 platform = sys.platform
1026 for pattern, compiler in _default_compilers:
1027 if re.match(pattern, platform) is not None or \
1028 re.match(pattern, osname) is not None:
1029 return compiler
1030 # Default to Unix compiler
1031 return 'unix'
Greg Ward802d6b71999-09-29 12:20:55 +00001032
1033# Map compiler types to (module_name, class_name) pairs -- ie. where to
1034# find the code that implements an interface to this compiler. (The module
1035# is assumed to be in the 'distutils' package.)
Greg Ward2ff78872000-06-24 00:23:20 +00001036compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
1037 "standard UNIX-style compiler"),
1038 'msvc': ('msvccompiler', 'MSVCCompiler',
1039 "Microsoft Visual C++"),
1040 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
1041 "Cygwin port of GNU C Compiler for Win32"),
1042 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
1043 "Mingw32 port of GNU C Compiler for Win32"),
Greg Wardbfc79d62000-06-28 01:29:09 +00001044 'bcpp': ('bcppcompiler', 'BCPPCompiler',
1045 "Borland C++ Compiler"),
Marc-André Lemburg2544f512002-01-31 18:56:00 +00001046 'emx': ('emxccompiler', 'EMXCCompiler',
1047 "EMX port of GNU C Compiler for OS/2"),
Greg Ward802d6b71999-09-29 12:20:55 +00001048 }
1049
Greg Ward9d17a7a2000-06-07 03:00:06 +00001050def show_compilers():
Greg Ward2ff78872000-06-24 00:23:20 +00001051 """Print list of available compilers (used by the "--help-compiler"
1052 options to "build", "build_ext", "build_clib").
1053 """
1054 # XXX this "knows" that the compiler option it's describing is
1055 # "--compiler", which just happens to be the case for the three
1056 # commands that use it.
Fred Drakeb94b8492001-12-06 20:51:35 +00001057 from distutils.fancy_getopt import FancyGetopt
Greg Ward2ff78872000-06-24 00:23:20 +00001058 compilers = []
Greg Ward9d17a7a2000-06-07 03:00:06 +00001059 for compiler in compiler_class.keys():
Jeremy Hylton65d6edb2000-07-07 20:45:21 +00001060 compilers.append(("compiler="+compiler, None,
Greg Ward2ff78872000-06-24 00:23:20 +00001061 compiler_class[compiler][2]))
1062 compilers.sort()
1063 pretty_printer = FancyGetopt(compilers)
Greg Ward9d17a7a2000-06-07 03:00:06 +00001064 pretty_printer.print_help("List of available compilers:")
Fred Drakeb94b8492001-12-06 20:51:35 +00001065
Greg Ward802d6b71999-09-29 12:20:55 +00001066
Collin Winter5b7e9d72007-08-30 03:52:21 +00001067def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0):
Greg Ward802d6b71999-09-29 12:20:55 +00001068 """Generate an instance of some CCompiler subclass for the supplied
Greg Wardc3a43b42000-06-24 18:10:48 +00001069 platform/compiler combination. 'plat' defaults to 'os.name'
1070 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
1071 for that platform. Currently only 'posix' and 'nt' are supported, and
1072 the default compilers are "traditional Unix interface" (UnixCCompiler
1073 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
1074 possible to ask for a Unix compiler object under Windows, and a
1075 Microsoft compiler object under Unix -- if you supply a value for
1076 'compiler', 'plat' is ignored.
1077 """
Greg Ward802d6b71999-09-29 12:20:55 +00001078 if plat is None:
1079 plat = os.name
1080
1081 try:
1082 if compiler is None:
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001083 compiler = get_default_compiler(plat)
Fred Drakeb94b8492001-12-06 20:51:35 +00001084
Greg Ward2ff78872000-06-24 00:23:20 +00001085 (module_name, class_name, long_description) = compiler_class[compiler]
Greg Ward802d6b71999-09-29 12:20:55 +00001086 except KeyError:
1087 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
1088 if compiler is not None:
1089 msg = msg + " with '%s' compiler" % compiler
Collin Winter5b7e9d72007-08-30 03:52:21 +00001090 raise DistutilsPlatformError(msg)
Fred Drakeb94b8492001-12-06 20:51:35 +00001091
Greg Ward802d6b71999-09-29 12:20:55 +00001092 try:
1093 module_name = "distutils." + module_name
1094 __import__ (module_name)
1095 module = sys.modules[module_name]
1096 klass = vars(module)[class_name]
1097 except ImportError:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001098 raise DistutilsModuleError(
Greg Ward802d6b71999-09-29 12:20:55 +00001099 "can't compile C/C++ code: unable to load module '%s'" % \
Collin Winter5b7e9d72007-08-30 03:52:21 +00001100 module_name)
Greg Ward802d6b71999-09-29 12:20:55 +00001101 except KeyError:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001102 raise DistutilsModuleError(
1103 "can't compile C/C++ code: unable to find class '%s' "
1104 "in module '%s'" % (class_name, module_name))
Greg Ward802d6b71999-09-29 12:20:55 +00001105
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +00001106 # XXX The None is necessary to preserve backwards compatibility
1107 # with classes that expect verbose to be the first positional
1108 # argument.
Collin Winter5b7e9d72007-08-30 03:52:21 +00001109 return klass(None, dry_run, force)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001110
1111
Collin Winter5b7e9d72007-08-30 03:52:21 +00001112def gen_preprocess_options(macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +00001113 """Generate C pre-processor options (-D, -U, -I) as used by at least
1114 two types of compilers: the typical Unix compiler and Visual C++.
1115 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
1116 means undefine (-U) macro 'name', and (name,value) means define (-D)
1117 macro 'name' to 'value'. 'include_dirs' is just a list of directory
1118 names to be added to the header file search path (-I). Returns a list
1119 of command-line options suitable for either Unix compilers or Visual
1120 C++.
1121 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001122 # XXX it would be nice (mainly aesthetic, and so we don't generate
1123 # stupid-looking command lines) to go over 'macros' and eliminate
1124 # redundant definitions/undefinitions (ie. ensure that only the
1125 # latest mention of a particular macro winds up on the command
1126 # line). I don't think it's essential, though, since most (all?)
1127 # Unix C compilers only pay attention to the latest -D or -U
1128 # mention of a macro on their command line. Similar situation for
Greg Ward0bdd90a1999-12-12 17:19:58 +00001129 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
Greg Wardf7a39ec1999-09-08 02:29:08 +00001130 # redundancies like this should probably be the province of
1131 # CCompiler, since the data structures used are inherited from it
1132 # and therefore common to all CCompiler classes.
Greg Wardf7a39ec1999-09-08 02:29:08 +00001133 pp_opts = []
1134 for macro in macros:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001135 if not (isinstance(macro, tuple) and 1 <= len(macro) <= 2):
1136 raise TypeError(
1137 "bad macro definition '%s': "
1138 "each element of 'macros' list must be a 1- or 2-tuple"
1139 % macro)
Greg Wardfbf8aff1999-09-21 18:35:09 +00001140
Collin Winter5b7e9d72007-08-30 03:52:21 +00001141 if len(macro) == 1: # undefine this macro
1142 pp_opts.append("-U%s" % macro[0])
1143 elif len(macro) == 2:
Greg Wardf7a39ec1999-09-08 02:29:08 +00001144 if macro[1] is None: # define with no explicit value
Collin Winter5b7e9d72007-08-30 03:52:21 +00001145 pp_opts.append("-D%s" % macro[0])
Greg Wardf7a39ec1999-09-08 02:29:08 +00001146 else:
1147 # XXX *don't* need to be clever about quoting the
1148 # macro value here, because we're going to avoid the
1149 # shell at all costs when we spawn the command!
Collin Winter5b7e9d72007-08-30 03:52:21 +00001150 pp_opts.append("-D%s=%s" % macro)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001151
Greg Ward0bdd90a1999-12-12 17:19:58 +00001152 for dir in include_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001153 pp_opts.append("-I%s" % dir)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001154 return pp_opts
1155
Greg Wardf7a39ec1999-09-08 02:29:08 +00001156
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001157def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
Greg Wardf7a39ec1999-09-08 02:29:08 +00001158 """Generate linker options for searching library directories and
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001159 linking with specific libraries.
1160
1161 'libraries' and 'library_dirs' are, respectively, lists of library names
1162 (not filenames!) and search directories. Returns a list of command-line
1163 options suitable for use with some compiler (depending on the two format
1164 strings passed in).
Greg Wardc3a43b42000-06-24 18:10:48 +00001165 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001166 lib_opts = []
1167
1168 for dir in library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001169 lib_opts.append(compiler.library_dir_option(dir))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001170
Greg Wardd03f88a2000-03-18 15:19:51 +00001171 for dir in runtime_library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001172 opt = compiler.runtime_library_dir_option(dir)
1173 if isinstance(opt, list):
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001174 lib_opts.extend(opt)
Martin v. Löwis061f1322004-08-29 16:40:55 +00001175 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001176 lib_opts.append(opt)
Greg Wardd03f88a2000-03-18 15:19:51 +00001177
Greg Wardf7a39ec1999-09-08 02:29:08 +00001178 # XXX it's important that we *not* remove redundant library mentions!
1179 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1180 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1181 # -lbar" to get things to work -- that's certainly a possibility, but a
1182 # pretty nasty way to arrange your C code.
1183
1184 for lib in libraries:
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001185 lib_dir, lib_name = os.path.split(lib)
1186 if lib_dir != '':
Collin Winter5b7e9d72007-08-30 03:52:21 +00001187 lib_file = compiler.find_library_file([lib_dir], lib_name)
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001188 if lib_file is not None:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001189 lib_opts.append(lib_file)
Greg Ward3febd601999-10-03 20:41:02 +00001190 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001191 compiler.warn("no library file corresponding to "
1192 "'%s' found (skipping)" % lib)
Greg Ward3febd601999-10-03 20:41:02 +00001193 else:
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001194 lib_opts.append(compiler.library_option(lib))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001195 return lib_opts