commit:     08e5f37bdc8170cba7357f6c5d14ab7b300e572a
Author:     Matt Jolly <Matt.Jolly <AT> footclan <DOT> ninja>
AuthorDate: Sun Jun 11 07:07:00 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jun 30 07:17:44 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=08e5f37b

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 <AT> footclan.ninja>
Closes: https://github.com/gentoo/gentoo/pull/31381
Signed-off-by: Sam James <sam <AT> gentoo.org>

 games-strategy/freeciv/Manifest                    |   1 +
 .../files/freeciv-3.1.0_beta2-lua-search.patch     |  21 +++
 games-strategy/freeciv/freeciv-3.1.0_beta2.ebuild  | 198 +++++++++++++++++++++
 games-strategy/freeciv/freeciv-9999.ebuild         | 194 ++++++++++++++++++++
 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>

Reply via email to