aboutsummaryrefslogtreecommitdiff
path: root/games/odamex/odamex.SlackBuild
blob: 8ddcc1ffe42912ec9026bcfa0de2c41916cedb4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#!/bin/bash

# Slackware build script for odamex

# Written by B. Watson (yalhcru@gmail.com)

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20211231 bkw: BUILD=2.
# - the SDL2 segfault will likely be fixed soon (reported to PV, along
#   with a patch). add SDL2 environment variable, default to no.

# 20211028 bkw: update for v0.9.5.
# - had to switch to SDL 1 to avoid SDL2_Mixer-related segfaults.
#   unfortunately I can't get the music to work with SDL 1...
# 20201024 bkw: update for v0.8.3.
# 20191201 bkw: update for v0.8.1.

# 20140910 bkw:
# - explicitly use the correct config script for wx, instead of relying
#   on /usr/bin/wx-config

# 20140827 bkw:
# - update for 0.7.0
# - require wxGTK3 (which is wx 3.x) instead of wxPython (wx 2.x)
# - pod-ify man page for easier editing
# - edit man page a bit
# - get rid of hard-coded /usr/share/games/doom, no longer needed
# - include sample orasrv.cfg from 0.6.4 source (it's gone from 0.7.0)

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=odamex
VERSION=${VERSION:-0.9.5}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -e

# We can't trust the /usr/bin/wx-config symlink.
# Find the correct wx-config, if it exists. User can override by setting WXVER
# in the env, or by setting WXCONFIG to the full path.
WXVER=${WXVER:-3.0}
WXMAYBE="$( ls /usr/lib$LIBDIRSUFFIX/wx/config/*-$WXVER 2>/dev/null | head -1 )"
WXCONFIG=${WXCONFIG:-$WXMAYBE}
WXCONFIG=${WXCONFIG:-/usr/bin/wx-config}

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-src-$VERSION
tar xvf $CWD/$PRGNAM-src-$VERSION.tar.bz2
cd $PRGNAM-src-$VERSION
chown -R root:root .

# Every file in 0.9.5 is +x, and none of them need to be!
# Do not revert to template.
find . -type f -exec chmod 644 {} \+
find . -type d -exec chmod 755 {} \+

SDL12ARG=ON
[ "${SDL2:-no}" = "yes" ] && SDL12ARG=OFF

# 20220101 bkw: do not use systemwide install of portmidi, if it exists.
# This is to avoid a hidden portmidi dependency breaking the odamex
# binary when portmidi gets removed or upgraded.
patch -p1 < $CWD/use_bundled_portmidi.diff

# Make the launcher look in /usr/games for the odamex binary rather
# than the current directory. User can override with the settings
# dialog, this just sets the default.
sed -i 's,OdaGetInstallDir(),"/usr/games",g' \
       odalaunch/src/dlg_main.cpp \
       odalaunch/src/dlg_config.cpp

rm -rf build
mkdir -p build
cd build
  cmake \
    -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
    -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_INSTALL_BINDIR=games \
    -DwxWidgets_CONFIG_EXECUTABLE=$WXCONFIG \
    -DUSE_SDL12=$SDL12ARG \
    -DCMAKE_BUILD_TYPE=Release ..
  make VERBOSE=1
cd ..

# cmake-based odamex lacks a 'make install' target, do it manually.
# Actually, there is one in 0.8.3, but it doesn't work.
mkdir -p $PKG/usr/games
install -s -m0755 build/client/$PRGNAM $PKG/usr/games
install -s -m0755 build/server/odasrv $PKG/usr/games
install -s -m0755 build/odalaunch/odalaunch $PKG/usr/games

# Man page created for this slackbuild
MANDIR=$PKG/usr/man/man6
mkdir -p $MANDIR
gzip -9c < $CWD/$PRGNAM.6 > $MANDIR/$PRGNAM.6.gz
for i in odasrv odalaunch; do
  ln -s $PRGNAM.6.gz $MANDIR/$i.6.gz
done

# Desktop stuff
mkdir -p $PKG/usr/share/applications $PKG/usr/share/pixmaps
for exe in $PRGNAM odasrv odalaunch; do
  # make these validate and call the correct binary
  sed -e '/^Encoding/d' -e 's, -waddir.*,,' -e 's,Exec=,&/usr/games/,' \
    < installer/arch/$exe.desktop \
    > $PKG/usr/share/applications/$exe.desktop

  # use upstream's icons
  for i in media/icon_${exe}_*.png; do
    px=$( basename $i | cut -d. -f1 | cut -d_ -f3 )
    size=${px}x${px}
    dir=$PKG/usr/share/icons/hicolor/$size/apps
    mkdir -p $dir
    cat $i > $dir/$exe.png
  done

  # make old-school icon, too
  convert -resize 48x48 media/icon_${exe}_512.png $PKG/usr/share/pixmaps/$exe.png
done

# 20211027 bkw: In 0.9.5, upstream doesn't ship the wad. It expects
# to build it using deutex. Easier to use a prebuilt one, from their
# windows package.
WADDIR=$PKG/usr/share/games/doom
mkdir -p $WADDIR
unzip -p $CWD/$PRGNAM-win32-$VERSION.zip $PRGNAM.wad > $WADDIR/$PRGNAM.wad

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a CHANGELOG LICENSE MAINTAINERS README.md documentation/tech $PKGDOC
cat $CWD/odasrv.cfg > $PKGDOC/odasrv.cfg.sample
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE