diff options
author | Ionen Wolkens <ionen@gentoo.org> | 2023-02-21 17:01:43 -0500 |
---|---|---|
committer | Ionen Wolkens <ionen@gentoo.org> | 2023-02-22 03:44:46 -0500 |
commit | 18f7a56819a8998c0e1a025f1efc23ee42a8c028 (patch) | |
tree | ba89b25eed836a3c3bb1a1d06aa097549d74a304 /dev-games | |
parent | dev-lisp/abcl: add 1.9.1 (diff) | |
download | gentoo-18f7a56819a8998c0e1a025f1efc23ee42a8c028.tar.gz gentoo-18f7a56819a8998c0e1a025f1efc23ee42a8c028.tar.bz2 gentoo-18f7a56819a8998c0e1a025f1efc23ee42a8c028.zip |
dev-games/godot: add 4.0_rc3
This introduces the "use_sowrap" option which allows not only to
unbundle linuxbsd_headers (dbus, fontconfig, etc..), but also
properly link with everything rather than do dlopen hacks. So we
disable it, and this brings back USE flags for these rather than
optfeatures. However need to keep an eye on it, if libraries are
not found then it silently disables features rather than fail with
the option enabled.
Can also get rid of a few workarounds (most header symlinks, icu
and recast bit in scons patch), seems upstream did some reviewing
for the unbundling options in general.
Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
Diffstat (limited to 'dev-games')
-rw-r--r-- | dev-games/godot/Manifest | 1 | ||||
-rw-r--r-- | dev-games/godot/files/godot-4.0_rc3-scons.patch | 15 | ||||
-rw-r--r-- | dev-games/godot/godot-4.0_rc3.ebuild | 234 | ||||
-rw-r--r-- | dev-games/godot/metadata.xml | 1 |
4 files changed, 251 insertions, 0 deletions
diff --git a/dev-games/godot/Manifest b/dev-games/godot/Manifest index 27ef6eb38c2f..813045e92311 100644 --- a/dev-games/godot/Manifest +++ b/dev-games/godot/Manifest @@ -1,2 +1,3 @@ DIST godot-3.5.1-stable.tar.xz 24153448 BLAKE2B 9d61276a2d82ef4f4487ec1046b7fa58f2b3626640b2db25c1f98c3f8e2ff40eddcf943fd9ffaaf6814fbafbbe7ef1d3f642d77af953b87731cff570ac3a5473 SHA512 59e5ca88534f542562971efb83b76561705f9ca8761311f01b4453857e7ae046c17cadd0d5ca6f6f56e262b5031294a8b9ad970fa6ffc95e1a6a1e1bae48d55f DIST godot-4.0-rc2.tar.xz 29105476 BLAKE2B be30da3909ee881ed929747d97232ad1356b15d0bdb0f5ea07fedc6de300a776ffac4e156134218322ccc4b6e2d4ae457cf53ee72a2da0df645e98fb957e773f SHA512 5d36ca7018ed2963e92a0917a6310f787ab807f47a302f11b6c09ffd60e4e98800aef6957345feb61f49a623eb1993abf601669cd7b7511a5b1d974b129b11c3 +DIST godot-4.0-rc3.tar.xz 29301840 BLAKE2B d981240f117839a05c00871b0e019c08e1f6136cea4935ae5028dbd06c16a6f34f7464309f44c1c0bebd982179cad092b4eb36529a412ccfcc27277fca5f3268 SHA512 4d5702b472e0ab52a86c7c47069ba08a8fe2c40d6b4437842c0610fe7e1d139d348ad521967ef844eb0442f78122864d97fab5a99fd21ec40e6b987c2af96c44 diff --git a/dev-games/godot/files/godot-4.0_rc3-scons.patch b/dev-games/godot/files/godot-4.0_rc3-scons.patch new file mode 100644 index 000000000000..682e1510ac94 --- /dev/null +++ b/dev-games/godot/files/godot-4.0_rc3-scons.patch @@ -0,0 +1,15 @@ +--- a/SConstruct ++++ b/SConstruct +@@ -241,2 +241,3 @@ + opts.Add("CC", "C compiler") ++opts.Add("AR", "Archiver") + opts.Add("LINK", "Linker") +@@ -569,8 +570,2 @@ + env.Append(CCFLAGS=["-g2"]) +- else: +- if methods.using_clang(env) and not methods.is_vanilla_clang(env): +- # Apple Clang, its linker doesn't like -s. +- env.Append(LINKFLAGS=["-Wl,-S", "-Wl,-x", "-Wl,-dead_strip"]) +- else: +- env.Append(LINKFLAGS=["-s"]) + diff --git a/dev-games/godot/godot-4.0_rc3.ebuild b/dev-games/godot/godot-4.0_rc3.ebuild new file mode 100644 index 000000000000..584b6bf6273e --- /dev/null +++ b/dev-games/godot/godot-4.0_rc3.ebuild @@ -0,0 +1,234 @@ +# Copyright 2022-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{9..11} ) +inherit bash-completion-r1 desktop python-any-r1 scons-utils toolchain-funcs xdg + +MY_P="${PN}-$(ver_rs 2 -)" + +DESCRIPTION="Multi-platform 2D and 3D game engine with a feature-rich editor" +HOMEPAGE="https://godotengine.org/" +SRC_URI="https://downloads.tuxfamily.org/godotengine/$(ver_rs 2 /)/${MY_P}.tar.xz" +S="${WORKDIR}/${MY_P}" + +LICENSE=" + MIT + Apache-2.0 BSD Boost-1.0 CC0-1.0 Unlicense ZLIB + gui? ( CC-BY-4.0 ) tools? ( OFL-1.1 )" +SLOT="4" +KEYWORDS="~amd64" +# Enable roughly same as upstream by default so it works as expected, +# except raycast (tools-only heavy dependency), and deprecated. +IUSE=" + alsa +dbus debug deprecated +fontconfig +gui pulseaudio raycast + +runner speech test +theora +tools +udev +upnp +vulkan +webp" +# tests need more figuring out, they are still somewhat new and volatile +RESTRICT="test" + +# dlopen: libglvnd +RDEPEND=" + app-arch/zstd:= + dev-games/recastnavigation:= + dev-libs/icu:= + dev-libs/libpcre2:=[pcre32] + media-libs/freetype[brotli,harfbuzz] + media-libs/harfbuzz:=[icu] + media-libs/libogg + media-libs/libpng:= + media-libs/libvorbis + <net-libs/mbedtls-3:= + net-libs/wslay + sys-libs/zlib:= + alsa? ( media-libs/alsa-lib ) + dbus? ( sys-apps/dbus ) + fontconfig? ( media-libs/fontconfig ) + gui? ( + media-libs/libglvnd + x11-libs/libX11 + x11-libs/libXcursor + x11-libs/libXext + x11-libs/libXi + x11-libs/libXinerama + x11-libs/libXrandr + x11-libs/libXrender + x11-libs/libxkbcommon + tools? ( raycast? ( media-libs/embree:3 ) ) + vulkan? ( media-libs/vulkan-loader[X] ) + ) + pulseaudio? ( media-libs/libpulse ) + speech? ( app-accessibility/speech-dispatcher ) + theora? ( media-libs/libtheora ) + tools? ( app-misc/ca-certificates ) + udev? ( virtual/udev ) + upnp? ( net-libs/miniupnpc:= ) + webp? ( media-libs/libwebp:= )" +DEPEND=" + ${RDEPEND} + gui? ( x11-base/xorg-proto ) + tools? ( test? ( dev-cpp/doctest ) )" +BDEPEND="virtual/pkgconfig" + +PATCHES=( + "${FILESDIR}"/${PN}-4.0_beta3-headless-header.patch + "${FILESDIR}"/${PN}-4.0_rc2-musl.patch + "${FILESDIR}"/${PN}-4.0_rc2-gcc13.patch + "${FILESDIR}"/${PN}-4.0_rc3-scons.patch +) + +src_prepare() { + default + + sed -i "1,5s/ godot/&${SLOT}/i" misc/dist/linux/godot.6 || die + sed -i "/id/s/Godot/&${SLOT}/" misc/dist/linux/org.godotengine.Godot.appdata.xml || die + sed -e "s/=godot/&${SLOT}/" -e "/^Name=/s/$/ ${SLOT}/" \ + -i misc/dist/linux/org.godotengine.Godot.desktop || die + + sed -i "s|pkg-config |$(tc-getPKG_CONFIG) |" platform/linuxbsd/detect.py || die + + # use of builtin_ switches can be messy (see below), delete to be sure + local unbundle=( + doctest embree freetype graphite harfbuzz icu4c libogg + libpng libtheora libvorbis libwebp linuxbsd_headers mbedtls + miniupnpc pcre2 recastnavigation volk wslay zlib zstd + # certs: unused by generated header, but scons panics if not found + ) + rm -r "${unbundle[@]/#/thirdparty/}" || die + + ln -s "${ESYSROOT}"/usr/include/doctest thirdparty/ || die +} + +src_compile() { + local -x GODOT_VERSION_STATUS=$(ver_cut 3-4) # for dev versions only + local -x BUILD_NAME=gentoo # replaces "custom_build" in version string + + local esconsargs=( + AR="$(tc-getAR)" CC="$(tc-getCC)" CXX="$(tc-getCXX)" + + progress=no + verbose=yes + + use_sowrap=no + + alsa=$(usex alsa) + dbus=$(usex dbus) + deprecated=$(usex deprecated) + fontconfig=$(usex fontconfig) + opengl3=$(usex gui) + pulseaudio=$(usex pulseaudio) + speechd=$(usex speech) + udev=$(usex udev) + use_volk=no # unnecessary when linking directly to libvulkan + vulkan=$(usex gui $(usex vulkan)) + x11=$(usex gui) + + system_certs_path="${EPREFIX}"/etc/ssl/certs/ca-certificates.crt + + # platform/*/detect.py uses builtin_* switches to check if need + # to link with system libraries, but ignores whether the dep is + # actually used, so "enable" deleted builtins on disabled deps + builtin_certs=no + builtin_embree=$(usex !gui yes $(usex !tools yes $(usex !raycast))) + builtin_enet=yes # bundled copy is patched for IPv6+DTLS support + builtin_freetype=no + builtin_glslang=yes #879111 + builtin_graphite=no + builtin_harfbuzz=no + builtin_icu4c=no + builtin_libogg=no + builtin_libpng=no + builtin_libtheora=$(usex !theora) + builtin_libvorbis=no + builtin_libwebp=$(usex !webp) + builtin_mbedtls=no + builtin_miniupnpc=$(usex !upnp) + builtin_msdfgen=yes # not wired for unbundling nor packaged + builtin_pcre2=no + builtin_recastnavigation=no + builtin_rvo2=yes # bundled copy has godot-specific changes + builtin_squish=yes # ^ likewise, may not be safe to unbundle + builtin_wslay=no + builtin_xatlas=yes # not wired for unbundling nor packaged + builtin_zlib=no + builtin_zstd=no + # (more is bundled in third_party/ but they lack builtin_* switches) + + # modules with optional dependencies, "possible" to disable more but + # gets messy and breaks all sorts of features (expected enabled) + module_gridmap_enabled=$(usex deprecated) # fails without deprecated + module_mono_enabled=no # unhandled + # note raycast is only enabled on amd64+arm64, see raycast/config.py + module_raycast_enabled=$(usex gui $(usex tools $(usex raycast))) + module_theora_enabled=$(usex theora) + module_upnp_enabled=$(usex upnp) + module_webp_enabled=$(usex webp) + + # let *FLAGS handle these, e.g. can pass -flto as-is + debug_symbols=no + lto=none + optimize=custom + use_static_cpp=no + ) + + if use runner && use tools; then + # build alternate faster + ~60% smaller binary for running + # games or servers without game development debug paths + escons extra_suffix=runner target=template_release "${esconsargs[@]}" + fi + + esconsargs+=( + target=$(usex tools editor template_$(usex debug{,} release)) + dev_build=$(usex debug) + + # harmless but note this bakes in --test in the final binary + tests=$(usex tools $(usex test)) + ) + + escons extra_suffix=main "${esconsargs[@]}" +} + +src_test() { + xdg_environment_reset + bin/godot*.main --headless --test || die +} + +src_install() { + local s=godot${SLOT} + + newbin bin/godot*.main ${s} + if use runner && use tools; then + newbin bin/godot*.runner ${s}-runner + else + # always available, revdeps shouldn't depend on [runner] + dosym ${s} /usr/bin/${s}-runner + fi + + newman misc/dist/linux/godot.6 ${s}.6 + dodoc AUTHORS.md CHANGELOG.md DONORS.md README.md + + if use gui; then + newicon icon.svg ${s}.svg + newmenu misc/dist/linux/org.godotengine.Godot.desktop \ + org.godotengine.${s^}.desktop + + insinto /usr/share/metainfo + newins misc/dist/linux/org.godotengine.Godot.appdata.xml \ + org.godotengine.${s^}.appdata.xml + + insinto /usr/share/mime/application + newins misc/dist/linux/org.godotengine.Godot.xml \ + org.godotengine.${s^}.xml + fi + + newbashcomp misc/dist/shell/godot.bash-completion ${s} + bashcomp_alias ${s}{,-runner} + + insinto /usr/share/fish/vendor_completions.d + newins misc/dist/shell/godot.fish ${s}.fish + dosym ${s}.fish /usr/share/fish/vendor_completions.d/${s}-runner.fish + + insinto /usr/share/zsh/site-functions + newins misc/dist/shell/_godot.zsh-completion _${s} + dosym _${s} /usr/share/zsh/site-functions/_${s}-runner +} diff --git a/dev-games/godot/metadata.xml b/dev-games/godot/metadata.xml index 82c690208342..ad0df117f2fd 100644 --- a/dev-games/godot/metadata.xml +++ b/dev-games/godot/metadata.xml @@ -24,6 +24,7 @@ <flag name="deprecated">Enable support for deprecated features</flag> <flag name="raycast">Enable the raycast Editor module using <pkg>media-libs/embree</pkg></flag> <flag name="runner">Build an additional binary optimized for running games (only relevant with USE=tools)</flag> + <flag name="speech">Enable text-to-speech support</flag> <flag name="tools">Enable the Godot Editor for game development</flag> <flag name="vulkan">Enable support for Vulkan</flag> <flag name="webm">Enable the WebM module</flag> |