mirror of
https://github.com/godotengine/godot.git
synced 2024-11-23 12:43:43 +00:00
Merge pull request #25803 from neikeq/yy
Windows: Default to system MSBuild and add VSCode hint path
This commit is contained in:
commit
9115c6ab15
@ -18,8 +18,6 @@ namespace GodotSharpTools.Build
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
private extern static string godot_icall_BuildInstance_get_MSBuildPath();
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
private extern static string godot_icall_BuildInstance_get_FrameworkPath();
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
private extern static string godot_icall_BuildInstance_get_MonoWindowsBinDir();
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
private extern static bool godot_icall_BuildInstance_get_UsingMonoMSBuildOnWindows();
|
||||
@ -34,11 +32,6 @@ namespace GodotSharpTools.Build
|
||||
return msbuildPath;
|
||||
}
|
||||
|
||||
private static string GetFrameworkPath()
|
||||
{
|
||||
return godot_icall_BuildInstance_get_FrameworkPath();
|
||||
}
|
||||
|
||||
private static string MonoWindowsBinDir
|
||||
{
|
||||
get
|
||||
@ -85,11 +78,6 @@ namespace GodotSharpTools.Build
|
||||
if (customProperties != null)
|
||||
customPropertiesList.AddRange(customProperties);
|
||||
|
||||
string frameworkPath = GetFrameworkPath();
|
||||
|
||||
if (!string.IsNullOrEmpty(frameworkPath))
|
||||
customPropertiesList.Add("FrameworkPathOverride=" + frameworkPath);
|
||||
|
||||
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
||||
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs);
|
||||
@ -145,11 +133,6 @@ namespace GodotSharpTools.Build
|
||||
if (customProperties != null)
|
||||
customPropertiesList.AddRange(customProperties);
|
||||
|
||||
string frameworkPath = GetFrameworkPath();
|
||||
|
||||
if (!string.IsNullOrEmpty(frameworkPath))
|
||||
customPropertiesList.Add("FrameworkPathOverride=" + frameworkPath);
|
||||
|
||||
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
||||
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs);
|
||||
|
@ -100,22 +100,24 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||
if (msbuild_tools_path.empty() || !FileAccess::exists(msbuild_tools_path)) {
|
||||
// Try to search it again if it wasn't found last time or if it was removed from its location
|
||||
msbuild_tools_path = MonoRegUtils::find_msbuild_tools_path();
|
||||
|
||||
if (msbuild_tools_path.empty()) {
|
||||
ERR_PRINTS("Cannot find executable for '" PROP_NAME_MSBUILD_VS "'. Tried with path: " + msbuild_tools_path);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (msbuild_tools_path.length()) {
|
||||
if (!msbuild_tools_path.ends_with("\\"))
|
||||
msbuild_tools_path += "\\";
|
||||
if (!msbuild_tools_path.ends_with("\\"))
|
||||
msbuild_tools_path += "\\";
|
||||
|
||||
return GDMonoMarshal::mono_string_from_godot(msbuild_tools_path + "MSBuild.exe");
|
||||
}
|
||||
|
||||
print_verbose("Cannot find executable for '" PROP_NAME_MSBUILD_VS "'. Trying with '" PROP_NAME_MSBUILD_MONO "'...");
|
||||
} // FALL THROUGH
|
||||
return GDMonoMarshal::mono_string_from_godot(msbuild_tools_path + "MSBuild.exe");
|
||||
} break;
|
||||
case GodotSharpBuilds::MSBUILD_MONO: {
|
||||
String msbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("msbuild.bat");
|
||||
|
||||
if (!FileAccess::exists(msbuild_path)) {
|
||||
WARN_PRINTS("Cannot find executable for '" PROP_NAME_MSBUILD_MONO "'. Tried with path: " + msbuild_path);
|
||||
ERR_PRINTS("Cannot find executable for '" PROP_NAME_MSBUILD_MONO "'. Tried with path: " + msbuild_path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return GDMonoMarshal::mono_string_from_godot(msbuild_path);
|
||||
@ -124,7 +126,8 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||
String xbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("xbuild.bat");
|
||||
|
||||
if (!FileAccess::exists(xbuild_path)) {
|
||||
WARN_PRINTS("Cannot find executable for '" PROP_NAME_XBUILD "'. Tried with path: " + xbuild_path);
|
||||
ERR_PRINTS("Cannot find executable for '" PROP_NAME_XBUILD "'. Tried with path: " + xbuild_path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return GDMonoMarshal::mono_string_from_godot(xbuild_path);
|
||||
@ -144,7 +147,7 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||
}
|
||||
|
||||
if (xbuild_path.empty()) {
|
||||
WARN_PRINT("Cannot find binary for '" PROP_NAME_XBUILD "'");
|
||||
ERR_PRINT("Cannot find binary for '" PROP_NAME_XBUILD "'");
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
@ -154,7 +157,7 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||
}
|
||||
|
||||
if (msbuild_path.empty()) {
|
||||
WARN_PRINT("Cannot find binary for '" PROP_NAME_MSBUILD_MONO "'");
|
||||
ERR_PRINT("Cannot find binary for '" PROP_NAME_MSBUILD_MONO "'");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -168,22 +171,6 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||
#endif
|
||||
}
|
||||
|
||||
MonoString *godot_icall_BuildInstance_get_FrameworkPath() {
|
||||
|
||||
#if defined(WINDOWS_ENABLED)
|
||||
const MonoRegInfo &mono_reg_info = GDMono::get_singleton()->get_mono_reg_info();
|
||||
if (mono_reg_info.assembly_dir.length()) {
|
||||
String framework_path = path_join(mono_reg_info.assembly_dir, "mono", "4.5");
|
||||
return GDMonoMarshal::mono_string_from_godot(framework_path);
|
||||
}
|
||||
|
||||
ERR_EXPLAIN("Cannot find Mono's assemblies directory in the registry");
|
||||
ERR_FAIL_V(NULL);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
MonoString *godot_icall_BuildInstance_get_MonoWindowsBinDir() {
|
||||
|
||||
#if defined(WINDOWS_ENABLED)
|
||||
@ -216,7 +203,6 @@ void GodotSharpBuilds::register_internal_calls() {
|
||||
|
||||
mono_add_internal_call("GodotSharpTools.Build.BuildSystem::godot_icall_BuildInstance_ExitCallback", (void *)godot_icall_BuildInstance_ExitCallback);
|
||||
mono_add_internal_call("GodotSharpTools.Build.BuildInstance::godot_icall_BuildInstance_get_MSBuildPath", (void *)godot_icall_BuildInstance_get_MSBuildPath);
|
||||
mono_add_internal_call("GodotSharpTools.Build.BuildInstance::godot_icall_BuildInstance_get_FrameworkPath", (void *)godot_icall_BuildInstance_get_FrameworkPath);
|
||||
mono_add_internal_call("GodotSharpTools.Build.BuildInstance::godot_icall_BuildInstance_get_MonoWindowsBinDir", (void *)godot_icall_BuildInstance_get_MonoWindowsBinDir);
|
||||
mono_add_internal_call("GodotSharpTools.Build.BuildInstance::godot_icall_BuildInstance_get_UsingMonoMSBuildOnWindows", (void *)godot_icall_BuildInstance_get_UsingMonoMSBuildOnWindows);
|
||||
}
|
||||
@ -459,7 +445,11 @@ GodotSharpBuilds::GodotSharpBuilds() {
|
||||
// Build tool settings
|
||||
EditorSettings *ed_settings = EditorSettings::get_singleton();
|
||||
|
||||
#ifdef WINDOWS_ENABLED
|
||||
EDITOR_DEF("mono/builds/build_tool", MSBUILD_VS);
|
||||
#else
|
||||
EDITOR_DEF("mono/builds/build_tool", MSBUILD_MONO);
|
||||
#endif
|
||||
|
||||
ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/builds/build_tool", PROPERTY_HINT_ENUM,
|
||||
PROP_NAME_MSBUILD_MONO
|
||||
|
@ -272,19 +272,50 @@ Error GodotSharpEditor::open_in_external_editor(const Ref<Script> &p_script, int
|
||||
static String vscode_path;
|
||||
|
||||
if (vscode_path.empty() || !FileAccess::exists(vscode_path)) {
|
||||
static List<String> vscode_name;
|
||||
vscode_name.push_back("code");
|
||||
vscode_name.push_back("code-oss");
|
||||
vscode_name.push_back("vscode");
|
||||
vscode_name.push_back("vscode-oss");
|
||||
vscode_name.push_back("visual-studio-code");
|
||||
vscode_name.push_back("visual-studio-code-oss");
|
||||
// Try to search it again if it wasn't found last time or if it was removed from its location
|
||||
for (int i = 0; i < vscode_name.size(); i++) {
|
||||
vscode_path = path_which(vscode_name[i]);
|
||||
if (!vscode_path.empty() || FileAccess::exists(vscode_path))
|
||||
break;
|
||||
bool found = false;
|
||||
|
||||
// TODO: Use initializer lists once C++11 is allowed
|
||||
|
||||
// Try with hint paths
|
||||
static Vector<String> hint_paths;
|
||||
#ifdef WINDOWS_ENABLED
|
||||
if (hint_paths.empty()) {
|
||||
hint_paths.push_back(OS::get_singleton()->get_environment("ProgramFiles") + "\\Microsoft VS Code\\Code.exe");
|
||||
if (sizeof(size_t) == 8) {
|
||||
hint_paths.push_back(OS::get_singleton()->get_environment("ProgramFiles(x86)") + "\\Microsoft VS Code\\Code.exe");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (int i = 0; i < hint_paths.size(); i++) {
|
||||
vscode_path = hint_paths[i];
|
||||
if (FileAccess::exists(vscode_path)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
static Vector<String> vscode_names;
|
||||
if (vscode_names.empty()) {
|
||||
vscode_names.push_back("code");
|
||||
vscode_names.push_back("code-oss");
|
||||
vscode_names.push_back("vscode");
|
||||
vscode_names.push_back("vscode-oss");
|
||||
vscode_names.push_back("visual-studio-code");
|
||||
vscode_names.push_back("visual-studio-code-oss");
|
||||
}
|
||||
for (int i = 0; i < vscode_names.size(); i++) {
|
||||
vscode_path = path_which(vscode_names[i]);
|
||||
if (!vscode_path.empty()) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
vscode_path.clear(); // Not found, clear so next time the empty() check is enough
|
||||
}
|
||||
|
||||
List<String> args;
|
||||
|
Loading…
Reference in New Issue
Block a user