blob: 83ba83a02b6892b14212975f1446a4ff45c7d09d [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é2b66da72009-12-21 01:22:46 +00008import sys
9import os
10import re
11
12from distutils.errors import CompileError, LinkError, UnknownFileError
Greg Warde1aaaa61999-08-14 23:50:50 +000013from distutils.spawn import spawn
Greg Warde5c62bf2000-06-25 02:08:18 +000014from distutils.file_util import move_file
15from distutils.dir_util import mkpath
16from distutils.dep_util import newer_pairwise, newer_group
Greg Ward9dddbb42000-08-02 01:38:20 +000017from distutils.util import split_quoted, execute
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +000018from distutils import log
Greg Ward3f81cf71999-07-10 02:03:53 +000019
20class CCompiler:
21 """Abstract base class to define the interface that must be implemented
Greg Wardc3a43b42000-06-24 18:10:48 +000022 by real compiler classes. Also has some utility methods used by
23 several compiler classes.
Greg Ward3f81cf71999-07-10 02:03:53 +000024
Greg Wardc3a43b42000-06-24 18:10:48 +000025 The basic idea behind a compiler abstraction class is that each
26 instance can be used for all the compile/link steps in building a
27 single project. Thus, attributes common to all of those compile and
28 link steps -- include directories, macros to define, libraries to link
29 against, etc. -- are attributes of the compiler instance. To allow for
30 variability in how individual files are treated, most of those
31 attributes may be varied on a per-compilation or per-link basis.
32 """
Greg Ward3f81cf71999-07-10 02:03:53 +000033
Greg Ward802d6b71999-09-29 12:20:55 +000034 # 'compiler_type' is a class attribute that identifies this class. It
35 # keeps code that wants to know what kind of compiler it's dealing with
36 # from having to import all possible compiler classes just to do an
37 # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type'
38 # should really, really be one of the keys of the 'compiler_class'
39 # dictionary (see below -- used by the 'new_compiler()' factory
40 # function) -- authors of new compiler interface classes are
41 # responsible for updating 'compiler_class'!
42 compiler_type = None
Greg Ward3f81cf71999-07-10 02:03:53 +000043
44 # XXX things not handled by this compiler abstraction model:
45 # * client can't provide additional options for a compiler,
46 # e.g. warning, optimization, debugging flags. Perhaps this
47 # should be the domain of concrete compiler abstraction classes
48 # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base
49 # class should have methods for the common ones.
Greg Ward3f81cf71999-07-10 02:03:53 +000050 # * can't completely override the include or library searchg
51 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
Greg Warde1aaaa61999-08-14 23:50:50 +000052 # I'm not sure how widely supported this is even by Unix
Greg Ward3f81cf71999-07-10 02:03:53 +000053 # compilers, much less on other platforms. And I'm even less
Greg Warde1aaaa61999-08-14 23:50:50 +000054 # sure how useful it is; maybe for cross-compiling, but
55 # support for that is a ways off. (And anyways, cross
56 # compilers probably have a dedicated binary with the
57 # right paths compiled in. I hope.)
Greg Ward3f81cf71999-07-10 02:03:53 +000058 # * can't do really freaky things with the library list/library
59 # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against
60 # different versions of libfoo.a in different locations. I
61 # think this is useless without the ability to null out the
62 # library search path anyways.
Fred Drakeb94b8492001-12-06 20:51:35 +000063
Greg Ward3f81cf71999-07-10 02:03:53 +000064
Greg Ward32c4a8a2000-03-06 03:40:29 +000065 # Subclasses that rely on the standard filename generation methods
66 # implemented below should override these; see the comment near
67 # those methods ('object_filenames()' et. al.) for details:
68 src_extensions = None # list of strings
69 obj_extension = None # string
70 static_lib_extension = None
71 shared_lib_extension = None # string
72 static_lib_format = None # format string
73 shared_lib_format = None # prob. same as static_lib_format
74 exe_extension = None # string
75
Gustavo Niemeyer6b016852002-11-05 16:12:02 +000076 # Default language settings. language_map is used to detect a source
77 # file or Extension target language, checking source filenames.
78 # language_order is used to detect the language precedence, when deciding
79 # what language to use when mixing source types. For example, if some
80 # extension has two files with ".c" extension, and one with ".cpp", it
81 # is still linked as c++.
82 language_map = {".c" : "c",
83 ".cc" : "c++",
84 ".cpp" : "c++",
85 ".cxx" : "c++",
86 ".m" : "objc",
87 }
88 language_order = ["c++", "objc", "c"]
Greg Ward32c4a8a2000-03-06 03:40:29 +000089
Greg Warde1aaaa61999-08-14 23:50:50 +000090 def __init__ (self,
91 verbose=0,
Greg Ward3febd601999-10-03 20:41:02 +000092 dry_run=0,
93 force=0):
Greg Warde1aaaa61999-08-14 23:50:50 +000094
Greg Warde1aaaa61999-08-14 23:50:50 +000095 self.dry_run = dry_run
Greg Ward3febd601999-10-03 20:41:02 +000096 self.force = force
Skip Montanaro70e1d9b2002-10-01 17:39:59 +000097 self.verbose = verbose
Greg Ward3f81cf71999-07-10 02:03:53 +000098
Greg Ward9b17cb51999-09-13 03:07:24 +000099 # 'output_dir': a common output directory for object, library,
100 # shared object, and shared library files
101 self.output_dir = None
102
Greg Ward3f81cf71999-07-10 02:03:53 +0000103 # 'macros': a list of macro definitions (or undefinitions). A
104 # macro definition is a 2-tuple (name, value), where the value is
105 # either a string or None (no explicit value). A macro
106 # undefinition is a 1-tuple (name,).
107 self.macros = []
108
Greg Ward3f81cf71999-07-10 02:03:53 +0000109 # 'include_dirs': a list of directories to search for include files
110 self.include_dirs = []
111
112 # 'libraries': a list of libraries to include in any link
113 # (library names, not filenames: eg. "foo" not "libfoo.a")
114 self.libraries = []
115
116 # 'library_dirs': a list of directories to search for libraries
117 self.library_dirs = []
118
Greg Warde1aaaa61999-08-14 23:50:50 +0000119 # 'runtime_library_dirs': a list of directories to search for
120 # shared libraries/objects at runtime
121 self.runtime_library_dirs = []
122
Greg Ward3f81cf71999-07-10 02:03:53 +0000123 # 'objects': a list of object files (or similar, such as explicitly
124 # named library files) to include on any link
125 self.objects = []
126
Greg Warde5c62bf2000-06-25 02:08:18 +0000127 for key in self.executables.keys():
128 self.set_executable(key, self.executables[key])
129
Greg Ward3f81cf71999-07-10 02:03:53 +0000130 # __init__ ()
131
132
Greg Warde5c62bf2000-06-25 02:08:18 +0000133 def set_executables (self, **args):
134
135 """Define the executables (and options for them) that will be run
136 to perform the various stages of compilation. The exact set of
137 executables that may be specified here depends on the compiler
138 class (via the 'executables' class attribute), but most will have:
139 compiler the C/C++ compiler
140 linker_so linker used to create shared objects and libraries
141 linker_exe linker used to create binary executables
142 archiver static library creator
143
144 On platforms with a command-line (Unix, DOS/Windows), each of these
145 is a string that will be split into executable name and (optional)
146 list of arguments. (Splitting the string is done similarly to how
147 Unix shells operate: words are delimited by spaces, but quotes and
148 backslashes can override this. See
149 'distutils.util.split_quoted()'.)
150 """
151
152 # Note that some CCompiler implementation classes will define class
153 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
154 # this is appropriate when a compiler class is for exactly one
155 # compiler/OS combination (eg. MSVCCompiler). Other compiler
156 # classes (UnixCCompiler, in particular) are driven by information
157 # discovered at run-time, since there are many different ways to do
158 # basically the same things with Unix C compilers.
159
160 for key in args.keys():
Guido van Rossum8bc09652008-02-21 18:18:37 +0000161 if key not in self.executables:
Greg Warde5c62bf2000-06-25 02:08:18 +0000162 raise ValueError, \
163 "unknown executable '%s' for class %s" % \
164 (key, self.__class__.__name__)
165 self.set_executable(key, args[key])
166
167 # set_executables ()
168
169 def set_executable(self, key, value):
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000170 if isinstance(value, str):
Greg Warde5c62bf2000-06-25 02:08:18 +0000171 setattr(self, key, split_quoted(value))
172 else:
173 setattr(self, key, value)
Fred Drakeb94b8492001-12-06 20:51:35 +0000174
Greg Warde5c62bf2000-06-25 02:08:18 +0000175
Greg Ward3f81cf71999-07-10 02:03:53 +0000176 def _find_macro (self, name):
177 i = 0
178 for defn in self.macros:
179 if defn[0] == name:
180 return i
181 i = i + 1
182
183 return None
184
185
186 def _check_macro_definitions (self, definitions):
187 """Ensures that every element of 'definitions' is a valid macro
Greg Wardc3a43b42000-06-24 18:10:48 +0000188 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
189 nothing if all definitions are OK, raise TypeError otherwise.
190 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000191 for defn in definitions:
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000192 if not (isinstance(defn, tuple) and
Greg Ward3f81cf71999-07-10 02:03:53 +0000193 (len (defn) == 1 or
194 (len (defn) == 2 and
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000195 (isinstance(defn[1], str) or defn[1] is None))) and
196 isinstance(defn[0], str)):
Greg Ward3f81cf71999-07-10 02:03:53 +0000197 raise TypeError, \
198 ("invalid macro definition '%s': " % defn) + \
199 "must be tuple (string,), (string, string), or " + \
200 "(string, None)"
201
202
203 # -- Bookkeeping methods -------------------------------------------
204
205 def define_macro (self, name, value=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000206 """Define a preprocessor macro for all compilations driven by this
207 compiler object. The optional parameter 'value' should be a
208 string; if it is not supplied, then the macro will be defined
209 without an explicit value and the exact outcome depends on the
210 compiler used (XXX true? does ANSI say anything about this?)
211 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000212 # Delete from the list of macro definitions/undefinitions if
213 # already there (so that this one will take precedence).
214 i = self._find_macro (name)
215 if i is not None:
216 del self.macros[i]
217
218 defn = (name, value)
219 self.macros.append (defn)
220
221
222 def undefine_macro (self, name):
223 """Undefine a preprocessor macro for all compilations driven by
Greg Wardc3a43b42000-06-24 18:10:48 +0000224 this compiler object. If the same macro is defined by
225 'define_macro()' and undefined by 'undefine_macro()' the last call
226 takes precedence (including multiple redefinitions or
227 undefinitions). If the macro is redefined/undefined on a
228 per-compilation basis (ie. in the call to 'compile()'), then that
229 takes precedence.
230 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000231 # Delete from the list of macro definitions/undefinitions if
232 # already there (so that this one will take precedence).
233 i = self._find_macro (name)
234 if i is not None:
235 del self.macros[i]
236
237 undefn = (name,)
238 self.macros.append (undefn)
239
240
241 def add_include_dir (self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000242 """Add 'dir' to the list of directories that will be searched for
243 header files. The compiler is instructed to search directories in
244 the order in which they are supplied by successive calls to
245 'add_include_dir()'.
246 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000247 self.include_dirs.append (dir)
248
249 def set_include_dirs (self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000250 """Set the list of directories that will be searched to 'dirs' (a
251 list of strings). Overrides any preceding calls to
252 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
253 to the list passed to 'set_include_dirs()'. This does not affect
254 any list of standard include directories that the compiler may
255 search by default.
256 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000257 self.include_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000258
259
260 def add_library (self, libname):
Greg Wardc3a43b42000-06-24 18:10:48 +0000261 """Add 'libname' to the list of libraries that will be included in
262 all links driven by this compiler object. Note that 'libname'
263 should *not* be the name of a file containing a library, but the
264 name of the library itself: the actual filename will be inferred by
265 the linker, the compiler, or the compiler class (depending on the
266 platform).
Greg Ward3f81cf71999-07-10 02:03:53 +0000267
Greg Wardc3a43b42000-06-24 18:10:48 +0000268 The linker will be instructed to link against libraries in the
269 order they were supplied to 'add_library()' and/or
270 'set_libraries()'. It is perfectly valid to duplicate library
271 names; the linker will be instructed to link against libraries as
272 many times as they are mentioned.
273 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000274 self.libraries.append (libname)
275
276 def set_libraries (self, libnames):
Greg Wardc3a43b42000-06-24 18:10:48 +0000277 """Set the list of libraries to be included in all links driven by
278 this compiler object to 'libnames' (a list of strings). This does
279 not affect any standard system libraries that the linker may
280 include by default.
281 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000282 self.libraries = libnames[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000283
284
285 def add_library_dir (self, dir):
286 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000287 libraries specified to 'add_library()' and 'set_libraries()'. The
288 linker will be instructed to search for libraries in the order they
289 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
290 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000291 self.library_dirs.append (dir)
292
293 def set_library_dirs (self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000294 """Set the list of library search directories to 'dirs' (a list of
295 strings). This does not affect any standard library search path
296 that the linker may search by default.
297 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000298 self.library_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000299
300
Greg Warde1aaaa61999-08-14 23:50:50 +0000301 def add_runtime_library_dir (self, dir):
302 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000303 shared libraries at runtime.
304 """
Greg Warde1aaaa61999-08-14 23:50:50 +0000305 self.runtime_library_dirs.append (dir)
306
307 def set_runtime_library_dirs (self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000308 """Set the list of directories to search for shared libraries at
309 runtime to 'dirs' (a list of strings). This does not affect any
310 standard search path that the runtime linker may search by
311 default.
312 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000313 self.runtime_library_dirs = dirs[:]
Greg Warde1aaaa61999-08-14 23:50:50 +0000314
315
Greg Ward3f81cf71999-07-10 02:03:53 +0000316 def add_link_object (self, object):
Greg Wardc3a43b42000-06-24 18:10:48 +0000317 """Add 'object' to the list of object files (or analogues, such as
Greg Ward612eb9f2000-07-27 02:13:20 +0000318 explicitly named library files or the output of "resource
Greg Wardc3a43b42000-06-24 18:10:48 +0000319 compilers") to be included in every link driven by this compiler
320 object.
321 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000322 self.objects.append (object)
323
324 def set_link_objects (self, objects):
Greg Wardc3a43b42000-06-24 18:10:48 +0000325 """Set the list of object files (or analogues) to be included in
326 every link to 'objects'. This does not affect any standard object
327 files that the linker may include by default (such as system
328 libraries).
329 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000330 self.objects = objects[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000331
332
Thomas Hellere6500802002-04-25 17:03:30 +0000333 # -- Private utility methods --------------------------------------
Greg Ward32c4a8a2000-03-06 03:40:29 +0000334 # (here for the convenience of subclasses)
335
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000336 # Helper method to prep compiler in subclass compile() methods
337
338 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
339 extra):
Tarek Ziadédc0f4872010-01-11 22:50:29 +0000340 """Process arguments and decide which source files to compile."""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000341 if outdir is None:
342 outdir = self.output_dir
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000343 elif not isinstance(outdir, str):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000344 raise TypeError, "'output_dir' must be a string or None"
345
346 if macros is None:
347 macros = self.macros
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000348 elif isinstance(macros, list):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000349 macros = macros + (self.macros or [])
350 else:
351 raise TypeError, "'macros' (if supplied) must be a list of tuples"
352
353 if incdirs is None:
354 incdirs = self.include_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000355 elif isinstance(incdirs, (list, tuple)):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000356 incdirs = list(incdirs) + (self.include_dirs or [])
357 else:
358 raise TypeError, \
359 "'include_dirs' (if supplied) must be a list of strings"
360
361 if extra is None:
362 extra = []
363
364 # Get the list of expected output (object) files
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000365 objects = self.object_filenames(sources,
Bob Ippolitoad647852006-05-26 14:07:23 +0000366 strip_dir=0,
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000367 output_dir=outdir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000368 assert len(objects) == len(sources)
369
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000370 pp_opts = gen_preprocess_options(macros, incdirs)
371
372 build = {}
373 for i in range(len(sources)):
374 src = sources[i]
375 obj = objects[i]
376 ext = os.path.splitext(src)[1]
377 self.mkpath(os.path.dirname(obj))
Tarek Ziadédc0f4872010-01-11 22:50:29 +0000378 build[obj] = (src, ext)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000379
380 return macros, objects, extra, pp_opts, build
381
382 def _get_cc_args(self, pp_opts, debug, before):
383 # works for unixccompiler, emxccompiler, cygwinccompiler
384 cc_args = pp_opts + ['-c']
385 if debug:
386 cc_args[:0] = ['-g']
387 if before:
388 cc_args[:0] = before
389 return cc_args
390
Greg Ward32c4a8a2000-03-06 03:40:29 +0000391 def _fix_compile_args (self, output_dir, macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000392 """Typecheck and fix-up some of the arguments to the 'compile()'
393 method, and return fixed-up values. Specifically: if 'output_dir'
394 is None, replaces it with 'self.output_dir'; ensures that 'macros'
395 is a list, and augments it with 'self.macros'; ensures that
396 'include_dirs' is a list, and augments it with 'self.include_dirs'.
397 Guarantees that the returned values are of the correct type,
398 i.e. for 'output_dir' either string or None, and for 'macros' and
399 'include_dirs' either list or None.
400 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000401 if output_dir is None:
402 output_dir = self.output_dir
403 elif type (output_dir) is not StringType:
404 raise TypeError, "'output_dir' must be a string or None"
405
406 if macros is None:
407 macros = self.macros
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000408 elif isinstance(macros, list):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000409 macros = macros + (self.macros or [])
410 else:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000411 raise TypeError, "'macros' (if supplied) must be a list of tuples"
Greg Ward32c4a8a2000-03-06 03:40:29 +0000412
413 if include_dirs is None:
414 include_dirs = self.include_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000415 elif isinstance(include_dirs, (list, tuple)):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000416 include_dirs = list (include_dirs) + (self.include_dirs or [])
417 else:
418 raise TypeError, \
419 "'include_dirs' (if supplied) must be a list of strings"
Fred Drakeb94b8492001-12-06 20:51:35 +0000420
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000421 return output_dir, macros, include_dirs
Greg Ward32c4a8a2000-03-06 03:40:29 +0000422
423 # _fix_compile_args ()
424
Greg Wardf10f95d2000-03-26 21:37:09 +0000425 def _fix_object_args (self, objects, output_dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000426 """Typecheck and fix up some arguments supplied to various methods.
427 Specifically: ensure that 'objects' is a list; if output_dir is
428 None, replace with self.output_dir. Return fixed versions of
429 'objects' and 'output_dir'.
430 """
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000431 if not isinstance(objects, (list, tuple)):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000432 raise TypeError, \
433 "'objects' must be a list or tuple of strings"
434 objects = list (objects)
Fred Drakeb94b8492001-12-06 20:51:35 +0000435
Greg Ward32c4a8a2000-03-06 03:40:29 +0000436 if output_dir is None:
437 output_dir = self.output_dir
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000438 elif not isinstance(output_dir, str):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000439 raise TypeError, "'output_dir' must be a string or None"
440
Greg Wardf10f95d2000-03-26 21:37:09 +0000441 return (objects, output_dir)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000442
Greg Ward32c4a8a2000-03-06 03:40:29 +0000443
Greg Wardf10f95d2000-03-26 21:37:09 +0000444 def _fix_lib_args (self, libraries, library_dirs, runtime_library_dirs):
445 """Typecheck and fix up some of the arguments supplied to the
Greg Wardc3a43b42000-06-24 18:10:48 +0000446 'link_*' methods. Specifically: ensure that all arguments are
447 lists, and augment them with their permanent versions
448 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
449 fixed versions of all arguments.
450 """
Greg Wardf10f95d2000-03-26 21:37:09 +0000451 if libraries is None:
452 libraries = self.libraries
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000453 elif isinstance(libraries, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000454 libraries = list (libraries) + (self.libraries or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000455 else:
Greg Wardf10f95d2000-03-26 21:37:09 +0000456 raise TypeError, \
457 "'libraries' (if supplied) must be a list of strings"
Greg Ward32c4a8a2000-03-06 03:40:29 +0000458
Greg Wardf10f95d2000-03-26 21:37:09 +0000459 if library_dirs is None:
460 library_dirs = self.library_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000461 elif isinstance(library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000462 library_dirs = list (library_dirs) + (self.library_dirs or [])
463 else:
464 raise TypeError, \
465 "'library_dirs' (if supplied) must be a list of strings"
466
467 if runtime_library_dirs is None:
468 runtime_library_dirs = self.runtime_library_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000469 elif isinstance(runtime_library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000470 runtime_library_dirs = (list (runtime_library_dirs) +
471 (self.runtime_library_dirs or []))
472 else:
473 raise TypeError, \
474 "'runtime_library_dirs' (if supplied) " + \
475 "must be a list of strings"
476
477 return (libraries, library_dirs, runtime_library_dirs)
478
479 # _fix_lib_args ()
Greg Ward32c4a8a2000-03-06 03:40:29 +0000480
481
482 def _need_link (self, objects, output_file):
Greg Wardc3a43b42000-06-24 18:10:48 +0000483 """Return true if we need to relink the files listed in 'objects'
484 to recreate 'output_file'.
485 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000486 if self.force:
487 return 1
488 else:
489 if self.dry_run:
490 newer = newer_group (objects, output_file, missing='newer')
491 else:
492 newer = newer_group (objects, output_file)
493 return newer
494
495 # _need_link ()
496
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000497 def detect_language (self, sources):
498 """Detect the language of a given file, or list of files. Uses
499 language_map, and language_order to do the job.
500 """
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000501 if not isinstance(sources, list):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000502 sources = [sources]
503 lang = None
504 index = len(self.language_order)
505 for source in sources:
506 base, ext = os.path.splitext(source)
507 extlang = self.language_map.get(ext)
508 try:
509 extindex = self.language_order.index(extlang)
510 if extindex < index:
511 lang = extlang
512 index = extindex
513 except ValueError:
514 pass
515 return lang
516
517 # detect_language ()
Greg Ward32c4a8a2000-03-06 03:40:29 +0000518
Greg Ward3f81cf71999-07-10 02:03:53 +0000519 # -- Worker methods ------------------------------------------------
520 # (must be implemented by subclasses)
521
Greg Ward3ff3b032000-06-21 02:58:46 +0000522 def preprocess (self,
523 source,
524 output_file=None,
525 macros=None,
526 include_dirs=None,
527 extra_preargs=None,
528 extra_postargs=None):
529 """Preprocess a single C/C++ source file, named in 'source'.
530 Output will be written to file named 'output_file', or stdout if
531 'output_file' not supplied. 'macros' is a list of macro
532 definitions as for 'compile()', which will augment the macros set
533 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
534 list of directory names that will be added to the default list.
Greg Warde5c62bf2000-06-25 02:08:18 +0000535
536 Raises PreprocessError on failure.
Greg Ward3ff3b032000-06-21 02:58:46 +0000537 """
538 pass
539
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000540 def compile(self, sources, output_dir=None, macros=None,
541 include_dirs=None, debug=0, extra_preargs=None,
542 extra_postargs=None, depends=None):
543 """Compile one or more source files.
544
545 'sources' must be a list of filenames, most likely C/C++
546 files, but in reality anything that can be handled by a
547 particular compiler and compiler class (eg. MSVCCompiler can
548 handle resource files in 'sources'). Return a list of object
549 filenames, one per source filename in 'sources'. Depending on
550 the implementation, not all source files will necessarily be
551 compiled, but all corresponding object filenames will be
552 returned.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000553
Greg Wardc3a43b42000-06-24 18:10:48 +0000554 If 'output_dir' is given, object files will be put under it, while
555 retaining their original path component. That is, "foo/bar.c"
556 normally compiles to "foo/bar.o" (for a Unix implementation); if
557 'output_dir' is "build", then it would compile to
558 "build/foo/bar.o".
Greg Ward3f81cf71999-07-10 02:03:53 +0000559
Greg Wardc3a43b42000-06-24 18:10:48 +0000560 'macros', if given, must be a list of macro definitions. A macro
561 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
562 The former defines a macro; if the value is None, the macro is
563 defined without an explicit value. The 1-tuple case undefines a
564 macro. Later definitions/redefinitions/ undefinitions take
565 precedence.
Greg Ward3f81cf71999-07-10 02:03:53 +0000566
Greg Wardc3a43b42000-06-24 18:10:48 +0000567 'include_dirs', if given, must be a list of strings, the
568 directories to add to the default include file search path for this
569 compilation only.
Greg Ward3c045a52000-02-09 02:16:14 +0000570
Greg Wardc3a43b42000-06-24 18:10:48 +0000571 'debug' is a boolean; if true, the compiler will be instructed to
572 output debug symbols in (or alongside) the object file(s).
Greg Ward802d6b71999-09-29 12:20:55 +0000573
Greg Wardc3a43b42000-06-24 18:10:48 +0000574 'extra_preargs' and 'extra_postargs' are implementation- dependent.
575 On platforms that have the notion of a command-line (e.g. Unix,
576 DOS/Windows), they are most likely lists of strings: extra
577 command-line arguments to prepand/append to the compiler command
578 line. On other platforms, consult the implementation class
579 documentation. In any event, they are intended as an escape hatch
580 for those occasions when the abstract compiler framework doesn't
581 cut the mustard.
Greg Wardd1517112000-05-30 01:56:44 +0000582
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000583 'depends', if given, is a list of filenames that all targets
584 depend on. If a source file is older than any file in
585 depends, then the source file will be recompiled. This
586 supports dependency tracking, but only at a coarse
587 granularity.
588
Greg Wardc3a43b42000-06-24 18:10:48 +0000589 Raises CompileError on failure.
590 """
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000591 # A concrete compiler class can either override this method
592 # entirely or implement _compile().
Tim Peters182b5ac2004-07-18 06:16:08 +0000593
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000594 macros, objects, extra_postargs, pp_opts, build = \
595 self._setup_compile(output_dir, macros, include_dirs, sources,
596 depends, extra_postargs)
597 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
598
Thomas Heller9436a752003-12-05 20:12:23 +0000599 for obj in objects:
600 try:
601 src, ext = build[obj]
602 except KeyError:
603 continue
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000604 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
605
606 # Return *all* object filenames, not just the ones we just built.
607 return objects
608
609 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
610 """Compile 'src' to product 'obj'."""
Tim Peters182b5ac2004-07-18 06:16:08 +0000611
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000612 # A concrete compiler class that does not override compile()
613 # should implement _compile().
614 pass
Greg Ward3f81cf71999-07-10 02:03:53 +0000615
Greg Ward036c8052000-03-10 01:48:32 +0000616 def create_static_lib (self,
617 objects,
618 output_libname,
619 output_dir=None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000620 debug=0,
621 target_lang=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000622 """Link a bunch of stuff together to create a static library file.
623 The "bunch of stuff" consists of the list of object files supplied
624 as 'objects', the extra object files supplied to
625 'add_link_object()' and/or 'set_link_objects()', the libraries
626 supplied to 'add_library()' and/or 'set_libraries()', and the
627 libraries supplied as 'libraries' (if any).
Greg Ward3f81cf71999-07-10 02:03:53 +0000628
Greg Wardc3a43b42000-06-24 18:10:48 +0000629 'output_libname' should be a library name, not a filename; the
630 filename will be inferred from the library name. 'output_dir' is
631 the directory where the library file will be put.
Greg Ward3c045a52000-02-09 02:16:14 +0000632
Greg Wardc3a43b42000-06-24 18:10:48 +0000633 'debug' is a boolean; if true, debugging information will be
634 included in the library (note that on most platforms, it is the
635 compile step where this matters: the 'debug' flag is included here
636 just for consistency).
Greg Wardd1517112000-05-30 01:56:44 +0000637
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000638 'target_lang' is the target language for which the given objects
639 are being compiled. This allows specific linkage time treatment of
640 certain languages.
641
Greg Wardc3a43b42000-06-24 18:10:48 +0000642 Raises LibError on failure.
643 """
Greg Ward3c045a52000-02-09 02:16:14 +0000644 pass
Fred Drakeb94b8492001-12-06 20:51:35 +0000645
Greg Ward3c045a52000-02-09 02:16:14 +0000646
Greg Ward42406482000-09-27 02:08:14 +0000647 # values for target_desc parameter in link()
648 SHARED_OBJECT = "shared_object"
649 SHARED_LIBRARY = "shared_library"
650 EXECUTABLE = "executable"
651
652 def link (self,
653 target_desc,
654 objects,
655 output_filename,
656 output_dir=None,
657 libraries=None,
658 library_dirs=None,
659 runtime_library_dirs=None,
660 export_symbols=None,
661 debug=0,
662 extra_preargs=None,
663 extra_postargs=None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000664 build_temp=None,
665 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000666 """Link a bunch of stuff together to create an executable or
667 shared library file.
668
669 The "bunch of stuff" consists of the list of object files supplied
670 as 'objects'. 'output_filename' should be a filename. If
671 'output_dir' is supplied, 'output_filename' is relative to it
672 (i.e. 'output_filename' can provide directory components if
673 needed).
Greg Ward3febd601999-10-03 20:41:02 +0000674
Greg Wardc3a43b42000-06-24 18:10:48 +0000675 'libraries' is a list of libraries to link against. These are
676 library names, not filenames, since they're translated into
677 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
678 on Unix and "foo.lib" on DOS/Windows). However, they can include a
679 directory component, which means the linker will look in that
680 specific directory rather than searching all the normal locations.
Greg Ward5299b6a2000-05-20 13:23:21 +0000681
Greg Wardc3a43b42000-06-24 18:10:48 +0000682 'library_dirs', if supplied, should be a list of directories to
683 search for libraries that were specified as bare library names
684 (ie. no directory component). These are on top of the system
685 default and those supplied to 'add_library_dir()' and/or
686 'set_library_dirs()'. 'runtime_library_dirs' is a list of
687 directories that will be embedded into the shared library and used
688 to search for other shared libraries that *it* depends on at
689 run-time. (This may only be relevant on Unix.)
Greg Ward802d6b71999-09-29 12:20:55 +0000690
Greg Wardc3a43b42000-06-24 18:10:48 +0000691 'export_symbols' is a list of symbols that the shared library will
692 export. (This appears to be relevant only on Windows.)
Greg Ward3c045a52000-02-09 02:16:14 +0000693
Greg Wardc3a43b42000-06-24 18:10:48 +0000694 'debug' is as for 'compile()' and 'create_static_lib()', with the
695 slight distinction that it actually matters on most platforms (as
696 opposed to 'create_static_lib()', which includes a 'debug' flag
697 mostly for form's sake).
Greg Wardd1517112000-05-30 01:56:44 +0000698
Greg Wardc3a43b42000-06-24 18:10:48 +0000699 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
700 of course that they supply command-line arguments for the
701 particular linker being used).
Greg Ward3f81cf71999-07-10 02:03:53 +0000702
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000703 'target_lang' is the target language for which the given objects
704 are being compiled. This allows specific linkage time treatment of
705 certain languages.
706
Greg Wardc3a43b42000-06-24 18:10:48 +0000707 Raises LinkError on failure.
708 """
Greg Ward42406482000-09-27 02:08:14 +0000709 raise NotImplementedError
710
Fred Drakeb94b8492001-12-06 20:51:35 +0000711
Greg Ward264cf742000-09-27 02:24:21 +0000712 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
Greg Ward42406482000-09-27 02:08:14 +0000713
714 def link_shared_lib (self,
715 objects,
716 output_libname,
717 output_dir=None,
718 libraries=None,
719 library_dirs=None,
720 runtime_library_dirs=None,
721 export_symbols=None,
722 debug=0,
723 extra_preargs=None,
724 extra_postargs=None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000725 build_temp=None,
726 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000727 self.link(CCompiler.SHARED_LIBRARY, objects,
Greg Ward42406482000-09-27 02:08:14 +0000728 self.library_filename(output_libname, lib_type='shared'),
729 output_dir,
730 libraries, library_dirs, runtime_library_dirs,
731 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000732 extra_preargs, extra_postargs, build_temp, target_lang)
Fred Drakeb94b8492001-12-06 20:51:35 +0000733
Greg Ward3f81cf71999-07-10 02:03:53 +0000734
Greg Ward3f81cf71999-07-10 02:03:53 +0000735 def link_shared_object (self,
736 objects,
737 output_filename,
Greg Ward9b17cb51999-09-13 03:07:24 +0000738 output_dir=None,
Greg Ward3f81cf71999-07-10 02:03:53 +0000739 libraries=None,
Greg Ward26e48ea1999-08-29 18:17:36 +0000740 library_dirs=None,
Greg Wardf10f95d2000-03-26 21:37:09 +0000741 runtime_library_dirs=None,
Greg Ward5299b6a2000-05-20 13:23:21 +0000742 export_symbols=None,
Greg Ward3c045a52000-02-09 02:16:14 +0000743 debug=0,
Greg Ward802d6b71999-09-29 12:20:55 +0000744 extra_preargs=None,
Greg Wardbfc79d62000-06-28 01:29:09 +0000745 extra_postargs=None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000746 build_temp=None,
747 target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000748 self.link(CCompiler.SHARED_OBJECT, objects,
749 output_filename, output_dir,
750 libraries, library_dirs, runtime_library_dirs,
751 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000752 extra_preargs, extra_postargs, build_temp, target_lang)
Greg Ward3f81cf71999-07-10 02:03:53 +0000753
Greg Warde1aaaa61999-08-14 23:50:50 +0000754
Greg Ward5baf1c22000-01-09 22:41:02 +0000755 def link_executable (self,
756 objects,
757 output_progname,
758 output_dir=None,
759 libraries=None,
760 library_dirs=None,
Greg Wardf10f95d2000-03-26 21:37:09 +0000761 runtime_library_dirs=None,
Greg Ward3c045a52000-02-09 02:16:14 +0000762 debug=0,
Greg Ward5baf1c22000-01-09 22:41:02 +0000763 extra_preargs=None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000764 extra_postargs=None,
765 target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000766 self.link(CCompiler.EXECUTABLE, objects,
Greg Ward264cf742000-09-27 02:24:21 +0000767 self.executable_filename(output_progname), output_dir,
Fred Drakeb94b8492001-12-06 20:51:35 +0000768 libraries, library_dirs, runtime_library_dirs, None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000769 debug, extra_preargs, extra_postargs, None, target_lang)
Greg Ward5baf1c22000-01-09 22:41:02 +0000770
771
Greg Wardf7edea72000-05-20 13:31:32 +0000772 # -- Miscellaneous methods -----------------------------------------
773 # These are all used by the 'gen_lib_options() function; there is
774 # no appropriate default implementation so subclasses should
775 # implement all of these.
776
777 def library_dir_option (self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000778 """Return the compiler option to add 'dir' to the list of
779 directories searched for libraries.
780 """
Greg Wardf7edea72000-05-20 13:31:32 +0000781 raise NotImplementedError
782
783 def runtime_library_dir_option (self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000784 """Return the compiler option to add 'dir' to the list of
785 directories searched for runtime libraries.
786 """
Greg Wardf7edea72000-05-20 13:31:32 +0000787 raise NotImplementedError
788
789 def library_option (self, lib):
790 """Return the compiler option to add 'dir' to the list of libraries
Greg Wardc3a43b42000-06-24 18:10:48 +0000791 linked into the shared library or executable.
792 """
Greg Wardf7edea72000-05-20 13:31:32 +0000793 raise NotImplementedError
794
Skip Montanarofa012612003-04-24 19:49:23 +0000795 def has_function(self, funcname,
796 includes=None,
797 include_dirs=None,
798 libraries=None,
799 library_dirs=None):
800 """Return a boolean indicating whether funcname is supported on
801 the current platform. The optional arguments can be used to
802 augment the compilation environment.
803 """
804
805 # this can't be included at module scope because it tries to
806 # import math which might not be available at that point - maybe
807 # the necessary logic should just be inlined?
808 import tempfile
809 if includes is None:
810 includes = []
811 if include_dirs is None:
812 include_dirs = []
813 if libraries is None:
814 libraries = []
815 if library_dirs is None:
816 library_dirs = []
817 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
818 f = os.fdopen(fd, "w")
819 for incl in includes:
820 f.write("""#include "%s"\n""" % incl)
821 f.write("""\
822main (int argc, char **argv) {
823 %s();
824}
825""" % funcname)
826 f.close()
827 try:
828 objects = self.compile([fname], include_dirs=include_dirs)
829 except CompileError:
830 return False
831
832 try:
833 self.link_executable(objects, "a.out",
834 libraries=libraries,
835 library_dirs=library_dirs)
836 except (LinkError, TypeError):
837 return False
838 return True
839
Greg Warde5e60152000-08-04 01:28:39 +0000840 def find_library_file (self, dirs, lib, debug=0):
Greg Wardf7edea72000-05-20 13:31:32 +0000841 """Search the specified list of directories for a static or shared
Greg Warde5e60152000-08-04 01:28:39 +0000842 library file 'lib' and return the full path to that file. If
843 'debug' true, look for a debugging version (if that makes sense on
844 the current platform). Return None if 'lib' wasn't found in any of
845 the specified directories.
Greg Wardc3a43b42000-06-24 18:10:48 +0000846 """
Greg Wardf7edea72000-05-20 13:31:32 +0000847 raise NotImplementedError
848
Greg Ward32c4a8a2000-03-06 03:40:29 +0000849 # -- Filename generation methods -----------------------------------
Greg Warde1aaaa61999-08-14 23:50:50 +0000850
Greg Ward32c4a8a2000-03-06 03:40:29 +0000851 # The default implementation of the filename generating methods are
852 # prejudiced towards the Unix/DOS/Windows view of the world:
853 # * object files are named by replacing the source file extension
854 # (eg. .c/.cpp -> .o/.obj)
855 # * library files (shared or static) are named by plugging the
856 # library name and extension into a format string, eg.
857 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
858 # * executables are named by appending an extension (possibly
859 # empty) to the program name: eg. progname + ".exe" for
860 # Windows
861 #
862 # To reduce redundant code, these methods expect to find
863 # several attributes in the current object (presumably defined
864 # as class attributes):
865 # * src_extensions -
866 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
867 # * obj_extension -
868 # object file extension, eg. '.o' or '.obj'
869 # * static_lib_extension -
870 # extension for static library files, eg. '.a' or '.lib'
871 # * shared_lib_extension -
872 # extension for shared library/object files, eg. '.so', '.dll'
873 # * static_lib_format -
874 # format string for generating static library filenames,
875 # eg. 'lib%s.%s' or '%s.%s'
876 # * shared_lib_format
877 # format string for generating shared library filenames
878 # (probably same as static_lib_format, since the extension
879 # is one of the intended parameters to the format string)
880 # * exe_extension -
881 # extension for executable files, eg. '' or '.exe'
Greg Ward9b17cb51999-09-13 03:07:24 +0000882
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000883 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
Guido van Rossumcc3a6df2002-10-01 04:14:17 +0000884 if output_dir is None:
885 output_dir = ''
Greg Ward32c4a8a2000-03-06 03:40:29 +0000886 obj_names = []
887 for src_name in source_filenames:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000888 base, ext = os.path.splitext(src_name)
Andrew M. Kuchling10da45e2003-02-26 18:52:07 +0000889 base = os.path.splitdrive(base)[1] # Chop off the drive
890 base = base[os.path.isabs(base):] # If abs, chop off leading /
Greg Ward32c4a8a2000-03-06 03:40:29 +0000891 if ext not in self.src_extensions:
Greg Ward9aa668b2000-06-24 02:22:49 +0000892 raise UnknownFileError, \
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000893 "unknown file type '%s' (from '%s')" % (ext, src_name)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000894 if strip_dir:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000895 base = os.path.basename(base)
896 obj_names.append(os.path.join(output_dir,
897 base + self.obj_extension))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000898 return obj_names
Greg Warde1aaaa61999-08-14 23:50:50 +0000899
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000900 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
901 assert output_dir is not None
Greg Ward32c4a8a2000-03-06 03:40:29 +0000902 if strip_dir:
903 basename = os.path.basename (basename)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000904 return os.path.join(output_dir, basename + self.shared_lib_extension)
Greg Warde1aaaa61999-08-14 23:50:50 +0000905
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000906 def executable_filename(self, basename, strip_dir=0, output_dir=''):
907 assert output_dir is not None
Greg Ward42406482000-09-27 02:08:14 +0000908 if strip_dir:
909 basename = os.path.basename (basename)
910 return os.path.join(output_dir, basename + (self.exe_extension or ''))
Greg Ward26e48ea1999-08-29 18:17:36 +0000911
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000912 def library_filename(self, libname, lib_type='static', # or 'shared'
913 strip_dir=0, output_dir=''):
914 assert output_dir is not None
915 if lib_type not in ("static", "shared", "dylib"):
Jack Jansene259e592001-08-27 15:08:16 +0000916 raise ValueError, "'lib_type' must be \"static\", \"shared\" or \"dylib\""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000917 fmt = getattr(self, lib_type + "_lib_format")
918 ext = getattr(self, lib_type + "_lib_extension")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000919
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000920 dir, base = os.path.split (libname)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000921 filename = fmt % (base, ext)
922 if strip_dir:
923 dir = ''
924
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000925 return os.path.join(output_dir, dir, filename)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000926
Greg Warde1aaaa61999-08-14 23:50:50 +0000927
928 # -- Utility methods -----------------------------------------------
929
Greg Ward9b17cb51999-09-13 03:07:24 +0000930 def announce (self, msg, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000931 log.debug(msg)
Greg Ward9b17cb51999-09-13 03:07:24 +0000932
Greg Wardf813e592000-08-04 01:31:13 +0000933 def debug_print (self, msg):
Jeremy Hyltonfcd73532002-09-11 16:31:53 +0000934 from distutils.debug import DEBUG
Greg Wardf813e592000-08-04 01:31:13 +0000935 if DEBUG:
936 print msg
937
Greg Ward3febd601999-10-03 20:41:02 +0000938 def warn (self, msg):
939 sys.stderr.write ("warning: %s\n" % msg)
940
Greg Ward9dddbb42000-08-02 01:38:20 +0000941 def execute (self, func, args, msg=None, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000942 execute(func, args, msg, self.dry_run)
Greg Ward9dddbb42000-08-02 01:38:20 +0000943
Greg Warde1aaaa61999-08-14 23:50:50 +0000944 def spawn (self, cmd):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000945 spawn (cmd, dry_run=self.dry_run)
Greg Warde1aaaa61999-08-14 23:50:50 +0000946
Greg Ward9b17cb51999-09-13 03:07:24 +0000947 def move_file (self, src, dst):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000948 return move_file (src, dst, dry_run=self.dry_run)
Greg Ward9b17cb51999-09-13 03:07:24 +0000949
Greg Ward013f0c82000-03-01 14:43:12 +0000950 def mkpath (self, name, mode=0777):
Amaury Forgeot d'Arc240028c2008-12-11 00:03:42 +0000951 mkpath (name, mode, dry_run=self.dry_run)
Greg Ward013f0c82000-03-01 14:43:12 +0000952
Greg Warde1aaaa61999-08-14 23:50:50 +0000953
Greg Ward3f81cf71999-07-10 02:03:53 +0000954# class CCompiler
955
956
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000957# Map a sys.platform/os.name ('posix', 'nt') to the default compiler
958# type for that platform. Keys are interpreted as re match
959# patterns. Order is important; platform mappings are preferred over
960# OS names.
961_default_compilers = (
962
963 # Platform string mappings
Andrew M. Kuchlinga34dbe02001-02-27 19:13:15 +0000964
965 # on a cygwin built python we can use gcc like an ordinary UNIXish
966 # compiler
967 ('cygwin.*', 'unix'),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000968 ('os2emx', 'emx'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000969
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000970 # OS name mappings
971 ('posix', 'unix'),
972 ('nt', 'msvc'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000973
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000974 )
975
976def get_default_compiler(osname=None, platform=None):
977
978 """ Determine the default compiler to use for the given platform.
979
980 osname should be one of the standard Python OS names (i.e. the
981 ones returned by os.name) and platform the common value
982 returned by sys.platform for the platform in question.
983
984 The default values are os.name and sys.platform in case the
985 parameters are not given.
986
987 """
988 if osname is None:
989 osname = os.name
990 if platform is None:
991 platform = sys.platform
992 for pattern, compiler in _default_compilers:
993 if re.match(pattern, platform) is not None or \
994 re.match(pattern, osname) is not None:
995 return compiler
996 # Default to Unix compiler
997 return 'unix'
Greg Ward802d6b71999-09-29 12:20:55 +0000998
999# Map compiler types to (module_name, class_name) pairs -- ie. where to
1000# find the code that implements an interface to this compiler. (The module
1001# is assumed to be in the 'distutils' package.)
Greg Ward2ff78872000-06-24 00:23:20 +00001002compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
1003 "standard UNIX-style compiler"),
1004 'msvc': ('msvccompiler', 'MSVCCompiler',
1005 "Microsoft Visual C++"),
1006 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
1007 "Cygwin port of GNU C Compiler for Win32"),
1008 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
1009 "Mingw32 port of GNU C Compiler for Win32"),
Greg Wardbfc79d62000-06-28 01:29:09 +00001010 'bcpp': ('bcppcompiler', 'BCPPCompiler',
1011 "Borland C++ Compiler"),
Marc-André Lemburg2544f512002-01-31 18:56:00 +00001012 'emx': ('emxccompiler', 'EMXCCompiler',
1013 "EMX port of GNU C Compiler for OS/2"),
Greg Ward802d6b71999-09-29 12:20:55 +00001014 }
1015
Greg Ward9d17a7a2000-06-07 03:00:06 +00001016def show_compilers():
Greg Ward2ff78872000-06-24 00:23:20 +00001017 """Print list of available compilers (used by the "--help-compiler"
1018 options to "build", "build_ext", "build_clib").
1019 """
1020 # XXX this "knows" that the compiler option it's describing is
1021 # "--compiler", which just happens to be the case for the three
1022 # commands that use it.
Fred Drakeb94b8492001-12-06 20:51:35 +00001023 from distutils.fancy_getopt import FancyGetopt
Greg Ward2ff78872000-06-24 00:23:20 +00001024 compilers = []
Greg Ward9d17a7a2000-06-07 03:00:06 +00001025 for compiler in compiler_class.keys():
Jeremy Hylton65d6edb2000-07-07 20:45:21 +00001026 compilers.append(("compiler="+compiler, None,
Greg Ward2ff78872000-06-24 00:23:20 +00001027 compiler_class[compiler][2]))
1028 compilers.sort()
1029 pretty_printer = FancyGetopt(compilers)
Greg Ward9d17a7a2000-06-07 03:00:06 +00001030 pretty_printer.print_help("List of available compilers:")
Fred Drakeb94b8492001-12-06 20:51:35 +00001031
Greg Ward802d6b71999-09-29 12:20:55 +00001032
Greg Warde1aaaa61999-08-14 23:50:50 +00001033def new_compiler (plat=None,
Greg Ward802d6b71999-09-29 12:20:55 +00001034 compiler=None,
Greg Warde1aaaa61999-08-14 23:50:50 +00001035 verbose=0,
Greg Ward3febd601999-10-03 20:41:02 +00001036 dry_run=0,
1037 force=0):
Greg Ward802d6b71999-09-29 12:20:55 +00001038 """Generate an instance of some CCompiler subclass for the supplied
Greg Wardc3a43b42000-06-24 18:10:48 +00001039 platform/compiler combination. 'plat' defaults to 'os.name'
1040 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
1041 for that platform. Currently only 'posix' and 'nt' are supported, and
1042 the default compilers are "traditional Unix interface" (UnixCCompiler
1043 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
1044 possible to ask for a Unix compiler object under Windows, and a
1045 Microsoft compiler object under Unix -- if you supply a value for
1046 'compiler', 'plat' is ignored.
1047 """
Greg Ward802d6b71999-09-29 12:20:55 +00001048 if plat is None:
1049 plat = os.name
1050
1051 try:
1052 if compiler is None:
Marc-André Lemburg636b9062001-02-19 09:20:04 +00001053 compiler = get_default_compiler(plat)
Fred Drakeb94b8492001-12-06 20:51:35 +00001054
Greg Ward2ff78872000-06-24 00:23:20 +00001055 (module_name, class_name, long_description) = compiler_class[compiler]
Greg Ward802d6b71999-09-29 12:20:55 +00001056 except KeyError:
1057 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
1058 if compiler is not None:
1059 msg = msg + " with '%s' compiler" % compiler
1060 raise DistutilsPlatformError, msg
Fred Drakeb94b8492001-12-06 20:51:35 +00001061
Greg Ward802d6b71999-09-29 12:20:55 +00001062 try:
1063 module_name = "distutils." + module_name
1064 __import__ (module_name)
1065 module = sys.modules[module_name]
1066 klass = vars(module)[class_name]
1067 except ImportError:
1068 raise DistutilsModuleError, \
1069 "can't compile C/C++ code: unable to load module '%s'" % \
1070 module_name
1071 except KeyError:
1072 raise DistutilsModuleError, \
1073 ("can't compile C/C++ code: unable to find class '%s' " +
1074 "in module '%s'") % (class_name, module_name)
1075
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +00001076 # XXX The None is necessary to preserve backwards compatibility
1077 # with classes that expect verbose to be the first positional
1078 # argument.
1079 return klass (None, dry_run, force)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001080
1081
Greg Ward0bdd90a1999-12-12 17:19:58 +00001082def gen_preprocess_options (macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +00001083 """Generate C pre-processor options (-D, -U, -I) as used by at least
1084 two types of compilers: the typical Unix compiler and Visual C++.
1085 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
1086 means undefine (-U) macro 'name', and (name,value) means define (-D)
1087 macro 'name' to 'value'. 'include_dirs' is just a list of directory
1088 names to be added to the header file search path (-I). Returns a list
1089 of command-line options suitable for either Unix compilers or Visual
1090 C++.
1091 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001092 # XXX it would be nice (mainly aesthetic, and so we don't generate
1093 # stupid-looking command lines) to go over 'macros' and eliminate
1094 # redundant definitions/undefinitions (ie. ensure that only the
1095 # latest mention of a particular macro winds up on the command
1096 # line). I don't think it's essential, though, since most (all?)
1097 # Unix C compilers only pay attention to the latest -D or -U
1098 # mention of a macro on their command line. Similar situation for
Greg Ward0bdd90a1999-12-12 17:19:58 +00001099 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
Greg Wardf7a39ec1999-09-08 02:29:08 +00001100 # redundancies like this should probably be the province of
1101 # CCompiler, since the data structures used are inherited from it
1102 # and therefore common to all CCompiler classes.
1103
1104 pp_opts = []
1105 for macro in macros:
Greg Wardfbf8aff1999-09-21 18:35:09 +00001106
Tarek Ziadé2b66da72009-12-21 01:22:46 +00001107 if not (isinstance(macro, tuple) and
Greg Wardfbf8aff1999-09-21 18:35:09 +00001108 1 <= len (macro) <= 2):
1109 raise TypeError, \
1110 ("bad macro definition '%s': " +
1111 "each element of 'macros' list must be a 1- or 2-tuple") % \
1112 macro
1113
Greg Wardf7a39ec1999-09-08 02:29:08 +00001114 if len (macro) == 1: # undefine this macro
1115 pp_opts.append ("-U%s" % macro[0])
1116 elif len (macro) == 2:
1117 if macro[1] is None: # define with no explicit value
1118 pp_opts.append ("-D%s" % macro[0])
1119 else:
1120 # XXX *don't* need to be clever about quoting the
1121 # macro value here, because we're going to avoid the
1122 # shell at all costs when we spawn the command!
1123 pp_opts.append ("-D%s=%s" % macro)
1124
Greg Ward0bdd90a1999-12-12 17:19:58 +00001125 for dir in include_dirs:
Greg Wardf7a39ec1999-09-08 02:29:08 +00001126 pp_opts.append ("-I%s" % dir)
1127
1128 return pp_opts
1129
Greg Wardf7a39ec1999-09-08 02:29:08 +00001130
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001131def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
Greg Wardf7a39ec1999-09-08 02:29:08 +00001132 """Generate linker options for searching library directories and
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001133 linking with specific libraries.
1134
1135 'libraries' and 'library_dirs' are, respectively, lists of library names
1136 (not filenames!) and search directories. Returns a list of command-line
1137 options suitable for use with some compiler (depending on the two format
1138 strings passed in).
Greg Wardc3a43b42000-06-24 18:10:48 +00001139 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001140 lib_opts = []
1141
1142 for dir in library_dirs:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001143 lib_opts.append(compiler.library_dir_option(dir))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001144
Greg Wardd03f88a2000-03-18 15:19:51 +00001145 for dir in runtime_library_dirs:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001146 opt = compiler.runtime_library_dir_option(dir)
1147 if isinstance(opt, list):
1148 lib_opts.extend(opt)
Martin v. Löwis061f1322004-08-29 16:40:55 +00001149 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001150 lib_opts.append(opt)
Greg Wardd03f88a2000-03-18 15:19:51 +00001151
Greg Wardf7a39ec1999-09-08 02:29:08 +00001152 # XXX it's important that we *not* remove redundant library mentions!
1153 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1154 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1155 # -lbar" to get things to work -- that's certainly a possibility, but a
1156 # pretty nasty way to arrange your C code.
1157
1158 for lib in libraries:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001159 lib_dir, lib_name = os.path.split(lib)
1160 if lib_dir != '':
1161 lib_file = compiler.find_library_file([lib_dir], lib_name)
1162 if lib_file is not None:
1163 lib_opts.append(lib_file)
Greg Ward3febd601999-10-03 20:41:02 +00001164 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001165 compiler.warn("no library file corresponding to "
1166 "'%s' found (skipping)" % lib)
Greg Ward3febd601999-10-03 20:41:02 +00001167 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001168 lib_opts.append(compiler.library_option(lib))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001169
1170 return lib_opts