blob: 97c61dd46f67efeb633c74f0e7c1b93acc075f7b [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
Tarek Ziadéae7731a2010-01-11 23:41:32 +000012from distutils.errors import (CompileError, LinkError, UnknownFileError,
13 DistutilsPlatformError, DistutilsModuleError)
Greg Warde1aaaa61999-08-14 23:50:50 +000014from distutils.spawn import spawn
Greg Warde5c62bf2000-06-25 02:08:18 +000015from distutils.file_util import move_file
16from distutils.dir_util import mkpath
Tarek Ziadéae7731a2010-01-11 23:41:32 +000017from distutils.dep_util import newer_group
Greg Ward9dddbb42000-08-02 01:38:20 +000018from distutils.util import split_quoted, execute
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +000019from distutils import log
Greg Ward3f81cf71999-07-10 02:03:53 +000020
21class CCompiler:
22 """Abstract base class to define the interface that must be implemented
Greg Wardc3a43b42000-06-24 18:10:48 +000023 by real compiler classes. Also has some utility methods used by
24 several compiler classes.
Greg Ward3f81cf71999-07-10 02:03:53 +000025
Greg Wardc3a43b42000-06-24 18:10:48 +000026 The basic idea behind a compiler abstraction class is that each
27 instance can be used for all the compile/link steps in building a
28 single project. Thus, attributes common to all of those compile and
29 link steps -- include directories, macros to define, libraries to link
30 against, etc. -- are attributes of the compiler instance. To allow for
31 variability in how individual files are treated, most of those
32 attributes may be varied on a per-compilation or per-link basis.
33 """
Greg Ward3f81cf71999-07-10 02:03:53 +000034
Greg Ward802d6b71999-09-29 12:20:55 +000035 # 'compiler_type' is a class attribute that identifies this class. It
36 # keeps code that wants to know what kind of compiler it's dealing with
37 # from having to import all possible compiler classes just to do an
38 # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type'
39 # should really, really be one of the keys of the 'compiler_class'
40 # dictionary (see below -- used by the 'new_compiler()' factory
41 # function) -- authors of new compiler interface classes are
42 # responsible for updating 'compiler_class'!
43 compiler_type = None
Greg Ward3f81cf71999-07-10 02:03:53 +000044
45 # XXX things not handled by this compiler abstraction model:
46 # * client can't provide additional options for a compiler,
47 # e.g. warning, optimization, debugging flags. Perhaps this
48 # should be the domain of concrete compiler abstraction classes
49 # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base
50 # class should have methods for the common ones.
Greg Ward3f81cf71999-07-10 02:03:53 +000051 # * can't completely override the include or library searchg
52 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
Greg Warde1aaaa61999-08-14 23:50:50 +000053 # I'm not sure how widely supported this is even by Unix
Greg Ward3f81cf71999-07-10 02:03:53 +000054 # compilers, much less on other platforms. And I'm even less
Greg Warde1aaaa61999-08-14 23:50:50 +000055 # sure how useful it is; maybe for cross-compiling, but
56 # support for that is a ways off. (And anyways, cross
57 # compilers probably have a dedicated binary with the
58 # right paths compiled in. I hope.)
Greg Ward3f81cf71999-07-10 02:03:53 +000059 # * can't do really freaky things with the library list/library
60 # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against
61 # different versions of libfoo.a in different locations. I
62 # think this is useless without the ability to null out the
63 # library search path anyways.
Fred Drakeb94b8492001-12-06 20:51:35 +000064
Greg Ward3f81cf71999-07-10 02:03:53 +000065
Greg Ward32c4a8a2000-03-06 03:40:29 +000066 # Subclasses that rely on the standard filename generation methods
67 # implemented below should override these; see the comment near
68 # those methods ('object_filenames()' et. al.) for details:
69 src_extensions = None # list of strings
70 obj_extension = None # string
71 static_lib_extension = None
72 shared_lib_extension = None # string
73 static_lib_format = None # format string
74 shared_lib_format = None # prob. same as static_lib_format
75 exe_extension = None # string
76
Gustavo Niemeyer6b016852002-11-05 16:12:02 +000077 # Default language settings. language_map is used to detect a source
78 # file or Extension target language, checking source filenames.
79 # language_order is used to detect the language precedence, when deciding
80 # what language to use when mixing source types. For example, if some
81 # extension has two files with ".c" extension, and one with ".cpp", it
82 # is still linked as c++.
83 language_map = {".c" : "c",
84 ".cc" : "c++",
85 ".cpp" : "c++",
86 ".cxx" : "c++",
87 ".m" : "objc",
88 }
89 language_order = ["c++", "objc", "c"]
Greg Ward32c4a8a2000-03-06 03:40:29 +000090
Tarek Ziadéae7731a2010-01-11 23:41:32 +000091 def __init__ (self, verbose=0, dry_run=0, force=0):
Greg Warde1aaaa61999-08-14 23:50:50 +000092 self.dry_run = dry_run
Greg Ward3febd601999-10-03 20:41:02 +000093 self.force = force
Skip Montanaro70e1d9b2002-10-01 17:39:59 +000094 self.verbose = verbose
Greg Ward3f81cf71999-07-10 02:03:53 +000095
Greg Ward9b17cb51999-09-13 03:07:24 +000096 # 'output_dir': a common output directory for object, library,
97 # shared object, and shared library files
98 self.output_dir = None
99
Greg Ward3f81cf71999-07-10 02:03:53 +0000100 # 'macros': a list of macro definitions (or undefinitions). A
101 # macro definition is a 2-tuple (name, value), where the value is
102 # either a string or None (no explicit value). A macro
103 # undefinition is a 1-tuple (name,).
104 self.macros = []
105
Greg Ward3f81cf71999-07-10 02:03:53 +0000106 # 'include_dirs': a list of directories to search for include files
107 self.include_dirs = []
108
109 # 'libraries': a list of libraries to include in any link
110 # (library names, not filenames: eg. "foo" not "libfoo.a")
111 self.libraries = []
112
113 # 'library_dirs': a list of directories to search for libraries
114 self.library_dirs = []
115
Greg Warde1aaaa61999-08-14 23:50:50 +0000116 # 'runtime_library_dirs': a list of directories to search for
117 # shared libraries/objects at runtime
118 self.runtime_library_dirs = []
119
Greg Ward3f81cf71999-07-10 02:03:53 +0000120 # 'objects': a list of object files (or similar, such as explicitly
121 # named library files) to include on any link
122 self.objects = []
123
Greg Warde5c62bf2000-06-25 02:08:18 +0000124 for key in self.executables.keys():
125 self.set_executable(key, self.executables[key])
126
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000127 def set_executables(self, **args):
Greg Warde5c62bf2000-06-25 02:08:18 +0000128 """Define the executables (and options for them) that will be run
129 to perform the various stages of compilation. The exact set of
130 executables that may be specified here depends on the compiler
131 class (via the 'executables' class attribute), but most will have:
132 compiler the C/C++ compiler
133 linker_so linker used to create shared objects and libraries
134 linker_exe linker used to create binary executables
135 archiver static library creator
136
137 On platforms with a command-line (Unix, DOS/Windows), each of these
138 is a string that will be split into executable name and (optional)
139 list of arguments. (Splitting the string is done similarly to how
140 Unix shells operate: words are delimited by spaces, but quotes and
141 backslashes can override this. See
142 'distutils.util.split_quoted()'.)
143 """
144
145 # Note that some CCompiler implementation classes will define class
146 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
147 # this is appropriate when a compiler class is for exactly one
148 # compiler/OS combination (eg. MSVCCompiler). Other compiler
149 # classes (UnixCCompiler, in particular) are driven by information
150 # discovered at run-time, since there are many different ways to do
151 # basically the same things with Unix C compilers.
152
153 for key in args.keys():
Guido van Rossum8bc09652008-02-21 18:18:37 +0000154 if key not in self.executables:
Greg Warde5c62bf2000-06-25 02:08:18 +0000155 raise ValueError, \
156 "unknown executable '%s' for class %s" % \
157 (key, self.__class__.__name__)
158 self.set_executable(key, args[key])
159
Greg Warde5c62bf2000-06-25 02:08:18 +0000160 def set_executable(self, key, value):
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000161 if isinstance(value, str):
Greg Warde5c62bf2000-06-25 02:08:18 +0000162 setattr(self, key, split_quoted(value))
163 else:
164 setattr(self, key, value)
Fred Drakeb94b8492001-12-06 20:51:35 +0000165
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000166 def _find_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000167 i = 0
168 for defn in self.macros:
169 if defn[0] == name:
170 return i
171 i = i + 1
Greg Ward3f81cf71999-07-10 02:03:53 +0000172 return None
173
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000174 def _check_macro_definitions(self, definitions):
Greg Ward3f81cf71999-07-10 02:03:53 +0000175 """Ensures that every element of 'definitions' is a valid macro
Greg Wardc3a43b42000-06-24 18:10:48 +0000176 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
177 nothing if all definitions are OK, raise TypeError otherwise.
178 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000179 for defn in definitions:
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000180 if not (isinstance(defn, tuple) and
Greg Ward3f81cf71999-07-10 02:03:53 +0000181 (len (defn) == 1 or
182 (len (defn) == 2 and
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000183 (isinstance(defn[1], str) or defn[1] is None))) and
184 isinstance(defn[0], str)):
Greg Ward3f81cf71999-07-10 02:03:53 +0000185 raise TypeError, \
186 ("invalid macro definition '%s': " % defn) + \
187 "must be tuple (string,), (string, string), or " + \
188 "(string, None)"
189
190
191 # -- Bookkeeping methods -------------------------------------------
192
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000193 def define_macro(self, name, value=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000194 """Define a preprocessor macro for all compilations driven by this
195 compiler object. The optional parameter 'value' should be a
196 string; if it is not supplied, then the macro will be defined
197 without an explicit value and the exact outcome depends on the
198 compiler used (XXX true? does ANSI say anything about this?)
199 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000200 # Delete from the list of macro definitions/undefinitions if
201 # already there (so that this one will take precedence).
202 i = self._find_macro (name)
203 if i is not None:
204 del self.macros[i]
205
206 defn = (name, value)
207 self.macros.append (defn)
208
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000209 def undefine_macro(self, name):
Greg Ward3f81cf71999-07-10 02:03:53 +0000210 """Undefine a preprocessor macro for all compilations driven by
Greg Wardc3a43b42000-06-24 18:10:48 +0000211 this compiler object. If the same macro is defined by
212 'define_macro()' and undefined by 'undefine_macro()' the last call
213 takes precedence (including multiple redefinitions or
214 undefinitions). If the macro is redefined/undefined on a
215 per-compilation basis (ie. in the call to 'compile()'), then that
216 takes precedence.
217 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000218 # Delete from the list of macro definitions/undefinitions if
219 # already there (so that this one will take precedence).
220 i = self._find_macro (name)
221 if i is not None:
222 del self.macros[i]
223
224 undefn = (name,)
225 self.macros.append (undefn)
226
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000227 def add_include_dir(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000228 """Add 'dir' to the list of directories that will be searched for
229 header files. The compiler is instructed to search directories in
230 the order in which they are supplied by successive calls to
231 'add_include_dir()'.
232 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000233 self.include_dirs.append (dir)
234
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000235 def set_include_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000236 """Set the list of directories that will be searched to 'dirs' (a
237 list of strings). Overrides any preceding calls to
238 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
239 to the list passed to 'set_include_dirs()'. This does not affect
240 any list of standard include directories that the compiler may
241 search by default.
242 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000243 self.include_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000244
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000245 def add_library(self, libname):
Greg Wardc3a43b42000-06-24 18:10:48 +0000246 """Add 'libname' to the list of libraries that will be included in
247 all links driven by this compiler object. Note that 'libname'
248 should *not* be the name of a file containing a library, but the
249 name of the library itself: the actual filename will be inferred by
250 the linker, the compiler, or the compiler class (depending on the
251 platform).
Greg Ward3f81cf71999-07-10 02:03:53 +0000252
Greg Wardc3a43b42000-06-24 18:10:48 +0000253 The linker will be instructed to link against libraries in the
254 order they were supplied to 'add_library()' and/or
255 'set_libraries()'. It is perfectly valid to duplicate library
256 names; the linker will be instructed to link against libraries as
257 many times as they are mentioned.
258 """
Greg Ward3f81cf71999-07-10 02:03:53 +0000259 self.libraries.append (libname)
260
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000261 def set_libraries(self, libnames):
Greg Wardc3a43b42000-06-24 18:10:48 +0000262 """Set the list of libraries to be included in all links driven by
263 this compiler object to 'libnames' (a list of strings). This does
264 not affect any standard system libraries that the linker may
265 include by default.
266 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000267 self.libraries = libnames[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000268
269
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000270 def add_library_dir(self, dir):
Greg Ward3f81cf71999-07-10 02:03:53 +0000271 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000272 libraries specified to 'add_library()' and 'set_libraries()'. The
273 linker will be instructed to search for libraries in the order they
274 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
275 """
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000276 self.library_dirs.append(dir)
Greg Ward3f81cf71999-07-10 02:03:53 +0000277
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000278 def set_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000279 """Set the list of library search directories to 'dirs' (a list of
280 strings). This does not affect any standard library search path
281 that the linker may search by default.
282 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000283 self.library_dirs = dirs[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000284
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000285 def add_runtime_library_dir(self, dir):
Greg Warde1aaaa61999-08-14 23:50:50 +0000286 """Add 'dir' to the list of directories that will be searched for
Greg Wardc3a43b42000-06-24 18:10:48 +0000287 shared libraries at runtime.
288 """
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000289 self.runtime_library_dirs.append(dir)
Greg Warde1aaaa61999-08-14 23:50:50 +0000290
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000291 def set_runtime_library_dirs(self, dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000292 """Set the list of directories to search for shared libraries at
293 runtime to 'dirs' (a list of strings). This does not affect any
294 standard search path that the runtime linker may search by
295 default.
296 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000297 self.runtime_library_dirs = dirs[:]
Greg Warde1aaaa61999-08-14 23:50:50 +0000298
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000299 def add_link_object(self, object):
Greg Wardc3a43b42000-06-24 18:10:48 +0000300 """Add 'object' to the list of object files (or analogues, such as
Greg Ward612eb9f2000-07-27 02:13:20 +0000301 explicitly named library files or the output of "resource
Greg Wardc3a43b42000-06-24 18:10:48 +0000302 compilers") to be included in every link driven by this compiler
303 object.
304 """
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000305 self.objects.append(object)
Greg Ward3f81cf71999-07-10 02:03:53 +0000306
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000307 def set_link_objects(self, objects):
Greg Wardc3a43b42000-06-24 18:10:48 +0000308 """Set the list of object files (or analogues) to be included in
309 every link to 'objects'. This does not affect any standard object
310 files that the linker may include by default (such as system
311 libraries).
312 """
Antoine Pitrouf5413782009-05-15 17:27:30 +0000313 self.objects = objects[:]
Greg Ward3f81cf71999-07-10 02:03:53 +0000314
315
Thomas Hellere6500802002-04-25 17:03:30 +0000316 # -- Private utility methods --------------------------------------
Greg Ward32c4a8a2000-03-06 03:40:29 +0000317 # (here for the convenience of subclasses)
318
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000319 # Helper method to prep compiler in subclass compile() methods
320
321 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
322 extra):
Tarek Ziadédc0f4872010-01-11 22:50:29 +0000323 """Process arguments and decide which source files to compile."""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000324 if outdir is None:
325 outdir = self.output_dir
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000326 elif not isinstance(outdir, str):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000327 raise TypeError, "'output_dir' must be a string or None"
328
329 if macros is None:
330 macros = self.macros
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000331 elif isinstance(macros, list):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000332 macros = macros + (self.macros or [])
333 else:
334 raise TypeError, "'macros' (if supplied) must be a list of tuples"
335
336 if incdirs is None:
337 incdirs = self.include_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000338 elif isinstance(incdirs, (list, tuple)):
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000339 incdirs = list(incdirs) + (self.include_dirs or [])
340 else:
341 raise TypeError, \
342 "'include_dirs' (if supplied) must be a list of strings"
343
344 if extra is None:
345 extra = []
346
347 # Get the list of expected output (object) files
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000348 objects = self.object_filenames(sources,
Bob Ippolitoad647852006-05-26 14:07:23 +0000349 strip_dir=0,
Andrew M. Kuchling8c6e0ec2002-12-29 17:00:57 +0000350 output_dir=outdir)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000351 assert len(objects) == len(sources)
352
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000353 pp_opts = gen_preprocess_options(macros, incdirs)
354
355 build = {}
356 for i in range(len(sources)):
357 src = sources[i]
358 obj = objects[i]
359 ext = os.path.splitext(src)[1]
360 self.mkpath(os.path.dirname(obj))
Tarek Ziadédc0f4872010-01-11 22:50:29 +0000361 build[obj] = (src, ext)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000362
363 return macros, objects, extra, pp_opts, build
364
365 def _get_cc_args(self, pp_opts, debug, before):
366 # works for unixccompiler, emxccompiler, cygwinccompiler
367 cc_args = pp_opts + ['-c']
368 if debug:
369 cc_args[:0] = ['-g']
370 if before:
371 cc_args[:0] = before
372 return cc_args
373
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000374 def _fix_compile_args(self, output_dir, macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +0000375 """Typecheck and fix-up some of the arguments to the 'compile()'
376 method, and return fixed-up values. Specifically: if 'output_dir'
377 is None, replaces it with 'self.output_dir'; ensures that 'macros'
378 is a list, and augments it with 'self.macros'; ensures that
379 'include_dirs' is a list, and augments it with 'self.include_dirs'.
380 Guarantees that the returned values are of the correct type,
381 i.e. for 'output_dir' either string or None, and for 'macros' and
382 'include_dirs' either list or None.
383 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000384 if output_dir is None:
385 output_dir = self.output_dir
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000386 elif not isinstance(output_dir, str):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000387 raise TypeError, "'output_dir' must be a string or None"
388
389 if macros is None:
390 macros = self.macros
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000391 elif isinstance(macros, list):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000392 macros = macros + (self.macros or [])
393 else:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000394 raise TypeError, "'macros' (if supplied) must be a list of tuples"
Greg Ward32c4a8a2000-03-06 03:40:29 +0000395
396 if include_dirs is None:
397 include_dirs = self.include_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000398 elif isinstance(include_dirs, (list, tuple)):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000399 include_dirs = list (include_dirs) + (self.include_dirs or [])
400 else:
401 raise TypeError, \
402 "'include_dirs' (if supplied) must be a list of strings"
Fred Drakeb94b8492001-12-06 20:51:35 +0000403
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000404 return output_dir, macros, include_dirs
Greg Ward32c4a8a2000-03-06 03:40:29 +0000405
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000406 def _fix_object_args(self, objects, output_dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000407 """Typecheck and fix up some arguments supplied to various methods.
408 Specifically: ensure that 'objects' is a list; if output_dir is
409 None, replace with self.output_dir. Return fixed versions of
410 'objects' and 'output_dir'.
411 """
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000412 if not isinstance(objects, (list, tuple)):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000413 raise TypeError, \
414 "'objects' must be a list or tuple of strings"
415 objects = list (objects)
Fred Drakeb94b8492001-12-06 20:51:35 +0000416
Greg Ward32c4a8a2000-03-06 03:40:29 +0000417 if output_dir is None:
418 output_dir = self.output_dir
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000419 elif not isinstance(output_dir, str):
Greg Ward32c4a8a2000-03-06 03:40:29 +0000420 raise TypeError, "'output_dir' must be a string or None"
421
Greg Wardf10f95d2000-03-26 21:37:09 +0000422 return (objects, output_dir)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000423
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000424 def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
Greg Wardf10f95d2000-03-26 21:37:09 +0000425 """Typecheck and fix up some of the arguments supplied to the
Greg Wardc3a43b42000-06-24 18:10:48 +0000426 'link_*' methods. Specifically: ensure that all arguments are
427 lists, and augment them with their permanent versions
428 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
429 fixed versions of all arguments.
430 """
Greg Wardf10f95d2000-03-26 21:37:09 +0000431 if libraries is None:
432 libraries = self.libraries
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000433 elif isinstance(libraries, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000434 libraries = list (libraries) + (self.libraries or [])
Greg Ward32c4a8a2000-03-06 03:40:29 +0000435 else:
Greg Wardf10f95d2000-03-26 21:37:09 +0000436 raise TypeError, \
437 "'libraries' (if supplied) must be a list of strings"
Greg Ward32c4a8a2000-03-06 03:40:29 +0000438
Greg Wardf10f95d2000-03-26 21:37:09 +0000439 if library_dirs is None:
440 library_dirs = self.library_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000441 elif isinstance(library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000442 library_dirs = list (library_dirs) + (self.library_dirs or [])
443 else:
444 raise TypeError, \
445 "'library_dirs' (if supplied) must be a list of strings"
446
447 if runtime_library_dirs is None:
448 runtime_library_dirs = self.runtime_library_dirs
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000449 elif isinstance(runtime_library_dirs, (list, tuple)):
Greg Wardf10f95d2000-03-26 21:37:09 +0000450 runtime_library_dirs = (list (runtime_library_dirs) +
451 (self.runtime_library_dirs or []))
452 else:
453 raise TypeError, \
454 "'runtime_library_dirs' (if supplied) " + \
455 "must be a list of strings"
456
457 return (libraries, library_dirs, runtime_library_dirs)
458
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000459 def _need_link(self, objects, output_file):
Greg Wardc3a43b42000-06-24 18:10:48 +0000460 """Return true if we need to relink the files listed in 'objects'
461 to recreate 'output_file'.
462 """
Greg Ward32c4a8a2000-03-06 03:40:29 +0000463 if self.force:
464 return 1
465 else:
466 if self.dry_run:
467 newer = newer_group (objects, output_file, missing='newer')
468 else:
469 newer = newer_group (objects, output_file)
470 return newer
471
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000472 def detect_language(self, sources):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000473 """Detect the language of a given file, or list of files. Uses
474 language_map, and language_order to do the job.
475 """
Tarek Ziadé2b66da72009-12-21 01:22:46 +0000476 if not isinstance(sources, list):
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000477 sources = [sources]
478 lang = None
479 index = len(self.language_order)
480 for source in sources:
481 base, ext = os.path.splitext(source)
482 extlang = self.language_map.get(ext)
483 try:
484 extindex = self.language_order.index(extlang)
485 if extindex < index:
486 lang = extlang
487 index = extindex
488 except ValueError:
489 pass
490 return lang
491
Greg Ward3f81cf71999-07-10 02:03:53 +0000492 # -- Worker methods ------------------------------------------------
493 # (must be implemented by subclasses)
494
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000495 def preprocess(self, source, output_file=None, macros=None,
496 include_dirs=None, extra_preargs=None, extra_postargs=None):
Greg Ward3ff3b032000-06-21 02:58:46 +0000497 """Preprocess a single C/C++ source file, named in 'source'.
498 Output will be written to file named 'output_file', or stdout if
499 'output_file' not supplied. 'macros' is a list of macro
500 definitions as for 'compile()', which will augment the macros set
501 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
502 list of directory names that will be added to the default list.
Greg Warde5c62bf2000-06-25 02:08:18 +0000503
504 Raises PreprocessError on failure.
Greg Ward3ff3b032000-06-21 02:58:46 +0000505 """
506 pass
507
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000508 def compile(self, sources, output_dir=None, macros=None,
509 include_dirs=None, debug=0, extra_preargs=None,
510 extra_postargs=None, depends=None):
511 """Compile one or more source files.
512
513 'sources' must be a list of filenames, most likely C/C++
514 files, but in reality anything that can be handled by a
515 particular compiler and compiler class (eg. MSVCCompiler can
516 handle resource files in 'sources'). Return a list of object
517 filenames, one per source filename in 'sources'. Depending on
518 the implementation, not all source files will necessarily be
519 compiled, but all corresponding object filenames will be
520 returned.
Greg Ward32c4a8a2000-03-06 03:40:29 +0000521
Greg Wardc3a43b42000-06-24 18:10:48 +0000522 If 'output_dir' is given, object files will be put under it, while
523 retaining their original path component. That is, "foo/bar.c"
524 normally compiles to "foo/bar.o" (for a Unix implementation); if
525 'output_dir' is "build", then it would compile to
526 "build/foo/bar.o".
Greg Ward3f81cf71999-07-10 02:03:53 +0000527
Greg Wardc3a43b42000-06-24 18:10:48 +0000528 'macros', if given, must be a list of macro definitions. A macro
529 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
530 The former defines a macro; if the value is None, the macro is
531 defined without an explicit value. The 1-tuple case undefines a
532 macro. Later definitions/redefinitions/ undefinitions take
533 precedence.
Greg Ward3f81cf71999-07-10 02:03:53 +0000534
Greg Wardc3a43b42000-06-24 18:10:48 +0000535 'include_dirs', if given, must be a list of strings, the
536 directories to add to the default include file search path for this
537 compilation only.
Greg Ward3c045a52000-02-09 02:16:14 +0000538
Greg Wardc3a43b42000-06-24 18:10:48 +0000539 'debug' is a boolean; if true, the compiler will be instructed to
540 output debug symbols in (or alongside) the object file(s).
Greg Ward802d6b71999-09-29 12:20:55 +0000541
Greg Wardc3a43b42000-06-24 18:10:48 +0000542 'extra_preargs' and 'extra_postargs' are implementation- dependent.
543 On platforms that have the notion of a command-line (e.g. Unix,
544 DOS/Windows), they are most likely lists of strings: extra
545 command-line arguments to prepand/append to the compiler command
546 line. On other platforms, consult the implementation class
547 documentation. In any event, they are intended as an escape hatch
548 for those occasions when the abstract compiler framework doesn't
549 cut the mustard.
Greg Wardd1517112000-05-30 01:56:44 +0000550
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000551 'depends', if given, is a list of filenames that all targets
552 depend on. If a source file is older than any file in
553 depends, then the source file will be recompiled. This
554 supports dependency tracking, but only at a coarse
555 granularity.
556
Greg Wardc3a43b42000-06-24 18:10:48 +0000557 Raises CompileError on failure.
558 """
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000559 # A concrete compiler class can either override this method
560 # entirely or implement _compile().
Tim Peters182b5ac2004-07-18 06:16:08 +0000561
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000562 macros, objects, extra_postargs, pp_opts, build = \
563 self._setup_compile(output_dir, macros, include_dirs, sources,
564 depends, extra_postargs)
565 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
566
Thomas Heller9436a752003-12-05 20:12:23 +0000567 for obj in objects:
568 try:
569 src, ext = build[obj]
570 except KeyError:
571 continue
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000572 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
573
574 # Return *all* object filenames, not just the ones we just built.
575 return objects
576
577 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
578 """Compile 'src' to product 'obj'."""
Tim Peters182b5ac2004-07-18 06:16:08 +0000579
Jeremy Hylton6e08d222002-06-18 18:42:41 +0000580 # A concrete compiler class that does not override compile()
581 # should implement _compile().
582 pass
Greg Ward3f81cf71999-07-10 02:03:53 +0000583
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000584 def create_static_lib(self, objects, output_libname, output_dir=None,
585 debug=0, target_lang=None):
Greg Wardc3a43b42000-06-24 18:10:48 +0000586 """Link a bunch of stuff together to create a static library file.
587 The "bunch of stuff" consists of the list of object files supplied
588 as 'objects', the extra object files supplied to
589 'add_link_object()' and/or 'set_link_objects()', the libraries
590 supplied to 'add_library()' and/or 'set_libraries()', and the
591 libraries supplied as 'libraries' (if any).
Greg Ward3f81cf71999-07-10 02:03:53 +0000592
Greg Wardc3a43b42000-06-24 18:10:48 +0000593 'output_libname' should be a library name, not a filename; the
594 filename will be inferred from the library name. 'output_dir' is
595 the directory where the library file will be put.
Greg Ward3c045a52000-02-09 02:16:14 +0000596
Greg Wardc3a43b42000-06-24 18:10:48 +0000597 'debug' is a boolean; if true, debugging information will be
598 included in the library (note that on most platforms, it is the
599 compile step where this matters: the 'debug' flag is included here
600 just for consistency).
Greg Wardd1517112000-05-30 01:56:44 +0000601
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000602 'target_lang' is the target language for which the given objects
603 are being compiled. This allows specific linkage time treatment of
604 certain languages.
605
Greg Wardc3a43b42000-06-24 18:10:48 +0000606 Raises LibError on failure.
607 """
Greg Ward3c045a52000-02-09 02:16:14 +0000608 pass
Fred Drakeb94b8492001-12-06 20:51:35 +0000609
Greg Ward42406482000-09-27 02:08:14 +0000610 # values for target_desc parameter in link()
611 SHARED_OBJECT = "shared_object"
612 SHARED_LIBRARY = "shared_library"
613 EXECUTABLE = "executable"
614
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000615 def link(self, target_desc, objects, output_filename, output_dir=None,
616 libraries=None, library_dirs=None, runtime_library_dirs=None,
617 export_symbols=None, debug=0, extra_preargs=None,
618 extra_postargs=None, build_temp=None, target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000619 """Link a bunch of stuff together to create an executable or
620 shared library file.
621
622 The "bunch of stuff" consists of the list of object files supplied
623 as 'objects'. 'output_filename' should be a filename. If
624 'output_dir' is supplied, 'output_filename' is relative to it
625 (i.e. 'output_filename' can provide directory components if
626 needed).
Greg Ward3febd601999-10-03 20:41:02 +0000627
Greg Wardc3a43b42000-06-24 18:10:48 +0000628 'libraries' is a list of libraries to link against. These are
629 library names, not filenames, since they're translated into
630 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
631 on Unix and "foo.lib" on DOS/Windows). However, they can include a
632 directory component, which means the linker will look in that
633 specific directory rather than searching all the normal locations.
Greg Ward5299b6a2000-05-20 13:23:21 +0000634
Greg Wardc3a43b42000-06-24 18:10:48 +0000635 'library_dirs', if supplied, should be a list of directories to
636 search for libraries that were specified as bare library names
637 (ie. no directory component). These are on top of the system
638 default and those supplied to 'add_library_dir()' and/or
639 'set_library_dirs()'. 'runtime_library_dirs' is a list of
640 directories that will be embedded into the shared library and used
641 to search for other shared libraries that *it* depends on at
642 run-time. (This may only be relevant on Unix.)
Greg Ward802d6b71999-09-29 12:20:55 +0000643
Greg Wardc3a43b42000-06-24 18:10:48 +0000644 'export_symbols' is a list of symbols that the shared library will
645 export. (This appears to be relevant only on Windows.)
Greg Ward3c045a52000-02-09 02:16:14 +0000646
Greg Wardc3a43b42000-06-24 18:10:48 +0000647 'debug' is as for 'compile()' and 'create_static_lib()', with the
648 slight distinction that it actually matters on most platforms (as
649 opposed to 'create_static_lib()', which includes a 'debug' flag
650 mostly for form's sake).
Greg Wardd1517112000-05-30 01:56:44 +0000651
Greg Wardc3a43b42000-06-24 18:10:48 +0000652 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
653 of course that they supply command-line arguments for the
654 particular linker being used).
Greg Ward3f81cf71999-07-10 02:03:53 +0000655
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000656 'target_lang' is the target language for which the given objects
657 are being compiled. This allows specific linkage time treatment of
658 certain languages.
659
Greg Wardc3a43b42000-06-24 18:10:48 +0000660 Raises LinkError on failure.
661 """
Greg Ward42406482000-09-27 02:08:14 +0000662 raise NotImplementedError
663
Fred Drakeb94b8492001-12-06 20:51:35 +0000664
Greg Ward264cf742000-09-27 02:24:21 +0000665 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
Greg Ward42406482000-09-27 02:08:14 +0000666
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000667 def link_shared_lib(self, objects, output_libname, output_dir=None,
668 libraries=None, library_dirs=None,
669 runtime_library_dirs=None, export_symbols=None,
670 debug=0, extra_preargs=None, extra_postargs=None,
671 build_temp=None, target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000672 self.link(CCompiler.SHARED_LIBRARY, objects,
Greg Ward42406482000-09-27 02:08:14 +0000673 self.library_filename(output_libname, lib_type='shared'),
674 output_dir,
675 libraries, library_dirs, runtime_library_dirs,
676 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000677 extra_preargs, extra_postargs, build_temp, target_lang)
Fred Drakeb94b8492001-12-06 20:51:35 +0000678
Greg Ward3f81cf71999-07-10 02:03:53 +0000679
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000680 def link_shared_object(self, objects, output_filename, output_dir=None,
681 libraries=None, library_dirs=None,
682 runtime_library_dirs=None, export_symbols=None,
683 debug=0, extra_preargs=None, extra_postargs=None,
684 build_temp=None, target_lang=None):
Greg Ward42406482000-09-27 02:08:14 +0000685 self.link(CCompiler.SHARED_OBJECT, objects,
686 output_filename, output_dir,
687 libraries, library_dirs, runtime_library_dirs,
688 export_symbols, debug,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000689 extra_preargs, extra_postargs, build_temp, target_lang)
Greg Ward3f81cf71999-07-10 02:03:53 +0000690
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000691 def link_executable(self, objects, output_progname, output_dir=None,
692 libraries=None, library_dirs=None,
693 runtime_library_dirs=None, debug=0, extra_preargs=None,
694 extra_postargs=None, target_lang=None):
Fred Drakeb94b8492001-12-06 20:51:35 +0000695 self.link(CCompiler.EXECUTABLE, objects,
Greg Ward264cf742000-09-27 02:24:21 +0000696 self.executable_filename(output_progname), output_dir,
Fred Drakeb94b8492001-12-06 20:51:35 +0000697 libraries, library_dirs, runtime_library_dirs, None,
Gustavo Niemeyer6b016852002-11-05 16:12:02 +0000698 debug, extra_preargs, extra_postargs, None, target_lang)
Greg Ward5baf1c22000-01-09 22:41:02 +0000699
700
Greg Wardf7edea72000-05-20 13:31:32 +0000701 # -- Miscellaneous methods -----------------------------------------
702 # These are all used by the 'gen_lib_options() function; there is
703 # no appropriate default implementation so subclasses should
704 # implement all of these.
705
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000706 def library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000707 """Return the compiler option to add 'dir' to the list of
708 directories searched for libraries.
709 """
Greg Wardf7edea72000-05-20 13:31:32 +0000710 raise NotImplementedError
711
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000712 def runtime_library_dir_option(self, dir):
Greg Wardc3a43b42000-06-24 18:10:48 +0000713 """Return the compiler option to add 'dir' to the list of
714 directories searched for runtime libraries.
715 """
Greg Wardf7edea72000-05-20 13:31:32 +0000716 raise NotImplementedError
717
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000718 def library_option(self, lib):
Greg Wardf7edea72000-05-20 13:31:32 +0000719 """Return the compiler option to add 'dir' to the list of libraries
Greg Wardc3a43b42000-06-24 18:10:48 +0000720 linked into the shared library or executable.
721 """
Greg Wardf7edea72000-05-20 13:31:32 +0000722 raise NotImplementedError
723
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000724 def has_function(self, funcname, includes=None, include_dirs=None,
725 libraries=None, library_dirs=None):
Skip Montanarofa012612003-04-24 19:49:23 +0000726 """Return a boolean indicating whether funcname is supported on
727 the current platform. The optional arguments can be used to
728 augment the compilation environment.
729 """
730
731 # this can't be included at module scope because it tries to
732 # import math which might not be available at that point - maybe
733 # the necessary logic should just be inlined?
734 import tempfile
735 if includes is None:
736 includes = []
737 if include_dirs is None:
738 include_dirs = []
739 if libraries is None:
740 libraries = []
741 if library_dirs is None:
742 library_dirs = []
743 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
744 f = os.fdopen(fd, "w")
745 for incl in includes:
746 f.write("""#include "%s"\n""" % incl)
747 f.write("""\
748main (int argc, char **argv) {
749 %s();
750}
751""" % funcname)
752 f.close()
753 try:
754 objects = self.compile([fname], include_dirs=include_dirs)
755 except CompileError:
756 return False
757
758 try:
759 self.link_executable(objects, "a.out",
760 libraries=libraries,
761 library_dirs=library_dirs)
762 except (LinkError, TypeError):
763 return False
764 return True
765
Greg Warde5e60152000-08-04 01:28:39 +0000766 def find_library_file (self, dirs, lib, debug=0):
Greg Wardf7edea72000-05-20 13:31:32 +0000767 """Search the specified list of directories for a static or shared
Greg Warde5e60152000-08-04 01:28:39 +0000768 library file 'lib' and return the full path to that file. If
769 'debug' true, look for a debugging version (if that makes sense on
770 the current platform). Return None if 'lib' wasn't found in any of
771 the specified directories.
Greg Wardc3a43b42000-06-24 18:10:48 +0000772 """
Greg Wardf7edea72000-05-20 13:31:32 +0000773 raise NotImplementedError
774
Greg Ward32c4a8a2000-03-06 03:40:29 +0000775 # -- Filename generation methods -----------------------------------
Greg Warde1aaaa61999-08-14 23:50:50 +0000776
Greg Ward32c4a8a2000-03-06 03:40:29 +0000777 # The default implementation of the filename generating methods are
778 # prejudiced towards the Unix/DOS/Windows view of the world:
779 # * object files are named by replacing the source file extension
780 # (eg. .c/.cpp -> .o/.obj)
781 # * library files (shared or static) are named by plugging the
782 # library name and extension into a format string, eg.
783 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
784 # * executables are named by appending an extension (possibly
785 # empty) to the program name: eg. progname + ".exe" for
786 # Windows
787 #
788 # To reduce redundant code, these methods expect to find
789 # several attributes in the current object (presumably defined
790 # as class attributes):
791 # * src_extensions -
792 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
793 # * obj_extension -
794 # object file extension, eg. '.o' or '.obj'
795 # * static_lib_extension -
796 # extension for static library files, eg. '.a' or '.lib'
797 # * shared_lib_extension -
798 # extension for shared library/object files, eg. '.so', '.dll'
799 # * static_lib_format -
800 # format string for generating static library filenames,
801 # eg. 'lib%s.%s' or '%s.%s'
802 # * shared_lib_format
803 # format string for generating shared library filenames
804 # (probably same as static_lib_format, since the extension
805 # is one of the intended parameters to the format string)
806 # * exe_extension -
807 # extension for executable files, eg. '' or '.exe'
Greg Ward9b17cb51999-09-13 03:07:24 +0000808
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000809 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
Guido van Rossumcc3a6df2002-10-01 04:14:17 +0000810 if output_dir is None:
811 output_dir = ''
Greg Ward32c4a8a2000-03-06 03:40:29 +0000812 obj_names = []
813 for src_name in source_filenames:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000814 base, ext = os.path.splitext(src_name)
Andrew M. Kuchling10da45e2003-02-26 18:52:07 +0000815 base = os.path.splitdrive(base)[1] # Chop off the drive
816 base = base[os.path.isabs(base):] # If abs, chop off leading /
Greg Ward32c4a8a2000-03-06 03:40:29 +0000817 if ext not in self.src_extensions:
Greg Ward9aa668b2000-06-24 02:22:49 +0000818 raise UnknownFileError, \
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000819 "unknown file type '%s' (from '%s')" % (ext, src_name)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000820 if strip_dir:
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000821 base = os.path.basename(base)
822 obj_names.append(os.path.join(output_dir,
823 base + self.obj_extension))
Greg Ward32c4a8a2000-03-06 03:40:29 +0000824 return obj_names
Greg Warde1aaaa61999-08-14 23:50:50 +0000825
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000826 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
827 assert output_dir is not None
Greg Ward32c4a8a2000-03-06 03:40:29 +0000828 if strip_dir:
829 basename = os.path.basename (basename)
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000830 return os.path.join(output_dir, basename + self.shared_lib_extension)
Greg Warde1aaaa61999-08-14 23:50:50 +0000831
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000832 def executable_filename(self, basename, strip_dir=0, output_dir=''):
833 assert output_dir is not None
Greg Ward42406482000-09-27 02:08:14 +0000834 if strip_dir:
835 basename = os.path.basename (basename)
836 return os.path.join(output_dir, basename + (self.exe_extension or ''))
Greg Ward26e48ea1999-08-29 18:17:36 +0000837
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000838 def library_filename(self, libname, lib_type='static', # or 'shared'
839 strip_dir=0, output_dir=''):
840 assert output_dir is not None
841 if lib_type not in ("static", "shared", "dylib"):
Jack Jansene259e592001-08-27 15:08:16 +0000842 raise ValueError, "'lib_type' must be \"static\", \"shared\" or \"dylib\""
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000843 fmt = getattr(self, lib_type + "_lib_format")
844 ext = getattr(self, lib_type + "_lib_extension")
Greg Ward32c4a8a2000-03-06 03:40:29 +0000845
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000846 dir, base = os.path.split (libname)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000847 filename = fmt % (base, ext)
848 if strip_dir:
849 dir = ''
850
Jeremy Hylton59b103c2002-06-13 17:26:30 +0000851 return os.path.join(output_dir, dir, filename)
Greg Ward32c4a8a2000-03-06 03:40:29 +0000852
Greg Warde1aaaa61999-08-14 23:50:50 +0000853
854 # -- Utility methods -----------------------------------------------
855
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000856 def announce(self, msg, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000857 log.debug(msg)
Greg Ward9b17cb51999-09-13 03:07:24 +0000858
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000859 def debug_print(self, msg):
Jeremy Hyltonfcd73532002-09-11 16:31:53 +0000860 from distutils.debug import DEBUG
Greg Wardf813e592000-08-04 01:31:13 +0000861 if DEBUG:
862 print msg
863
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000864 def warn(self, msg):
865 sys.stderr.write("warning: %s\n" % msg)
Greg Ward3febd601999-10-03 20:41:02 +0000866
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000867 def execute(self, func, args, msg=None, level=1):
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000868 execute(func, args, msg, self.dry_run)
Greg Ward9dddbb42000-08-02 01:38:20 +0000869
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000870 def spawn(self, cmd):
871 spawn(cmd, dry_run=self.dry_run)
Greg Warde1aaaa61999-08-14 23:50:50 +0000872
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000873 def move_file(self, src, dst):
874 return move_file(src, dst, dry_run=self.dry_run)
Greg Ward9b17cb51999-09-13 03:07:24 +0000875
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000876 def mkpath(self, name, mode=0777):
877 mkpath(name, mode, dry_run=self.dry_run)
Greg Ward013f0c82000-03-01 14:43:12 +0000878
Greg Warde1aaaa61999-08-14 23:50:50 +0000879
Greg Ward3f81cf71999-07-10 02:03:53 +0000880# class CCompiler
881
882
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000883# Map a sys.platform/os.name ('posix', 'nt') to the default compiler
884# type for that platform. Keys are interpreted as re match
885# patterns. Order is important; platform mappings are preferred over
886# OS names.
887_default_compilers = (
888
889 # Platform string mappings
Andrew M. Kuchlinga34dbe02001-02-27 19:13:15 +0000890
891 # on a cygwin built python we can use gcc like an ordinary UNIXish
892 # compiler
893 ('cygwin.*', 'unix'),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000894 ('os2emx', 'emx'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000895
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000896 # OS name mappings
897 ('posix', 'unix'),
898 ('nt', 'msvc'),
Fred Drakeb94b8492001-12-06 20:51:35 +0000899
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000900 )
901
902def get_default_compiler(osname=None, platform=None):
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000903 """ Determine the default compiler to use for the given platform.
904
905 osname should be one of the standard Python OS names (i.e. the
906 ones returned by os.name) and platform the common value
907 returned by sys.platform for the platform in question.
908
909 The default values are os.name and sys.platform in case the
910 parameters are not given.
911
912 """
913 if osname is None:
914 osname = os.name
915 if platform is None:
916 platform = sys.platform
917 for pattern, compiler in _default_compilers:
918 if re.match(pattern, platform) is not None or \
919 re.match(pattern, osname) is not None:
920 return compiler
921 # Default to Unix compiler
922 return 'unix'
Greg Ward802d6b71999-09-29 12:20:55 +0000923
924# Map compiler types to (module_name, class_name) pairs -- ie. where to
925# find the code that implements an interface to this compiler. (The module
926# is assumed to be in the 'distutils' package.)
Greg Ward2ff78872000-06-24 00:23:20 +0000927compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
928 "standard UNIX-style compiler"),
929 'msvc': ('msvccompiler', 'MSVCCompiler',
930 "Microsoft Visual C++"),
931 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
932 "Cygwin port of GNU C Compiler for Win32"),
933 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
934 "Mingw32 port of GNU C Compiler for Win32"),
Greg Wardbfc79d62000-06-28 01:29:09 +0000935 'bcpp': ('bcppcompiler', 'BCPPCompiler',
936 "Borland C++ Compiler"),
Marc-André Lemburg2544f512002-01-31 18:56:00 +0000937 'emx': ('emxccompiler', 'EMXCCompiler',
938 "EMX port of GNU C Compiler for OS/2"),
Greg Ward802d6b71999-09-29 12:20:55 +0000939 }
940
Greg Ward9d17a7a2000-06-07 03:00:06 +0000941def show_compilers():
Greg Ward2ff78872000-06-24 00:23:20 +0000942 """Print list of available compilers (used by the "--help-compiler"
943 options to "build", "build_ext", "build_clib").
944 """
945 # XXX this "knows" that the compiler option it's describing is
946 # "--compiler", which just happens to be the case for the three
947 # commands that use it.
Fred Drakeb94b8492001-12-06 20:51:35 +0000948 from distutils.fancy_getopt import FancyGetopt
Greg Ward2ff78872000-06-24 00:23:20 +0000949 compilers = []
Greg Ward9d17a7a2000-06-07 03:00:06 +0000950 for compiler in compiler_class.keys():
Jeremy Hylton65d6edb2000-07-07 20:45:21 +0000951 compilers.append(("compiler="+compiler, None,
Greg Ward2ff78872000-06-24 00:23:20 +0000952 compiler_class[compiler][2]))
953 compilers.sort()
954 pretty_printer = FancyGetopt(compilers)
Greg Ward9d17a7a2000-06-07 03:00:06 +0000955 pretty_printer.print_help("List of available compilers:")
Fred Drakeb94b8492001-12-06 20:51:35 +0000956
Greg Ward802d6b71999-09-29 12:20:55 +0000957
Tarek Ziadéae7731a2010-01-11 23:41:32 +0000958def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0):
Greg Ward802d6b71999-09-29 12:20:55 +0000959 """Generate an instance of some CCompiler subclass for the supplied
Greg Wardc3a43b42000-06-24 18:10:48 +0000960 platform/compiler combination. 'plat' defaults to 'os.name'
961 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
962 for that platform. Currently only 'posix' and 'nt' are supported, and
963 the default compilers are "traditional Unix interface" (UnixCCompiler
964 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
965 possible to ask for a Unix compiler object under Windows, and a
966 Microsoft compiler object under Unix -- if you supply a value for
967 'compiler', 'plat' is ignored.
968 """
Greg Ward802d6b71999-09-29 12:20:55 +0000969 if plat is None:
970 plat = os.name
971
972 try:
973 if compiler is None:
Marc-André Lemburg636b9062001-02-19 09:20:04 +0000974 compiler = get_default_compiler(plat)
Fred Drakeb94b8492001-12-06 20:51:35 +0000975
Greg Ward2ff78872000-06-24 00:23:20 +0000976 (module_name, class_name, long_description) = compiler_class[compiler]
Greg Ward802d6b71999-09-29 12:20:55 +0000977 except KeyError:
978 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
979 if compiler is not None:
980 msg = msg + " with '%s' compiler" % compiler
981 raise DistutilsPlatformError, msg
Fred Drakeb94b8492001-12-06 20:51:35 +0000982
Greg Ward802d6b71999-09-29 12:20:55 +0000983 try:
984 module_name = "distutils." + module_name
985 __import__ (module_name)
986 module = sys.modules[module_name]
987 klass = vars(module)[class_name]
988 except ImportError:
989 raise DistutilsModuleError, \
990 "can't compile C/C++ code: unable to load module '%s'" % \
991 module_name
992 except KeyError:
993 raise DistutilsModuleError, \
994 ("can't compile C/C++ code: unable to find class '%s' " +
995 "in module '%s'") % (class_name, module_name)
996
Jeremy Hyltoncd8a1142002-06-04 20:14:43 +0000997 # XXX The None is necessary to preserve backwards compatibility
998 # with classes that expect verbose to be the first positional
999 # argument.
Tarek Ziadéae7731a2010-01-11 23:41:32 +00001000 return klass(None, dry_run, force)
Greg Wardf7a39ec1999-09-08 02:29:08 +00001001
1002
Tarek Ziadéae7731a2010-01-11 23:41:32 +00001003def gen_preprocess_options(macros, include_dirs):
Greg Wardc3a43b42000-06-24 18:10:48 +00001004 """Generate C pre-processor options (-D, -U, -I) as used by at least
1005 two types of compilers: the typical Unix compiler and Visual C++.
1006 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
1007 means undefine (-U) macro 'name', and (name,value) means define (-D)
1008 macro 'name' to 'value'. 'include_dirs' is just a list of directory
1009 names to be added to the header file search path (-I). Returns a list
1010 of command-line options suitable for either Unix compilers or Visual
1011 C++.
1012 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001013 # XXX it would be nice (mainly aesthetic, and so we don't generate
1014 # stupid-looking command lines) to go over 'macros' and eliminate
1015 # redundant definitions/undefinitions (ie. ensure that only the
1016 # latest mention of a particular macro winds up on the command
1017 # line). I don't think it's essential, though, since most (all?)
1018 # Unix C compilers only pay attention to the latest -D or -U
1019 # mention of a macro on their command line. Similar situation for
Greg Ward0bdd90a1999-12-12 17:19:58 +00001020 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
Greg Wardf7a39ec1999-09-08 02:29:08 +00001021 # redundancies like this should probably be the province of
1022 # CCompiler, since the data structures used are inherited from it
1023 # and therefore common to all CCompiler classes.
1024
1025 pp_opts = []
1026 for macro in macros:
Greg Wardfbf8aff1999-09-21 18:35:09 +00001027
Tarek Ziadé2b66da72009-12-21 01:22:46 +00001028 if not (isinstance(macro, tuple) and
Greg Wardfbf8aff1999-09-21 18:35:09 +00001029 1 <= len (macro) <= 2):
1030 raise TypeError, \
1031 ("bad macro definition '%s': " +
1032 "each element of 'macros' list must be a 1- or 2-tuple") % \
1033 macro
1034
Greg Wardf7a39ec1999-09-08 02:29:08 +00001035 if len (macro) == 1: # undefine this macro
1036 pp_opts.append ("-U%s" % macro[0])
1037 elif len (macro) == 2:
1038 if macro[1] is None: # define with no explicit value
1039 pp_opts.append ("-D%s" % macro[0])
1040 else:
1041 # XXX *don't* need to be clever about quoting the
1042 # macro value here, because we're going to avoid the
1043 # shell at all costs when we spawn the command!
1044 pp_opts.append ("-D%s=%s" % macro)
1045
Greg Ward0bdd90a1999-12-12 17:19:58 +00001046 for dir in include_dirs:
Greg Wardf7a39ec1999-09-08 02:29:08 +00001047 pp_opts.append ("-I%s" % dir)
1048
1049 return pp_opts
1050
Greg Wardf7a39ec1999-09-08 02:29:08 +00001051
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001052def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
Greg Wardf7a39ec1999-09-08 02:29:08 +00001053 """Generate linker options for searching library directories and
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001054 linking with specific libraries.
1055
1056 'libraries' and 'library_dirs' are, respectively, lists of library names
1057 (not filenames!) and search directories. Returns a list of command-line
1058 options suitable for use with some compiler (depending on the two format
1059 strings passed in).
Greg Wardc3a43b42000-06-24 18:10:48 +00001060 """
Greg Wardf7a39ec1999-09-08 02:29:08 +00001061 lib_opts = []
1062
1063 for dir in library_dirs:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001064 lib_opts.append(compiler.library_dir_option(dir))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001065
Greg Wardd03f88a2000-03-18 15:19:51 +00001066 for dir in runtime_library_dirs:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001067 opt = compiler.runtime_library_dir_option(dir)
1068 if isinstance(opt, list):
1069 lib_opts.extend(opt)
Martin v. Löwis061f1322004-08-29 16:40:55 +00001070 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001071 lib_opts.append(opt)
Greg Wardd03f88a2000-03-18 15:19:51 +00001072
Greg Wardf7a39ec1999-09-08 02:29:08 +00001073 # XXX it's important that we *not* remove redundant library mentions!
1074 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1075 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1076 # -lbar" to get things to work -- that's certainly a possibility, but a
1077 # pretty nasty way to arrange your C code.
1078
1079 for lib in libraries:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001080 lib_dir, lib_name = os.path.split(lib)
1081 if lib_dir != '':
1082 lib_file = compiler.find_library_file([lib_dir], lib_name)
1083 if lib_file is not None:
1084 lib_opts.append(lib_file)
Greg Ward3febd601999-10-03 20:41:02 +00001085 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001086 compiler.warn("no library file corresponding to "
1087 "'%s' found (skipping)" % lib)
Greg Ward3febd601999-10-03 20:41:02 +00001088 else:
Tarek Ziadéc1df95e2009-06-16 08:31:01 +00001089 lib_opts.append(compiler.library_option(lib))
Greg Wardf7a39ec1999-09-08 02:29:08 +00001090
1091 return lib_opts