Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make vccexe parse response files #13329

Merged
merged 3 commits into from
Feb 11, 2020
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
fredrikhr marked this conversation as resolved.
Show resolved Hide resolved
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