3 Contains CCompiler, an abstract base class that defines the interface
4 for the Distutils compiler abstraction model."""
6 # created 1999/07/05, Greg Ward
13 from distutils
.errors
import *
14 from distutils
.spawn
import spawn
15 from distutils
.file_util
import move_file
16 from distutils
.dir_util
import mkpath
17 from distutils
.dep_util
import newer_pairwise
, newer_group
18 from distutils
.util
import split_quoted
, execute
22 """Abstract base class to define the interface that must be implemented
23 by real compiler classes. Also has some utility methods used by
24 several compiler classes.
26 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.
35 # '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'!
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.
51 # * can't completely override the include or library searchg
52 # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2".
53 # I'm not sure how widely supported this is even by Unix
54 # compilers, much less on other platforms. And I'm even less
55 # 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.)
59 # * 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.
66 # 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
83 self
.verbose
= verbose
84 self
.dry_run
= dry_run
87 # 'output_dir': a common output directory for object, library,
88 # shared object, and shared library files
89 self
.output_dir
= None
91 # 'macros': a list of macro definitions (or undefinitions). A
92 # macro definition is a 2-tuple (name, value), where the value is
93 # either a string or None (no explicit value). A macro
94 # undefinition is a 1-tuple (name,).
97 # 'include_dirs': a list of directories to search for include files
98 self
.include_dirs
= []
100 # 'libraries': a list of libraries to include in any link
101 # (library names, not filenames: eg. "foo" not "libfoo.a")
104 # 'library_dirs': a list of directories to search for libraries
105 self
.library_dirs
= []
107 # 'runtime_library_dirs': a list of directories to search for
108 # shared libraries/objects at runtime
109 self
.runtime_library_dirs
= []
111 # 'objects': a list of object files (or similar, such as explicitly
112 # named library files) to include on any link
115 for key
in self
.executables
.keys():
116 self
.set_executable(key
, self
.executables
[key
])
121 def set_executables (self
, **args
):
123 """Define the executables (and options for them) that will be run
124 to perform the various stages of compilation. The exact set of
125 executables that may be specified here depends on the compiler
126 class (via the 'executables' class attribute), but most will have:
127 compiler the C/C++ compiler
128 linker_so linker used to create shared objects and libraries
129 linker_exe linker used to create binary executables
130 archiver static library creator
132 On platforms with a command-line (Unix, DOS/Windows), each of these
133 is a string that will be split into executable name and (optional)
134 list of arguments. (Splitting the string is done similarly to how
135 Unix shells operate: words are delimited by spaces, but quotes and
136 backslashes can override this. See
137 'distutils.util.split_quoted()'.)
140 # Note that some CCompiler implementation classes will define class
141 # attributes 'cpp', 'cc', etc. with hard-coded executable names;
142 # this is appropriate when a compiler class is for exactly one
143 # compiler/OS combination (eg. MSVCCompiler). Other compiler
144 # classes (UnixCCompiler, in particular) are driven by information
145 # discovered at run-time, since there are many different ways to do
146 # basically the same things with Unix C compilers.
148 for key
in args
.keys():
149 if not self
.executables
.has_key(key
):
151 "unknown executable '%s' for class %s" % \
152 (key
, self
.__class
__.__name
__)
153 self
.set_executable(key
, args
[key
])
157 def set_executable(self
, key
, value
):
158 if type(value
) is StringType
:
159 setattr(self
, key
, split_quoted(value
))
161 setattr(self
, key
, value
)
165 def _find_macro (self
, name
):
167 for defn
in self
.macros
:
175 def _check_macro_definitions (self
, definitions
):
176 """Ensures that every element of 'definitions' is a valid macro
177 definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do
178 nothing if all definitions are OK, raise TypeError otherwise.
180 for defn
in definitions
:
181 if not (type (defn
) is TupleType
and
184 (type (defn
[1]) is StringType
or defn
[1] is None))) and
185 type (defn
[0]) is StringType
):
187 ("invalid macro definition '%s': " % defn
) + \
188 "must be tuple (string,), (string, string), or " + \
192 # -- Bookkeeping methods -------------------------------------------
194 def define_macro (self
, name
, value
=None):
195 """Define a preprocessor macro for all compilations driven by this
196 compiler object. The optional parameter 'value' should be a
197 string; if it is not supplied, then the macro will be defined
198 without an explicit value and the exact outcome depends on the
199 compiler used (XXX true? does ANSI say anything about this?)
201 # Delete from the list of macro definitions/undefinitions if
202 # already there (so that this one will take precedence).
203 i
= self
._find
_macro
(name
)
208 self
.macros
.append (defn
)
211 def undefine_macro (self
, name
):
212 """Undefine a preprocessor macro for all compilations driven by
213 this compiler object. If the same macro is defined by
214 'define_macro()' and undefined by 'undefine_macro()' the last call
215 takes precedence (including multiple redefinitions or
216 undefinitions). If the macro is redefined/undefined on a
217 per-compilation basis (ie. in the call to 'compile()'), then that
220 # Delete from the list of macro definitions/undefinitions if
221 # already there (so that this one will take precedence).
222 i
= self
._find
_macro
(name
)
227 self
.macros
.append (undefn
)
230 def add_include_dir (self
, dir):
231 """Add 'dir' to the list of directories that will be searched for
232 header files. The compiler is instructed to search directories in
233 the order in which they are supplied by successive calls to
236 self
.include_dirs
.append (dir)
238 def set_include_dirs (self
, dirs
):
239 """Set the list of directories that will be searched to 'dirs' (a
240 list of strings). Overrides any preceding calls to
241 'add_include_dir()'; subsequence calls to 'add_include_dir()' add
242 to the list passed to 'set_include_dirs()'. This does not affect
243 any list of standard include directories that the compiler may
246 self
.include_dirs
= copy (dirs
)
249 def add_library (self
, libname
):
250 """Add 'libname' to the list of libraries that will be included in
251 all links driven by this compiler object. Note that 'libname'
252 should *not* be the name of a file containing a library, but the
253 name of the library itself: the actual filename will be inferred by
254 the linker, the compiler, or the compiler class (depending on the
257 The linker will be instructed to link against libraries in the
258 order they were supplied to 'add_library()' and/or
259 'set_libraries()'. It is perfectly valid to duplicate library
260 names; the linker will be instructed to link against libraries as
261 many times as they are mentioned.
263 self
.libraries
.append (libname
)
265 def set_libraries (self
, libnames
):
266 """Set the list of libraries to be included in all links driven by
267 this compiler object to 'libnames' (a list of strings). This does
268 not affect any standard system libraries that the linker may
271 self
.libraries
= copy (libnames
)
274 def add_library_dir (self
, dir):
275 """Add 'dir' to the list of directories that will be searched for
276 libraries specified to 'add_library()' and 'set_libraries()'. The
277 linker will be instructed to search for libraries in the order they
278 are supplied to 'add_library_dir()' and/or 'set_library_dirs()'.
280 self
.library_dirs
.append (dir)
282 def set_library_dirs (self
, dirs
):
283 """Set the list of library search directories to 'dirs' (a list of
284 strings). This does not affect any standard library search path
285 that the linker may search by default.
287 self
.library_dirs
= copy (dirs
)
290 def add_runtime_library_dir (self
, dir):
291 """Add 'dir' to the list of directories that will be searched for
292 shared libraries at runtime.
294 self
.runtime_library_dirs
.append (dir)
296 def set_runtime_library_dirs (self
, dirs
):
297 """Set the list of directories to search for shared libraries at
298 runtime to 'dirs' (a list of strings). This does not affect any
299 standard search path that the runtime linker may search by
302 self
.runtime_library_dirs
= copy (dirs
)
305 def add_link_object (self
, object):
306 """Add 'object' to the list of object files (or analogues, such as
307 explicitly named library files or the output of "resource
308 compilers") to be included in every link driven by this compiler
311 self
.objects
.append (object)
313 def set_link_objects (self
, objects
):
314 """Set the list of object files (or analogues) to be included in
315 every link to 'objects'. This does not affect any standard object
316 files that the linker may include by default (such as system
319 self
.objects
= copy (objects
)
322 # -- Priviate utility methods --------------------------------------
323 # (here for the convenience of subclasses)
325 def _fix_compile_args (self
, output_dir
, macros
, include_dirs
):
326 """Typecheck and fix-up some of the arguments to the 'compile()'
327 method, and return fixed-up values. Specifically: if 'output_dir'
328 is None, replaces it with 'self.output_dir'; ensures that 'macros'
329 is a list, and augments it with 'self.macros'; ensures that
330 'include_dirs' is a list, and augments it with 'self.include_dirs'.
331 Guarantees that the returned values are of the correct type,
332 i.e. for 'output_dir' either string or None, and for 'macros' and
333 'include_dirs' either list or None.
335 if output_dir
is None:
336 output_dir
= self
.output_dir
337 elif type (output_dir
) is not StringType
:
338 raise TypeError, "'output_dir' must be a string or None"
342 elif type (macros
) is ListType
:
343 macros
= macros
+ (self
.macros
or [])
346 "'macros' (if supplied) must be a list of tuples"
348 if include_dirs
is None:
349 include_dirs
= self
.include_dirs
350 elif type (include_dirs
) in (ListType
, TupleType
):
351 include_dirs
= list (include_dirs
) + (self
.include_dirs
or [])
354 "'include_dirs' (if supplied) must be a list of strings"
356 return (output_dir
, macros
, include_dirs
)
358 # _fix_compile_args ()
361 def _prep_compile (self
, sources
, output_dir
):
362 """Determine the list of object files corresponding to 'sources',
363 and figure out which ones really need to be recompiled. Return a
364 list of all object files and a dictionary telling which source
365 files can be skipped.
367 # Get the list of expected output (object) files
368 objects
= self
.object_filenames (sources
,
370 output_dir
=output_dir
)
373 skip_source
= {} # rebuild everything
374 for source
in sources
:
375 skip_source
[source
] = 0
377 # Figure out which source files we have to recompile according
378 # to a simplistic check -- we just compare the source and
379 # object file, no deep dependency checking involving header
381 skip_source
= {} # rebuild everything
382 for source
in sources
: # no wait, rebuild nothing
383 skip_source
[source
] = 1
385 (n_sources
, n_objects
) = newer_pairwise (sources
, objects
)
386 for source
in n_sources
: # no really, only rebuild what's
387 skip_source
[source
] = 0 # out-of-date
389 return (objects
, skip_source
)
394 def _fix_object_args (self
, objects
, output_dir
):
395 """Typecheck and fix up some arguments supplied to various methods.
396 Specifically: ensure that 'objects' is a list; if output_dir is
397 None, replace with self.output_dir. Return fixed versions of
398 'objects' and 'output_dir'.
400 if type (objects
) not in (ListType
, TupleType
):
402 "'objects' must be a list or tuple of strings"
403 objects
= list (objects
)
405 if output_dir
is None:
406 output_dir
= self
.output_dir
407 elif type (output_dir
) is not StringType
:
408 raise TypeError, "'output_dir' must be a string or None"
410 return (objects
, output_dir
)
413 def _fix_lib_args (self
, libraries
, library_dirs
, runtime_library_dirs
):
414 """Typecheck and fix up some of the arguments supplied to the
415 'link_*' methods. Specifically: ensure that all arguments are
416 lists, and augment them with their permanent versions
417 (eg. 'self.libraries' augments 'libraries'). Return a tuple with
418 fixed versions of all arguments.
420 if libraries
is None:
421 libraries
= self
.libraries
422 elif type (libraries
) in (ListType
, TupleType
):
423 libraries
= list (libraries
) + (self
.libraries
or [])
426 "'libraries' (if supplied) must be a list of strings"
428 if library_dirs
is None:
429 library_dirs
= self
.library_dirs
430 elif type (library_dirs
) in (ListType
, TupleType
):
431 library_dirs
= list (library_dirs
) + (self
.library_dirs
or [])
434 "'library_dirs' (if supplied) must be a list of strings"
436 if runtime_library_dirs
is None:
437 runtime_library_dirs
= self
.runtime_library_dirs
438 elif type (runtime_library_dirs
) in (ListType
, TupleType
):
439 runtime_library_dirs
= (list (runtime_library_dirs
) +
440 (self
.runtime_library_dirs
or []))
443 "'runtime_library_dirs' (if supplied) " + \
444 "must be a list of strings"
446 return (libraries
, library_dirs
, runtime_library_dirs
)
451 def _need_link (self
, objects
, output_file
):
452 """Return true if we need to relink the files listed in 'objects'
453 to recreate 'output_file'.
459 newer
= newer_group (objects
, output_file
, missing
='newer')
461 newer
= newer_group (objects
, output_file
)
467 # -- Worker methods ------------------------------------------------
468 # (must be implemented by subclasses)
470 def preprocess (self
,
476 extra_postargs
=None):
477 """Preprocess a single C/C++ source file, named in 'source'.
478 Output will be written to file named 'output_file', or stdout if
479 'output_file' not supplied. 'macros' is a list of macro
480 definitions as for 'compile()', which will augment the macros set
481 with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
482 list of directory names that will be added to the default list.
484 Raises PreprocessError on failure.
495 extra_postargs
=None):
496 """Compile one or more source files. 'sources' must be a list of
497 filenames, most likely C/C++ files, but in reality anything that
498 can be handled by a particular compiler and compiler class
499 (eg. MSVCCompiler can handle resource files in 'sources'). Return
500 a list of object filenames, one per source filename in 'sources'.
501 Depending on the implementation, not all source files will
502 necessarily be compiled, but all corresponding object filenames
505 If 'output_dir' is given, object files will be put under it, while
506 retaining their original path component. That is, "foo/bar.c"
507 normally compiles to "foo/bar.o" (for a Unix implementation); if
508 'output_dir' is "build", then it would compile to
511 'macros', if given, must be a list of macro definitions. A macro
512 definition is either a (name, value) 2-tuple or a (name,) 1-tuple.
513 The former defines a macro; if the value is None, the macro is
514 defined without an explicit value. The 1-tuple case undefines a
515 macro. Later definitions/redefinitions/ undefinitions take
518 'include_dirs', if given, must be a list of strings, the
519 directories to add to the default include file search path for this
522 'debug' is a boolean; if true, the compiler will be instructed to
523 output debug symbols in (or alongside) the object file(s).
525 'extra_preargs' and 'extra_postargs' are implementation- dependent.
526 On platforms that have the notion of a command-line (e.g. Unix,
527 DOS/Windows), they are most likely lists of strings: extra
528 command-line arguments to prepand/append to the compiler command
529 line. On other platforms, consult the implementation class
530 documentation. In any event, they are intended as an escape hatch
531 for those occasions when the abstract compiler framework doesn't
534 Raises CompileError on failure.
539 def create_static_lib (self
,
544 """Link a bunch of stuff together to create a static library file.
545 The "bunch of stuff" consists of the list of object files supplied
546 as 'objects', the extra object files supplied to
547 'add_link_object()' and/or 'set_link_objects()', the libraries
548 supplied to 'add_library()' and/or 'set_libraries()', and the
549 libraries supplied as 'libraries' (if any).
551 'output_libname' should be a library name, not a filename; the
552 filename will be inferred from the library name. 'output_dir' is
553 the directory where the library file will be put.
555 'debug' is a boolean; if true, debugging information will be
556 included in the library (note that on most platforms, it is the
557 compile step where this matters: the 'debug' flag is included here
558 just for consistency).
560 Raises LibError on failure.
565 # values for target_desc parameter in link()
566 SHARED_OBJECT
= "shared_object"
567 SHARED_LIBRARY
= "shared_library"
568 EXECUTABLE
= "executable"
577 runtime_library_dirs
=None,
583 """Link a bunch of stuff together to create an executable or
586 The "bunch of stuff" consists of the list of object files supplied
587 as 'objects'. 'output_filename' should be a filename. If
588 'output_dir' is supplied, 'output_filename' is relative to it
589 (i.e. 'output_filename' can provide directory components if
592 'libraries' is a list of libraries to link against. These are
593 library names, not filenames, since they're translated into
594 filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
595 on Unix and "foo.lib" on DOS/Windows). However, they can include a
596 directory component, which means the linker will look in that
597 specific directory rather than searching all the normal locations.
599 'library_dirs', if supplied, should be a list of directories to
600 search for libraries that were specified as bare library names
601 (ie. no directory component). These are on top of the system
602 default and those supplied to 'add_library_dir()' and/or
603 'set_library_dirs()'. 'runtime_library_dirs' is a list of
604 directories that will be embedded into the shared library and used
605 to search for other shared libraries that *it* depends on at
606 run-time. (This may only be relevant on Unix.)
608 'export_symbols' is a list of symbols that the shared library will
609 export. (This appears to be relevant only on Windows.)
611 'debug' is as for 'compile()' and 'create_static_lib()', with the
612 slight distinction that it actually matters on most platforms (as
613 opposed to 'create_static_lib()', which includes a 'debug' flag
614 mostly for form's sake).
616 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
617 of course that they supply command-line arguments for the
618 particular linker being used).
620 Raises LinkError on failure.
622 raise NotImplementedError
625 # Old 'link_*()' methods, rewritten to use the new 'link()' method.
627 def link_shared_lib (self
,
633 runtime_library_dirs
=None,
639 self
.link(CCompiler
.SHARED_LIBRARY
, objects
,
640 self
.library_filename(output_libname
, lib_type
='shared'),
642 libraries
, library_dirs
, runtime_library_dirs
,
643 export_symbols
, debug
,
644 extra_preargs
, extra_postargs
, build_temp
)
647 def link_shared_object (self
,
653 runtime_library_dirs
=None,
659 self
.link(CCompiler
.SHARED_OBJECT
, objects
,
660 output_filename
, output_dir
,
661 libraries
, library_dirs
, runtime_library_dirs
,
662 export_symbols
, debug
,
663 extra_preargs
, extra_postargs
, build_temp
)
666 def link_executable (self
,
672 runtime_library_dirs
=None,
675 extra_postargs
=None):
676 self
.link(CCompiler
.EXECUTABLE
, objects
,
677 self
.executable_filename(output_progname
), output_dir
,
678 libraries
, library_dirs
, runtime_library_dirs
, None,
679 debug
, extra_preargs
, extra_postargs
, None)
682 # -- Miscellaneous methods -----------------------------------------
683 # These are all used by the 'gen_lib_options() function; there is
684 # no appropriate default implementation so subclasses should
685 # implement all of these.
687 def library_dir_option (self
, dir):
688 """Return the compiler option to add 'dir' to the list of
689 directories searched for libraries.
691 raise NotImplementedError
693 def runtime_library_dir_option (self
, dir):
694 """Return the compiler option to add 'dir' to the list of
695 directories searched for runtime libraries.
697 raise NotImplementedError
699 def library_option (self
, lib
):
700 """Return the compiler option to add 'dir' to the list of libraries
701 linked into the shared library or executable.
703 raise NotImplementedError
705 def find_library_file (self
, dirs
, lib
, debug
=0):
706 """Search the specified list of directories for a static or shared
707 library file 'lib' and return the full path to that file. If
708 'debug' true, look for a debugging version (if that makes sense on
709 the current platform). Return None if 'lib' wasn't found in any of
710 the specified directories.
712 raise NotImplementedError
715 # -- Filename generation methods -----------------------------------
717 # The default implementation of the filename generating methods are
718 # prejudiced towards the Unix/DOS/Windows view of the world:
719 # * object files are named by replacing the source file extension
720 # (eg. .c/.cpp -> .o/.obj)
721 # * library files (shared or static) are named by plugging the
722 # library name and extension into a format string, eg.
723 # "lib%s.%s" % (lib_name, ".a") for Unix static libraries
724 # * executables are named by appending an extension (possibly
725 # empty) to the program name: eg. progname + ".exe" for
728 # To reduce redundant code, these methods expect to find
729 # several attributes in the current object (presumably defined
730 # as class attributes):
732 # list of C/C++ source file extensions, eg. ['.c', '.cpp']
734 # object file extension, eg. '.o' or '.obj'
735 # * static_lib_extension -
736 # extension for static library files, eg. '.a' or '.lib'
737 # * shared_lib_extension -
738 # extension for shared library/object files, eg. '.so', '.dll'
739 # * static_lib_format -
740 # format string for generating static library filenames,
741 # eg. 'lib%s.%s' or '%s.%s'
742 # * shared_lib_format
743 # format string for generating shared library filenames
744 # (probably same as static_lib_format, since the extension
745 # is one of the intended parameters to the format string)
747 # extension for executable files, eg. '' or '.exe'
749 def object_filenames (self
,
753 if output_dir
is None: output_dir
= ''
755 for src_name
in source_filenames
:
756 (base
, ext
) = os
.path
.splitext (src_name
)
757 if ext
not in self
.src_extensions
:
758 raise UnknownFileError
, \
759 "unknown file type '%s' (from '%s')" % \
762 base
= os
.path
.basename (base
)
763 obj_names
.append (os
.path
.join (output_dir
,
764 base
+ self
.obj_extension
))
767 # object_filenames ()
770 def shared_object_filename (self
,
774 if output_dir
is None: output_dir
= ''
776 basename
= os
.path
.basename (basename
)
777 return os
.path
.join (output_dir
, basename
+ self
.shared_lib_extension
)
779 def executable_filename (self
,
783 if output_dir
is None: output_dir
= ''
785 basename
= os
.path
.basename (basename
)
786 return os
.path
.join(output_dir
, basename
+ (self
.exe_extension
or ''))
788 def library_filename (self
,
790 lib_type
='static', # or 'shared'
794 if output_dir
is None: output_dir
= ''
795 if lib_type
not in ("static","shared"):
796 raise ValueError, "'lib_type' must be \"static\" or \"shared\""
797 fmt
= getattr (self
, lib_type
+ "_lib_format")
798 ext
= getattr (self
, lib_type
+ "_lib_extension")
800 (dir, base
) = os
.path
.split (libname
)
801 filename
= fmt
% (base
, ext
)
805 return os
.path
.join (output_dir
, dir, filename
)
808 # -- Utility methods -----------------------------------------------
810 def announce (self
, msg
, level
=1):
811 if self
.verbose
>= level
:
814 def debug_print (self
, msg
):
815 from distutils
.core
import DEBUG
819 def warn (self
, msg
):
820 sys
.stderr
.write ("warning: %s\n" % msg
)
822 def execute (self
, func
, args
, msg
=None, level
=1):
823 execute(func
, args
, msg
, self
.verbose
>= level
, self
.dry_run
)
825 def spawn (self
, cmd
):
826 spawn (cmd
, verbose
=self
.verbose
, dry_run
=self
.dry_run
)
828 def move_file (self
, src
, dst
):
829 return move_file (src
, dst
, verbose
=self
.verbose
, dry_run
=self
.dry_run
)
831 def mkpath (self
, name
, mode
=0777):
832 mkpath (name
, mode
, self
.verbose
, self
.dry_run
)
838 # Map a sys.platform/os.name ('posix', 'nt') to the default compiler
839 # type for that platform. Keys are interpreted as re match
840 # patterns. Order is important; platform mappings are preferred over
842 _default_compilers
= (
844 # Platform string mappings
846 # on a cygwin built python we can use gcc like an ordinary UNIXish
848 ('cygwin.*', 'unix'),
857 def get_default_compiler(osname
=None, platform
=None):
859 """ Determine the default compiler to use for the given platform.
861 osname should be one of the standard Python OS names (i.e. the
862 ones returned by os.name) and platform the common value
863 returned by sys.platform for the platform in question.
865 The default values are os.name and sys.platform in case the
866 parameters are not given.
872 platform
= sys
.platform
873 for pattern
, compiler
in _default_compilers
:
874 if re
.match(pattern
, platform
) is not None or \
875 re
.match(pattern
, osname
) is not None:
877 # Default to Unix compiler
880 # Map compiler types to (module_name, class_name) pairs -- ie. where to
881 # find the code that implements an interface to this compiler. (The module
882 # is assumed to be in the 'distutils' package.)
883 compiler_class
= { 'unix': ('unixccompiler', 'UnixCCompiler',
884 "standard UNIX-style compiler"),
885 'msvc': ('msvccompiler', 'MSVCCompiler',
886 "Microsoft Visual C++"),
887 'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
888 "Cygwin port of GNU C Compiler for Win32"),
889 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
890 "Mingw32 port of GNU C Compiler for Win32"),
891 'bcpp': ('bcppcompiler', 'BCPPCompiler',
892 "Borland C++ Compiler"),
893 'mwerks': ('mwerkscompiler', 'MWerksCompiler',
894 "MetroWerks CodeWarrior"),
897 def show_compilers():
898 """Print list of available compilers (used by the "--help-compiler"
899 options to "build", "build_ext", "build_clib").
901 # XXX this "knows" that the compiler option it's describing is
902 # "--compiler", which just happens to be the case for the three
903 # commands that use it.
904 from distutils
.fancy_getopt
import FancyGetopt
906 for compiler
in compiler_class
.keys():
907 compilers
.append(("compiler="+compiler
, None,
908 compiler_class
[compiler
][2]))
910 pretty_printer
= FancyGetopt(compilers
)
911 pretty_printer
.print_help("List of available compilers:")
914 def new_compiler (plat
=None,
919 """Generate an instance of some CCompiler subclass for the supplied
920 platform/compiler combination. 'plat' defaults to 'os.name'
921 (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler
922 for that platform. Currently only 'posix' and 'nt' are supported, and
923 the default compilers are "traditional Unix interface" (UnixCCompiler
924 class) and Visual C++ (MSVCCompiler class). Note that it's perfectly
925 possible to ask for a Unix compiler object under Windows, and a
926 Microsoft compiler object under Unix -- if you supply a value for
927 'compiler', 'plat' is ignored.
934 compiler
= get_default_compiler(plat
)
936 (module_name
, class_name
, long_description
) = compiler_class
[compiler
]
938 msg
= "don't know how to compile C/C++ code on platform '%s'" % plat
939 if compiler
is not None:
940 msg
= msg
+ " with '%s' compiler" % compiler
941 raise DistutilsPlatformError
, msg
944 module_name
= "distutils." + module_name
945 __import__ (module_name
)
946 module
= sys
.modules
[module_name
]
947 klass
= vars(module
)[class_name
]
949 raise DistutilsModuleError
, \
950 "can't compile C/C++ code: unable to load module '%s'" % \
953 raise DistutilsModuleError
, \
954 ("can't compile C/C++ code: unable to find class '%s' " +
955 "in module '%s'") % (class_name
, module_name
)
957 return klass (verbose
, dry_run
, force
)
960 def gen_preprocess_options (macros
, include_dirs
):
961 """Generate C pre-processor options (-D, -U, -I) as used by at least
962 two types of compilers: the typical Unix compiler and Visual C++.
963 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,)
964 means undefine (-U) macro 'name', and (name,value) means define (-D)
965 macro 'name' to 'value'. 'include_dirs' is just a list of directory
966 names to be added to the header file search path (-I). Returns a list
967 of command-line options suitable for either Unix compilers or Visual
970 # XXX it would be nice (mainly aesthetic, and so we don't generate
971 # stupid-looking command lines) to go over 'macros' and eliminate
972 # redundant definitions/undefinitions (ie. ensure that only the
973 # latest mention of a particular macro winds up on the command
974 # line). I don't think it's essential, though, since most (all?)
975 # Unix C compilers only pay attention to the latest -D or -U
976 # mention of a macro on their command line. Similar situation for
977 # 'include_dirs'. I'm punting on both for now. Anyways, weeding out
978 # redundancies like this should probably be the province of
979 # CCompiler, since the data structures used are inherited from it
980 # and therefore common to all CCompiler classes.
985 if not (type (macro
) is TupleType
and
986 1 <= len (macro
) <= 2):
988 ("bad macro definition '%s': " +
989 "each element of 'macros' list must be a 1- or 2-tuple") % \
992 if len (macro
) == 1: # undefine this macro
993 pp_opts
.append ("-U%s" % macro
[0])
994 elif len (macro
) == 2:
995 if macro
[1] is None: # define with no explicit value
996 pp_opts
.append ("-D%s" % macro
[0])
998 # XXX *don't* need to be clever about quoting the
999 # macro value here, because we're going to avoid the
1000 # shell at all costs when we spawn the command!
1001 pp_opts
.append ("-D%s=%s" % macro
)
1003 for dir in include_dirs
:
1004 pp_opts
.append ("-I%s" % dir)
1008 # gen_preprocess_options ()
1011 def gen_lib_options (compiler
, library_dirs
, runtime_library_dirs
, libraries
):
1012 """Generate linker options for searching library directories and
1013 linking with specific libraries. 'libraries' and 'library_dirs' are,
1014 respectively, lists of library names (not filenames!) and search
1015 directories. Returns a list of command-line options suitable for use
1016 with some compiler (depending on the two format strings passed in).
1020 for dir in library_dirs
:
1021 lib_opts
.append (compiler
.library_dir_option (dir))
1023 for dir in runtime_library_dirs
:
1024 lib_opts
.append (compiler
.runtime_library_dir_option (dir))
1026 # XXX it's important that we *not* remove redundant library mentions!
1027 # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to
1028 # resolve all symbols. I just hope we never have to say "-lfoo obj.o
1029 # -lbar" to get things to work -- that's certainly a possibility, but a
1030 # pretty nasty way to arrange your C code.
1032 for lib
in libraries
:
1033 (lib_dir
, lib_name
) = os
.path
.split (lib
)
1035 lib_file
= compiler
.find_library_file ([lib_dir
], lib_name
)
1037 lib_opts
.append (lib_file
)
1039 compiler
.warn ("no library file corresponding to "
1040 "'%s' found (skipping)" % lib
)
1042 lib_opts
.append (compiler
.library_option (lib
))
1046 # gen_lib_options ()