Skip to content

Commit

Permalink
Make vccexe parse response files (#13329)
Browse files Browse the repository at this point in the history
  • Loading branch information
fredrikhr authored Feb 11, 2020
1 parent 84a71da commit 8100e2e
Showing 1 changed file with 43 additions and 23 deletions.
66 changes: 43 additions & 23 deletions tools/vccexe/vccexe.nim
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ proc discoverVccVcVarsAllPath*(version: VccVersion = vccUndefined): string =

# All attempts to discover vcc failed

const
const
vccversionPrefix = "--vccversion"
printPathPrefix = "--printPath"
vcvarsallPrefix = "--vcvarsall"
Expand All @@ -49,7 +49,7 @@ const
platformSepIdx = platformPrefix.len
sdktypeSepIdx = sdktypePrefix.len
sdkversionSepIdx = sdkversionPrefix.len

vcvarsallDefaultPath = "vcvarsall.bat"

helpText = """
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 8100e2e

Please sign in to comment.