#!/bin/bash # Slackware build script for vice # Copyright 2008 Mauro Giachero (email removed) # Copyright 2020, 2021, 2022, 2023 B. Watson (urchlay@slackware.uk) # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. # 20240213 bkw: update for v3.8. # - had to add --disable-parsid to the configure command. it was breaking # the build. also, do you really have a SID chip connected to your # parallel port? (do you even *have* a parallel port?)... if so, either # send me a patch, or wait until upstream does another release. # - LAME is no longer supported, remove --enable-lame. # - add --enable-catweasel. # 20230504 bkw: BUILD=2. # - fix vice.texi so the GNU info file gets generated. # - remove old ./configure arguments and fix a couple of wrong ones. # thanks to Franzen for sending a patch to fix this. # - changed -Wl,--allow-multiple-definition to -fcommon, which does # basically the same thing but matches how other builds do it. # - fix doinst.sh silliness. # - add douninst.sh, to clean up /usr/info/dir after the package is removed. # 20221228 bkw: update for v3.7.1. # 20221129 bkw: update for v3.6.1. # - can't build our own HTML or plaintext docs from vice.texi. # - include upstream's HTML docs in package. # 20210809 bkw: update for v3.5, many changes, can't build old versions. # - Relicense as WTFPL, with permission from the original author. # - Build & install the actual HTML docs (not the bundled copy of # the upstream website). # - Don't install fonts. They were part of the above. # - Use upstream's .desktop files instead of our own. # - Upstream removed the man pages; restore them (for now). # - Build the gtk+3 UI. Also build the SDL2 UI, unless the user's # requested the SDL1 one (or disabled SDL). # - Really fix the paths in the documentation. # - ffmpeg now included in Slackware (pre-15.0 -current). Still # autodetected, but the docs no longer mention it. # - Get rid of README_SBo.txt as the build options are simpler # and "fit" in the regular README now. # 20200801 bkw: # - Take over maintenance # - Autodetect ffmpeg # - Allow building with SDL 1.x # - Allow building without pulseaudio # - Get rid of xa dep # - Install TTF fonts in correct place, get rid of other formats # - install-info in doinst.sh so vice.info shows up in the info dir # - Have slack-desc show build options # - Re-enable the old x64 emulator # - BUILD=3 cd $(dirname $0) ; CWD=$(pwd) PRGNAM=vice VERSION=${VERSION:-3.8} 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 TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$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 -pipe" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e # ffmpeg is included in the base OS on post-14.2 -current, but leave # this here in case someone's doing something clever. [ -x /usr/bin/ffmpeg ] && ffmpeg="--enable-ffmpeg" # Anticipating 15.0's pure-alsa-system # 20240214 bkw: which sadly never materialized. I keep this here for # my own use, anyway. if [ "${PULSE:-yes}" != "yes" ]; then pulseopt="--without-pulse" fi echo "=== pulseopt='$pulseopt'" rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tar.gz cd $PRGNAM-$VERSION chown -R root:root . chmod 644 doc/html/fonts/OFL.txt # this file shouldn't be +x find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \ \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+ # Fix some mildly broken constructs in vice.texi, so we can generate # the vice.info doc. patch -p1 < $CWD/fix_texi.diff DOCDIR=/usr/doc/$PRGNAM-$VERSION PKGDOC=$PKG/$DOCDIR # setting TEXMFVAR prevents writing to /root, which SlackBuilds # really shouldn't do. export TEXMFVAR=$( pwd )/.texmf-var # Set proper paths in documentation. rm -rf doc/vice.pdf # will be rebuilt, along with the HTML doc. sed -i -e "s/\/usr\/local/\/usr/g" \ -e "s,/lib/vice/,/share/vice/,Ig" \ doc/vice.texi autoreconf -vif # We build up to 3 times with slightly different ./configure args, # so make it a function. config() { local configarg="$1" # Avoid the need for xa. It's only used to generate a small C header # file, which we include a prebuilt version of here. There's nothing # dynamic about this header, it's just a small chunk of 6502 object # code as a C array, and for a given version of vice it'll always be # the same code. It didn't change between vice 3.4 and 3.5, either. cat $CWD/psiddrv.h.prebuilt.3.4 > src/c64/psiddrv.h # 20210809 bkw: in 3.5, upstream added dos2unix as a required dep, # but it's *only used* if you run "make dist" or "make dist-gzip", # which we don't do. DOS2UNIX=/bin/true bypasses the autodetection. # XDG_DESKTOP_MENU=/bin/true prevents installing .desktop files, # because those don't respect $DESTDIR. We can't just disable them # with a configure argument, because that stops them being built # at all. # 20230504 bkw: note to self: -w means disable all warnings. CFLAGS="$SLKCFLAGS -w -fcommon" \ CXXFLAGS="$SLKCFLAGS" \ DOS2UNIX=/bin/true \ XA=/bin/true \ XDG_DESKTOP_MENU=/bin/true \ ./configure \ $configarg \ $ffmpeg \ $pulseopt \ --enable-html-docs \ --enable-platformdox \ --enable-x64 \ --enable-x64-image \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --infodir=/usr/info \ --docdir=$DOCDIR \ --enable-ethernet \ --disable-parsid \ --enable-cpuhistory \ --with-mpg123 \ --with-flac \ --with-vorbis \ --with-gif \ --with-png \ --enable-midi \ --enable-catweasel \ --build=$ARCH-slackware-linux make } # SDL UI: *Only* build/install the binaries (not the docs or ROMs), # rename them to -sdl2 (or -sdl1). buildsdl() { local exesuf="-sdl$1" local configarg="--disable-pdf-docs --enable-sdl${1}ui" config "$configarg" make -C src install-binPROGRAMS \ DESTDIR="$PKG" \ EXEEXT="$exesuf" \ INSTALL_PROGRAM="install -s -m0755" # get rid of the non-graphical tools (the gtk3 build will # install them again without -$exesuf). rm -f $PKG/usr/bin/[cp]*$exesuf make distclean } # Build the SDL binaries, unless disabled. # Be generous in what we accept for SDL in the env. "both" isn't # mentioned in README, it's probably only useful to me. case "${SDL:-2}" in ""|2*|y*|Y*|t*|T*) buildsdl 2 ;; 1*) buildsdl 1 ;; both) buildsdl 1 ; buildsdl 2 ;; n*|N*|f*|F*|0*) ;; # NOP *) cat < $PKGDOC/$PRGNAM.txt fi # 20221130 bkw: HTML docs do get built, but never installed. mkdir -p $PKGDOC/html cp -a doc/html/{NEWS,COPYING,fonts/,images/,*.{html,css,ico}} $PKGDOC/html ln -s html/NEWS $PKGDOC/NEWS ln -s html/COPYING $PKGDOC/COPYING # 20210810 bkw: as of 3.5, upstream dropped the man pages. I'm # including the man pages from 3.4 in the 3.5 package. Edited them # slightly to add correct paths to the HTML and PDF docs, also # convert the iso-8859-1 characters into troff escapes. Also # added (and expanded) vsid.1 from Debian. mkdir -p $PKG/usr/man/man1 for i in $CWD/man/*.?; do sed -e "s,@HTMLDOC@,$DOCDIR/html/index.html," \ -e "s,@PDFDOC@,$DOCDIR/$PRGNAM.pdf," \ < $i > $PKG/usr/man/man1/$( basename $i ) done gzip -9 $PKG/usr/man/man?/*.? for i in x64 x64sc xscpu64 x64dtv x128 xvic xpet xplus4 xcbm2 xcbm5x0; do ln -s vice.1.gz $PKG/usr/man/man1/$i.1.gz done cp -a NEWS README $PKGDOC cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild # Make the slack-desc reflect the build options. PA=no if [ "$SDL" = "both" ]; then SDL="1.2 and 2.0" else SDL=no [ -x $PKG/usr/bin/x128-sdl1 ] && SDL=1.2 [ -x $PKG/usr/bin/x128-sdl2 ] && SDL=2.0 fi grep -q '^#define USE_PULSE\>' src/config.h && PA=yes mkdir -p $PKG/install sed -e "s,@PA@,$PA," \ -e "s,@SDL@,$SDL," \ $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cat $CWD/douninst.sh > $PKG/install/douninst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE