mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
Make vccexe parse response files (#13329)
This commit is contained in:
committed by
GitHub
parent
84a71dad87
commit
8100e2e9cd
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user