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)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
private extern static string godot_icall_BuildInstance_get_MSBuildPath();
|
private extern static string godot_icall_BuildInstance_get_MSBuildPath();
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
private extern static string godot_icall_BuildInstance_get_FrameworkPath();
|
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
|
||||||
private extern static string godot_icall_BuildInstance_get_MonoWindowsBinDir();
|
private extern static string godot_icall_BuildInstance_get_MonoWindowsBinDir();
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
private extern static bool godot_icall_BuildInstance_get_UsingMonoMSBuildOnWindows();
|
private extern static bool godot_icall_BuildInstance_get_UsingMonoMSBuildOnWindows();
|
||||||
|
@ -34,11 +32,6 @@ namespace GodotSharpTools.Build
|
||||||
return msbuildPath;
|
return msbuildPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetFrameworkPath()
|
|
||||||
{
|
|
||||||
return godot_icall_BuildInstance_get_FrameworkPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string MonoWindowsBinDir
|
private static string MonoWindowsBinDir
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -85,11 +78,6 @@ namespace GodotSharpTools.Build
|
||||||
if (customProperties != null)
|
if (customProperties != null)
|
||||||
customPropertiesList.AddRange(customProperties);
|
customPropertiesList.AddRange(customProperties);
|
||||||
|
|
||||||
string frameworkPath = GetFrameworkPath();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(frameworkPath))
|
|
||||||
customPropertiesList.Add("FrameworkPathOverride=" + frameworkPath);
|
|
||||||
|
|
||||||
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
||||||
|
|
||||||
ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs);
|
ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs);
|
||||||
|
@ -145,11 +133,6 @@ namespace GodotSharpTools.Build
|
||||||
if (customProperties != null)
|
if (customProperties != null)
|
||||||
customPropertiesList.AddRange(customProperties);
|
customPropertiesList.AddRange(customProperties);
|
||||||
|
|
||||||
string frameworkPath = GetFrameworkPath();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(frameworkPath))
|
|
||||||
customPropertiesList.Add("FrameworkPathOverride=" + frameworkPath);
|
|
||||||
|
|
||||||
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customPropertiesList);
|
||||||
|
|
||||||
ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs);
|
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)) {
|
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
|
// 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();
|
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("\\"))
|
||||||
if (!msbuild_tools_path.ends_with("\\"))
|
msbuild_tools_path += "\\";
|
||||||
msbuild_tools_path += "\\";
|
|
||||||
|
|
||||||
return GDMonoMarshal::mono_string_from_godot(msbuild_tools_path + "MSBuild.exe");
|
return GDMonoMarshal::mono_string_from_godot(msbuild_tools_path + "MSBuild.exe");
|
||||||
}
|
} break;
|
||||||
|
|
||||||
print_verbose("Cannot find executable for '" PROP_NAME_MSBUILD_VS "'. Trying with '" PROP_NAME_MSBUILD_MONO "'...");
|
|
||||||
} // FALL THROUGH
|
|
||||||
case GodotSharpBuilds::MSBUILD_MONO: {
|
case GodotSharpBuilds::MSBUILD_MONO: {
|
||||||
String msbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("msbuild.bat");
|
String msbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("msbuild.bat");
|
||||||
|
|
||||||
if (!FileAccess::exists(msbuild_path)) {
|
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);
|
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");
|
String xbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("xbuild.bat");
|
||||||
|
|
||||||
if (!FileAccess::exists(xbuild_path)) {
|
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);
|
return GDMonoMarshal::mono_string_from_godot(xbuild_path);
|
||||||
|
@ -144,7 +147,7 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xbuild_path.empty()) {
|
if (xbuild_path.empty()) {
|
||||||
WARN_PRINT("Cannot find binary for '" PROP_NAME_XBUILD "'");
|
ERR_PRINT("Cannot find binary for '" PROP_NAME_XBUILD "'");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -154,7 +157,7 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msbuild_path.empty()) {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,22 +171,6 @@ MonoString *godot_icall_BuildInstance_get_MSBuildPath() {
|
||||||
#endif
|
#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() {
|
MonoString *godot_icall_BuildInstance_get_MonoWindowsBinDir() {
|
||||||
|
|
||||||
#if defined(WINDOWS_ENABLED)
|
#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.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_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_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);
|
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
|
// Build tool settings
|
||||||
EditorSettings *ed_settings = EditorSettings::get_singleton();
|
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);
|
EDITOR_DEF("mono/builds/build_tool", MSBUILD_MONO);
|
||||||
|
#endif
|
||||||
|
|
||||||
ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/builds/build_tool", PROPERTY_HINT_ENUM,
|
ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/builds/build_tool", PROPERTY_HINT_ENUM,
|
||||||
PROP_NAME_MSBUILD_MONO
|
PROP_NAME_MSBUILD_MONO
|
||||||
|
|
|
@ -272,19 +272,50 @@ Error GodotSharpEditor::open_in_external_editor(const Ref<Script> &p_script, int
|
||||||
static String vscode_path;
|
static String vscode_path;
|
||||||
|
|
||||||
if (vscode_path.empty() || !FileAccess::exists(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
|
// 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++) {
|
bool found = false;
|
||||||
vscode_path = path_which(vscode_name[i]);
|
|
||||||
if (!vscode_path.empty() || FileAccess::exists(vscode_path))
|
// TODO: Use initializer lists once C++11 is allowed
|
||||||
break;
|
|
||||||
|
// 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;
|
List<String> args;
|
||||||
|
|
Loading…
Reference in New Issue