summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFredrik Høisæther Rasch <fredrik.rasch@gmail.com>2017-03-21 01:26:44 +0100
committerFredrik Høisæther Rasch <fredrik.h.rasch@uit.no>2017-03-21 12:18:32 +0100
commit05faad30a456d772bc24f3e7d1197bf6bb0e6387 (patch)
treedd728965c8e3218618cfba4d883a8499a198f6c7
parentaa14ee1856ccb5f32cd71ca272620482f3964f1d (diff)
downloadNim-05faad30a456d772bc24f3e7d1197bf6bb0e6387.tar.gz
vccexe tool can use vccdiscover utility
Used when vcvarsall path is not specified, or if only a vccversion is specified
-rw-r--r--tools/vccexe/vccexe.nim24
1 files changed, 22 insertions, 2 deletions
diff --git a/tools/vccexe/vccexe.nim b/tools/vccexe/vccexe.nim
index d5ed143a5..6d0908c3b 100644
--- a/tools/vccexe/vccexe.nim
+++ b/tools/vccexe/vccexe.nim
@@ -1,4 +1,4 @@
-import strutils, strtabs, os, osproc, vcvarsall
+import strutils, strtabs, os, osproc, vcvarsall, vccdiscover
 
 when defined(release):
   let vccOptions = {poParentStreams}
@@ -6,12 +6,14 @@ else:
   let vccOptions = {poEchoCmd, poParentStreams}
 
 const 
+  vccversionPrefix = "--vccversion"
   vcvarsallPrefix = "--vcvarsall"
   commandPrefix = "--command"
   platformPrefix = "--platform"
   sdktypePrefix = "--sdktype"
   sdkversionPrefix = "--sdkversion"
 
+  vccversionSepIdx = vccversionPrefix.len
   vcvarsallSepIdx = vcvarsallPrefix.len
   commandSepIdx = commandPrefix.len
   platformSepIdx = platformPrefix.len
@@ -27,6 +29,9 @@ const
 Usage:
   vccexe [options] [compileroptions]
 Options:
+  --vccversion:<v>    Optionally specify the VCC version to discover
+                      <v>: 0, 90, 100, 110, 120, 140
+                      Argument value is passed on to vccdiscover utility
   --vcvarsall:<path>  Path to the Developer Command Prompt utility vcvarsall.bat that selects
                       the appropiate devlopment settings.
                       Usual path for Visual Studio 2015 and below:
@@ -54,6 +59,7 @@ command was specified
 """
 
 when isMainModule:
+  var vccversionArg: seq[string] = @[]
   var vcvarsallArg: string = nil
   var commandArg: string = nil
   var platformArg: VccArch
@@ -65,7 +71,9 @@ when isMainModule:
   var wrapperArgs = commandLineParams()
   for wargv in wrapperArgs:
     # Check whether the current argument contains -- prefix
-    if wargv.startsWith(vcvarsallPrefix): # Check for vcvarsall
+    if wargv.startsWith(vccversionPrefix): # Check for vccversion
+      vccversionArg.add(wargv.substr(vccversionSepIdx + 1))
+    elif wargv.startsWith(vcvarsallPrefix): # Check for vcvarsall
       vcvarsallArg = wargv.substr(vcvarsallSepIdx + 1)
     elif wargv.startsWith(commandPrefix): # Check for command
       commandArg = wargv.substr(commandSepIdx + 1)
@@ -80,6 +88,18 @@ when isMainModule:
         echo HelpText
       clArgs.add(wargv)
 
+  for vccversionItem in vccversionArg:
+    var vccversionValue: VccVersion
+    try:
+      vccversionValue = cast[VccVersion](parseInt(vccversionItem))
+    except ValueError:
+      continue
+    vcvarsallArg = discoverVccVcVarsAllPath(vccversionValue)
+    if vcvarsallArg.len > 0:
+      break
+  if vcvarsallArg.len < 1 and vccversionArg.len < 1:
+    vcvarsallArg = discoverVccVcVarsAllPath()
+
   var vcvars = vccVarsAll(vcvarsallArg, platformArg, sdkTypeArg, sdkVersionArg)
   if vcvars != nil:
     for vccEnvKey, vccEnvVal in vcvars: