#!/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. SHLIB_PKGS := $(shell sed -nr '/extra/! s/^Package:[[:space:]]*(lib.*[0-9]+)[[:space:]]*$$/\1/p' debian/control) EXTRA_PKGS := $(shell sed -nr 's/^Package:[[:space:]]*(.*extra[0-9]+)[[:space:]]*$$/\1/p' debian/control) FLAVORS = standard extra static # Most possible features, compatible with effective licensing of GPLv2+ CONFIG := --prefix=/usr \ --extra-version="$(DEB_REVISION)" \ --toolchain=hardened \ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ --incdir=/usr/include/$(DEB_HOST_MULTIARCH) \ --arch=$(DEB_HOST_ARCH_CPU) \ --enable-gpl \ --disable-stripping \ --enable-avresample --disable-filter=resample \ --enable-gnutls \ --enable-ladspa \ --enable-libaom \ --enable-libass \ --enable-libbluray \ --enable-libbs2b \ --enable-libcaca \ --enable-libcdio \ --enable-libcodec2 \ --enable-libdav1d \ --enable-libflite \ --enable-libfontconfig \ --enable-libfreetype \ --enable-libfribidi \ --enable-libgme \ --enable-libgsm \ --enable-libjack \ --enable-libmp3lame \ --enable-libmysofa \ --enable-libopenjpeg \ --enable-libopenmpt \ --enable-libopus \ --enable-libpulse \ --enable-librabbitmq \ --enable-librsvg \ --enable-librubberband \ --enable-libshine \ --enable-libsnappy \ --enable-libsoxr \ --enable-libspeex \ --enable-libsrt \ --enable-libssh \ --enable-libtheora \ --enable-libtwolame \ --enable-libvidstab \ --enable-libvorbis \ --enable-libvpx \ --enable-libwavpack \ --enable-libwebp \ --enable-libx265 \ --enable-libxml2 \ --enable-libxvid \ --enable-libzmq \ --enable-libzvbi \ --enable-lv2 \ --enable-omx \ --enable-openal \ --enable-opencl \ --enable-opengl \ --enable-sdl2 # avoid pocketsphinx on mips (bug#812335), alpha, ia64 and big-endian (bug#968456) ifeq (,$(filter mips% alpha ia64,$(DEB_HOST_ARCH))$(filter big,$(DEB_HOST_ARCH_ENDIAN))) CONFIG += --enable-pocketsphinx endif ifeq (amd64,$(DEB_HOST_ARCH)) CONFIG += --enable-libmfx endif # The standard configuration only uses the shared CONFIG. CONFIG_standard = --enable-shared # Additional features, compatible with effective licensing of GPLv3+ CONFIG_extra = --enable-shared \ --enable-version3 \ --disable-doc \ --disable-programs \ --enable-libaribb24 \ --enable-liblensfun \ --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 noopt,$(DEB_BUILD_OPTIONS))) 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 (g++,$(CXX)) CONFIG += --cxx=$(CXX) endif # Some libraries are built only on linux. ifeq (linux,$(DEB_HOST_ARCH_OS)) CONFIG += --enable-libdc1394 \ --enable-libdrm \ --enable-libiec61883 endif # ffmpeg is involved in build-dependency cycles with x264 and chromaprint, so disable them in stage one. # Also disable frei0r, which build-depends on opencv. ifneq (,$(filter pkg.ffmpeg.stage1,$(DEB_BUILD_PROFILES))) CONFIG += --disable-frei0r \ --disable-chromaprint \ --disable-libx264 else CONFIG += --enable-chromaprint \ --enable-frei0r \ --enable-libx264 endif # Disable altivec optimizations on powerpc, because they are not always available on this architecture. ifeq (powerpc,$(DEB_HOST_ARCH)) 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 x32,$(DEB_HOST_ARCH))) CONFIG += --disable-asm endif # Disable some optimizations on mips*, because they are not always available on these architectures ifneq (,$(filter mips%r6 mips%r6el, $(DEB_HOST_ARCH))) MIPS_R2_R6_CONFIG = --disable-mips32r2 \ --disable-mips64r2 else MIPS_R2_R6_CONFIG = --disable-mips32r6 \ --disable-mips64r6 endif ifneq (,$(filter mips%,$(DEB_HOST_ARCH))) CONFIG += --disable-mipsdsp \ --disable-mipsdspr2 \ --disable-loongson2 \ --disable-loongson3 \ --disable-mmi \ --disable-mips32r5 \ $(MIPS_R2_R6_CONFIG) \ --disable-msa \ --disable-msa2 endif # Disable mipsfpu on mips and mipsel, because it is not compatible with the FPXX ABI ifneq (,$(filter mips mipsel,$(DEB_HOST_ARCH))) CONFIG += --disable-mipsfpu endif # Disable some tests which fail when FLT_EVAL_METHOD != 0 (found on i386, m68k and s390x) ifneq (,$(filter i386 m68k s390x,$(DEB_HOST_ARCH_CPU))) CONFIG += --ignore-tests=hapenc-hap-none,hapenc-hapa-none,hapenc-hapq-none endif # Set cross-build prefix for compiler, pkg-config... ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) CONFIG += --cross-prefix=$(DEB_HOST_GNU_TYPE)- \ --target-os=$(DEB_HOST_ARCH_OS) endif # Use the default debhelper scripts, where possible. %: dh $@ --with pkgkde_symbolshelper # Add configuration options: override_dh_auto_configure: $(patsubst %,configure_%,$(FLAVORS)) configure_%: $(info $() debian/rules $@) mkdir -p debian/$* cd debian/$* && ../../configure $(strip $(CONFIG) $(CONFIG_$*)) || (cat ffbuild/config.log && exit 1) # Remove the subdirectories generated for the flavors. override_dh_auto_clean: rm -rf $(patsubst %,debian/%,$(FLAVORS)) # Create doxygen documentation: override_dh_auto_build-indep: dh_auto_build -i --sourcedirectory=debian/standard -- apidoc documentation # Create the minified CSS files. # Due to https://github.com/nodejs/node/issues/14752 where nodejs will # leave set O_NONBLOCK on stderr, we pipe stderr through cat which will # create a temporary pipe so this doesn't break the rest of the build. # See: #895154 (lessc debian/missing-sources/ffmpeg-web/src/less/style.less | cleancss > debian/standard/doc/style.min.css) 2>&1 | cat >&2 override_dh_auto_build-arch: $(patsubst %,build_%,$(FLAVORS)) # noop fallback for below more specific targets prebuild_%: : # Copy built object files to avoid building them again for the extra flavor. $(patsubst %,prebuild_%,$(filter %extra,$(FLAVORS))): prebuild_%: build_standard $(info $() debian/rules $@) $(eval subdir = debian/$(subst extra,standard,$(subst -extra,,$*))) cd $(subdir) && find libavcodec libavdevice libavfilter libavformat libavresample libavutil libpostproc libswscale libswresample \ -type f -name '*.o' \ -exec install -m 644 -D -T '{}' '../$*/{}' ';' rm debian/$*/libavcodec/allcodecs.o rm debian/$*/libavfilter/allfilters.o # Build qt-faststart here, to make it possible to build with 'nocheck'. prebuild_standard: $(info $() debian/rules $@) $(MAKE) -C debian/standard tools/qt-faststart build_%: prebuild_% $(info $() debian/rules $@) dh_auto_build -a --sourcedirectory=debian/$* || (cat debian/$*/config.log && exit 1) # 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 (powerpc,$(DEB_HOST_ARCH)) 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 (powerpc,$(DEB_HOST_ARCH)) 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: $(MAKE) -C debian/standard DESTDIR=$(CURDIR)/debian/tmp install-doc install-examples # Create index.html page for the FFmpeg manual cd debian/tmp/usr/share/doc/ffmpeg && tree -H '.' -L 1 -P '*.html' --noreport --charset utf-8 -T 'FFmpeg Manual Index' -o index.html override_dh_install: dh_install $(addprefix -p,$(EXTRA_PKGS)) --sourcedir=debian/tmp/extra dh_install --remaining-packages override_dh_shlibdeps: $(RM) debian/shlibs.local set -e && for pkg in $(SHLIB_PKGS); do \ lib=`echo $$pkg | sed 's/\([a-z]*\)\([0-9]*\)/\1/'`; \ abi=`echo $$pkg | sed 's/\([a-z]*\)\([0-9]*\)/\2/'`; \ ver=${DEB_VERSION}; \ echo "$$lib $$abi $$pkg (= $$ver)" >> debian/shlibs.local; \ done set -e && for pkg in $(EXTRA_PKGS); do \ mainpkg=`echo $$pkg | sed 's/-extra//'`; \ cp -f debian/$$mainpkg.symbols debian/$$pkg.symbols; \ dh_shlibdeps -p$$pkg; \ rm -f debian/$$pkg.symbols; \ done dh_shlibdeps --remaining-packages # avoid error: Unknown DWARF DW_OP_0 override_dh_dwz: dh_dwz -Xlibavcodec -Xlibavfilter -Xlibavresample -Xlibavutil -Xlibswresample -Xlibswscale