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>
This commit is contained in:
Matt Jolly
2023-06-11 17:07:00 +10:00
committed by Sam James
parent 9ba8a07c35
commit 08e5f37bdc
5 changed files with 423 additions and 2 deletions

View File

@@ -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

View File

@@ -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 = []

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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>