From 107fb0140a0de3c384fa8f37eb0f6e7cc8d682a6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 14 Sep 2010 12:59:26 +0400 Subject: [PATCH] search for Python interpreters in %PATH% (PY-1593) --- .../python/sdk/IronPythonSdkFlavor.java | 2 +- .../python/sdk/MacPythonSdkFlavor.java | 3 ++- .../jetbrains/python/sdk/PythonSdkFlavor.java | 2 +- .../python/sdk/UnixPythonSdkFlavor.java | 3 ++- .../python/sdk/WinPythonSdkFlavor.java | 26 ++++++++++++++----- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java index 92affd78210c..85ca9ed8d9f6 100644 --- a/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java @@ -18,7 +18,7 @@ public class IronPythonSdkFlavor extends PythonSdkFlavor { public static IronPythonSdkFlavor INSTANCE = new IronPythonSdkFlavor(); @Override - public List suggestHomePaths() { + public Collection suggestHomePaths() { List result = new ArrayList(); String root = System.getenv("ProgramFiles(x86)"); if (root == null) { diff --git a/python/src/com/jetbrains/python/sdk/MacPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/MacPythonSdkFlavor.java index 30c260462458..182f63dc0689 100644 --- a/python/src/com/jetbrains/python/sdk/MacPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/MacPythonSdkFlavor.java @@ -4,6 +4,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -16,7 +17,7 @@ public class MacPythonSdkFlavor extends PythonSdkFlavor { public static MacPythonSdkFlavor INSTANCE = new MacPythonSdkFlavor(); @Override - public List suggestHomePaths() { + public Collection suggestHomePaths() { List candidates = new ArrayList(); collectPythonInstallations("/Library/Frameworks/Python.framework/Versions", candidates); collectPythonInstallations("/System/Library/Frameworks/Python.framework/Versions", candidates); diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java index efbc00c38844..a8ebb1b63eba 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java @@ -14,7 +14,7 @@ import java.util.regex.Pattern; * @author yole */ public abstract class PythonSdkFlavor { - public List suggestHomePaths() { + public Collection suggestHomePaths() { return Collections.emptyList(); } diff --git a/python/src/com/jetbrains/python/sdk/UnixPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/UnixPythonSdkFlavor.java index c9d0163098e2..4037cbc71c6e 100644 --- a/python/src/com/jetbrains/python/sdk/UnixPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/UnixPythonSdkFlavor.java @@ -4,6 +4,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -16,7 +17,7 @@ public class UnixPythonSdkFlavor extends PythonSdkFlavor { public static UnixPythonSdkFlavor INSTANCE = new UnixPythonSdkFlavor(); @Override - public List suggestHomePaths() { + public Collection suggestHomePaths() { List candidates = new ArrayList(); VirtualFile rootDir = LocalFileSystem.getInstance().findFileByPath("/usr/bin"); if (rootDir != null) { diff --git a/python/src/com/jetbrains/python/sdk/WinPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/WinPythonSdkFlavor.java index bb0e95d3d2f2..5d9b7416973c 100644 --- a/python/src/com/jetbrains/python/sdk/WinPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/WinPythonSdkFlavor.java @@ -1,14 +1,13 @@ package com.jetbrains.python.sdk; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.encoding.EncodingManager; import org.jetbrains.annotations.NonNls; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.io.File; +import java.util.*; /** * @author yole @@ -22,14 +21,29 @@ public class WinPythonSdkFlavor extends PythonSdkFlavor { } @Override - public List suggestHomePaths() { - List candidates = new ArrayList(); + public Collection suggestHomePaths() { + Set candidates = new TreeSet(); findSubdirInstallations(candidates, "C:\\", PYTHON_STR, "python.exe"); findSubdirInstallations(candidates, "C:\\Program Files\\", PYTHON_STR, "python.exe"); findSubdirInstallations(candidates, "C:\\", "jython", "jython.bat"); + findCandidatesFromPath(candidates, "python.exe"); + findCandidatesFromPath(candidates, "jython.bat"); return candidates; } + private static void findCandidatesFromPath(Collection candidates, String exeName) { + final String path = System.getenv("PATH"); + for (String pathEntry : StringUtil.split(path, ";")) { + if (pathEntry.startsWith("\"") && pathEntry.endsWith("\"")) { + pathEntry = pathEntry.substring(1, pathEntry.length()-2); + } + File f = new File(pathEntry, exeName); + if (f.exists()) { + candidates.add(f.getPath()); + } + } + } + private static void findSubdirInstallations(Collection candidates, String rootDir, String dir_prefix, String exe_name) { VirtualFile rootVDir = LocalFileSystem.getInstance().findFileByPath(rootDir); if (rootVDir != null) {