blob: 291c008f2058a0785412a99eedc3ababc8c010b8 [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
Marc-André Lemburg636b9062001-02-19 09:20:04 +00008import sys, os, re
Greg Ward3f81cf71999-07-10 02:03:53 +00009from distutils.errors import *
Greg Warde1aaaa61999-08-14 23:50:50 +000010from distutils.spawn import spawn
Greg Warde5c62bf2000-06-25 02:08:18 +000011from distutils.file_util import move_file
12from distutils.dir_util import mkpath
13from distutils.dep_util import newer_pairwise, newer_group
Greg Ward9dddbb42000-08-02 01:38:20 +000014from distutils.util import split_quoted, execute
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +000015from distutils import log
Greg Ward3f81cf71999-07-10 02:03:53 +000016
17class CCompiler:
18 """Abstract base class to define the interface that must be implemented
Greg Wardc3a43b42000-06-24 18:10:48 +000019 by real compiler classes. Also has some utility methods used by
20 several compiler classes.
Greg Ward3f81cf71999-07-10 02:03:53 +000021
Greg Wardc3a43b42000-06-24 18:10:48 +000022 The basic idea behind a compiler abstraction class is that each
23 instance can be used for all the compile/link steps in building a
24 single project. Thus, attributes common to all of those compile and
25 link steps -- include directories, macros to define, libraries to link
26 against, etc. -- are attributes of the compiler instance. To allow for
27 variability in how individual files are treated, most of those
28 attributes may be varied on a per-compilation or per-link basis.
29 """
Greg Ward3f81cf71999-07-10 02:03:53 +000030
Greg Ward802d6b71999-09-29 12:20:55 +000031 # 'compiler_type' is a class attribute that identifies this class. It
32 # keeps code that wants to know what kind of compiler it's dealing with
33 # from having to import all possible compiler classes just to do an
34 # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type'
35 # should really, really be one of the keys of the 'compiler_class'
36 # dictionary (see below -- used by the 'new_compiler()' factory
37 # function) -- authors of new compiler interface classes are
38 # responsible for updating 'compiler_class'!
39 compiler_type = None
Greg Ward3f81cf71999-07-10 02:03:53 +000040
41 # XXX things not handled by this compiler abstraction model:
42 # * client can't provide additional options for a compiler,
43 # e.g. warning, optimization, debugging flags. Perhaps this
44 # should be the domain of concrete compiler abstraction classes
45 # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base
46 # class should have methods for the common ones.
Greg Ward3f81cf71999-07-10 02:03:53 +000047 # * can't completely override the include or library searchg
48 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
Greg Warde1aaaa61999-08-14 23:50:50 +000049 # I'm not sure how widely supported this is even by Unix
Greg Ward3f81cf71999-07-10 02:03:53 +000050 # compilers, much less on other platforms. And I'm even less
Greg Warde1aaaa61999-08-14 23:50:50 +000051 # sure how useful it is; maybe for cross-compiling, but
52 # support for that is a ways off. (And anyways, cross
53 # compilers probably have a dedicated binary with the
54 # right paths compiled in. I hope.)
Greg Ward3f81cf71999-07-10 02:03:53 +000055 # * can't do really freaky things with the library list/library
56 # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against
57 # different versions of libfoo.a in different locations. I
58 # think this is useless without the ability to null out the
59 # library search path anyways.
Fred Drakeb94b8492001-12-06 20:51:35 +000060
Greg Ward3f81cf71999-07-10 02:03:53 +000061
Greg Ward32c4a8a2000-03-06 03:40:29 +000062 # Subclasses that rely on the standard filename generation methods
63 # implemented below should override these; see the comment near
64 # those methods ('object_filenames()' et. al.) for details:
65 src_extensions = None # list of strings
66 obj_extension = None # string
67 static_lib_extension = None
68 shared_lib_extension = None # string
69 static_lib_format = None # format string
70 shared_lib_format = None # prob. same as static_lib_format
71 exe_extension = None # string
72
Gustavo Niemeyer6b016852002-11-05 16:12:02 +000073 # Default language settings. language_map is used to detect a source
74 # file or Extension target language, checking source filenames.
75 # language_order is used to detect the language precedence, when deciding
76 # what language to use when mixing source types. For example, if some
77 # extension has two files with ".c" extension, and one with ".cpp", it
78 # is still linked as c++.
79 language_map = {".c" : "c",
80 ".cc" : "c++",
81 ".cpp" : "c++",
82 ".cxx" : "c++",
83 ".m" : "objc",
84 }
85 language_order = ["c++", "objc", "c"]
Greg Ward32c4a8a2000-03-06 03:40:29 +000086
Collin Winter5b7e9d72007-08-30 03:52:21 +000087 def __init__(self, verbose=0, dry_run=0, force=0):
Greg Warde1aaaa61999-08-14 23:50:50 +000088 self.dry_run = dry_run
Greg Ward3febd601999-10-03 20:41:02 +000089 self.force = force
Skip Montanaro70e1d9b2002-10-01 17:39:59 +000090 self.verbose = verbose
Greg Ward3f81cf71999-07-10 02:03:53 +000091
Greg Ward9b17cb51999-09-13 03:07:24 +000092 # 'output_dir': a common output directory for object, library,
93 # shared object, and shared library files
94 self.output_dir = None
95
Greg Ward3f81cf71999-07-10 02:03:53 +000096 # 'macros': a list of macro definitions (or undefinitions). A
97 # macro definition is a 2-tuple (name, value), where the value is
98 # either a string or None (no explicit value). A macro
99 # undefinition is a 1-tuple (name,).
100 self.macros = []
101
Greg Ward3f81cf71999-07-10 02:03:53 +0000102 # 'include_dirs': a list of directories to search for include files
103 self.include_dirs = []
104
105 # 'libraries': a list of libraries to include in any link
106 # (library names, not filenames: eg. "foo" not "libfoo.a")
107 self.libraries = []
108
109 # 'library_dirs': a list of directories to search for libraries
110 self.library_dirs = []
111
Greg Warde1aaaa61999-08-14 23:50:50 +0000112 # 'runtime_library_dirs': a list of directories to search for
113 # shared libraries/objects at runtime
114 self.runtime_library_dirs = []
115
Greg Ward3f81cf71999-07-10 02:03:53 +0000116 # 'objects': a list of object files (or similar, such as explicitly
117 # named library files) to include on any link
118 self.objects = []
119
Greg Warde5c62bf2000-06-25 02:08:18 +0000120 for key in self.executables.keys():
121 self.set_executable(key, self.executables[key])
122
Collin Winter5b7e9d72007-08-30 03:52:21 +0000123 def set_executables(self, **kwargs):
Greg Warde5c62bf2000-06-25 02:08:18 +0000124 """Define the executables (and options for them) that will be run
125 to perform the various stages of compilation. The exact set of
126 executables that may be specified here depends on the compiler
127 class (via the 'executables' class attribute), but most will have:
128 compiler the C/C++ compiler
129 linker_so linker used to create shared objects and libraries
130 linker_exe linker used to create binary executables
131 archiver static library creator
132
133 On platforms with a command-line (Unix, DOS/Windows), each of these
134 is a string that will be split into executable name and (optional)
135 list of arguments. (Splitting the string is done similarly to how
136 Unix shells operate: words are delimited by spaces, but quotes and
137 backslashes can override this. See
138 'distutils.util.split_quoted()'.)
139 """
140
141 # Note that some CCompiler implementation classes will define class
142 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
143 # this is appropriate when a compiler class is for exactly one
144 # compiler/OS combination (eg. MSVCCompiler). Other compiler
145 # classes (UnixCCompiler, in particular) are driven by information
146 # discovered at run-time, since there are many different ways to do
147 # basically the same things with Unix C compilers.
148
Christian Heimesc3f30c42008-02-22 16:37:40 +0000149 for key in kwargs:
Guido van Rossume2b70bc2006-08-18 22:13:04 +0000150 if key not in self.executables:
Christian Heimesc3f30c42008-02-22 16:37:40 +0000151 raise ValueError("unknown executable '%s' for class %s" %
Collin Winter5b7e9d72007-08-30 03:52:21 +0000152 (key, self.__class__.__name__))
Christian Heimesc3f30c42008-02-22 16:37:40 +0000153 self.set_executable(key, kwargs[key])
Greg Warde5c62bf2000-06-25 02:08:18 +0000154
155 def set_executable(self, key, value):
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000156 if isinstance(value, str):
Greg Warde5c62bf2000-06-25 02:08:18 +0000157 setattr(self, key, split_quoted(value))
158 else:
159 setattr(self, key, value)
Fred Drakeb94b8492001-12-06 20:51:35 +0000160
Collin Winter5b7e9d72007-08-30 03:52:21 +0000161 def _find_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000162 i = 0
163 for defn in self.macros:
164 if defn[0] == name:
165 return i
Collin Winter5b7e9d72007-08-30 03:52:21 +0000166 i += 1
Greg Ward3f81cf71999-07-10 02:03:53 +0000167 return None
168
Collin Winter5b7e9d72007-08-30 03:52:21 +0000169 def _check_macro_definitions(self, definitions):
Greg Ward3f81cf71999-07-10 02:03:53 +0000170 """Ensures that every element of 'definitions' is a valid macro
Greg Wardc3a43b42000-06-24 18:10:48 +0000171 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
172 nothing if all definitions are OK, raise TypeError otherwise.
173 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000174 for defn in definitions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000175 if not (isinstance(defn, tuple) and
176 (len(defn) in (1, 2) and
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000177 (isinstance (defn[1], str) or defn[1] is None)) and
178 isinstance (defn[0], str)):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000179 raise TypeError(("invalid macro definition '%s': " % defn) + \
Greg Ward3f81cf71999-07-10 02:03:53 +0000180 "must be tuple (string,), (string, string), or " + \
Collin Winter5b7e9d72007-08-30 03:52:21 +0000181 "(string, None)")
Greg Ward3f81cf71999-07-10 02:03:53 +0000182
183
184 # -- Bookkeeping methods -------------------------------------------
185
Collin Winter5b7e9d72007-08-30 03:52:21 +0000186 def define_macro(self, name, value=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000187 """Define a preprocessor macro for all compilations driven by this
188 compiler object. The optional parameter 'value' should be a
189 string; if it is not supplied, then the macro will be defined
190 without an explicit value and the exact outcome depends on the
191 compiler used (XXX true? does ANSI say anything about this?)
192 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000193 # Delete from the list of macro definitions/undefinitions if
194 # already there (so that this one will take precedence).
195 i = self._find_macro (name)
196 if i is not None:
197 del self.macros[i]
198
Collin Winter5b7e9d72007-08-30 03:52:21 +0000199 self.macros.append((name, value))
Greg Ward3f81cf71999-07-10 02:03:53 +0000200
Collin Winter5b7e9d72007-08-30 03:52:21 +0000201 def undefine_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000202 """Undefine a preprocessor macro for all compilations driven by
Greg Wardc3a43b42000-06-24 18:10:48 +0000203 this compiler object. If the same macro is defined by
204 'define_macro()' and undefined by 'undefine_macro()' the last call
205 takes precedence (including multiple redefinitions or
206 undefinitions). If the macro is redefined/undefined on a
207 per-compilation basis (ie. in the call to 'compile()'), then that
208 takes precedence.
209 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000210 # Delete from the list of macro definitions/undefinitions if
211 # already there (so that this one will take precedence).
212 i = self._find_macro (name)
213 if i is not None:
214 del self.macros[i]
215
216 undefn = (name,)
Collin Winter5b7e9d72007-08-30 03:52:21 +0000217 self.macros.append(undefn)
Greg Ward3f81cf71999-07-10 02:03:53 +0000218
Collin Winter5b7e9d72007-08-30 03:52:21 +0000219 def add_include_dir(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000220 """Add 'dir' to the list of directories that will be searched for
221 header files. The compiler is instructed to search directories in
222 the order in which they are supplied by successive calls to
223 'add_include_dir()'.
224 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000225 self.include_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000226
Collin Winter5b7e9d72007-08-30 03:52:21 +0000227 def set_include_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000228 """Set the list of directories that will be searched to 'dirs' (a
229 list of strings). Overrides any preceding calls to
230 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
231 to the list passed to 'set_include_dirs()'. This does not affect
232 any list of standard include directories that the compiler may
233 search by default.
234 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000235 self.include_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000236
Collin Winter5b7e9d72007-08-30 03:52:21 +0000237 def add_library(self, libname):
Greg Wardc3a43b42000-06-24 18:10:48 +0000238 """Add 'libname' to the list of libraries that will be included in
239 all links driven by this compiler object. Note that 'libname'
240 should *not* be the name of a file containing a library, but the
241 name of the library itself: the actual filename will be inferred by
242 the linker, the compiler, or the compiler class (depending on the
243 platform).
Greg Ward3f81cf71999-07-10 02:03:53 +0000244
Greg Wardc3a43b42000-06-24 18:10:48 +0000245 The linker will be instructed to link against libraries in the
246 order they were supplied to 'add_library()' and/or
247 'set_libraries()'. It is perfectly valid to duplicate library
248 names; the linker will be instructed to link against libraries as
249 many times as they are mentioned.
250 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000251 self.libraries.append(libname)
Greg Ward3f81cf71999-07-10 02:03:53 +0000252
Collin Winter5b7e9d72007-08-30 03:52:21 +0000253 def set_libraries(self, libnames):
Greg Wardc3a43b42000-06-24 18:10:48 +0000254 """Set the list of libraries to be included in all links driven by
255 this compiler object to 'libnames' (a list of strings). This does
256 not affect any standard system libraries that the linker may
257 include by default.
258 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000259 self.libraries = libnames[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000260
Collin Winter5b7e9d72007-08-30 03:52:21 +0000261 def add_library_dir(self, dir):
Greg Ward3f81cf71999-07-10 02:03:53 +0000262 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000263 libraries specified to 'add_library()' and 'set_libraries()'. The
264 linker will be instructed to search for libraries in the order they
265 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
266 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000267 self.library_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000268
Collin Winter5b7e9d72007-08-30 03:52:21 +0000269 def set_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000270 """Set the list of library search directories to 'dirs' (a list of
271 strings). This does not affect any standard library search path
272 that the linker may search by default.
273 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000274 self.library_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000275
Collin Winter5b7e9d72007-08-30 03:52:21 +0000276 def add_runtime_library_dir(self, dir):
Greg Warde1aaaa61999-08-14 23:50:50 +0000277 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000278 shared libraries at runtime.
279 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000280 self.runtime_library_dirs.append(dir)
Greg Warde1aaaa61999-08-14 23:50:50 +0000281
Collin Winter5b7e9d72007-08-30 03:52:21 +0000282 def set_runtime_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000283 """Set the list of directories to search for shared libraries at
284 runtime to 'dirs' (a list of strings). This does not affect any
285 standard search path that the runtime linker may search by
286 default.
287 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000288 self.runtime_library_dirs = dirs[:]
Greg Warde1aaaa61999-08-14 23:50:50 +0000289
Collin Winter5b7e9d72007-08-30 03:52:21 +0000290 def add_link_object(self, object):
Greg Wardc3a43b42000-06-24 18:10:48 +0000291 """Add 'object' to the list of object files (or analogues, such as
Greg Ward612eb9f2000-07-27 02:13:20 +0000292 explicitly named library files or the output of "resource
Greg Wardc3a43b42000-06-24 18:10:48 +0000293 compilers") to be included in every link driven by this compiler
294 object.
295 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000296 self.objects.append(object)
Greg Ward3f81cf71999-07-10 02:03:53 +0000297
Collin Winter5b7e9d72007-08-30 03:52:21 +0000298 def set_link_objects(self, objects):
Greg Wardc3a43b42000-06-24 18:10:48 +0000299 """Set the list of object files (or analogues) to be included in
300 every link to 'objects'. This does not affect any standard object
301 files that the linker may include by default (such as system
302 libraries).
303 """
Antoine Pitrou56a00de2009-05-15 17:34:21 +0000304 self.objects = objects[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000305
306
Thomas Hellere6500802002-04-25 17:03:30 +0000307 # -- Private utility methods --------------------------------------
Greg Ward32c4a8a2000-03-06 03:40:29 +0000308 # (here for the convenience of subclasses)
309
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000310 # Helper method to prep compiler in subclass compile() methods
311
312 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
313 extra):
Tarek Ziadé343e2ff2010-01-11 23:23:44 +0000314 """Process arguments and decide which source files to compile."""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000315 if outdir is None:
316 outdir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000317 elif not isinstance(outdir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000318 raise TypeError("'output_dir' must be a string or None")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000319
320 if macros is None:
321 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000322 elif isinstance(macros, list):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000323 macros = macros + (self.macros or [])
324 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000325 raise TypeError("'macros' (if supplied) must be a list of tuples")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000326
327 if incdirs is None:
328 incdirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000329 elif isinstance(incdirs, (list, tuple)):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000330 incdirs = list(incdirs) + (self.include_dirs or [])
331 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000332 raise TypeError(
333 "'include_dirs' (if supplied) must be a list of strings")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000334
335 if extra is None:
336 extra = []
337
338 # Get the list of expected output (object) files
Collin Winter5b7e9d72007-08-30 03:52:21 +0000339 objects = self.object_filenames(sources, strip_dir=0,
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000340 output_dir=outdir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000341 assert len(objects) == len(sources)
342
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000343 pp_opts = gen_preprocess_options(macros, incdirs)
344
345 build = {}
346 for i in range(len(sources)):
347 src = sources[i]
348 obj = objects[i]
349 ext = os.path.splitext(src)[1]
350 self.mkpath(os.path.dirname(obj))
Tarek Ziadé343e2ff2010-01-11 23:23:44 +0000351 build[obj] = (src, ext)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000352
353 return macros, objects, extra, pp_opts, build
354
355 def _get_cc_args(self, pp_opts, debug, before):
356 # works for unixccompiler, emxccompiler, cygwinccompiler
357 cc_args = pp_opts + ['-c']
358 if debug:
359 cc_args[:0] = ['-g']
360 if before:
361 cc_args[:0] = before
362 return cc_args
363
Collin Winter5b7e9d72007-08-30 03:52:21 +0000364 def _fix_compile_args(self, output_dir, macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000365 """Typecheck and fix-up some of the arguments to the 'compile()'
366 method, and return fixed-up values. Specifically: if 'output_dir'
367 is None, replaces it with 'self.output_dir'; ensures that 'macros'
368 is a list, and augments it with 'self.macros'; ensures that
369 'include_dirs' is a list, and augments it with 'self.include_dirs'.
370 Guarantees that the returned values are of the correct type,
371 i.e. for 'output_dir' either string or None, and for 'macros' and
372 'include_dirs' either list or None.
373 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000374 if output_dir is None:
375 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000376 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000377 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000378
379 if macros is None:
380 macros = self.macros
Collin Winter5b7e9d72007-08-30 03:52:21 +0000381 elif isinstance(macros, list):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000382 macros = macros + (self.macros or [])
383 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000384 raise TypeError("'macros' (if supplied) must be a list of tuples")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000385
386 if include_dirs is None:
387 include_dirs = self.include_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000388 elif isinstance(include_dirs, (list, tuple)):
389 include_dirs = list(include_dirs) + (self.include_dirs or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000390 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000391 raise TypeError(
392 "'include_dirs' (if supplied) must be a list of strings")
Fred Drakeb94b8492001-12-06 20:51:35 +0000393
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000394 return output_dir, macros, include_dirs
Greg Ward32c4a8a2000-03-06 03:40:29 +0000395
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000396 def _prep_compile(self, sources, output_dir, depends=None):
397 """Decide which souce files must be recompiled.
398
399 Determine the list of object files corresponding to 'sources',
400 and figure out which ones really need to be recompiled.
401 Return a list of all object files and a dictionary telling
402 which source files can be skipped.
Greg Wardc3a43b42000-06-24 18:10:48 +0000403 """
Fred Drakeb94b8492001-12-06 20:51:35 +0000404 # Get the list of expected output (object) files
Thomas Wouters477c8d52006-05-27 19:21:47 +0000405 objects = self.object_filenames(sources, output_dir=output_dir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000406 assert len(objects) == len(sources)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000407
Tarek Ziadé343e2ff2010-01-11 23:23:44 +0000408 # Return an empty dict for the "which source files can be skipped"
409 # return value to preserve API compatibility.
410 return objects, {}
Greg Ward32c4a8a2000-03-06 03:40:29 +0000411
Collin Winter5b7e9d72007-08-30 03:52:21 +0000412 def _fix_object_args(self, objects, output_dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000413 """Typecheck and fix up some arguments supplied to various methods.
414 Specifically: ensure that 'objects' is a list; if output_dir is
415 None, replace with self.output_dir. Return fixed versions of
416 'objects' and 'output_dir'.
417 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000418 if not isinstance(objects, (list, tuple)):
419 raise TypeError("'objects' must be a list or tuple of strings")
420 objects = list(objects)
Fred Drakeb94b8492001-12-06 20:51:35 +0000421
Greg Ward32c4a8a2000-03-06 03:40:29 +0000422 if output_dir is None:
423 output_dir = self.output_dir
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000424 elif not isinstance(output_dir, str):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000425 raise TypeError("'output_dir' must be a string or None")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000426
Greg Wardf10f95d2000-03-26 21:37:09 +0000427 return (objects, output_dir)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000428
Collin Winter5b7e9d72007-08-30 03:52:21 +0000429 def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
Greg Wardf10f95d2000-03-26 21:37:09 +0000430 """Typecheck and fix up some of the arguments supplied to the
Greg Wardc3a43b42000-06-24 18:10:48 +0000431 'link_*' methods. Specifically: ensure that all arguments are
432 lists, and augment them with their permanent versions
433 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
434 fixed versions of all arguments.
435 """
Greg Wardf10f95d2000-03-26 21:37:09 +0000436 if libraries is None:
437 libraries = self.libraries
Collin Winter5b7e9d72007-08-30 03:52:21 +0000438 elif isinstance(libraries, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000439 libraries = list (libraries) + (self.libraries or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000440 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000441 raise TypeError(
442 "'libraries' (if supplied) must be a list of strings")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000443
Greg Wardf10f95d2000-03-26 21:37:09 +0000444 if library_dirs is None:
445 library_dirs = self.library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000446 elif isinstance(library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000447 library_dirs = list (library_dirs) + (self.library_dirs or [])
448 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000449 raise TypeError(
450 "'library_dirs' (if supplied) must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000451
452 if runtime_library_dirs is None:
453 runtime_library_dirs = self.runtime_library_dirs
Collin Winter5b7e9d72007-08-30 03:52:21 +0000454 elif isinstance(runtime_library_dirs, (list, tuple)):
455 runtime_library_dirs = (list(runtime_library_dirs) +
Greg Wardf10f95d2000-03-26 21:37:09 +0000456 (self.runtime_library_dirs or []))
457 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000458 raise TypeError("'runtime_library_dirs' (if supplied) "
459 "must be a list of strings")
Greg Wardf10f95d2000-03-26 21:37:09 +0000460
461 return (libraries, library_dirs, runtime_library_dirs)
462
Collin Winter5b7e9d72007-08-30 03:52:21 +0000463 def _need_link(self, objects, output_file):
Greg Wardc3a43b42000-06-24 18:10:48 +0000464 """Return true if we need to relink the files listed in 'objects'
465 to recreate 'output_file'.
466 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000467 if self.force:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000468 return True
Greg Ward32c4a8a2000-03-06 03:40:29 +0000469 else:
470 if self.dry_run:
471 newer = newer_group (objects, output_file, missing='newer')
472 else:
473 newer = newer_group (objects, output_file)
474 return newer
475
Collin Winter5b7e9d72007-08-30 03:52:21 +0000476 def detect_language(self, sources):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000477 """Detect the language of a given file, or list of files. Uses
478 language_map, and language_order to do the job.
479 """
Collin Winter5b7e9d72007-08-30 03:52:21 +0000480 if not isinstance(sources, list):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000481 sources = [sources]
482 lang = None
483 index = len(self.language_order)
484 for source in sources:
485 base, ext = os.path.splitext(source)
486 extlang = self.language_map.get(ext)
487 try:
488 extindex = self.language_order.index(extlang)
489 if extindex < index:
490 lang = extlang
491 index = extindex
492 except ValueError:
493 pass
494 return lang
495
Greg Ward32c4a8a2000-03-06 03:40:29 +0000496
Greg Ward3f81cf71999-07-10 02:03:53 +0000497 # -- Worker methods ------------------------------------------------
498 # (must be implemented by subclasses)
499
Collin Winter5b7e9d72007-08-30 03:52:21 +0000500 def preprocess(self, source, output_file=None, macros=None,
501 include_dirs=None, extra_preargs=None, extra_postargs=None):
Greg Ward3ff3b032000-06-21 02:58:46 +0000502 """Preprocess a single C/C++ source file, named in 'source'.
503 Output will be written to file named 'output_file', or stdout if
504 'output_file' not supplied. 'macros' is a list of macro
505 definitions as for 'compile()', which will augment the macros set
506 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
507 list of directory names that will be added to the default list.
Greg Warde5c62bf2000-06-25 02:08:18 +0000508
509 Raises PreprocessError on failure.
Greg Ward3ff3b032000-06-21 02:58:46 +0000510 """
511 pass
512
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000513 def compile(self, sources, output_dir=None, macros=None,
514 include_dirs=None, debug=0, extra_preargs=None,
515 extra_postargs=None, depends=None):
516 """Compile one or more source files.
517
518 'sources' must be a list of filenames, most likely C/C++
519 files, but in reality anything that can be handled by a
520 particular compiler and compiler class (eg. MSVCCompiler can
521 handle resource files in 'sources'). Return a list of object
522 filenames, one per source filename in 'sources'. Depending on
523 the implementation, not all source files will necessarily be
524 compiled, but all corresponding object filenames will be
525 returned.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000526
Greg Wardc3a43b42000-06-24 18:10:48 +0000527 If 'output_dir' is given, object files will be put under it, while
528 retaining their original path component. That is, "foo/bar.c"
529 normally compiles to "foo/bar.o" (for a Unix implementation); if
530 'output_dir' is "build", then it would compile to
531 "build/foo/bar.o".
Greg Ward3f81cf71999-07-10 02:03:53 +0000532
Greg Wardc3a43b42000-06-24 18:10:48 +0000533 'macros', if given, must be a list of macro definitions. A macro
534 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
535 The former defines a macro; if the value is None, the macro is
536 defined without an explicit value. The 1-tuple case undefines a
537 macro. Later definitions/redefinitions/ undefinitions take
538 precedence.
Greg Ward3f81cf71999-07-10 02:03:53 +0000539
Greg Wardc3a43b42000-06-24 18:10:48 +0000540 'include_dirs', if given, must be a list of strings, the
541 directories to add to the default include file search path for this
542 compilation only.
Greg Ward3c045a52000-02-09 02:16:14 +0000543
Greg Wardc3a43b42000-06-24 18:10:48 +0000544 'debug' is a boolean; if true, the compiler will be instructed to
545 output debug symbols in (or alongside) the object file(s).
Greg Ward802d6b71999-09-29 12:20:55 +0000546
Greg Wardc3a43b42000-06-24 18:10:48 +0000547 'extra_preargs' and 'extra_postargs' are implementation- dependent.
548 On platforms that have the notion of a command-line (e.g. Unix,
549 DOS/Windows), they are most likely lists of strings: extra
550 command-line arguments to prepand/append to the compiler command
551 line. On other platforms, consult the implementation class
552 documentation. In any event, they are intended as an escape hatch
553 for those occasions when the abstract compiler framework doesn't
554 cut the mustard.
Greg Wardd1517112000-05-30 01:56:44 +0000555
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000556 'depends', if given, is a list of filenames that all targets
557 depend on. If a source file is older than any file in
558 depends, then the source file will be recompiled. This
559 supports dependency tracking, but only at a coarse
560 granularity.
561
Greg Wardc3a43b42000-06-24 18:10:48 +0000562 Raises CompileError on failure.
563 """
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000564 # A concrete compiler class can either override this method
565 # entirely or implement _compile().
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000566 macros, objects, extra_postargs, pp_opts, build = \
567 self._setup_compile(output_dir, macros, include_dirs, sources,
568 depends, extra_postargs)
569 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
570
Thomas Heller9436a752003-12-05 20:12:23 +0000571 for obj in objects:
572 try:
573 src, ext = build[obj]
574 except KeyError:
575 continue
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000576 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
577
578 # Return *all* object filenames, not just the ones we just built.
579 return objects
580
581 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
582 """Compile 'src' to product 'obj'."""
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000583 # A concrete compiler class that does not override compile()
584 # should implement _compile().
585 pass
Greg Ward3f81cf71999-07-10 02:03:53 +0000586
Collin Winter5b7e9d72007-08-30 03:52:21 +0000587 def create_static_lib(self, objects, output_libname, output_dir=None,
588 debug=0, target_lang=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000589 """Link a bunch of stuff together to create a static library file.
590 The "bunch of stuff" consists of the list of object files supplied
591 as 'objects', the extra object files supplied to
592 'add_link_object()' and/or 'set_link_objects()', the libraries
593 supplied to 'add_library()' and/or 'set_libraries()', and the
594 libraries supplied as 'libraries' (if any).
Greg Ward3f81cf71999-07-10 02:03:53 +0000595
Greg Wardc3a43b42000-06-24 18:10:48 +0000596 'output_libname' should be a library name, not a filename; the
597 filename will be inferred from the library name. 'output_dir' is
598 the directory where the library file will be put.
Greg Ward3c045a52000-02-09 02:16:14 +0000599
Greg Wardc3a43b42000-06-24 18:10:48 +0000600 'debug' is a boolean; if true, debugging information will be
601 included in the library (note that on most platforms, it is the
602 compile step where this matters: the 'debug' flag is included here
603 just for consistency).
Greg Wardd1517112000-05-30 01:56:44 +0000604
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000605 'target_lang' is the target language for which the given objects
606 are being compiled. This allows specific linkage time treatment of
607 certain languages.
608
Greg Wardc3a43b42000-06-24 18:10:48 +0000609 Raises LibError on failure.
610 """
Greg Ward3c045a52000-02-09 02:16:14 +0000611 pass
Fred Drakeb94b8492001-12-06 20:51:35 +0000612
Greg Ward3c045a52000-02-09 02:16:14 +0000613
Greg Ward42406482000-09-27 02:08:14 +0000614 # values for target_desc parameter in link()
615 SHARED_OBJECT = "shared_object"
616 SHARED_LIBRARY = "shared_library"
617 EXECUTABLE = "executable"
618
Collin Winter5b7e9d72007-08-30 03:52:21 +0000619 def link(self,
620 target_desc,
621 objects,
622 output_filename,
623 output_dir=None,
624 libraries=None,
625 library_dirs=None,
626 runtime_library_dirs=None,
627 export_symbols=None,
628 debug=0,
629 extra_preargs=None,
630 extra_postargs=None,
631 build_temp=None,
632 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000633 """Link a bunch of stuff together to create an executable or
634 shared library file.
635
636 The "bunch of stuff" consists of the list of object files supplied
637 as 'objects'. 'output_filename' should be a filename. If
638 'output_dir' is supplied, 'output_filename' is relative to it
639 (i.e. 'output_filename' can provide directory components if
640 needed).
Greg Ward3febd601999-10-03 20:41:02 +0000641
Greg Wardc3a43b42000-06-24 18:10:48 +0000642 'libraries' is a list of libraries to link against. These are
643 library names, not filenames, since they're translated into
644 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
645 on Unix and "foo.lib" on DOS/Windows). However, they can include a
646 directory component, which means the linker will look in that
647 specific directory rather than searching all the normal locations.
Greg Ward5299b6a2000-05-20 13:23:21 +0000648
Greg Wardc3a43b42000-06-24 18:10:48 +0000649 'library_dirs', if supplied, should be a list of directories to
650 search for libraries that were specified as bare library names
651 (ie. no directory component). These are on top of the system
652 default and those supplied to 'add_library_dir()' and/or
653 'set_library_dirs()'. 'runtime_library_dirs' is a list of
654 directories that will be embedded into the shared library and used
655 to search for other shared libraries that *it* depends on at
656 run-time. (This may only be relevant on Unix.)
Greg Ward802d6b71999-09-29 12:20:55 +0000657
Greg Wardc3a43b42000-06-24 18:10:48 +0000658 'export_symbols' is a list of symbols that the shared library will
659 export. (This appears to be relevant only on Windows.)
Greg Ward3c045a52000-02-09 02:16:14 +0000660
Greg Wardc3a43b42000-06-24 18:10:48 +0000661 'debug' is as for 'compile()' and 'create_static_lib()', with the
662 slight distinction that it actually matters on most platforms (as
663 opposed to 'create_static_lib()', which includes a 'debug' flag
664 mostly for form's sake).
Greg Wardd1517112000-05-30 01:56:44 +0000665
Greg Wardc3a43b42000-06-24 18:10:48 +0000666 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
667 of course that they supply command-line arguments for the
668 particular linker being used).
Greg Ward3f81cf71999-07-10 02:03:53 +0000669
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000670 'target_lang' is the target language for which the given objects
671 are being compiled. This allows specific linkage time treatment of
672 certain languages.
673
Greg Wardc3a43b42000-06-24 18:10:48 +0000674 Raises LinkError on failure.
675 """
Greg Ward42406482000-09-27 02:08:14 +0000676 raise NotImplementedError
677
Fred Drakeb94b8492001-12-06 20:51:35 +0000678
Greg Ward264cf742000-09-27 02:24:21 +0000679 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
Greg Ward42406482000-09-27 02:08:14 +0000680
Collin Winter5b7e9d72007-08-30 03:52:21 +0000681 def link_shared_lib(self,
682 objects,
683 output_libname,
684 output_dir=None,
685 libraries=None,
686 library_dirs=None,
687 runtime_library_dirs=None,
688 export_symbols=None,
689 debug=0,
690 extra_preargs=None,
691 extra_postargs=None,
692 build_temp=None,
693 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000694 self.link(CCompiler.SHARED_LIBRARY, objects,
Greg Ward42406482000-09-27 02:08:14 +0000695 self.library_filename(output_libname, lib_type='shared'),
696 output_dir,
697 libraries, library_dirs, runtime_library_dirs,
698 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000699 extra_preargs, extra_postargs, build_temp, target_lang)
Fred Drakeb94b8492001-12-06 20:51:35 +0000700
Greg Ward3f81cf71999-07-10 02:03:53 +0000701
Collin Winter5b7e9d72007-08-30 03:52:21 +0000702 def link_shared_object(self,
703 objects,
704 output_filename,
705 output_dir=None,
706 libraries=None,
707 library_dirs=None,
708 runtime_library_dirs=None,
709 export_symbols=None,
710 debug=0,
711 extra_preargs=None,
712 extra_postargs=None,
713 build_temp=None,
714 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000715 self.link(CCompiler.SHARED_OBJECT, objects,
716 output_filename, output_dir,
717 libraries, library_dirs, runtime_library_dirs,
718 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000719 extra_preargs, extra_postargs, build_temp, target_lang)
Greg Ward3f81cf71999-07-10 02:03:53 +0000720
Greg Warde1aaaa61999-08-14 23:50:50 +0000721
Collin Winter5b7e9d72007-08-30 03:52:21 +0000722 def link_executable(self,
723 objects,
724 output_progname,
725 output_dir=None,
726 libraries=None,
727 library_dirs=None,
728 runtime_library_dirs=None,
729 debug=0,
730 extra_preargs=None,
731 extra_postargs=None,
732 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000733 self.link(CCompiler.EXECUTABLE, objects,
Greg Ward264cf742000-09-27 02:24:21 +0000734 self.executable_filename(output_progname), output_dir,
Fred Drakeb94b8492001-12-06 20:51:35 +0000735 libraries, library_dirs, runtime_library_dirs, None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000736 debug, extra_preargs, extra_postargs, None, target_lang)
Greg Ward5baf1c22000-01-09 22:41:02 +0000737
738
Greg Wardf7edea72000-05-20 13:31:32 +0000739 # -- Miscellaneous methods -----------------------------------------
740 # These are all used by the 'gen_lib_options() function; there is
741 # no appropriate default implementation so subclasses should
742 # implement all of these.
743
Collin Winter5b7e9d72007-08-30 03:52:21 +0000744 def library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000745 """Return the compiler option to add 'dir' to the list of
746 directories searched for libraries.
747 """
Greg Wardf7edea72000-05-20 13:31:32 +0000748 raise NotImplementedError
749
Collin Winter5b7e9d72007-08-30 03:52:21 +0000750 def runtime_library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000751 """Return the compiler option to add 'dir' to the list of
752 directories searched for runtime libraries.
753 """
Greg Wardf7edea72000-05-20 13:31:32 +0000754 raise NotImplementedError
755
Collin Winter5b7e9d72007-08-30 03:52:21 +0000756 def library_option(self, lib):
Greg Wardf7edea72000-05-20 13:31:32 +0000757 """Return the compiler option to add 'dir' to the list of libraries
Greg Wardc3a43b42000-06-24 18:10:48 +0000758 linked into the shared library or executable.
759 """
Greg Wardf7edea72000-05-20 13:31:32 +0000760 raise NotImplementedError
761
Collin Winter5b7e9d72007-08-30 03:52:21 +0000762 def has_function(self, funcname, includes=None, include_dirs=None,
763 libraries=None, library_dirs=None):
Skip Montanarofa012612003-04-24 19:49:23 +0000764 """Return a boolean indicating whether funcname is supported on
765 the current platform. The optional arguments can be used to
766 augment the compilation environment.
767 """
Skip Montanarofa012612003-04-24 19:49:23 +0000768 # this can't be included at module scope because it tries to
769 # import math which might not be available at that point - maybe
770 # the necessary logic should just be inlined?
771 import tempfile
772 if includes is None:
773 includes = []
774 if include_dirs is None:
775 include_dirs = []
776 if libraries is None:
777 libraries = []
778 if library_dirs is None:
779 library_dirs = []
780 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
781 f = os.fdopen(fd, "w")
Éric Araujoc6d7ead2010-11-06 02:58:56 +0000782 try:
783 for incl in includes:
784 f.write("""#include "%s"\n""" % incl)
785 f.write("""\
Skip Montanarofa012612003-04-24 19:49:23 +0000786main (int argc, char **argv) {
787 %s();
788}
789""" % funcname)
Éric Araujoc6d7ead2010-11-06 02:58:56 +0000790 finally:
791 f.close()
Skip Montanarofa012612003-04-24 19:49:23 +0000792 try:
793 objects = self.compile([fname], include_dirs=include_dirs)
794 except CompileError:
795 return False
796
797 try:
798 self.link_executable(objects, "a.out",
799 libraries=libraries,
800 library_dirs=library_dirs)
801 except (LinkError, TypeError):
802 return False
803 return True
804
Greg Warde5e60152000-08-04 01:28:39 +0000805 def find_library_file (self, dirs, lib, debug=0):
Greg Wardf7edea72000-05-20 13:31:32 +0000806 """Search the specified list of directories for a static or shared
Greg Warde5e60152000-08-04 01:28:39 +0000807 library file 'lib' and return the full path to that file. If
808 'debug' true, look for a debugging version (if that makes sense on
809 the current platform). Return None if 'lib' wasn't found in any of
810 the specified directories.
Greg Wardc3a43b42000-06-24 18:10:48 +0000811 """
Greg Wardf7edea72000-05-20 13:31:32 +0000812 raise NotImplementedError
813
Greg Ward32c4a8a2000-03-06 03:40:29 +0000814 # -- Filename generation methods -----------------------------------
Greg Warde1aaaa61999-08-14 23:50:50 +0000815
Greg Ward32c4a8a2000-03-06 03:40:29 +0000816 # The default implementation of the filename generating methods are
817 # prejudiced towards the Unix/DOS/Windows view of the world:
818 # * object files are named by replacing the source file extension
819 # (eg. .c/.cpp -> .o/.obj)
820 # * library files (shared or static) are named by plugging the
821 # library name and extension into a format string, eg.
822 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
823 # * executables are named by appending an extension (possibly
824 # empty) to the program name: eg. progname + ".exe" for
825 # Windows
826 #
827 # To reduce redundant code, these methods expect to find
828 # several attributes in the current object (presumably defined
829 # as class attributes):
830 # * src_extensions -
831 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
832 # * obj_extension -
833 # object file extension, eg. '.o' or '.obj'
834 # * static_lib_extension -
835 # extension for static library files, eg. '.a' or '.lib'
836 # * shared_lib_extension -
837 # extension for shared library/object files, eg. '.so', '.dll'
838 # * static_lib_format -
839 # format string for generating static library filenames,
840 # eg. 'lib%s.%s' or '%s.%s'
841 # * shared_lib_format
842 # format string for generating shared library filenames
843 # (probably same as static_lib_format, since the extension
844 # is one of the intended parameters to the format string)
845 # * exe_extension -
846 # extension for executable files, eg. '' or '.exe'
Greg Ward9b17cb51999-09-13 03:07:24 +0000847
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000848 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
Guido van Rossumcc3a6df2002-10-01 04:14:17 +0000849 if output_dir is None:
850 output_dir = ''
Greg Ward32c4a8a2000-03-06 03:40:29 +0000851 obj_names = []
852 for src_name in source_filenames:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000853 base, ext = os.path.splitext(src_name)
Andrew M. Kuchling10da45e2003-02-26 18:52:07 +0000854 base = os.path.splitdrive(base)[1] # Chop off the drive
855 base = base[os.path.isabs(base):] # If abs, chop off leading /
Greg Ward32c4a8a2000-03-06 03:40:29 +0000856 if ext not in self.src_extensions:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000857 raise UnknownFileError(
858 "unknown file type '%s' (from '%s')" % (ext, src_name))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000859 if strip_dir:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000860 base = os.path.basename(base)
861 obj_names.append(os.path.join(output_dir,
862 base + self.obj_extension))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000863 return obj_names
Greg Warde1aaaa61999-08-14 23:50:50 +0000864
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000865 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
866 assert output_dir is not None
Greg Ward32c4a8a2000-03-06 03:40:29 +0000867 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000868 basename = os.path.basename(basename)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000869 return os.path.join(output_dir, basename + self.shared_lib_extension)
Greg Warde1aaaa61999-08-14 23:50:50 +0000870
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000871 def executable_filename(self, basename, strip_dir=0, output_dir=''):
872 assert output_dir is not None
Greg Ward42406482000-09-27 02:08:14 +0000873 if strip_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +0000874 basename = os.path.basename(basename)
Greg Ward42406482000-09-27 02:08:14 +0000875 return os.path.join(output_dir, basename + (self.exe_extension or ''))
Greg Ward26e48ea1999-08-29 18:17:36 +0000876
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000877 def library_filename(self, libname, lib_type='static', # or 'shared'
878 strip_dir=0, output_dir=''):
879 assert output_dir is not None
880 if lib_type not in ("static", "shared", "dylib"):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000881 raise ValueError(
882 "'lib_type' must be \"static\", \"shared\" or \"dylib\"")
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000883 fmt = getattr(self, lib_type + "_lib_format")
884 ext = getattr(self, lib_type + "_lib_extension")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000885
Collin Winter5b7e9d72007-08-30 03:52:21 +0000886 dir, base = os.path.split(libname)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000887 filename = fmt % (base, ext)
888 if strip_dir:
889 dir = ''
890
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000891 return os.path.join(output_dir, dir, filename)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000892
Greg Warde1aaaa61999-08-14 23:50:50 +0000893
894 # -- Utility methods -----------------------------------------------
895
Collin Winter5b7e9d72007-08-30 03:52:21 +0000896 def announce(self, msg, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000897 log.debug(msg)
Greg Ward9b17cb51999-09-13 03:07:24 +0000898
Collin Winter5b7e9d72007-08-30 03:52:21 +0000899 def debug_print(self, msg):
Jeremy Hyltonfcd73532002-09-11 16:31:53 +0000900 from distutils.debug import DEBUG
Greg Wardf813e592000-08-04 01:31:13 +0000901 if DEBUG:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000902 print(msg)
Greg Wardf813e592000-08-04 01:31:13 +0000903
Collin Winter5b7e9d72007-08-30 03:52:21 +0000904 def warn(self, msg):
905 sys.stderr.write("warning: %s\n" % msg)
Greg Ward3febd601999-10-03 20:41:02 +0000906
Collin Winter5b7e9d72007-08-30 03:52:21 +0000907 def execute(self, func, args, msg=None, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000908 execute(func, args, msg, self.dry_run)
Greg Ward9dddbb42000-08-02 01:38:20 +0000909
Collin Winter5b7e9d72007-08-30 03:52:21 +0000910 def spawn(self, cmd):
911 spawn(cmd, dry_run=self.dry_run)
Greg Warde1aaaa61999-08-14 23:50:50 +0000912
Collin Winter5b7e9d72007-08-30 03:52:21 +0000913 def move_file(self, src, dst):
914 return move_file(src, dst, dry_run=self.dry_run)
Greg Ward9b17cb51999-09-13 03:07:24 +0000915
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +0000916 def mkpath (self, name, mode=0o777):
917 mkpath(name, mode, dry_run=self.dry_run)
Greg Ward3f81cf71999-07-10 02:03:53 +0000918
919
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000920# Map a sys.platform/os.name ('posix', 'nt') to the default compiler
921# type for that platform. Keys are interpreted as re match
922# patterns. Order is important; platform mappings are preferred over
923# OS names.
924_default_compilers = (
925
926 # Platform string mappings
Andrew M. Kuchlinga34dbe02001-02-27 19:13:15 +0000927
928 # on a cygwin built python we can use gcc like an ordinary UNIXish
929 # compiler
930 ('cygwin.*', 'unix'),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000931 ('os2emx', 'emx'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000932
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000933 # OS name mappings
934 ('posix', 'unix'),
935 ('nt', 'msvc'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000936
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000937 )
938
939def get_default_compiler(osname=None, platform=None):
Collin Winter5b7e9d72007-08-30 03:52:21 +0000940 """Determine the default compiler to use for the given platform.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000941
Collin Winter5b7e9d72007-08-30 03:52:21 +0000942 osname should be one of the standard Python OS names (i.e. the
943 ones returned by os.name) and platform the common value
944 returned by sys.platform for the platform in question.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000945
Collin Winter5b7e9d72007-08-30 03:52:21 +0000946 The default values are os.name and sys.platform in case the
947 parameters are not given.
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000948 """
949 if osname is None:
950 osname = os.name
951 if platform is None:
952 platform = sys.platform
953 for pattern, compiler in _default_compilers:
954 if re.match(pattern, platform) is not None or \
955 re.match(pattern, osname) is not None:
956 return compiler
957 # Default to Unix compiler
958 return 'unix'
Greg Ward802d6b71999-09-29 12:20:55 +0000959
960# Map compiler types to (module_name, class_name) pairs -- ie. where to
961# find the code that implements an interface to this compiler. (The module
962# is assumed to be in the 'distutils' package.)
Greg Ward2ff78872000-06-24 00:23:20 +0000963compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
964 "standard UNIX-style compiler"),
965 'msvc': ('msvccompiler', 'MSVCCompiler',
966 "Microsoft Visual C++"),
967 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
968 "Cygwin port of GNU C Compiler for Win32"),
969 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
970 "Mingw32 port of GNU C Compiler for Win32"),
Greg Wardbfc79d62000-06-28 01:29:09 +0000971 'bcpp': ('bcppcompiler', 'BCPPCompiler',
972 "Borland C++ Compiler"),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000973 'emx': ('emxccompiler', 'EMXCCompiler',
974 "EMX port of GNU C Compiler for OS/2"),
Greg Ward802d6b71999-09-29 12:20:55 +0000975 }
976
Greg Ward9d17a7a2000-06-07 03:00:06 +0000977def show_compilers():
Greg Ward2ff78872000-06-24 00:23:20 +0000978 """Print list of available compilers (used by the "--help-compiler"
979 options to "build", "build_ext", "build_clib").
980 """
981 # XXX this "knows" that the compiler option it's describing is
982 # "--compiler", which just happens to be the case for the three
983 # commands that use it.
Fred Drakeb94b8492001-12-06 20:51:35 +0000984 from distutils.fancy_getopt import FancyGetopt
Greg Ward2ff78872000-06-24 00:23:20 +0000985 compilers = []
Greg Ward9d17a7a2000-06-07 03:00:06 +0000986 for compiler in compiler_class.keys():
Jeremy Hylton65d6edb2000-07-07 20:45:21 +0000987 compilers.append(("compiler="+compiler, None,
Greg Ward2ff78872000-06-24 00:23:20 +0000988 compiler_class[compiler][2]))
989 compilers.sort()
990 pretty_printer = FancyGetopt(compilers)
Greg Ward9d17a7a2000-06-07 03:00:06 +0000991 pretty_printer.print_help("List of available compilers:")
Fred Drakeb94b8492001-12-06 20:51:35 +0000992
Greg Ward802d6b71999-09-29 12:20:55 +0000993
Collin Winter5b7e9d72007-08-30 03:52:21 +0000994def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0):
Greg Ward802d6b71999-09-29 12:20:55 +0000995 """Generate an instance of some CCompiler subclass for the supplied
Greg Wardc3a43b42000-06-24 18:10:48 +0000996 platform/compiler combination. 'plat' defaults to 'os.name'
997 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
998 for that platform. Currently only 'posix' and 'nt' are supported, and
999 the default compilers are "traditional Unix interface" (UnixCCompiler
1000 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
1001 possible to ask for a Unix compiler object under Windows, and a
1002 Microsoft compiler object under Unix -- if you supply a value for
1003 'compiler', 'plat' is ignored.
1004 """
Greg Ward802d6b71999-09-29 12:20:55 +00001005 if plat is None:
1006 plat = os.name
1007
1008 try:
1009 if compiler is None:
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001010 compiler = get_default_compiler(plat)
Fred Drakeb94b8492001-12-06 20:51:35 +00001011
Greg Ward2ff78872000-06-24 00:23:20 +00001012 (module_name, class_name, long_description) = compiler_class[compiler]
Greg Ward802d6b71999-09-29 12:20:55 +00001013 except KeyError:
1014 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
1015 if compiler is not None:
1016 msg = msg + " with '%s' compiler" % compiler
Collin Winter5b7e9d72007-08-30 03:52:21 +00001017 raise DistutilsPlatformError(msg)
Fred Drakeb94b8492001-12-06 20:51:35 +00001018
Greg Ward802d6b71999-09-29 12:20:55 +00001019 try:
1020 module_name = "distutils." + module_name
1021 __import__ (module_name)
1022 module = sys.modules[module_name]
1023 klass = vars(module)[class_name]
1024 except ImportError:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001025 raise DistutilsModuleError(
Greg Ward802d6b71999-09-29 12:20:55 +00001026 "can't compile C/C++ code: unable to load module '%s'" % \
Collin Winter5b7e9d72007-08-30 03:52:21 +00001027 module_name)
Greg Ward802d6b71999-09-29 12:20:55 +00001028 except KeyError:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001029 raise DistutilsModuleError(
1030 "can't compile C/C++ code: unable to find class '%s' "
1031 "in module '%s'" % (class_name, module_name))
Greg Ward802d6b71999-09-29 12:20:55 +00001032
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +00001033 # XXX The None is necessary to preserve backwards compatibility
1034 # with classes that expect verbose to be the first positional
1035 # argument.
Collin Winter5b7e9d72007-08-30 03:52:21 +00001036 return klass(None, dry_run, force)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001037
1038
Collin Winter5b7e9d72007-08-30 03:52:21 +00001039def gen_preprocess_options(macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +00001040 """Generate C pre-processor options (-D, -U, -I) as used by at least
1041 two types of compilers: the typical Unix compiler and Visual C++.
1042 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
1043 means undefine (-U) macro 'name', and (name,value) means define (-D)
1044 macro 'name' to 'value'. 'include_dirs' is just a list of directory
1045 names to be added to the header file search path (-I). Returns a list
1046 of command-line options suitable for either Unix compilers or Visual
1047 C++.
1048 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001049 # XXX it would be nice (mainly aesthetic, and so we don't generate
1050 # stupid-looking command lines) to go over 'macros' and eliminate
1051 # redundant definitions/undefinitions (ie. ensure that only the
1052 # latest mention of a particular macro winds up on the command
1053 # line). I don't think it's essential, though, since most (all?)
1054 # Unix C compilers only pay attention to the latest -D or -U
1055 # mention of a macro on their command line. Similar situation for
Greg Ward0bdd90a1999-12-12 17:19:58 +00001056 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
Greg Wardf7a39ec1999-09-08 02:29:08 +00001057 # redundancies like this should probably be the province of
1058 # CCompiler, since the data structures used are inherited from it
1059 # and therefore common to all CCompiler classes.
Greg Wardf7a39ec1999-09-08 02:29:08 +00001060 pp_opts = []
1061 for macro in macros:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001062 if not (isinstance(macro, tuple) and 1 <= len(macro) <= 2):
1063 raise TypeError(
1064 "bad macro definition '%s': "
1065 "each element of 'macros' list must be a 1- or 2-tuple"
1066 % macro)
Greg Wardfbf8aff1999-09-21 18:35:09 +00001067
Collin Winter5b7e9d72007-08-30 03:52:21 +00001068 if len(macro) == 1: # undefine this macro
1069 pp_opts.append("-U%s" % macro[0])
1070 elif len(macro) == 2:
Greg Wardf7a39ec1999-09-08 02:29:08 +00001071 if macro[1] is None: # define with no explicit value
Collin Winter5b7e9d72007-08-30 03:52:21 +00001072 pp_opts.append("-D%s" % macro[0])
Greg Wardf7a39ec1999-09-08 02:29:08 +00001073 else:
1074 # XXX *don't* need to be clever about quoting the
1075 # macro value here, because we're going to avoid the
1076 # shell at all costs when we spawn the command!
Collin Winter5b7e9d72007-08-30 03:52:21 +00001077 pp_opts.append("-D%s=%s" % macro)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001078
Greg Ward0bdd90a1999-12-12 17:19:58 +00001079 for dir in include_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001080 pp_opts.append("-I%s" % dir)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001081 return pp_opts
1082
Greg Wardf7a39ec1999-09-08 02:29:08 +00001083
Greg Wardd03f88a2000-03-18 15:19:51 +00001084def gen_lib_options (compiler, library_dirs, runtime_library_dirs, libraries):
Greg Wardf7a39ec1999-09-08 02:29:08 +00001085 """Generate linker options for searching library directories and
Greg Wardc3a43b42000-06-24 18:10:48 +00001086 linking with specific libraries. 'libraries' and 'library_dirs' are,
1087 respectively, lists of library names (not filenames!) and search
1088 directories. Returns a list of command-line options suitable for use
1089 with some compiler (depending on the two format strings passed in).
1090 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001091 lib_opts = []
1092
1093 for dir in library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001094 lib_opts.append(compiler.library_dir_option(dir))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001095
Greg Wardd03f88a2000-03-18 15:19:51 +00001096 for dir in runtime_library_dirs:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001097 opt = compiler.runtime_library_dir_option(dir)
1098 if isinstance(opt, list):
Martin v. Löwis061f1322004-08-29 16:40:55 +00001099 lib_opts = lib_opts + opt
1100 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001101 lib_opts.append(opt)
Greg Wardd03f88a2000-03-18 15:19:51 +00001102
Greg Wardf7a39ec1999-09-08 02:29:08 +00001103 # XXX it's important that we *not* remove redundant library mentions!
1104 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1105 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1106 # -lbar" to get things to work -- that's certainly a possibility, but a
1107 # pretty nasty way to arrange your C code.
1108
1109 for lib in libraries:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001110 (lib_dir, lib_name) = os.path.split(lib)
Greg Ward3febd601999-10-03 20:41:02 +00001111 if lib_dir:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001112 lib_file = compiler.find_library_file([lib_dir], lib_name)
Greg Ward3febd601999-10-03 20:41:02 +00001113 if lib_file:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001114 lib_opts.append(lib_file)
Greg Ward3febd601999-10-03 20:41:02 +00001115 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001116 compiler.warn("no library file corresponding to "
1117 "'%s' found (skipping)" % lib)
Greg Ward3febd601999-10-03 20:41:02 +00001118 else:
Collin Winter5b7e9d72007-08-30 03:52:21 +00001119 lib_opts.append(compiler.library_option (lib))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001120 return lib_opts