golden hour
/usr/lib64/python2.7/distutils
⬆️ Go Up
Upload
File/Folder
Size
Actions
README
295 B
Del
OK
__init__.py
337 B
Del
OK
__init__.pyc
385 B
Del
OK
__init__.pyo
385 B
Del
OK
archive_util.py
7.64 KB
Del
OK
archive_util.pyc
7.28 KB
Del
OK
archive_util.pyo
7.28 KB
Del
OK
bcppcompiler.py
14.59 KB
Del
OK
bcppcompiler.pyc
7.7 KB
Del
OK
bcppcompiler.pyo
7.7 KB
Del
OK
ccompiler.py
45.54 KB
Del
OK
ccompiler.pyc
35.96 KB
Del
OK
ccompiler.pyo
35.82 KB
Del
OK
cmd.py
18.82 KB
Del
OK
cmd.pyc
16.41 KB
Del
OK
cmd.pyo
16.41 KB
Del
OK
command
-
Del
OK
config.py
4.03 KB
Del
OK
config.pyc
3.49 KB
Del
OK
config.pyo
3.49 KB
Del
OK
core.py
8.88 KB
Del
OK
core.pyc
7.5 KB
Del
OK
core.pyo
7.5 KB
Del
OK
cygwinccompiler.py
16.87 KB
Del
OK
cygwinccompiler.pyc
9.19 KB
Del
OK
cygwinccompiler.pyo
9.19 KB
Del
OK
debug.py
162 B
Del
OK
debug.pyc
254 B
Del
OK
debug.pyo
254 B
Del
OK
dep_util.py
3.43 KB
Del
OK
dep_util.pyc
3.11 KB
Del
OK
dep_util.pyo
3.11 KB
Del
OK
dir_util.py
7.78 KB
Del
OK
dir_util.pyc
6.72 KB
Del
OK
dir_util.pyo
6.72 KB
Del
OK
dist.py
48.88 KB
Del
OK
dist.pyc
38.64 KB
Del
OK
dist.pyo
38.64 KB
Del
OK
emxccompiler.py
11.65 KB
Del
OK
emxccompiler.pyc
7.29 KB
Del
OK
emxccompiler.pyo
7.29 KB
Del
OK
errors.py
3.41 KB
Del
OK
errors.pyc
6.14 KB
Del
OK
errors.pyo
6.14 KB
Del
OK
extension.py
10.65 KB
Del
OK
extension.pyc
7.24 KB
Del
OK
extension.pyo
7.02 KB
Del
OK
fancy_getopt.py
17.53 KB
Del
OK
fancy_getopt.pyc
11.68 KB
Del
OK
fancy_getopt.pyo
11.5 KB
Del
OK
file_util.py
7.61 KB
Del
OK
file_util.pyc
6.47 KB
Del
OK
file_util.pyo
6.47 KB
Del
OK
filelist.py
12.39 KB
Del
OK
filelist.pyc
10.51 KB
Del
OK
filelist.pyo
10.51 KB
Del
OK
log.py
1.65 KB
Del
OK
log.pyc
2.72 KB
Del
OK
log.pyo
2.72 KB
Del
OK
msvc9compiler.py
30.29 KB
Del
OK
msvc9compiler.pyc
21.04 KB
Del
OK
msvc9compiler.pyo
20.96 KB
Del
OK
msvccompiler.py
23.08 KB
Del
OK
msvccompiler.pyc
17.11 KB
Del
OK
msvccompiler.pyo
17.11 KB
Del
OK
spawn.py
7.61 KB
Del
OK
spawn.pyc
6.02 KB
Del
OK
spawn.pyo
6.02 KB
Del
OK
sysconfig.py
16.52 KB
Del
OK
sysconfig.py.debug-build
16.42 KB
Del
OK
sysconfig.pyc
12.96 KB
Del
OK
sysconfig.pyo
12.96 KB
Del
OK
text_file.py
12.12 KB
Del
OK
text_file.pyc
9.03 KB
Del
OK
text_file.pyo
9.03 KB
Del
OK
unixccompiler.py
12.56 KB
Del
OK
unixccompiler.py.distutils-rpath
12.03 KB
Del
OK
unixccompiler.pyc
7.76 KB
Del
OK
unixccompiler.pyo
7.76 KB
Del
OK
util.py
18.28 KB
Del
OK
util.pyc
14.58 KB
Del
OK
util.pyo
14.58 KB
Del
OK
version.py
11.17 KB
Del
OK
version.pyc
7.04 KB
Del
OK
version.pyo
7.04 KB
Del
OK
versionpredicate.py
4.98 KB
Del
OK
versionpredicate.pyc
5.41 KB
Del
OK
versionpredicate.pyo
5.41 KB
Del
OK
Edit: bcppcompiler.py
"""distutils.bcppcompiler Contains BorlandCCompiler, an implementation of the abstract CCompiler class for the Borland C++ compiler. """ # This implementation by Lyle Johnson, based on the original msvccompiler.py # module and using the directions originally published by Gordon Williams. # XXX looks like there's a LOT of overlap between these two classes: # someone should sit down and factor out the common code as # WindowsCCompiler! --GPW __revision__ = "$Id$" import os from distutils.errors import (DistutilsExecError, CompileError, LibError, LinkError, UnknownFileError) from distutils.ccompiler import CCompiler, gen_preprocess_options from distutils.file_util import write_file from distutils.dep_util import newer from distutils import log class BCPPCompiler(CCompiler) : """Concrete class that implements an interface to the Borland C/C++ compiler, as defined by the CCompiler abstract class. """ compiler_type = 'bcpp' # Just set this so CCompiler's constructor doesn't barf. We currently # don't use the 'set_executables()' bureaucracy provided by CCompiler, # as it really isn't necessary for this sort of single-compiler class. # Would be nice to have a consistent interface with UnixCCompiler, # though, so it's worth thinking about. executables = {} # Private class data (need to distinguish C from C++ source for compiler) _c_extensions = ['.c'] _cpp_extensions = ['.cc', '.cpp', '.cxx'] # Needed for the filename generation methods provided by the # base class, CCompiler. src_extensions = _c_extensions + _cpp_extensions obj_extension = '.obj' static_lib_extension = '.lib' shared_lib_extension = '.dll' static_lib_format = shared_lib_format = '%s%s' exe_extension = '.exe' def __init__ (self, verbose=0, dry_run=0, force=0): CCompiler.__init__ (self, verbose, dry_run, force) # These executables are assumed to all be in the path. # Borland doesn't seem to use any special registry settings to # indicate their installation locations. self.cc = "bcc32.exe" self.linker = "ilink32.exe" self.lib = "tlib.exe" self.preprocess_options = None self.compile_options = ['/tWM', '/O2', '/q', '/g0'] self.compile_options_debug = ['/tWM', '/Od', '/q', '/g0'] self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] self.ldflags_shared_debug = ['/Tpd', '/Gn', '/q', '/x'] self.ldflags_static = [] self.ldflags_exe = ['/Gn', '/q', '/x'] self.ldflags_exe_debug = ['/Gn', '/q', '/x','/r'] # -- Worker methods ------------------------------------------------ def compile(self, sources, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None): macros, objects, extra_postargs, pp_opts, build = \ self._setup_compile(output_dir, macros, include_dirs, sources, depends, extra_postargs) compile_opts = extra_preargs or [] compile_opts.append ('-c') if debug: compile_opts.extend (self.compile_options_debug) else: compile_opts.extend (self.compile_options) for obj in objects: try: src, ext = build[obj] except KeyError: continue # XXX why do the normpath here? src = os.path.normpath(src) obj = os.path.normpath(obj) # XXX _setup_compile() did a mkpath() too but before the normpath. # Is it possible to skip the normpath? self.mkpath(os.path.dirname(obj)) if ext == '.res': # This is already a binary file -- skip it. continue # the 'for' loop if ext == '.rc': # This needs to be compiled to a .res file -- do it now. try: self.spawn (["brcc32", "-fo", obj, src]) except DistutilsExecError, msg: raise CompileError, msg continue # the 'for' loop # The next two are both for the real compiler. if ext in self._c_extensions: input_opt = "" elif ext in self._cpp_extensions: input_opt = "-P" else: # Unknown file type -- no extra options. The compiler # will probably fail, but let it just in case this is a # file the compiler recognizes even if we don't. input_opt = "" output_opt = "-o" + obj # Compiler command line syntax is: "bcc32 [options] file(s)". # Note that the source file names must appear at the end of # the command line. try: self.spawn ([self.cc] + compile_opts + pp_opts + [input_opt, output_opt] + extra_postargs + [src]) except DistutilsExecError, msg: raise CompileError, msg return objects # compile () def create_static_lib (self, objects, output_libname, output_dir=None, debug=0, target_lang=None): (objects, output_dir) = self._fix_object_args (objects, output_dir) output_filename = \ self.library_filename (output_libname, output_dir=output_dir) if self._need_link (objects, output_filename): lib_args = [output_filename, '/u'] + objects if debug: pass # XXX what goes here? try: self.spawn ([self.lib] + lib_args) except DistutilsExecError, msg: raise LibError, msg else: log.debug("skipping %s (up-to-date)", output_filename) # create_static_lib () def link (self, target_desc, objects, output_filename, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None): # XXX this ignores 'build_temp'! should follow the lead of # msvccompiler.py (objects, output_dir) = self._fix_object_args (objects, output_dir) (libraries, library_dirs, runtime_library_dirs) = \ self._fix_lib_args (libraries, library_dirs, runtime_library_dirs) if runtime_library_dirs: log.warn("I don't know what to do with 'runtime_library_dirs': %s", str(runtime_library_dirs)) if output_dir is not None: output_filename = os.path.join (output_dir, output_filename) if self._need_link (objects, output_filename): # Figure out linker args based on type of target. if target_desc == CCompiler.EXECUTABLE: startup_obj = 'c0w32' if debug: ld_args = self.ldflags_exe_debug[:] else: ld_args = self.ldflags_exe[:] else: startup_obj = 'c0d32' if debug: ld_args = self.ldflags_shared_debug[:] else: ld_args = self.ldflags_shared[:] # Create a temporary exports file for use by the linker if export_symbols is None: def_file = '' else: head, tail = os.path.split (output_filename) modname, ext = os.path.splitext (tail) temp_dir = os.path.dirname(objects[0]) # preserve tree structure def_file = os.path.join (temp_dir, '%s.def' % modname) contents = ['EXPORTS'] for sym in (export_symbols or []): contents.append(' %s=_%s' % (sym, sym)) self.execute(write_file, (def_file, contents), "writing %s" % def_file) # Borland C++ has problems with '/' in paths objects2 = map(os.path.normpath, objects) # split objects in .obj and .res files # Borland C++ needs them at different positions in the command line objects = [startup_obj] resources = [] for file in objects2: (base, ext) = os.path.splitext(os.path.normcase(file)) if ext == '.res': resources.append(file) else: objects.append(file) for l in library_dirs: ld_args.append("/L%s" % os.path.normpath(l)) ld_args.append("/L.") # we sometimes use relative paths # list of object files ld_args.extend(objects) # XXX the command-line syntax for Borland C++ is a bit wonky; # certain filenames are jammed together in one big string, but # comma-delimited. This doesn't mesh too well with the # Unix-centric attitude (with a DOS/Windows quoting hack) of # 'spawn()', so constructing the argument list is a bit # awkward. Note that doing the obvious thing and jamming all # the filenames and commas into one argument would be wrong, # because 'spawn()' would quote any filenames with spaces in # them. Arghghh!. Apparently it works fine as coded... # name of dll/exe file ld_args.extend([',',output_filename]) # no map file and start libraries ld_args.append(',,') for lib in libraries: # see if we find it and if there is a bcpp specific lib # (xxx_bcpp.lib) libfile = self.find_library_file(library_dirs, lib, debug) if libfile is None: ld_args.append(lib) # probably a BCPP internal library -- don't warn else: # full name which prefers bcpp_xxx.lib over xxx.lib ld_args.append(libfile) # some default libraries ld_args.append ('import32') ld_args.append ('cw32mt') # def file for export symbols ld_args.extend([',',def_file]) # add resource files ld_args.append(',') ld_args.extend(resources) if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ld_args.extend(extra_postargs) self.mkpath (os.path.dirname (output_filename)) try: self.spawn ([self.linker] + ld_args) except DistutilsExecError, msg: raise LinkError, msg else: log.debug("skipping %s (up-to-date)", output_filename) # link () # -- Miscellaneous methods ----------------------------------------- def find_library_file (self, dirs, lib, debug=0): # List of effective library names to try, in order of preference: # xxx_bcpp.lib is better than xxx.lib # and xxx_d.lib is better than xxx.lib if debug is set # # The "_bcpp" suffix is to handle a Python installation for people # with multiple compilers (primarily Distutils hackers, I suspect # ;-). The idea is they'd have one static library for each # compiler they care about, since (almost?) every Windows compiler # seems to have a different format for static libraries. if debug: dlib = (lib + "_d") try_names = (dlib + "_bcpp", lib + "_bcpp", dlib, lib) else: try_names = (lib + "_bcpp", lib) for dir in dirs: for name in try_names: libfile = os.path.join(dir, self.library_filename(name)) if os.path.exists(libfile): return libfile else: # Oops, didn't find it in *any* of 'dirs' return None # overwrite the one from CCompiler to support rc and res-files def object_filenames (self, source_filenames, strip_dir=0, output_dir=''): if output_dir is None: output_dir = '' obj_names = [] for src_name in source_filenames: # use normcase to make sure '.rc' is really '.rc' and not '.RC' (base, ext) = os.path.splitext (os.path.normcase(src_name)) if ext not in (self.src_extensions + ['.rc','.res']): raise UnknownFileError, \ "unknown file type '%s' (from '%s')" % \ (ext, src_name) if strip_dir: base = os.path.basename (base) if ext == '.res': # these can go unchanged obj_names.append (os.path.join (output_dir, base + ext)) elif ext == '.rc': # these need to be compiled to .res-files obj_names.append (os.path.join (output_dir, base + '.res')) else: obj_names.append (os.path.join (output_dir, base + self.obj_extension)) return obj_names # object_filenames () def preprocess (self, source, output_file=None, macros=None, include_dirs=None, extra_preargs=None, extra_postargs=None): (_, macros, include_dirs) = \ self._fix_compile_args(None, macros, include_dirs) pp_opts = gen_preprocess_options(macros, include_dirs) pp_args = ['cpp32.exe'] + pp_opts if output_file is not None: pp_args.append('-o' + output_file) if extra_preargs: pp_args[:0] = extra_preargs if extra_postargs: pp_args.extend(extra_postargs) pp_args.append(source) # We need to preprocess: either we're being forced to, or the # source file is newer than the target (or the target doesn't # exist). if self.force or output_file is None or newer(source, output_file): if output_file: self.mkpath(os.path.dirname(output_file)) try: self.spawn(pp_args) except DistutilsExecError, msg: print msg raise CompileError, msg # preprocess()
Save