mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-25 10:03:03 +01:00
b7d7739a99
Signed-off-by: B. Watson <urchlay@slackware.uk> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
242 lines
7.8 KiB
Bash
242 lines
7.8 KiB
Bash
#!/bin/bash
|
|
|
|
# Slackware build script for munt
|
|
|
|
# Copyright 2017 Dugan Chen Canada
|
|
# Copyright 2023 B. Watson
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use of this script, with or without modification, is
|
|
# permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of this script must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
# 20230410 bkw:
|
|
# - new maintainer.
|
|
# - update for v2.7.0 (sourceforge => github).
|
|
# - include (some of) the ROMs in the package.
|
|
# - add the mt32emu_alsadrv binaries (mt32d, xmt32).
|
|
# - patch everything to use /usr/share/munt/roms/ as default path.
|
|
# user can still change this in the UI as needed, I just don't want
|
|
# it defaulting to ~/roms/ (need this so we can package the ROMs).
|
|
# - add doinst.sh, since the new version has icons and a .desktop.
|
|
# - add setcap stuff for jack.
|
|
# - update README to document jack optional dep and the fact that the
|
|
# ROMs are included. also mention the actual binary names, since
|
|
# neither one's called "munt".
|
|
|
|
# TODO someday: man pages.
|
|
|
|
cd $(dirname $0) ; CWD=$(pwd)
|
|
|
|
PRGNAM=munt
|
|
VERSION=${VERSION:-2.7.0}
|
|
BUILD=${BUILD:-1}
|
|
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
|
|
|
|
# 20230411 bkw: The various components have separate version numbers,
|
|
# and it looks like upstream's tags are named after whichever
|
|
# component was released last. The mt32emu_qt_1_11_1 tag includes
|
|
# the previous release (2.7.0) of mt32emu. This is kinda confusing,
|
|
# but whatever.
|
|
GIT_TAG=${GIT_TAG:-mt32emu_qt_1_11_1}
|
|
|
|
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
|
|
|
|
rm -rf $PKG
|
|
mkdir -p $TMP $PKG $OUTPUT
|
|
cd $TMP
|
|
rm -rf $PRGNAM-$GIT_TAG
|
|
tar xvf $CWD/$PRGNAM-$GIT_TAG.tar.gz
|
|
cd $PRGNAM-$GIT_TAG
|
|
chown -R root:root .
|
|
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
|
|
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
|
|
|
|
# 20230411 bkw: Patch mt32emu-qt, mt32emu-smf2wav, mt32d, xmt32 to
|
|
# look for ROMs in a systemwide directory (which is where we'll place
|
|
# the ROMs, below).
|
|
patch -p1 < $CWD/system_rom_path.diff
|
|
|
|
# Allow mt32d, xmt32 to build in-tree, without the library already
|
|
# installed. Also apply our SLKCFLAGS.
|
|
sed -i \
|
|
-e "s,-O2,$SLKCFLAGS -I../build/mt32emu/include," \
|
|
-e "s,-lmt32emu,-L../build/mt32emu -lmt32emu," \
|
|
mt32emu_alsadrv/Makefile
|
|
|
|
# 20230411 bkw: fix desktop-file-validate nitpick (a "hint", not an error).
|
|
sed -i '/^Categories/s,$,Audio;,' mt32emu_qt/res/mt32emu-qt.desktop
|
|
|
|
# 20230411 bkw: cmake accepts and ignores (!) -DCMAKE_INSTALL_DOCDIR.
|
|
# Also there's no way to disable jack, if it's autodetected.
|
|
mkdir -p build
|
|
cd build
|
|
cmake \
|
|
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
|
|
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
|
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DLIB_INSTALL_DIR=/usr/lib${LIBDIRSUFFIX} \
|
|
-DCMAKE_BUILD_TYPE=Release .. \
|
|
-Dlibmt32emu_SHARED=ON
|
|
make
|
|
make install/strip DESTDIR=$PKG
|
|
cd ..
|
|
|
|
# This stuff isn't built by cmake. It's considered outdated, but at least
|
|
# the mt32d binary might be useful for a headless/console-only system.
|
|
make -C mt32emu_alsadrv
|
|
install -s -m0755 mt32emu_alsadrv/{mt32d,xmt32} $PKG/usr/bin
|
|
|
|
### Extract and install the ROMs.
|
|
|
|
PKGROMS=$PKG/usr/share/$PRGNAM/roms
|
|
mkdir -p $PKGROMS
|
|
|
|
# The ROM zip files have at least 2 possible names each, depending on
|
|
# what was used to download them. The URLs have spaces in them. The
|
|
# spec says spaces have to be hex-escaped as %20. Plus, we can't have
|
|
# spaces in the URLs in our .info files anyway: it would break every
|
|
# tool that parses .info files, plus it would prevent curl from being
|
|
# able to download them (it refuses to accept spaces in URLs).
|
|
|
|
# So DOWNLOAD has the %20's in the URLs. But wget will "helpfully"
|
|
# transform them back into spaces. On the other hand, "curl -O"
|
|
# will save them as-is. I don't know what various browsers do, but
|
|
# hopefully I've covered it here...
|
|
|
|
ok=0
|
|
for i in \
|
|
'Roland - CM32L - CONTROL.1989-12-05.v1.02.ROM.zip' \
|
|
'Roland%20-%20CM32L%20-%20CONTROL.1989-12-05.v1.02.ROM.zip'
|
|
do
|
|
if [ -e "$CWD/$i" ]; then
|
|
unzip -p "$CWD/$i" \
|
|
"Roland - CM32L - CONTROL.1989-12-05.v1.02.ROM" \
|
|
> $PKGROMS/CM32L_CONTROL.ROM
|
|
ok=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
[ "$ok" = "0" ] && echo "*** can't find CM32L control ROM zip file" && exit 1
|
|
|
|
ok=0
|
|
for i in \
|
|
'Roland - CM32L - PCM Maskrom.ROM.zip' \
|
|
'Roland%20-%20CM32L%20-%20PCM%20Maskrom.ROM.zip'
|
|
do
|
|
if [ -e "$CWD/$i" ]; then
|
|
unzip -p "$CWD/$i" \
|
|
"Roland - CM32L - PCM Maskrom.ROM" \
|
|
> $PKGROMS/CM32L_PCM.ROM
|
|
ok=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
[ "$ok" = "0" ] && echo "*** can't find CM32L PCM ROM zip file" && exit 1
|
|
|
|
# We need 3 files from this one, and 2 of them have to be
|
|
# interleaved... wrote a little tool to do the job. Only
|
|
# including the v1.0.7 control ROM; it's the newest version
|
|
# in the zip file. Also, in case something saves the file with
|
|
# the ( character hex-escaped, allow for it.
|
|
ok=0
|
|
for i in \
|
|
'Roland MT32 (various OS _ extra ROMs.zip' \
|
|
'Roland%20MT32%20(various%20OS%20_%20extra%20ROMs.zip' \
|
|
'Roland%20MT32%20%28various%20OS%20_%20extra%20ROMs.zip'
|
|
do
|
|
if [ -e "$CWD/$i" ]; then
|
|
unzip -p "$CWD/$i" r15449121.ic37.bin > $PKGROMS/MT32_PCM.ROM
|
|
unzip "$CWD/$i" mt32_1.0.7.ic26.bin mt32_1.0.7.ic27.bin
|
|
|
|
# The ROMs are stored on 2 chips, one with the even-numbered
|
|
# addresses and one with the odd. In theory, munt can use them
|
|
# as-is (the source called them "Mux0" and "Mux1" ROMs), but
|
|
# I couldn't get that to work. Easy enough to merge them together.
|
|
gcc -Wall -O2 -o interleave "$CWD/interleave.c"
|
|
./interleave mt32_1.0.7.ic27.bin mt32_1.0.7.ic26.bin $PKGROMS/MT32_CONTROL.ROM
|
|
|
|
ok=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
[ "$ok" = "0" ] && echo "*** can't find MT32 ROM zip file" && exit 1
|
|
|
|
### ROMs extracted/installed, back to regular SBo style stuffs.
|
|
|
|
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
|
|
mkdir -p $PKG/usr/doc
|
|
mv $PKG/usr/share/doc/$PRGNAM $PKGDOC
|
|
rm -rf $PKG/usr/share/doc
|
|
cp -a README* $PKGDOC
|
|
mkdir -p $PKGDOC/mt32emu_alsadrv
|
|
cp -a mt32emu_alsadrv/*.txt $PKGDOC/mt32emu_alsadrv
|
|
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild
|
|
|
|
mkdir -p $PKG/install
|
|
cat $CWD/doinst.sh > $PKG/install/doinst.sh
|
|
|
|
WITHJACK=WITHOUT
|
|
|
|
# Only add capability stuff if not disabled, and if JACK support was
|
|
# included.
|
|
if pkg-config --exists jack && [ "${SETCAP:-yes}" = "yes" ]; then
|
|
WITHJACK=WITH
|
|
cat $CWD/setcap.sh >> $PKG/install/doinst.sh
|
|
# Only allow execution by audio group
|
|
chown root:audio $PKG/usr/bin/mt32emu-qt
|
|
chmod 0750 $PKG/usr/bin/mt32emu-qt
|
|
fi
|
|
|
|
sed "s,@WITHJACK@,$WITHJACK," < $CWD/slack-desc > $PKG/install/slack-desc
|
|
|
|
cd $PKG
|
|
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
|