[cfe-commits] r61793 - in /cfe/trunk/tools/ccc/ccclib: Arguments.py Driver.py Tools.py
Daniel Dunbar
daniel at zuster.org
Mon Jan 5 22:12:14 PST 2009
Author: ddunbar
Date: Tue Jan 6 00:12:13 2009
New Revision: 61793
URL: http://llvm.org/viewvc/llvm-project?rev=61793&view=rev
Log:
ccc: Track last actual argument instance for each option & change
driver to lookup this way instead of manually scanning arguments in
multiple places.
Modified:
cfe/trunk/tools/ccc/ccclib/Arguments.py
cfe/trunk/tools/ccc/ccclib/Driver.py
cfe/trunk/tools/ccc/ccclib/Tools.py
Modified: cfe/trunk/tools/ccc/ccclib/Arguments.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/Arguments.py?rev=61793&r1=61792&r2=61793&view=diff
==============================================================================
--- cfe/trunk/tools/ccc/ccclib/Arguments.py (original)
+++ cfe/trunk/tools/ccc/ccclib/Arguments.py Tue Jan 6 00:12:13 2009
@@ -111,7 +111,7 @@
assert opt is not None
self.index = index
self.opt = opt
-
+
def __repr__(self):
return '<%s index=%r opt=%r>' % (self.__class__.__name__,
self.index,
@@ -239,6 +239,10 @@
def __init__(self, argv):
self.argv = list(argv)
self.args = []
+ self.lastArgs = {}
+
+ def getLastArg(self, option):
+ return self.lastArgs.get(option)
# Support use as a simple arg list.
@@ -247,6 +251,7 @@
def append(self, arg):
self.args.append(arg)
+ self.lastArgs[arg.opt] = arg
# Forwarding methods.
@@ -268,8 +273,198 @@
self.inputOption = InputOption()
self.unknownOption = UnknownOption()
+ # Driver driver options
+ self.archOption = self.addOption(SeparateOption('-arch'))
+
+ # Misc driver options
+ self.addOption(FlagOption('-pass-exit-codes'))
+ self.addOption(FlagOption('--help'))
+ self.addOption(FlagOption('--target-help'))
+
+ self.dumpspecsOption = self.addOption(FlagOption('-dumpspecs'))
+ self.dumpversionOption = self.addOption(FlagOption('-dumpversion'))
+ self.dumpmachineOption = self.addOption(FlagOption('-dumpmachine'))
+ self.printSearchDirsOption = self.addOption(FlagOption('-print-search-dirs'))
+ self.printLibgccFilenameOption = self.addOption(FlagOption('-print-libgcc-file-name'))
+ # FIXME: Hrm, where does this come from? It isn't always true that
+ # we take both - and --. For example, gcc --S ... ends up sending
+ # -fS to cc1. Investigate.
+ #
+ # FIXME: Need to implement some form of alias support inside
+ # getLastOption to handle this.
+ self.printLibgccFileNameOption2 = self.addOption(FlagOption('--print-libgcc-file-name'))
+ self.printFileNameOption = self.addOption(JoinedOption('-print-file-name='))
+ self.printProgNameOption = self.addOption(JoinedOption('-print-prog-name='))
+ self.printProgNameOption2 = self.addOption(JoinedOption('--print-prog-name='))
+ self.printMultiDirectoryOption = self.addOption(FlagOption('-print-multi-directory'))
+ self.printMultiLibOption = self.addOption(FlagOption('-print-multi-lib'))
+ self.addOption(FlagOption('-print-multi-os-directory'))
+
+ # Hmmm, who really takes this?
+ self.addOption(FlagOption('--version'))
+
+ # Pipeline control
+ self.hashHashHashOption = self.addOption(FlagOption('-###'))
+ self.EOption = self.addOption(FlagOption('-E'))
+ self.SOption = self.addOption(FlagOption('-S'))
+ self.cOption = self.addOption(FlagOption('-c'))
+ self.combineOption = self.addOption(FlagOption('-combine'))
+ self.noIntegratedCPPOption = self.addOption(FlagOption('-no-integrated-cpp'))
+ self.pipeOption = self.addOption(FlagOption('-pipe'))
+ self.saveTempsOption = self.addOption(FlagOption('-save-temps'))
+ self.saveTempsOption2 = self.addOption(FlagOption('--save-temps'))
+ self.addOption(JoinedOption('-specs='))
+ self.addOption(FlagOption('-time'))
+ self.addOption(FlagOption('-v'))
+
+ # Input/output stuff
+ self.oOption = self.addOption(JoinedOrSeparateOption('-o'))
+ self.xOption = self.addOption(JoinedOrSeparateOption('-x'))
+
+ # FIXME: What do these actually do? The documentation is less than
+ # clear.
+ self.addOption(FlagOption('-ObjC'))
+ self.addOption(FlagOption('-ObjC++'))
+
+ # FIXME: Weird, gcc claims this here in help but I'm not sure why;
+ # perhaps interaction with preprocessor? Investigate.
+ self.addOption(JoinedOption('-std='))
+ self.addOption(JoinedOrSeparateOption('--sysroot'))
+
+ # Version control
+ self.addOption(JoinedOrSeparateOption('-B'))
+ self.addOption(JoinedOrSeparateOption('-V'))
+ self.addOption(JoinedOrSeparateOption('-b'))
+
+ # Blanket pass-through options.
+
+ self.addOption(JoinedOption('-Wa,'))
+ self.addOption(SeparateOption('-Xassembler'))
+
+ self.addOption(JoinedOption('-Wp,'))
+ self.addOption(SeparateOption('-Xpreprocessor'))
+
+ self.addOption(JoinedOption('-Wl,'))
+ self.addOption(SeparateOption('-Xlinker'))
+
+ ####
+ # Bring on the random garbage.
+
+ self.addOption(FlagOption('-MD'))
+ self.addOption(FlagOption('-MP'))
+ self.addOption(FlagOption('-MM'))
+ self.addOption(JoinedOrSeparateOption('-MF'))
+ self.addOption(JoinedOrSeparateOption('-MT'))
+ self.addOption(FlagOption('-undef'))
+
+ self.addOption(FlagOption('-w'))
+ self.addOption(JoinedOrSeparateOption('-allowable_client'))
+ self.addOption(JoinedOrSeparateOption('-client_name'))
+ self.addOption(JoinedOrSeparateOption('-compatibility_version'))
+ self.addOption(JoinedOrSeparateOption('-current_version'))
+ self.addOption(JoinedOrSeparateOption('-exported_symbols_list'))
+ self.addOption(JoinedOrSeparateOption('-idirafter'))
+ self.addOption(JoinedOrSeparateOption('-iquote'))
+ self.addOption(JoinedOrSeparateOption('-isysroot'))
+ self.addOption(JoinedOrSeparateOption('-keep_private_externs'))
+ self.addOption(JoinedOrSeparateOption('-seg1addr'))
+ self.addOption(JoinedOrSeparateOption('-segprot'))
+ self.addOption(JoinedOrSeparateOption('-sub_library'))
+ self.addOption(JoinedOrSeparateOption('-sub_umbrella'))
+ self.addOption(JoinedOrSeparateOption('-umbrella'))
+ self.addOption(JoinedOrSeparateOption('-undefined'))
+ self.addOption(JoinedOrSeparateOption('-unexported_symbols_list'))
+ self.addOption(JoinedOrSeparateOption('-weak_framework'))
+ self.addOption(JoinedOption('-headerpad_max_install_names'))
+ self.addOption(FlagOption('-twolevel_namespace'))
+ self.addOption(FlagOption('-prebind'))
+ self.addOption(FlagOption('-prebind_all_twolevel_modules'))
+ self.addOption(FlagOption('-single_module'))
+ self.addOption(FlagOption('-nomultidefs'))
+ self.addOption(FlagOption('-nostdlib'))
+ self.addOption(FlagOption('-nostdinc'))
+ self.addOption(FlagOption('-static'))
+ self.addOption(FlagOption('-shared'))
+ self.addOption(FlagOption('-C'))
+ self.addOption(FlagOption('-CC'))
+ self.addOption(FlagOption('-R'))
+ self.addOption(FlagOption('-P'))
+ self.addOption(FlagOption('-all_load'))
+ self.addOption(FlagOption('--constant-cfstrings'))
+ self.addOption(FlagOption('-traditional'))
+ self.addOption(FlagOption('--traditional'))
+ self.addOption(FlagOption('-no_dead_strip_inits_and_terms'))
+ self.addOption(MultiArgOption('-sectalign', numArgs=3))
+ self.addOption(MultiArgOption('-sectcreate', numArgs=3))
+ self.addOption(MultiArgOption('-sectorder', numArgs=3))
+
+ # I dunno why these don't end up working when joined. Maybe
+ # because of translation?
+ self.filelistOption = self.addOption(SeparateOption('-filelist'))
+ self.addOption(SeparateOption('-framework'))
+ self.addOption(SeparateOption('-install_name'))
+ self.addOption(SeparateOption('-seg_addr_table'))
+ self.addOption(SeparateOption('-seg_addr_table_filename'))
+
+ # Where are these coming from? I can't find them...
+ self.addOption(JoinedOrSeparateOption('-e')) # Gets forwarded to linker
+ self.addOption(JoinedOrSeparateOption('-r'))
+
+ # Is this actually declared anywhere? I can only find it in a
+ # spec. :(
+ self.addOption(FlagOption('-pg'))
+
+ doNotReallySupport = 1
+ if doNotReallySupport:
+ # Archaic gcc option.
+ self.addOption(FlagOption('-cpp-precomp'))
+ self.addOption(FlagOption('-no-cpp-precomp'))
+
+ # C options for testing
+
+ self.addOption(JoinedOrSeparateOption('-include'))
+ self.addOption(JoinedOrSeparateOption('-A'))
+ self.addOption(JoinedOrSeparateOption('-D'))
+ self.addOption(JoinedOrSeparateOption('-F'))
+ self.addOption(JoinedOrSeparateOption('-I'))
+ self.addOption(JoinedOrSeparateOption('-L'))
+ self.addOption(JoinedOrSeparateOption('-U'))
+ self.addOption(JoinedOrSeparateOption('-l'))
+ self.addOption(JoinedOrSeparateOption('-u'))
+
+ # FIXME: What is going on here? '-X' goes to linker, and -X ... goes nowhere?
+ self.addOption(FlagOption('-X'))
+ # Not exactly sure how to decompose this. I split out -Xarch_
+ # because we need to recognize that in the driver driver part.
+ # FIXME: Man, this is lame it needs its own option.
+ self.XarchOption = self.addOption(JoinedAndSeparateOption('-Xarch_'))
+ self.addOption(JoinedOption('-X'))
+
+ # The driver needs to know about this flag.
+ self.syntaxOnlyOption = self.addOption(FlagOption('-fsyntax-only'))
+
+ # FIXME: Wrong?
+ # FIXME: What to do about the ambiguity of options like
+ # -dumpspecs? How is this handled in gcc?
+ self.addOption(JoinedOption('-d'))
+ self.addOption(JoinedOption('-g'))
+ self.addOption(JoinedOption('-f'))
+ self.addOption(JoinedOption('-m'))
+ self.addOption(JoinedOption('-i'))
+ self.addOption(JoinedOption('-O'))
+ self.addOption(JoinedOption('-W'))
+ # FIXME: Weird. This option isn't really separate, --param=a=b
+ # works. An alias somewhere?
+ self.addOption(SeparateOption('--param'))
+
+ # FIXME: What is this? Seems to do something on Linux. I think
+ # only one is valid, but have a log that uses both.
+ self.addOption(FlagOption('-pthread'))
+ self.addOption(FlagOption('-pthreads'))
+
def addOption(self, opt):
self.options.append(opt)
+ return opt
def parseArgs(self, argv):
"""
@@ -302,194 +497,3 @@
if arg is not None:
return arg
return PositionalArg(i, self.unknownOption)
-
-def createOptionParser():
- op = OptionParser()
-
- # Driver driver options
- op.addOption(SeparateOption('-arch'))
-
- # Misc driver options
- op.addOption(FlagOption('-pass-exit-codes'))
- op.addOption(FlagOption('--help'))
- op.addOption(FlagOption('--target-help'))
-
- op.addOption(FlagOption('-dumpspecs'))
- op.addOption(FlagOption('-dumpversion'))
- op.addOption(FlagOption('-dumpmachine'))
- op.addOption(FlagOption('-print-search-dirs'))
- op.addOption(FlagOption('-print-libgcc-file-name'))
- # FIXME: Hrm, where does this come from? It isn't always true that
- # we take both - and --. For example, gcc --S ... ends up sending
- # -fS to cc1. Investigate.
- op.addOption(FlagOption('--print-libgcc-file-name'))
- op.addOption(JoinedOption('-print-file-name='))
- op.addOption(JoinedOption('-print-prog-name='))
- op.addOption(JoinedOption('--print-prog-name='))
- op.addOption(FlagOption('-print-multi-directory'))
- op.addOption(FlagOption('-print-multi-lib'))
- op.addOption(FlagOption('-print-multi-os-directory'))
-
- # Hmmm, who really takes this?
- op.addOption(FlagOption('--version'))
-
- # Pipeline control
- op.addOption(FlagOption('-###'))
- op.addOption(FlagOption('-E'))
- op.addOption(FlagOption('-S'))
- op.addOption(FlagOption('-c'))
- op.addOption(FlagOption('-combine'))
- op.addOption(FlagOption('-no-integrated-cpp'))
- op.addOption(FlagOption('-pipe'))
- op.addOption(FlagOption('-save-temps'))
- op.addOption(FlagOption('--save-temps'))
- op.addOption(JoinedOption('-specs='))
- op.addOption(FlagOption('-time'))
- op.addOption(FlagOption('-v'))
-
- # Input/output stuff
- op.addOption(JoinedOrSeparateOption('-o'))
- op.addOption(JoinedOrSeparateOption('-x'))
-
- # FIXME: What do these actually do? The documentation is less than
- # clear.
- op.addOption(FlagOption('-ObjC'))
- op.addOption(FlagOption('-ObjC++'))
-
- # FIXME: Weird, gcc claims this here in help but I'm not sure why;
- # perhaps interaction with preprocessor? Investigate.
- op.addOption(JoinedOption('-std='))
- op.addOption(JoinedOrSeparateOption('--sysroot'))
-
- # Version control
- op.addOption(JoinedOrSeparateOption('-B'))
- op.addOption(JoinedOrSeparateOption('-V'))
- op.addOption(JoinedOrSeparateOption('-b'))
-
- # Blanket pass-through options.
-
- op.addOption(JoinedOption('-Wa,'))
- op.addOption(SeparateOption('-Xassembler'))
-
- op.addOption(JoinedOption('-Wp,'))
- op.addOption(SeparateOption('-Xpreprocessor'))
-
- op.addOption(JoinedOption('-Wl,'))
- op.addOption(SeparateOption('-Xlinker'))
-
- ####
- # Bring on the random garbage.
-
- op.addOption(FlagOption('-MD'))
- op.addOption(FlagOption('-MP'))
- op.addOption(FlagOption('-MM'))
- op.addOption(JoinedOrSeparateOption('-MF'))
- op.addOption(JoinedOrSeparateOption('-MT'))
- op.addOption(FlagOption('-undef'))
-
- op.addOption(FlagOption('-w'))
- op.addOption(JoinedOrSeparateOption('-allowable_client'))
- op.addOption(JoinedOrSeparateOption('-client_name'))
- op.addOption(JoinedOrSeparateOption('-compatibility_version'))
- op.addOption(JoinedOrSeparateOption('-current_version'))
- op.addOption(JoinedOrSeparateOption('-exported_symbols_list'))
- op.addOption(JoinedOrSeparateOption('-idirafter'))
- op.addOption(JoinedOrSeparateOption('-iquote'))
- op.addOption(JoinedOrSeparateOption('-isysroot'))
- op.addOption(JoinedOrSeparateOption('-keep_private_externs'))
- op.addOption(JoinedOrSeparateOption('-seg1addr'))
- op.addOption(JoinedOrSeparateOption('-segprot'))
- op.addOption(JoinedOrSeparateOption('-sub_library'))
- op.addOption(JoinedOrSeparateOption('-sub_umbrella'))
- op.addOption(JoinedOrSeparateOption('-umbrella'))
- op.addOption(JoinedOrSeparateOption('-undefined'))
- op.addOption(JoinedOrSeparateOption('-unexported_symbols_list'))
- op.addOption(JoinedOrSeparateOption('-weak_framework'))
- op.addOption(JoinedOption('-headerpad_max_install_names'))
- op.addOption(FlagOption('-twolevel_namespace'))
- op.addOption(FlagOption('-prebind'))
- op.addOption(FlagOption('-prebind_all_twolevel_modules'))
- op.addOption(FlagOption('-single_module'))
- op.addOption(FlagOption('-nomultidefs'))
- op.addOption(FlagOption('-nostdlib'))
- op.addOption(FlagOption('-nostdinc'))
- op.addOption(FlagOption('-static'))
- op.addOption(FlagOption('-shared'))
- op.addOption(FlagOption('-C'))
- op.addOption(FlagOption('-CC'))
- op.addOption(FlagOption('-R'))
- op.addOption(FlagOption('-P'))
- op.addOption(FlagOption('-all_load'))
- op.addOption(FlagOption('--constant-cfstrings'))
- op.addOption(FlagOption('-traditional'))
- op.addOption(FlagOption('--traditional'))
- op.addOption(FlagOption('-no_dead_strip_inits_and_terms'))
- op.addOption(MultiArgOption('-sectalign', numArgs=3))
- op.addOption(MultiArgOption('-sectcreate', numArgs=3))
- op.addOption(MultiArgOption('-sectorder', numArgs=3))
-
- # I dunno why these don't end up working when joined. Maybe
- # because of translation?
- op.addOption(SeparateOption('-filelist'))
- op.addOption(SeparateOption('-framework'))
- op.addOption(SeparateOption('-install_name'))
- op.addOption(SeparateOption('-seg_addr_table'))
- op.addOption(SeparateOption('-seg_addr_table_filename'))
-
- # Where are these coming from? I can't find them...
- op.addOption(JoinedOrSeparateOption('-e')) # Gets forwarded to linker
- op.addOption(JoinedOrSeparateOption('-r'))
-
- # Is this actually declared anywhere? I can only find it in a
- # spec. :(
- op.addOption(FlagOption('-pg'))
-
- doNotReallySupport = 1
- if doNotReallySupport:
- # Archaic gcc option.
- op.addOption(FlagOption('-cpp-precomp'))
- op.addOption(FlagOption('-no-cpp-precomp'))
-
- # C options for testing
-
- op.addOption(JoinedOrSeparateOption('-include'))
- op.addOption(JoinedOrSeparateOption('-A'))
- op.addOption(JoinedOrSeparateOption('-D'))
- op.addOption(JoinedOrSeparateOption('-F'))
- op.addOption(JoinedOrSeparateOption('-I'))
- op.addOption(JoinedOrSeparateOption('-L'))
- op.addOption(JoinedOrSeparateOption('-U'))
- op.addOption(JoinedOrSeparateOption('-l'))
- op.addOption(JoinedOrSeparateOption('-u'))
-
- # FIXME: What is going on here? '-X' goes to linker, and -X ... goes nowhere?
- op.addOption(FlagOption('-X'))
- # Not exactly sure how to decompose this. I split out -Xarch_
- # because we need to recognize that in the driver driver part.
- # FIXME: Man, this is lame it needs its own option.
- op.addOption(JoinedAndSeparateOption('-Xarch_'))
- op.addOption(JoinedOption('-X'))
-
- # The driver needs to know about this flag.
- op.addOption(FlagOption('-fsyntax-only'))
-
- # FIXME: Wrong?
- # FIXME: What to do about the ambiguity of options like
- # -dumpspecs? How is this handled in gcc?
- op.addOption(JoinedOption('-d'))
- op.addOption(JoinedOption('-g'))
- op.addOption(JoinedOption('-f'))
- op.addOption(JoinedOption('-m'))
- op.addOption(JoinedOption('-i'))
- op.addOption(JoinedOption('-O'))
- op.addOption(JoinedOption('-W'))
- # FIXME: Weird. This option isn't really separate, --param=a=b
- # works. An alias somewhere?
- op.addOption(SeparateOption('--param'))
-
- # FIXME: What is this? Seems to do something on Linux. I think
- # only one is valid, but have a log that uses both.
- op.addOption(FlagOption('-pthread'))
- op.addOption(FlagOption('-pthreads'))
-
- return op
Modified: cfe/trunk/tools/ccc/ccclib/Driver.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/Driver.py?rev=61793&r1=61792&r2=61793&view=diff
==============================================================================
--- cfe/trunk/tools/ccc/ccclib/Driver.py (original)
+++ cfe/trunk/tools/ccc/ccclib/Driver.py Tue Jan 6 00:12:13 2009
@@ -25,7 +25,7 @@
class Driver(object):
def __init__(self):
- self.parser = Arguments.createOptionParser()
+ self.parser = Arguments.OptionParser()
def run(self, argv):
# FIXME: Things to support from environment: GCC_EXEC_PREFIX,
@@ -99,11 +99,7 @@
# can turn it off in Release-Asserts builds).
# Print in -### syntax.
- hasHashHashHash = None
- for arg in args:
- if arg.opt.name == '-###':
- hasHashHashHash = arg
-
+ hasHashHashHash = args.getLastArg(self.parser.hashHashHashOption)
if hasHashHashHash:
self.claim(hasHashHashHash)
for j in jobs.iterjobs():
@@ -192,45 +188,63 @@
# FIXME: Do we want to report "argument unused" type errors in the
# presence of things like -dumpmachine and -print-search-dirs?
# Probably not.
- for arg in args:
- if arg.opt.name == '-dumpmachine':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-dumpspecs':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-dumpversion':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-file-name=':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-multi-directory':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-multi-lib':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-prog-name=':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-libgcc-file-name':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
- elif arg.opt.name == '-print-search-dirs':
- print 'FIXME: %s' % arg.opt.name
- sys.exit(1)
+ arg = args.getLastArg(self.parser.dumpmachineOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.dumpspecsOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.dumpversionOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printFileNameOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printMultiDirectoryOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printMultiLibOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printProgNameOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printLibgccFilenameOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
+
+ arg = args.getLastArg(self.parser.printSearchDirsOption)
+ if arg:
+ print 'FIXME: %s' % arg.opt.name
+ sys.exit(1)
def buildNormalPipeline(self, args):
- hasCombine = None
- hasSyntaxOnly = None
- hasDashC = hasDashE = hasDashS = None
+ hasCombine = args.getLastArg(self.parser.combineOption)
+ hasSyntaxOnly = args.getLastArg(self.parser.syntaxOnlyOption)
+ hasDashC = args.getLastArg(self.parser.cOption)
+ hasDashE = args.getLastArg(self.parser.EOption)
+ hasDashS = args.getLastArg(self.parser.SOption)
inputType = None
inputTypeOpt = None
inputs = []
for a in args:
- if a.opt.name == '<input>':
+ if a.opt is self.parser.inputOption:
if inputType is None:
base,ext = os.path.splitext(args.getValue(a))
if ext and ext in Types.kTypeSuffixMap:
@@ -246,18 +260,9 @@
self.claim(inputTypeOpt)
klass = inputType
inputs.append((klass, a))
- elif a.opt.name == '-E':
- hasDashE = a
- elif a.opt.name == '-S':
- hasDashS = a
- elif a.opt.name == '-c':
- hasDashC = a
- elif a.opt.name == '-fsyntax-only':
- hasSyntaxOnly = a
- elif a.opt.name == '-combine':
- hasCombine = a
- elif a.opt.name == '-filelist':
- # Treat as a linker input.
+ elif a.opt is self.parser.filelistOption:
+ # Treat as a linker input. Investigate how gcc is
+ # handling this.
#
# FIXME: This might not be good enough. We may
# need to introduce another type for this case, so
@@ -265,7 +270,7 @@
# handles this properly. Best not to try and lipo
# this, for example.
inputs.append((Types.ObjectType, a))
- elif a.opt.name == '-x':
+ elif a.opt is self.parser.xOption:
self.claim(a)
inputTypeOpt = a
value = args.getValue(a)
@@ -400,15 +405,14 @@
# FIXME: We need to handle canonicalization of the specified arch.
archs = []
- hasOutput = None
- hasDashM = hasSaveTemps = None
+ hasDashM = None
+ hasSaveTemps = (args.getLastArg(self.parser.saveTempsOption) or
+ args.getLastArg(self.parser.saveTempsOption2))
for arg in args:
- if arg.opt.name == '-arch':
+ if arg.opt is self.parser.archOption:
archs.append(arg)
elif arg.opt.name.startswith('-M'):
hasDashM = arg
- elif arg.opt.name in ('-save-temps','--save-temps'):
- hasSaveTemps = arg
if not archs:
# FIXME: Need to infer arch so that we sub -Xarch
@@ -477,24 +481,22 @@
def bindPhases(self, phases, args):
jobs = Jobs.JobList()
- finalOutput = None
- hasSaveTemps = hasNoIntegratedCPP = hasPipe = None
+ finalOutput = args.getLastArg(self.parser.oOption)
+ hasSaveTemps = (args.getLastArg(self.parser.saveTempsOption) or
+ args.getLastArg(self.parser.saveTempsOption2))
+ hasNoIntegratedCPP = args.getLastArg(self.parser.noIntegratedCPPOption)
+ hasPipe = args.getLastArg(self.parser.pipeOption)
forward = []
for a in args:
- if a.opt.name == '<input>':
+ if a.opt is self.parser.inputOption:
pass
- elif a.opt.name == '-save-temps':
- hasSaveTemps = a
- elif a.opt.name == '-no-integrated-cpp':
- hasNoIntegratedCPP = a
- elif a.opt.name == '-o':
- finalOutput = a
- elif a.opt.name == '-pipe':
- hasPipe = a
+
+ # FIXME: Needs to be part of option.
elif a.opt.name in ('-E', '-S', '-c',
'-arch', '-fsyntax-only', '-combine', '-x',
'-###'):
pass
+
else:
forward.append(a)
@@ -538,10 +540,10 @@
archName = args.getValue(phase.arch)
filteredArgs = []
for arg in forwardArgs:
- if arg.opt.name == '-arch':
+ if arg.opt is self.parser.archOption:
if arg is phase.arch:
filteredArgs.append(arg)
- elif arg.opt.name == '-Xarch_':
+ elif arg.opt is self.parser.XarchOption:
# FIXME: gcc-dd has another conditional for passing
# through, when the arch conditional array has an empty
# string. Why?
@@ -617,7 +619,7 @@
else:
base,_ = os.path.splitext(inputName)
assert phase.type.tempSuffix is not None
- namedOutput = base + phase.type.tempSuffix
+ namedOutput = base + '.' + phase.type.tempSuffix
# Output to user requested destination?
if atTopLevel and finalOutput:
@@ -627,7 +629,7 @@
output = Arguments.DerivedArg(namedOutput)
else:
# Output to temp file...
- fd,filename = tempfile.mkstemp(suffix=phase.type.tempSuffix)
+ fd,filename = tempfile.mkstemp(suffix='.'+phase.type.tempSuffix)
output = Arguments.DerivedArg(filename)
tool.constructJob(phase, arch, jobList, inputs, output, phase.type, forwardArgs)
Modified: cfe/trunk/tools/ccc/ccclib/Tools.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/Tools.py?rev=61793&r1=61792&r2=61793&view=diff
==============================================================================
--- cfe/trunk/tools/ccc/ccclib/Tools.py (original)
+++ cfe/trunk/tools/ccc/ccclib/Tools.py Tue Jan 6 00:12:13 2009
@@ -3,7 +3,7 @@
import Types
class Tool(object):
- """Tool - A concrete implementation of a phase."""
+ """Tool - A concrete implementation of an action."""
eFlagsPipedInput = 1 << 0
eFlagsPipedOutput = 1 << 1
More information about the cfe-commits
mailing list