summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonen Wolkens <ionen@gentoo.org>2022-08-15 05:00:20 -0400
committerIonen Wolkens <ionen@gentoo.org>2022-08-15 20:00:32 -0400
commit17666af92dcda999af6d9b7288696e4348f2471d (patch)
tree7a86e5bc24d3e19d8fbbc1b5a7f359fcf1242f34 /dev-games
parentnet-libs/wslay: new package, add 1.1.1_p20210115 (diff)
downloadgentoo-17666af92dcda999af6d9b7288696e4348f2471d.tar.gz
gentoo-17666af92dcda999af6d9b7288696e4348f2471d.tar.bz2
gentoo-17666af92dcda999af6d9b7288696e4348f2471d.zip
dev-games/godot: new package, add 3.5 (slot:3)
That this wasn't in ::gentoo always kind of bothered me even though I don't really use it, and felt like handling it. Help/suggestions/PRs welcome from actual users, and please report if anything unexpected compared to official builds (perhaps due to unbundling/USE). Slotted given godot:4 is known to have major breaking changes and migrating is not always trivial. Note largely no interest in building export templates (complex toolchains and would realistically need to use bundled libs), and does not help that this cannot use system paths to find them without patching. Game ebuilds can do simple wrapper.eclass + desktop.eclass w/ icon.png and use system's godot[34]-runner (simpler if assets are pre-imported). IUSE=headless/cli may have been useful to have both gui and headless at same time but requires an extra long build and is obsoleted in godot4 with the --headless switch, likely not worth having for 3. Bug: https://bugs.gentoo.org/532730 Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
Diffstat (limited to 'dev-games')
-rw-r--r--dev-games/godot/Manifest1
-rw-r--r--dev-games/godot/files/godot-3.5-musl.patch9
-rw-r--r--dev-games/godot/files/godot-3.5-scons.patch74
-rw-r--r--dev-games/godot/godot-3.5.ebuild218
-rw-r--r--dev-games/godot/metadata.xml34
5 files changed, 336 insertions, 0 deletions
diff --git a/dev-games/godot/Manifest b/dev-games/godot/Manifest
new file mode 100644
index 000000000000..8116161b4deb
--- /dev/null
+++ b/dev-games/godot/Manifest
@@ -0,0 +1 @@
+DIST godot-3.5-stable.tar.xz 24044340 BLAKE2B 9d77ecdfa6bd90065fff26c2334f13c32bbbc4b26aad111b5aab2563d1e4782457ea6cf2115f1a809e0d8aac3d3ee9a138ad224998068983ad36e54a577d89c3 SHA512 23785e39ccc7e1406c97ee33b5e90f7f397aa907d79d72ed08ea3f4b7e68788030a1bcdd07c9f782a21ee3a84636a2cea47a57dcfc94c24e327fa210ae0515b0
diff --git a/dev-games/godot/files/godot-3.5-musl.patch b/dev-games/godot/files/godot-3.5-musl.patch
new file mode 100644
index 000000000000..0738b035480f
--- /dev/null
+++ b/dev-games/godot/files/godot-3.5-musl.patch
@@ -0,0 +1,9 @@
+crash handler requires glibc or libexecinfo (not packaged),
+and is always enabled if build the editor (release_debug)
+--- a/platform/x11/crash_handler_x11.cpp
++++ b/platform/x11/crash_handler_x11.cpp
+@@ -38,3 +38,3 @@
+
+-#ifdef DEBUG_ENABLED
++#if defined(DEBUG_ENABLED) && defined(__GLIBC__)
+ #define CRASH_HANDLER_ENABLED 1
diff --git a/dev-games/godot/files/godot-3.5-scons.patch b/dev-games/godot/files/godot-3.5-scons.patch
new file mode 100644
index 000000000000..b8ed7f50311d
--- /dev/null
+++ b/dev-games/godot/files/godot-3.5-scons.patch
@@ -0,0 +1,74 @@
+* add option to respect AR
+ (respecting PKG_CONFIG is handled in the ebuild)
+* handle recastnavigation unbundling
+* remove unnecessary opusfile
+* remove unnecessary -no-pie
+* remove -pipe from LDFLAGS, may "possibly" be relevant to:
+ https://bugs.gentoo.org/861689
+ https://github.com/godotengine/godot/commit/f035e784
+--- a/SConstruct
++++ b/SConstruct
+@@ -192,4 +192,5 @@
+ opts.Add("CXX", "C++ compiler")
+ opts.Add("CC", "C compiler")
++opts.Add("AR", "Archiver")
+ opts.Add("LINK", "Linker")
+ opts.Add("CCFLAGS", "Custom flags for both the C and C++ compilers")
+--- a/platform/server/detect.py
++++ b/platform/server/detect.py
+@@ -135,5 +135,4 @@
+
+ env.Append(CCFLAGS=["-pipe"])
+- env.Append(LINKFLAGS=["-pipe"])
+
+ ## Dependencies
+@@ -178,4 +177,7 @@
+ env.ParseConfig("pkg-config libenet --cflags --libs")
+
++ if not env["builtin_recast"]:
++ env.ParseConfig("pkg-config recastnavigation --cflags --libs")
++
+ if not env["builtin_squish"]:
+ env.ParseConfig("pkg-config libsquish --cflags --libs")
+@@ -205,5 +207,5 @@
+ if not env["builtin_opus"]:
+ env["builtin_libogg"] = False # Needed to link against system opus
+- env.ParseConfig("pkg-config opus opusfile --cflags --libs")
++ env.ParseConfig("pkg-config opus --cflags --libs")
+
+ if not env["builtin_libogg"]:
+--- a/platform/x11/detect.py
++++ b/platform/x11/detect.py
+@@ -232,17 +232,5 @@
+
+ env.Append(CCFLAGS=["-pipe"])
+- env.Append(LINKFLAGS=["-pipe"])
+
+- # Check for gcc version >= 6 before adding -no-pie
+- version = get_compiler_version(env) or [-1, -1]
+- if using_gcc(env):
+- if version[0] >= 6:
+- env.Append(CCFLAGS=["-fpie"])
+- env.Append(LINKFLAGS=["-no-pie"])
+- # Do the same for clang should be fine with Clang 4 and higher
+- if using_clang(env):
+- if version[0] >= 4:
+- env.Append(CCFLAGS=["-fpie"])
+- env.Append(LINKFLAGS=["-no-pie"])
+
+ ## Dependencies
+@@ -298,4 +286,7 @@
+ env.ParseConfig("pkg-config libenet --cflags --libs")
+
++ if not env["builtin_recast"]:
++ env.ParseConfig("pkg-config recastnavigation --cflags --libs")
++
+ if not env["builtin_squish"]:
+ env.ParseConfig("pkg-config libsquish --cflags --libs")
+@@ -325,5 +316,5 @@
+ if not env["builtin_opus"]:
+ env["builtin_libogg"] = False # Needed to link against system opus
+- env.ParseConfig("pkg-config opus opusfile --cflags --libs")
++ env.ParseConfig("pkg-config opus --cflags --libs")
+
+ if not env["builtin_libogg"]:
diff --git a/dev-games/godot/godot-3.5.ebuild b/dev-games/godot/godot-3.5.ebuild
new file mode 100644
index 000000000000..3d18204a94a1
--- /dev/null
+++ b/dev-games/godot/godot-3.5.ebuild
@@ -0,0 +1,218 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{8..10} )
+inherit bash-completion-r1 desktop python-any-r1 scons-utils toolchain-funcs xdg
+
+DESCRIPTION="Multi-platform 2D and 3D game engine with a feature-rich editor"
+HOMEPAGE="https://godotengine.org/"
+SRC_URI="https://downloads.tuxfamily.org/godotengine/${PV}/${P}-stable.tar.xz"
+S="${WORKDIR}/${P}-stable"
+
+LICENSE="
+ MIT
+ Apache-2.0 BSD Boost-1.0 CC0-1.0 Unlicense ZLIB
+ gui? ( CC-BY-4.0 ) tools? ( BitstreamVera OFL-1.1 )"
+SLOT="3"
+KEYWORDS="~amd64"
+# Enable roughly same as upstream by default so it works as expected,
+# except raycast (tools-only heavy dependency), and deprecated.
+IUSE="
+ +bullet debug deprecated +gui pulseaudio raycast +runner +theora
+ +tools +udev +upnp +webm +webp"
+
+# dlopen: alsa-lib,pulseaudio,udev
+RDEPEND="
+ app-arch/zstd:=
+ dev-games/recastnavigation:=
+ dev-libs/libpcre2:=[pcre32]
+ media-libs/freetype[brotli]
+ media-libs/libpng:=
+ <net-libs/mbedtls-3:=
+ net-libs/wslay
+ sys-libs/zlib:=
+ bullet? ( sci-physics/bullet:= )
+ gui? (
+ media-libs/alsa-lib
+ media-libs/libglvnd[X]
+ x11-libs/libX11
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXi
+ x11-libs/libXinerama
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ pulseaudio? ( media-libs/libpulse )
+ tools? ( raycast? ( media-libs/embree:3 ) )
+ udev? ( virtual/udev )
+ )
+ theora? (
+ media-libs/libogg
+ media-libs/libtheora
+ media-libs/libvorbis
+ )
+ tools? ( app-misc/ca-certificates )
+ upnp? ( net-libs/miniupnpc:= )
+ webm? (
+ media-libs/libvorbis
+ media-libs/libvpx:=
+ media-libs/opus
+ )
+ webp? ( media-libs/libwebp:= )"
+DEPEND="
+ ${RDEPEND}
+ gui? ( x11-base/xorg-proto )"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.5-musl.patch
+ "${FILESDIR}"/${PN}-3.5-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/{x11,server}/detect.py || die
+
+ # use of builtin_ switches can be messy (see below), delete to be sure
+ local unbundle=(
+ bullet embree freetype libogg libpng libtheora libvorbis libvpx
+ libwebp mbedtls miniupnpc opus pcre2 recastnavigation wslay zlib zstd
+ # certs: unused by generated header, but scons panics if not found
+ )
+ rm -r "${unbundle[@]/#/thirdparty/}" || die
+}
+
+src_compile() {
+ local -x BUILD_NAME=gentoo # replaces "custom_build" in version string
+
+ local esconsargs=(
+ AR="$(tc-getAR)" CC="$(tc-getCC)" CXX="$(tc-getCXX)"
+
+ platform=$(usex gui x11 server)
+ progress=no
+ verbose=yes
+
+ deprecated=$(usex deprecated)
+ #execinfo=$(usex !elibc_glibc) # libexecinfo is not packaged
+ minizip=yes # uses a modified bundled copy
+ pulseaudio=$(usex gui $(usex pulseaudio))
+ udev=$(usex gui $(usex udev))
+
+ 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_bullet=$(usex !bullet)
+ 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_libogg=yes # unused
+ builtin_libpng=no
+ builtin_libtheora=$(usex !theora)
+ builtin_libvorbis=$(usex !theora $(usex !webm))
+ builtin_libvpx=$(usex !webm)
+ builtin_libwebp=$(usex !webp)
+ builtin_mbedtls=no
+ builtin_miniupnpc=$(usex !upnp)
+ builtin_opus=$(usex !webm)
+ builtin_pcre2=no
+ builtin_recast=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
+ # also bundled but lacking a builtin_* switch:
+ # cvtt, etc2comp, fonts, glad, jpeg-compressor, libsimplewebm,
+ # minimp3, minizip (patched to seek in archives), nanosvg, oidn,
+ # pvrtccompressor, stb_rect_pack, tinyexr, vhacd, and the misc
+ # directory.
+
+ # modules with optional dependencies, "possible" to disable more but
+ # gets messy and breaks all sorts of features (expected enabled)
+ module_bullet_enabled=$(usex bullet)
+ module_mono_enabled=no # unhandled
+ module_ogg_enabled=no # unused
+ module_opus_enabled=no # unused, support is gone and webm uses system's
+ # note raycast is disabled on many arches, see raycast/config.py
+ module_raycast_enabled=$(usex gui $(usex tools $(usex raycast)))
+ module_theora_enabled=$(usex theora)
+ module_upnp_enabled=$(usex upnp)
+ module_vorbis_enabled=no # unused, non-theora/webm uses stb_vorbis
+ module_webm_enabled=$(usex webm)
+ module_webp_enabled=$(usex webp)
+
+ # let *FLAGS handle these, e.g. can pass -flto as-is
+ debug_symbols=no
+ optimize=none
+ use_lto=no
+ 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=release tools=no "${esconsargs[@]}"
+ fi
+
+ esconsargs+=(
+ # debug: debug for godot itself
+ # release_debug: debug for game development
+ # release: no debugging paths, only available with tools=no
+ target=$(usex debug{,} $(usex tools release_debug release))
+ tools=$(usex tools)
+ )
+
+ escons extra_suffix=main "${esconsargs[@]}"
+}
+
+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
new file mode 100644
index 000000000000..71f596fee4e9
--- /dev/null
+++ b/dev-games/godot/metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <longdescription>
+ Godot Engine is a feature-packed, cross-platform game engine
+ to create 2D and 3D games from a unified interface. It provides
+ a comprehensive set of common tools, so that users can focus on
+ making games without having to reinvent the wheel. Games can be
+ exported with one click to a number of platforms, including the
+ major desktop platforms (Linux, macOS, Windows), mobile
+ platforms (Android, iOS), as well as Web-based platforms (HTML5)
+ and consoles.
+ </longdescription>
+ <use>
+ <flag name="bullet">Enable the <pkg>sci-physics/bullet</pkg> module</flag>
+ <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="tools">Enable the Godot Editor for game development</flag>
+ <flag name="webm">Enable the WebM module</flag>
+ </use>
+ <upstream>
+ <doc>https://docs.godotengine.org/</doc>
+ <remote-id type="github">godotengine/godot</remote-id>
+ </upstream>
+</pkgmetadata>