You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
5.8 KiB
216 lines
5.8 KiB
# Copyright 1999-2024 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="https://www.freeciv.org/ https://github.com/freeciv/freeciv/"
|
|
|
|
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"
|
|
if [[ ${PV} != *_beta* ]]; then
|
|
KEYWORDS="~amd64 ~ppc64 ~x86"
|
|
fi
|
|
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 +server +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 ) )
|
|
dedicated? ( !gtk3 !gtk4 !mapimg !nls !qt5 !qt6 !sdl !sound )
|
|
qt5? ( !qt6 )
|
|
qt6? ( !qt5 )
|
|
"
|
|
|
|
RDEPEND="
|
|
app-arch/bzip2
|
|
app-arch/xz-utils
|
|
app-arch/zstd:=
|
|
dev-build/libtool
|
|
dev-db/sqlite:3
|
|
dev-libs/icu:=
|
|
net-misc/curl
|
|
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
|
|
}
|
|
|
|
PATCHES=(
|
|
"${FILESDIR}"/${PN}-3.1.0_beta4-fix-manpage-install-location.patch
|
|
)
|
|
|
|
src_prepare() {
|
|
# Upstream's meson.build is not very friendly to our needs
|
|
sed -i -e "s:doc/freeciv:doc/${PF}:" meson.build || die
|
|
sed -i -e "/custom_target('gzip_ChangeLog/,+6d" meson.build || die
|
|
default
|
|
}
|
|
|
|
src_configure() {
|
|
# Docs here: https://github.com/freeciv/freeciv/blob/main/doc/INSTALL.meson
|
|
local myclient=() emesonargs=() myfcmp=()
|
|
|
|
# Upstream considers meson "experimental" until 3.2.0 according to their roadmap
|
|
emesonargs+=( -Dack_experimental=true )
|
|
|
|
if use dedicated || use server ; then
|
|
emesonargs+=( -Dserver=enabled )
|
|
elif use web-server; then
|
|
emesonargs+=( -Dserver=freeciv-web )
|
|
else
|
|
emesonargs+=( -Dserver=disabled )
|
|
fi
|
|
|
|
# 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() {
|
|
|
|
meson_src_install
|
|
# 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.
|
|
elog "Generating html manual..."
|
|
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
|
|
|
|
find "${ED}" -name "freeciv-manual*" -delete || die "Failed to remove freeciv-manual"
|
|
|
|
if use dedicated ; then
|
|
elog "Tidying up dedicated server installation..."
|
|
find "${ED}"/usr/share/man/man6/ \
|
|
-not \( -name 'freeciv.6' -o -name 'freeciv-ruledit.6' \
|
|
-o -name 'freeciv-ruleup.6' -o -name 'freeciv-server.6' \) -mindepth 1 -delete || die
|
|
else
|
|
# sdl client needs some special handling
|
|
if use sdl ; then
|
|
make_desktop_entry freeciv-sdl "Freeciv (SDL)" freeciv-client
|
|
else
|
|
rm "${ED}"/usr/share/man/man6/freeciv-sdl2.6 || die
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
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
|
|
}
|