Your IP : 216.73.216.48
#!/bin/bash
# $Id: ffmpeg.SlackBuild,v 1.82 2016/07/07 12:46:21 root Exp root $
# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Eric Hameleers, Eindhoven, NL
# 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 <alien@slackware.com>
# For: ffmpeg
# Descr: software to record, convert and stream audio and video
# URL: http://ffmpeg.org/
# Needs: yasm (only compile-time)
# Changelog:
# 20070519-1: 19/May/2007 by Eric Hameleers <alien@slackware.com>
# * Initial build.
# Note that the version is set to the current date
# (using `date +%Y%d%m` output) when you build ffmpeg
# from source using this SlackBuild.
# You can override this behaviour by prepending a specific
# value for VERSION to the build command, like so:
# VERSION=20070519 ./ffmpeg.SlackBuild
# 20070612-1: 12/jun/2007 by Eric Hameleers <alien@slackware.com>
# * Update. Also, make sure that the script actually works
# for newer snapshots if they should be downloaded.
# 20071006-1: 06/oct/2007 by Eric Hameleers <alien@slackware.com>
# * Update. Added documentation of the included libraries.
# 20071209-1: 09/dec/2007 by Eric Hameleers <alien@slackware.com>
# * Update of ffmpeg snapshot plus several of the support libs.
# Re-added AMR libraries, added libgsm and 1394 (firewire)
# support, and messed up the SlackBuild script pretty good.
# Added a download function for checking out SVN/CVS snapshots,
# which can easily be expanded for multiple snapshots.
# 20080303-1: 03/mar/2008 by Eric Hameleers <alien@slackware.com>
# * Update of ffmpeg and x264 snapshots to their latest versions.
# Added dirac codec support. Internally use variable FFMPEG
# instead of VERSION to determine the version of ffmpeg to use
# (allows me to use a SVN revision number instead of timestamp).
# r14080-1: 05/aug/2008 by Eric Hameleers <alien@slackware.com>
# * Update of almost all composing libraries. The dirac reference
# implementation library was replaced by schroedinger.
# This version of the package includes shared libraries which
# allows other programs to link to avcodec.
# If you install yasm, the SlackBuild will be able to use a
# very recent version of the x264 library, else it will fallback
# to a version that compiles with Slackware's 'asm'.
# r16039-1: 09/dec/2008 by Eric Hameleers <alien@slackware.com>
# * Updated to the 20081209 snapshot. Also updated x264 and lame
# codecs, removed liba52 (because ffmpeg now has it's own native
# implementation) and added speex codec.
# r16043-1: 10/dec/2008 by Eric Hameleers <alien@slackware.com>
# * Update. Also updated libraw1394 & libdc1394 to their 2.x
# versions and made small adaptations so that the script actually
# produces working binaries on x86_64
# 0.5-1: 20/mar/2009 by Eric Hameleers <alien@slackware.com>
# * First new official release in ages. Add x264 presets to the
# package (idea borrowed from the script at slackbuilds.org).
# 0.5-2: 13/may/2009 by Eric Hameleers <alien@slackware.com>
# * Updates to faac/faad/schro
# r20056-1: 27/sep/2009 by Eric Hameleers <alien@slackware.com>
# * Update. AMR implementation from OpenCORE with a free license
# allows to add AMR support to the distributable package.
# Also updated the X264 snapshot and libgsm.
# r22900-1: 26/apr/2010 by Eric Hameleers <alien@slackware.com>
# * New snapshot. Updated the schroedinger codec, which is now
# on par speed-wise with the dirac codec. Also updated the x264
# snapshot (x264 can now produce blu-ray compliant video),
# and updated the lame and dc1394 versions. Added support for
# RTMP(E) - flash - streams through librtmp.
# r23357-1: 28/may/2010 by Eric Hameleers <alien@slackware.com>
# * New snapshot. Added libvpx plus patches for ffmpeg which
# enable support for WebM/VP8 (google-donated new video format).
# 0.6-1: 18/jun/2010 by Eric Hameleers <alien@slackware.com>
# * A stable release. The internal libvpx library was updated to
# 0.9.1 (no patching needed now), rtmpdump to 2.2e and x264
# to a recent snapshot.
# I also added VAAPI hardware acceleration support. Look further
# down in this script (in the header of the "make_libva" function)
# how you can benefit from GPU-accelerated encoding/decoding.
# 0.6.1-1: 02/feb/2011 by Eric Hameleers <alien@slackware.com>
# * I forgot to update to a newer stable release.
# Updated internal codecs where available.
# 0.6.3-1: 12/may/2011 by Eric Hameleers <alien@slackware.com>
# * Updated for Slackware 13.37.
# 0.8.2-1: 11/aug/2011 by Eric Hameleers <alien@slackware.com>
# * Update. Add opencore's new AMR-WB and AAC encoders created
# for Android by VisualOn: 'libvo-amrwnenc' and 'libvo-aacenc'.
# And updated every built-in support library to their latest
# version.
# 0.8.5-1: 07/oct/2011 by Eric Hameleers <alien@slackware.com>
# * New release. Also updated versions of internal vpx and x264
# libraries. Fix the compilation in case the x264 libraries are
# already installed on the system.
# 0.8.6-1: 08/nov/2011 by Eric Hameleers <alien@slackware.com>
# * New release. Also updated versions of internal lame, orc,
# x264 libraries.
# 0.8.7-1: 22/nov/2011 by Eric Hameleers <alien@slackware.com>
# * New release.
# 0.9-1: 13/dec/2011 by Eric Hameleers <alien@slackware.com>
# * New release. Added internal libass (subtitle) and v4l2 support.
# 0.10.2-1: 05/may/2012 by Eric Hameleers <alien@slackware.com>
# * New release.
# 0.10.3-1: 26/may/2012 by Eric Hameleers <alien@slackware.com>
# * Update.
# 0.11-1: 03/jun/2012 by Eric Hameleers <alien@slackware.com>
# * Update.
# 0.11.2-1: 27/sep/2012 by Eric Hameleers <alien@slackware.com>
# * Update.
# 1.1.2-1: 13/feb/2013 by Eric Hameleers <alien@slackware.com>
# * Update. Also updated many internal libraries.
# Added ogg opus decoder.
# 1.2-1: 13/apr/2013 by Eric Hameleers <alien@slackware.com>
# * Update.
# 2.1-1: 26/dec/2013 by Eric Hameleers <alien@slackware.com>
# * Update.
# 2.2.1-1: 02/may/2014 by Eric Hameleers <alien@slackware.com>
# * Update. Add teletext subtitle support.
# 2.4.3-1: 12/nov/2014 by Eric Hameleers <alien@slackware.com>
# * Update. Added fdk-aac codec by Android Open Source Project,
# and X.265 (HEVC) codec by Videolan project..
# 2.7.2-1: 07/sep/2015 by Eric Hameleers <alien@slackware.com>
# * Update. Also updated internal libraries: fdkaac, libass,
# libva, libvdpau, speex, x264, x265
# 2.8-1: 24/sep/2015 by Eric Hameleers <alien@slackware.com>
# * Update. Enabled SSL support (openssl in the non-free package,
# gnutls in the patent-free package).
# Updated internal libraries: libvpx, x264.
# 3.1.1-1: 06/jul/2016 by Eric Hameleers <alien@slackware.com>
# * Update. Updated internal libraries: opus, orc, v4l, vaapi,
# vpx, x264, x265.
# Support for libvo-aacenc was dropped from ffmpeg.
#
# Run 'sh ffmpeg.SlackBuild' to build a Slackware package.
# The package (.txz) plus descriptive .txt file are created in /tmp .
# Install using 'installpkg'.
#
# -----------------------------------------------------------------------------
# -- PATENT ALERT! --
# FFmpeg can be built with MP3 audio encoder (needed for FLV videos) and AAC
# audio encoder (used in MP4) but these libraries are 'contaminated'
# with patents from Fraunhofer, Apple etc.
# You can build these patended algorithms into ffmpeg, and if you are an
# ordinary end user, no one will bother you for using them.
# For the binaries based on this SlackBuild that I distribute, it is a
# different story. I am not allowed to distribute binary packages that
# incorporate non-free code. So here you go. My Slackware package was built
# with "USE_PATENTS=NO" i.e. without using the lame mp3 and aac libs.
#USE_PATENTS="NO"
USE_PATENTS=${USE_PATENTS:-"YES"}
# I don't care if the user says "no" or "NO":
USE_PATENTS=$(echo $USE_PATENTS | tr 'a-z' 'A-Z')
PRGNAM=ffmpeg
VERSION=${VERSION:-3.1.1}
BUILD=${BUILD:-1}
NUMJOBS=${NUMJOBS:--j7}
TAG=${TAG:-"alien"}
DOCS="COPYING* CREDITS Changelog MAINTAINERS README* \
doc/TODO doc/*.txt doc/*.html"
DOCS_AACPLUS="AUTHORS COPYING* ChangeLog NEWS README TODO"
DOCS_AMR="AUTHORS COPYING ChangeLog LICENSE NEWS README"
DOCS_AMRWBENC="AUTHORS COPYING ChangeLog LICENSE NEWS NOTICE README"
DOCS_ASS="COPYING Changelog"
DOCS_AVC1394="AUTHORS COPYING ChangeLog INSTALL NEWS README"
DOCS_DC1394="AUTHORS COPYING ChangeLog INSTALL NEWS README"
DOCS_FAAC="AUTHORS COPYING* ChangeLog NEWS README* TODO"
DOCS_FAAD2="AUTHORS COPYING* ChangeLog NEWS README* TODO"
DOCS_FDKAAC="ChangeLog NOTICE"
DOCS_FRIBIDI="AUTHORS COPYING ChangeLog NEWS README THANKS TODO"
DOCS_GSM="COPYRIGHT ChangeLog* INSTALL MACHINES MANIFEST README"
DOCS_LAME="API COPYING ChangeLog HACKING LICENSE README STYLEGUIDE TODO USAGE"
DOCS_LIBVA="COPYING"
DOCS_LIBZVBI="AUTHORS BUGS COPYING COPYING.LIB ChangeLog INSTALL NEWS README TODO"
DOCS_OPUS="AUTHORS COPYING ChangeLog NEWS README"
DOCS_ORC="COPYING README TODO"
DOCS_RAW1394="AUTHORS COPYING ChangeLog INSTALL NEWS README"
DOCS_RTMP="AUTHORS COPYING ChangeLog README"
DOCS_SCHROEDINGER="AUTHORS COPYING* NEWS TODO"
DOCS_SPEEX=" AUTHORS COPYING ChangeLog NEWS README* TODO"
DOCS_V4L2="COPYING* ChangeLog README* TODO"
DOCS_VDPAU="AUTHORS COPYING ChangeLog NEWS README"
DOCS_VPX="AUTHORS CHANGELOG LICENSE README"
DOCS_X264="AUTHORS COPYING"
DOCS_X265="AUTHORS COPYING"
# Support libraries:
AACPLUS=2.0.2
AMRWBENC=0.1.3
AMR=0.1.3
ASS=0.12.1
AVC1394=0.5.4
DC1394=2.1.2
FAAC=1.28
FAAD2=2.7
FDKAAC=0.1.4
FRIBIDI=0.19.6
GSM=1.0.13
LAME=3.99.5
LIBVA=1.6.2
LIBZVBI=0.2.35
OPUS=1.1.2
ORC=0.4.25
RAW1394=2.0.5
RTMP=2.3
SCHROEDINGER=1.0.11
SPEEX=1.2rc2
V4L=1.10.1
VDPAU=1.1.1
VPX=1.5.0
X264=20160706-2245
X265=1.9
# 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}
# Check for yasm, abort if not found:
if ! which yasm >/dev/null 2>&1 ; then
echo "##"
echo "## The 'yasm' program does not seem to be installed."
echo "## The X264/VP8 codec compilation needs yasm (nasm will not do)!"
echo "## Aborting the build."
echo "##"
exit 1
fi
# ---------------------------------------------------------------------------
# Source tarballs and source URLs.
# Sources which are not patented should have SRCPAT[n]="NO"
# Sources which are patented should have SRCPAT[n]="YES" which prevents then
# from being downloaded and used if we build a patent-free package.
# ---------------------------------------------------------------------------
# FFMPEG sources:
if [ "$VERSION" == "HEAD" ]; then
# We check out git's HEAD:
BRANCH="master"
GITURI=git://git.videolan.org/ffmpeg.git
SRCVER=$(date +%Y%m%d)
SRCURL[0]=""
elif [ "$(echo $VERSION | cut -c1-2)" == "20" ]; then
# We check out git at a specific date:
BRANCH="master"
GITURI=git://git.videolan.org/ffmpeg.git
SRCVER=$VERSION
SRCURL[0]=""
else
BRANCH=""
GITURI=""
SRCVER=$VERSION
SRCURL[0]="http://ffmpeg.org/releases/ffmpeg-${SRCVER}.tar.bz2"
fi
SOURCE[0]="$SRCDIR/ffmpeg-${SRCVER}.tar.bz2"
SRCPAT[0]="NO"
# Orc (oil runtime compiler) is a dependency for schroedinger
SOURCE[1]="$SRCDIR/orc-${ORC}.tar.xz"
SRCURL[1]="https://gstreamer.freedesktop.org/src/orc/orc-${ORC}.tar.xz"
SRCPAT[1]="NO"
# Dirac video codec support by schroedinger:
SOURCE[2]="$SRCDIR/schroedinger-${SCHROEDINGER}.tar.gz"
SRCURL[2]="http://www.diracvideo.org/download/schroedinger/schroedinger-${SCHROEDINGER}.tar.gz"
SRCPAT[2]="NO"
# SPEEX audio codec:
SOURCE[3]="$SRCDIR/speex-${SPEEX}.tar.gz"
SRCURL[3]="http://downloads.us.xiph.org/releases/speex/speex-${SPEEX}.tar.gz"
SRCPAT[3]="NO"
# X264 encoder - for H264/AVC video streams, for static linking
SOURCE[4]="$SRCDIR/x264-snapshot-${X264}.tar.bz2"
SRCURL[4]="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264}.tar.bz2"
SRCPAT[4]="NO"
# FAAD2 support:
SOURCE[5]="$SRCDIR/faad2-$FAAD2.tar.gz"
SRCURL[5]="http://downloads.sourceforge.net/faac/faad2-$FAAD2.tar.gz"
SRCPAT[5]="NO"
# GSM support:
SOURCE[6]="$SRCDIR/gsm-$GSM.tar.gz"
SRCURL[6]="http://osxwinebuilder.googlecode.com/files/gsm-$GSM.tar.gz"
SRCPAT[6]="NO"
# Lame is used for the audio in FLV videos; will statically link with ffmpeg
SOURCE[7]="$SRCDIR/lame-$LAME.tar.gz"
SRCURL[7]="http://downloads.sourceforge.net/lame/lame-$LAME.tar.gz"
SRCPAT[7]="YES"
# Library to support the AVC (Audio/Video Control) Digital Interface Command Set
SOURCE[8]="$SRCDIR/libavc1394-${AVC1394}.tar.gz"
SRCURL[8]="http://downloads.sourceforge.net/libavc1394/libavc1394-${AVC1394}.tar.gz"
SRCPAT[8]="NO"
# Library needed to control IEEE 1394 (firewire-) based cameras
SOURCE[9]="$SRCDIR/libraw1394-${RAW1394}.tar.gz"
SRCURL[9]="http://downloads.sourceforge.net/libraw1394/libraw1394-${RAW1394}.tar.gz"
SRCPAT[9]="NO"
SOURCE[10]="$SRCDIR/libdc1394-${DC1394}.tar.gz"
SRCURL[10]="http://downloads.sourceforge.net/libdc1394/libdc1394-${DC1394}.tar.gz"
SRCPAT[10]="NO"
# librtmp library, supporting RTMP streams
SOURCE[11]="$SRCDIR/rtmpdump-${RTMP}.tgz"
SRCURL[11]="http://rtmpdump.mplayerhq.hu/download/rtmpdump-${RTMP}.tgz"
SRCPAT[11]="NO"
# libvpx library, containing the VP8 codec
SOURCE[12]="$SRCDIR/libvpx-${VPX}.tar.bz2"
SRCURL[12]="http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-${VPX}.tar.bz2"
SRCPAT[12]="NO"
# Library supporting VAAPI (GPU-accelerated video playback interface)
SOURCE[13]="$SRCDIR/libva-${LIBVA}.tar.bz2"
SRCURL[13]="http://www.freedesktop.org/software/vaapi/releases/libva/libva-${LIBVA}.tar.bz2"
SRCPAT[13]="NO"
# AMR-WB encoder libraries used to encode 3GPP audio
SOURCE[14]="$SRCDIR/vo-amrwbenc-${AMRWBENC}.tar.gz"
SRCURL[14]="http://downloads.sourceforge.net/opencore-amr/vo-amrwbenc-${AMRWBENC}.tar.gz"
SRCPAT[14]="NO"
# AMR-NB de/encoder and WB decoder libraries used to de/encode 3GPP audio
SOURCE[15]="$SRCDIR/opencore-amr-${AMR}.tar.gz"
SRCURL[15]="http://downloads.sourceforge.net/opencore-amr/opencore-amr-${AMR}.tar.gz"
SRCPAT[15]="NO"
# FAAC library, for AAC (MP4 audio) encoding
SOURCE[16]="$SRCDIR/faac-$FAAC.tar.gz"
SRCURL[16]="http://downloads.sourceforge.net/faac/faac-$FAAC.tar.gz"
SRCPAT[16]="YES"
# Unicode BiDirectional algorithm library, requirement for libass.
SOURCE[17]="$SRCDIR/fribidi-${FRIBIDI}.tar.bz2"
SRCURL[17]="http://fribidi.org/download/fribidi-${FRIBIDI}.tar.bz2"
SRCPAT[17]="NO"
# Libass - portable library for SSA/ASS subtitles rendering
SOURCE[18]="$SRCDIR/libass-$ASS.tar.xz"
SRCURL[18]="https://github.com/libass/libass/releases/download/${ASS}/libass-$ASS.tar.xz"
SRCPAT[18]="NO"
# Collection of video4linux support libraries
SOURCE[19]="$SRCDIR/v4l-utils-${V4L}.tar.bz2"
SRCURL[19]="http://linuxtv.org/downloads/v4l-utils/v4l-utils-${V4L}.tar.bz2"
SRCPAT[19]="NO"
# opus codec:
SOURCE[20]="$SRCDIR/opus-${OPUS}.tar.gz"
SRCURL[20]="http://downloads.xiph.org/releases/opus/opus-${OPUS}.tar.gz"
SRCPAT[20]="NO"
# VDPAU for video hardware acceleration:
SOURCE[21]="$SRCDIR/libvdpau-${VDPAU}.tar.gz"
SRCURL[21]="http://people.freedesktop.org/~aplattner/vdpau/libvdpau-${VDPAU}.tar.gz"
SRCPAT[21]="NO"
# libzvbi for teletext subtitle processing:
SOURCE[22]="$SRCDIR/zvbi-${LIBZVBI}.tar.bz2"
SRCURL[22]="http://downloads.sourceforge.net/zapping/zvbi-${LIBZVBI}.tar.bz2"
SRCPAT[22]="NO"
# fdk-aac en/decoder from the Android Open Source Project (opencore-amr):
SOURCE[23]="$SRCDIR/fdk-aac-${FDKAAC}.tar.gz"
SRCURL[23]="http://downloads.sourceforge.net/opencore-amr/fdk-aac-${FDKAAC}.tar.gz"
SRCPAT[23]="YES"
# Videolan's HEVC (x265) codec:
SOURCE[24]="$SRCDIR/x265-${X265}.tar.gz"
SRCURL[24]="http://github.com/videolan/x265/archive/${X265}.tar.gz"
SRCPAT[24]="NO"
## HE-AAC+ v2 shared library:
#SOURCE[XX]="$SRCDIR/libaacplus-$AACPLUS.tar.gz"
#SRCURL[XX]="http://tipok.ath.cx/downloads/media/aac+/libaacplus/libaacplus-${AACPLUS}.tar.gz"
#SRCPAT[XX]="YES"
#
## HE-AAC+ v2 reference implementation:
#SOURCE[XX]="$SRCDIR/26410-800.zip"
#SRCURL[XX]="http://www.3gpp.org/ftp/Specs/archive/26_series/26.410/26410-800.zip"
#SRCPAT[XX]="YES"
# Use the src_checkout() function if no downloadable tarball exists.
# This function checks out sources from SVN/CVS and creates a tarball of them.
src_checkout() {
# Param #1 : index in the SOURCE[] array.
# Param #2 : full path to where SOURCE[$i] tarball should be created.
# Determine the tarball extension:
PEXT=$(echo "${2}" | 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
case ${1} in
0) # ffmpeg-${VERSION}
mkdir ${PRGNAM}_temp_checkout_$$ \
&& cd ${PRGNAM}_temp_checkout_$$
if [ "$VERSION" = "HEAD" ]; then
# Checkout without downloading version history (fast!):
echo "Checking out HEAD from '$GITURI':"
git clone --depth=1 ${GITURI} ${PRGNAM}-${SRCVER}
else
# Checkout code from a certain branch and/or date; this will take a
# long time because we have to clone the complete git-repository first:
echo "Checking out $BRANCH at date $SRCVER from '$GITURI':"
git clone ${GITURI} ${PRGNAM}-${SRCVER} \
&& cd ${PRGNAM}-${SRCVER} \
&& git checkout $BRANCH \
&& git checkout $(git rev-list -n 1 --before="`date -d $SRCVER`" $BRANC
H) \
&& cd ..
fi
chown -R root:root . \
&& tar --exclude .git -${TARCOMP}cf ${2} ${PRGNAM}-${SRCVER}
cd ..
rm -rf ${PRGNAM}_temp_checkout_$$
# If VERSION was "HEAD" we still want a date to appear in the pkgname:
VERSION=${SRCVER}
;;
13) # We clone the git of libvpx at a certain date:
mkdir libvpx-${VPX} \
&& cd libvpx-${VPX} \
&& git clone git://review.webmproject.org/libvpx.git . \
&& git checkout $(git rev-list -n 1 --before="`date -d $VPX`" master) \
&& chown -R root:root . \
&& cd .. \
&& tar --exclude .git -${TARCOMP}cf ${2} libvpx-${VPX}
rm -rf libvpx-${VPX}
;;
*) # Do nothing
;;
esac
}
if [ "${USE_PATENTS}" == "YES" ]; then
echo ""
echo "**"
echo "** This build uses patented code (MP3 and AAC encoders)"
echo "** Run the command 'USE_PATENTS=NO $0 $*' to avoid patent issues."
echo "**"
echo ""
sleep 1
fi
##
## --- with a little luck, you won't have to edit below this point --- ##
##
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
case "$MARCH" in
i?86) export ARCH=i486 ;;
armv7hl) export ARCH=$MARCH ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$MARCH ;;
esac
fi
case "$ARCH" in
i486) SLKCFLAGS="-O2 -march=i486 -mtune=i686"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
x86_64) SLKCFLAGS="-O2 -fPIC"
SLKLDFLAGS="-L/usr/lib64 -fPIC"; LIBDIRSUFFIX="64"
;;
arm*) SLKCFLAGS="-O2 -march=armv5te"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
armv7hl) SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
*) SLKCFLAGS="-O2"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
esac
case "$ARCH" in
arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
*) TARGET=$ARCH-slackware-linux ;;
esac
# 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}
# Save old umask and set to 0022:
_UMASK_=$(umask)
umask 0022
# Create working directories:
mkdir -p $TMP/tmp-$PRGNAM # location to build the source
if [ "$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/* $OUTPUT/*${PRGNAM}*.log
fi
mkdir -p $PKG # place for the package to be built
rm -rf $PKG/* # We always erase old package's contents:
mkdir -p $OUTPUT # place for the package to be saved
# Source file availability:
# Regular URL downloads follow:
for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do
# Only download patented code if we are allowing it:
if [ "${USE_PATENTS}" == "YES" -o "${SRCPAT[$i]}" != "YES" ]; then
if ! [ -f ${SOURCE[$i]} ]; then
echo "Source '$(basename ${SOURCE[$i]})' not available yet..."
# Check if the $SRCDIR is writable at all - if not, download to $OUTPUT
[ -w "$SRCDIR" ] || SOURCE[$i]="$OUTPUT/$(basename ${SOURCE[$i]})"
if ! [ "x${SRCURL[$i]}" == "x" ]; then
echo "Will download file to $(dirname $SOURCE[$i])"
if ! $(wget --no-check-certificate -nv -T 20 -O "${SOURCE[$i]}" "${SRCURL[$i]}"); then
echo "Downloading '$(basename ${SOURCE[$i]})' failed.. aborting the build."
mv -f "${SOURCE[$i]}" "${SOURCE[$i]}".FAIL
exit 1
fi
else
# Try if we have a SVN/CVS download routine for ${SOURCE[$i]}
echo "Will checkout sources to $(dirname $SOURCE[$i])"
src_checkout $i "${SOURCE[$i]}"
fi
if [ ! -f "${SOURCE[$i]}" -o ! -s "${SOURCE[$i]}" ]; then
echo "File '$(basename ${SOURCE[$i]})' not available.. aborting the build."
exit 1
fi
fi
fi
done
if [ "$P1" == "--download" ]; then
echo "Download complete."
exit 0
fi
# --- PACKAGE BUILDING ---
echo "++"
echo "|| $PRGNAM-$VERSION"
echo "++"
cd $TMP/tmp-$PRGNAM
if [ "$P1" != "--oldbuild" ]; then
echo "Extracting the source archive(s) for $PRGNAM..."
for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do
# Only extract patented code if we are allowing it:
if [ "${USE_PATENTS}" == "YES" -o "${SRCPAT[$i]}" != "YES" ]; then
if $(file ${SOURCE[$i]} | grep -qi ": zip"); then
unzip ${SOURCE[$i]}
else
tar -xvf ${SOURCE[$i]}
fi
fi
done
fi
chown -R root:root *
chmod -R u+w,go+r-w,a+X-s *
# --- BUILDING ---
echo Building ...
# We will be installing static libs into the following directory:
# (when linking ffmpeg together, these libs will be found & used)
mkdir -p $TMP/tmp-$PRGNAM/ffmpegdeps/usr/{bin,include,lib,man}
FFMPEGDEPSDIR="$TMP/tmp-$PRGNAM/ffmpegdeps"
# -----------------------------------------------------------------------------
# Compile lame libraries
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_lame()
{
echo -e "**\n** lame ...\n**"
cd $TMP/tmp-$PRGNAM/lame-${LAME}
# Fix compilation on x86 (xmmintrin.h error: inlining failed)
cat $SRCDIR/patches/lame_x86-xmmintrin.patch | patch -p1 --verbose \
2>&1 | tee $OUTPUT/patch-${PRGNAM}_lame.log
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_lame.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_lame.log
# Install lame into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_lame.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/lame
cp -a $DOCS_LAME $FFMPEGDEPSDIR/doc/lame/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile amr wideband/narrowband library
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_amr()
{
echo -e "**\n** amr ...\n**"
cd $TMP/tmp-$PRGNAM/opencore-amr-${AMR}
LDFLAGS="$SLKLDFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--localstatedir=/var \
--sysconfdir=/etc \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_amr.log
make $NUMJOBS 2>&1 | tee $OUTPUT/make-${PRGNAM}_amr.log
make install DESTDIR=$FFMPEGDEPSDIR PREFIX=/usr LIBDIR=/usr/lib${LIBDIRSUFFIX} \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_amr.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/amr
cp -a $DOCS_AMR $FFMPEGDEPSDIR/doc/amr || true
cd -
}
# -----------------------------------------------------------------------------
# Compile VisualOn amr wideband encoder library
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_amrwbenc()
{
echo -e "**\n** amrwbenc ...\n**"
cd $TMP/tmp-$PRGNAM/vo-amrwbenc-${AMRWBENC}
LDFLAGS="$SLKLDFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--localstatedir=/var \
--sysconfdir=/etc \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_amrwbenc.log
make $NUMJOBS 2>&1 | tee $OUTPUT/make-${PRGNAM}_amrwbenc.log
make install DESTDIR=$FFMPEGDEPSDIR PREFIX=/usr LIBDIR=/usr/lib${LIBDIRSUFFIX} \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_amrwbenc.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/amrwbenc
cp -a $DOCS_AMRWBENC $FFMPEGDEPSDIR/doc/amrwbenc || true
cd -
}
# -----------------------------------------------------------------------------
# Compile fdk-aac library
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_fdkaac()
{
echo -e "**\n** fdkaac ...\n**"
cd $TMP/tmp-$PRGNAM/fdk-aac-${FDKAAC}
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_fdkaac.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_fdkaac.log
# Install fdkaac into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_fdkaac.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/fdkaac
cp -a $DOCS_FDKAAC $FFMPEGDEPSDIR/doc/fdkaac || true
cd -
}
# -----------------------------------------------------------------------------
# Compile x265 library
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_x265()
{
echo -e "**\n** x265 ...\n**"
PREVDIR=$(pwd)
cd $TMP/tmp-$PRGNAM/x265-${X265}
mkdir -p build_x265
cd build_x265
cmake ../source \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_LDFLAGS:STRING="$SLKLDFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLIB_INSTALL_DIR=lib${LIBDIRSUFFIX} \
-DENABLE_SHARED=OFF \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_x265.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_x265.log
# Install x265 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_x265.log
cd -
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/x265
cp -a $DOCS_X265 $FFMPEGDEPSDIR/doc/x265 || true
cd $PREVDIR
}
# -----------------------------------------------------------------------------
# Compile aacplus library
# The ffmpeg will use this
# -----------------------------------------------------------------------------
make_aacplus ()
{
echo -e "**\n** aacplus ...\n**"
cd $TMP/tmp-$PRGNAM/libaacplus-${AACPLUS}
# This needs the sources of the HE-AAC+ reference implementation:
cp $SRCDIR/26410-800.zip src/
[ ! -x configure ] && autoreconf -vif
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_aacplus.log
# Do not use parallel make here:
make 2>&1 | tee $OUTPUT/make-${PRGNAM}_aacplus.log
# Install aacplus into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_aacplus.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/aacplus
cp -a $DOCS_AACPLUS $FFMPEGDEPSDIR/doc/aacplus || true
cd -
}
# -----------------------------------------------------------------------------
# Compile dc1394, avc1394 and raw1394 libraries
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_1394()
{
echo -e "**\n** 1394 ...\n**"
OLDDIR=$(pwd)
cd $TMP/tmp-$PRGNAM/libraw1394-${RAW1394}
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_raw1394.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_raw1394.log
# Install libraw1394 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_raw1394.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/libraw1394
cp -a $DOCS_RAW1394 $FFMPEGDEPSDIR/doc/libraw1394 || true
echo -e "**\n**"
cd $TMP/tmp-$PRGNAM/libavc1394-${AVC1394}
CFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
CPPFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
LIBRAW1394_CFLAGS="-I$FFMPEGDEPSDIR/usr/include" \
LIBRAW1394_LIBS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} -lraw1394" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_avc1394.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_avc1394.log
# Install libavc1394 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_avc1394.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/libavc1394
cp -a $DOCS_AVC1394 $FFMPEGDEPSDIR/doc/libavc1394 || true
echo -e "**\n**"
cd $TMP/tmp-$PRGNAM/libdc1394-${DC1394}
# Make sure that the static libraw1394 is found in the ffmpegdeps:
CFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
CPPFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--disable-examples \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_dc1394.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_dc1394.log
# Install libdc1394 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_dc1394.log
# Fix the pkgconfig file to get rid of unresolved symbols at runtime:
sed -i -e "/^Libs:/s/$/ -lavc1394 -lraw1394/" $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig/libdc1394-2.pc
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/libdc1394
cp -a $DOCS_DC1394 $FFMPEGDEPSDIR/doc/libdc1394 || true
cd $OLDDIR
}
# -----------------------------------------------------------------------------
# Compile faac library
# The ffmpeg will use these
# -----------------------------------------------------------------------------
make_faac()
{
echo -e "**\n** faac ...\n**"
cd $TMP/tmp-$PRGNAM/faac-${FAAC}
# Newer gcc/glibc will bail out otherwise:
cat $SRCDIR/patches/faac_gcc44.diff | patch -p1 --verbose \
2>&1 | tee $OUTPUT/patch-${PRGNAM}_faac.log
#sh bootstrap
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--with-mp4v2 \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_faac.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_faac.log
# Install faac into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_faac.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/faac
cp -a $DOCS_FAAC $FFMPEGDEPSDIR/doc/faac || true
cd -
}
# -----------------------------------------------------------------------------
# Compile faad2
# -----------------------------------------------------------------------------
make_faad2()
{
echo -e "**\n** faad2 ...\n**"
#mv $TMP/tmp-$PRGNAM/faad2 $TMP/tmp-$PRGNAM/faad2-${FAAD2}
cd $TMP/tmp-$PRGNAM/faad2-${FAAD2}
#autoreconf -vif
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--without-xmms \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_faad2.log
# No longer available:
#--with-mp4v2 \
# Gives errors "faad bitstream value not allowed by specification":
#--with-drm \
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_faad2.log
# Install faad2 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_faad2.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/faad2
cp -a $DOCS_FAAD2 $FFMPEGDEPSDIR/doc/faad2 || true
cd -
}
# -----------------------------------------------------------------------------
# Compile speex codec
# -----------------------------------------------------------------------------
make_speex()
{
echo -e "**\n** speex ...\n**"
cd $TMP/tmp-$PRGNAM/speex-$SPEEX
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_speex.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_speex.log
# Install speex into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_speex.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/speex/
cp $DOCS_SPEEX $FFMPEGDEPSDIR/doc/speex/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile x264
# -----------------------------------------------------------------------------
make_x264()
{
echo -e "**\n** x264 ...\n**"
if [ "$ARCH" = "x86_64" ]; then
ARCHOPTS="--enable-pic"
else
ARCHOPTS=""
fi
cd $TMP/tmp-$PRGNAM/x264-snapshot-${X264}
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-cli \
$ARCHOPTS \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_x264.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_x264.log
# Install x264 into a temp location so ffmpeg can pickup the library
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_x264.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/x264
cp -a $DOCS_X264 $FFMPEGDEPSDIR/doc/x264 || true
cd -
}
# -----------------------------------------------------------------------------
# Compile gsm
# -----------------------------------------------------------------------------
make_gsm()
{
echo -e "**\n** gsm ...\n**"
GSMMAJ=$(echo $GSM | cut -d. -f1,2)
GSMPL=$(echo $GSM | cut -d. -f3)
mv $TMP/tmp-$PRGNAM/gsm-${GSMMAJ}-pl${GSMPL} $TMP/tmp-$PRGNAM/gsm-${GSM}
cd $TMP/tmp-$PRGNAM/gsm-${GSM}
# Without this, x86_64 builds will fail:
sed -i -e "/^CCFLAGS/s,-O2 ,$SLKCFLAGS ," \
-e "s,^# LDFLAGS.*,LDFLAGS = $SLKLDFLAGS," Makefile
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_gsm.log
# Install gsm into a temp location so ffmpeg can pickup the library
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_gsm.log
mkdir -p $FFMPEGDEPSDIR/usr/{bin,include/gsm,lib${LIBDIRSUFFIX}}
cp bin/* $FFMPEGDEPSDIR/usr/bin/
cp inc/gsm.h $FFMPEGDEPSDIR/usr/include/gsm/
ln -sf gsm/gsm.h $FFMPEGDEPSDIR/usr/include/gsm.h
cp lib/* $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/gsm
cp -a $DOCS_GSM $FFMPEGDEPSDIR/doc/gsm || true
cd -
}
# -----------------------------------------------------------------------------
# Compile orc
# -----------------------------------------------------------------------------
make_orc()
{
echo -e "**\n** orc ...\n**"
cd $TMP/tmp-$PRGNAM/orc-$ORC
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_orc.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_orc.log
# Install orc into a temp location so schroedinger can pickup the library
echo -e "\n**\n**\n"
# We used --prefix=$FFMPEGDEPSDIR/usr so that schroedinger's build will find the
# headers in the $FFMPEGDEPSDIR instead of the filesystem root:
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_orc.log
# Add DOCS to the ffmpeg deps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/orc/
cp ${DOCS_ORC} $FFMPEGDEPSDIR/doc/orc/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile schroedinger
# -----------------------------------------------------------------------------
make_schroedinger()
{
echo -e "**\n** schroedinger ...\n**"
if [ "$ARCH" = "x86_64" ]; then
ARCHOPTS="--with-pic"
else
ARCHOPTS=""
fi
cd $TMP/tmp-$PRGNAM/schroedinger-$SCHROEDINGER
# Do not try to build the testsuite, it gives errors about multiple definitions:
cat $SRCDIR/patches/schroedinger_notests.patch | patch -p1 --verbose \
2>&1 | tee $OUTPUT/patch-${PRGNAM}_schroedinger.log
# Because of the patch, run autoreconf:
autoreconf -vif
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
$ARCHOPTS \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_schroedinger.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_schroedinger.log
# Install schroedinger into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_schroedinger.log
# Or else the ffmpeg build wil fail:
cp schroedinger.pc \
$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig/schroedinger.pc
cp schroedinger.pc \
$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig/schroedinger-1.0.pc
( cd $FFMPEGDEPSDIR/usr/include
ln -sf schroedinger-1.0/schroedinger
)
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/schroedinger/
cp -a $DOCS_SCHROEDINGER $FFMPEGDEPSDIR/doc/schroedinger/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile rtmpdump
# -----------------------------------------------------------------------------
make_rtmp()
{
echo -e "**\n** rtmp ...\n**"
cd $TMP/tmp-$PRGNAM/rtmpdump-$RTMP
make -C librtmp prefix=/usr OPT="$SLKCFLAGS" all librtmp.pc \
2>&1 | tee $OUTPUT/make-${PRGNAM}_rtmp.log
# Install librtmp into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
mkdir -p $FFMPEGDEPSDIR/usr/{include/librtmp,lib${LIBDIRSUFFIX}/pkgconfig}
cp -a librtmp/librtmp.a $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}
cp -a librtmp/{amf.h,http.h,log.h,rtmp.h} $FFMPEGDEPSDIR/usr/include/librtmp
cp -a librtmp/librtmp.pc $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/rtmp/
cp -a $DOCS_RTMP $FFMPEGDEPSDIR/doc/rtmp/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile libvdpau
# -----------------------------------------------------------------------------
make_vdpau()
{
echo -e "**\n** vdpau ...\n**"
cd $TMP/tmp-$PRGNAM/libvdpau-$VDPAU
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-documentation \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_vdpau.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_vdpau.log
# Strip the static lib to prevent linking errors in 64-bit,
find . -name "*.a" | xargs strip --strip-unneeded
# Install vdpau into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_vdpau.log
# Remove the .so and .la files; we want static linking:
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libvdpau*.so*
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libvdpau*.la
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/vdpau/libvdpau*.so*
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/vdpau/libvdpau*.la
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/vdpau/
cp $DOCS_VDPAU $FFMPEGDEPSDIR/doc/vdpau/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile VP8
# -----------------------------------------------------------------------------
make_vpx()
{
echo -e "**\n** vpx ...\n**"
cd $TMP/tmp-$PRGNAM/libvpx-${VPX}
case "$ARCH" in
i?86)
ARCHOPTS="--target=x86-linux-gcc"
;;
x86_64)
ARCHOPTS="--target=${ARCH}-linux-gcc --enable-pic"
;;
armv7hl)
ARCHOPTS="--target=armv7-linux-gcc --enable-pic"
cat $SRCDIR/patches/libvpx_fix-armhf-link.patch | patch -p1 --verbose
export AS=as
export AR=ar
export CROSS="${TARGET}-"
;;
arm*)
ARCHOPTS="--target=armv5te-linux-gcc --enable-pic"
export AS=as
export AR=ar
export CROSS="${TARGET}-"
;;
*)
ARCHOPTS="--target=${ARCH}-linux-gcc"
;;
esac
CFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
CXXFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--disable-examples \
--disable-debug-libs \
--disable-debug \
--disable-unit-tests \
--enable-postproc \
--enable-runtime-cpu-detect \
--enable-vp8 \
--enable-vp9 \
--enable-vp9-postproc \
$ARCHOPTS \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_vpx.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_vpx.log
# Install libvpx into a temp location so ffmpeg can pickup the library
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_vpx.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/vpx
cp -a $DOCS_VPX $FFMPEGDEPSDIR/doc/vpx/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile libva
# -----------------------------------------------------------------------------
make_libva()
{
echo -e "**\n** libva ...\n**"
cd $TMP/tmp-$PRGNAM/libva-$LIBVA
#
# == NOTE ON VAAPI ==
#
# VAAPI can enable hardware accelerated playback for MPEG-2/4, H.264/AVC
# and VC-1 video on certain graphics hardware.
# The VAAPI support in this ffmeeg package depends on VA drivers that you have
# to install yourself for your specific hardware. The drivers should go into
# directory /usr/lib${LIBDIRSUFFIX}/va/drivers .
# If you install my libva package you can get MPEG-2 hardware acceleration on
# Intel graphics. If you additionally install my vdpau-video package, then you
# get hardware acceleration on Nvidia graphics (with nvidia's binary driver).
# If you own an Ati card and use the fglrx driver, then you can achieve
# hardware acceleration by installing the xvba-video driver from here:
# http://www.splitted-desktop.com/~gbeauchesne/xvba-video/ (since I do not own
# Ati hardware I can not build a package for xvba-video myself)
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-dummy-driver \
--enable-shared \
--enable-static \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_libva.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_libva.log
# Strip the static lib to prevent linking errors in 64-bit,
find . -name "*.a" | xargs strip --strip-unneeded
# Install libva into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install DESTDIR=$FFMPEGDEPSDIR \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_libva.log
# Remove the .so and .la files; we want static linking (but still use
# the drivers in $(libdir)/va/drivers):
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libva*.so*
rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libva*.la
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/libva
cp -a $DOCS_LIBVA $FFMPEGDEPSDIR/doc/libva/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile fribidi
# -----------------------------------------------------------------------------
make_fribidi()
{
echo -e "**\n** fribidi ...\n**"
cd $TMP/tmp-$PRGNAM/fribidi-$FRIBIDI
if [ "$ARCH" = "x86_64" ]; then
ARCHOPTS="--with-pic"
else
ARCHOPTS=""
fi
# Allow for internal use of the library:
cat $SRCDIR/patches/fribidi.patch | patch -p1 --verbose \
2>&1 | tee $OUTPUT/patch-${PRGNAM}_fribidi.log
# And since we patched the Makefile.am we have to bootstrap:
rm -f configure
./bootstrap
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
$ARCHOPTS \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_fribidi.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_fribidi.log
# Install fribidi into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_fribidi.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/fribidi
cp -a $DOCS_FRIBIDI $FFMPEGDEPSDIR/doc/fribidi/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile libass
# -----------------------------------------------------------------------------
make_ass()
{
echo -e "**\n** ass ...\n**"
cd $TMP/tmp-$PRGNAM/libass-$ASS
CFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
CXXFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_ass.log
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_ass.log
# Install libass into a temp location so ffmpeg can pickup the library
echo -e "\n**\n**\n"
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_ass.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/libass
cp -a $DOCS_ASS $FFMPEGDEPSDIR/doc/libass/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile v4l libraries
# -----------------------------------------------------------------------------
make_v4l()
{
echo -e "**\n** v4l ...\n**"
cd $TMP/tmp-$PRGNAM/v4l-utils-${V4L}
mkdir ${FFMPEGDEPSDIR}/etc
export CFLAGS="$SLKCFLAGS"
export CPPFLAGS="$SLKCFLAGS"
export LDFLAGS="$SLKLDFLAGS -ljpeg"
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--with-udevdir=/lib/udev \
--enable-static \
--disable-shared \
--disable-libdvbv5 \
--enable-libv4l \
--disable-v4l-utils \
--disable-qv4l2 \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_v4l.log
make ${NUMJOBS} LINKTYPE=static 2>&1 | tee $OUTPUT/make-${PRGNAM}_v4l.log
# Strip the static lib to prevent linking errors in 64-bit,
# and fix the pkg-config file (to fix unresolved symbols)
find . -name "*.a" | xargs strip --strip-unneeded
sed -i "/^Libs: /s/$/ -lv4l2 -lv4lconvert -ljpeg/" lib/libv4l1/libv4l1.pc
sed -i "/^Libs: /s/ -lv4l2/ -lv4l2 -lv4lconvert -ljpeg/" lib/libv4l2/libv4l2.pc
# Install libv4l into a temp directory so that ffmpeg can pick it up later:
make install LINKTYPE=static \
sysconfdir=$FFMPEGDEPSDIR/etc \
man1dir=$FFMPEGDEPSDIR/usr/man/man1 \
keytablesystemdir=$FFMPEGDEPSDIR/lib/udev/rc_keymaps \
udevrulesdir=$FFMPEGDEPSDIR/lib/udev/rules.d \
2>&1 | tee -a $OUTPUT/make-${PRGNAM}_v4l.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/v4l-utils
cp -a $DOCS_V4L2 $FFMPEGDEPSDIR/doc/v4l-utils/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile ogg opus libraries
# -----------------------------------------------------------------------------
make_opus()
{
echo -e "**\n** opus ...\n**"
cd $TMP/tmp-$PRGNAM/opus-${OPUS}
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--disable-doc \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_opus.log
# Install opus into a temp location so ffmpeg can pickup the library
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_opus.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/opus/
cp $DOCS_OPUS $FFMPEGDEPSDIR/doc/opus/ || true
cd -
}
# ----------------------------------------------------------------------------
# Compile libzvbi, a library that allows ffmpeg to process teletext subtitles
# ----------------------------------------------------------------------------
make_zvbi()
{
echo -e "**\n** zvbi ...\n**"
cd $TMP/tmp-$PRGNAM/zvbi-${LIBZVBI}
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="$SLKLDFLAGS" \
./configure \
--prefix=$FFMPEGDEPSDIR/usr \
--libdir=$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} \
--enable-static \
--disable-shared \
--program-prefix= \
--program-suffix= \
--build=$TARGET \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_zvbi.log
make 2>&1 | tee $OUTPUT/make-${PRGNAM}_zvbi.log
# Install zvbi into a temp location so ffmpeg can pickup the library
make install 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_zvbi.log
# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later:
mkdir -p $FFMPEGDEPSDIR/doc/zvbi/
cp $DOCS_LIBZVBI $FFMPEGDEPSDIR/doc/zvbi/ || true
cd -
}
# -----------------------------------------------------------------------------
# Compile ffmpeg with additional support for -
# LAME (MP3), XVID, AAC (MP4), FAAD2 , SPEEX, X264, GSM, SCHROEDINGER
# -----------------------------------------------------------------------------
make_ffmpeg()
{
echo -e "**\n** ffmpeg ...\n**"
OLDDIR=$(pwd)
cd $TMP/tmp-$PRGNAM
# Take care of snaphot directory:
if [ -d ffmpeg-export-* ]; then
rm -rf ffmpeg-${VERSION}
mv ffmpeg-export-* ffmpeg-${VERSION}
fi
# Only use non-free code if we are allowing it:
if [ "${USE_PATENTS}" == "YES" ]; then
USE_NONFREE="--enable-libmp3lame \
--enable-libfaac \
--enable-libfdk-aac \
--enable-openssl \
--enable-nonfree"
# to be added once I get it to work: --enable-libaacplus \
else
USE_NONFREE="--enable-gnutls"
fi
cd $TMP/tmp-$PRGNAM/ffmpeg-${VERSION}
if [ "$ARCH" = "x86_64" ]; then
ARCHOPTS="--arch=x86_64 --enable-pic"
else
ARCHOPTS=""
fi
# Fix SDL header location:
sed -e '/#include/ s,<SDL,<SDL/SDL,' -i ffplay.c
# Or else orc's library will not be used in the static linking (orc is listed
# as a private lib for schroedinger):
sed -i -e "s/pkg_config --libs/pkg_config --static --libs/" \
configure
# Stamp the version into the source:
[ -f version.sh ] && sed -i -e "s/UNKNOWN/$VERSION/" version.sh
TMPDIR="$TMP" \
CFLAGS="-I$FFMPEGDEPSDIR/usr/include $SLKCFLAGS" \
CPPFLAGS="-I$FFMPEGDEPSDIR/usr/include -I$FFMPEGDEPSDIR/usr/include/SDL" \
CXXFLAGS="-I$FFMPEGDEPSDIR/usr/include -I$FFMPEGDEPSDIR/usr/include/SDL $SLKCFLAGS" \
LDFLAGS="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS -lpng -lXext" \
PKG_CONFIG_PATH="$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/pkgconfig" \
PATH="$FFMPEGDEPSDIR/usr/bin:$PATH" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--shlibdir=/usr/lib${LIBDIRSUFFIX} \
--docdir=/usr/doc/${PRGNAM}-${VERSION} \
--mandir=/usr/man \
--enable-gpl \
--enable-version3 \
--enable-avfilter \
--enable-avresample \
--enable-libass \
--enable-libdc1394 \
--enable-libgsm \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopus \
--enable-libschroedinger \
--enable-libspeex \
--enable-libtheora \
--enable-libv4l2 \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libzvbi \
--enable-postproc \
--enable-runtime-cpudetect \
--enable-vaapi \
--enable-vdpau \
--enable-memalign-hack \
--enable-pthreads \
--enable-x11grab \
--enable-bzlib \
--enable-zlib \
--enable-shared \
--enable-static \
--disable-debug \
${USE_NONFREE} \
$ARCHOPTS \
--extra-cflags="-I$FFMPEGDEPSDIR/usr/include -I$FFMPEGDEPSDIR/usr/include/SDL -DRUNTIME_CPUDETECT" \
--extra-ldflags="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} -ldl -lssl -lcrypto -lz -lusb" \
--pkg-config-flags="--static" \
2>&1 | tee $OUTPUT/configure-${PRGNAM}_ffmpeg.log
# Use ffmpeg's own implementation:
#--enable-librtmp \
# Need to add "-lfftw3f" to --extra-ldflags if libaacplus gets used
make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_ffmpeg.log
cd $OLDDIR
}
#
# OK, we packaged the compile process for the various software libraries
# into convenient functions... let's call them one by one now:
#
#if [ 'xy' != 'xy' ]; then # use this block if you want to skip a lot
# Needed before ffmpeg:
# Based on the value of $USE_PATENTS enable or disable non-free code:
if [ "${USE_PATENTS}" = "YES" ]; then
make_lame
make_faac
#make_aacplus
make_fdkaac
fi
make_amr
make_amrwbenc
make_1394
make_v4l
make_opus
make_speex
make_gsm
#make_rtmp
make_orc
make_schroedinger
make_x264
make_x265
make_vpx
make_libva
make_vdpau
make_fribidi
make_ass
make_zvbi
#fi # end of 'xy'
# ffmpeg uses the above static libraries:
make_ffmpeg
# End of compilation, proceed to packaging the binaries:
cd $TMP/tmp-${PRGNAM}/ffmpeg-${VERSION}
# Install all the needed stuff to the package dir
make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log
# Add x264 & vpx presets. See 'Preset files' in the man pages.
echo "** Adding ffmpeg presets:"
mkdir -p $PKG/usr/share/ffmpeg
cp -a presets/*.ffpreset $PKG/usr/share/ffmpeg/
# The pkg-config files are full of library dependencies which we built
# statically, so we need to edit those out so that programs that try to link
# against our ffmpeg will not get confused:
echo "** Fixing up pkgconfig files:"
for PCFILE in $(ls $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/*.pc) ; do
sed -i -e 's/-lraw1394//g' -e 's/-lavc1394//g' -e 's/-ldc1394//g' \
-e 's/-lspeex//g' -e 's/-lgsm//g' -e 's/-lrtmp//g' \
-e 's/-lopencore-amrnb//g' -e 's/-lopencore-amrwb//g' \
-e 's/-lfaac//g' -e 's/-lfaad//g' \
-e 's/-lvo-amrwbenc//g' -e 's/-lfdk-aac//g' \
-e 's/-lmp3lame//g' \
-e 's/-lopus//g' \
-e 's/-lschroedinger-[^ ]*//g' -e 's/-lorc-[^ ]*//g' \
-e 's/-lx264//g' -e 's/-lx265//g' -e 's/-lvpx//g' -e 's/-lzvbi//g' \
-e "s#-L/tmp/build/tmp-ffmpeg/ffmpegdeps/usr/lib${LIBDIRSUFFIX}##" \
$PCFILE
done
# Add a configuration file for the ffserver:
mkdir -p $PKG/etc
cp -a doc/ffserver.conf $PKG/etc/ffserver.conf.new
# Add this to the doinst.sh:
! [ -d $PKG/install ] && mkdir -p $PKG/install
cat <<EOINS >> $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
}
config etc/ffserver.conf.new
EOINS
# Add documentation (for all the deps as well)
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true
# Add all the supporting packages' documentation too:
cp -a $FFMPEGDEPSDIR/doc/* $PKG/usr/doc/$PRGNAM-$VERSION || true
cp -a $SRCDIR/patches $PKG/usr/doc/$PRGNAM-$VERSION/ 2>/dev/null || true
cat $SRCDIR/$(basename $0) > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
find $PKG/usr/doc -type f -exec chmod 644 {} \;
chown -R root:root $PKG/usr/doc/$PRGNAM-$VERSION/*
# 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
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
# Add 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
# Build the package:
cd $PKG
makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txz 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log
cd $OUTPUT
md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txz.md5
cd -
cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txt
# Restore the original umask:
umask ${_UMASK_}