#!/bin/sh # $Id: MPlayer.SlackBuild,v 1.15 2008/05/06 07:40:16 root Exp root $ # Copyright (c) 2006,2007,2008 Eric Hameleers # All rights reserved. # # Permission to use, copy, modify, and distribute this software for # any purpose with or without fee is hereby granted, provided that # the above copyright notice and this permission notice appear in all # copies. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR # CONTRIBUTORS 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. # ----------------------------------------------------------------------------- # # Slackware SlackBuild script # =========================== # By: Eric Hameleers # For: MPlayer # Descr: a movie player for LINUX # URL: http://www.mplayerhq.hu/ # Needs: # Changelog: # 1.0rc1-1: 05/Nov/2006 by Eric Hameleers # * Initial build. # 1.0rc1-2: 07/Nov/2006 by Eric Hameleers # * Removed MPlayer's internal libdvdcss code from the build, so # that MPlayer no longer plays encrypted DVD's by default (and the # package is now safe to upload to public repositories). # If it is allowed in your country, you can either install # libdvdcss (which is picked up automatically by MPlayer), or # rebuild MPlayer yourself using this SlackBuild - and set the # variable REMOVECSS="no" first (see further down). # Use this commandline if you can't or won't modify the script: # REMOVECSS="no" ./MPlayer.SlackBuild # 1.0rc1-3: 08/Nov/2006 by Eric Hameleers # * Install the mplayer.conf into correct location '/etc/mplayer/' # 1.0rc1-4: 15/mar/2007 by Eric Hameleers # * Differentiate between versions of X11 (modular X has another # install-prefix); update default skin; enable mplayer menu; # add security fix # 1.0rc1-5: 07/jun/2007 by Eric Hameleers # * Add security fix. # 1.0rc2-1: 09/oct/2007 by Eric Hameleers # * New version. # 1.0rc2-2: 01/feb/2008 by Eric Hameleers # * Apply 4 security fixes. # 1.0rc2-3: 10/mar/2008 by Eric Hameleers # * Apply a patch that allows compilation against the ivtv driver # in the 2.6.24.x kernels. # # Run 'sh MPlayer.SlackBuild --cleanup' to build a Slackware package. # The package (.tgz) plus descriptive .txt file are created in /tmp . # Install using 'installpkg'. # # ----------------------------------------------------------------------------- # Set initial variables: PRGNAM=MPlayer VERSION=${VERSION:-1.0rc2} ARCH=${ARCH:-i486} BUILD=${BUILD:-3} TAG=${TAG:-alien} DOCS="AUTHORS Changelog Copyright LICENSE README DOCS/HTML DOCS/tech" CODECSDIR=/usr/lib/codecs # Where the WIN32 codecs are expected for instance DEFSKIN=${DEFSKIN:-"Blue"} # Download more skins at the following url: SKINVER=${SKINVER:-"1.7"} # http://www.mplayerhq.hu/design7/dload.html LANGUAGES="en nl fr de es" # The default is to just add "en" documentation # MPlayer will try to use one of the TrueType fonts present on the target # system for it's On Screen Display (OSD) font. # Slackware 11.0 ships with the Vera and DejaVu fonts, you may want to add # more fonts to this list. The first font found will be used by creating a # symbolic link "/usr/share/mplayer/subfont.ttf" to it. # The use of bitmapped fonts is considered deprecated, but you can still use # those if you want. Read http://www.mplayerhq.hu/DOCS/HTML/en/fonts-osd.html # if you want to know more about OSD font configuration. OSDFONTS="LiberationSans-Regular.ttf Arialuni.ttf arial.ttf \ DejaVuSans.ttf Vera.ttf" # MPlayer source contains an internal copy of 'libdvdcss' for reading DVD's. # This is considered illegal software in some countries. # The SlackBuild removes support for this this library before building MPlayer # so that the resulting binary can be distributed without legal concerns. # This also means that this SlackBuild creates a version of MPlayer that is # unable to play encrypted DVD's (which is most DVD's on the market). If it is # allowed in your country to use libdvdcss, this is not a big problem though. # Install a copy of libdvdcss and it will be picked up automatically by # MPlayer's internal libdvdread library, so that MPlayer will again be able # to play encrypted DVD's. # Set REMOVECSS="no" if you want MPLayer to use it's internal decss code. REMOVECSS=${REMOVECSS:-"yes"} # Determine what X we're running (the modular X returns the prefix # in the next command, while older versions stay silent): XPREF=`pkg-config --variable=prefix x11` || true [ "$XPREF" == "" ] && XPREF='/usr/X11R6' # Where do we look for sources? SRCDIR=$(cd $(dirname $0); pwd) # Place to build (TMP) package (PKG) and output (OUTPUT) the program: TMP=${TMP:-/tmp/build} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} # Input URL: http://www4.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc2.tar.bz2 SOURCE[0]="$SRCDIR/${PRGNAM}-${VERSION}.tar.bz2" SRCURL[0]="http://www4.mplayerhq.hu/${PRGNAM}/releases/${PRGNAM}-${VERSION}.tar.bz2" # The default skin to use (we need to add at least one) SOURCE[1]="$SRCDIR/${DEFSKIN}-${SKINVER}.tar.bz2" SRCURL[1]="http://www.mplayerhq.hu/MPlayer/skins/${DEFSKIN}-${SKINVER}.tar.bz2" # Patches: SOURCE[2]="$SRCDIR/demux_audio_fix_20080129.diff" SRCURL[2]="http://www.mplayerhq.hu/MPlayer/patches/demux_audio_fix_20080129.diff" SOURCE[3]="$SRCDIR/demux_mov_fix_20080129.diff" SRCURL[3]="http://www.mplayerhq.hu/MPlayer/patches/demux_mov_fix_20080129.diff" SOURCE[4]="$SRCDIR/url_fix_20080120.diff" SRCURL[4]="http://www.mplayerhq.hu/MPlayer/patches/url_fix_20080120.diff" SOURCE[5]="$SRCDIR/stream_cddb_fix_20080120.diff" SRCURL[5]="http://www.mplayerhq.hu/MPlayer/patches/stream_cddb_fix_20080120.diff" ## ## --- with a little luck, you won't have to edit below this point --- ## ## # Exit the script on errors: set -e trap 'echo "$0 FAILED at line $LINENO!" | tee $OUTPUT/error-${PRGNAM}.log' ERR # Catch unitialized variables: set -u P1=${1:-1} # Slackware 11 and up need other option (gcc > 3.3.x) if [ $(gcc -dumpversion | tr -d '.' |cut -c 1-2) -gt 33 ]; then MOPT=tune else MOPT=cpu fi case "$ARCH" in i386) SLKCFLAGS="-O2 -march=i386 -m${MOPT}=i686" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; i486) SLKCFLAGS="-O2 -march=i486 -m${MOPT}=i686" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; s390) SLKCFLAGS="-O2" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; powerpc) SLKCFLAGS="-O2" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; x86_64) SLKCFLAGS="-O2 -fPIC" SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64" ;; athlon-xp) SLKCFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; esac # Create working directories: mkdir -p $TMP/tmp-$PRGNAM # location to build the source rm -rf $TMP/tmp-$PRGNAM/* # remove the remnants of previous build mkdir -p $PKG # place for the package to be built rm -rf $PKG/* # erase old package's contents mkdir -p $OUTPUT # place for the package to be saved # Source file availability: for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do if ! [ -f ${SOURCE[$i]} ]; then if ! [ "x${SRCURL[$i]}" == "x" ]; then # Check if the $SRCDIR is writable at all - if not, download to $OUTPUT [ -w "$SRCDIR" ] || SOURCE[$i]="$OUTPUT/$(basename ${SOURCE[$i]})" echo "Source '$(basename ${SOURCE[$i]})' not available yet..." echo "Will download file to $(dirname $SOURCE[$i])" wget -nv -T 20 -O "${SOURCE[$i]}" "${SRCURL[$i]}" || true if [ $? -ne 0 -o ! -s "${SOURCE[$i]}" ]; then echo "Downloading '$(basename ${SOURCE[$i]})' failed.. aborting the build." mv -f "${SOURCE[$i]}" "${SOURCE[$i]}".FAIL exit 1 fi else echo "File '$(basename ${SOURCE[$i]})' not available.. aborting the build." exit 1 fi fi done if [ "$P1" == "--download" ]; then echo "Download complete." exit 0 fi # --- PACKAGE BUILDING --- echo "++" echo "|| $PRGNAM-$VERSION" echo "++" # Warn about libdvdread requirement: if [ "$REMOVECSS" == "yes" ]; then cat <<-"EOT" ** ** Removing internal DECSS library. ** If you want to play encrypted DVD's you need to install libdvdcss separately. ** ** If you do not want to remove libdvdcss, then ** edit this SlackBuild script and change the line: ** REMOVECSS=${REMOVECSS:-"yes"} ** to: ** REMOVECSS="no" ** EOT sleep 2 fi cd $TMP/tmp-$PRGNAM echo "Extracting the source archive(s) for $PRGNAM..." tar -xjvf ${SOURCE[0]} chown -R root:root * chmod -R u+w,go+r-w,a-s * cd ${PRGNAM}-${VERSION} # Apply official security patches: ( cd libmpdemux ; patch -p0 < ${SOURCE[2]} ; cd .. cd libmpdemux ; patch -p0 < ${SOURCE[3]} ; cd .. cd stream ; patch -p0 < ${SOURCE[4]} ; cd .. cd stream ; patch -p0 < ${SOURCE[5]} ; cd .. ) 2>&1 | tee $OUTPUT/patch-$PRGNAM.log # Apply fix to let it build against kernel 2.6.24.x with the ivtv driver patch -p1 < $SRCDIR/ivtv_2.6.24.patch \ 2>&1 | tee -a $OUTPUT/patch-$PRGNAM.log # Remove potentially illegal dvdcss code (in which case, make sure you have # libdvdread installed before you start the compile!): [ "$REMOVECSS" == "yes" ] && DO_CSS="--disable-libdvdcss-internal" \ || DO_CSS=" " echo Building ... # MPlayer wants to automatically determine compiler flags, # so we don't provide CFLAGS: ./configure --prefix=/usr \ --mandir=/usr/man \ --confdir=/etc/mplayer \ --enable-runtime-cpudetection \ --enable-gui \ --enable-menu \ --enable-largefiles \ --disable-arts \ --codecsdir=${CODECSDIR} \ --win32codecsdir=${CODECSDIR} \ --realcodecsdir=${CODECSDIR} \ --language="${LANGUAGES}" \ ${DO_CSS} \ 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log # Install all the needed stuff to the package dir # Use installwatch if available, to produce a logfile of the installation # process that is more easily readable: if $(which installwatch > /dev/null 2>&1); then installwatch -o $OUTPUT/install-${PRGNAM}.log make DESTDIR=$PKG install else make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log fi # Prepare the configfile: mkdir -p $PKG/etc/mplayer cp etc/example.conf $PKG/etc/mplayer/mplayer.conf.new # Fix the .desktop file sed -i -e 's#^Icon=mplayer.xpm$#Icon=/usr/share/pixmaps/mplayer.xpm#' \ $PKG/usr/share/applications/mplayer.desktop # Install our default skin: cd $PKG/usr/share/mplayer/skins tar -xvf ${SOURCE[1]} chown -R root:root * ln -s ${DEFSKIN} default cd - # Add this to the doinst.sh: ! [ -d $PKG/install ] && mkdir -p $PKG/install cat <> $PKG/install/doinst.sh # Handle the incoming configuration files: config() { for infile in \$1; do NEW="\$infile" OLD="\`dirname \$NEW\`/\`basename \$NEW .new\`" # If there's no config file by that name, mv it over: if [ ! -r \$OLD ]; then mv \$NEW \$OLD elif [ "\`cat \$OLD | md5sum\`" = "\`cat \$NEW | md5sum\`" ]; then # toss the redundant copy rm \$NEW fi # Otherwise, we leave the .new copy for the admin to consider... done } # Installing a bitmap font is considered deprecated; use a TTF font instead. # We try to link to an installed TTF font at install time. # Configure a default TrueType font to use for the OSD : if [ ! -f usr/share/mplayer/subfont.ttf ]; then for font in ${OSDFONTS}; do if [ -f .${XPREF}/lib/X11/fonts/TTF/\${font} ]; then cd usr/share/mplayer/ ln -sf ${XPREF}/lib/X11/fonts/TTF/\${font} subfont.ttf cd - break fi done fi # Prepare the new configuration file config etc/mplayer/mplayer.conf.new EOINS # Add documentation: mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true cp -a $SRCDIR/$(basename $0) $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild # Only keep the docs for languages that we want: mv $PKG/usr/doc/$PRGNAM-$VERSION/HTML $PKG/usr/doc/$PRGNAM-$VERSION/html mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/HTML for i in $LANGUAGES; do [ -d $PKG/usr/doc/$PRGNAM-$VERSION/html/$i ] && \ mv $PKG/usr/doc/$PRGNAM-$VERSION/html/$i $PKG/usr/doc/$PRGNAM-$VERSION/HTML/ done rm -rf $PKG/usr/doc/$PRGNAM-$VERSION/html # Save a sample of all configuration files: for i in etc/*.conf ; do cp $i $PKG/usr/doc/$PRGNAM-$VERSION/`basename $i`-sample done # Save a transcript of all configured options for this specific build: if [ -n $OUTPUT/configure-${PRGNAM}.log ]; then cat $OUTPUT/configure-${PRGNAM}.log \ | sed -n "/^Config files successfully generated/,/^'config.h' and 'config.mak' contain your configuration options./p" \ > $PKG/usr/doc/$PRGNAM-$VERSION/${PRGNAM}.configuration fi # Finally; find $PKG/usr/doc -type f -exec chmod 644 {} \; # Compress the man page(s): if [ -d $PKG/usr/man ]; then find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \; for i in $(find $PKG/usr/man -type l -name "*.?") ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done fi # Strip binaries: cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true cd - # Add a package description: mkdir -p $PKG/install cat $SRCDIR/slack-desc > $PKG/install/slack-desc if [ -f $SRCDIR/doinst.sh ]; then cat $SRCDIR/doinst.sh >> $PKG/install/doinst.sh fi if [ -f $SRCDIR/slack-required ]; then cat $SRCDIR/slack-required > $PKG/install/slack-required fi # Build the package: cd $PKG makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.tgz 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log cd $OUTPUT md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.tgz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.tgz.md5 cd - cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txt if [ -f $PKG/install/slack-required ]; then cat $PKG/install/slack-required > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.dep fi # Clean up the extra stuff: if [ "$P1" = "--cleanup" ]; then rm -rf $TMP/tmp-$PRGNAM rm -rf $PKG fi # Warn about libdvdcss requirement (again): if [ "$REMOVECSS" == "yes" ]; then cat <<-"EOT" ** ** Internal DECSS library was not built. ** If you want to play encrypted DVD's you need to install libdvdcss separately. ** ** If you do not care about patent issues, ** and want to keep support for internal libdvdcss, then ** edit this SlackBuild script and change the line: ** REMOVECSS=${REMOVECSS:-"yes"} ** to: ** REMOVECSS="no" ** EOT fi