diff options
author | Matt Jolly <Matt.Jolly@footclan.ninja> | 2023-06-11 17:07:00 +1000 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-06-30 08:17:44 +0100 |
commit | 08e5f37bdc8170cba7357f6c5d14ab7b300e572a (patch) | |
tree | 6f791c5407768e29919b33acfb1fbec77a176ddd | |
parent | net-vpn/ovpn-dco: Stabilize 0.2.20230426 amd64, #908984 (diff) | |
download | gentoo-08e5f37bdc8170cba7357f6c5d14ab7b300e572a.tar.gz gentoo-08e5f37bdc8170cba7357f6c5d14ab7b300e572a.tar.bz2 gentoo-08e5f37bdc8170cba7357f6c5d14ab7b300e572a.zip |
games-strategy/freeciv: add 3.1.0_beta2, 9999
Switch to meson build; it'll be the default next version anyway
and it's better than autotools (controversial opinion, I know).
Signed-off-by: Matt Jolly <Matt.Jolly@footclan.ninja>
Closes: https://github.com/gentoo/gentoo/pull/31381
Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r-- | games-strategy/freeciv/Manifest | 1 | ||||
-rw-r--r-- | games-strategy/freeciv/files/freeciv-3.1.0_beta2-lua-search.patch | 21 | ||||
-rw-r--r-- | games-strategy/freeciv/freeciv-3.1.0_beta2.ebuild | 198 | ||||
-rw-r--r-- | games-strategy/freeciv/freeciv-9999.ebuild | 194 | ||||
-rw-r--r-- | games-strategy/freeciv/metadata.xml | 11 |
5 files changed, 423 insertions, 2 deletions
diff --git a/games-strategy/freeciv/Manifest b/games-strategy/freeciv/Manifest index 68270362a7df..07b520312249 100644 --- a/games-strategy/freeciv/Manifest +++ b/games-strategy/freeciv/Manifest @@ -1 +1,2 @@ DIST freeciv-3.0.1.tar.xz 33528292 BLAKE2B e19cae8a02aa4b9afc2895560aa7a8d6135a63a0e757c348a75e72522448a026874f8f0120448b38ca2fee0ecc42dd04d80345d9877554168ad07ca2a20e5dcc SHA512 0f28aa7eb6adc2c4fe2af31265965ec30b4ea4f12121c4240ca896070f4ea574db58f02240e74822b9d498e112bcdb7036bb69f3d0b33cea5fec724e9e47da34 +DIST freeciv-3.1.0_beta2.tar.gz 127527752 BLAKE2B 457e01787e2dccb4862de5519a4ea51bcfe240c0948e2cd97b09ae6d4e2c27d4196329326cd7c0489ce1e37dbc548f4f31fcd7c5f57b15b53b49dd6e54fef032 SHA512 2b15134454bf7ca885287985bb6d17a31f6cbfdec87fa8e6fd7fce000a2bfc1fa888dd7a2e244df4460d08011e87876800190a9fa8ea825789eec0e434348920 diff --git a/games-strategy/freeciv/files/freeciv-3.1.0_beta2-lua-search.patch b/games-strategy/freeciv/files/freeciv-3.1.0_beta2-lua-search.patch new file mode 100644 index 000000000000..e7c8123f9985 --- /dev/null +++ b/games-strategy/freeciv/files/freeciv-3.1.0_beta2-lua-search.patch @@ -0,0 +1,21 @@ +This patches meson.build to enable it to find lua in any of its +many wonderous hiding places. It also bumps the meson version so that +there's a ton less boilerplate to do so. +--- a/meson.build ++++ b/meson.build +@@ -1,5 +1,5 @@ + +-project('freeciv', ['c', 'cpp'], meson_version: '>= 0.57.0') ++project('freeciv', ['c', 'cpp'], meson_version: '>= 0.60.0') + + if not get_option('ack_experimental') + error('Autotools are still the only fully supported way to build freeciv.\nSet configure option "ack_experimental" to true if you really want to do experimental meson build.\n' + +@@ -436,7 +436,7 @@ endif + icu_dep = dependency('icu-uc') + + syslua = get_option('syslua') +-lua_dep_tmp = dependency('lua-5.4', required:false) ++lua_dep_tmp = dependency('lua-5.4', 'lua-54', 'lua54', 'lua5.4', required:false) + + if syslua != 'false' and lua_dep_tmp.found() + lua_inc_path = [] diff --git a/games-strategy/freeciv/freeciv-3.1.0_beta2.ebuild b/games-strategy/freeciv/freeciv-3.1.0_beta2.ebuild new file mode 100644 index 000000000000..bf93bfe2a9ee --- /dev/null +++ b/games-strategy/freeciv/freeciv-3.1.0_beta2.ebuild @@ -0,0 +1,198 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LUA_COMPAT=( lua5-4 ) + +inherit desktop lua-single meson xdg + +DESCRIPTION="Multiplayer strategy game (Civilization Clone)" +HOMEPAGE="http://www.freeciv.org/" + +if [[ ${PV} == 9999 ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/freeciv/freeciv/" +else + MY_PV="R${PV//./_}" + SRC_URI="https://github.com/freeciv/freeciv/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64 ~ppc64 ~x86" + MY_P="${PN}-${MY_PV}" + S="${WORKDIR}/${MY_P}" +fi + +LICENSE="GPL-2+" +SLOT="0" +IUSE="dedicated gtk3 gtk4 json mapimg modpack mysql nls +qt5 qt6 readline rule-editor sdl +sound +system-lua web-server " + +# I'm pretty sure that you can't build both qt flavours at the same time +REQUIRED_USE=" + system-lua? ( ${LUA_REQUIRED_USE} ) + !dedicated? ( || ( gtk3 gtk4 qt5 qt6 sdl ) ) + qt5? ( !qt6 ) + qt6? ( !qt5 ) +" + +RDEPEND=" + app-arch/bzip2 + app-arch/xz-utils + app-arch/zstd:= + dev-db/sqlite:3 + dev-libs/icu:= + net-misc/curl + sys-devel/libtool + sys-libs/zlib + !dedicated? ( + media-libs/libpng + gtk3? ( x11-libs/gtk+:3 ) + gtk4? ( gui-libs/gtk:4 ) + mapimg? ( media-gfx/imagemagick:= ) + nls? ( virtual/libintl ) + qt5? ( + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtwidgets:5 + ) + qt6? ( + dev-qt/qtbase:6[gui,widgets] + ) + sdl? ( + media-libs/libsdl2[video] + media-libs/sdl2-gfx + media-libs/sdl2-image[png] + media-libs/sdl2-ttf + ) + sound? ( + media-libs/libsdl2[sound] + media-libs/sdl2-mixer[vorbis] + ) + ) + json? ( dev-libs/jansson:= ) + readline? ( sys-libs/readline:= ) + system-lua? ( + ${LUA_DEPS} + ) +" +DEPEND="${RDEPEND} + !dedicated? ( x11-base/xorg-proto ) +" +# Calls gzip during build +BDEPEND=" + app-arch/gzip + virtual/pkgconfig + nls? ( sys-devel/gettext ) +" + +PATCHES=( + "${FILESDIR}"/${P}-lua-search.patch +) + +pkg_setup() { + use system-lua && lua-single_pkg_setup +} + +src_configure() { + local myclient=() emesonargs=() myfcmp=() + + # Upstream considers meson "experimental" until 3.2.0 according to their roadmap + emesonargs+=( -Dack_experimental=true ) + + # meson build drops the ability to _not_ build a server in favour + # of optionally replacing the server binary the freeciv-web backend + emesonargs+=( + $(meson_use web-server freeciv-web) + ) + + # Select any client backends that we want enabled; dedicated server shouldn't build a UI + # for sanity we'll build the modpack bin with the same UIs as the client. + # 'fcmp' = freeciv modpack (client) - gtk3, qt, cli, gtk4 + freeciv_enable_ui() { + local flag=$1 + local client_name=${2:-${flag}} + local fcmp_name=${3:-${client_name}} + + if use ${flag} ; then + myclient+=( ${client_name} ) + use modpack && myfcmp+=( ${fcmp_name} ) + fi + } + + if ! use dedicated ; then + # there's no SDL modpack backend; rather than incidentally pull in GTK3 (as is default) + # let's explicitly set the backend to CLI + freeciv_enable_ui sdl sdl2 cli + freeciv_enable_ui gtk3 gtk3.22 gtk3 + freeciv_enable_ui gtk4 + freeciv_enable_ui qt5 qt + freeciv_enable_ui qt6 qt + use qt5 && emesonargs+=( -Dqtver=qt5 ) + use qt6 && emesonargs+=( -Dqtver=qt6 ) + else + if use modpack ; then + myfcmp+=( cli ) + fi + fi + + # the client and fpmc arrays are now populated (or not for dedicated); let's add them to emesonargs + emesonargs+=( + -Dclients=$(echo ${myclient[*]} | sed 's/ /,/g') + -Dfcmp=$(echo ${myfcmp[*]} | sed 's/ /,/g') + ) + + # If we're building a live ebuild, we want to include the git revision in the version string + if [[ ${PV} == 9999 ]] ; then + emesonargs+=( -Dgitrev=true ) + fi + + # Anything that can be trivially set by meson_use goes here + emesonargs+=( + $(meson_use json json-protocol) + $(meson_use mapimg mwand) + $(meson_use nls) + $(meson_use readline) + $(meson_use rule-editor ruledit) + $(meson_use sound audio) + $(meson_use system-lua syslua) + ) + + meson_src_configure +} + +src_install() { + + if use dedicated ; then + rm -rf "${ED}"/usr/share/pixmaps || die + rm -f "${ED}"/usr/share/man/man6/freeciv-{client,gtk2,gtk3,modpack,qt,sdl,xaw}* || die + fi + # Create and install the html manual and then cleanup the tool because it's useless. + # TODO: for proper localisation this should be run during postinst but + # that would require a lot of work to avoid orphan files. + # freeciv-manual only supports one ruleset argument at a time. + for RULESET in alien civ1 civ2 civ2civ3 classic experimental multiplayer sandbox + do + $(find "${WORKDIR}" -type d -maxdepth 1 -mindepth 1 -iname '*-build')/freeciv-manual -r ${RULESET} || die + docinto html/rulesets/${RULESET} + dodoc ${RULESET}*.html + done + if use sdl ; then + make_desktop_entry freeciv-sdl "Freeciv (SDL)" freeciv-client + else + rm -f "${ED}"/usr/share/man/man6/freeciv-sdl* || die + fi + rm -f "${ED}"/usr/share/man/man6/freeciv-xaw* || die + find "${ED}" -name "freeciv-manual*" -delete || die + + rm -f "${ED}/usr/$(get_libdir)"/*.a || die + find "${ED}" -type f -name "*.la" -delete || die + meson_src_install +} + +pkg_postinst() { + if [[ -z ${REPLACING_VERSIONS} ]]; then + einfo "There are a number of supported authentication backends." + einfo "sqlite3 is the default, however dedicated servers may wish to" + einfo "use another supported backend; please consult the documentation" + einfo "to configure freeciv for a particular backend:" + einfo "https://github.com/freeciv/freeciv/blob/main/doc/README.fcdb" + fi +} diff --git a/games-strategy/freeciv/freeciv-9999.ebuild b/games-strategy/freeciv/freeciv-9999.ebuild new file mode 100644 index 000000000000..0b65cd815449 --- /dev/null +++ b/games-strategy/freeciv/freeciv-9999.ebuild @@ -0,0 +1,194 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LUA_COMPAT=( lua5-4 ) + +inherit desktop lua-single meson xdg + +DESCRIPTION="Multiplayer strategy game (Civilization Clone)" +HOMEPAGE="http://www.freeciv.org/" + +if [[ ${PV} == 9999 ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/freeciv/freeciv/" +else + MY_PV="R${PV//./_}" + SRC_URI="https://github.com/freeciv/freeciv/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64 ~ppc64 ~x86" + MY_P="${PN}-${MY_PV}" + S="${WORKDIR}/${MY_P}" +fi + +LICENSE="GPL-2+" +SLOT="0" +IUSE="dedicated gtk3 gtk4 json mapimg modpack mysql nls +qt5 qt6 readline rule-editor sdl +sound +system-lua web-server " + +# I'm pretty sure that you can't build both qt flavours at the same time +REQUIRED_USE=" + system-lua? ( ${LUA_REQUIRED_USE} ) + !dedicated? ( || ( gtk3 gtk4 qt5 qt6 sdl ) ) + qt5? ( !qt6 ) + qt6? ( !qt5 ) +" + +RDEPEND=" + app-arch/bzip2 + app-arch/xz-utils + app-arch/zstd:= + dev-db/sqlite:3 + dev-libs/icu:= + net-misc/curl + sys-devel/libtool + sys-libs/zlib + !dedicated? ( + media-libs/libpng + gtk3? ( x11-libs/gtk+:3 ) + gtk4? ( gui-libs/gtk:4 ) + mapimg? ( media-gfx/imagemagick:= ) + nls? ( virtual/libintl ) + qt5? ( + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtwidgets:5 + ) + qt6? ( + dev-qt/qtbase:6[gui,widgets] + ) + sdl? ( + media-libs/libsdl2[video] + media-libs/sdl2-gfx + media-libs/sdl2-image[png] + media-libs/sdl2-ttf + ) + sound? ( + media-libs/libsdl2[sound] + media-libs/sdl2-mixer[vorbis] + ) + ) + json? ( dev-libs/jansson:= ) + readline? ( sys-libs/readline:= ) + system-lua? ( + ${LUA_DEPS} + ) +" +DEPEND="${RDEPEND} + !dedicated? ( x11-base/xorg-proto ) +" +# Calls gzip during build +BDEPEND=" + app-arch/gzip + virtual/pkgconfig + nls? ( sys-devel/gettext ) +" + +pkg_setup() { + use system-lua && lua-single_pkg_setup +} + +src_configure() { + local myclient=() emesonargs=() myfcmp=() + + # Upstream considers meson "experimental" until 3.2.0 according to their roadmap + emesonargs+=( -Dack_experimental=true ) + + # meson build drops the ability to _not_ build a server in favour + # of optionally replacing the server binary the freeciv-web backend + emesonargs+=( + $(meson_use web-server freeciv-web) + ) + + # Select any client backends that we want enabled; dedicated server shouldn't build a UI + # for sanity we'll build the modpack bin with the same UIs as the client. + # 'fcmp' = freeciv modpack (client) - gtk3, qt, cli, gtk4 + freeciv_enable_ui() { + local flag=$1 + local client_name=${2:-${flag}} + local fcmp_name=${3:-${client_name}} + + if use ${flag} ; then + myclient+=( ${client_name} ) + use modpack && myfcmp+=( ${fcmp_name} ) + fi + } + + if ! use dedicated ; then + # there's no SDL modpack backend; rather than incidentally pull in GTK3 (as is default) + # let's explicitly set the backend to CLI + freeciv_enable_ui sdl sdl2 cli + freeciv_enable_ui gtk3 gtk3.22 gtk3 + freeciv_enable_ui gtk4 + freeciv_enable_ui qt5 qt + freeciv_enable_ui qt6 qt + use qt5 && emesonargs+=( -Dqtver=qt5 ) + use qt6 && emesonargs+=( -Dqtver=qt6 ) + else + if use modpack ; then + myfcmp+=( cli ) + fi + fi + + # the client and fpmc arrays are now populated (or not for dedicated); let's add them to emesonargs + emesonargs+=( + -Dclients=$(echo ${myclient[*]} | sed 's/ /,/g') + -Dfcmp=$(echo ${myfcmp[*]} | sed 's/ /,/g') + ) + + # If we're building a live ebuild, we want to include the git revision in the version string + if [[ ${PV} == 9999 ]] ; then + emesonargs+=( -Dgitrev=true ) + fi + + # Anything that can be trivially set by meson_use goes here + emesonargs+=( + $(meson_use json json-protocol) + $(meson_use mapimg mwand) + $(meson_use nls) + $(meson_use readline) + $(meson_use rule-editor ruledit) + $(meson_use sound audio) + $(meson_use system-lua syslua) + ) + + meson_src_configure +} + +src_install() { + + if use dedicated ; then + rm -rf "${ED}"/usr/share/pixmaps || die + rm -f "${ED}"/usr/share/man/man6/freeciv-{client,gtk2,gtk3,modpack,qt,sdl,xaw}* || die + fi + # Create and install the html manual and then cleanup the tool because it's useless. + # TODO: for proper localisation this should be run during postinst but + # that would require a lot of work to avoid orphan files. + # freeciv-manual only supports one ruleset argument at a time. + for RULESET in alien civ1 civ2 civ2civ3 classic experimental multiplayer sandbox + do + $(find "${WORKDIR}" -type d -maxdepth 1 -mindepth 1 -iname '*-build')/freeciv-manual -r ${RULESET} || die + docinto html/rulesets/${RULESET} + dodoc ${RULESET}*.html + done + if use sdl ; then + make_desktop_entry freeciv-sdl "Freeciv (SDL)" freeciv-client + else + rm -f "${ED}"/usr/share/man/man6/freeciv-sdl* || die + fi + rm -f "${ED}"/usr/share/man/man6/freeciv-xaw* || die + find "${ED}" -name "freeciv-manual*" -delete || die + + rm -f "${ED}/usr/$(get_libdir)"/*.a || die + find "${ED}" -type f -name "*.la" -delete || die + meson_src_install +} + +pkg_postinst() { + if [[ -z ${REPLACING_VERSIONS} ]]; then + einfo "There are a number of supported authentication backends." + einfo "sqlite3 is the default, however dedicated servers may wish to" + einfo "use another supported backend; please consult the documentation" + einfo "to configure freeciv for a particular backend:" + einfo "https://github.com/freeciv/freeciv/blob/main/doc/README.fcdb" + fi +} diff --git a/games-strategy/freeciv/metadata.xml b/games-strategy/freeciv/metadata.xml index 35c7dccc5b31..1c8e7e53bd9e 100644 --- a/games-strategy/freeciv/metadata.xml +++ b/games-strategy/freeciv/metadata.xml @@ -9,19 +9,26 @@ <flag name="aimodules">Support for dynamically loadable AI modules (server-side)</flag> <flag name="auth">Add authentication capability via - mysql, postgres or sqlite3</flag> + mysql, postgres, or sqlite3</flag> + <flag name="gtk3">Build the gtk3 client</flag> + <flag name="gtk4">Build the gtk4 client</flag> + <flag name="json">Add support for JSON via + <pkg>dev-libs/jansson</pkg></flag> <flag name="mapimg">Additional mag image toolkit via <pkg>media-gfx/imagemagick</pkg></flag> <flag name="modpack">Build the freeciv-modpack-program to download/install mods</flag> + <flag name="rule-editor">Build ruleset editor</flag> <flag name="server">Enable server support. Disabling this will also make it impossible to start local games.</flag> <flag name="sound">Add support for sound provided by <pkg>media-libs/sdl-mixer</pkg></flag> <flag name="system-lua">Use <pkg>dev-lang/lua</pkg> instead of the bundled liblua</flag> + <flag name="web-server">Build the freeciv-web server in place + of the freeciv server</flag> </use> <upstream> - <remote-id type="sourceforge">freeciv</remote-id> + <remote-id type="github">freeciv/freeciv</remote-id> </upstream> </pkgmetadata> |