From 72b1bfe395002488d694e53f50e02f8ae9fd3cfb Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 14 Feb 2013 13:33:24 +0100 Subject: [PATCH] Windows launcher: initial --- native/WinLauncher/.gitignore | 6 + native/WinLauncher/WinLauncher.sln | 20 ++ native/WinLauncher/WinLauncher/.gitignore | 3 + .../WinLauncher/WinLauncher/WinLauncher.cpp | 312 ++++++++++++++++++ native/WinLauncher/WinLauncher/WinLauncher.h | 3 + .../WinLauncher/WinLauncher/WinLauncher.ico | Bin 0 -> 23558 bytes native/WinLauncher/WinLauncher/WinLauncher.rc | Bin 0 -> 4998 bytes .../WinLauncher/WinLauncher.vcxproj | 100 ++++++ .../WinLauncher/WinLauncher.vcxproj.filters | 53 +++ native/WinLauncher/WinLauncher/resource.h | Bin 0 -> 2070 bytes native/WinLauncher/WinLauncher/small.ico | Bin 0 -> 23558 bytes native/WinLauncher/WinLauncher/stdafx.cpp | 8 + native/WinLauncher/WinLauncher/stdafx.h | 25 ++ native/WinLauncher/WinLauncher/targetver.h | 8 + 14 files changed, 538 insertions(+) create mode 100644 native/WinLauncher/.gitignore create mode 100644 native/WinLauncher/WinLauncher.sln create mode 100644 native/WinLauncher/WinLauncher/.gitignore create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.cpp create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.h create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.ico create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.rc create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.vcxproj create mode 100644 native/WinLauncher/WinLauncher/WinLauncher.vcxproj.filters create mode 100644 native/WinLauncher/WinLauncher/resource.h create mode 100644 native/WinLauncher/WinLauncher/small.ico create mode 100644 native/WinLauncher/WinLauncher/stdafx.cpp create mode 100644 native/WinLauncher/WinLauncher/stdafx.h create mode 100644 native/WinLauncher/WinLauncher/targetver.h diff --git a/native/WinLauncher/.gitignore b/native/WinLauncher/.gitignore new file mode 100644 index 000000000000..c8003381da80 --- /dev/null +++ b/native/WinLauncher/.gitignore @@ -0,0 +1,6 @@ +*.opensdf +*.suo +*.sdf +Debug +Release +ipch diff --git a/native/WinLauncher/WinLauncher.sln b/native/WinLauncher/WinLauncher.sln new file mode 100644 index 000000000000..e1e3593979a2 --- /dev/null +++ b/native/WinLauncher/WinLauncher.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinLauncher", "WinLauncher\WinLauncher.vcxproj", "{B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40}.Debug|Win32.ActiveCfg = Debug|Win32 + {B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40}.Debug|Win32.Build.0 = Debug|Win32 + {B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40}.Release|Win32.ActiveCfg = Release|Win32 + {B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/native/WinLauncher/WinLauncher/.gitignore b/native/WinLauncher/WinLauncher/.gitignore new file mode 100644 index 000000000000..febd967e9adb --- /dev/null +++ b/native/WinLauncher/WinLauncher/.gitignore @@ -0,0 +1,3 @@ +Debug +*.aps +*.vcxproj.user diff --git a/native/WinLauncher/WinLauncher/WinLauncher.cpp b/native/WinLauncher/WinLauncher/WinLauncher.cpp new file mode 100644 index 000000000000..d74e65f1c00d --- /dev/null +++ b/native/WinLauncher/WinLauncher/WinLauncher.cpp @@ -0,0 +1,312 @@ +/* +* Copyright 2000-2013 JetBrains s.r.o. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdafx.h" +#include "WinLauncher.h" + +typedef JNIIMPORT jint (JNICALL *JNI_createJavaVM)(JavaVM **pvm, JNIEnv **env, void *args); + +HINSTANCE hInst; // current instance +char jvmPath[_MAX_PATH]; +JavaVMOption* vmOptions = NULL; +int vmOptionCount = 0; +bool bServerJVM = false; +HMODULE hJVM = NULL; +JNI_createJavaVM pCreateJavaVM = NULL; +JavaVM* jvm = NULL; +JNIEnv* env = NULL; + +bool IsValidJRE(char* path) +{ + char dllPath[_MAX_PATH]; + strcpy_s(dllPath, path); + strcat_s(dllPath, "\\bin\\client\\jvm.dll"); + return GetFileAttributesA(dllPath) != INVALID_FILE_ATTRIBUTES; +} + +bool FindValidJVM(char* path) +{ + if (IsValidJRE(path)) + { + strcpy_s(jvmPath, _MAX_PATH-1, path); + return true; + } + char jrePath[_MAX_PATH]; + strcpy_s(jrePath, path); + if (jrePath[strlen(jrePath)-1] != '\\') + { + strcat_s(jrePath, "\\"); + } + strcat_s(jrePath, _MAX_PATH-1, "jre"); + if (IsValidJRE(jrePath)) + { + strcpy_s(jvmPath, jrePath); + return true; + } + return false; +} + +bool LocateJVM() +{ + char envVarName[_MAX_PATH]; + if (LoadStringA(hInst, IDS_JDK_ENV_VAR, envVarName, _MAX_PATH-1)) + { + char envVarValue[_MAX_PATH]; + if (GetEnvironmentVariableA(envVarName, envVarValue, _MAX_PATH-1)) + { + if (FindValidJVM(envVarValue)) + { + return true; + } + else + { + char buf[_MAX_PATH]; + sprintf_s(buf, "The environment variable %s (with the value of %s) does not point to a valid JVM installation", + envVarValue, jvmPath); + MessageBoxA(NULL, buf, "Error Launching IntelliJ Platform", MB_OK); + return false; + } + } + } + return false; +} + +void TrimLine(char* line) +{ + char *p = line + strlen(line) - 1; + if (p >= line && *p == '\n') + { + *p-- = '\0'; + } + while(p >= line && (*p == ' ' || *p == '\t')) + { + *p-- = 0; + } +} + +bool LoadVMOptionsFile(const TCHAR* path, std::vector& vmOptionLines) +{ + FILE *f = _tfopen(path, _T("rt")); + if (!f) return false; + + char line[_MAX_PATH]; + while(fgets(line, _MAX_PATH-1, f)) + { + TrimLine(line); + if (strcmp(line, "-server") == 0) + { + bServerJVM = true; + } + else if (strlen(line) > 0) + { + vmOptionLines.push_back(line); + } + } + fclose(f); + + return true; +} + +std::string FindToolsJar() +{ + std::string toolsJarPath = jvmPath; + size_t lastSlash = toolsJarPath.rfind('\\'); + if (lastSlash != std::string::npos) + { + toolsJarPath = toolsJarPath.substr(0, lastSlash+1); + toolsJarPath += "lib\\tools.jar"; + if (GetFileAttributesA(toolsJarPath.c_str()) != INVALID_FILE_ATTRIBUTES) + { + return toolsJarPath; + } + } + return ""; +} + +std::string BuildClassPath() +{ + char libDir[_MAX_PATH]; + GetCurrentDirectoryA(_MAX_PATH-1, libDir); + char* lastSlash = strrchr(libDir, '\\'); + strcpy(lastSlash+1, "lib\\"); + if (GetFileAttributesA(libDir) == INVALID_FILE_ATTRIBUTES) + { + return ""; + } + + char classpathLibs[_MAX_PATH]; + std::string result; + LoadStringA(hInst, IDS_CLASSPATH_LIBS, classpathLibs, _MAX_PATH-1); + char *pJarName = classpathLibs; + while(pJarName) + { + char *pNextJarName = strchr(pJarName, ';'); + if (pNextJarName) + { + *pNextJarName++ = '\0'; + } + if (result.size() > 0) + { + result += ";"; + } + result += libDir; + result += pJarName; + pJarName = pNextJarName; + } + + std::string toolsJar = FindToolsJar(); + if (toolsJar.size() > 0) + { + result += ";"; + result += toolsJar; + } + + return result; +} + +bool LoadVMOptions() +{ + TCHAR optionsFileName[_MAX_PATH]; + if (LoadString(hInst, IDS_VM_OPTIONS_PATH, optionsFileName, _MAX_PATH-1)) + { + TCHAR optionsFileNameExpanded[_MAX_PATH]; + ExpandEnvironmentStrings(optionsFileName, optionsFileNameExpanded, _MAX_PATH-1); + + std::vector vmOptionLines; + if (LoadVMOptionsFile(optionsFileNameExpanded, vmOptionLines)) + { + std::string classPath = BuildClassPath(); + if (classPath.size() == 0) return false; + std::string classPathArg("-Djava.class.path="); + classPathArg += classPath; + vmOptionLines.push_back(classPathArg); + + vmOptionCount = vmOptionLines.size(); + vmOptions = (JavaVMOption*) malloc(vmOptionCount * sizeof(JavaVMOption)); + for(int i=0; iFindClass(mainClassName); + if (!mainClass) + { + char buf[_MAX_PATH]; + sprintf(buf, "Could not find main class %s", mainClassName); + MessageBoxA(NULL, buf, "Error Launching IntelliJ Platform", MB_OK); + return false; + } + + jclass stringClass = env->FindClass("java/lang/String"); + jobjectArray args = env->NewObjectArray(0, stringClass, NULL); + jmethodID mainMethod = env->GetStaticMethodID(mainClass, "main", "([Ljava/lang/String;)V"); + if (!mainClass) + { + MessageBoxA(NULL, "Could not find main method", "Error Launching IntelliJ Platform", MB_OK); + return false; + } + + env->CallStaticVoidMethod(mainClass, mainMethod, args); + + return true; +} + +int APIENTRY _tWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + hInst = hInstance; + + if (!LocateJVM()) return 1; + if (!LoadVMOptions()) return 1; + if (!LoadJVMLibrary()) return 1; + if (!CreateJVM()) return 1; + if (!RunMainClass()) return 1; + + jvm->DestroyJavaVM(); + + return 0; +} + + + diff --git a/native/WinLauncher/WinLauncher/WinLauncher.h b/native/WinLauncher/WinLauncher/WinLauncher.h new file mode 100644 index 000000000000..d00d47e78850 --- /dev/null +++ b/native/WinLauncher/WinLauncher/WinLauncher.h @@ -0,0 +1,3 @@ +#pragma once + +#include "resource.h" diff --git a/native/WinLauncher/WinLauncher/WinLauncher.ico b/native/WinLauncher/WinLauncher/WinLauncher.ico new file mode 100644 index 0000000000000000000000000000000000000000..d551aa3aaf80adf9b7760e2eb8de95a5c3e53df6 GIT binary patch literal 23558 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 literal 0 HcmV?d00001 diff --git a/native/WinLauncher/WinLauncher/WinLauncher.vcxproj b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj new file mode 100644 index 000000000000..36d51ef6a27a --- /dev/null +++ b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj @@ -0,0 +1,100 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {B4C8D7ED-DA7A-4CD7-AEE6-3373A95FDD40} + Win32Proj + WinLauncher + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + true + C:\Java\jdk1.6.0_37\include;C:\Java\jdk1.6.0_37\include\win32;$(IncludePath) + + + false + C:\Java\jdk1.6.0_37\include;C:\Java\jdk1.6.0_37\include\win32;$(IncludePath) + + + + Use + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + + + + + Create + Create + + + + + + + + + + \ No newline at end of file diff --git a/native/WinLauncher/WinLauncher/WinLauncher.vcxproj.filters b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj.filters new file mode 100644 index 000000000000..ff46c65935f1 --- /dev/null +++ b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj.filters @@ -0,0 +1,53 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + Resource Files + + + Resource Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/native/WinLauncher/WinLauncher/resource.h b/native/WinLauncher/WinLauncher/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..520b2666dfda61fa9b336289093e4d18a697415e GIT binary patch literal 2070 zcmbuATW`}q5QXO%iT_}UM+70^Qg}?`6hdtiC5}saR`*2BNe9pMX86&LCTgRanq57bnff-p~U7OJN z>>aThxhM{>1$cW~=&NndtQ>g^LYFKI>0>;^AoUAz4$mRv=cSxOhkOjL38;s=t1Lo( zQHm_i?}_y(y{adnPdLS>ftPyZg#4wj9=doahw?WBKPKkotcCotl5+@#a+s1m<#9|a z$J_rA@~cwh0eHo=u}3Hy3HhiLS?As}%_ES)ePG8m+^dnrc}$#Dw?U&A>`x%%*QK0w z|NbW$Z%UDM*YXUWP-|Ug&2LJlhVz)}QiVx3_GhghJ+Zc9oa>TDea-B~siYKd?o@2) z=HD1g31{e?lyHTjc}}~&)35BpzVdI%+Kt1^^fyzw1?w|B51vD^7jv(D_)5uD)d{0h zBI55Ns2x`odq%A7vRXGRKrvMj=fqTs5il-N*i5Tbm)Q#v+Q~n~D~r|N3VR>5Zyz~X zN`CbcNxMdP=wp$>1k4X}-bP=G>!t`;ey*e?h6~$_F h-6XZTNar!h@}mq_aKl@+Gh2eCO%U`ET3X{t^HH literal 0 HcmV?d00001 diff --git a/native/WinLauncher/WinLauncher/small.ico b/native/WinLauncher/WinLauncher/small.ico new file mode 100644 index 0000000000000000000000000000000000000000..d551aa3aaf80adf9b7760e2eb8de95a5c3e53df6 GIT binary patch literal 23558 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 + +// C RunTime Header Files +#include +#include +#include +#include +#include + +#include + +#include + +// TODO: reference additional headers your program requires here diff --git a/native/WinLauncher/WinLauncher/targetver.h b/native/WinLauncher/WinLauncher/targetver.h new file mode 100644 index 000000000000..87c0086de751 --- /dev/null +++ b/native/WinLauncher/WinLauncher/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include