diff options
Diffstat (limited to 'debian/rules')
-rwxr-xr-x | debian/rules | 281 |
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 |