File: rules

package info (click to toggle)
ffmpeg 7%3A5.1.6-0%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 93,220 kB
  • sloc: ansic: 1,198,833; asm: 101,293; sh: 8,609; makefile: 4,668; cpp: 2,682; lisp: 1,771; perl: 1,101; objc: 1,001; python: 575; awk: 56; ruby: 51
file content (340 lines) | stat: -rwxr-xr-x 11,268 bytes parent folder | download
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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
#!/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-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-libglslang \
	--enable-libgme \
	--enable-libgsm \
	--enable-libjack \
	--enable-libmp3lame \
	--enable-libmysofa \
	--enable-libopenjpeg \
	--enable-libopenmpt \
	--enable-libopus \
	--enable-libpulse \
	--enable-librabbitmq \
	--enable-librist \
	--enable-librubberband \
	--enable-libshine \
	--enable-libsnappy \
	--enable-libsoxr \
	--enable-libspeex \
	--enable-libsrt \
	--enable-libssh \
	--enable-libsvtav1 \
	--enable-libtheora \
	--enable-libtwolame \
	--enable-libvidstab \
	--enable-libvorbis \
	--enable-libvpx \
	--enable-libwebp \
	--enable-libx265 \
	--enable-libxml2 \
	--enable-libxvid \
	--enable-libzimg \
	--enable-libzmq \
	--enable-libzvbi \
	--enable-lv2 \
	--enable-omx \
	--enable-openal \
	--enable-opencl \
	--enable-opengl \
	--enable-sdl2

# disable sndio, it's pulled in via libopenal-dev and autodetected
CONFIG += --disable-sndio

# avoid libjxl on alpha for now
ifneq (alpha,$(DEB_HOST_ARCH))
CONFIG += --enable-libjxl
endif

# 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

# avoid librsvg on almost all ports (bug#983344, bug#991556)
ifeq (,$(filter alpha hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k sh4 x32,$(DEB_HOST_ARCH)))
CONFIG += --enable-librsvg
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-libopencore_amrnb \
	--enable-libopencore_amrwb \
	--enable-libtesseract \
	--enable-libvo_amrwbenc

# Do not enable libsmbclient support on hurd-i386
ifeq (,$(filter hurd-i386,$(DEB_HOST_ARCH)))
	CONFIG_extra += --enable-libsmbclient
endif

# 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.
# Also disable rav1e for bootstrap to avoid a complete rust toolchain.
ifneq (,$(filter pkg.ffmpeg.stage1,$(DEB_BUILD_PROFILES)))
	CONFIG += \
		--disable-chromaprint \
		--disable-frei0r \
		--disable-libplacebo \
		--disable-librav1e \
		--disable-libx264
else
	CONFIG += \
		--enable-chromaprint \
		--enable-frei0r \
		--enable-libx264
# Some libraries are built only on linux.
ifeq (linux,$(DEB_HOST_ARCH_OS))
	CONFIG += --enable-libplacebo
else
	CONFIG += --disable-libplacebo
endif
# Rust not available on most of ports
ifeq (,$(filter alpha hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k riscv64 sh4 sparc64 x32,$(DEB_HOST_ARCH)))
	CONFIG += --enable-librav1e
else
	CONFIG += --disable-librav1e
endif
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
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
# Disable new tests that were never successful on ppc64el
# (introduced in 5fdb5ed6132687219d0ef2127115ebaf95514058)
# https://trac.ffmpeg.org/ticket/9604
ifeq (ppc64el,$(DEB_HOST_ARCH))
	CONFIG += --ignore-tests=checkasm-sw_scale,filter-scale2ref_keep_aspect
endif
# https://trac.ffmpeg.org/ticket/9855
ifneq (,$(filter hppa m68k powerpc sparc64 s390x,$(DEB_HOST_ARCH_CPU)))
	CONFIG += --ignore-tests=filter-overlay_yuv420p10
endif
ifeq (ppc64,$(DEB_HOST_ARCH))
	CONFIG += --ignore-tests=checkasm-sw_scale,filter-overlay_yuv420p10
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 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: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

debian/%.symbols: debian/%.symbols.in
	sed 's/@DEB_VERSION@/${DEB_VERSION}/;s/@DEB_VERSION_EPOCH_UPSTREAM@/${DEB_VERSION_EPOCH_UPSTREAM}/' $< > $@

execute_before_dh_makeshlibs: $(patsubst %,debian/%.symbols,$(SHLIB_PKGS))
	set -e && for pkg in $(EXTRA_PKGS); do \
		mainpkg=`echo $$pkg | sed 's/-extra//'`; \
		cp -f debian/$$mainpkg.symbols debian/$$pkg.symbols; \
	done

# avoid error: Unknown DWARF DW_OP_0
override_dh_dwz:
	dh_dwz -Xlibavcodec -Xlibavfilter -Xlibavutil -Xlibswresample -Xlibswscale