blob: 5a6bef447dd176d5cc1be862674c59caa5e6e6c2 [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
Tarek Ziadéa278be32010-01-11 23:47:51 +000012from distutils.errors import (CompileError, LinkError, UnknownFileError,
13 DistutilsPlatformError, DistutilsModuleError)
Greg Warde1aaaa61999-08-14 23:50:50 +000014from distutils.spawn import spawn
Greg Warde5c62bf2000-06-25 02:08:18 +000015from distutils.file_util import move_file
16from distutils.dir_util import mkpath
Tarek Ziadéa278be32010-01-11 23:47:51 +000017from distutils.dep_util import newer_group
Greg Ward9dddbb42000-08-02 01:38:20 +000018from distutils.util import split_quoted, execute
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +000019from distutils import log
Greg Ward3f81cf71999-07-10 02:03:53 +000020
21class CCompiler:
22 """Abstract base class to define the interface that must be implemented
Greg Wardc3a43b42000-06-24 18:10:48 +000023 by real compiler classes. Also has some utility methods used by
24 several compiler classes.
Greg Ward3f81cf71999-07-10 02:03:53 +000025
Greg Wardc3a43b42000-06-24 18:10:48 +000026 The basic idea behind a compiler abstraction class is that each
27 instance can be used for all the compile/link steps in building a
28 single project. Thus, attributes common to all of those compile and
29 link steps -- include directories, macros to define, libraries to link
30 against, etc. -- are attributes of the compiler instance. To allow for
31 variability in how individual files are treated, most of those
32 attributes may be varied on a per-compilation or per-link basis.
33 """
Greg Ward3f81cf71999-07-10 02:03:53 +000034
Greg Ward802d6b71999-09-29 12:20:55 +000035 # 'compiler_type' is a class attribute that identifies this class. It
36 # keeps code that wants to know what kind of compiler it's dealing with
37 # from having to import all possible compiler classes just to do an
38 # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type'
39 # should really, really be one of the keys of the 'compiler_class'
40 # dictionary (see below -- used by the 'new_compiler()' factory
41 # function) -- authors of new compiler interface classes are
42 # responsible for updating 'compiler_class'!
43 compiler_type = None
Greg Ward3f81cf71999-07-10 02:03:53 +000044
45 # XXX things not handled by this compiler abstraction model:
46 # * client can't provide additional options for a compiler,
47 # e.g. warning, optimization, debugging flags. Perhaps this
48 # should be the domain of concrete compiler abstraction classes
49 # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base
50 # class should have methods for the common ones.
Greg Ward3f81cf71999-07-10 02:03:53 +000051 # * can't completely override the include or library searchg
52 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
Greg Warde1aaaa61999-08-14 23:50:50 +000053 # I'm not sure how widely supported this is even by Unix
Greg Ward3f81cf71999-07-10 02:03:53 +000054 # compilers, much less on other platforms. And I'm even less
Greg Warde1aaaa61999-08-14 23:50:50 +000055 # sure how useful it is; maybe for cross-compiling, but
56 # support for that is a ways off. (And anyways, cross
57 # compilers probably have a dedicated binary with the
58 # right paths compiled in. I hope.)
Greg Ward3f81cf71999-07-10 02:03:53 +000059 # * can't do really freaky things with the library list/library
60 # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against
61 # different versions of libfoo.a in different locations. I
62 # think this is useless without the ability to null out the
63 # library search path anyways.
Fred Drakeb94b8492001-12-06 20:51:35 +000064
Greg Ward3f81cf71999-07-10 02:03:53 +000065
Greg Ward32c4a8a2000-03-06 03:40:29 +000066 # Subclasses that rely on the standard filename generation methods
67 # implemented below should override these; see the comment near
68 # those methods ('object_filenames()' et. al.) for details:
69 src_extensions = None # list of strings
70 obj_extension = None # string
71 static_lib_extension = None
72 shared_lib_extension = None # string
73 static_lib_format = None # format string
74 shared_lib_format = None # prob. same as static_lib_format
75 exe_extension = None # string
76
Gustavo Niemeyer6b016852002-11-05 16:12:02 +000077 # Default language settings. language_map is used to detect a source
78 # file or Extension target language, checking source filenames.
79 # language_order is used to detect the language precedence, when deciding
80 # what language to use when mixing source types. For example, if some
81 # extension has two files with ".c" extension, and one with ".cpp", it
82 # is still linked as c++.
83 language_map = {".c" : "c",
84 ".cc" : "c++",
85 ".cpp" : "c++",
86 ".cxx" : "c++",
87 ".m" : "objc",
88 }
89 language_order = ["c++", "objc", "c"]
Greg Ward32c4a8a2000-03-06 03:40:29 +000090
Collin Winter5b7e9d72007-08-30 03:52:21 +000091 def __init__(self, verbose=0, dry_run=0, force=0):
Greg Warde1aaaa61999-08-14 23:50:50 +000092 self.dry_run = dry_run
Greg Ward3febd601999-10-03 20:41:02 +000093 self.force = force
Skip Montanaro70e1d9b2002-10-01 17:39:59 +000094 self.verbose = verbose
Greg Ward3f81cf71999-07-10 02:03:53 +000095
Greg Ward9b17cb51999-09-13 03:07:24 +000096 # 'output_dir': a common output directory for object, library,
97 # shared object, and shared library files
98 self.output_dir = None
99
Greg Ward3f81cf71999-07-10 02:03:53 +0000100 # 'macros': a list of macro definitions (or undefinitions). A
101 # macro definition is a 2-tuple (name, value), where the value is
102 # either a string or None (no explicit value). A macro
103 # undefinition is a 1-tuple (name,).
104 self.macros = []
105
Greg Ward3f81cf71999-07-10 02:03:53 +0000106 # 'include_dirs': a list of directories to search for include files
107 self.include_dirs = []
108
109 # 'libraries': a list of libraries to include in any link
110 # (library names, not filenames: eg. "foo" not "libfoo.a")
111 self.libraries = []
112
113 # 'library_dirs': a list of directories to search for libraries
114 self.library_dirs = []
115
Greg Warde1aaaa61999-08-14 23:50:50 +0000116 # 'runtime_library_dirs': a list of directories to search for
117 # shared libraries/objects at runtime
118 self.runtime_library_dirs = []
119
Greg Ward3f81cf71999-07-10 02:03:53 +0000120 # 'objects': a list of object files (or similar, such as explicitly
121 # named library files) to include on any link
122 self.objects = []
123
Greg Warde5c62bf2000-06-25 02:08:18 +0000124 for key in self.executables.keys():
125 self.set_executable(key, self.executables[key])
126
Collin Winter5b7e9d72007-08-30 03:52:21 +0000127 def set_executables(self, **kwargs):
Greg Warde5c62bf2000-06-25 02:08:18 +0000128 """Define the executables (and options for them) that will be run
129 to perform the various stages of compilation. The exact set of
130 executables that may be specified here depends on the compiler
131 class (via the 'executables' class attribute), but most will have:
132 compiler the C/C++ compiler
133 linker_so linker used to create shared objects and libraries
134 linker_exe linker used to create binary executables
135 archiver static library creator
136
137 On platforms with a command-line (Unix, DOS/Windows), each of these
138 is a string that will be split into executable name and (optional)
139 list of arguments. (Splitting the string is done similarly to how
140 Unix shells operate: words are delimited by spaces, but quotes and
141 backslashes can override this. See
142 'distutils.util.split_quoted()'.)
143 """
144
145 # Note that some CCompiler implementation classes will define class
146 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
147 # this is appropriate when a compiler class is for exactly one
148 # compiler/OS combination (eg. MSVCCompiler). Other compiler
149 # classes (UnixCCompiler, in particular) are driven by information
150 # discovered at run-time, since there are many different ways to do
151 # basically the same things with Unix C compilers.
152
Christian Heimesc3f30c42008-02-22 16:37:40 +0000153 for key in kwargs:
Guido van Rossume2b70bc2006-08-18 22:13:04 +0000154 if key not in self.executables:
Christian Heimesc3f30c42008-02-22 16:37:40 +0000155 raise ValueError("unknown executable '%s' for class %s" %
Collin Winter5b7e9d72007-08-30 03:52:21 +0000156 (key, self.__class__.__name__))
Christian Heimesc3f30c42008-02-22 16:37:40 +0000157 self.set_executable(key, kwargs[key])
Greg Warde5c62bf2000-06-25 02:08:18 +0000158
159 def set_executable(self, key, value):
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000160 if isinstance(value, str):
Greg Warde5c62bf2000-06-25 02:08:18 +0000161 setattr(self, key, split_quoted(value))
162 else:
163 setattr(self, key, value)
Fred Drakeb94b8492001-12-06 20:51:35 +0000164
Collin Winter5b7e9d72007-08-30 03:52:21 +0000165 def _find_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000166 i = 0
167 for defn in self.macros:
168 if defn[0] == name:
169 return i
Collin Winter5b7e9d72007-08-30 03:52:21 +0000170 i += 1
Greg Ward3f81cf71999-07-10 02:03:53 +0000171 return None
172
Collin Winter5b7e9d72007-08-30 03:52:21 +0000173 def _check_macro_definitions(self, definitions):
Greg Ward3f81cf71999-07-10 02:03:53 +0000174 """Ensures that every element of 'definitions' is a valid macro
Greg Wardc3a43b42000-06-24 18:10:48 +0000175 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
176 nothing if all definitions are OK, raise TypeError otherwise.
177 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000178 for defn in definitions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000179 if not (isinstance(defn, tuple) and
180 (len(defn) in (1, 2) and
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000181 (isinstance (defn[1], str) or defn[1] is None)) and
182 isinstance (defn[0], str)):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000183 raise TypeError(("invalid macro definition '%s': " % defn) + \
Greg Ward3f81cf71999-07-10 02:03:53 +0000184 "must be tuple (string,), (string, string), or " + \
Collin Winter5b7e9d72007-08-30 03:52:21 +0000185 "(string, None)")
Greg Ward3f81cf71999-07-10 02:03:53 +0000186
187
188 # -- Bookkeeping methods -------------------------------------------
189
Collin Winter5b7e9d72007-08-30 03:52:21 +0000190 def define_macro(self, name, value=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000191 """Define a preprocessor macro for all compilations driven by this
192 compiler object. The optional parameter 'value' should be a
193 string; if it is not supplied, then the macro will be defined
194 without an explicit value and the exact outcome depends on the
195 compiler used (XXX true? does ANSI say anything about this?)
196 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000197 # Delete from the list of macro definitions/undefinitions if
198 # already there (so that this one will take precedence).
199 i = self._find_macro (name)
200 if i is not None:
201 del self.macros[i]
202
Collin Winter5b7e9d72007-08-30 03:52:21 +0000203 self.macros.append((name, value))
Greg Ward3f81cf71999-07-10 02:03:53 +0000204
Collin Winter5b7e9d72007-08-30 03:52:21 +0000205 def undefine_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000206 """Undefine a preprocessor macro for all compilations driven by
Greg Wardc3a43b42000-06-24 18:10:48 +0000207 this compiler object. If the same macro is defined by
208 'define_macro()' and undefined by 'undefine_macro()' the last call
209 takes precedence (including multiple redefinitions or
210 undefinitions). If the macro is redefined/undefined on a
211 per-compilation basis (ie. in the call to 'compile()'), then that
212 takes precedence.
213 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000214 # Delete from the list of macro definitions/undefinitions if
215 # already there (so that this one will take precedence).
216 i = self._find_macro (name)
217 if i is not None:
218 del self.macros[i]
219
220 undefn = (name,)
Collin Winter5b7e9d72007-08-30 03:52:21 +0000221 self.macros.append(undefn)
Greg Ward3f81cf71999-07-10 02:03:53 +0000222
Collin Winter5b7e9d72007-08-30 03:52:21 +0000223 def add_include_dir(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000224 """Add 'dir' to the list of directories that will be searched for
225 header files. The compiler is instructed to search directories in
226 the order in which they are supplied by successive calls to
227 'add_include_dir()'.
228 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000229 self.include_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000230
Collin Winter5b7e9d72007-08-30 03:52:21 +0000231 def set_include_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000232 """Set the list of directories that will be searched to 'dirs' (a
233 list of strings). Overrides any preceding calls to
234 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
235 to the list passed to 'set_include_dirs()'. This does not affect
236 any list of standard include directories that the compiler may
237 search by default.
238 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000239 self.include_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000240
Collin Winter5b7e9d72007-08-30 03:52:21 +0000241 def add_library(self, libname):
Greg Wardc3a43b42000-06-24 18:10:48 +0000242 """Add 'libname' to the list of libraries that will be included in
243 all links driven by this compiler object. Note that 'libname'
244 should *not* be the name of a file containing a library, but the
245 name of the library itself: the actual filename will be inferred by
246 the linker, the compiler, or the compiler class (depending on the
247 platform).
Greg Ward3f81cf71999-07-10 02:03:53 +0000248
Greg Wardc3a43b42000-06-24 18:10:48 +0000249 The linker will be instructed to link against libraries in the
250 order they were supplied to 'add_library()' and/or
251 'set_libraries()'. It is perfectly valid to duplicate library
252 names; the linker will be instructed to link against libraries as
253 many times as they are mentioned.
254 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000255 self.libraries.append(libname)
Greg Ward3f81cf71999-07-10 02:03:53 +0000256
Collin Winter5b7e9d72007-08-30 03:52:21 +0000257 def set_libraries(self, libnames):
Greg Wardc3a43b42000-06-24 18:10:48 +0000258 """Set the list of libraries to be included in all links driven by
259 this compiler object to 'libnames' (a list of strings). This does
260 not affect any standard system libraries that the linker may
261 include by default.
262 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000263 self.libraries = libnames[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000264
Collin Winter5b7e9d72007-08-30 03:52:21 +0000265 def add_library_dir(self, dir):
Greg Ward3f81cf71999-07-10 02:03:53 +0000266 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000267 libraries specified to 'add_library()' and 'set_libraries()'. The
268 linker will be instructed to search for libraries in the order they
269 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
270 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000271 self.library_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000272
Collin Winter5b7e9d72007-08-30 03:52:21 +0000273 def set_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000274 """Set the list of library search directories to 'dirs' (a list of
275 strings). This does not affect any standard library search path
276 that the linker may search by default.
277 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000278 self.library_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000279
Collin Winter5b7e9d72007-08-30 03:52:21 +0000280 def add_runtime_library_dir(self, dir):
Greg Warde1aaaa61999-08-14 23:50:50 +0000281 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000282 shared libraries at runtime.
283 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000284 self.runtime_library_dirs.append(dir)
Greg Warde1aaaa61999-08-14 23:50:50 +0000285
Collin Winter5b7e9d72007-08-30 03:52:21 +0000286 def set_runtime_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000287 """Set the list of directories to search for shared libraries at
288 runtime to 'dirs' (a list of strings). This does not affect any
289 standard search path that the runtime linker may search by
290 default.
291 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000292 self.runtime_library_dirs = dirs[:]
Greg Warde1aaaa61999-08-14 23:50:50 +0000293
Collin Winter5b7e9d72007-08-30 03:52:21 +0000294 def add_link_object(self, object):
Greg Wardc3a43b42000-06-24 18:10:48 +0000295 """Add 'object' to the list of object files (or analogues, such as
Greg Ward612eb9f2000-07-27 02:13:20 +0000296 explicitly named library files or the output of "resource
Greg Wardc3a43b42000-06-24 18:10:48 +0000297 compilers") to be included in every link driven by this compiler
298 object.
299 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000300 self.objects.append(object)
Greg Ward3f81cf71999-07-10 02:03:53 +0000301
Collin Winter5b7e9d72007-08-30 03:52:21 +0000302 def set_link_objects(self, objects):
Greg Wardc3a43b42000-06-24 18:10:48 +0000303 """Set the list of object files (or analogues) to be included in
304 every link to 'objects'. This does not affect any standard object
305 files that the linker may include by default (such as system
306 libraries).
307 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000308 self.objects = objects[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000309
310
Thomas Hellere6500802002-04-25 17:03:30 +0000311 # -- Private utility methods --------------------------------------
Greg Ward32c4a8a2000-03-06 03:40:29 +0000312 # (here for the convenience of subclasses)
313
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000314 # Helper method to prep compiler in subclass compile() methods
315
316 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
317 extra):
Tarek Ziadéac4e6ea2010-01-11 23:15:52 +0000318 """Process arguments and decide which source files to compile."""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000319 if outdir is None:
320 outdir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000321 elif not isinstance(outdir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000322 raise TypeError("'output_dir' must be a string or None")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000323
324 if macros is None:
325 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000326 elif isinstance(macros, list):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000327 macros = macros + (self.macros or [])
328 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000329 raise TypeError("'macros' (if supplied) must be a list of tuples")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000330
331 if incdirs is None:
332 incdirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000333 elif isinstance(incdirs, (list, tuple)):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000334 incdirs = list(incdirs) + (self.include_dirs or [])
335 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000336 raise TypeError(
337 "'include_dirs' (if supplied) must be a list of strings")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000338
339 if extra is None:
340 extra = []
341
342 # Get the list of expected output (object) files
Collin Winter5b7e9d72007-08-30 03:52:21 +0000343 objects = self.object_filenames(sources, strip_dir=0,
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000344 output_dir=outdir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000345 assert len(objects) == len(sources)
346
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000347 pp_opts = gen_preprocess_options(macros, incdirs)
348
349 build = {}
350 for i in range(len(sources)):
351 src = sources[i]
352 obj = objects[i]
353 ext = os.path.splitext(src)[1]
354 self.mkpath(os.path.dirname(obj))
Tarek Ziadéac4e6ea2010-01-11 23:15:52 +0000355 build[obj] = (src, ext)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000356
357 return macros, objects, extra, pp_opts, build
358
359 def _get_cc_args(self, pp_opts, debug, before):
360 # works for unixccompiler, emxccompiler, cygwinccompiler
361 cc_args = pp_opts + ['-c']
362 if debug:
363 cc_args[:0] = ['-g']
364 if before:
365 cc_args[:0] = before
366 return cc_args
367
Collin Winter5b7e9d72007-08-30 03:52:21 +0000368 def _fix_compile_args(self, output_dir, macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000369 """Typecheck and fix-up some of the arguments to the 'compile()'
370 method, and return fixed-up values. Specifically: if 'output_dir'
371 is None, replaces it with 'self.output_dir'; ensures that 'macros'
372 is a list, and augments it with 'self.macros'; ensures that
373 'include_dirs' is a list, and augments it with 'self.include_dirs'.
374 Guarantees that the returned values are of the correct type,
375 i.e. for 'output_dir' either string or None, and for 'macros' and
376 'include_dirs' either list or None.
377 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000378 if output_dir is None:
379 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000380 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000381 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000382
383 if macros is None:
384 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000385 elif isinstance(macros, list):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000386 macros = macros + (self.macros or [])
387 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000388 raise TypeError("'macros' (if supplied) must be a list of tuples")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000389
390 if include_dirs is None:
391 include_dirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000392 elif isinstance(include_dirs, (list, tuple)):
393 include_dirs = list(include_dirs) + (self.include_dirs or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000394 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000395 raise TypeError(
396 "'include_dirs' (if supplied) must be a list of strings")
Fred Drakeb94b8492001-12-06 20:51:35 +0000397
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000398 return output_dir, macros, include_dirs
Greg Ward32c4a8a2000-03-06 03:40:29 +0000399
Collin Winter5b7e9d72007-08-30 03:52:21 +0000400 def _fix_object_args(self, objects, output_dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000401 """Typecheck and fix up some arguments supplied to various methods.
402 Specifically: ensure that 'objects' is a list; if output_dir is
403 None, replace with self.output_dir. Return fixed versions of
404 'objects' and 'output_dir'.
405 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000406 if not isinstance(objects, (list, tuple)):
407 raise TypeError("'objects' must be a list or tuple of strings")
408 objects = list(objects)
Fred Drakeb94b8492001-12-06 20:51:35 +0000409
Greg Ward32c4a8a2000-03-06 03:40:29 +0000410 if output_dir is None:
411 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000412 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000413 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000414
Greg Wardf10f95d2000-03-26 21:37:09 +0000415 return (objects, output_dir)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000416
Collin Winter5b7e9d72007-08-30 03:52:21 +0000417 def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
Greg Wardf10f95d2000-03-26 21:37:09 +0000418 """Typecheck and fix up some of the arguments supplied to the
Greg Wardc3a43b42000-06-24 18:10:48 +0000419 'link_*' methods. Specifically: ensure that all arguments are
420 lists, and augment them with their permanent versions
421 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
422 fixed versions of all arguments.
423 """
Greg Wardf10f95d2000-03-26 21:37:09 +0000424 if libraries is None:
425 libraries = self.libraries
Collin Winter5b7e9d72007-08-30 03:52:21 +0000426 elif isinstance(libraries, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000427 libraries = list (libraries) + (self.libraries or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000428 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000429 raise TypeError(
430 "'libraries' (if supplied) must be a list of strings")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000431
Greg Wardf10f95d2000-03-26 21:37:09 +0000432 if library_dirs is None:
433 library_dirs = self.library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000434 elif isinstance(library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000435 library_dirs = list (library_dirs) + (self.library_dirs or [])
436 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000437 raise TypeError(
438 "'library_dirs' (if supplied) must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000439
440 if runtime_library_dirs is None:
441 runtime_library_dirs = self.runtime_library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000442 elif isinstance(runtime_library_dirs, (list, tuple)):
443 runtime_library_dirs = (list(runtime_library_dirs) +
Greg Wardf10f95d2000-03-26 21:37:09 +0000444 (self.runtime_library_dirs or []))
445 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000446 raise TypeError("'runtime_library_dirs' (if supplied) "
447 "must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000448
449 return (libraries, library_dirs, runtime_library_dirs)
450
Collin Winter5b7e9d72007-08-30 03:52:21 +0000451 def _need_link(self, objects, output_file):
Greg Wardc3a43b42000-06-24 18:10:48 +0000452 """Return true if we need to relink the files listed in 'objects'
453 to recreate 'output_file'.
454 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000455 if self.force:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000456 return True
Greg Ward32c4a8a2000-03-06 03:40:29 +0000457 else:
458 if self.dry_run:
459 newer = newer_group (objects, output_file, missing='newer')
460 else:
461 newer = newer_group (objects, output_file)
462 return newer
463
Collin Winter5b7e9d72007-08-30 03:52:21 +0000464 def detect_language(self, sources):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000465 """Detect the language of a given file, or list of files. Uses
466 language_map, and language_order to do the job.
467 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000468 if not isinstance(sources, list):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000469 sources = [sources]
470 lang = None
471 index = len(self.language_order)
472 for source in sources:
473 base, ext = os.path.splitext(source)
474 extlang = self.language_map.get(ext)
475 try:
476 extindex = self.language_order.index(extlang)
477 if extindex < index:
478 lang = extlang
479 index = extindex
480 except ValueError:
481 pass
482 return lang
483
Greg Ward32c4a8a2000-03-06 03:40:29 +0000484
Greg Ward3f81cf71999-07-10 02:03:53 +0000485 # -- Worker methods ------------------------------------------------
486 # (must be implemented by subclasses)
487
Collin Winter5b7e9d72007-08-30 03:52:21 +0000488 def preprocess(self, source, output_file=None, macros=None,
489 include_dirs=None, extra_preargs=None, extra_postargs=None):
Greg Ward3ff3b032000-06-21 02:58:46 +0000490 """Preprocess a single C/C++ source file, named in 'source'.
491 Output will be written to file named 'output_file', or stdout if
492 'output_file' not supplied. 'macros' is a list of macro
493 definitions as for 'compile()', which will augment the macros set
494 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
495 list of directory names that will be added to the default list.
Greg Warde5c62bf2000-06-25 02:08:18 +0000496
497 Raises PreprocessError on failure.
Greg Ward3ff3b032000-06-21 02:58:46 +0000498 """
499 pass
500
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000501 def compile(self, sources, output_dir=None, macros=None,
502 include_dirs=None, debug=0, extra_preargs=None,
503 extra_postargs=None, depends=None):
504 """Compile one or more source files.
505
506 'sources' must be a list of filenames, most likely C/C++
507 files, but in reality anything that can be handled by a
508 particular compiler and compiler class (eg. MSVCCompiler can
509 handle resource files in 'sources'). Return a list of object
510 filenames, one per source filename in 'sources'. Depending on
511 the implementation, not all source files will necessarily be
512 compiled, but all corresponding object filenames will be
513 returned.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000514
Greg Wardc3a43b42000-06-24 18:10:48 +0000515 If 'output_dir' is given, object files will be put under it, while
516 retaining their original path component. That is, "foo/bar.c"
517 normally compiles to "foo/bar.o" (for a Unix implementation); if
518 'output_dir' is "build", then it would compile to
519 "build/foo/bar.o".
Greg Ward3f81cf71999-07-10 02:03:53 +0000520
Greg Wardc3a43b42000-06-24 18:10:48 +0000521 'macros', if given, must be a list of macro definitions. A macro
522 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
523 The former defines a macro; if the value is None, the macro is
524 defined without an explicit value. The 1-tuple case undefines a
525 macro. Later definitions/redefinitions/ undefinitions take
526 precedence.
Greg Ward3f81cf71999-07-10 02:03:53 +0000527
Greg Wardc3a43b42000-06-24 18:10:48 +0000528 'include_dirs', if given, must be a list of strings, the
529 directories to add to the default include file search path for this
530 compilation only.
Greg Ward3c045a52000-02-09 02:16:14 +0000531
Greg Wardc3a43b42000-06-24 18:10:48 +0000532 'debug' is a boolean; if true, the compiler will be instructed to
533 output debug symbols in (or alongside) the object file(s).
Greg Ward802d6b71999-09-29 12:20:55 +0000534
Greg Wardc3a43b42000-06-24 18:10:48 +0000535 'extra_preargs' and 'extra_postargs' are implementation- dependent.
536 On platforms that have the notion of a command-line (e.g. Unix,
537 DOS/Windows), they are most likely lists of strings: extra
538 command-line arguments to prepand/append to the compiler command
539 line. On other platforms, consult the implementation class
540 documentation. In any event, they are intended as an escape hatch
541 for those occasions when the abstract compiler framework doesn't
542 cut the mustard.
Greg Wardd1517112000-05-30 01:56:44 +0000543
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000544 'depends', if given, is a list of filenames that all targets
545 depend on. If a source file is older than any file in
546 depends, then the source file will be recompiled. This
547 supports dependency tracking, but only at a coarse
548 granularity.
549
Greg Wardc3a43b42000-06-24 18:10:48 +0000550 Raises CompileError on failure.
551 """
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000552 # A concrete compiler class can either override this method
553 # entirely or implement _compile().
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000554 macros, objects, extra_postargs, pp_opts, build = \
555 self._setup_compile(output_dir, macros, include_dirs, sources,
556 depends, extra_postargs)
557 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
558
Thomas Heller9436a752003-12-05 20:12:23 +0000559 for obj in objects:
560 try:
561 src, ext = build[obj]
562 except KeyError:
563 continue
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000564 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
565
566 # Return *all* object filenames, not just the ones we just built.
567 return objects
568
569 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
570 """Compile 'src' to product 'obj'."""
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000571 # A concrete compiler class that does not override compile()
572 # should implement _compile().
573 pass
Greg Ward3f81cf71999-07-10 02:03:53 +0000574
Collin Winter5b7e9d72007-08-30 03:52:21 +0000575 def create_static_lib(self, objects, output_libname, output_dir=None,
576 debug=0, target_lang=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000577 """Link a bunch of stuff together to create a static library file.
578 The "bunch of stuff" consists of the list of object files supplied
579 as 'objects', the extra object files supplied to
580 'add_link_object()' and/or 'set_link_objects()', the libraries
581 supplied to 'add_library()' and/or 'set_libraries()', and the
582 libraries supplied as 'libraries' (if any).
Greg Ward3f81cf71999-07-10 02:03:53 +0000583
Greg Wardc3a43b42000-06-24 18:10:48 +0000584 'output_libname' should be a library name, not a filename; the
585 filename will be inferred from the library name. 'output_dir' is
586 the directory where the library file will be put.
Greg Ward3c045a52000-02-09 02:16:14 +0000587
Greg Wardc3a43b42000-06-24 18:10:48 +0000588 'debug' is a boolean; if true, debugging information will be
589 included in the library (note that on most platforms, it is the
590 compile step where this matters: the 'debug' flag is included here
591 just for consistency).
Greg Wardd1517112000-05-30 01:56:44 +0000592
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000593 'target_lang' is the target language for which the given objects
594 are being compiled. This allows specific linkage time treatment of
595 certain languages.
596
Greg Wardc3a43b42000-06-24 18:10:48 +0000597 Raises LibError on failure.
598 """
Greg Ward3c045a52000-02-09 02:16:14 +0000599 pass
Fred Drakeb94b8492001-12-06 20:51:35 +0000600
Greg Ward42406482000-09-27 02:08:14 +0000601 # values for target_desc parameter in link()
602 SHARED_OBJECT = "shared_object"
603 SHARED_LIBRARY = "shared_library"
604 EXECUTABLE = "executable"
605
Tarek Ziadéa278be32010-01-11 23:47:51 +0000606 def link(self, target_desc, objects, output_filename, output_dir=None,
607 libraries=None, library_dirs=None, runtime_library_dirs=None,
608 export_symbols=None, debug=0, extra_preargs=None,
609 extra_postargs=None, build_temp=None, target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000610 """Link a bunch of stuff together to create an executable or
611 shared library file.
612
613 The "bunch of stuff" consists of the list of object files supplied
614 as 'objects'. 'output_filename' should be a filename. If
615 'output_dir' is supplied, 'output_filename' is relative to it
616 (i.e. 'output_filename' can provide directory components if
617 needed).
Greg Ward3febd601999-10-03 20:41:02 +0000618
Greg Wardc3a43b42000-06-24 18:10:48 +0000619 'libraries' is a list of libraries to link against. These are
620 library names, not filenames, since they're translated into
621 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
622 on Unix and "foo.lib" on DOS/Windows). However, they can include a
623 directory component, which means the linker will look in that
624 specific directory rather than searching all the normal locations.
Greg Ward5299b6a2000-05-20 13:23:21 +0000625
Greg Wardc3a43b42000-06-24 18:10:48 +0000626 'library_dirs', if supplied, should be a list of directories to
627 search for libraries that were specified as bare library names
628 (ie. no directory component). These are on top of the system
629 default and those supplied to 'add_library_dir()' and/or
630 'set_library_dirs()'. 'runtime_library_dirs' is a list of
631 directories that will be embedded into the shared library and used
632 to search for other shared libraries that *it* depends on at
633 run-time. (This may only be relevant on Unix.)
Greg Ward802d6b71999-09-29 12:20:55 +0000634
Greg Wardc3a43b42000-06-24 18:10:48 +0000635 'export_symbols' is a list of symbols that the shared library will
636 export. (This appears to be relevant only on Windows.)
Greg Ward3c045a52000-02-09 02:16:14 +0000637
Greg Wardc3a43b42000-06-24 18:10:48 +0000638 'debug' is as for 'compile()' and 'create_static_lib()', with the
639 slight distinction that it actually matters on most platforms (as
640 opposed to 'create_static_lib()', which includes a 'debug' flag
641 mostly for form's sake).
Greg Wardd1517112000-05-30 01:56:44 +0000642
Greg Wardc3a43b42000-06-24 18:10:48 +0000643 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
644 of course that they supply command-line arguments for the
645 particular linker being used).
Greg Ward3f81cf71999-07-10 02:03:53 +0000646
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000647 'target_lang' is the target language for which the given objects
648 are being compiled. This allows specific linkage time treatment of
649 certain languages.
650
Greg Wardc3a43b42000-06-24 18:10:48 +0000651 Raises LinkError on failure.
652 """
Greg Ward42406482000-09-27 02:08:14 +0000653 raise NotImplementedError
654
Fred Drakeb94b8492001-12-06 20:51:35 +0000655
Greg Ward264cf742000-09-27 02:24:21 +0000656 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
Greg Ward42406482000-09-27 02:08:14 +0000657
Tarek Ziadéa278be32010-01-11 23:47:51 +0000658 def link_shared_lib(self, objects, output_libname, output_dir=None,
659 libraries=None, library_dirs=None,
660 runtime_library_dirs=None, export_symbols=None,
661 debug=0, extra_preargs=None, extra_postargs=None,
662 build_temp=None, target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000663 self.link(CCompiler.SHARED_LIBRARY, objects,
Greg Ward42406482000-09-27 02:08:14 +0000664 self.library_filename(output_libname, lib_type='shared'),
665 output_dir,
666 libraries, library_dirs, runtime_library_dirs,
667 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000668 extra_preargs, extra_postargs, build_temp, target_lang)
Fred Drakeb94b8492001-12-06 20:51:35 +0000669
Greg Ward3f81cf71999-07-10 02:03:53 +0000670
Tarek Ziadéa278be32010-01-11 23:47:51 +0000671 def link_shared_object(self, objects, output_filename, output_dir=None,
672 libraries=None, library_dirs=None,
673 runtime_library_dirs=None, export_symbols=None,
674 debug=0, extra_preargs=None, extra_postargs=None,
675 build_temp=None, target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000676 self.link(CCompiler.SHARED_OBJECT, objects,
677 output_filename, output_dir,
678 libraries, library_dirs, runtime_library_dirs,
679 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000680 extra_preargs, extra_postargs, build_temp, target_lang)
Greg Ward3f81cf71999-07-10 02:03:53 +0000681
Greg Warde1aaaa61999-08-14 23:50:50 +0000682
Tarek Ziadéa278be32010-01-11 23:47:51 +0000683 def link_executable(self, objects, output_progname, output_dir=None,
684 libraries=None, library_dirs=None,
685 runtime_library_dirs=None, debug=0, extra_preargs=None,
686 extra_postargs=None, target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000687 self.link(CCompiler.EXECUTABLE, objects,
Greg Ward264cf742000-09-27 02:24:21 +0000688 self.executable_filename(output_progname), output_dir,
Fred Drakeb94b8492001-12-06 20:51:35 +0000689 libraries, library_dirs, runtime_library_dirs, None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000690 debug, extra_preargs, extra_postargs, None, target_lang)
Greg Ward5baf1c22000-01-09 22:41:02 +0000691
692
Greg Wardf7edea72000-05-20 13:31:32 +0000693 # -- Miscellaneous methods -----------------------------------------
694 # These are all used by the 'gen_lib_options() function; there is
695 # no appropriate default implementation so subclasses should
696 # implement all of these.
697
Collin Winter5b7e9d72007-08-30 03:52:21 +0000698 def library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000699 """Return the compiler option to add 'dir' to the list of
700 directories searched for libraries.
701 """
Greg Wardf7edea72000-05-20 13:31:32 +0000702 raise NotImplementedError
703
Collin Winter5b7e9d72007-08-30 03:52:21 +0000704 def runtime_library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000705 """Return the compiler option to add 'dir' to the list of
706 directories searched for runtime libraries.
707 """
Greg Wardf7edea72000-05-20 13:31:32 +0000708 raise NotImplementedError
709
Collin Winter5b7e9d72007-08-30 03:52:21 +0000710 def library_option(self, lib):
Greg Wardf7edea72000-05-20 13:31:32 +0000711 """Return the compiler option to add 'dir' to the list of libraries
Greg Wardc3a43b42000-06-24 18:10:48 +0000712 linked into the shared library or executable.
713 """
Greg Wardf7edea72000-05-20 13:31:32 +0000714 raise NotImplementedError
715
Collin Winter5b7e9d72007-08-30 03:52:21 +0000716 def has_function(self, funcname, includes=None, include_dirs=None,
717 libraries=None, library_dirs=None):
Skip Montanarofa012612003-04-24 19:49:23 +0000718 """Return a boolean indicating whether funcname is supported on
719 the current platform. The optional arguments can be used to
720 augment the compilation environment.
721 """
Skip Montanarofa012612003-04-24 19:49:23 +0000722 # this can't be included at module scope because it tries to
723 # import math which might not be available at that point - maybe
724 # the necessary logic should just be inlined?
725 import tempfile
726 if includes is None:
727 includes = []
728 if include_dirs is None:
729 include_dirs = []
730 if libraries is None:
731 libraries = []
732 if library_dirs is None:
733 library_dirs = []
734 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
735 f = os.fdopen(fd, "w")
736 for incl in includes:
737 f.write("""#include "%s"\n""" % incl)
738 f.write("""\
739main (int argc, char **argv) {
740 %s();
741}
742""" % funcname)
743 f.close()
744 try:
745 objects = self.compile([fname], include_dirs=include_dirs)
746 except CompileError:
747 return False
748
749 try:
750 self.link_executable(objects, "a.out",
751 libraries=libraries,
752 library_dirs=library_dirs)
753 except (LinkError, TypeError):
754 return False
755 return True
756
Greg Warde5e60152000-08-04 01:28:39 +0000757 def find_library_file (self, dirs, lib, debug=0):
Greg Wardf7edea72000-05-20 13:31:32 +0000758 """Search the specified list of directories for a static or shared
Greg Warde5e60152000-08-04 01:28:39 +0000759 library file 'lib' and return the full path to that file. If
760 'debug' true, look for a debugging version (if that makes sense on
761 the current platform). Return None if 'lib' wasn't found in any of
762 the specified directories.
Greg Wardc3a43b42000-06-24 18:10:48 +0000763 """
Greg Wardf7edea72000-05-20 13:31:32 +0000764 raise NotImplementedError
765
Greg Ward32c4a8a2000-03-06 03:40:29 +0000766 # -- Filename generation methods -----------------------------------
Greg Warde1aaaa61999-08-14 23:50:50 +0000767
Greg Ward32c4a8a2000-03-06 03:40:29 +0000768 # The default implementation of the filename generating methods are
769 # prejudiced towards the Unix/DOS/Windows view of the world:
770 # * object files are named by replacing the source file extension
771 # (eg. .c/.cpp -> .o/.obj)
772 # * library files (shared or static) are named by plugging the
773 # library name and extension into a format string, eg.
774 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
775 # * executables are named by appending an extension (possibly
776 # empty) to the program name: eg. progname + ".exe" for
777 # Windows
778 #
779 # To reduce redundant code, these methods expect to find
780 # several attributes in the current object (presumably defined
781 # as class attributes):
782 # * src_extensions -
783 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
784 # * obj_extension -
785 # object file extension, eg. '.o' or '.obj'
786 # * static_lib_extension -
787 # extension for static library files, eg. '.a' or '.lib'
788 # * shared_lib_extension -
789 # extension for shared library/object files, eg. '.so', '.dll'
790 # * static_lib_format -
791 # format string for generating static library filenames,
792 # eg. 'lib%s.%s' or '%s.%s'
793 # * shared_lib_format
794 # format string for generating shared library filenames
795 # (probably same as static_lib_format, since the extension
796 # is one of the intended parameters to the format string)
797 # * exe_extension -
798 # extension for executable files, eg. '' or '.exe'
Greg Ward9b17cb51999-09-13 03:07:24 +0000799
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000800 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
Guido van Rossumcc3a6df2002-10-01 04:14:17 +0000801 if output_dir is None:
802 output_dir = ''
Greg Ward32c4a8a2000-03-06 03:40:29 +0000803 obj_names = []
804 for src_name in source_filenames:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000805 base, ext = os.path.splitext(src_name)
Andrew M. Kuchling10da45e2003-02-26 18:52:07 +0000806 base = os.path.splitdrive(base)[1] # Chop off the drive
807 base = base[os.path.isabs(base):] # If abs, chop off leading /
Greg Ward32c4a8a2000-03-06 03:40:29 +0000808 if ext not in self.src_extensions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000809 raise UnknownFileError(
810 "unknown file type '%s' (from '%s')" % (ext, src_name))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000811 if strip_dir:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000812 base = os.path.basename(base)
813 obj_names.append(os.path.join(output_dir,
814 base + self.obj_extension))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000815 return obj_names
Greg Warde1aaaa61999-08-14 23:50:50 +0000816
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000817 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
818 assert output_dir is not None
Greg Ward32c4a8a2000-03-06 03:40:29 +0000819 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000820 basename = os.path.basename(basename)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000821 return os.path.join(output_dir, basename + self.shared_lib_extension)
Greg Warde1aaaa61999-08-14 23:50:50 +0000822
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000823 def executable_filename(self, basename, strip_dir=0, output_dir=''):
824 assert output_dir is not None
Greg Ward42406482000-09-27 02:08:14 +0000825 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000826 basename = os.path.basename(basename)
Greg Ward42406482000-09-27 02:08:14 +0000827 return os.path.join(output_dir, basename + (self.exe_extension or ''))
Greg Ward26e48ea1999-08-29 18:17:36 +0000828
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000829 def library_filename(self, libname, lib_type='static', # or 'shared'
830 strip_dir=0, output_dir=''):
831 assert output_dir is not None
832 if lib_type not in ("static", "shared", "dylib"):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000833 raise ValueError(
834 "'lib_type' must be \"static\", \"shared\" or \"dylib\"")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000835 fmt = getattr(self, lib_type + "_lib_format")
836 ext = getattr(self, lib_type + "_lib_extension")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000837
Collin Winter5b7e9d72007-08-30 03:52:21 +0000838 dir, base = os.path.split(libname)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000839 filename = fmt % (base, ext)
840 if strip_dir:
841 dir = ''
842
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000843 return os.path.join(output_dir, dir, filename)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000844
Greg Warde1aaaa61999-08-14 23:50:50 +0000845
846 # -- Utility methods -----------------------------------------------
847
Collin Winter5b7e9d72007-08-30 03:52:21 +0000848 def announce(self, msg, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000849 log.debug(msg)
Greg Ward9b17cb51999-09-13 03:07:24 +0000850
Collin Winter5b7e9d72007-08-30 03:52:21 +0000851 def debug_print(self, msg):
Jeremy Hyltonfcd73532002-09-11 16:31:53 +0000852 from distutils.debug import DEBUG
Greg Wardf813e592000-08-04 01:31:13 +0000853 if DEBUG:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000854 print(msg)
Greg Wardf813e592000-08-04 01:31:13 +0000855
Collin Winter5b7e9d72007-08-30 03:52:21 +0000856 def warn(self, msg):
857 sys.stderr.write("warning: %s\n" % msg)
Greg Ward3febd601999-10-03 20:41:02 +0000858
Collin Winter5b7e9d72007-08-30 03:52:21 +0000859 def execute(self, func, args, msg=None, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000860 execute(func, args, msg, self.dry_run)
Greg Ward9dddbb42000-08-02 01:38:20 +0000861
Collin Winter5b7e9d72007-08-30 03:52:21 +0000862 def spawn(self, cmd):
863 spawn(cmd, dry_run=self.dry_run)
Greg Warde1aaaa61999-08-14 23:50:50 +0000864
Collin Winter5b7e9d72007-08-30 03:52:21 +0000865 def move_file(self, src, dst):
866 return move_file(src, dst, dry_run=self.dry_run)
Greg Ward9b17cb51999-09-13 03:07:24 +0000867
Tarek Ziadéa278be32010-01-11 23:47:51 +0000868 def mkpath(self, name, mode=0o777):
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000869 mkpath(name, mode, dry_run=self.dry_run)
Greg Ward3f81cf71999-07-10 02:03:53 +0000870
871
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000872# Map a sys.platform/os.name ('posix', 'nt') to the default compiler
873# type for that platform. Keys are interpreted as re match
874# patterns. Order is important; platform mappings are preferred over
875# OS names.
876_default_compilers = (
877
878 # Platform string mappings
Andrew M. Kuchlinga34dbe02001-02-27 19:13:15 +0000879
880 # on a cygwin built python we can use gcc like an ordinary UNIXish
881 # compiler
882 ('cygwin.*', 'unix'),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000883 ('os2emx', 'emx'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000884
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000885 # OS name mappings
886 ('posix', 'unix'),
887 ('nt', 'msvc'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000888
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000889 )
890
891def get_default_compiler(osname=None, platform=None):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000892 """Determine the default compiler to use for the given platform.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000893
Collin Winter5b7e9d72007-08-30 03:52:21 +0000894 osname should be one of the standard Python OS names (i.e. the
895 ones returned by os.name) and platform the common value
896 returned by sys.platform for the platform in question.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000897
Collin Winter5b7e9d72007-08-30 03:52:21 +0000898 The default values are os.name and sys.platform in case the
899 parameters are not given.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000900 """
901 if osname is None:
902 osname = os.name
903 if platform is None:
904 platform = sys.platform
905 for pattern, compiler in _default_compilers:
906 if re.match(pattern, platform) is not None or \
907 re.match(pattern, osname) is not None:
908 return compiler
909 # Default to Unix compiler
910 return 'unix'
Greg Ward802d6b71999-09-29 12:20:55 +0000911
912# Map compiler types to (module_name, class_name) pairs -- ie. where to
913# find the code that implements an interface to this compiler. (The module
914# is assumed to be in the 'distutils' package.)
Greg Ward2ff78872000-06-24 00:23:20 +0000915compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
916 "standard UNIX-style compiler"),
917 'msvc': ('msvccompiler', 'MSVCCompiler',
918 "Microsoft Visual C++"),
919 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
920 "Cygwin port of GNU C Compiler for Win32"),
921 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
922 "Mingw32 port of GNU C Compiler for Win32"),
Greg Wardbfc79d62000-06-28 01:29:09 +0000923 'bcpp': ('bcppcompiler', 'BCPPCompiler',
924 "Borland C++ Compiler"),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000925 'emx': ('emxccompiler', 'EMXCCompiler',
926 "EMX port of GNU C Compiler for OS/2"),
Greg Ward802d6b71999-09-29 12:20:55 +0000927 }
928
Greg Ward9d17a7a2000-06-07 03:00:06 +0000929def show_compilers():
Greg Ward2ff78872000-06-24 00:23:20 +0000930 """Print list of available compilers (used by the "--help-compiler"
931 options to "build", "build_ext", "build_clib").
932 """
933 # XXX this "knows" that the compiler option it's describing is
934 # "--compiler", which just happens to be the case for the three
935 # commands that use it.
Fred Drakeb94b8492001-12-06 20:51:35 +0000936 from distutils.fancy_getopt import FancyGetopt
Greg Ward2ff78872000-06-24 00:23:20 +0000937 compilers = []
Greg Ward9d17a7a2000-06-07 03:00:06 +0000938 for compiler in compiler_class.keys():
Jeremy Hylton65d6edb2000-07-07 20:45:21 +0000939 compilers.append(("compiler="+compiler, None,
Greg Ward2ff78872000-06-24 00:23:20 +0000940 compiler_class[compiler][2]))
941 compilers.sort()
942 pretty_printer = FancyGetopt(compilers)
Greg Ward9d17a7a2000-06-07 03:00:06 +0000943 pretty_printer.print_help("List of available compilers:")
Fred Drakeb94b8492001-12-06 20:51:35 +0000944
Greg Ward802d6b71999-09-29 12:20:55 +0000945
Collin Winter5b7e9d72007-08-30 03:52:21 +0000946def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0):
Greg Ward802d6b71999-09-29 12:20:55 +0000947 """Generate an instance of some CCompiler subclass for the supplied
Greg Wardc3a43b42000-06-24 18:10:48 +0000948 platform/compiler combination. 'plat' defaults to 'os.name'
949 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
950 for that platform. Currently only 'posix' and 'nt' are supported, and
951 the default compilers are "traditional Unix interface" (UnixCCompiler
952 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
953 possible to ask for a Unix compiler object under Windows, and a
954 Microsoft compiler object under Unix -- if you supply a value for
955 'compiler', 'plat' is ignored.
956 """
Greg Ward802d6b71999-09-29 12:20:55 +0000957 if plat is None:
958 plat = os.name
959
960 try:
961 if compiler is None:
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000962 compiler = get_default_compiler(plat)
Fred Drakeb94b8492001-12-06 20:51:35 +0000963
Greg Ward2ff78872000-06-24 00:23:20 +0000964 (module_name, class_name, long_description) = compiler_class[compiler]
Greg Ward802d6b71999-09-29 12:20:55 +0000965 except KeyError:
966 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
967 if compiler is not None:
968 msg = msg + " with '%s' compiler" % compiler
Collin Winter5b7e9d72007-08-30 03:52:21 +0000969 raise DistutilsPlatformError(msg)
Fred Drakeb94b8492001-12-06 20:51:35 +0000970
Greg Ward802d6b71999-09-29 12:20:55 +0000971 try:
972 module_name = "distutils." + module_name
973 __import__ (module_name)
974 module = sys.modules[module_name]
975 klass = vars(module)[class_name]
976 except ImportError:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000977 raise DistutilsModuleError(
Greg Ward802d6b71999-09-29 12:20:55 +0000978 "can't compile C/C++ code: unable to load module '%s'" % \
Collin Winter5b7e9d72007-08-30 03:52:21 +0000979 module_name)
Greg Ward802d6b71999-09-29 12:20:55 +0000980 except KeyError:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000981 raise DistutilsModuleError(
982 "can't compile C/C++ code: unable to find class '%s' "
983 "in module '%s'" % (class_name, module_name))
Greg Ward802d6b71999-09-29 12:20:55 +0000984
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000985 # XXX The None is necessary to preserve backwards compatibility
986 # with classes that expect verbose to be the first positional
987 # argument.
Collin Winter5b7e9d72007-08-30 03:52:21 +0000988 return klass(None, dry_run, force)
Greg Wardf7a39ec1999-09-08 02:29:08 +0000989
990
Collin Winter5b7e9d72007-08-30 03:52:21 +0000991def gen_preprocess_options(macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000992 """Generate C pre-processor options (-D, -U, -I) as used by at least
993 two types of compilers: the typical Unix compiler and Visual C++.
994 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
995 means undefine (-U) macro 'name', and (name,value) means define (-D)
996 macro 'name' to 'value'. 'include_dirs' is just a list of directory
997 names to be added to the header file search path (-I). Returns a list
998 of command-line options suitable for either Unix compilers or Visual
999 C++.
1000 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001001 # XXX it would be nice (mainly aesthetic, and so we don't generate
1002 # stupid-looking command lines) to go over 'macros' and eliminate
1003 # redundant definitions/undefinitions (ie. ensure that only the
1004 # latest mention of a particular macro winds up on the command
1005 # line). I don't think it's essential, though, since most (all?)
1006 # Unix C compilers only pay attention to the latest -D or -U
1007 # mention of a macro on their command line. Similar situation for
Greg Ward0bdd90a1999-12-12 17:19:58 +00001008 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
Greg Wardf7a39ec1999-09-08 02:29:08 +00001009 # redundancies like this should probably be the province of
1010 # CCompiler, since the data structures used are inherited from it
1011 # and therefore common to all CCompiler classes.
Greg Wardf7a39ec1999-09-08 02:29:08 +00001012 pp_opts = []
1013 for macro in macros:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001014 if not (isinstance(macro, tuple) and 1 <= len(macro) <= 2):
1015 raise TypeError(
1016 "bad macro definition '%s': "
1017 "each element of 'macros' list must be a 1- or 2-tuple"
1018 % macro)
Greg Wardfbf8aff1999-09-21 18:35:09 +00001019
Collin Winter5b7e9d72007-08-30 03:52:21 +00001020 if len(macro) == 1: # undefine this macro
1021 pp_opts.append("-U%s" % macro[0])
1022 elif len(macro) == 2:
Greg Wardf7a39ec1999-09-08 02:29:08 +00001023 if macro[1] is None: # define with no explicit value
Collin Winter5b7e9d72007-08-30 03:52:21 +00001024 pp_opts.append("-D%s" % macro[0])
Greg Wardf7a39ec1999-09-08 02:29:08 +00001025 else:
1026 # XXX *don't* need to be clever about quoting the
1027 # macro value here, because we're going to avoid the
1028 # shell at all costs when we spawn the command!
Collin Winter5b7e9d72007-08-30 03:52:21 +00001029 pp_opts.append("-D%s=%s" % macro)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001030
Greg Ward0bdd90a1999-12-12 17:19:58 +00001031 for dir in include_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001032 pp_opts.append("-I%s" % dir)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001033 return pp_opts
1034
Greg Wardf7a39ec1999-09-08 02:29:08 +00001035
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001036def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
Greg Wardf7a39ec1999-09-08 02:29:08 +00001037 """Generate linker options for searching library directories and
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001038 linking with specific libraries.
1039
1040 'libraries' and 'library_dirs' are, respectively, lists of library names
1041 (not filenames!) and search directories. Returns a list of command-line
1042 options suitable for use with some compiler (depending on the two format
1043 strings passed in).
Greg Wardc3a43b42000-06-24 18:10:48 +00001044 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001045 lib_opts = []
1046
1047 for dir in library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001048 lib_opts.append(compiler.library_dir_option(dir))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001049
Greg Wardd03f88a2000-03-18 15:19:51 +00001050 for dir in runtime_library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001051 opt = compiler.runtime_library_dir_option(dir)
1052 if isinstance(opt, list):
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001053 lib_opts.extend(opt)
Martin v. Löwis061f1322004-08-29 16:40:55 +00001054 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001055 lib_opts.append(opt)
Greg Wardd03f88a2000-03-18 15:19:51 +00001056
Greg Wardf7a39ec1999-09-08 02:29:08 +00001057 # XXX it's important that we *not* remove redundant library mentions!
1058 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1059 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1060 # -lbar" to get things to work -- that's certainly a possibility, but a
1061 # pretty nasty way to arrange your C code.
1062
1063 for lib in libraries:
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001064 lib_dir, lib_name = os.path.split(lib)
1065 if lib_dir != '':
Collin Winter5b7e9d72007-08-30 03:52:21 +00001066 lib_file = compiler.find_library_file([lib_dir], lib_name)
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001067 if lib_file is not None:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001068 lib_opts.append(lib_file)
Greg Ward3febd601999-10-03 20:41:02 +00001069 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001070 compiler.warn("no library file corresponding to "
1071 "'%s' found (skipping)" % lib)
Greg Ward3febd601999-10-03 20:41:02 +00001072 else:
Tarek Ziadécc9144a2009-06-28 21:29:24 +00001073 lib_opts.append(compiler.library_option(lib))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001074 return lib_opts