[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openbsd-ports
Subject:    Re: godot - diff to build with C#/mono support
From:       Thomas Frohwein <tfrohwein () fastmail ! com>
Date:       2023-08-31 0:57:00
Message-ID: ZO_lXG8mXRRr2Q9R () frankenputer
[Download RAW message or body]

1-week *ping*

On Thu, Aug 24, 2023 at 11:47:06PM -0400, Thomas Frohwein wrote:
> Hi,
> 
> This is a bigger diff that (finally) enables the mono module for Godot
> and allows running Godot projects with C# instead of Godot's own
> GDScript language in the editor. As this has been a bigger endeavor,
> I'm structuring this email a little more.
> 
> Background
> ----------
> 
> Upstream has a convoluted process for building Godot with mono [1],
> basically in order to generate the C# glue. This process never
> worked in ports tree, in part because a full godot binary needs to be
> built first, then invoked with --generate-mono-glue which seems to
> require openting an X11 window as part of the process.
> 
> Methods
> -------
> 
> I managed to build godot with mono module enabled by using pre-generated
> mono glue code (see distfiles) that is plugged in. The reason why
> upstream doesn't provide the generated code is likely that they want to
> allow for systems with different mono and/or dotnet versions which
> might generate different results.
> 
> This also needs devel/msbuild, and a number of patches to teach Godot
> where to find the files that it expects to be relative to its binary
> which might be in any user directory.
> 
> Results
> -------
> 
> The port becomes a bit more complex. If built with mono, both bin/godot
> and bin/godot-tools need to find the C# assemblies (mostly in the
> GodotSharp directory) in order to launch. Therefore, I split the
> assemblies out into a third package godot-sharp, meant to supply those
> dependencies to -main and -tools.
> 
> Non-C# projects including commercially distributed games based on
> GDScript should continue to run as before (tested by me with Brotato).
> I haven't found an example of a commercial game using C# with Godot to
> test this with.
> 
> The editor invokes msbuild for C# projects before running them. I
> tested this with 2 of the demo projects for Godot 3.5 from [2],
> "Dodge the Creeps with C#" and "2.5D Demo with C#". They work, but a
> 1-line modification of a file in the user's nuget directory is needed
> which I added to README-tools. This is likely because
> TargetFrameworkFallbackSearchPaths isn't supported by our mono or
> msbuild at this point. With this small modification, I can build and
> run the Godot C# demo projects as expected.
> 
> The addition of the library suffix for libmonosgen-2.0 in
> mono_configure.py is a bit fragile, as it may need manual updating
> should there be a bump in the mono library. I haven't figured out a
> better approach so far.
> 
> Summary
> -------
> 
> This adds C#/mono support, but this will likely some more refinement.
> 
> This effort deals with some weirdnesses that arise from how Godot games
> are generally distributed, which is similar to other portable game
> development and distribution frameworks/engines, like FNA, MonoGame,
> Unity, LibGDX etc. The core game logic and the assets exist in platform
> independent code. The developer ships the game with that plus all the
> platform-specific native binaries and libraries together. It seems that
> all the officially supported operating systems (Windows, Mac, Linux)
> adhere to being able to run such binaries and libraries even if they
> were compiled 10 years ago.
> 
> As we don't do that on OpenBSD, things like file locations need to be
> adjusted for a system install, as opposed to the locally contained
> approach. For an eventual godot4 port, it looks like mono won't do
> anymore and an eventual port of dotnet would be needed.
> 
> In the future, we might be able with some more refinement to get rid of
> at least some of the files in pkg/PLIST-sharp by pointing godot to the
> correct location of the mono and msbuild files.
> 
> The best way forward is probably to try to work with upstream on a new
> install and runtime approach that uses binary and libraries installed in
> conventional system directories. I have plans to propose such an scons
> modality upstream after familiarizing myself with where Godot4 is at now.
> 
> comments and ok's are welcome; given the complexity there might still
> be benefit in adding this early to the port and working out some
> refinements in-tree, with also more opportunity to hear of
> unanticipated bugs.
> 
> [1] https://docs.godotengine.org/en/3.5/development/compiling/compiling_with_mono.html
>  [2] https://github.com/godotengine/godot-demo-projects

Index: Makefile
===================================================================
RCS file: /cvs/ports/games/godot/Makefile,v
retrieving revision 1.49
diff -u -p -r1.49 Makefile
--- Makefile	14 Aug 2023 12:40:50 -0000	1.49
+++ Makefile	25 Aug 2023 02:44:30 -0000
@@ -2,12 +2,19 @@ BROKEN-powerpc =	fails at runtime, the U
 
 COMMENT-main =	2D and 3D game engine
 COMMENT-tools=	2D and 3D game engine (with tools)
+COMMENT-sharp=	glue for mono/C# module of Godot
+
+ONLY_FOR_ARCHS =	${MONO_ARCHS}
+
+# WXNEEDED and NOBTCFI needed for module_mono_enabled=yes
+USE_WXNEEDED =	Yes
+USE_NOBTCFI =	Yes
 
 V =		3.5.2
 GODOTSTEAM_V =	v3.20
 DISTNAME =	godot-${V}-stable
 PKGNAME =	godot-${V}
-REVISION =	5
+REVISION =	6
 
 CATEGORIES =	games
 
