From ffde55e672726d7041ab7be19a56fc7b72a54a19 Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Mon, 20 Jul 2020 08:34:43 +0000 Subject: Initial revision --- ffmpeg/build/ffmpeg3.SlackBuild | 1792 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 1792 insertions(+) create mode 100644 ffmpeg/build/ffmpeg3.SlackBuild (limited to 'ffmpeg') diff --git a/ffmpeg/build/ffmpeg3.SlackBuild b/ffmpeg/build/ffmpeg3.SlackBuild new file mode 100644 index 00000000..faaec575 --- /dev/null +++ b/ffmpeg/build/ffmpeg3.SlackBuild @@ -0,0 +1,1792 @@ +#!/bin/bash +# $Id$ +# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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 +# 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 +# * 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 +# * 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 +# * Update. Added documentation of the included libraries. +# 20071209-1: 09/dec/2007 by Eric Hameleers +# * 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 +# * 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 +# * 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 +# * 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 +# * 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 +# * 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 +# * Updates to faac/faad/schro +# r20056-1: 27/sep/2009 by Eric Hameleers +# * 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 +# * 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 +# * 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 +# * 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 +# * I forgot to update to a newer stable release. +# Updated internal codecs where available. +# 0.6.3-1: 12/may/2011 by Eric Hameleers +# * Updated for Slackware 13.37. +# 0.8.2-1: 11/aug/2011 by Eric Hameleers +# * 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 +# * 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 +# * New release. Also updated versions of internal lame, orc, +# x264 libraries. +# 0.8.7-1: 22/nov/2011 by Eric Hameleers +# * New release. +# 0.9-1: 13/dec/2011 by Eric Hameleers +# * New release. Added internal libass (subtitle) and v4l2 support. +# 0.10.2-1: 05/may/2012 by Eric Hameleers +# * New release. +# 0.10.3-1: 26/may/2012 by Eric Hameleers +# * Update. +# 0.11-1: 03/jun/2012 by Eric Hameleers +# * Update. +# 0.11.2-1: 27/sep/2012 by Eric Hameleers +# * Update. +# 1.1.2-1: 13/feb/2013 by Eric Hameleers +# * Update. Also updated many internal libraries. +# Added ogg opus decoder. +# 1.2-1: 13/apr/2013 by Eric Hameleers +# * Update. +# 2.1-1: 26/dec/2013 by Eric Hameleers +# * Update. +# 2.2.1-1: 02/may/2014 by Eric Hameleers +# * Update. Add teletext subtitle support. +# 2.4.3-1: 12/nov/2014 by Eric Hameleers +# * 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 +# * Update. Also updated internal libraries: fdkaac, libass, +# libva, libvdpau, speex, x264, x265 +# 2.8-1: 24/sep/2015 by Eric Hameleers +# * 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 +# * Update. Updated internal libraries: opus, orc, v4l, vaapi, +# vpx, x264, x265. +# Support for libvo-aacenc was dropped from ffmpeg. +# 3.2.4-1: 13/feb/2017 by Eric Hameleers +# * Explicitly enable libpulse if we find it installed. +# Remove libfaad2/faac libraries, they are not used anymore. +# Remove libaacplus (was never built anyway) as support has +# been removed from ffmpeg. +# Update to latest versions of internal ass, fdkaac, fribidi, +# gsm, opus, orc, speex, v4l, vpx, x264 and x265 libraries. +# Add SDL2 internal library, required by ffplay. +# 3.2.4-2: 31/mar/2017 by Eric Hameleers +# * Recompiled against new libcdio-paranoia in -current. +# 3.3.1-1: 20/may/2017 by Eric Hameleers +# * Update. After expiry of the MP3 patents, this package will now +# be able to encode MP3 even in the unrestricted variant. +# 3.3.2-1: 08/jun/2017 by Eric Hameleers +# * Update. Added libmfx support (HW-accelerated video decoding +# on modern Intel GPU's): check "ffmpeg -codecs |grep qsv". +# 3.3.3-1: 06/aug/2017 by Eric Hameleers +# * Update. +# 3.3.4-1: 13/sep/2017 by Eric Hameleers +# * Update. +# 3.4-1: 20/nov/2017 by Eric Hameleers +# * Update. +# 3.4-2: 22/nov/2017 by Eric Hameleers +# * Rebuilt to fix the broken libx265 linking. +# 3.4.1-1: 29/jan/2018 by Eric Hameleers +# * Updated. +# 3.4.2-1: 12/feb/2018 by Eric Hameleers +# * Updated. +# 3.4.2-2: 14/may/2018 by Eric Hameleers +# * Rebuilt for slackware-current. +# 3.4.6-1: 30/mar/2019 by Eric Hameleers +# * Updated. +# +# Run 'sh ffmpeg.SlackBuild' to build a Slackware package. +# The package (.txz) plus descriptive .txt file are created in /tmp . +# Install using 'installpkg'. +# +# ----------------------------------------------------------------------------- + + +PRGNAM=ffmpeg +VERSION=${VERSION:-3.4.6} +BUILD=${BUILD:-1} +NUMJOBS=${NUMJOBS:-"-j$(nproc)"} +TAG=${TAG:-"alien"} + +# -- PATENT ALERT! -- +# FFmpeg can be built with AAC audio encoder (used in MP4) but this library is +# 'contaminated' with patents from 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 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') + +if pkg-config --exists libpulse 2>/dev/null ; then + # Explicitly enable pulseaudio or it will not be picked up: + USE_PULSE="--enable-libpulse" +else + USE_PULSE="" +fi + +if pkg-config --exists OpenCL 2>/dev/null ; then + # Enable opencl only when present: + USE_OPENCL="--enable-opencl" +else + USE_OPENCL="" +fi + +if pkg-config --exists libbluray 2>/dev/null ; then + # Slackware 15.0 and newer have libbluray: + USE_BLURAY="--enable-libbluray" +else + USE_BLURAY="" +fi + +if pkg-config --exists libwebp 2>/dev/null ; then + # Slackware 15.0 and newer have libwebp: + USE_WEBP="--enable-libwebp" +else + USE_WEBP="" +fi + +DOCS="COPYING* CREDITS Changelog MAINTAINERS RELEASE* VERSION *.md \ + doc/*.txt doc/*.html" +DOCS_AMR="COPYING ChangeLog README" +DOCS_AMRWBENC="COPYING ChangeLog NOTICE README" +DOCS_ASS="COPYING Changelog" +DOCS_AVC1394="AUTHORS COPYING ChangeLog INSTALL NEWS README" +DOCS_DC1394="AUTHORS COPYING ChangeLog INSTALL NEWS README" +DOCS_FDKAAC="ChangeLog NOTICE" +DOCS_MFX="COPYING README.md" +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 ChangeLog INSTALL NEWS README" +DOCS_RTMP="AUTHORS COPYING ChangeLog README" +DOCS_SCHROEDINGER="AUTHORS COPYING* NEWS TODO" +DOCS_SDL2="*.txt" +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: +AMRWBENC=0.1.3 +AMR=0.1.3 +ASS=0.14.0 +AVC1394=0.5.4 +DC1394=2.1.2 +FDKAAC=2.0.0 +MFX=1.25 +FRIBIDI=1.0.5 +GSM=1.0.16 +LAME=3.100 +LIBVA=2.4.0 +LIBZVBI=0.2.35 +OPUS=1.3 +ORC=0.4.28 +RAW1394=2.0.5 +RTMP=2.3 +SCHROEDINGER=1.0.11 +SDL2=2.0.9 +SPEEX=1.2.0 +V4L=1.16.5 +VDPAU=1.2 +VPX=1.8.0 +X264=20190329-2245 +X265=2.8 + +# 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/sources/ffmpeg-${SRCVER}.tar.bz2" +SRCPAT[0]="NO" + +# VDPAU for video hardware acceleration: +SOURCE[1]="$SRCDIR/sources/libvdpau-${VDPAU}.tar.bz2" +SRCURL[1]="http://people.freedesktop.org/~aplattner/vdpau/libvdpau-${VDPAU}.tar.bz2" +SRCPAT[1]="NO" + +# SDL2 is required by ffplay: +SOURCE[2]="$SRCDIR/sources/SDL2-${SDL2}.tar.gz" +SRCURL[2]="http://www.libsdl.org/release/SDL2-${SDL2}.tar.gz" +SRCPAT[2]="NO" + +# SPEEX audio codec: +SOURCE[3]="$SRCDIR/sources/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/sources/x264-snapshot-${X264}.tar.bz2" +SRCURL[4]="https://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264}.tar.bz2" +SRCPAT[4]="NO" + +# fdk-aac en/decoder from the Android Open Source Project (opencore-amr): +SOURCE[5]="$SRCDIR/sources/fdk-aac-${FDKAAC}.tar.gz" +SRCURL[5]="https://downloads.sourceforge.net/opencore-amr/fdk-aac-${FDKAAC}.tar.gz" +SRCPAT[5]="YES" + +# GSM support: +SOURCE[6]="$SRCDIR/sources/gsm-$GSM.tar.gz" +SRCURL[6]="http://www.quut.com/gsm/gsm-$GSM.tar.gz" +SRCPAT[6]="NO" + +# Lame is used for the audio in FLV videos; will statically link with ffmpeg +SOURCE[7]="$SRCDIR/sources/lame-$LAME.tar.gz" +SRCURL[7]="https://downloads.sourceforge.net/lame/lame-$LAME.tar.gz" +SRCPAT[7]="NO" + +# Library to support the AVC (Audio/Video Control) Digital Interface Command Set +SOURCE[8]="$SRCDIR/sources/libavc1394-${AVC1394}.tar.gz" +SRCURL[8]="https://downloads.sourceforge.net/libavc1394/libavc1394-${AVC1394}.tar.gz" +SRCPAT[8]="NO" + +# Library needed to control IEEE 1394 (firewire-) based cameras +SOURCE[9]="$SRCDIR/sources/libraw1394-${RAW1394}.tar.gz" +SRCURL[9]="https://downloads.sourceforge.net/libraw1394/libraw1394-${RAW1394}.tar.gz" +SRCPAT[9]="NO" + +SOURCE[10]="$SRCDIR/sources/libdc1394-${DC1394}.tar.gz" +SRCURL[10]="https://downloads.sourceforge.net/libdc1394/libdc1394-${DC1394}.tar.gz" +SRCPAT[10]="NO" + +# librtmp library, supporting RTMP streams +SOURCE[11]="$SRCDIR/sources/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/sources/libvpx-${VPX}.tar.gz" +SRCURL[12]="https://github.com/webmproject/libvpx/archive/v${VPX}.tar.gz" +SRCPAT[12]="NO" + +# Library supporting VAAPI (GPU-accelerated video playback interface) +SOURCE[13]="$SRCDIR/sources/libva-${LIBVA}.tar.bz2" +SRCURL[13]="https://github.com/01org/libva/releases/download/${LIBVA}/libva-${LIBVA}.tar.bz2" +SRCPAT[13]="NO" + +# AMR-WB encoder libraries used to encode 3GPP audio +SOURCE[14]="$SRCDIR/sources/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/sources/opencore-amr-${AMR}.tar.gz" +SRCURL[15]="http://downloads.sourceforge.net/opencore-amr/opencore-amr-${AMR}.tar.gz" +SRCPAT[15]="NO" + +# Videolan's HEVC (x265) codec: +SOURCE[16]="$SRCDIR/sources/x265-${X265}.tar.gz" +SRCURL[16]="http://github.com/videolan/x265/archive/${X265}.tar.gz" +SRCPAT[16]="NO" + +# Unicode BiDirectional algorithm library, requirement for libass. +SOURCE[17]="$SRCDIR/sources/fribidi-${FRIBIDI}.tar.bz2" +SRCURL[17]="https://github.com/fribidi/fribidi/releases/download/v${FRIBIDI}/fribidi-${FRIBIDI}.tar.bz2" +SRCPAT[17]="NO" + +# Libass - portable library for SSA/ASS subtitles rendering +SOURCE[18]="$SRCDIR/sources/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/sources/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/sources/opus-${OPUS}.tar.gz" +SRCURL[20]="http://downloads.xiph.org/releases/opus/opus-${OPUS}.tar.gz" +SRCPAT[20]="NO" + +# mfx_dispatch library, for HW-accelerated playback on Intel GPUs: +SOURCE[21]="$SRCDIR/sources/mfx_dispatch-${MFX}.tar.xz" +SRCURL[21]="https://github.com/lu-zero/mfx_dispatch/archive/${MFX}.tar.gz" +SRCPAT[21]="NO" + +# libzvbi for teletext subtitle processing: +SOURCE[22]="$SRCDIR/sources/zvbi-${LIBZVBI}.tar.bz2" +SRCURL[22]="http://downloads.sourceforge.net/zapping/zvbi-${LIBZVBI}.tar.bz2" +SRCPAT[22]="NO" + + +# 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} + ;; + 24) # We clone the git of mfx_dispatch at a certain date: + mkdir mfx_dispatch-${MFX} \ + && cd mfx_dispatch-${MFX} \ + && git clone https://github.com/lu-zero/mfx_dispatch.git . \ + && git checkout $(git rev-list -n 1 --before="`date -d $MFX`" master) \ + && chown -R root:root . \ + && cd .. \ + && tar --exclude .git -${TARCOMP}cf ${2} mfx_dispatch-${MFX} + rm -rf mfx_dispatch-${MFX} + ;; + *) # Do nothing + ;; + esac +} + +if [ "${USE_PATENTS}" == "YES" ]; then + echo "" + echo "**" + echo "** This build uses patented code (AAC encoder)" + 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: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i586 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +case "$ARCH" in + i?86) SLKCFLAGS="-O2 -march=${ARCH} -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} + +## Apply upstream patch to make ffmpeg compile (api.cpp:(.text+0x2c53): +## undefined reference to `x265_10bit::x265_api_get_143(int)' error): +## (not applicable until after 2.5 release; applies to git code only) +#cat $SRCDIR/patches/x265_c_comp.patch | patch -p1 --verbose \ +# 2>&1 | tee $OUTPUT/patch-${PRGNAM}_x265.log + +# We follow the build instructions at: +# https://github.com/videolan/x265/blob/master/build/linux/multilib.sh +# See also https://bitbucket.org/multicoreware/x265/wiki/Home : +# Build 10bit and 12bit only on x86_64 for which assembler code exists. +if [ "$ARCH" = "x86_64" ]; then + mkdir build-12 + cd build-12 + cmake ../source \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_INSTALL_DIR=lib${LIBDIRSUFFIX} \ + -DHIGH_BIT_DEPTH=ON \ + -DMAIN12=ON \ + -DEXPORT_C_API=OFF \ + -DENABLE_CLI=OFF \ + -DENABLE_SHARED=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + 2>&1 | tee $OUTPUT/configure-${PRGNAM}_x265.log + make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_x265.log + cd - + mkdir build-10 + cd build-10 + cmake ../source \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_INSTALL_DIR=lib${LIBDIRSUFFIX} \ + -DHIGH_BIT_DEPTH=ON \ + -DEXPORT_C_API=OFF \ + -DENABLE_CLI=OFF \ + -DENABLE_SHARED=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + 2>&1 | tee -a $OUTPUT/configure-${PRGNAM}_x265.log + make ${NUMJOBS} 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_x265.log + cd - + mkdir build-8 + cd build-8 + ln -s ../build-10/libx265.a libx265_main10.a + ln -s ../build-12/libx265.a libx265_main12.a + cmake ../source \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_INSTALL_DIR=lib${LIBDIRSUFFIX} \ + -DEXTRA_LIB="x265_main10.a;x265_main12.a" \ + -DEXTRA_LINK_FLAGS="-L." \ + -DLINKED_10BIT=ON \ + -DLINKED_12BIT=ON \ + -DENABLE_SHARED=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + 2>&1 | tee -a $OUTPUT/configure-${PRGNAM}_x265.log + make ${NUMJOBS} 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_x265.log + # Rename the 8bit library, then combine all three into libx265.a using ar: + mv libx265.a libx265_main.a + ar -M <&1 | tee $OUTPUT/configure-${PRGNAM}_x265.log + make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_x265.log +fi + +# We were left in the final build directory: +# 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 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 SDL2 +# ----------------------------------------------------------------------------- +make_sdl2() +{ +echo -e "**\n** sdl2 ...\n**" +cd $TMP/tmp-$PRGNAM/SDL2-$SDL2 +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}_sdl2.log +make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_sdl2.log +# Install sdl2 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}_sdl2.log +# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later: +mkdir -p $FFMPEGDEPSDIR/doc/sdl2/ +cp $DOCS_SDL2 $FFMPEGDEPSDIR/doc/sdl2/ || 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**" + +case "$ARCH" in + x86_64|arm*) + ARCHOPTS="--enable-pic" ;; + *) + ARCHOPTS="" ;; +esac + +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 + +echo -e "**\n** x264 (10bit) ...\n**" +echo -e "\n** 10-bit\n**" >> $OUTPUT/configure-${PRGNAM}_x264.log +echo -e "\n** 10-bit\n**" >> $OUTPUT/make-${PRGNAM}_x264.log + +# Now add a x62410b (10-bit decoder) to the depsdir: +make clean +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="$SLKLDFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --enable-static \ + --disable-cli \ + --bit-depth=10 \ + $ARCHOPTS \ + 2>&1 | tee -a $OUTPUT/configure-${PRGNAM}_x264.log +sed -i -e 's/libx264/libx26410b/g' Makefile config.mak +sed -i -e 's/x264/x26410b/g' x264.pc +mv x264.pc x26410b.pc +sed -i -e 's/x264.pc/x26410b.pc/g' Makefile +make ${NUMJOBS} 2>&1 | tee -a $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 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 libmfx +# ----------------------------------------------------------------------------- +make_mfx() +{ +echo -e "**\n** mfx ...\n**" +cd $TMP/tmp-$PRGNAM/mfx_dispatch-$MFX + +[ ! -x configure ] && autoreconf -vif + +# Note: mfx_dispatch needs libva. + +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=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --enable-static \ + --program-prefix= \ + --program-suffix= \ + --build=$TARGET \ + 2>&1 | tee $OUTPUT/configure-${PRGNAM}_mfx.log +make ${NUMJOBS} 2>&1 | tee $OUTPUT/make-${PRGNAM}_mfx.log +# Install mfx 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}_mfx.log +# Remove the .so and .la files; we want static linking: +rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libmfx*.so* +rm -f $FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX}/libmfx*.la +# Add DOCS to the ffmpegdeps to have it added to ffmpeg package later: +mkdir -p $FFMPEGDEPSDIR/doc/mfx/ +cp $DOCS_MFX $FFMPEGDEPSDIR/doc/mfx/ || 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-highbitdepth \ + --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-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 +# +## Fix error on Slackware 14.1, no issue on Slackware 14.2... +## configure.ac:49: error: possibly undefined macro: AC_CONFIG_MACRO_DIRS +#sed -i -e "s/AC_CONFIG_MACRO_DIRS/AC_CONFIG_MACRO_DIR/" configure.ac +# +## And since we patched the Makefile.am we have to bootstrap: +#rm -f configure +#./bootstrap + +[ ! -x configure ] && ./autogen.sh + +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-libfdk-aac \ + --enable-openssl \ + --enable-nonfree" +else + USE_NONFREE="--enable-gnutls" +fi + +cd $TMP/tmp-$PRGNAM/ffmpeg-${VERSION} + +# Fix compilation with newer libx264: +# To actually use the new multi-bitdepth in libx264 we need a newer release +# of ffmpeg, and then enable 10bit support in make_x264() +#cat $SRCDIR/patches/x264_bitdepth.patch | patch -p1 --verbose \ +# 2>&1 | tee $OUTPUT/patch-${PRGNAM}.log + +# Fix compilation against newer fdk-aac which slightly changed the API +# (this already landed in ffmpeg 4.x): +cat $SRCDIR/patches/fdk-aac_v2.patch | patch -p1 --verbose \ + 2>&1 | tee $OUTPUT/patch-${PRGNAM}.log + +if [ "$ARCH" = "x86_64" ]; then + ARCHOPTS="--arch=x86_64 --enable-pic" +else + ARCHOPTS="" +fi + +# 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-libmp3lame \ + --enable-libass \ + --enable-libdc1394 \ + --enable-libfribidi \ + --enable-libgsm \ + --enable-libmfx \ + --enable-libopencore-amrnb \ + --enable-libopencore-amrwb \ + --enable-libopus \ + --enable-libsmbclient \ + --enable-libssh \ + --enable-libspeex \ + --enable-libtheora \ + --enable-libv4l2 \ + --enable-libvo-amrwbenc \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libwavpack \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libzvbi \ + --enable-postproc \ + --enable-runtime-cpudetect \ + --enable-sdl2 \ + --enable-vaapi \ + --enable-vdpau \ + --enable-pthreads \ + --enable-bzlib \ + --enable-zlib \ + --enable-shared \ + --enable-static \ + --disable-debug \ + ${USE_BLURAY} \ + ${USE_WEBP} \ + ${USE_OPENCL} \ + ${USE_PULSE} \ + ${USE_NONFREE} \ + $ARCHOPTS \ + --extra-cflags="-I$FFMPEGDEPSDIR/usr/include -I$FFMPEGDEPSDIR/usr/include/SDL2 -DRUNTIME_CPUDETECT" \ + --extra-ldflags="-L$FFMPEGDEPSDIR/usr/lib${LIBDIRSUFFIX} -ldl -lssl -lcrypto -lz -lusb -ldrm" \ + --pkg-config-flags="--static" \ + 2>&1 | tee $OUTPUT/configure-${PRGNAM}_ffmpeg.log + # Use ffmpeg's own implementation: + #--enable-librtmp \ +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_fdkaac +fi + +make_lame +make_amr +make_amrwbenc +make_1394 +make_v4l +make_opus +make_sdl2 +make_speex +make_gsm +#make_rtmp +make_x264 +make_x265 +make_vpx +make_libva +make_vdpau +make_mfx +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/-lvo-amrwbenc//g' \ + -e 's/-lfdk-aac//g' \ + -e 's/-lmp3lame//g' \ + -e 's/-lopus//g' \ + -e 's/-lx264//g' -e 's/-lx265//g' -e 's/-lvpx//g' -e 's/-lmfx//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 <> $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.${PRGNAM} > $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_} + -- cgit v1.2.3