#!/bin/sh # $Id$ # Copyright (c) 2006 Eric Hameleers # ----------------------------------------------------------------------------- # # Slackware SlackBuild script # =========================== # By: Eric Hameleers # For: MPlayer # Descr: MPEG-4 digital video technology # URL: http://www.mplayerhq.hu/ # Needs: libdvdread > 0.9.6 # 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 # # Run 'sh SlackBuild --cleanup' to build a Slackware package. # The package (.tgz) plus descriptive .txt file are created in /tmp . # Install using 'installpkg'. # # ----------------------------------------------------------------------------- # --- INIT --- # Set initial variables: PRGNAM=MPlayer VERSION=${VERSION:-"1.0rc1"} ARCH=${ARCH:-"i486"} BUILD=${BUILD:-"4"} 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 at http://www.mplayerhq.hu/design7/dload.html SKINVER=${SKINVER:-"1.7"} 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="Arialuni.ttf arial.ttf DejaVuSans.ttf Vera.ttf" # MPlayer source contains 'libmpdvdkit2' for reading DVD's. But this also # contains a copy of libdvdcss which is considered illegal software in some # countries. # The SlackBuild removes this library before building MPlayer and links to # the external library libdvdread instead, 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 the # 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 dvdcss 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? CWD=`pwd` SRCDIR=`dirname $0` [ "${SRCDIR:0:1}" == "." ] && SRCDIR=${CWD}/${SRCDIR} # 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.0rc1.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" # Security fix: SOURCE[2]="$SRCDIR/asmrules_fix_20061231.diff" SRCURL[2]="http://www.mplayerhq.hu/MPlayer/patches/asmrules_fix_20061231.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} if [ ! -d $TMP/tmp-$PRGNAM ]; then mkdir -p $TMP/tmp-$PRGNAM # location to build the source elif [ "$P1" != "--oldbuild" ]; then # If the "--oldbuild" parameter is present, we keep # the old build files and continue; # By default we remove the remnants of previous build and continue: rm -rf $TMP/tmp-$PRGNAM/* fi if [ "$PKG" = "" -o "$PKG" = "/" ] ; then echo "Please provide a sane value for the variable 'PKG'." exit 1 elif [ ! -d $PKG ]; then mkdir -p $PKG # place for the package to be built else rm -rf $PKG/* # We always erase old package's contents: fi if [ ! -d $OUTPUT ]; then mkdir -p $OUTPUT # place for the package to be saved fi # --- 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 -O "${SOURCE[$i]}" "${SRCURL[$i]}" || true if [ $? -ne 0 ]; 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 echo -e "\n***\n*** You will need libdvdread installed if you want DVD support!!!\n***\n" sleep 2 fi cd $TMP/tmp-$PRGNAM echo "Extracting the source archive(s) for $PRGNAM..." tar -xjvf ${SOURCE[0]} cd ${PRGNAM}-${VERSION} chown -R root.root * chmod -R a-s,u+rw,go+r-w * # Fix a security problem: read http://www.debian.org/security/2006/dsa-1244 patch -p0 < ${SOURCE[2]} 2>&1 | tee $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" ] && rm -rf libmpdvdkit2 # --- BUILDING --- echo Building ... # MPlayer wants to automatically determine compiler flags, # so we don't provide CFLAGS: ./configure --prefix=/usr \ --confdir=/etc/mplayer \ --enable-runtime-cpudetection \ --enable-gui \ --enable-menu \ --enable-largefiles \ --with-codecsdir=${CODECSDIR} \ --with-win32libdir=${CODECSDIR} \ --language="${LANGUAGES}" \ 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 - # Installing a bitmap font is considered deprecated; use a TTF font instead: # Instead, we try to link to an installed TTF font at install time. #( cd $PKG/usr/share/mplayer/font # tar -xvf ${FONT} # ln -s font-arial-iso-8859-1/font-arial-${FONTSIZE}-iso-8859-1 font #) # 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 } # 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 # --- DOCUMENTATION --- mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true # 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 # Finally; chmod -R a-w $PKG/usr/doc/$PRGNAM-$VERSION/* # Compress the man page(s) cd $PKG/usr/man find . -type f -name "*.?" -exec gzip -9f {} \; for i in `find . -type l -name "*.?"` ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done cd - # Strip binaries find $PKG | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find $PKG | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true # --- OWNERSHIP, RIGHTS --- chmod -R o-w $PKG # --- 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 # --- BUILDING --- # Build the package: cd $PKG makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log cd $OUTPUT md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz.md5 cd - cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txt if [ -f $PKG/install/slack-required ]; then cat $PKG/install/slack-required > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.dep fi # --- CLEANUP --- # Clean up the extra stuff: if [ "$P1" = "--cleanup" ]; then rm -rf $TMP/tmp-$PRGNAM rm -rf $PKG fi