mirror of
https://github.com/etlegacy/etlegacy-snap.git
synced 2024-11-10 06:31:38 +00:00
snap: added all the files required for building snap package
This commit is contained in:
parent
0e9d5b3872
commit
31f00fda0e
10 changed files with 436 additions and 0 deletions
21
LICENCE
Normal file
21
LICENCE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright © 2021 Canonical Ltd.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
13
snap/gui/com.etlegacy.ETLegacy.desktop
Normal file
13
snap/gui/com.etlegacy.ETLegacy.desktop
Normal file
|
@ -0,0 +1,13 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=ET: Legacy
|
||||
GenericName=World War II first-person shooter
|
||||
Comment=World War II first-person shooter
|
||||
Icon=${SNAP}/usr/local/share/icons/hicolor/scalable/apps/etl.svg
|
||||
Exec=etlegacy.etl
|
||||
Terminal=false
|
||||
MimeType=x-scheme-handler/et;
|
||||
Categories=Game;ActionGame;
|
||||
StartupNotify=false
|
||||
Keywords=team-based;multiplayer;tactical;WWII;enemy;territory;etl;etlegacy;
|
||||
PrefersNonDefaultGPU=true
|
20
snap/hooks/configure
vendored
Normal file
20
snap/hooks/configure
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
daemon=$(snapctl get daemon)
|
||||
case "$daemon" in
|
||||
true)
|
||||
# start the daemon
|
||||
if snapctl services "$SNAP_INSTANCE_NAME" | grep -q inactive; then
|
||||
snapctl start --enable "$SNAP_INSTANCE_NAME" 2>&1 || true
|
||||
fi
|
||||
;;
|
||||
false)
|
||||
# stop the daemon
|
||||
snapctl stop --disable "$SNAP_INSTANCE_NAME" 2>&1 || true
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: Set 'daemon' to one of true|false"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
11
snap/hooks/install
Normal file
11
snap/hooks/install
Normal file
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
set -x
|
||||
|
||||
if [ "$(snapctl get daemon)" = "" ]
|
||||
then
|
||||
if grep -q -e snap_core= -e snapd_recovery_mode= /proc/cmdline
|
||||
then snapctl set daemon=true
|
||||
else snapctl set daemon=false
|
||||
fi
|
||||
fi
|
||||
|
11
snap/hooks/post-refresh
Normal file
11
snap/hooks/post-refresh
Normal file
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
set -x
|
||||
|
||||
if [ "$(snapctl get daemon)" = "" ]
|
||||
then
|
||||
if grep -q -e snap_core= -e snapd_recovery_mode= /proc/cmdline
|
||||
then snapctl set daemon=true
|
||||
else snapctl set daemon=false
|
||||
fi
|
||||
fi
|
||||
|
177
snap/snapcraft.yaml
Normal file
177
snap/snapcraft.yaml
Normal file
|
@ -0,0 +1,177 @@
|
|||
name: etlegacy
|
||||
summary: FPS Game
|
||||
description: |
|
||||
Welcome to ET: Legacy, an open source project that aims to create a fully compatible client
|
||||
and server for the popular online FPS game Wolfenstein: Enemy Territory - whose gameplay
|
||||
is still considered unmatched by many, despite its great age.
|
||||
adopt-info: etl
|
||||
|
||||
base: core22
|
||||
compression: lzo
|
||||
confinement: strict
|
||||
|
||||
apps:
|
||||
etl:
|
||||
command-chain: &_command-chain
|
||||
- bin/graphics-core22-wrapper
|
||||
- bin/wayland-launch
|
||||
command: &_command bin/run
|
||||
plugs: &_plugs
|
||||
- opengl
|
||||
- wayland
|
||||
- hardware-observe
|
||||
- audio-playback
|
||||
- joystick
|
||||
- network
|
||||
- alsa
|
||||
environment: &_environment
|
||||
PULSE_SERVER: unix:$XDG_RUNTIME_DIR/../pulse/native
|
||||
PULSE_SYSTEM: 1
|
||||
PULSE_RUNTIME_PATH: /var/run/pulse
|
||||
LD_LIBRARY_PATH: ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}:${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}/pulseaudio
|
||||
|
||||
etlded:
|
||||
command: bin/runded
|
||||
plugs:
|
||||
- hardware-observe
|
||||
- network
|
||||
- network-bind
|
||||
environment:
|
||||
LD_LIBRARY_PATH: ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}
|
||||
|
||||
daemon:
|
||||
daemon: simple
|
||||
restart-delay: 3s
|
||||
restart-condition: always
|
||||
command-chain: *_command-chain
|
||||
command: *_command
|
||||
plugs: *_plugs
|
||||
environment: *_environment
|
||||
|
||||
# This is one of four snippets that relate to providing the userspace graphics needed by your application.
|
||||
# You can treat this as "magic" so long as you don't need to make changes.
|
||||
# On the Mir website there's a lot more detail on [the graphics-core22 Snap interface](https://mir-server.io/docs/the-graphics-core22-snap-interface) and it's use.
|
||||
plugs:
|
||||
graphics-core22:
|
||||
interface: content
|
||||
target: $SNAP/graphics
|
||||
default-provider: mesa-core22
|
||||
|
||||
environment:
|
||||
# Other, generally useful environment settings...
|
||||
# XDG config
|
||||
XDG_CACHE_HOME: $SNAP_USER_COMMON/.cache
|
||||
XDG_CONFIG_HOME: $SNAP_USER_DATA/.config
|
||||
XDG_CONFIG_DIRS: $SNAP/etc/xdg
|
||||
XDG_DATA_DIRS: $SNAP/usr/local/share:$SNAP/usr/share
|
||||
# XKB config
|
||||
XKB_CONFIG_ROOT: $SNAP/usr/share/X11/xkb
|
||||
|
||||
# The `layout` ensures that files can be found by applications where they are expected by the toolkit or application.
|
||||
layout:
|
||||
/usr/share/libdrm:
|
||||
bind: $SNAP/graphics/libdrm
|
||||
/usr/share/drirc.d:
|
||||
symlink: $SNAP/graphics/drirc.d
|
||||
# Other, generally useful paths
|
||||
/usr/share/fonts:
|
||||
bind: $SNAP/usr/share/fonts
|
||||
/usr/share/icons:
|
||||
bind: $SNAP/usr/share/icons
|
||||
/usr/share/sounds:
|
||||
bind: $SNAP/usr/share/sounds
|
||||
/etc/fonts:
|
||||
bind: $SNAP/etc/fonts
|
||||
/usr/share/alsa:
|
||||
bind: $SNAP/usr/share/alsa
|
||||
|
||||
parts:
|
||||
etl:
|
||||
plugin: cmake
|
||||
cmake-parameters:
|
||||
- -DCROSS_COMPILE32=OFF
|
||||
- -DBUNDLED_LIBS=OFF
|
||||
- -DRENDERER_DYNAMIC=OFF
|
||||
- -DINSTALL_OMNIBOT=OFF
|
||||
- -DBUILD_MOD_PK3=OFF
|
||||
source-type: git
|
||||
source-branch: master
|
||||
source: https://github.com/etlegacy/etlegacy
|
||||
parse-info: [usr/local/share/metainfo/com.etlegacy.ETLegacy.metainfo.xml]
|
||||
build-packages:
|
||||
- g++
|
||||
- gcc
|
||||
- make
|
||||
- libcurl4-openssl-dev
|
||||
- libsdl2-dev
|
||||
- liblua5.4-dev
|
||||
- libopenal-dev
|
||||
- libtheora-dev
|
||||
- libglew-dev
|
||||
- libogg-dev
|
||||
- libvorbis-dev
|
||||
- libgl1-mesa-dev
|
||||
- freeglut3-dev
|
||||
- zlib1g-dev
|
||||
- libminizip-dev
|
||||
- libturbojpeg0-dev
|
||||
- libssl-dev
|
||||
- libcjson-dev
|
||||
- libfreetype6-dev
|
||||
- libpng-dev
|
||||
- libsqlite3-dev
|
||||
- libx11-dev
|
||||
- libc-devtools
|
||||
- libc6-dev
|
||||
- nasm
|
||||
- zip
|
||||
|
||||
stage-packages:
|
||||
- libsdl2-2.0-0
|
||||
- libcjson1
|
||||
- libcurl4
|
||||
- libminizip1
|
||||
- libtheora-bin
|
||||
- libvorbisfile3
|
||||
- libglew2.2
|
||||
- libgl1
|
||||
- libglu1-mesa
|
||||
- freeglut3
|
||||
- libjpeg8
|
||||
- libstdc++6
|
||||
- liblua5.4-0
|
||||
- libsqlite3-0
|
||||
- wget
|
||||
- curl
|
||||
- unzip
|
||||
|
||||
# Some utility scripts for setting up the Wayland environment
|
||||
setup:
|
||||
plugin: dump
|
||||
source: wayland-launch
|
||||
override-build: |
|
||||
# The plugs needed to run Wayland. (wayland-launch checks them, setup.sh connects them)
|
||||
# You may add further plugs here if you want these options
|
||||
PLUGS="opengl wayland graphics-core22 hardware-observe audio-playback joystick network"
|
||||
sed --in-place "s/%PLUGS%/$PLUGS/g" $CRAFT_PART_BUILD/bin/wayland-launch
|
||||
sed --in-place "s/%PLUGS%/$PLUGS/g" $CRAFT_PART_BUILD/bin/setup.sh
|
||||
craftctl default
|
||||
stage-packages:
|
||||
- inotify-tools
|
||||
|
||||
graphics-core22:
|
||||
after:
|
||||
# Your application packaging
|
||||
- setup
|
||||
source: https://github.com/MirServer/graphics-core22.git
|
||||
plugin: dump
|
||||
override-prime: |
|
||||
craftctl default
|
||||
${CRAFT_PART_SRC}/bin/graphics-core22-cleanup mesa-core22 nvidia-core22
|
||||
cd "$CRAFT_PRIME/usr/share/"
|
||||
rm -rf bug drirc.d glvnd libdrm lintian man
|
||||
rm -rf applications apport bash-completion dbus-1 doc-base doc gtk-doc\
|
||||
help pkgconfig libthai metainfo themes thumbnailers xml
|
||||
prime:
|
||||
- bin/graphics-core22-wrapper
|
||||
|
53
wayland-launch/bin/run
Normal file
53
wayland-launch/bin/run
Normal file
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
pack_downloader() {
|
||||
if [ -f /usr/bin/curl ]; then
|
||||
curl -P ${SNAP_USER_DATA}/.etlegacy/etmain $1
|
||||
else
|
||||
wget -P ${SNAP_USER_DATA}/.etlegacy/etmain $1
|
||||
fi
|
||||
}
|
||||
|
||||
for dir in */ ;
|
||||
do
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlegacy ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlegacy
|
||||
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlegacy/etmain ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlegacy/etmain
|
||||
cp -R ${SNAP}/usr/local/lib/etlegacy/etmain ${SNAP_USER_DATA}/.etlegacy
|
||||
fi
|
||||
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlegacy/legacy ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlegacy/legacy
|
||||
cp -R ${SNAP}/usr/local/lib/etlegacy/legacy ${SNAP_USER_DATA}/.etlegacy
|
||||
wget `curl https://www.etlegacy.com/download | grep "All supported archive" | grep -Eoi '<a [^>]+>' | grep -Eo 'href=\"[^\\\"]+\"' | grep -Eo '(http|https):\/\/[^\"]+'` -O ${SNAP_USER_DATA}/.etlegacy/etl.zip
|
||||
unzip ${SNAP_USER_DATA}/.etlegacy/etl.zip -d ${SNAP_USER_DATA}/.etlegacy/etl
|
||||
mv ${SNAP_USER_DATA}/.etlegacy/etl/*.pk3 ${SNAP_USER_DATA}/.etlegacy/legacy
|
||||
rm -rf ${SNAP_USER_DATA}/.etlegacy/etl
|
||||
rm -rf ${SNAP_USER_DATA}/.etlegacy/*.zip
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak0.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak0.pk3
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak1.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak1.pk3
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak2.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak2.pk3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
case "${SNAP_ARCH}" in
|
||||
amd64)
|
||||
${SNAP}/usr/local/bin/etl.x86_64 ;;
|
||||
arm64)
|
||||
# We will launch etl with prefix since snapcraft compiled it with it.
|
||||
${SNAP}/usr/local/bin/etl.aarch64 ;;
|
||||
esac
|
||||
|
53
wayland-launch/bin/runded
Normal file
53
wayland-launch/bin/runded
Normal file
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
pack_downloader() {
|
||||
if [ -f /usr/bin/curl ]; then
|
||||
curl -P ${SNAP_USER_DATA}/.etlded/etmain $1
|
||||
else
|
||||
wget -P ${SNAP_USER_DATA}/.etlded/etmain $1
|
||||
fi
|
||||
}
|
||||
|
||||
for dir in */ ;
|
||||
do
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlded ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlded
|
||||
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlded/etmain ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlded/etmain
|
||||
cp -R ${SNAP}/usr/local/lib/etlegacy/etmain ${SNAP_USER_DATA}/.etlded
|
||||
fi
|
||||
|
||||
if [ ! -d ${SNAP_USER_DATA}/.etlded/legacy ]; then
|
||||
mkdir ${SNAP_USER_DATA}/.etlded/legacy
|
||||
cp -R ${SNAP}/usr/local/lib/etlegacy/legacy ${SNAP_USER_DATA}/.etlded
|
||||
wget `curl https://www.etlegacy.com/download | grep "All supported archive" | grep -Eoi '<a [^>]+>' | grep -Eo 'href=\"[^\\\"]+\"' | grep -Eo '(http|https):\/\/[^\"]+'` -O ${SNAP_USER_DATA}/.etlded/etl.zip
|
||||
unzip ${SNAP_USER_DATA}/.etlded/etl.zip -d ${SNAP_USER_DATA}/.etlded/etl
|
||||
mv ${SNAP_USER_DATA}/.etlded/etl/*.pk3 ${SNAP_USER_DATA}/.etlded/legacy
|
||||
rm -rf ${SNAP_USER_DATA}/.etlded/etl
|
||||
rm -rf ${SNAP_USER_DATA}/.etlded/*.zip
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak0.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak0.pk3
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak1.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak1.pk3
|
||||
fi
|
||||
|
||||
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak2.pk3 ]; then
|
||||
pack_downloader https://mirror.etlegacy.com/etmain/pak2.pk3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
case "${SNAP_ARCH}" in
|
||||
amd64)
|
||||
${SNAP}/usr/local/bin/etlded.x86_64 +set fs_homepath ${SNAP_USER_DATA}/.etlded +set g_protect 1 +set omnibot_enable 1 +set omnibot_path "${SNAP_USER_DATA}/.etlded/legacy/omni-bot" +exec etl_server.cfg ;;
|
||||
arm64)
|
||||
# We will launch etl with prefix since snapcraft compiled it with it.
|
||||
${SNAP}/usr/local/bin/etlded.aarch64 +set fs_homepath ${SNAP_USER_DATA}/.etlded +set g_protect 1 +set omnibot_enable 1 +set omnibot_path "${SNAP_USER_DATA}/.etlded/legacy/omni-bot" +exec etl_server.cfg ;;
|
||||
esac
|
||||
|
31
wayland-launch/bin/setup.sh
Normal file
31
wayland-launch/bin/setup.sh
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
SNAP_INSTANCE_NAME="$(readlink -f $0 | cut -f 3 -d /)"
|
||||
|
||||
snap_connect_harder() {
|
||||
# Note the available slot providers
|
||||
if ! snap connections ${SNAP_INSTANCE_NAME} | grep --quiet "^content.*${SNAP_INSTANCE_NAME}:$1.*$"; then
|
||||
available_providers="$(snap interface "$1" | sed -e '1,/slots:/d')"
|
||||
else
|
||||
available_providers="$(snap interface content | sed -e '1,/slots:/d' | grep "$1")"
|
||||
fi
|
||||
|
||||
# For wayland try some well known providers
|
||||
if [ "wayland" = "$1" ]; then
|
||||
for PROVIDER in ubuntu-frame mir-kiosk; do
|
||||
if echo "$available_providers" | grep --quiet "\- ${PROVIDER}"; then
|
||||
sudo snap connect "${SNAP_INSTANCE_NAME}:$1" "${PROVIDER}:$1"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo "Warning: Failed to connect '$1'. Please connect manually, available providers are:\n$available_providers"
|
||||
}
|
||||
|
||||
for PLUG in %PLUGS%; do
|
||||
if ! snap connections ${SNAP_INSTANCE_NAME} | grep --quiet "^.*${SNAP_INSTANCE_NAME}:${PLUG}.*${PLUG}.*$"; then
|
||||
sudo snap connect "${SNAP_INSTANCE_NAME}:${PLUG}" 2> /dev/null || snap_connect_harder ${PLUG}
|
||||
fi
|
||||
done
|
46
wayland-launch/bin/wayland-launch
Normal file
46
wayland-launch/bin/wayland-launch
Normal file
|
@ -0,0 +1,46 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
for PLUG in %PLUGS%; do
|
||||
if ! snapctl is-connected ${PLUG}
|
||||
then
|
||||
echo "WARNING: ${PLUG} interface not connected! Please run: /snap/${SNAP_INSTANCE_NAME}/current/bin/setup.sh"
|
||||
fi
|
||||
done
|
||||
|
||||
if ! command -v inotifywait > /dev/null
|
||||
then
|
||||
echo "ERROR: inotifywait could not be found, mir-kiosk-snap-launch expects:"
|
||||
echo " . . : stage-packages:"
|
||||
echo " . . : - inotify-tools"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wait_for()
|
||||
{
|
||||
until
|
||||
until
|
||||
inotifywait --event create "$(dirname "$1")"&
|
||||
inotify_pid=$!
|
||||
[ -e "$1" ] || sleep 2 && [ -e "$1" ]
|
||||
do
|
||||
wait "${inotify_pid}"
|
||||
done
|
||||
kill "${inotify_pid}"
|
||||
[ -O "$1" ]
|
||||
do
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
real_xdg_runtime_dir=$(dirname "${XDG_RUNTIME_DIR}")
|
||||
export WAYLAND_DISPLAY="${real_xdg_runtime_dir}/${WAYLAND_DISPLAY:-wayland-0}"
|
||||
|
||||
# On core systems may need to wait for real XDG_RUNTIME_DIR
|
||||
wait_for "${real_xdg_runtime_dir}"
|
||||
wait_for "${WAYLAND_DISPLAY}"
|
||||
|
||||
mkdir -p "$XDG_RUNTIME_DIR" -m 700
|
||||
unset DISPLAY
|
||||
|
||||
exec "$@"
|
Loading…
Reference in a new issue