@@ -18,7 +25,7 @@ MAINTAINER =	Omar Polo <op@openbsd.org>
 # MIT
 PERMIT_PACKAGE =	Yes
 
-MULTI_PACKAGES =	-main -tools
+MULTI_PACKAGES =	-main -tools -sharp
 
 WANTLIB += ${COMPILER_LIBCXX} BulletCollision BulletDynamics BulletSoftBody
 WANTLIB += GL LinearMath X11 X11-xcb Xau Xcursor Xdmcp Xext Xfixes
@@ -28,23 +35,30 @@ WANTLIB += opusfile pcre2-32 sharpyuv sn
 WANTLIB += usbhid vorbis vorbisfile vpx webp xcb xcb-dri2 xcb-glx
 WANTLIB += zstd
 
-WANTLIB-main =	${WANTLIB} Xss
-WANTLIB-tools =	${WANTLIB}
+# mono-native is dlopened when using the mono/C#/godot-sharp parts
+WANTLIB-main =	${WANTLIB} Xss mono-native
+WANTLIB-tools =	${WANTLIB} mono-native
+
+# needed by files in share/godot/GodotSharp/Mono/lib/
+WANTLIB-sharp = execinfo m pthread z
 
 # C++14
 COMPILER =	base-clang ports-gcc
 
 MASTER_SITES =	https://downloads.tuxfamily.org/godotengine/${V}/
 MASTER_SITES0 =	https://github.com/CoaguCo-Industries/GodotSteam/archive/refs/tags/
+MASTER_SITES1 =	https://thfr.info/distfiles/
 DISTFILES =     ${DISTNAME}${EXTRACT_SUFX} \
-		${GODOTSTEAM_V}.tar.gz:0
+		${GODOTSTEAM_V}.tar.gz:0 \
+		godot-${V}-mono-glue.tar.gz:1 \
+		godot-${V}-nuget-packages.tar.xz:1
 EXTRACT_SUFX =	.tar.xz
 DIST_SUBDIR =   ${PKGNAME}
 
 MODULES =	devel/scons
 
-# Building with module_mono_enabled requires msbuild and to fix the
-# sharedlib_ext in modules/mono/config.py to '.so.1.0'
+MODSCONS_ENV +=		HOME=${NUGETHOME} \
+			NUGET_PACKAGES=${NUGETHOME}/packages
 MODSCONS_FLAGS =	CC="${CC}" \
 			CXX="${CXX}" \
 			CFLAGS="${CFLAGS}" \
@@ -64,6 +78,9 @@ MODSCONS_FLAGS =	CC="${CC}" \
 			builtin_zlib=no \
 			builtin_zstd=no \
 			custom_modules=${WRKSRC}/godotsteam \
+			module_mono_enabled=yes \
+			mono_prefix=${LOCALBASE} \
+			mono_static=yes \
 			progress=no \
 			pulseaudio=no \
 			verbose=yes \
@@ -80,6 +97,8 @@ MODSCONS_FLAGS += builtin_freetype=yes
 MODSCONS_FLAGS +=	module_raycast_enabled="false"
 .endif
 
+BUILD_DEPENDS =		devel/msbuild
+
 LIB_DEPENDS =		archivers/zstd \
 			audio/libvorbis \
 			audio/musepack \
@@ -89,12 +108,18 @@ LIB_DEPENDS =		archivers/zstd \
 			devel/pcre2 \
 			games/goldberg_emulator \
 			graphics/libwebp \
+			lang/mono \
 			multimedia/libtheora \
 			multimedia/libvpx \
 			net/enet \
 			security/polarssl
+LIB_DEPENDS-sharp =
 
-RUN_DEPENDS-tools =	devel/desktop-file-utils
+RUN_DEPENDS-sharp =
+RUN_DEPENDS-main =	games/godot,-sharp
+RUN_DEPENDS-tools =	devel/desktop-file-utils \
+			devel/msbuild \
+			games/godot,-sharp
 
 DEBUG_PACKAGES =	${BUILD_PACKAGES}
 NO_TEST =		Yes
@@ -116,30 +141,55 @@ WANTLIB +=     atomic
 .endif
 
 CFLAGS +=	-I${LOCALBASE}/include/goldberg_emulator
+CXXFLAGS +=	-I${LOCALBASE}/include/goldberg_emulator
+
+GLUEDIR =	${WRKDIR}/godot-${V}-mono-glue
+NUGETHOME =	${WRKDIR}/nugethome
+SUBST_VARS +=	NUGETHOME
 
-# copy over to allow patching GodotSteam
 post-extract:
+	@# install backends from FILESDIR
 	cp -R	${FILESDIR}/sndio ${WRKDIST}/drivers
 	cp	${FILESDIR}/ujoy/joypad_openbsd.{cpp,h} \
 		${WRKDIST}/platform/x11/
