#!/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