Make vccexe parse response files (#13329)

This commit is contained in:
Fredrik Høisæther Rasch 2020-02-11 12:05:47 +01:00 • committed by GitHub
commit 8100e2e9cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -104,28 +104,29 @@ Microsoft (R) C/C++ Optimizing Compiler if no secondary
command was specified command was specified
""" """
when isMainModule: proc parseVccexeCmdLine(argseq: seq[TaintedString],
var vccversionArg: seq[string] = @[] vccversionArg: var seq[string], printPathArg: var bool,
var printPathArg: bool = false vcvarsallArg: var string, commandArg: var string, noCommandArg: var bool,
var vcvarsallArg: string platformArg: var VccArch, sdkTypeArg: var VccPlatformType,
var commandArg: string sdkVersionArg: var string, verboseArg: var bool,
var noCommandArg: bool = false clArgs: var seq[TaintedString]) =
var platformArg: VccArch ## Cannot use usual command-line argument parser here
var sdkTypeArg: VccPlatformType ## Since vccexe command-line arguments are intermingled
var sdkVersionArg: string ## with the secondary command-line arguments which have
var verboseArg: bool = false ## a syntax that is not supported by the default nim
## argument parser.
var clArgs: seq[TaintedString] = @[] for wargv in argseq:
# Cannot use usual command-line argument parser here
# Since vccexe command-line arguments are intermingled
# with the secondary command-line arguments which have
# a syntax that is not supported by the default nim
# argument parser.
var wrapperArgs = commandLineParams()
for wargv in wrapperArgs:
# Check whether the current argument contains -- prefix # Check whether the current argument contains -- prefix
if wargv.startsWith(vccversionPrefix): # Check for vccversion if wargv.startsWith("@"): # Check for response file prefix
let
responsefilename = wargv.substr(1)
responsefilehandle = open(responsefilename)
responsecontent = responsefilehandle.readAll()
responseargs = parseCmdLine(responsecontent)
parseVccexeCmdLine(responseargs, vccversionArg, printPathArg,
vcvarsallArg, commandArg, noCommandArg, platformArg, sdkTypeArg,
sdkVersionArg, verboseArg, clArgs)
elif wargv.startsWith(vccversionPrefix): # Check for vccversion
vccversionArg.add(wargv.substr(vccversionSepIdx + 1)) vccversionArg.add(wargv.substr(vccversionSepIdx + 1))
elif wargv.cmpIgnoreCase(printPathPrefix) == 0: # Check for printPath elif wargv.cmpIgnoreCase(printPathPrefix) == 0: # Check for printPath
printPathArg = true printPathArg = true
@ -148,6 +149,25 @@ when isMainModule:
echo helpText echo helpText
clArgs.add(wargv) clArgs.add(wargv)
when isMainModule:
var vccversionArg: seq[string] = @[]
var printPathArg: bool = false
var vcvarsallArg: string
var commandArg: string
var noCommandArg: bool = false
var platformArg: VccArch
var sdkTypeArg: VccPlatformType
var sdkVersionArg: string
var verboseArg: bool = false
var clArgs: seq[TaintedString] = @[]
let wrapperArgs = commandLineParams()
parseVccexeCmdLine(wrapperArgs, vccversionArg, printPathArg, vcvarsallArg,
commandArg, noCommandArg, platformArg, sdkTypeArg, sdkVersionArg,
verboseArg,
clArgs)
# Support for multiple specified versions. Attempt VCC discovery for each version # Support for multiple specified versions. Attempt VCC discovery for each version
# specified, first successful discovery wins # specified, first successful discovery wins
var vccversionValue: VccVersion = vccUndefined var vccversionValue: VccVersion = vccUndefined