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
parent 84a71dad87
commit 8100e2e9cd

View File

@@ -32,7 +32,7 @@ proc discoverVccVcVarsAllPath*(version: VccVersion = vccUndefined): string =
# All attempts to discover vcc failed
const
const
vccversionPrefix = "--vccversion"
printPathPrefix = "--printPath"
vcvarsallPrefix = "--vcvarsall"
@@ -49,7 +49,7 @@ const
platformSepIdx = platformPrefix.len
sdktypeSepIdx = sdktypePrefix.len
sdkversionSepIdx = sdkversionPrefix.len
vcvarsallDefaultPath = "vcvarsall.bat"
helpText = """
@@ -104,28 +104,29 @@ Microsoft (R) C/C++ Optimizing Compiler if no secondary
command was specified
"""
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] = @[]
# 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:
proc parseVccexeCmdLine(argseq: seq[TaintedString],
vccversionArg: var seq[string], printPathArg: var bool,
vcvarsallArg: var string, commandArg: var string, noCommandArg: var bool,
platformArg: var VccArch, sdkTypeArg: var VccPlatformType,
sdkVersionArg: var string, verboseArg: var bool,
clArgs: var seq[TaintedString]) =
## 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.
for wargv in argseq:
# 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))
elif wargv.cmpIgnoreCase(printPathPrefix) == 0: # Check for printPath
printPathArg = true
@@ -148,6 +149,25 @@ when isMainModule:
echo helpText
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
# specified, first successful discovery wins
var vccversionValue: VccVersion = vccUndefined