+	@# move GodotSteam into WRKSRC to allow patching
 	mv	${WRKDIR}/GodotSteam-${GODOTSTEAM_V:S/v//} ${WRKSRC}/godotsteam
+	@# set up nuget package location
+	mkdir -p	${NUGETHOME}
+	mv	${WRKDIR}/godot-${V}-nuget-packages ${NUGETHOME}/packages
+	@# move pre-generated mono glue into place
+	mv	${GLUEDIR}/mono_glue.gen.cpp ${WRKSRC}/modules/mono/glue/
+	mv	${GLUEDIR}/GodotSharp/GodotSharp/Generated \
+		${WRKSRC}/modules/mono/glue/GodotSharp/GodotSharp/
+	mv	${GLUEDIR}/GodotSharp/GodotSharpEditor/Generated \
+		${WRKSRC}/modules/mono/glue/GodotSharp/GodotSharpEditor/
 
 pre-configure:
 	${SUBST_CMD} ${WRKSRC}/misc/dist/linux/*.desktop
+	${SUBST_CMD} ${WRKSRC}/modules/mono/build_scripts/solution_builder.py
+	${SUBST_CMD} ${WRKSRC}/modules/mono/godotsharp_dirs.cpp
 
 do-build:
+	@# Export Template build
 	@${MODSCONS_BUILD_TARGET} tools=no  target=release \
 		CXXFLAGS="${CXXFLAGS} -Wno-deprecated-register -DSUSPEND_SCREENSAVER=1" \
 		LINKFLAGS="${LDFLAGS} -lintl -lmpcdec -lusbhid -lXss"
+	@# Editor build
 	@${MODSCONS_BUILD_TARGET} tools=yes target=release_debug \
 		CXXFLAGS="${CXXFLAGS} -Wno-deprecated-register" \
 		LINKFLAGS="${LDFLAGS} -lintl -lmpcdec -lusbhid"
 
 do-install:
-	${INSTALL_PROGRAM} ${WRKBUILD}/bin/godot.x11.opt.${BINSUFFIX} \
+	@# Export Template files
+	@${INSTALL_PROGRAM} ${WRKBUILD}/bin/godot.x11.opt.${BINSUFFIX}.mono \
 		${PREFIX}/bin/godot
-	${INSTALL_PROGRAM} ${WRKBUILD}/bin/godot.x11.opt.tools.${BINSUFFIX} \
+	@# Editor files
+	${INSTALL_PROGRAM} ${WRKBUILD}/bin/godot.x11.opt.tools.${BINSUFFIX}.mono \
 		${PREFIX}/bin/godot-tools
+	@# GodotSharp files
+	${INSTALL_DATA_DIR} ${PREFIX}/share/godot
+	cp -R	${WRKBUILD}/bin/GodotSharp ${PREFIX}/share/godot/
+	@# Rest: man pages, icons, desktop integration
 	${INSTALL_MAN_DIR} ${PREFIX}/man/man6
 	${INSTALL_MAN} ${WRKSRC}/misc/dist/linux/godot.6 \
 		${PREFIX}/man/man6
Index: distinfo
===================================================================
RCS file: /cvs/ports/games/godot/distinfo,v
retrieving revision 1.20
diff -u -p -r1.20 distinfo
--- distinfo	11 Aug 2023 12:36:10 -0000	1.20
+++ distinfo	25 Aug 2023 02:44:30 -0000
@@ -1,4 +1,8 @@
+SHA256 (godot-3.5.2/godot-3.5.2-mono-glue.tar.gz) = \
ezUneQt2JzlsQPF4FvSCcNtJiYbdb3NEY4Lvjj/gz64= +SHA256 \
(godot-3.5.2/godot-3.5.2-nuget-packages.tar.xz) = \
RXlTjB1IgjZEP2ZJY05xoGQv8XTRKHxwPaMmiNdduQE=  SHA256 \
(godot-3.5.2/godot-3.5.2-stable.tar.xz) = \
tDodaynqJby6+86/e6CEMmGqEjfic5SUU4oiANjHvmI=  SHA256 (godot-3.5.2/v3.20.tar.gz) = \
FoAl3iZ+1CWwIPXwJZ9S7q3QMn//RslYT06tXkc38QU= +SIZE \
(godot-3.5.2/godot-3.5.2-mono-glue.tar.gz) = 1094618 +SIZE \
(godot-3.5.2/godot-3.5.2-nuget-packages.tar.xz) = 55742184  SIZE \
(godot-3.5.2/godot-3.5.2-stable.tar.xz) = 24047432  SIZE (godot-3.5.2/v3.20.tar.gz) = \
                253832
Index: patches/patch-modules_mono_build_scripts_mono_configure_py
===================================================================
RCS file: patches/patch-modules_mono_build_scripts_mono_configure_py
diff -N patches/patch-modules_mono_build_scripts_mono_configure_py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_build_scripts_mono_configure_py	25 Aug 2023 02:44:30 \
-0000 @@ -0,0 +1,51 @@
+include a suffix argument for find_file_in_dir
+use suffix argument to look for libmonosgen-2.0.so.1.0
+disable librt/libdl
+
+Index: modules/mono/build_scripts/mono_configure.py
+--- modules/mono/build_scripts/mono_configure.py.orig
++++ modules/mono/build_scripts/mono_configure.py
+@@ -31,15 +31,16 @@ def find_name_in_dir_files(directory, names, prefixes=
+     return ""
+ 
+ 
+-def find_file_in_dir(directory, names, prefixes=[""], extensions=[""]):
+-    for extension in extensions:
+-        if extension and not extension.startswith("."):
+-            extension = "." + extension
+-        for prefix in prefixes:
+-            for curname in names:
+-                filename = prefix + curname + extension
+-                if os.path.isfile(os.path.join(directory, filename)):
+-                    return filename
++def find_file_in_dir(directory, names, prefixes=[""], extensions=[""], \
suffix=[""]): ++    for sufx in suffix:
++        for extension in extensions:
++            if extension and not extension.startswith("."):
++                extension = "." + extension
++            for prefix in prefixes:
++                for curname in names:
++                    filename = prefix + curname + extension + sufx
++                    if os.path.isfile(os.path.join(directory, filename)):
++                        return filename
+     return ""
+ 
+ 
+@@ -335,7 +336,7 @@ def configure(env, env_mono):
+             elif is_javascript:
+                 env.Append(LIBS=["m", "rt", "dl", "pthread"])
+             else:
+-                env.Append(LIBS=["m", "rt", "dl", "pthread"])
++                env.Append(LIBS=["m", "pthread"])
+ 
+             if not mono_static:
+                 mono_so_file = find_file_in_dir(
+@@ -358,7 +359,7 @@ def configure(env, env_mono):
+             tmpenv.ParseConfig("pkg-config monosgen-2 --libs-only-L")
+ 
+             for hint_dir in tmpenv["LIBPATH"]:
+-                file_found = find_file_in_dir(hint_dir, mono_lib_names, \
prefixes=["lib"], extensions=[sharedlib_ext]) ++                file_found = \
find_file_in_dir(hint_dir, mono_lib_names, prefixes=["lib"], \
extensions=[sharedlib_ext], suffix=[".1.0"]) +                 if file_found:
+                     mono_lib_path = hint_dir
+                     mono_so_file = file_found
Index: patches/patch-modules_mono_build_scripts_solution_builder_py
===================================================================
RCS file: patches/patch-modules_mono_build_scripts_solution_builder_py
diff -N patches/patch-modules_mono_build_scripts_solution_builder_py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_build_scripts_solution_builder_py	25 Aug 2023 02:44:30 \
-0000 @@ -0,0 +1,28 @@
+point msbuild to the prepared nuget packages dir
+supply NUGETHOME as home dir
+
+Index: modules/mono/build_scripts/solution_builder.py
+--- modules/mono/build_scripts/solution_builder.py.orig
++++ modules/mono/build_scripts/solution_builder.py
+@@ -89,11 +89,10 @@ def run_command(command, args, env_override=None, name
+     def cmd_args_to_str(cmd_args):
+         return " ".join([arg if not " " in arg else '"%s"' % arg for arg in \
cmd_args]) + 
+-    args = [command] + args
++    args = ["env", "HOME=${NUGETHOME}"] + [command] + args
+ 
+     if name is None:
+         name = os.path.basename(command)
+-
+     if verbose:
+         print("Running '%s': %s" % (name, cmd_args_to_str(args)))
+ 
+@@ -142,7 +141,7 @@ def build_solution(env, solution_path, build_config, e
+ 
+     # Build solution
+ 
+-    msbuild_args += [solution_path, "/restore", "/t:Build", "/p:Configuration=" + \
build_config] ++    msbuild_args += [solution_path, "/restore", \
"/p:RestorePackagesPath=${NUGETHOME}/packages", "/t:Build", "/p:Configuration=" + \
build_config] +     msbuild_args += extra_msbuild_args
+ 
+     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, \
                name="msbuild")
Index: patches/patch-modules_mono_csharp_script_cpp
===================================================================
RCS file: patches/patch-modules_mono_csharp_script_cpp
diff -N patches/patch-modules_mono_csharp_script_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_csharp_script_cpp	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1,28 @@
+fix error: cannot initialize return object of type 'bool' with
+an rvalue of type 'nullptr_t'
+
+Index: modules/mono/csharp_script.cpp
+--- modules/mono/csharp_script.cpp.orig
++++ modules/mono/csharp_script.cpp
+@@ -2310,7 +2310,7 @@ bool CSharpScript::_update_exports(PlaceHolderScriptIn
+ 
+ 			GDMonoMethod *ctor = script_class->get_method(CACHED_STRING_NAME(dotctor), 0);
+ 
+-			ERR_FAIL_NULL_V_MSG(ctor, NULL,
++			ERR_FAIL_NULL_V_MSG(ctor, false,
+ 					"Cannot construct temporary MonoObject because the class does not define a \
parameterless constructor: '" + get_path() + "'."); + 
+ 			MonoException *ctor_exc = NULL;
+@@ -2891,10 +2891,10 @@ bool CSharpScript::can_instance() const {
+ 	if (extra_cond && !script_class) {
+ 		if (GDMono::get_singleton()->get_project_assembly() == NULL) {
+ 			// The project assembly is not loaded
+-			ERR_FAIL_V_MSG(NULL, "Cannot instance script because the project assembly is not \
loaded. Script: '" + get_path() + "'."); ++			ERR_FAIL_V_MSG(false, "Cannot instance \
script because the project assembly is not loaded. Script: '" + get_path() + "'."); + \
} else { + 			// The project assembly is loaded, but the class could not found
+-			ERR_FAIL_V_MSG(NULL, "Cannot instance script because the class '" + name + "' \
could not be found. Script: '" + get_path() + "'."); ++			ERR_FAIL_V_MSG(false, \
"Cannot instance script because the class '" + name + "' could not be found. Script: \
'" + get_path() + "'."); + 		}
+ 	}
+ 
Index: patches/patch-modules_mono_glue_GodotSharp_GodotSharp_GodotSharp_csproj
===================================================================
RCS file: patches/patch-modules_mono_glue_GodotSharp_GodotSharp_GodotSharp_csproj
diff -N patches/patch-modules_mono_glue_GodotSharp_GodotSharp_GodotSharp_csproj
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_glue_GodotSharp_GodotSharp_GodotSharp_csproj	25 Aug \
2023 02:44:30 -0000 @@ -0,0 +1,13 @@
+needs LangVersion 7.1 for 'default literal'; otherwise error CS8107
+
+Index: modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj
+--- modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj.orig
++++ modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj
+@@ -7,6 +7,7 @@
+     <TargetFramework>netstandard2.0</TargetFramework>
+     <DocumentationFile>$(OutputPath)/$(AssemblyName).xml</DocumentationFile>
+     <EnableDefaultItems>false</EnableDefaultItems>
++    <LangVersion>7.1</LangVersion>
+   </PropertyGroup>
+   <PropertyGroup>
+     <DefineConstants>$(DefineConstants);GODOT</DefineConstants>
Index: patches/patch-modules_mono_godotsharp_dirs_cpp
===================================================================
RCS file: patches/patch-modules_mono_godotsharp_dirs_cpp
diff -N patches/patch-modules_mono_godotsharp_dirs_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_godotsharp_dirs_cpp	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1,93 @@
+fix paths for our mono and godot install dirs
+make data_editor_prebuilt_api_dir() available also when !TOOLS_ENABLED
+
+Index: modules/mono/godotsharp_dirs.cpp
+--- modules/mono/godotsharp_dirs.cpp.orig
++++ modules/mono/godotsharp_dirs.cpp
+@@ -97,6 +97,8 @@ class _GodotSharpDirs { (public)
+ 	String res_temp_assemblies_dir;
+ 	String mono_user_dir;
+ 	String mono_logs_dir;
++	String data_editor_tools_dir;
++	String data_editor_prebuilt_api_dir;
+ 
+ #ifdef TOOLS_ENABLED
+ 	String mono_solutions_dir;
+@@ -106,8 +108,6 @@ class _GodotSharpDirs { (public)
+ 	String sln_filepath;
+ 	String csproj_filepath;
+ 
+-	String data_editor_tools_dir;
+-	String data_editor_prebuilt_api_dir;
+ #else
+ 	// Equivalent of res_assemblies_dir, but in the data directory rather than in \
'res://'. + 	// Only defined on export templates. Used when exporting assemblies \
outside of PCKs. +@@ -177,20 +177,20 @@ class _GodotSharpDirs { (public)
+ #endif
+ 
+ 		String exe_dir = OS::get_singleton()->get_executable_path().get_base_dir();
++		String share_dir = "${LOCALBASE}/share/godot";
+ 
+-#ifdef TOOLS_ENABLED
+-
+-		String data_dir_root = exe_dir.plus_file("GodotSharp");
++		String data_dir_root = share_dir.plus_file("GodotSharp");
+ 		data_editor_tools_dir = data_dir_root.plus_file("Tools");
+ 		data_editor_prebuilt_api_dir = data_dir_root.plus_file("Api");
+ 
+ 		String data_mono_root_dir = data_dir_root.plus_file("Mono");
+-		data_mono_etc_dir = data_mono_root_dir.plus_file("etc");
++		data_mono_etc_dir = "${SYSCONFDIR}";
++#ifdef TOOLS_ENABLED
+ 
+ #ifdef ANDROID_ENABLED
+ 		data_mono_lib_dir = gdmono::android::support::get_app_native_lib_dir();
+ #else
+-		data_mono_lib_dir = data_mono_root_dir.plus_file("lib");
++		data_mono_lib_dir = "${LOCALBASE}/lib";
+ #endif
+ 
+ #ifdef WINDOWS_ENABLED
+@@ -214,6 +214,7 @@ class _GodotSharpDirs { (public)
+ 
+ #else
+ 
++		/*
+ 		String appname = \
ProjectSettings::get_singleton()->get("application/config/name"); + 		String \
appname_safe = OS::get_singleton()->get_safe_dir_name(appname); + 		String \
data_dir_root = exe_dir.plus_file("data_" + appname_safe); +@@ -223,11 +224,12 @@ \
class _GodotSharpDirs { (public) + 
+ 		String data_mono_root_dir = data_dir_root.plus_file("Mono");
+ 		data_mono_etc_dir = data_mono_root_dir.plus_file("etc");
++		*/
+ 
+ #ifdef ANDROID_ENABLED
+ 		data_mono_lib_dir = gdmono::android::support::get_app_native_lib_dir();
+ #else
+-		data_mono_lib_dir = data_mono_root_dir.plus_file("lib");
++		data_mono_lib_dir = "${LOCALBASE}/lib";
+ 		data_game_assemblies_dir = data_dir_root.plus_file("Assemblies");
+ #endif
+ 
+@@ -299,6 +301,10 @@ String get_mono_logs_dir() {
+ 	return _GodotSharpDirs::get_singleton().mono_logs_dir;
+ }
+ 
++String get_data_editor_prebuilt_api_dir() {
++	return _GodotSharpDirs::get_singleton().data_editor_prebuilt_api_dir;
++}
++
+ #ifdef TOOLS_ENABLED
+ String get_mono_solutions_dir() {
+ 	return _GodotSharpDirs::get_singleton().mono_solutions_dir;
+@@ -324,9 +330,6 @@ String get_data_editor_tools_dir() {
+ 	return _GodotSharpDirs::get_singleton().data_editor_tools_dir;
+ }
+ 
+-String get_data_editor_prebuilt_api_dir() {
+-	return _GodotSharpDirs::get_singleton().data_editor_prebuilt_api_dir;
+-}
+ #else
+ String get_data_game_assemblies_dir() {
+ 	return _GodotSharpDirs::get_singleton().data_game_assemblies_dir;
Index: patches/patch-modules_mono_godotsharp_dirs_h
===================================================================
RCS file: patches/patch-modules_mono_godotsharp_dirs_h
diff -N patches/patch-modules_mono_godotsharp_dirs_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_godotsharp_dirs_h	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1,23 @@
+make get_data_editor_prebuilt_api_dir() available for !TOOLS_ENABLED
+build
+
+Index: modules/mono/godotsharp_dirs.h
+--- modules/mono/godotsharp_dirs.h.orig
++++ modules/mono/godotsharp_dirs.h
+@@ -47,6 +47,8 @@ String get_res_temp_assemblies_dir();
+ String get_mono_user_dir();
+ String get_mono_logs_dir();
+ 
++String get_data_editor_prebuilt_api_dir();
++
+ #ifdef TOOLS_ENABLED
+ String get_mono_solutions_dir();
+ String get_build_logs_dir();
+@@ -56,7 +58,6 @@ String get_project_sln_path();
+ String get_project_csproj_path();
+ 
+ String get_data_editor_tools_dir();
+-String get_data_editor_prebuilt_api_dir();
+ #else
+ String get_data_game_assemblies_dir();
+ #endif
Index: patches/patch-modules_mono_mono_gd_gd_mono_cpp
===================================================================
RCS file: patches/patch-modules_mono_mono_gd_gd_mono_cpp
diff -N patches/patch-modules_mono_mono_gd_gd_mono_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_mono_mono_gd_gd_mono_cpp	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1,21 @@
+for _load_core_api_assembly, use the same load_assembly_from() approach for
+TOOLS_ENABLED also if !TOOLS_ENABLED
+
+Index: modules/mono/mono_gd/gd_mono.cpp
+--- modules/mono/mono_gd/gd_mono.cpp.orig
++++ modules/mono/mono_gd/gd_mono.cpp
+@@ -830,7 +830,13 @@ bool GDMono::_load_core_api_assembly(LoadedApiAssembly
+ 	bool success = FileAccess::exists(assembly_path) &&
+ 			load_assembly_from(CORE_API_ASSEMBLY_NAME, assembly_path, \
&r_loaded_api_assembly.assembly, p_refonly); + #else
+-	bool success = load_assembly(CORE_API_ASSEMBLY_NAME, \
&r_loaded_api_assembly.assembly, p_refonly); ++	// non-editor builds don't have Main \
namespace ++	String assembly_dir = \
GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(p_config); ++
++	String assembly_path = assembly_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll");
++
++	bool success = FileAccess::exists(assembly_path) &&
++			load_assembly_from(CORE_API_ASSEMBLY_NAME, assembly_path, \
&r_loaded_api_assembly.assembly, p_refonly); + #endif
+ 
+ 	if (success) {
Index: pkg/DESCR-sharp
===================================================================
RCS file: pkg/DESCR-sharp
diff -N pkg/DESCR-sharp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pkg/DESCR-sharp	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1 @@
+C# glue for using Godot with mono/C#
Index: pkg/PLIST-sharp
===================================================================
RCS file: pkg/PLIST-sharp
diff -N pkg/PLIST-sharp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pkg/PLIST-sharp	25 Aug 2023 02:44:30 -0000
@@ -0,0 +1,360 @@
+share/godot/
+share/godot/GodotSharp/
+share/godot/GodotSharp/Api/
+share/godot/GodotSharp/Api/Debug/
+share/godot/GodotSharp/Api/Debug/GodotSharp.dll
+share/godot/GodotSharp/Api/Debug/GodotSharp.pdb
+share/godot/GodotSharp/Api/Debug/GodotSharp.xml
+share/godot/GodotSharp/Api/Debug/GodotSharpEditor.dll
+share/godot/GodotSharp/Api/Debug/GodotSharpEditor.pdb
+share/godot/GodotSharp/Api/Debug/GodotSharpEditor.xml
+share/godot/GodotSharp/Api/Release/
+share/godot/GodotSharp/Api/Release/GodotSharp.dll
+share/godot/GodotSharp/Api/Release/GodotSharp.pdb
+share/godot/GodotSharp/Api/Release/GodotSharp.xml
+share/godot/GodotSharp/Api/Release/GodotSharpEditor.dll
+share/godot/GodotSharp/Api/Release/GodotSharpEditor.pdb
+share/godot/GodotSharp/Api/Release/GodotSharpEditor.xml
+share/godot/GodotSharp/Mono/
+share/godot/GodotSharp/Mono/etc/
+share/godot/GodotSharp/Mono/etc/mono/
+share/godot/GodotSharp/Mono/etc/mono/2.0/
+share/godot/GodotSharp/Mono/etc/mono/2.0/Browsers/
+share/godot/GodotSharp/Mono/etc/mono/2.0/Browsers/Compat.browser
+share/godot/GodotSharp/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx
+share/godot/GodotSharp/Mono/etc/mono/2.0/machine.config
+share/godot/GodotSharp/Mono/etc/mono/2.0/settings.map
+share/godot/GodotSharp/Mono/etc/mono/2.0/web.config
+share/godot/GodotSharp/Mono/etc/mono/4.0/
+share/godot/GodotSharp/Mono/etc/mono/4.0/Browsers/
+share/godot/GodotSharp/Mono/etc/mono/4.0/Browsers/Compat.browser
+share/godot/GodotSharp/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx
+share/godot/GodotSharp/Mono/etc/mono/4.0/machine.config
+share/godot/GodotSharp/Mono/etc/mono/4.0/settings.map
+share/godot/GodotSharp/Mono/etc/mono/4.0/web.config
+share/godot/GodotSharp/Mono/etc/mono/4.5/
+share/godot/GodotSharp/Mono/etc/mono/4.5/Browsers/
+share/godot/GodotSharp/Mono/etc/mono/4.5/Browsers/Compat.browser
+share/godot/GodotSharp/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx
+share/godot/GodotSharp/Mono/etc/mono/4.5/machine.config
+share/godot/GodotSharp/Mono/etc/mono/4.5/settings.map
+share/godot/GodotSharp/Mono/etc/mono/4.5/web.config
+share/godot/GodotSharp/Mono/etc/mono/browscap.ini
+share/godot/GodotSharp/Mono/etc/mono/config
+share/godot/GodotSharp/Mono/etc/mono/mconfig/
+share/godot/GodotSharp/Mono/etc/mono/mconfig/config.xml
+share/godot/GodotSharp/Mono/lib/
+@so share/godot/GodotSharp/Mono/lib/libMonoPosixHelper.so
+@so share/godot/GodotSharp/Mono/lib/libMonoSupportW.so
+@so share/godot/GodotSharp/Mono/lib/libmono-btls-shared.so
+share/godot/GodotSharp/Mono/lib/mono/
+share/godot/GodotSharp/Mono/lib/mono/4.5/
+share/godot/GodotSharp/Mono/lib/mono/4.5/Accessibility.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Commons.Xml.Relaxng.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/CustomMarshalers.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.AccessControl.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.AppContext.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Collections.Concurrent.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Collections.NonGeneric.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Collections.Specialized.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Collections.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ComponentModel.Annotations.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ComponentModel.EventBasedAsync.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ComponentModel.Primitives.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ComponentModel.TypeConverter.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ComponentModel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Console.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Data.Common.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Data.SqlClient.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.Contracts.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.Debug.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.FileVersionInfo.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.Process.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.StackTrace.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.TextWriterTraceListener.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tools.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceEvent.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceSource.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tracing.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Drawing.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Dynamic.Runtime.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Globalization.Calendars.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Globalization.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Globalization.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.Compression.ZipFile.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.AccessControl.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.DriveInfo.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Watcher.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.IsolatedStorage.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.MemoryMappedFiles.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.Pipes.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.UnmanagedMemoryStream.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.IO.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Linq.Expressions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Linq.Parallel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Linq.Queryable.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Linq.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.AuthenticationManager.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Cache.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Http.Rtc.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.HttpListener.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Mail.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.NameResolution.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.NetworkInformation.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Ping.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Requests.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Security.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.ServicePoint.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Sockets.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.Utilities.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.WebHeaderCollection.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.Client.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ObjectModel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.ILGeneration.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.Lightweight.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.TypeExtensions.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Reflection.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Resources.Reader.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Resources.ReaderWriter.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Resources.ResourceManager.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Resources.Writer.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.CompilerServices.VisualC.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Handles.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.RuntimeInformation.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.WindowsRuntime.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Numerics.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Formatters.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Json.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Primitives.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Xml.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Runtime.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.AccessControl.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Claims.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Algorithms.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Csp.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.DeriveBytes.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encoding.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.Aes.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDsa.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.Algorithms.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Primitives.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.ProtectedData.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RSA.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RandomNumberGenerator.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.X509Certificates.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Principal.Windows.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.Principal.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Security.SecureString.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceModel.Duplex.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceModel.Http.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceModel.NetTcp.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceModel.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceModel.Security.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ServiceProcess.ServiceController.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Text.Encoding.CodePages.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Text.Encoding.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Text.Encoding.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Text.RegularExpressions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.AccessControl.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.Overlapped.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.Parallel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.Thread.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.ThreadPool.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.Timer.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Threading.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.ValueTuple.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.ReaderWriter.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.XDocument.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.XPath.XDocument.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.XPath.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.XmlDocument.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.XmlSerializer.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/System.Xml.Xsl.Primitives.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Facades/netstandard.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.CJK.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.MidEast.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.Other.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.Rare.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.West.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/I18N.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/IBM.Data.DB2.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/ICSharpCode.SharpZipLib.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Build.Engine.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Build.Framework.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Build.Tasks.v4.0.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Build.Utilities.v4.0.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Build.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CSharp.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.Scripting.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.Scripting.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.VisualBasic.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.VisualC.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Microsoft.Web.Infrastructure.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Btls.Interface.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.CSharp.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Cairo.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.CodeContracts.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.CompilerServices.SymbolWriter.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Data.Sqlite.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Data.Tds.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Debugger.Soft.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Http.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Management.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Messaging.RabbitMQ.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Messaging.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Parallel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Posix.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Profiler.Log.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Security.Win32.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Security.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Simd.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.Tasklets.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.WebBrowser.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Mono.XBuild.Tasks.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/Novell.Directory.Ldap.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/PEAPI.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/RabbitMQ.Client.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/SMDiagnostics.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Collections.Immutable.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Configuration.Install.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Configuration.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Core.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.Entity.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.Linq.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.OracleClient.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.Services.Client.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.Services.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Data.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Deployment.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Design.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.DirectoryServices.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Drawing.Design.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Drawing.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Dynamic.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.EnterpriseServices.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.IO.Compression.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.IdentityModel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Json.Microsoft.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Json.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Management.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Memory.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Messaging.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Net.Http.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Net.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Numerics.Vectors.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Numerics.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Core.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Debugger.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Experimental.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Linq.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Providers.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reflection.Context.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Reflection.Metadata.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.Caching.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.CompilerServices.Unsafe.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.Remoting.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll
 +share/godot/GodotSharp/Mono/lib/mono/4.5/System.Runtime.Serialization.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Security.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.Web.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceModel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.ServiceProcess.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Threading.Tasks.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Transactions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Abstractions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.DynamicData.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Extensions.Design.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Extensions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Http.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Mobile.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Mvc.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Razor.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Routing.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.Services.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.WebPages.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Web.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Windows.Forms.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Windows.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Workflow.Activities.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Workflow.Runtime.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Xaml.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Xml.Linq.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Xml.Serialization.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.Xml.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/System.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/WebMatrix.Data.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/WindowsBase.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/cscompmgd.dll
+share/godot/GodotSharp/Mono/lib/mono/4.5/mscorlib.dll
+share/godot/GodotSharp/Tools/
+share/godot/GodotSharp/Tools/GodotTools.BuildLogger.dll
+share/godot/GodotSharp/Tools/GodotTools.BuildLogger.pdb
+share/godot/GodotSharp/Tools/GodotTools.Core.dll
+share/godot/GodotSharp/Tools/GodotTools.Core.pdb
+share/godot/GodotSharp/Tools/GodotTools.IdeMessaging.dll
+share/godot/GodotSharp/Tools/GodotTools.ProjectEditor.dll
+share/godot/GodotSharp/Tools/GodotTools.ProjectEditor.pdb
+share/godot/GodotSharp/Tools/GodotTools.dll
+share/godot/GodotSharp/Tools/GodotTools.pdb
+share/godot/GodotSharp/Tools/MSBuild.exe
+share/godot/GodotSharp/Tools/Microsoft.Build.Framework.dll
+share/godot/GodotSharp/Tools/Microsoft.Build.dll
+share/godot/GodotSharp/Tools/Microsoft.VisualStudio.Setup.Configuration.Interop.dll
+share/godot/GodotSharp/Tools/Mono.Cecil.Mdb.dll
+share/godot/GodotSharp/Tools/Mono.Cecil.Pdb.dll
+share/godot/GodotSharp/Tools/Mono.Cecil.Rocks.dll
+share/godot/GodotSharp/Tools/Mono.Cecil.dll
+share/godot/GodotSharp/Tools/Newtonsoft.Json.dll
+share/godot/GodotSharp/Tools/Semver.dll
+share/godot/GodotSharp/Tools/System.Buffers.dll
+share/godot/GodotSharp/Tools/System.Collections.Immutable.dll
+share/godot/GodotSharp/Tools/System.Memory.dll
+share/godot/GodotSharp/Tools/System.Numerics.Vectors.dll
+share/godot/GodotSharp/Tools/System.Runtime.CompilerServices.Unsafe.dll
+share/godot/GodotSharp/Tools/System.Threading.Tasks.Dataflow.dll
Index: pkg/README-tools
===================================================================
RCS file: /cvs/ports/games/godot/pkg/README-tools,v
retrieving revision 1.1
diff -u -p -r1.1 README-tools
--- pkg/README-tools	28 Apr 2022 22:18:01 -0000	1.1
+++ pkg/README-tools	25 Aug 2023 02:44:30 -0000
@@ -2,6 +2,18 @@
 | Running ${PKGSTEM} on OpenBSD
 +-------------------------------------------------------------------------------
 
+Using MSBuild/C#/Mono
+=====================
+
+MSBuild is used by Godot to compile the assemblies for C# projects. In order
+for it to run without error, you need to remove the following line from
+~/.nuget/packages/godot.net.sdk/3.3.0/Sdk/Sdk.targets:
+
+	TargetFrameworkFallbackSearchPaths="$(TargetFrameworkFallbackSearchPaths)"
+
+If the file doesn't exist, it hasn't been installed yet. You may need to run a
+build with MSBuild in Godot first before the file is created.
+
 Modules
 =======
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic