diff options
author | Fredrik Høisæther Rasch <fredrik.rasch@gmail.com> | 2020-02-11 12:05:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-11 12:05:47 +0100 |
commit | 8100e2e9cdd653da7c3cf70ea84b0713daa3636d (patch) | |
tree | d1da58123c1801010ef6558d1b3a5bcb4a14a73c /tools/vccexe | |
parent | 84a71dad8797176e9b7ec4f9fefef9fbcd3d8fa4 (diff) | |
download | Nim-8100e2e9cdd653da7c3cf70ea84b0713daa3636d.tar.gz |
Make vccexe parse response files (#13329)
Diffstat (limited to 'tools/vccexe')
-rw-r--r-- | tools/vccexe/vccexe.nim | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/tools/vccexe/vccexe.nim b/tools/vccexe/vccexe.nim index e78f9da5e..1b5b2fb82 100644 --- a/tools/vccexe/vccexe.nim +++ b/tools/vccexe/vccexe.nim @@ -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 |