#!/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/' # # 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:-3} DOCS="AUTHORS ChangeLog Copyright LICENSE README DOCS/HTML DOCS/tech" CODECSDIR=/usr/lib/codecs # Where the WIN32 codecs are expected for instance DEFSKIN=Blue # Download more at http://www.mplayerhq.hu/design7/dload.html SKINVER=1.6 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} # 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/Blue-1.6.tar.bz2" ## ## --- 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 $PKG # Explode the package framework: if [ -f $SRCDIR/_$PRGNAM.tar.gz ]; then explodepkg $SRCDIR/_$PRGNAM.tar.gz fi cd $TMP/tmp-$PRGNAM # --- TARBALL EXTRACTION,PATCH,MODIFY --- echo "Extracting the source archive(s) for $PRGNAM..." tar -xjvf ${SOURCE[0]} || true if [ $? -ne 0 ]; then echo "Error in unpacking '${SOURCE[0]}!' Aborting..." exit $? fi cd ${PRGNAM}-${VERSION} # Remove potentially illegal dvdcss code (in which case, make sure you have # libdvdread installed before you start the compile!): [ "$REMOVECSS" == "yes" ] && rm -rf libmpdvdkit2 chown -R root.root * find . -perm 777 -exec chmod 755 {} \; find . -perm 666 -exec chmod 644 {} \; # --- BUILDING --- echo Building ... # MPlayer wants to automatically determine compiler flags: ./configure --prefix=/usr \ --confdir=/etc/mplayer \ --enable-runtime-cpudetection \ --enable-gui \ --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]} ln -s ${DEFSKIN} default ) # 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 usr/X11R6/lib/X11/fonts/TTF/\${font} ]; then ( cd usr/share/mplayer/ ln -sf /usr/X11R6/lib/X11/fonts/TTF/\${font} subfont.ttf ) 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) [ -d $PKG/usr/man ] && ( 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 ) # Strip binaries ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # --- 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) 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