diff options
-rw-r--r-- | tools/vccenv.nim | 67 | ||||
-rw-r--r-- | tools/vccenv/vccenv.nim | 58 | ||||
-rw-r--r-- | tools/vccenv/vccexe.nim (renamed from tools/vccexe.nim) | 7 | ||||
-rw-r--r-- | tools/vccenv/vcclinkerexe.nim (renamed from tools/vcclinkerexe.nim) | 8 |
4 files changed, 65 insertions, 75 deletions
diff --git a/tools/vccenv.nim b/tools/vccenv.nim deleted file mode 100644 index 4017368a0..000000000 --- a/tools/vccenv.nim +++ /dev/null @@ -1,67 +0,0 @@ -import strtabs, os, osproc, streams, strutils - -const - comSpecEnvKey = "ComSpec" - vsComnToolsEnvKeys = [ - "VS140COMNTOOLS", - "VS130COMNTOOLS", - "VS120COMNTOOLS", - "VS110COMNTOOLS", - "VS100COMNTOOLS", - "VS90COMNTOOLS" - ] - vcvarsallRelativePath = joinPath("..", "..", "VC", "vcvarsall") - -proc getVsComnToolsPath*(): TaintedString = - for vsComnToolsEnvKey in vsComnToolsEnvKeys: - if existsEnv vsComnToolsEnvKey: - let vsComnToolsEnvVal = getEnv vsComnToolsEnvKey - if (not vsComnToolsEnvVal.isNil) and (vsComnToolsEnvVal.len > 0): - return vsComnToolsEnvVal - return nil - -proc getVccEnv*(platform: string, windowsStoreSdk: bool = false, sdkVersion: string = nil): StringTableRef = - var comSpecCommandString: TaintedString - if existsEnv comSpecEnvKey: - comSpecCommandString = getEnv comSpecEnvKey - else: - comSpecCommandString = "cmd" - - let vsComnToolsPath = getVsComnToolsPath() - if (isNil vsComnToolsPath) or (vsComnToolsPath.len < 1): - return nil - let vcvarsallPath = expandFilename joinPath(vsComnToolsPath, vcvarsallRelativePath) - - var vcvarsallArgs: seq[string] = @[] - if (not isNil platform) and (platform.len > 0): - vcvarsallArgs.add(platform) - if windowsStoreSdk: - vcvarsallArgs.add("store") - if (not isNil sdkVersion) and (sdkVersion.len > 0): - vcvarsallArgs.add(sdkVersion) - var vcvarsallArgString: string - if vcvarsallArgs.len > 0: - vcvarsallArgString = vcvarsallArgs.join(" ") - else: - vcvarsallArgString = nil - - var vcvarsallCommandString: string - if (not isNil vcvarsallArgString) and (vcvarsallArgString.len > 0): - vcvarsallCommandString = "\"$1\" $2" % [ vcvarsallPath, vcvarsallArgString ] - else: - vcvarsallCommandString = vcvarsallPath - - let vcvarsallExecCommand = "\"$1\" /C \"$2 && SET\"" % [ comSpecCommandString, vcvarsallCommandString ] - when defined(release): - let vccvarsallOptions = { poEvalCommand, poDemon } - else: - let vccvarsallOptions = { poEchoCmd, poEvalCommand, poDemon } - let vcvarsallStdOut = execProcess(vcvarsallExecCommand, options = vccvarsallOptions) - let vcvarsallEnv = newStringTable(modeCaseInsensitive) - for vcvarsallEnvLine in vcvarsallStdOut.splitLines: - let vcvarsallEqualsIndex = vcvarsallEnvLine.find('=') - if vcvarsallEqualsIndex > 0: - let vcvarsallEnvKey = vcvarsallEnvLine[0..(vcvarsallEqualsIndex - 1)] - let vcvarsallEnvVal = vcvarsallEnvLine[(vcvarsallEqualsIndex + 1)..(vcvarsallEnvLine.len - 1)] - vcvarsallEnv[vcvarsallEnvKey] = vcvarsallEnvVal - return vcvarsallEnv diff --git a/tools/vccenv/vccenv.nim b/tools/vccenv/vccenv.nim new file mode 100644 index 000000000..a335efd10 --- /dev/null +++ b/tools/vccenv/vccenv.nim @@ -0,0 +1,58 @@ +import strtabs, os, osproc, streams, strutils + +const + comSpecEnvKey = "ComSpec" + vsComnToolsEnvKeys = [ + "VS140COMNTOOLS", + "VS130COMNTOOLS", + "VS120COMNTOOLS", + "VS110COMNTOOLS", + "VS100COMNTOOLS", + "VS90COMNTOOLS" + ] + vcvarsallRelativePath = joinPath("..", "..", "VC", "vcvarsall") + +proc getVsComnToolsPath*(): TaintedString = + for vsComnToolsEnvKey in vsComnToolsEnvKeys: + let vsComnToolsEnvVal = getEnv vsComnToolsEnvKey + if vsComnToolsEnvVal.len > 0: + return vsComnToolsEnvVal + +proc getVccEnv*(platform: string, windowsStoreSdk: bool = false, + sdkVersion: string = nil): StringTableRef = + var comSpecCommandString = getEnv comSpecEnvKey + if comSpecCommandString.len == 0: + comSpecCommandString = "cmd" + + let vsComnToolsPath = getVsComnToolsPath() + if vsComnToolsPath.len < 1: + return nil + let vcvarsallPath = expandFilename joinPath(vsComnToolsPath, vcvarsallRelativePath) + + var vcvarsallArgs: seq[string] = @[] + if platform.len > 0: + vcvarsallArgs.add(platform) + if windowsStoreSdk: + vcvarsallArgs.add("store") + if sdkVersion.len > 0: + vcvarsallArgs.add(sdkVersion) + let vcvarsallArgString = vcvarsallArgs.join(" ") + + var vcvarsallCommandString: string + if vcvarsallArgString.len > 0: + vcvarsallCommandString = "\"$1\" $2" % [vcvarsallPath, vcvarsallArgString] + else: + vcvarsallCommandString = vcvarsallPath + + let vcvarsallExecCommand = "\"$1\" /C \"$2 && SET\"" % + [comSpecCommandString, vcvarsallCommandString] + when defined(release): + let vccvarsallOptions = {poEvalCommand, poDemon} + else: + let vccvarsallOptions = {poEchoCmd, poEvalCommand, poDemon} + let vcvarsallStdOut = execProcess(vcvarsallExecCommand, options = vccvarsallOptions) + result = newStringTable(modeCaseInsensitive) + for line in vcvarsallStdOut.splitLines: + let idx = line.find('=') + if idx > 0: + result[line[0..(idx - 1)]] = line[(idx + 1)..(line.len - 1)] diff --git a/tools/vccexe.nim b/tools/vccenv/vccexe.nim index a62def77c..48ae8c8da 100644 --- a/tools/vccexe.nim +++ b/tools/vccenv/vccexe.nim @@ -1,9 +1,9 @@ import strtabs, os, osproc, vccenv when defined(release): - let vccOptions = { poParentStreams } + let vccOptions = {poParentStreams} else: - let vccOptions = { poEchoCmd, poParentStreams } + let vccOptions = {poEchoCmd, poParentStreams} when isMainModule: var vccEnvStrTab: StringTableRef = nil @@ -17,9 +17,8 @@ when isMainModule: for vccEnvKey, vccEnvVal in vccEnvStrTab: putEnv(vccEnvKey, vccEnvVal) let vccProcess = startProcess( - "cl".addFileExt(ExeExt), + "cl.exe", args = commandLineParams(), options = vccOptions ) quit vccProcess.waitForExit() - \ No newline at end of file diff --git a/tools/vcclinkerexe.nim b/tools/vccenv/vcclinkerexe.nim index 2598d6312..51c778f38 100644 --- a/tools/vcclinkerexe.nim +++ b/tools/vccenv/vcclinkerexe.nim @@ -1,9 +1,9 @@ import strtabs, os, osproc, vccenv when defined(release): - let vccOptions = { poParentStreams } + let vccOptions = {poParentStreams} else: - let vccOptions = { poEchoCmd, poParentStreams } + let vccOptions = {poEchoCmd, poParentStreams} when isMainModule: var vccEnvStrTab: StringTableRef = nil @@ -17,9 +17,9 @@ when isMainModule: for vccEnvKey, vccEnvVal in vccEnvStrTab: putEnv(vccEnvKey, vccEnvVal) let vccProcess = startProcess( - "link".addFileExt(ExeExt), + "link.exe", args = commandLineParams(), options = vccOptions ) quit vccProcess.waitForExit() - + |