Kaydet (Commit) 3ff3b039 authored tarafından Greg Ward's avatar Greg Ward

Added 'preprocess()' method to CCompiler interface, and implemented

it in UnixCCompiler.  Still needs to be implemented in MSVCCompiler (and
whatever other compiler classes are lurking out there, waiting to be
checked in).
üst a4ca07cc
...@@ -414,6 +414,22 @@ class CCompiler: ...@@ -414,6 +414,22 @@ class CCompiler:
# -- Worker methods ------------------------------------------------ # -- Worker methods ------------------------------------------------
# (must be implemented by subclasses) # (must be implemented by subclasses)
def preprocess (self,
source,
output_file=None,
macros=None,
include_dirs=None,
extra_preargs=None,
extra_postargs=None):
"""Preprocess a single C/C++ source file, named in 'source'.
Output will be written to file named 'output_file', or stdout if
'output_file' not supplied. 'macros' is a list of macro
definitions as for 'compile()', which will augment the macros set
with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a
list of directory names that will be added to the default list.
"""
pass
def compile (self, def compile (self,
sources, sources,
output_dir=None, output_dir=None,
......
...@@ -21,6 +21,7 @@ import string, re, os ...@@ -21,6 +21,7 @@ import string, re, os
from types import * from types import *
from copy import copy from copy import copy
from distutils import sysconfig from distutils import sysconfig
from distutils.dep_util import newer
from distutils.ccompiler import \ from distutils.ccompiler import \
CCompiler, gen_preprocess_options, gen_lib_options CCompiler, gen_preprocess_options, gen_lib_options
from distutils.errors import \ from distutils.errors import \
...@@ -104,6 +105,37 @@ class UnixCCompiler (CCompiler): ...@@ -104,6 +105,37 @@ class UnixCCompiler (CCompiler):
# __init__ () # __init__ ()
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)
cc_args = ['-E'] + pp_opts
if output_file:
cc_args.extend(['-o', output_file])
if extra_preargs:
cc_args[:0] = extra_preargs
if extra_postargs:
extra_postargs.extend(extra_postargs)
# 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 and newer(source, output_file)):
if output_file:
self.mkpath(os.path.dirname(output_file))
try:
self.spawn ([self.cc] + cc_args)
except DistutilsExecError, msg:
raise CompileError, msg
def compile (self, def compile (self,
sources, sources,
output_dir=None, output_dir=None,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment