#!/bin/bash # Version: 1.7 GSB Package SlackBuild. # Copyright (c) 2007,2008,2009 Darren 'Tadgy' Austin # Copyright (c) 2007,2008,2009 Steve Kennedy # All rights reserved. # # Licenced under the terms of the GNU General Public Licence version 3. # # 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. # Package variables. BUILD=1 VERSION=r19668 # Make sure we use a set libswscale from mplayer; the external dependency # is a trunk revision, and so checking out a set revision of ffmpeg may # sometimes cause it to fail building with later changes to libswcale LIBSWSCALE_VERSION=r29540 # List any packages here that are required to build this package. # The list is space seperated and case sensitive. REQUIRED_PACKAGES="freetype sdl zlib x264 libvorbis lame yasm" # Build variables. TAG=${TAG:-gsb} ARCH=${ARCH:-i486} TUNE=${TUNE:-i486} DISTRO=${DISTRO:-slackware} TMP=${TMP:-/tmp} PKGDEST=${PKGDEST:-$TMP} # Script variables. PKGNAME=$(basename $0 .SlackBuild) PKG=$TMP/package-$PKGNAME CWD=$(pwd) NOCLEANUP=0 FORCEBUILD=0 # Usage. function usage() { cat << EOF Usage: ${0##*/} [options] Options: --force The package will not be built if a package of the same name is already installed, or any of the packages required to build are missing. This option over-rides these checks and attempts a build anyway. --no-cleanup By default any temporary source, build and package directories will be deleted once the package is built. This option prevents those files from being removed. --help Show this help screen. EOF } # Parse command line arguments. while [ $# -gt 0 ]; do if [ "$1" = "-force" ] || [ "$1" = "--force" ]; then FORCEBUILD=1 shift elif [ "$1" = "-no-cleanup" ] || [ "$1" = "--no-cleanup" ]; then NOCLEANUP=1 shift elif [ "$1" = "-help" ] || [ "$1" = "--help" ]; then usage exit 0 else echo "${0##*/}: Unknown option: $1" exit 1 fi done # Package requirements and installation checks. [ "$FORCEBUILD" = "0" ] && { function check_installed() { ls -1 /var/log/packages | grep "^${1}-[^-]*-[^-]*-[^-]*$" >/dev/null 2>&1 return $? } check_installed "$PKGNAME" && { echo "${0##*/}: Remove installed '$PKGNAME' package before build." exit 1 } for REQ in $REQUIRED_PACKAGES; do check_installed "$REQ" || { echo "${0##*/}: Required package '$REQ' not installed." exit 1 } done } # SVN warning echo echo "*********************************************************************" echo "*** Warning: This package is built from a fixed svn source revision." echo "*********************************************************************" SOURCE="$CWD/${PKGNAME}-${VERSION}.tar.xz" # This function has been gratuitously stolen from Eric Hamleers # MPlayer.SlackBuild. :^) src_checkout() { # Determine the tarball extension: PEXT=$(echo "${1}" | sed -r -e 's/.*[^.].(tar.xz|tar.gz|tar.bz2|tgz).*/\1/') case "$PEXT" in "tar.xz") TARCOMP="J" ;; "tar.gz") TARCOMP="z" ;; "tgz") TARCOMP="z" ;; "tar.bz2") TARCOMP="j" ;; *) echo "Archive can only have extension 'tar.xz', '.tar.gz' '.tar.bz2' or '.tgz'" ; exit 1 ;; esac if [ "$(echo ${VERSION}|cut -c1)" == 'r' ]; then # revision instead of date REV=$(echo ${VERSION} | cut -c2-) SW_REV=$(echo ${LIBSWSCALE_VERSION} | cut -c2-) else REV="{${VERSION}}" SW_REV="{${LIBSWSCALE_VERSION}}" fi mkdir -p $PKGNAME-${VERSION} \ && cd $PKGNAME-${VERSION} \ && svn checkout --revision $REV svn://svn.mplayerhq.hu/ffmpeg/trunk . \ && ( rm -fr libswscale ; svn checkout --revision $SW_REV \ svn://svn.ffmpeg.org/mplayer/trunk/libswscale ./libswscale ) \ && find . -type d -name '.svn' -depth | xargs rm -rf \ && chown -R root:root . \ && cd .. \ && tar -${TARCOMP}cf ${1} ${PKGNAME}-${VERSION} || { rm -fr $PKGNAME-${VERSION} exit 1 } rm -rf ${PKGNAME}-${VERSION} } # Temporary space and package storage. mkdir -p $TMP rm -rf $PKG mkdir -p $PKG mkdir -p $PKG/install mkdir -p $PKGDEST # Grab from svn if file doesn't exist if [ ! -f ${SOURCE} ]; then echo "Source '$(basename ${SOURCE})' not available yet..." echo "Will checkout sources to $(dirname $SOURCE)" src_checkout ${SOURCE} || exit 1 fi; cd $TMP && rm -rf $PKGNAME-$VERSION && tar xf $CWD/$PKGNAME-$VERSION.tar.xz && cd $PKGNAME-$VERSION || exit 1 # Apply ARCH specific patches. if [ "$ARCH" = "i486" -o "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "x86_64" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "powerpc" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose fi # Fix permissions for building. chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; # Configure, Tuning, GCC and Make options. CONFIGURE_FLAGS=${GSB_CONFIGURE_FLAGS:-""} if [ "$ARCH" = "i486" -o "$ARCH" = "i586" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH -mtune=$TUNE"} LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then TUNE_CFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then TUNE_CFLAGS="-O2" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -fPIC"} LIBDIRSUFFIX="64" elif [ "$ARCH" = "powerpc" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"} fi EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""} MAKE_FLAGS=${GSB_MAKE_FLAGS:-""} # Configure. CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \ ./configure --prefix=/usr $CONFIGURE_FLAGS --arch=$ARCH \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --shlibdir=/usr/lib${LIBDIRSUFFIX} \ --mandir=/usr/man \ --enable-postproc \ --enable-pthreads \ --target-os=linux \ --enable-runtime-cpudetect \ --enable-shared \ --disable-static \ --enable-gpl \ --enable-libx264 \ --enable-libmp3lame \ --enable-libvorbis \ || exit 1 # Build and install. echo $VERSION > VERSION make $MAKE_FLAGS && make $MAKE_FLAGS DESTDIR=$PKG install || exit 1 # Fix x86_64 pkg-config files if [ "$ARCH" = "x86_64" ]; then for i in $PKG/usr/lib64/pkgconfig/*.pc ; do sed -i "s:/lib$:/lib64:g" $i ; done; fi; # For header compatibility (cd $PKG/usr/include ; ln -s libavcodec ffmpeg) # Strip debugging symbols. { find $PKG | xargs file | egrep "executable|shared object" | grep "ELF" | \ cut -d: -f1 | xargs strip --strip-unneeded ; } 2>/dev/null # Compress and fix manpage links. [ -e $PKG/usr/man ] && { find $PKG/usr/man -type f -name \*.? -exec gzip -9f {} \; find $PKG/usr/man -type l -name \*.? -printf \ "( cd '%h'; [ -e '%l.gz' ] && { rm -f '%f'; ln -sf '%l.gz' '%f.gz'; } );\n" | bash } # Deal with .info files. [ -e $PKG/usr/share/info ] && { mkdir -p $PKG/usr && mv $PKG/usr/share/info $PKG/usr || exit 1; rmdir -p $PKG/usr/share } [ -e $PKG/usr/info ] && { rm -f $PKG/usr/info/dir gzip -9 $PKG/usr/info/*.info } # Copy extra documentation into package. mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION cp -a COPYING* CREDITS Changelog README MAINTAINERS ./doc/*.txt \ $PKG/usr/doc/$PKGNAME-$VERSION ; find $PKG/usr/doc/$PKGNAME-$VERSION/ -type f -exec chmod 644 {} \; chown -R root:root $PKG/usr/doc/$PKGNAME-$VERSION # Package meta files for FILE in doinst.sh slack-desc slack-required slack-conflicts slack-suggests do [ -e $CWD/$FILE ] && { cat $CWD/$FILE >>$PKG/install/$FILE } done # Create the package cd $PKG makepkg -p -l y -c n $PKGDEST/$PKGNAME-${VERSION//-/_}-$ARCH-${BUILD}${TAG}.txz # Cleanup [ "$NOCLEANUP" = "0" ] && { rm -rf $PKG $TMP/$PKGNAME-$VERSION }