1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
|
#!/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
# 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-libdavs2
# --enable-libilbc (see #675959 for the RFP bug)
# --enable-libklvanc
# --enable-libkvazaar
# --enable-libmfx
# --enable-libopenh264
# --enable-libsrt
# --enable-libtensorflow (only in experimental at the moment)
# --enable-libvmaf
# --enable-libxavs2
# --enable-libxavs
# --enable-libzimg (see #864888 for the RFP bug)
# --enable-vapoursynth (see #833942 for the RFP bug)
# The following flags are not added for various reasons:
# --enable-librtmp ffmpeg has better built-in RTMP support with listen mode.
# --enable-mbedtls Already using gnutls as TLS implementation
# --enable-libmodplug see #849840: replaced with libopenmpt
# --enable-libv4l2 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 This is considered an experimental API.
# --enable-opencv Does not build with OpenCV >= 3.4
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-avisynth \
--enable-gnutls \
--enable-ladspa \
--enable-libaom \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
--enable-libcaca \
--enable-libcdio \
--enable-libcodec2 \
--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-librsvg \
--enable-librubberband \
--enable-libshine \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--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-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-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 $(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-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 ($(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 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
endif
# Disable mipsfpu on mips and mipsel, because it is not compatible with the FPXX ABI
ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel))
CONFIG += --disable-mipsfpu
endif
# Disable some tests which fail when FLT_EVAL_METHOD != 0 (found on i386, m68k and s390x)
ifneq (,$(filter $(DEB_HOST_ARCH_CPU),i386 m68k s390x))
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 $@
# 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 ffbuild/config.log && exit 1); cd ../.. ;)
# 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 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:
# 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:
$(MAKE) -C debian/standard DESTDIR=$(CURDIR)/debian/tmp install-doc install-examples
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
dh_shlibdeps
override_dh_missing:
dh_missing --list-missing
# Don't compress the example source code files.
override_dh_compress:
dh_compress -Xexamples
|