summaryrefslogtreecommitdiff
path: root/debian/rules
diff options
context:
space:
mode:
Diffstat (limited to 'debian/rules')
-rwxr-xr-xdebian/rules281
1 files changed, 281 insertions, 0 deletions
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..31af258
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,281 @@
+#!/usr/bin/make -f
+
+export V=1
+
+# sets DEBIAN_VERSION variable
+include /usr/share/dpkg/pkg-info.mk
+
+# Get the Debian version revision:
+DEB_REVISION := $(word 2, $(subst -, ,$(DEB_VERSION)))
+
+# sets DEB_HOST_* variables
+include /usr/share/dpkg/architecture.mk
+
+# Ubuntu ld adds -Bsymbolic-functions by default, but that prevents FFmpeg from building.
+export DEB_LDFLAGS_MAINT_STRIP=-Wl,-Bsymbolic-functions
+
+# Package name for the extra flavor.
+EXTRA_PKGS := $(shell sed -nr 's/^Package:[[:space:]]*(.*extra[0-9]+)[[:space:]]*$$/\1/p' debian/control)
+FLAVORS = standard extra static
+
+# Enable as many features as possible, as long as the result is still GPLv2+ (a GPLv3+ variant is built as libavcodec-extra/libavfilter-extra flavor).
+# The following flags (and build-dependencies) are not added, because they would require a libavformat-extra flavor:
+# --enable-libsmbclient (libsmbclient-dev [!hurd-i386 !m68k !sparc64])
+# The following flags are not added, because the necessary libraries are not in Debian:
+# --enable-decklink
+# --enable-libcelt (see #676592: removed from Debian as abandoned upstream, replaced by opus)
+# --enable-libdcadec
+# --enable-libilbc (see #675959 for the RFP bug)
+# --enable-libkvazaar
+# --enable-libmfx
+# --enable-libmodplug (see #849840: replaced with libopenmpt)
+# --enable-libnut
+# --enable-libopenh264
+# --enable-libschroedinger (see #845037: removal due to security issues)
+# --enable-libutvideo
+# --enable-libvidstab (see #709193 for the RFP bug)
+# --enable-libxavs
+# --enable-libzimg
+# The following flags are not added for various reasons:
+# * --enable-librtmp: ffmpeg has better built-in RTMP support with listen mode.
+# * --enable-libv4l2 [!hurd-any]: This is only needed for very old devices and may cause problems for others.
+# Should anyone need it, using LD_PRELOAD pointing on libv4l2 has the same effect.
+# * --enable-opencl [!hurd-any]: This is considered an experimental API.
+CONFIG := --prefix=/usr \
+ --extra-version="$(DEB_REVISION)" \
+ --toolchain=hardened \
+ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
+ --incdir=/usr/include/$(DEB_HOST_MULTIARCH) \
+ --enable-gpl \
+ --disable-stripping \
+ --enable-avresample \
+ --enable-avisynth \
+ --enable-gnutls \
+ --enable-ladspa \
+ --enable-libass \
+ --enable-libbluray \
+ --enable-libbs2b \
+ --enable-libcaca \
+ --enable-libcdio \
+ --enable-libebur128 \
+ --enable-libflite \
+ --enable-libfontconfig \
+ --enable-libfreetype \
+ --enable-libfribidi \
+ --enable-libgme \
+ --enable-libgsm \
+ --enable-libmp3lame \
+ --enable-libopenjpeg \
+ --enable-libopenmpt \
+ --enable-libopus \
+ --enable-libpulse \
+ --enable-librubberband \
+ --enable-libshine \
+ --enable-libsnappy \
+ --enable-libsoxr \
+ --enable-libspeex \
+ --enable-libssh \
+ --enable-libtheora \
+ --enable-libtwolame \
+ --enable-libvorbis \
+ --enable-libvpx \
+ --enable-libwavpack \
+ --enable-libwebp \
+ --enable-libx265 \
+ --enable-libxvid \
+ --enable-libzmq \
+ --enable-libzvbi \
+ --enable-omx \
+ --enable-openal \
+ --enable-opengl \
+ --enable-sdl2
+
+# The standard configuration only uses the shared CONFIG.
+CONFIG_standard = --enable-shared
+
+# With these enabled, resulting binaries are effectively licensed as GPLv3+.
+CONFIG_extra = --enable-shared \
+ --enable-version3 \
+ --disable-doc \
+ --disable-programs \
+ --enable-libopencore_amrnb \
+ --enable-libopencore_amrwb \
+ --enable-libtesseract \
+ --enable-libvo_amrwbenc
+
+# The static libraries should not be built with PIC.
+CONFIG_static = --disable-pic \
+ --disable-doc \
+ --disable-programs
+
+# Disable optimizations if requested.
+ifneq (,$(filter $(DEB_BUILD_OPTIONS),noopt))
+ CONFIG += --disable-optimizations
+endif
+
+# Respect CC/CXX from the environment, if they differ from the default.
+# Don't set them if they equal the default, because that disables autodetection needed for cross-building.
+ifneq ($(CC),cc)
+ CONFIG += --cc=$(CC)
+endif
+ifneq ($(CXX),g++)
+ CONFIG += --cxx=$(CXX)
+endif
+
+# Some libraries are built only on linux.
+ifeq ($(DEB_HOST_ARCH_OS),linux)
+ CONFIG += --enable-libdc1394 \
+ --enable-libiec61883
+endif
+
+# Some build-dependencies are not installable on some architectures.
+ifeq (,$(filter $(DEB_HOST_ARCH),powerpcspe))
+ CONFIG_extra += --enable-netcdf
+endif
+
+# ffmpeg is involed in build-dependency cycles with opencv, x264 and chromaprint, so disable them in stage one.
+# Also disable frei0r, which build-depends on opencv.
+ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
+ CONFIG += --disable-frei0r \
+ --disable-chromaprint \
+ --disable-libopencv \
+ --disable-libx264
+else
+ CONFIG += --enable-chromaprint \
+ --enable-frei0r \
+ --enable-libopencv \
+ --enable-libx264
+endif
+
+# Disable altivec optimizations on powerpc, because they are not always available on this architecture.
+ifeq ($(DEB_HOST_ARCH),powerpc)
+ CONFIG += --disable-altivec
+ # Build an altivec flavor of the libraries on powerpc.
+ # This works around the problem that runtime cpu detection on powerpc currently does not work,
+ # because, if altivec is enabled, all files are build with '-maltivec' so that the compiler inserts altivec instructions, wherever it likes.
+ CONFIG_altivec = --enable-shared \
+ --enable-altivec \
+ --disable-doc \
+ --disable-programs
+ CONFIG_altivec-extra = $(CONFIG_altivec) $(CONFIG_extra)
+ FLAVORS += altivec altivec-extra
+endif
+
+# Disable assembly optimizations on x32, because they don't work (yet).
+ifneq (,$(filter $(DEB_HOST_ARCH),x32))
+ CONFIG += --disable-asm
+endif
+
+# Disable optimizations on mips(el) and some on mips64(el), because they are not always available on these architectures.
+ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel mips64 mips64el))
+ CONFIG += --disable-mipsdsp \
+ --disable-mipsdspr2 \
+ --disable-loongson3 \
+ --disable-mips32r6 \
+ --disable-mips64r6
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel))
+ CONFIG += --disable-mipsfpu
+endif
+
+# Set cross-build prefix for compiler, pkg-config...
+# Cross-building also requires to manually set architecture/OS.
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+ CONFIG += --cross-prefix=$(DEB_HOST_GNU_TYPE)- \
+ --arch=$(DEB_HOST_ARCH) \
+ --target-os=$(DEB_HOST_ARCH_OS)
+endif
+
+# Use the default debhelper scripts, where possible.
+%:
+ dh $@
+
+# Add configuration options:
+override_dh_auto_configure:
+ $(foreach flavor,$(FLAVORS),mkdir -p debian/$(flavor);)
+ $(foreach flavor,$(FLAVORS),set -e; echo " *** $(flavor) ***"; cd debian/$(flavor); ../../configure $(CONFIG) $(CONFIG_$(flavor)) || (cat config.log && exit 1); cd ../.. ;)
+ touch override_dh_auto_configure
+
+# Remove the subdirectories generated for the flavors.
+override_dh_auto_clean:
+ $(foreach flavor,$(FLAVORS),[ ! -d debian/$(flavor) ] || rm -r debian/$(flavor);)
+
+# Create doxygen documentation:
+override_dh_auto_build-indep:
+ dh_auto_build -i --sourcedirectory=debian/standard -- apidoc
+ # Create the minified CSS files.
+ lessc debian/missing-sources/ffmpeg-web/src/less/style.less | cleancss > debian/standard/doc/style.min.css
+ rm override_dh_auto_configure
+
+override_dh_auto_build-arch:
+ # Copy built object files to avoid building them again for the extra flavor.
+ # Build qt-faststart here, to make it possible to build with 'nocheck'.
+ set -e && for flavor in $(FLAVORS); do \
+ echo " *** $$flavor ***"; \
+ if echo "$$flavor" | grep -q "extra"; then \
+ subdir=`[ "$$flavor" = "extra" ] && echo "debian/standard/" || echo "debian/altivec/"`; \
+ for dir in `cd ./$$subdir; find libavcodec libavdevice libavfilter libavformat libavresample libavutil libpostproc libswscale libswresample -type d`; do \
+ mkdir -p debian/"$$flavor"/"$$dir"; \
+ echo "$$subdir$$dir"/*.o | grep -q '*' || cp "$$subdir$$dir"/*.o debian/"$$flavor"/"$$dir"; \
+ done; \
+ rm debian/"$$flavor"/libavcodec/allcodecs.o; \
+ rm debian/"$$flavor"/libavfilter/allfilters.o; \
+ fi; \
+ if [ "$$flavor" = "standard" ]; then \
+ $(MAKE) -C debian/standard tools/qt-faststart; \
+ fi; \
+ dh_auto_build -a --sourcedirectory=debian/"$$flavor" || (cat debian/"$$flavor"/config.log && exit 1); \
+ done
+
+# Set the library path for the dynamic linker, because the tests otherwise don't find the libraries.
+override_dh_auto_test-arch:
+ export LD_LIBRARY_PATH="libavcodec:libavdevice:libavfilter:libavformat:libavresample:libavutil:libpostproc:libswresample:libswscale"; \
+ dh_auto_test -a --sourcedirectory=debian/standard -- -k
+
+# No tests for indep build.
+override_dh_auto_test-indep:
+
+override_dh_auto_install-arch:
+ dh_auto_install -a --sourcedirectory=debian/standard
+ifeq ($(DEB_HOST_ARCH),powerpc)
+ install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
+ install -m 644 debian/altivec/*/*.so.* debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
+endif
+ dh_auto_install -a --sourcedirectory=debian/extra --destdir=debian/tmp/extra
+ifeq ($(DEB_HOST_ARCH),powerpc)
+ install -d debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
+ install -m 644 debian/altivec-extra/*/*.so.* debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
+endif
+ # Use the static libraries from the --disable-pic build
+ install -m 644 debian/static/*/lib*.a debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)
+
+override_dh_auto_install-indep:
+ dh_auto_install -i --sourcedirectory=debian/standard
+
+override_dh_install:
+ dh_install $(addprefix -p,$(EXTRA_PKGS)) --sourcedir=debian/tmp/extra
+ dh_install --remaining-packages
+
+override_dh_makeshlibs:
+ set -e && for pkg in $(shell dh_listpackages -a) ; do \
+ case $$pkg in \
+ ffmpeg|*-dev) \
+ continue \
+ ;; \
+ *avcodec*) \
+ soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \
+ dh_makeshlibs -p $$pkg -V"libavcodec$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavcodec-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \
+ ;; \
+ *avfilter*) \
+ soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \
+ dh_makeshlibs -p $$pkg -V"libavfilter$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavfilter-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \
+ ;; \
+ *) \
+ dh_makeshlibs -p $$pkg -V \
+ ;; \
+ esac \
+ done
+
+# Don't compress the example source code files.
+override_dh_compress:
+ dh_compress -Xexamples