Make vccexe parse response files (#13329)
This commit is contained in:
parent
84a71dad87
commit
8100e2e9cd
1 changed files with 43 additions and 23 deletions
|
|
@ -32,7 +32,7 @@ proc discoverVccVcVarsAllPath*(version: VccVersion = vccUndefined): string =
|
||||||
|
|
||||||
# All attempts to discover vcc failed
|
# All attempts to discover vcc failed
|
||||||
|
|
||||||
const
|
const
|
||||||
vccversionPrefix = "--vccversion"
|
vccversionPrefix = "--vccversion"
|
||||||
printPathPrefix = "--printPath"
|
printPathPrefix = "--printPath"
|
||||||
vcvarsallPrefix = "--vcvarsall"
|
vcvarsallPrefix = "--vcvarsall"
|
||||||
|
|
@ -49,7 +49,7 @@ const
|
||||||
platformSepIdx = platformPrefix.len
|
platformSepIdx = platformPrefix.len
|
||||||
sdktypeSepIdx = sdktypePrefix.len
|
sdktypeSepIdx = sdktypePrefix.len
|
||||||
sdkversionSepIdx = sdkversionPrefix.len
|
sdkversionSepIdx = sdkversionPrefix.len
|
||||||
|
|
||||||
vcvarsallDefaultPath = "vcvarsall.bat"
|
vcvarsallDefaultPath = "vcvarsall.bat"
|
||||||
|
|
||||||
helpText = """
|
helpText = """
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue