Issue #7575: An overflow test for math.expm1 was failing on OS X 10.4/Intel,
[python.git] / Lib / distutils / ccompiler.py
blobc046915153a288f22c17a4353a06ddb934c32fdd
1 """distutils.ccompiler
3 Contains CCompiler, an abstract base class that defines the interface
4 for the Distutils compiler abstraction model."""
6 __revision__ = "$Id$"
8 import sys
9 import os
10 import re
12 from distutils.errors import CompileError, LinkError, UnknownFileError
13 from distutils.spawn import spawn
14 from distutils.file_util import move_file
15 from distutils.dir_util import mkpath
16 from distutils.dep_util import newer_pairwise, newer_group
17 from distutils.util import split_quoted, execute
18 from distutils import log
20 class CCompiler:
21 """Abstract base class to define the interface that must be implemented
22 by real compiler classes. Also has some utility methods used by
23 several compiler classes.
25 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 """
34 # '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
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.
50 # * can't completely override the include or library searchg
51 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
52 # I'm not sure how widely supported this is even by Unix
53 # compilers, much less on other platforms. And I'm even less
54 # 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.)
58 # * 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.
65 # 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
76 # 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",
88 language_order = ["c++", "objc", "c"]
90 def __init__ (self,
91 verbose=0,
92 dry_run=0,
93 force=0):
95 self.dry_run = dry_run
96 self.force = force
97 self.verbose = verbose
99 # 'output_dir': a common output directory for object, library,
100 # shared object, and shared library files
101 self.output_dir = None
103 # '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 = []
109 # 'include_dirs': a list of directories to search for include files
110 self.include_dirs = []
112 # 'libraries': a list of libraries to include in any link
113 # (library names, not filenames: eg. "foo" not "libfoo.a")
114 self.libraries = []
116 # 'library_dirs': a list of directories to search for libraries
117 self.library_dirs = []
119 # 'runtime_library_dirs': a list of directories to search for
120 # shared libraries/objects at runtime
121 self.runtime_library_dirs = []
123 # 'objects': a list of object files (or similar, such as explicitly
124 # named library files) to include on any link
125 self.objects = []
127 for key in self.executables.keys():
128 self.set_executable(key, self.executables[key])
130 # __init__ ()
133 def set_executables (self, **args):
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
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()'.)
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.
160 for key in args.keys():
161 if key not in self.executables:
162 raise ValueError, \
163 "unknown executable '%s' for class %s" % \
164 (key, self.__class__.__name__)
165 self.set_executable(key, args[key])
167 # set_executables ()
169 def set_executable(self, key, value):
170 if isinstance(value, str):
171 setattr(self, key, split_quoted(value))
172 else:
173 setattr(self, key, value)
176 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
183 return None
186 def _check_macro_definitions (self, definitions):
187 """Ensures that every element of 'definitions' is a valid macro
188 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
189 nothing if all definitions are OK, raise TypeError otherwise.
191 for defn in definitions:
192 if not (isinstance(defn, tuple) and
193 (len (defn) == 1 or
194 (len (defn) == 2 and
195 (isinstance(defn[1], str) or defn[1] is None))) and
196 isinstance(defn[0], str)):
197 raise TypeError, \
198 ("invalid macro definition '%s': " % defn) + \
199 "must be tuple (string,), (string, string), or " + \
200 "(string, None)"
203 # -- Bookkeeping methods -------------------------------------------
205 def define_macro (self, name, value=None):
206 """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?)
212 # 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]
218 defn = (name, value)
219 self.macros.append (defn)
222 def undefine_macro (self, name):
223 """Undefine a preprocessor macro for all compilations driven by
224 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.
231 # 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]
237 undefn = (name,)
238 self.macros.append (undefn)
241 def add_include_dir (self, dir):
242 """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()'.
247 self.include_dirs.append (dir)
249 def set_include_dirs (self, dirs):
250 """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.
257 self.include_dirs = dirs[:]
260 def add_library (self, libname):
261 """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).
268 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.
274 self.libraries.append (libname)
276 def set_libraries (self, libnames):
277 """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.
282 self.libraries = libnames[:]
285 def add_library_dir (self, dir):
286 """Add 'dir' to the list of directories that will be searched for
287 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()'.
291 self.library_dirs.append (dir)
293 def set_library_dirs (self, dirs):
294 """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.
298 self.library_dirs = dirs[:]
301 def add_runtime_library_dir (self, dir):
302 """Add 'dir' to the list of directories that will be searched for
303 shared libraries at runtime.
305 self.runtime_library_dirs.append (dir)
307 def set_runtime_library_dirs (self, dirs):
308 """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.
313 self.runtime_library_dirs = dirs[:]
316 def add_link_object (self, object):
317 """Add 'object' to the list of object files (or analogues, such as
318 explicitly named library files or the output of "resource
319 compilers") to be included in every link driven by this compiler
320 object.
322 self.objects.append (object)
324 def set_link_objects (self, objects):
325 """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).
330 self.objects = objects[:]
333 # -- Private utility methods --------------------------------------
334 # (here for the convenience of subclasses)
336 # Helper method to prep compiler in subclass compile() methods
338 def _setup_compile(self, outdir, macros, incdirs, sources, depends,
339 extra):
340 """Process arguments and decide which source files to compile.
342 Merges _fix_compile_args() and _prep_compile().
344 if outdir is None:
345 outdir = self.output_dir
346 elif not isinstance(outdir, str):
347 raise TypeError, "'output_dir' must be a string or None"
349 if macros is None:
350 macros = self.macros
351 elif isinstance(macros, list):
352 macros = macros + (self.macros or [])
353 else:
354 raise TypeError, "'macros' (if supplied) must be a list of tuples"
356 if incdirs is None:
357 incdirs = self.include_dirs
358 elif isinstance(incdirs, (list, tuple)):
359 incdirs = list(incdirs) + (self.include_dirs or [])
360 else:
361 raise TypeError, \
362 "'include_dirs' (if supplied) must be a list of strings"
364 if extra is None:
365 extra = []
367 # Get the list of expected output (object) files
368 objects = self.object_filenames(sources,
369 strip_dir=0,
370 output_dir=outdir)
371 assert len(objects) == len(sources)
373 # XXX should redo this code to eliminate skip_source entirely.
374 # XXX instead create build and issue skip messages inline
376 if self.force:
377 skip_source = {} # rebuild everything
378 for source in sources:
379 skip_source[source] = 0
380 elif depends is None:
381 # If depends is None, figure out which source files we
382 # have to recompile according to a simplistic check. We
383 # just compare the source and object file, no deep
384 # dependency checking involving header files.
385 skip_source = {} # rebuild everything
386 for source in sources: # no wait, rebuild nothing
387 skip_source[source] = 1
389 n_sources, n_objects = newer_pairwise(sources, objects)
390 for source in n_sources: # no really, only rebuild what's
391 skip_source[source] = 0 # out-of-date
392 else:
393 # If depends is a list of files, then do a different
394 # simplistic check. Assume that each object depends on
395 # its source and all files in the depends list.
396 skip_source = {}
397 # L contains all the depends plus a spot at the end for a
398 # particular source file
399 L = depends[:] + [None]
400 for i in range(len(objects)):
401 source = sources[i]
402 L[-1] = source
403 if newer_group(L, objects[i]):
404 skip_source[source] = 0
405 else:
406 skip_source[source] = 1
408 pp_opts = gen_preprocess_options(macros, incdirs)
410 build = {}
411 for i in range(len(sources)):
412 src = sources[i]
413 obj = objects[i]
414 ext = os.path.splitext(src)[1]
415 self.mkpath(os.path.dirname(obj))
416 if skip_source[src]:
417 log.debug("skipping %s (%s up-to-date)", src, obj)
418 else:
419 build[obj] = src, ext
421 return macros, objects, extra, pp_opts, build
423 def _get_cc_args(self, pp_opts, debug, before):
424 # works for unixccompiler, emxccompiler, cygwinccompiler
425 cc_args = pp_opts + ['-c']
426 if debug:
427 cc_args[:0] = ['-g']
428 if before:
429 cc_args[:0] = before
430 return cc_args
432 def _fix_compile_args (self, output_dir, macros, include_dirs):
433 """Typecheck and fix-up some of the arguments to the 'compile()'
434 method, and return fixed-up values. Specifically: if 'output_dir'
435 is None, replaces it with 'self.output_dir'; ensures that 'macros'
436 is a list, and augments it with 'self.macros'; ensures that
437 'include_dirs' is a list, and augments it with 'self.include_dirs'.
438 Guarantees that the returned values are of the correct type,
439 i.e. for 'output_dir' either string or None, and for 'macros' and
440 'include_dirs' either list or None.
442 if output_dir is None:
443 output_dir = self.output_dir
444 elif type (output_dir) is not StringType:
445 raise TypeError, "'output_dir' must be a string or None"
447 if macros is None:
448 macros = self.macros
449 elif isinstance(macros, list):
450 macros = macros + (self.macros or [])
451 else:
452 raise TypeError, "'macros' (if supplied) must be a list of tuples"
454 if include_dirs is None:
455 include_dirs = self.include_dirs
456 elif isinstance(include_dirs, (list, tuple)):
457 include_dirs = list (include_dirs) + (self.include_dirs or [])
458 else:
459 raise TypeError, \
460 "'include_dirs' (if supplied) must be a list of strings"
462 return output_dir, macros, include_dirs
464 # _fix_compile_args ()
467 def _prep_compile(self, sources, output_dir, depends=None):
468 """Decide which souce files must be recompiled.
470 Determine the list of object files corresponding to 'sources',
471 and figure out which ones really need to be recompiled.
472 Return a list of all object files and a dictionary telling
473 which source files can be skipped.
475 # Get the list of expected output (object) files
476 objects = self.object_filenames(sources, output_dir=output_dir)
477 assert len(objects) == len(sources)
479 if self.force:
480 skip_source = {} # rebuild everything
481 for source in sources:
482 skip_source[source] = 0
483 elif depends is None:
484 # If depends is None, figure out which source files we
485 # have to recompile according to a simplistic check. We
486 # just compare the source and object file, no deep
487 # dependency checking involving header files.
488 skip_source = {} # rebuild everything
489 for source in sources: # no wait, rebuild nothing
490 skip_source[source] = 1
492 n_sources, n_objects = newer_pairwise(sources, objects)
493 for source in n_sources: # no really, only rebuild what's
494 skip_source[source] = 0 # out-of-date
495 else:
496 # If depends is a list of files, then do a different
497 # simplistic check. Assume that each object depends on
498 # its source and all files in the depends list.
499 skip_source = {}
500 # L contains all the depends plus a spot at the end for a
501 # particular source file
502 L = depends[:] + [None]
503 for i in range(len(objects)):
504 source = sources[i]
505 L[-1] = source
506 if newer_group(L, objects[i]):
507 skip_source[source] = 0
508 else:
509 skip_source[source] = 1
511 return objects, skip_source
513 # _prep_compile ()
516 def _fix_object_args (self, objects, output_dir):
517 """Typecheck and fix up some arguments supplied to various methods.
518 Specifically: ensure that 'objects' is a list; if output_dir is
519 None, replace with self.output_dir. Return fixed versions of
520 'objects' and 'output_dir'.
522 if not isinstance(objects, (list, tuple)):
523 raise TypeError, \
524 "'objects' must be a list or tuple of strings"
525 objects = list (objects)
527 if output_dir is None:
528 output_dir = self.output_dir
529 elif not isinstance(output_dir, str):
530 raise TypeError, "'output_dir' must be a string or None"
532 return (objects, output_dir)
535 def _fix_lib_args (self, libraries, library_dirs, runtime_library_dirs):
536 """Typecheck and fix up some of the arguments supplied to the
537 'link_*' methods. Specifically: ensure that all arguments are
538 lists, and augment them with their permanent versions
539 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
540 fixed versions of all arguments.
542 if libraries is None:
543 libraries = self.libraries
544 elif isinstance(libraries, (list, tuple)):
545 libraries = list (libraries) + (self.libraries or [])
546 else:
547 raise TypeError, \
548 "'libraries' (if supplied) must be a list of strings"
550 if library_dirs is None:
551 library_dirs = self.library_dirs
552 elif isinstance(library_dirs, (list, tuple)):
553 library_dirs = list (library_dirs) + (self.library_dirs or [])
554 else:
555 raise TypeError, \
556 "'library_dirs' (if supplied) must be a list of strings"
558 if runtime_library_dirs is None:
559 runtime_library_dirs = self.runtime_library_dirs
560 elif isinstance(runtime_library_dirs, (list, tuple)):
561 runtime_library_dirs = (list (runtime_library_dirs) +
562 (self.runtime_library_dirs or []))
563 else:
564 raise TypeError, \
565 "'runtime_library_dirs' (if supplied) " + \
566 "must be a list of strings"
568 return (libraries, library_dirs, runtime_library_dirs)
570 # _fix_lib_args ()
573 def _need_link (self, objects, output_file):
574 """Return true if we need to relink the files listed in 'objects'
575 to recreate 'output_file'.
577 if self.force:
578 return 1
579 else:
580 if self.dry_run:
581 newer = newer_group (objects, output_file, missing='newer')
582 else:
583 newer = newer_group (objects, output_file)
584 return newer
586 # _need_link ()
588 def detect_language (self, sources):
589 """Detect the language of a given file, or list of files. Uses
590 language_map, and language_order to do the job.
592 if not isinstance(sources, list):
593 sources = [sources]
594 lang = None
595 index = len(self.language_order)
596 for source in sources:
597 base, ext = os.path.splitext(source)
598 extlang = self.language_map.get(ext)
599 try:
600 extindex = self.language_order.index(extlang)
601 if extindex < index:
602 lang = extlang
603 index = extindex
604 except ValueError:
605 pass
606 return lang
608 # detect_language ()
610 # -- Worker methods ------------------------------------------------
611 # (must be implemented by subclasses)
613 def preprocess (self,
614 source,
615 output_file=None,
616 macros=None,
617 include_dirs=None,
618 extra_preargs=None,
619 extra_postargs=None):
620 """Preprocess a single C/C++ source file, named in 'source'.
621 Output will be written to file named 'output_file', or stdout if
622 'output_file' not supplied. 'macros' is a list of macro
623 definitions as for 'compile()', which will augment the macros set
624 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
625 list of directory names that will be added to the default list.
627 Raises PreprocessError on failure.
629 pass
631 def compile(self, sources, output_dir=None, macros=None,
632 include_dirs=None, debug=0, extra_preargs=None,
633 extra_postargs=None, depends=None):
634 """Compile one or more source files.
636 'sources' must be a list of filenames, most likely C/C++
637 files, but in reality anything that can be handled by a
638 particular compiler and compiler class (eg. MSVCCompiler can
639 handle resource files in 'sources'). Return a list of object
640 filenames, one per source filename in 'sources'. Depending on
641 the implementation, not all source files will necessarily be
642 compiled, but all corresponding object filenames will be
643 returned.
645 If 'output_dir' is given, object files will be put under it, while
646 retaining their original path component. That is, "foo/bar.c"
647 normally compiles to "foo/bar.o" (for a Unix implementation); if
648 'output_dir' is "build", then it would compile to
649 "build/foo/bar.o".
651 'macros', if given, must be a list of macro definitions. A macro
652 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
653 The former defines a macro; if the value is None, the macro is
654 defined without an explicit value. The 1-tuple case undefines a
655 macro. Later definitions/redefinitions/ undefinitions take
656 precedence.
658 'include_dirs', if given, must be a list of strings, the
659 directories to add to the default include file search path for this
660 compilation only.
662 'debug' is a boolean; if true, the compiler will be instructed to
663 output debug symbols in (or alongside) the object file(s).
665 'extra_preargs' and 'extra_postargs' are implementation- dependent.
666 On platforms that have the notion of a command-line (e.g. Unix,
667 DOS/Windows), they are most likely lists of strings: extra
668 command-line arguments to prepand/append to the compiler command
669 line. On other platforms, consult the implementation class
670 documentation. In any event, they are intended as an escape hatch
671 for those occasions when the abstract compiler framework doesn't
672 cut the mustard.
674 'depends', if given, is a list of filenames that all targets
675 depend on. If a source file is older than any file in
676 depends, then the source file will be recompiled. This
677 supports dependency tracking, but only at a coarse
678 granularity.
680 Raises CompileError on failure.
683 # A concrete compiler class can either override this method
684 # entirely or implement _compile().
686 macros, objects, extra_postargs, pp_opts, build = \
687 self._setup_compile(output_dir, macros, include_dirs, sources,
688 depends, extra_postargs)
689 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
691 for obj in objects:
692 try:
693 src, ext = build[obj]
694 except KeyError:
695 continue
696 self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
698 # Return *all* object filenames, not just the ones we just built.
699 return objects
701 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
702 """Compile 'src' to product 'obj'."""
704 # A concrete compiler class that does not override compile()
705 # should implement _compile().
706 pass
708 def create_static_lib (self,
709 objects,
710 output_libname,
711 output_dir=None,
712 debug=0,
713 target_lang=None):
714 """Link a bunch of stuff together to create a static library file.
715 The "bunch of stuff" consists of the list of object files supplied
716 as 'objects', the extra object files supplied to
717 'add_link_object()' and/or 'set_link_objects()', the libraries
718 supplied to 'add_library()' and/or 'set_libraries()', and the
719 libraries supplied as 'libraries' (if any).
721 'output_libname' should be a library name, not a filename; the
722 filename will be inferred from the library name. 'output_dir' is
723 the directory where the library file will be put.
725 'debug' is a boolean; if true, debugging information will be
726 included in the library (note that on most platforms, it is the
727 compile step where this matters: the 'debug' flag is included here
728 just for consistency).
730 'target_lang' is the target language for which the given objects
731 are being compiled. This allows specific linkage time treatment of
732 certain languages.
734 Raises LibError on failure.
736 pass
739 # values for target_desc parameter in link()
740 SHARED_OBJECT = "shared_object"
741 SHARED_LIBRARY = "shared_library"
742 EXECUTABLE = "executable"
744 def link (self,
745 target_desc,
746 objects,
747 output_filename,
748 output_dir=None,
749 libraries=None,
750 library_dirs=None,
751 runtime_library_dirs=None,
752 export_symbols=None,
753 debug=0,
754 extra_preargs=None,
755 extra_postargs=None,
756 build_temp=None,
757 target_lang=None):
758 """Link a bunch of stuff together to create an executable or
759 shared library file.
761 The "bunch of stuff" consists of the list of object files supplied
762 as 'objects'. 'output_filename' should be a filename. If
763 'output_dir' is supplied, 'output_filename' is relative to it
764 (i.e. 'output_filename' can provide directory components if
765 needed).
767 'libraries' is a list of libraries to link against. These are
768 library names, not filenames, since they're translated into
769 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
770 on Unix and "foo.lib" on DOS/Windows). However, they can include a
771 directory component, which means the linker will look in that
772 specific directory rather than searching all the normal locations.
774 'library_dirs', if supplied, should be a list of directories to
775 search for libraries that were specified as bare library names
776 (ie. no directory component). These are on top of the system
777 default and those supplied to 'add_library_dir()' and/or
778 'set_library_dirs()'. 'runtime_library_dirs' is a list of
779 directories that will be embedded into the shared library and used
780 to search for other shared libraries that *it* depends on at
781 run-time. (This may only be relevant on Unix.)
783 'export_symbols' is a list of symbols that the shared library will
784 export. (This appears to be relevant only on Windows.)
786 'debug' is as for 'compile()' and 'create_static_lib()', with the
787 slight distinction that it actually matters on most platforms (as
788 opposed to 'create_static_lib()', which includes a 'debug' flag
789 mostly for form's sake).
791 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
792 of course that they supply command-line arguments for the
793 particular linker being used).
795 'target_lang' is the target language for which the given objects
796 are being compiled. This allows specific linkage time treatment of
797 certain languages.
799 Raises LinkError on failure.
801 raise NotImplementedError
804 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
806 def link_shared_lib (self,
807 objects,
808 output_libname,
809 output_dir=None,
810 libraries=None,
811 library_dirs=None,
812 runtime_library_dirs=None,
813 export_symbols=None,
814 debug=0,
815 extra_preargs=None,
816 extra_postargs=None,
817 build_temp=None,
818 target_lang=None):
819 self.link(CCompiler.SHARED_LIBRARY, objects,
820 self.library_filename(output_libname, lib_type='shared'),
821 output_dir,
822 libraries, library_dirs, runtime_library_dirs,
823 export_symbols, debug,
824 extra_preargs, extra_postargs, build_temp, target_lang)
827 def link_shared_object (self,
828 objects,
829 output_filename,
830 output_dir=None,
831 libraries=None,
832 library_dirs=None,
833 runtime_library_dirs=None,
834 export_symbols=None,
835 debug=0,
836 extra_preargs=None,
837 extra_postargs=None,
838 build_temp=None,
839 target_lang=None):
840 self.link(CCompiler.SHARED_OBJECT, objects,
841 output_filename, output_dir,
842 libraries, library_dirs, runtime_library_dirs,
843 export_symbols, debug,
844 extra_preargs, extra_postargs, build_temp, target_lang)
847 def link_executable (self,
848 objects,
849 output_progname,
850 output_dir=None,
851 libraries=None,
852 library_dirs=None,
853 runtime_library_dirs=None,
854 debug=0,
855 extra_preargs=None,
856 extra_postargs=None,
857 target_lang=None):
858 self.link(CCompiler.EXECUTABLE, objects,
859 self.executable_filename(output_progname), output_dir,
860 libraries, library_dirs, runtime_library_dirs, None,
861 debug, extra_preargs, extra_postargs, None, target_lang)
864 # -- Miscellaneous methods -----------------------------------------
865 # These are all used by the 'gen_lib_options() function; there is
866 # no appropriate default implementation so subclasses should
867 # implement all of these.
869 def library_dir_option (self, dir):
870 """Return the compiler option to add 'dir' to the list of
871 directories searched for libraries.
873 raise NotImplementedError
875 def runtime_library_dir_option (self, dir):
876 """Return the compiler option to add 'dir' to the list of
877 directories searched for runtime libraries.
879 raise NotImplementedError
881 def library_option (self, lib):
882 """Return the compiler option to add 'dir' to the list of libraries
883 linked into the shared library or executable.
885 raise NotImplementedError
887 def has_function(self, funcname,
888 includes=None,
889 include_dirs=None,
890 libraries=None,
891 library_dirs=None):
892 """Return a boolean indicating whether funcname is supported on
893 the current platform. The optional arguments can be used to
894 augment the compilation environment.
897 # this can't be included at module scope because it tries to
898 # import math which might not be available at that point - maybe
899 # the necessary logic should just be inlined?
900 import tempfile
901 if includes is None:
902 includes = []
903 if include_dirs is None:
904 include_dirs = []
905 if libraries is None:
906 libraries = []
907 if library_dirs is None:
908 library_dirs = []
909 fd, fname = tempfile.mkstemp(".c", funcname, text=True)
910 f = os.fdopen(fd, "w")
911 for incl in includes:
912 f.write("""#include "%s"\n""" % incl)
913 f.write("""\
914 main (int argc, char **argv) {
915 %s();
917 """ % funcname)
918 f.close()
919 try:
920 objects = self.compile([fname], include_dirs=include_dirs)
921 except CompileError:
922 return False
924 try:
925 self.link_executable(objects, "a.out",
926 libraries=libraries,
927 library_dirs=library_dirs)
928 except (LinkError, TypeError):
929 return False
930 return True
932 def find_library_file (self, dirs, lib, debug=0):
933 """Search the specified list of directories for a static or shared
934 library file 'lib' and return the full path to that file. If
935 'debug' true, look for a debugging version (if that makes sense on
936 the current platform). Return None if 'lib' wasn't found in any of
937 the specified directories.
939 raise NotImplementedError
941 # -- Filename generation methods -----------------------------------
943 # The default implementation of the filename generating methods are
944 # prejudiced towards the Unix/DOS/Windows view of the world:
945 # * object files are named by replacing the source file extension
946 # (eg. .c/.cpp -> .o/.obj)
947 # * library files (shared or static) are named by plugging the
948 # library name and extension into a format string, eg.
949 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
950 # * executables are named by appending an extension (possibly
951 # empty) to the program name: eg. progname + ".exe" for
952 # Windows
954 # To reduce redundant code, these methods expect to find
955 # several attributes in the current object (presumably defined
956 # as class attributes):
957 # * src_extensions -
958 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
959 # * obj_extension -
960 # object file extension, eg. '.o' or '.obj'
961 # * static_lib_extension -
962 # extension for static library files, eg. '.a' or '.lib'
963 # * shared_lib_extension -
964 # extension for shared library/object files, eg. '.so', '.dll'
965 # * static_lib_format -
966 # format string for generating static library filenames,
967 # eg. 'lib%s.%s' or '%s.%s'
968 # * shared_lib_format
969 # format string for generating shared library filenames
970 # (probably same as static_lib_format, since the extension
971 # is one of the intended parameters to the format string)
972 # * exe_extension -
973 # extension for executable files, eg. '' or '.exe'
975 def object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
976 if output_dir is None:
977 output_dir = ''
978 obj_names = []
979 for src_name in source_filenames:
980 base, ext = os.path.splitext(src_name)
981 base = os.path.splitdrive(base)[1] # Chop off the drive
982 base = base[os.path.isabs(base):] # If abs, chop off leading /
983 if ext not in self.src_extensions:
984 raise UnknownFileError, \
985 "unknown file type '%s' (from '%s')" % (ext, src_name)
986 if strip_dir:
987 base = os.path.basename(base)
988 obj_names.append(os.path.join(output_dir,
989 base + self.obj_extension))
990 return obj_names
992 def shared_object_filename(self, basename, strip_dir=0, output_dir=''):
993 assert output_dir is not None
994 if strip_dir:
995 basename = os.path.basename (basename)
996 return os.path.join(output_dir, basename + self.shared_lib_extension)
998 def executable_filename(self, basename, strip_dir=0, output_dir=''):
999 assert output_dir is not None
1000 if strip_dir:
1001 basename = os.path.basename (basename)
1002 return os.path.join(output_dir, basename + (self.exe_extension or ''))
1004 def library_filename(self, libname, lib_type='static', # or 'shared'
1005 strip_dir=0, output_dir=''):
1006 assert output_dir is not None
1007 if lib_type not in ("static", "shared", "dylib"):
1008 raise ValueError, "'lib_type' must be \"static\", \"shared\" or \"dylib\""
1009 fmt = getattr(self, lib_type + "_lib_format")
1010 ext = getattr(self, lib_type + "_lib_extension")
1012 dir, base = os.path.split (libname)
1013 filename = fmt % (base, ext)
1014 if strip_dir:
1015 dir = ''
1017 return os.path.join(output_dir, dir, filename)
1020 # -- Utility methods -----------------------------------------------
1022 def announce (self, msg, level=1):
1023 log.debug(msg)
1025 def debug_print (self, msg):
1026 from distutils.debug import DEBUG
1027 if DEBUG:
1028 print msg
1030 def warn (self, msg):
1031 sys.stderr.write ("warning: %s\n" % msg)
1033 def execute (self, func, args, msg=None, level=1):
1034 execute(func, args, msg, self.dry_run)
1036 def spawn (self, cmd):
1037 spawn (cmd, dry_run=self.dry_run)
1039 def move_file (self, src, dst):
1040 return move_file (src, dst, dry_run=self.dry_run)
1042 def mkpath (self, name, mode=0777):
1043 mkpath (name, mode, dry_run=self.dry_run)
1046 # class CCompiler
1049 # Map a sys.platform/os.name ('posix', 'nt') to the default compiler
1050 # type for that platform. Keys are interpreted as re match
1051 # patterns. Order is important; platform mappings are preferred over
1052 # OS names.
1053 _default_compilers = (
1055 # Platform string mappings
1057 # on a cygwin built python we can use gcc like an ordinary UNIXish
1058 # compiler
1059 ('cygwin.*', 'unix'),
1060 ('os2emx', 'emx'),
1062 # OS name mappings
1063 ('posix', 'unix'),
1064 ('nt', 'msvc'),
1068 def get_default_compiler(osname=None, platform=None):
1070 """ Determine the default compiler to use for the given platform.
1072 osname should be one of the standard Python OS names (i.e. the
1073 ones returned by os.name) and platform the common value
1074 returned by sys.platform for the platform in question.
1076 The default values are os.name and sys.platform in case the
1077 parameters are not given.
1080 if osname is None:
1081 osname = os.name
1082 if platform is None:
1083 platform = sys.platform
1084 for pattern, compiler in _default_compilers:
1085 if re.match(pattern, platform) is not None or \
1086 re.match(pattern, osname) is not None:
1087 return compiler
1088 # Default to Unix compiler
1089 return 'unix'
1091 # Map compiler types to (module_name, class_name) pairs -- ie. where to
1092 # find the code that implements an interface to this compiler. (The module
1093 # is assumed to be in the 'distutils' package.)
1094 compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler',
1095 "standard UNIX-style compiler"),
1096 'msvc': ('msvccompiler', 'MSVCCompiler',
1097 "Microsoft Visual C++"),
1098 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
1099 "Cygwin port of GNU C Compiler for Win32"),
1100 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
1101 "Mingw32 port of GNU C Compiler for Win32"),
1102 'bcpp': ('bcppcompiler', 'BCPPCompiler',
1103 "Borland C++ Compiler"),
1104 'emx': ('emxccompiler', 'EMXCCompiler',
1105 "EMX port of GNU C Compiler for OS/2"),
1108 def show_compilers():
1109 """Print list of available compilers (used by the "--help-compiler"
1110 options to "build", "build_ext", "build_clib").
1112 # XXX this "knows" that the compiler option it's describing is
1113 # "--compiler", which just happens to be the case for the three
1114 # commands that use it.
1115 from distutils.fancy_getopt import FancyGetopt
1116 compilers = []
1117 for compiler in compiler_class.keys():
1118 compilers.append(("compiler="+compiler, None,
1119 compiler_class[compiler][2]))
1120 compilers.sort()
1121 pretty_printer = FancyGetopt(compilers)
1122 pretty_printer.print_help("List of available compilers:")
1125 def new_compiler (plat=None,
1126 compiler=None,
1127 verbose=0,
1128 dry_run=0,
1129 force=0):
1130 """Generate an instance of some CCompiler subclass for the supplied
1131 platform/compiler combination. 'plat' defaults to 'os.name'
1132 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
1133 for that platform. Currently only 'posix' and 'nt' are supported, and
1134 the default compilers are "traditional Unix interface" (UnixCCompiler
1135 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
1136 possible to ask for a Unix compiler object under Windows, and a
1137 Microsoft compiler object under Unix -- if you supply a value for
1138 'compiler', 'plat' is ignored.
1140 if plat is None:
1141 plat = os.name
1143 try:
1144 if compiler is None:
1145 compiler = get_default_compiler(plat)
1147 (module_name, class_name, long_description) = compiler_class[compiler]
1148 except KeyError:
1149 msg = "don't know how to compile C/C++ code on platform '%s'" % plat
1150 if compiler is not None:
1151 msg = msg + " with '%s' compiler" % compiler
1152 raise DistutilsPlatformError, msg
1154 try:
1155 module_name = "distutils." + module_name
1156 __import__ (module_name)
1157 module = sys.modules[module_name]
1158 klass = vars(module)[class_name]
1159 except ImportError:
1160 raise DistutilsModuleError, \
1161 "can't compile C/C++ code: unable to load module '%s'" % \
1162 module_name
1163 except KeyError:
1164 raise DistutilsModuleError, \
1165 ("can't compile C/C++ code: unable to find class '%s' " +
1166 "in module '%s'") % (class_name, module_name)
1168 # XXX The None is necessary to preserve backwards compatibility
1169 # with classes that expect verbose to be the first positional
1170 # argument.
1171 return klass (None, dry_run, force)
1174 def gen_preprocess_options (macros, include_dirs):
1175 """Generate C pre-processor options (-D, -U, -I) as used by at least
1176 two types of compilers: the typical Unix compiler and Visual C++.
1177 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
1178 means undefine (-U) macro 'name', and (name,value) means define (-D)
1179 macro 'name' to 'value'. 'include_dirs' is just a list of directory
1180 names to be added to the header file search path (-I). Returns a list
1181 of command-line options suitable for either Unix compilers or Visual
1182 C++.
1184 # XXX it would be nice (mainly aesthetic, and so we don't generate
1185 # stupid-looking command lines) to go over 'macros' and eliminate
1186 # redundant definitions/undefinitions (ie. ensure that only the
1187 # latest mention of a particular macro winds up on the command
1188 # line). I don't think it's essential, though, since most (all?)
1189 # Unix C compilers only pay attention to the latest -D or -U
1190 # mention of a macro on their command line. Similar situation for
1191 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
1192 # redundancies like this should probably be the province of
1193 # CCompiler, since the data structures used are inherited from it
1194 # and therefore common to all CCompiler classes.
1196 pp_opts = []
1197 for macro in macros:
1199 if not (isinstance(macro, tuple) and
1200 1 <= len (macro) <= 2):
1201 raise TypeError, \
1202 ("bad macro definition '%s': " +
1203 "each element of 'macros' list must be a 1- or 2-tuple") % \
1204 macro
1206 if len (macro) == 1: # undefine this macro
1207 pp_opts.append ("-U%s" % macro[0])
1208 elif len (macro) == 2:
1209 if macro[1] is None: # define with no explicit value
1210 pp_opts.append ("-D%s" % macro[0])
1211 else:
1212 # XXX *don't* need to be clever about quoting the
1213 # macro value here, because we're going to avoid the
1214 # shell at all costs when we spawn the command!
1215 pp_opts.append ("-D%s=%s" % macro)
1217 for dir in include_dirs:
1218 pp_opts.append ("-I%s" % dir)
1220 return pp_opts
1223 def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
1224 """Generate linker options for searching library directories and
1225 linking with specific libraries.
1227 'libraries' and 'library_dirs' are, respectively, lists of library names
1228 (not filenames!) and search directories. Returns a list of command-line
1229 options suitable for use with some compiler (depending on the two format
1230 strings passed in).
1232 lib_opts = []
1234 for dir in library_dirs:
1235 lib_opts.append(compiler.library_dir_option(dir))
1237 for dir in runtime_library_dirs:
1238 opt = compiler.runtime_library_dir_option(dir)
1239 if isinstance(opt, list):
1240 lib_opts.extend(opt)
1241 else:
1242 lib_opts.append(opt)
1244 # XXX it's important that we *not* remove redundant library mentions!
1245 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1246 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1247 # -lbar" to get things to work -- that's certainly a possibility, but a
1248 # pretty nasty way to arrange your C code.
1250 for lib in libraries:
1251 lib_dir, lib_name = os.path.split(lib)
1252 if lib_dir != '':
1253 lib_file = compiler.find_library_file([lib_dir], lib_name)
1254 if lib_file is not None:
1255 lib_opts.append(lib_file)
1256 else:
1257 compiler.warn("no library file corresponding to "
1258 "'%s' found (skipping)" % lib)
1259 else:
1260 lib_opts.append(compiler.library_option(lib))
1262 return lib_opts