Replace manual setting of the removed av_log_level variable by the
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
505dfb09
DB
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
c21d6325
MR
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
cde2d79a
MR
54 exit 1
55fi
56
74c53c2d
MR
57show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
8c6afa4d
DB
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
3e89171a 65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
d156bede 66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
14a8acf1 67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
74c53c2d 68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
5341d856 70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
4ca5ece5 71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
62560865
DB
72 echo
73 echo "Configuration options:"
e6b9d588
DB
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
0a23c0bb
DB
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
79 echo " and binaries will be unredistributable [no]"
62560865
DB
80 echo " --disable-ffmpeg disable ffmpeg build"
81 echo " --disable-ffplay disable ffplay build"
82 echo " --disable-ffserver disable ffserver build"
e6b9d588 83 echo " --enable-postproc enable GPLed postprocessing support [no]"
fdf11906 84 echo " --enable-avfilter video filter support [no]"
0a23c0bb 85 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
e6b9d588
DB
86 echo " --enable-beosthreads use BeOS threads [no]"
87 echo " --enable-os2threads use OS/2 threads [no]"
88 echo " --enable-pthreads use pthreads [no]"
89 echo " --enable-w32threads use Win32 threads [no]"
90 echo " --enable-x11grab enable X11 grabbing [no]"
62560865
DB
91 echo " --disable-network disable network support [no]"
92 echo " --disable-ipv6 disable IPv6 support [no]"
93 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
94 echo " --enable-gray enable full grayscale support (slower color)"
a9ddb5b1 95 echo " --disable-swscale-alpha disable alpha channel support in swscale"
aa033b1e 96 echo " --disable-fastdiv disable table-based division"
62560865
DB
97 echo " --enable-small optimize for size instead of speed"
98 echo " --disable-aandct disable AAN DCT code"
99 echo " --disable-fft disable FFT code"
100 echo " --disable-golomb disable Golomb code"
101 echo " --disable-mdct disable MDCT code"
68602540 102 echo " --disable-rdft disable RDFT code"
62560865
DB
103 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
104 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
105 echo " --enable-beos-netserver enable BeOS netserver"
106 echo " --disable-encoder=NAME disable encoder NAME"
107 echo " --enable-encoder=NAME enable encoder NAME"
108 echo " --disable-encoders disable all encoders"
109 echo " --disable-decoder=NAME disable decoder NAME"
110 echo " --enable-decoder=NAME enable decoder NAME"
111 echo " --disable-decoders disable all decoders"
112 echo " --disable-muxer=NAME disable muxer NAME"
113 echo " --enable-muxer=NAME enable muxer NAME"
114 echo " --disable-muxers disable all muxers"
115 echo " --disable-demuxer=NAME disable demuxer NAME"
116 echo " --enable-demuxer=NAME enable demuxer NAME"
117 echo " --disable-demuxers disable all demuxers"
118 echo " --enable-parser=NAME enable parser NAME"
119 echo " --disable-parser=NAME disable parser NAME"
120 echo " --disable-parsers disable all parsers"
121 echo " --enable-bsf=NAME enable bitstream filter NAME"
122 echo " --disable-bsf=NAME disable bitstream filter NAME"
123 echo " --disable-bsfs disable all bitstream filters"
124 echo " --enable-protocol=NAME enable protocol NAME"
125 echo " --disable-protocol=NAME disable protocol NAME"
126 echo " --disable-protocols disable all protocols"
127 echo " --disable-indevs disable input devices"
128 echo " --disable-outdevs disable output devices"
129 echo " --disable-devices disable all devices"
130 echo " --enable-filter=NAME enable filter NAME"
131 echo " --disable-filter=NAME disable filter NAME"
132 echo " --disable-filters disable all filters"
133 echo " --list-decoders show all available decoders"
134 echo " --list-encoders show all available encoders"
135 echo " --list-muxers show all available muxers"
136 echo " --list-demuxers show all available demuxers"
137 echo " --list-parsers show all available parsers"
138 echo " --list-protocols show all available protocols"
139 echo " --list-bsfs show all available bitstream filters"
140 echo " --list-indevs show all available input devices"
141 echo " --list-outdevs show all available output devices"
142 echo " --list-filters show all available filters"
0a622b98
MR
143 echo
144 echo "External library support:"
0a23c0bb 145 echo " --enable-avisynth enable reading of AVISynth script files [no]"
27cb5cbc
CEH
146 echo " --enable-bzlib enable bzlib [autodetect]"
147 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
148 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
f7b8bffe 149 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
e6b9d588
DB
150 echo " and libraw1394 [no]"
151 echo " --enable-libdirac enable Dirac support via libdirac [no]"
152 echo " --enable-libfaac enable FAAC support via libfaac [no]"
153 echo " --enable-libfaad enable FAAD support via libfaad [no]"
154 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
155 echo " --enable-libgsm enable GSM support via libgsm [no]"
156 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
31235134 157 echo " --enable-libnut enable NUT (de)muxing via libnut,"
0a23c0bb 158 echo " native (de)muxer exists [no]"
9a77d59a 159 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
e6b9d588
DB
160 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
161 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
162 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
f9def9cc 163 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
e6b9d588
DB
164 echo " native implementation exists [no]"
165 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
1cc60c47 166 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
e6b9d588 167 echo " native MPEG-4/Xvid encoder exists [no]"
732c9a34 168 echo " --enable-mlib enable Sun medialib [no]"
27cb5cbc 169 echo " --enable-zlib enable zlib [autodetect]"
74c53c2d
MR
170 echo ""
171 echo "Advanced options (experts only):"
172 echo " --source-path=PATH path to source code [$source_path]"
173 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
db6107b6 174 echo " --enable-cross-compile assume a cross-compiler is used"
c5200f17
MR
175 echo " --sysroot=PATH root of cross-build tree"
176 echo " --sysinclude=PATH location of cross-build system headers"
4f854758 177 echo " --target-os=OS compiler targets OS [$target_os]"
a7ada2ba
MR
178 echo " --target-exec=CMD command to run executables on target"
179 echo " --target-path=DIR path to view of build directory on target"
89641463 180 echo " --nm=NM use nm tool"
313c46a6 181 echo " --as=AS use assembler AS [$as_default]"
15396d5c 182 echo " --cc=CC use C compiler CC [$cc_default]"
9da6609f
MR
183 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
184 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
185 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
186 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
74c53c2d
MR
187 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
188 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
189 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
ac63af34 190 echo " --extra-version=STRING version string suffix []"
0a23c0bb
DB
191 echo " --build-suffix=SUFFIX library name suffix []"
192 echo " --arch=ARCH select architecture [$arch]"
193 echo " --cpu=CPU select the minimum required CPU (affects"
7c758d33 194 echo " instruction selection, may crash on older CPUs)"
2b4c3615 195 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d 196 echo " (requires enabling PMC)"
4f50c3d5 197 echo " --disable-altivec disable AltiVec optimizations"
3bf96eec 198 echo " --disable-amd3dnow disable 3DNow! optimizations"
a1ef9f08 199 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
0a23c0bb
DB
200 echo " --disable-mmx disable MMX optimizations"
201 echo " --disable-mmx2 disable MMX2 optimizations"
1bb04d5a 202 echo " --disable-sse disable SSE optimizations"
0a23c0bb
DB
203 echo " --disable-ssse3 disable SSSE3 optimizations"
204 echo " --disable-armv5te disable armv5te optimizations"
205 echo " --disable-armv6 disable armv6 optimizations"
26c7aa17 206 echo " --disable-armv6t2 disable armv6t2 optimizations"
3bbcba32 207 echo " --disable-armvfp disable ARM VFP optimizations"
0a23c0bb 208 echo " --disable-iwmmxt disable iwmmxt optimizations"
49276307
DB
209 echo " --disable-mmi disable MMI optimizations"
210 echo " --disable-neon disable neon optimizations"
211 echo " --disable-vis disable VIS optimizations"
7595a5e4 212 echo " --disable-yasm disable use of yasm assembler"
0a622b98
MR
213 echo
214 echo "Developer options (useful when working on FFmpeg itself):"
9c56a1f9 215 echo " --disable-debug disable debugging symbols"
b7d49373 216 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
0a622b98 217 echo " --enable-gprof enable profiling with gprof [$gprof]"
d2bbb2f7 218 echo " --disable-optimizations disable compiler optimizations"
0a622b98 219 echo " --enable-extra-warnings enable more compiler warnings"
87a0fb62 220 echo " --disable-stripping disable stripping of executables and shared libraries"
74c53c2d
MR
221 echo ""
222 echo "NOTE: Object files are built at the place where configure is launched."
60e8bc13 223 exit 0
74c53c2d 224}
cf9d24ad 225
57bd82d4 226log(){
2270b4b2 227 echo "$@" >> $logfile
57bd82d4
MR
228}
229
720c69da 230log_file(){
c8e9f801 231 log BEGIN $1
2270b4b2 232 pr -n -t $1 >> $logfile
c8e9f801
MR
233 log END $1
234}
235
2ba042a7 236echolog(){
c8e9f801 237 log "$@"
57bd82d4 238 echo "$@"
2ba042a7
MR
239}
240
241die(){
242 echolog "$@"
243 cat <<EOF
d326cf7f 244
2ba042a7
MR
245If you think configure made a mistake, make sure you are using the latest
246version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 247ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 248EOF
e155a21a 249 if disabled logging; then
2ba042a7 250 cat <<EOF
e155a21a
DB
251Rerun configure with logging enabled (do not use --disable-logging), and
252include the log this produces with your report.
2ba042a7
MR
253EOF
254 else
255cat <<EOF
e155a21a
DB
256Include the log file "$logfile" produced by configure as this will help
257solving the problem.
2ba042a7
MR
258EOF
259 fi
57bd82d4
MR
260 exit 1
261}
262
6c6007d6 263# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 264toupper(){
6c6007d6 265 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
266}
267
4a5444db 268tolower(){
6c6007d6 269 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
270}
271
14a8acf1
MR
272c_escape(){
273 echo "$*" | sed 's/["\\]/\\\0/g'
274}
275
a8d04fba
MR
276set_all(){
277 value=$1
278 shift
279 for var in $*; do
280 eval $var=$value
281 done
282}
283
72a43668
MR
284set_weak(){
285 value=$1
286 shift
287 for var; do
288 eval : \${$var:=$value}
289 done
290}
291
799c9e9b
MR
292pushvar(){
293 for var in $*; do
294 eval level=\${${var}_level:=0}
295 eval ${var}_${level}="\$$var"
296 eval ${var}_level=$(($level+1))
297 done
298}
299
300popvar(){
301 for var in $*; do
302 eval level=\${${var}_level:-0}
303 test $level = 0 && continue
304 eval level=$(($level-1))
305 eval $var="\${${var}_${level}}"
306 eval ${var}_level=$level
307 eval unset ${var}_${level}
308 done
309}
310
a8d04fba
MR
311enable(){
312 set_all yes $*
313}
314
315disable(){
316 set_all no $*
317}
318
72a43668
MR
319enable_weak(){
320 set_weak yes $*
321}
322
323disable_weak(){
324 set_weak no $*
325}
326
72702705
MR
327enable_safe(){
328 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
329}
330
331disable_safe(){
332 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
333}
334
f9d328da
MR
335do_enable_deep(){
336 for var; do
337 enabled $var && continue
338 eval sel="\$${var}_select"
c510c7b5
MR
339 eval sgs="\$${var}_suggest"
340 pushvar var sgs
f9d328da 341 enable_deep $sel
c510c7b5
MR
342 popvar sgs
343 enable_deep_weak $sgs
f9d328da
MR
344 popvar var
345 done
346}
347
348enable_deep(){
349 do_enable_deep $*
350 enable $*
351}
352
72a43668
MR
353enable_deep_weak(){
354 do_enable_deep $*
355 enable_weak $*
356}
357
57bd82d4 358enabled(){
3250003c
MR
359 test "${1#!}" = "$1" && op== || op=!=
360 eval test "x\$${1#!}" $op "xyes"
44161118
MR
361}
362
37970ebf 363disabled(){
3250003c
MR
364 test "${1#!}" = "$1" && op== || op=!=
365 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
366}
367
44161118
MR
368enabled_all(){
369 for opt; do
370 enabled $opt || return 1
371 done
372}
373
85bca2c5
DB
374disabled_all(){
375 for opt; do
376 disabled $opt || return 1
377 done
378}
379
44161118
MR
380enabled_any(){
381 for opt; do
382 enabled $opt && return 0
383 done
384}
385
85bca2c5
DB
386disabled_any(){
387 for opt; do
388 disabled $opt && return 0
389 done
f7b230a7 390 return 1
85bca2c5
DB
391}
392
c9d19248
MR
393set_default(){
394 for opt; do
88268e94 395 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
396 done
397}
398
4a0d6686
AJ
399is_in(){
400 value=$1
401 shift
402 for var in $*; do
403 [ $var = $value ] && return 0
404 done
405 return 1
406}
407
30fd06be
MR
408check_deps(){
409 for cfg; do
3250003c 410 cfg="${cfg#!}"
799c9e9b
MR
411 enabled ${cfg}_checking && die "Circular dependency for $cfg."
412 disabled ${cfg}_checking && continue
413 enable ${cfg}_checking
414
30fd06be
MR
415 eval dep_all="\$${cfg}_deps"
416 eval dep_any="\$${cfg}_deps_any"
7ef3425f 417 eval dep_sel="\$${cfg}_select"
c510c7b5 418 eval dep_sgs="\$${cfg}_suggest"
799c9e9b 419
c510c7b5
MR
420 pushvar cfg dep_all dep_any dep_sel dep_sgs
421 check_deps $dep_all $dep_any $dep_sel $dep_sgs
422 popvar cfg dep_all dep_any dep_sel dep_sgs
799c9e9b 423
6a702d4c
MR
424 enabled_all $dep_all || disable $cfg
425 enabled_any $dep_any || disable $cfg
7ef3425f 426 disabled_any $dep_sel && disable $cfg
799c9e9b 427
4ec45764
RP
428 if enabled $cfg; then
429 eval dep_extralibs="\$${cfg}_extralibs"
430 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 431 enable_deep $dep_sel
c510c7b5 432 enable_deep_weak $dep_sgs
4ec45764
RP
433 fi
434
799c9e9b 435 disable ${cfg}_checking
30fd06be
MR
436 done
437}
438
44161118
MR
439print_config(){
440 pfx=$1
441 header=$2
442 makefile=$3
443 shift 3
444 for cfg; do
5e622c40 445 ucname="$(toupper $cfg)"
44161118 446 if enabled $cfg; then
3d907e22 447 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
448 echo "${pfx}${ucname}=yes" >> $makefile
449 else
b250f9c6 450 echo "#define ${pfx}${ucname} 0" >> $header
44161118
MR
451 fi
452 done
57bd82d4
MR
453}
454
455flags_saved(){
2270b4b2 456 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
457}
458
dcd479c0 459save_flags(){
57bd82d4 460 flags_saved && return
dcd479c0
MR
461 SAVE_CFLAGS="$CFLAGS"
462 SAVE_LDFLAGS="$LDFLAGS"
463 SAVE_extralibs="$extralibs"
464}
465
466restore_flags(){
f5d28d10 467 flags_saved || return
dcd479c0
MR
468 CFLAGS="$SAVE_CFLAGS"
469 LDFLAGS="$SAVE_LDFLAGS"
470 extralibs="$SAVE_extralibs"
471 unset SAVE_CFLAGS
472 unset SAVE_LDFLAGS
473 unset SAVE_extralibs
474}
475
476temp_cflags(){
477 save_flags
478 CFLAGS="$CFLAGS $*"
479}
480
481temp_ldflags(){
482 save_flags
483 LDFLAGS="$LDFLAGS $*"
484}
485
486temp_extralibs(){
487 save_flags
488 extralibs="$extralibs $*"
489}
490
57bd82d4
MR
491append(){
492 var=$1
493 shift
494 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
495 eval "$var=\"\$$var $*\""
496}
497
498add_cflags(){
499 append CFLAGS "$@"
500}
501
502add_ldflags(){
503 append LDFLAGS "$@"
504}
505
506add_extralibs(){
507 append extralibs "$@"
508}
509
b0cfb663 510check_cmd(){
b3cb5d51 511 log "$@"
2270b4b2 512 "$@" >> $logfile 2>&1
b0cfb663
MR
513}
514
dcd479c0 515check_cc(){
57bd82d4 516 log check_cc "$@"
2270b4b2 517 cat > $TMPC
720c69da 518 log_file $TMPC
b0cfb663 519 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
520}
521
522check_cpp(){
523 log check_cpp "$@"
2270b4b2 524 cat > $TMPC
720c69da 525 log_file $TMPC
b0cfb663 526 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
527}
528
f65883c8
MR
529check_as(){
530 log check_as "$@"
531 cat > $TMPC
532 log_file $TMPC
533 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
534}
535
940f335a
MR
536check_asm(){
537 log check_asm "$@"
538 name="$1"
539 asm="$2"
540 shift 2
f65883c8 541 check_as "$@" <<EOF && enable $name || disable $name
124c21d7 542void foo(void){ __asm__ volatile($asm); }
940f335a
MR
543EOF
544}
545
304d586d
LM
546check_yasm(){
547 log check_yasm "$@"
548 echo "$1" > $TMPS
549 log_file $TMPS
550 shift 1
551 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
552}
553
dcd479c0 554check_ld(){
57bd82d4 555 log check_ld "$@"
0607887f 556 check_cc || return
3155a644
MR
557 flags=''
558 libs=''
559 for f; do
560 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
561 done
562 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
563}
564
565check_cflags(){
57bd82d4
MR
566 log check_cflags "$@"
567 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
568int x;
569EOF
570}
571
572check_ldflags(){
57bd82d4
MR
573 log check_ldflags "$@"
574 check_ld "$@" <<EOF && add_ldflags "$@"
c23a0ac8 575int main(void){ return 0; }
dcd479c0
MR
576EOF
577}
578
579check_header(){
57bd82d4 580 log check_header "$@"
dcd479c0
MR
581 header=$1
582 shift
b77df637
MR
583 disable_safe $header
584 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
585#include <$header>
586int x;
587EOF
588}
589
590check_func(){
57bd82d4 591 log check_func "$@"
dcd479c0
MR
592 func=$1
593 shift
d8bc5f06
MR
594 disable $func
595 check_ld "$@" <<EOF && enable $func
dcd479c0 596extern int $func();
c23a0ac8 597int main(void){ $func(); }
dcd479c0
MR
598EOF
599}
600
2446d3d6
DB
601check_func_headers(){
602 log check_func_headers "$@"
f8d7b072
MR
603 headers=$1
604 func=$2
605 shift 2
606 disable $func
607 incs=""
608 for hdr in $headers; do
609 incs="$incs
610#include <$hdr>"
611 done
cd0d9a9d 612 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 613$incs
d6773f56 614int main(int argc, char **argv){
f8d7b072
MR
615 (void) $func;
616 return 0;
617}
618EOF
619}
620
a5344cf7
SS
621check_cpp_condition(){
622 log check_cpp_condition "$@"
623 header=$1
624 condition=$2
625 check_cpp <<EOF
626#include <$header>
627#if !($condition)
628#error "unsatisfied condition: $condition"
629#endif
630EOF
631}
632
57bd82d4
MR
633check_lib(){
634 log check_lib "$@"
635 header="$1"
636 func="$2"
637 shift 2
fcfcde17
MR
638 temp_extralibs "$@"
639 check_header $header && check_func $func && add_extralibs "$@"
640 err=$?
641 restore_flags
642 return $err
57bd82d4
MR
643}
644
f8d7b072
MR
645check_lib2(){
646 log check_lib2 "$@"
647 headers="$1"
648 func="$2"
649 shift 2
650 temp_extralibs "$@"
2446d3d6 651 check_func_headers "$headers" $func && add_extralibs "$@"
f8d7b072
MR
652 err=$?
653 restore_flags
654 return $err
655}
656
dcd479c0 657check_exec(){
2270b4b2 658 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
659}
660
7dfef245 661check_exec_crash(){
5e622c40 662 code=$(cat)
7dfef245
MR
663
664 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
665 # are safe but may not be available everywhere. Thus we use
666 # raise(SIGTERM) instead. The check is run in a subshell so we
667 # can redirect the "Terminated" message from the shell. SIGBUS
668 # is not defined by standard C so it is used conditionally.
669
2270b4b2 670 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
671#include <signal.h>
672static void sighandler(int sig){
673 raise(SIGTERM);
674}
e5af4a11 675int main(void){
7dfef245
MR
676 signal(SIGILL, sighandler);
677 signal(SIGFPE, sighandler);
678 signal(SIGSEGV, sighandler);
679#ifdef SIGBUS
680 signal(SIGBUS, sighandler);
681#endif
682 { $code }
683}
684EOF
685}
686
72be9e73
DY
687check_type(){
688 log check_type "$@"
689 headers=$1
690 type=$2
691 shift 2
692 disable $type
693 incs=""
694 for hdr in $headers; do
695 incs="$incs
696#include <$hdr>"
697 done
698 check_cc "$@" <<EOF && enable $type
699$incs
700$type v;
701EOF
702}
703
57bd82d4
MR
704require(){
705 name="$1"
706 header="$2"
707 func="$3"
708 shift 3
709 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
710}
711
f8d7b072
MR
712require2(){
713 name="$1"
714 headers="$2"
715 func="$3"
716 shift 3
717 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
718}
719
eea50282
MR
720check_foo_config(){
721 cfg=$1
722 pkg=$2
723 header=$3
724 func=$4
725 shift 4
726 disable $cfg
727 check_cmd ${pkg}-config --version
728 err=$?
729 if test "$err" = 0; then
5e622c40
DB
730 temp_cflags $(${pkg}-config --cflags)
731 temp_extralibs $(${pkg}-config --libs)
eea50282
MR
732 check_lib "$@" $header $func && enable $cfg
733 fi
734 return $err
735}
736
c505dd31
MR
737apply(){
738 file=$1
739 shift
740 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
741}
742
dcd61286
DB
743# CONFIG_LIST contains configurable options, while HAVE_LIST is for
744# system-dependent things.
745
4a0d6686
AJ
746COMPONENT_LIST="
747 bsfs
748 decoders
749 demuxers
750 encoders
3cde40aa 751 filters
c552605c 752 indevs
4a0d6686 753 muxers
c552605c 754 outdevs
4a0d6686
AJ
755 parsers
756 protocols
757"
758
759CONFIG_LIST="
760 $COMPONENT_LIST
e8ed9b7a 761 aandct
f7679c54
VS
762 avfilter
763 avfilter_lavf
c88f5d72
MR
764 avisynth
765 beos_netserver
f402916e 766 bzlib
27a9466b 767 fastdiv
c88f5d72
MR
768 ffmpeg
769 ffplay
770 ffserver
1848f7d9 771 fft
4f034993 772 golomb
c88f5d72 773 gpl
ecfc4f44 774 gprof
d8d0d0b2 775 gray
3abe5fbd 776 hardcoded_tables
c88f5d72 777 ipv6
f5a756ef
DB
778 libamr_nb
779 libamr_wb
f7b8bffe 780 libdc1394
690bfceb 781 libdirac
2eed5a46
DB
782 libfaac
783 libfaad
784 libfaadbin
c88f5d72 785 libgsm
6ebe07fb 786 libmp3lame
c88f5d72 787 libnut
9a77d59a 788 libopenjpeg
f7cd9eed 789 libschroedinger
ae14f311 790 libspeex
150d2772 791 libtheora
c88f5d72 792 libvorbis
1cc60c47
DB
793 libx264
794 libxvid
47a158cb 795 mdct
c88f5d72 796 memalign_hack
a8150374 797 mlib
c88f5d72
MR
798 mpegaudio_hp
799 network
3fe142e2 800 nonfree
4a24ab64 801 postproc
2b4c3615 802 powerpc_perf
68602540 803 rdft
2e35e684 804 shared
bd2216e4 805 small
2e35e684 806 static
a9ddb5b1 807 swscale_alpha
56a059ac 808 x11grab
c88f5d72 809 zlib
4a0d6686 810"
c88f5d72 811
8eee7025
DB
812THREADS_LIST='
813 beosthreads
d22e8442 814 os2threads
8eee7025
DB
815 pthreads
816 w32threads
817'
818
3f5b56e5
MR
819ARCH_LIST='
820 alpha
a2fc0f6a 821 arm
3f5b56e5
MR
822 bfin
823 ia64
824 m68k
825 mips
826 parisc
79cb09b2 827 ppc
3f5b56e5
MR
828 s390
829 sh4
830 sparc
831 sparc64
832 x86
833 x86_32
834 x86_64
835'
836
837ARCH_EXT_LIST='
1ac9331a 838 altivec
3bf96eec 839 amd3dnow
a1ef9f08 840 amd3dnowext
1ac9331a 841 armv5te
edab3048 842 armv6
ab5cb084 843 armv6t2
f55b299a 844 armvfp
3f5b56e5
MR
845 iwmmxt
846 mmi
847 mmx
d7f0920b 848 mmx2
6b18d278 849 neon
799fde37 850 ppc4xx
1bb04d5a 851 sse
9eeed841 852 ssse3
bd9d34a0 853 vis
3f5b56e5
MR
854'
855
856HAVE_LIST="
857 $ARCH_EXT_LIST
858 $THREADS_LIST
35fd8122 859 alsa_asoundlib_h
3f5b56e5 860 altivec_h
c9fdab0d 861 arpa_inet_h
6bd859d6 862 bswap
ecf97f22 863 closesocket
1ac9331a 864 cmov
e16e49ac 865 conio_h
c88f5d72 866 dcbzl
f8aa696f
DB
867 dev_bktr_ioctl_bt848_h
868 dev_bktr_ioctl_meteor_h
869 dev_ic_bt8xx_h
870 dev_video_meteor_ioctl_meteor_h
871 dev_video_bktr_ioctl_bt848_h
18b67ae5 872 dlfcn_h
c88f5d72 873 dlopen
bc574408 874 dos_paths
245626d0
DB
875 ebp_available
876 ebx_available
c2a29455 877 fast_64bit
7073e9fc 878 fast_cmov
7b829d2a 879 fast_unaligned
9d99cc5a 880 fork
da9e86f8 881 gethrtime
4e68cb8a 882 GetProcessTimes
66be5b45 883 getrusage
2e1913b1 884 inet_aton
61d251db 885 inline_asm
0b4a1821
AS
886 libdc1394_1
887 libdc1394_2
a33cab3a
MK
888 llrint
889 lrint
c88f5d72 890 lrintf
f8aa696f
DB
891 machine_ioctl_bt848_h
892 machine_ioctl_meteor_h
c88f5d72
MR
893 malloc_h
894 memalign
6ffa87d3 895 mkstemp
b4e806b2 896 pld
1f91cdce 897 posix_memalign
9cafbd6c 898 ppc64
a33cab3a
MK
899 round
900 roundf
c88f5d72
MR
901 sdl
902 sdl_video_size
b507ebd1 903 setmode
72be9e73 904 socklen_t
deb29777 905 soundcard_h
f8cda19e 906 poll_h
b58412f1 907 sys_mman_h
b091aa44 908 sys_resource_h
81644c2e 909 sys_select_h
deb29777 910 sys_soundcard_h
1b6e8b73 911 sys_videoio_h
d3a4b4e0 912 ten_operands
e16e49ac 913 termios_h
b265431e 914 threads
7b04b8a0 915 truncf
7c5bfe7a 916 VirtualAlloc
6ff3f3e7 917 winsock2_h
304d586d 918 yasm
0cb78cef 919"
44161118 920
b6bb00b0
MR
921# options emitted with CONFIG_ prefix but not available on command line
922CONFIG_EXTRA="
b6bb00b0
MR
923"
924
520cc7f1 925CMDLINE_SELECT="
3f5b56e5 926 $ARCH_EXT_LIST
520cc7f1 927 $CONFIG_LIST
8eee7025 928 $THREADS_LIST
db6107b6 929 cross_compile
520cc7f1
MR
930 debug
931 extra_warnings
8c6afa4d 932 logging
d2bbb2f7 933 optimizations
87a0fb62 934 stripping
7595a5e4 935 yasm
520cc7f1 936"
426be5dc
DB
937
938PATHS_LIST='
d156bede 939 bindir
14a8acf1 940 datadir
26759c44
MR
941 incdir
942 libdir
26759c44
MR
943 mandir
944 prefix
945 shlibdir
426be5dc
DB
946'
947
948CMDLINE_SET="
949 $PATHS_LIST
950 arch
313c46a6 951 as
426be5dc
DB
952 build_suffix
953 cc
954 cpu
955 cross_prefix
ac63af34 956 extra_version
9da6609f
MR
957 host_cc
958 host_cflags
959 host_ldflags
960 host_libs
82bb3329 961 host_os
426be5dc 962 logfile
89641463 963 nm
26759c44 964 source_path
c5200f17
MR
965 sysinclude
966 sysroot
a7ada2ba 967 target_exec
26759c44 968 target_os
a7ada2ba 969 target_path
426be5dc 970"
520cc7f1 971
912f3148
DB
972# code dependency declarations
973
9eeed841 974# architecture extensions
79cb09b2 975altivec_deps="ppc"
3bf96eec 976amd3dnow_deps="mmx"
a1ef9f08 977amd3dnowext_deps="amd3dnow"
a2fc0f6a
MR
978armv5te_deps="arm"
979armv6_deps="arm"
ab5cb084 980armv6t2_deps="arm"
a2fc0f6a
MR
981armvfp_deps="arm"
982iwmmxt_deps="arm"
e241ba14 983mmi_deps="mips"
9eeed841 984mmx_deps="x86"
75aa95a6 985mmx2_deps="mmx"
a2fc0f6a 986neon_deps="arm"
799fde37 987ppc4xx_deps="ppc"
75aa95a6
DB
988sse_deps="mmx"
989ssse3_deps="sse"
bd9d34a0 990vis_deps="sparc"
9eeed841 991
912f3148 992# decoders / encoders
47a158cb 993aac_decoder_select="fft mdct"
d8d12c15 994ac3_decoder_deps="gpl"
47a158cb
MR
995ac3_decoder_select="fft mdct"
996atrac3_decoder_select="fft mdct"
4f034993 997cavs_decoder_select="golomb"
47a158cb 998cook_decoder_select="fft mdct"
2eef7c62 999cscd_decoder_suggest="zlib"
47a158cb 1000dca_decoder_select="fft mdct"
e8ed9b7a 1001dnxhd_encoder_select="aandct"
2eef7c62 1002dxa_decoder_select="zlib"
406ab5cc 1003eac3_decoder_deps="gpl"
47a158cb 1004eac3_decoder_select="fft mdct"
e8ed9b7a 1005eatgq_decoder_select="aandct"
d52b39c7 1006eatqi_decoder_select="aandct"
4f034993
MR
1007ffv1_decoder_select="golomb"
1008flac_decoder_select="golomb"
1009flac_encoder_select="golomb"
2eef7c62
AJ
1010flashsv_decoder_select="zlib"
1011flashsv_encoder_select="zlib"
e8ed9b7a
DB
1012flv_encoder_select="aandct"
1013h261_encoder_select="aandct"
1014h263_encoder_select="aandct"
1015h263p_encoder_select="aandct"
4f034993 1016h264_decoder_select="golomb"
711dae77 1017h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
47a158cb 1018imc_decoder_select="fft mdct"
4f034993
MR
1019jpegls_decoder_select="golomb"
1020jpegls_encoder_select="golomb"
e8ed9b7a 1021ljpeg_encoder_select="aandct"
4f034993 1022loco_decoder_select="golomb"
e8ed9b7a
DB
1023mjpeg_encoder_select="aandct"
1024mpeg1video_encoder_select="aandct"
1025mpeg2video_encoder_select="aandct"
1026mpeg4_encoder_select="aandct"
711dae77
DB
1027mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1028mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
8f6f050a 1029mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
e8ed9b7a
DB
1030msmpeg4v1_encoder_select="aandct"
1031msmpeg4v2_encoder_select="aandct"
1032msmpeg4v3_encoder_select="aandct"
47a158cb
MR
1033nellymoser_decoder_select="fft mdct"
1034nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1035png_decoder_select="zlib"
1036png_encoder_select="zlib"
63cae55d 1037qdm2_decoder_select="fft mdct rdft"
e8ed9b7a
DB
1038rv10_encoder_select="aandct"
1039rv20_encoder_select="aandct"
d52b39c7
AJ
1040rv30_decoder_select="golomb"
1041rv40_decoder_select="golomb"
4f034993
MR
1042shorten_decoder_select="golomb"
1043sonic_decoder_select="golomb"
1044sonic_encoder_select="golomb"
1045sonic_ls_encoder_select="golomb"
1046svq3_decoder_select="golomb"
bee2eac5 1047svq3_decoder_suggest="zlib"
2eef7c62
AJ
1048tiff_decoder_suggest="zlib"
1049tiff_encoder_suggest="zlib"
1050tscc_decoder_select="zlib"
711dae77 1051vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
47a158cb
MR
1052vorbis_decoder_select="fft mdct"
1053vorbis_encoder_select="fft mdct"
1054wmav1_decoder_select="fft mdct"
1055wmav1_encoder_select="fft mdct"
1056wmav2_decoder_select="fft mdct"
1057wmav2_encoder_select="fft mdct"
e8ed9b7a
DB
1058wmv1_encoder_select="aandct"
1059wmv2_encoder_select="aandct"
711dae77 1060wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2eef7c62
AJ
1061zlib_decoder_select="zlib"
1062zlib_encoder_select="zlib"
1063zmbv_decoder_select="zlib"
1064zmbv_encoder_select="zlib"
30fd06be 1065
912f3148 1066# external libraries
f5a756ef
DB
1067libamr_nb_decoder_deps="libamr_nb"
1068libamr_nb_encoder_deps="libamr_nb"
1069libamr_wb_decoder_deps="libamr_wb"
1070libamr_wb_encoder_deps="libamr_wb"
1b71f045 1071libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1072libdirac_encoder_deps="libdirac"
c9171a83 1073libfaac_encoder_deps="libfaac"
69ddbd1d 1074libfaad_decoder_deps="libfaad"
4ec45764 1075libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1076libgsm_decoder_deps="libgsm"
1077libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1078libgsm_ms_decoder_deps="libgsm"
1079libgsm_ms_encoder_deps="libgsm"
1cc60c47 1080libmp3lame_encoder_deps="libmp3lame"
9a77d59a 1081libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1082libschroedinger_decoder_deps="libschroedinger"
1083libschroedinger_encoder_deps="libschroedinger"
ae14f311 1084libspeex_decoder_deps="libspeex"
150d2772 1085libtheora_encoder_deps="libtheora"
b0caf888 1086libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1087libx264_encoder_deps="libx264"
1088libxvid_encoder_deps="libxvid"
30fd06be 1089
912f3148 1090# demuxers / muxers
03a76ba9 1091ac3_demuxer_deps="ac3_parser"
35fd8122
NG
1092alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1093alsa_demuxer_extralibs="-lasound"
1094alsa_muxer_deps="alsa_asoundlib_h"
1095alsa_muxer_extralibs="-lasound"
50383e88 1096audio_beos_demuxer_deps="audio_beos"
4ec45764 1097audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 1098audio_beos_muxer_deps="audio_beos"
4ec45764 1099audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 1100avisynth_demuxer_deps="avisynth"
73483024 1101bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 1102dirac_demuxer_deps="dirac_parser"
fe9bb347 1103dv1394_demuxer_deps="dv1394 dv_demuxer"
f7b8bffe 1104libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
1105libnut_demuxer_deps="libnut"
1106libnut_muxer_deps="libnut"
2eef7c62
AJ
1107matroska_demuxer_suggest="zlib bzlib"
1108mov_demuxer_suggest="zlib"
4bd8e17c 1109mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
1110oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1111oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 1112redir_demuxer_deps="network"
8eb793c4 1113rtp_muxer_deps="network rtp_protocol"
95c21842
LA
1114rtsp_demuxer_deps="sdp_demuxer"
1115sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 1116v4l_demuxer_deps="linux_videodev_h"
1b6e8b73 1117v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
c2345207
RP
1118vfwcap_demuxer_deps="capCreateCaptureWindow"
1119vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 1120x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 1121x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 1122
912f3148 1123# protocols
3fff6382 1124gopher_protocol_deps="network"
c08fb000
AB
1125http_protocol_deps="network"
1126rtp_protocol_deps="udp_protocol"
1127tcp_protocol_deps="network"
1128udp_protocol_deps="network"
1129
f7679c54 1130# filters
81124ba0 1131movie_filter_deps="avfilter_lavf"
f7679c54 1132
912f3148 1133# programs
fa859b4d 1134ffplay_deps="sdl"
6ad42348 1135ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1136ffserver_extralibs='$ldl'
a2830dca 1137
912f3148 1138
de6d9b64 1139# default parameters
8a608357 1140
2ba042a7 1141logfile="config.err"
8a608357
MR
1142
1143# installation paths
c9d19248
MR
1144prefix_default="/usr/local"
1145bindir_default='${prefix}/bin'
14a8acf1 1146datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1147incdir_default='${prefix}/include'
1148libdir_default='${prefix}/lib'
1149mandir_default='${prefix}/share/man'
1150shlibdir_default="$libdir_default"
8a608357
MR
1151
1152# toolchain
11e6d03a 1153ar="ar"
13c7df3d 1154cc_default="gcc"
9da6609f 1155host_cc_default="gcc"
11e6d03a 1156ln_s="ln -sf"
89641463 1157nm_default="nm"
11e6d03a 1158objformat="elf"
be7109c1 1159ranlib="ranlib"
0f3cb305 1160strip="strip"
11e6d03a 1161yasmexe="yasm"
8a608357
MR
1162
1163# machine
5e622c40 1164arch=$(uname -m)
38d0a8aa 1165cpu="generic"
8a608357 1166
8a608357 1167# OS
4f854758 1168target_os=$(tolower $(uname -s))
82bb3329 1169host_os=$target_os
8a608357 1170
8a608357 1171# configurable options
497237c7 1172enable debug
aa033b1e 1173enable fastdiv
497237c7
RP
1174enable ffmpeg
1175enable ffplay
1176enable ffserver
1177enable ipv6
497237c7
RP
1178enable mpegaudio_hp
1179enable network
8400d6b8 1180enable optimizations
497237c7 1181enable protocols
530dc538 1182enable static
87a0fb62 1183enable stripping
a9ddb5b1 1184enable swscale_alpha
8a608357 1185
8a608357 1186# build settings
11a9d3e8 1187add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
9987769a 1188SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1189FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1190LIBPREF="lib"
1191LIBSUF=".a"
c5f14466
RP
1192FULLNAME='$(NAME)$(BUILDSUF)'
1193LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1194SLIBPREF="lib"
1195SLIBSUF=".so"
c5f14466 1196SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1197SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1198SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1199LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1200
9da6609f
MR
1201host_cflags='-O3 -g -Wall'
1202host_libs='-lm'
1203
a7ada2ba
MR
1204target_path='.'
1205
0d7dca36
DB
1206# gcc stupidly only outputs the basename of targets with -MM, but we need the
1207# full relative path for objects in subdirectories for non-recursive Make.
333d5374 1208DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
315c741d 1209
c597172e 1210# find source path
5e622c40 1211source_path="$(dirname "$0")"
497237c7 1212enable source_path_used
c597172e 1213if test -z "$source_path" -o "$source_path" = "." ; then
5e622c40 1214 source_path="$(pwd)"
497237c7 1215 disable source_path_used
c597172e 1216else
5e622c40 1217 source_path="$(cd "$source_path"; pwd)"
c597172e 1218 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1219 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1220 test -e "$source_path/config.h" &&
1221 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1222fi
1223
13cbe2c0
MR
1224for v in "$@"; do
1225 r="${v#*=}"
1226 l="${v%$r}"
1227 test "$r" = "${r#* }" || r="'$r'"
1228 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1229done
c597172e 1230
73ef8980
MR
1231find_things(){
1232 thing=$1
1233 pattern=$2
1234 file=$source_path/$3
932ccf39 1235 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1236}
1237
1238ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1239DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1240PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1241BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1242MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1243DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1244OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1245INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1246PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1247FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1248
7483e694
DB
1249enable $ARCH_EXT_LIST \
1250 $DECODER_LIST \
1251 $ENCODER_LIST \
1252 $PARSER_LIST \
1253 $BSF_LIST \
1254 $DEMUXER_LIST \
1255 $MUXER_LIST \
f7679c54 1256 $FILTER_LIST \
7483e694
DB
1257 $PROTOCOL_LIST \
1258 $INDEV_LIST \
1259 $OUTDEV_LIST \
c597172e
MR
1260
1261die_unknown(){
1262 echo "Unknown option \"$1\"."
1263 echo "See $0 --help for available options."
1264 exit 1
1265}
1266
794f8e97 1267show_list() {
bf0c4afa
RP
1268 suffix=_$1
1269 shift
1270 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1271 exit 0
1272}
1273
c597172e 1274for opt do
7483e694
DB
1275 optval="${opt#*=}"
1276 case "$opt" in
0f010b2f 1277 --extra-cflags=*) add_cflags $optval
7483e694 1278 ;;
0f010b2f 1279 --extra-ldflags=*) add_ldflags $optval
7483e694 1280 ;;
0f010b2f 1281 --extra-libs=*) add_extralibs $optval
7483e694 1282 ;;
8fb1cb58 1283 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1284 ;;
40bcf4c7
BL
1285 --enable-debug=*) debuglevel="$optval"
1286 ;;
7483e694 1287 --enable-*=*|--disable-*=*)
5e622c40 1288 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
7483e694 1289 case "$thing" in
81124ba0 1290 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1291 *) die_unknown "$opt" ;;
1292 esac
1293 ;;
1294 --enable-?*|--disable-?*)
5e622c40 1295 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55
MR
1296 if is_in $option $COMPONENT_LIST; then
1297 eval $action \$$(toupper ${option%s})_LIST
1298 elif is_in $option $CMDLINE_SELECT; then
1299 $action $option
1300 else
1301 die_unknown $opt
1302 fi
7483e694
DB
1303 ;;
1304 --list-*)
1305 NAME="${opt#--list-}"
1306 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1307 NAME=${NAME%s}
1308 eval show_list $NAME \$$(toupper $NAME)_LIST
1309 ;;
1310 --help|-h) show_help
1311 ;;
1312 *)
884a36a7 1313 optname="${opt%%=*}"
26759c44
MR
1314 optname="${optname#--}"
1315 optname=$(echo "$optname" | sed 's/-/_/g')
1316 is_in $optname $CMDLINE_SET || die_unknown $opt
1317 eval $optname='$optval'
7483e694
DB
1318 ;;
1319 esac
c597172e
MR
1320done
1321
bcea99bb
MR
1322disabled logging && logfile=/dev/null
1323
13cbe2c0 1324echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1325set >> $logfile
1326
9da6609f
MR
1327test -n "$cross_prefix" && enable cross_compile
1328
adb2b908 1329ar="${cross_prefix}${ar}"
11e6d03a 1330cc_default="${cross_prefix}${cc_default}"
20e0ed95 1331nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1332ranlib="${cross_prefix}${ranlib}"
1333strip="${cross_prefix}${strip}"
1334
c5200f17
MR
1335sysinclude_default="${sysroot}/usr/include"
1336
75800dce
MR
1337set_default cc nm sysinclude
1338as_default=$cc
9da6609f
MR
1339enabled cross_compile || host_cc_default=$cc
1340set_default host_cc
13c7df3d 1341
82bb3329
MR
1342exesuf() {
1343 case $1 in
1344 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1345 esac
1346}
1347
1348EXESUF=$(exesuf $target_os)
1349HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1350
e4e69e0b 1351# set temporary file name
a49d42c2 1352: ${TMPDIR:=$TEMPDIR}
c51fafa1 1353: ${TMPDIR:=$TMP}
a49d42c2 1354: ${TMPDIR:=/tmp}
e4e69e0b 1355
54460a83
MR
1356if ! check_cmd type mktemp; then
1357 # simple replacement for missing mktemp
1358 # NOT SAFE FOR GENERAL USE
1359 mktemp(){
1360 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1361 }
1362fi
1363
1364tmpfile(){
1365 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1366 (set -C; exec > $tmp) 2>/dev/null ||
1367 die "Unable to create temoporary file in $TMPDIR."
1368 append TMPFILES $tmp
1369 eval $1=$tmp
1370}
1371
1372trap 'rm -f -- $TMPFILES' EXIT
1373trap exit HUP INT TERM
1374
1375tmpfile TMPC .c
1376tmpfile TMPE $EXESUF
1377tmpfile TMPH .h
1378tmpfile TMPO .o
1379tmpfile TMPS .S
1380tmpfile TMPSH .sh
1381
1382unset -f mktemp
e4e69e0b 1383
993f2d0f
MR
1384# make sure we can execute files in $TMPDIR
1385cat > $TMPSH 2>> $logfile <<EOF
1386#! /bin/sh
1387EOF
1388chmod +x $TMPSH >> $logfile 2>&1
1389if ! $TMPSH >> $logfile 2>&1; then
1390 cat <<EOF
1391Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1392variable to another directory and make sure that it is not mounted noexec.
1393EOF
1394 die "Sanity test failed."
1395fi
993f2d0f 1396
3a636b6f 1397if $cc --version 2>/dev/null | grep -qi gcc; then
629687f6
MR
1398 cc_type=gcc
1399elif $cc --version 2>/dev/null | grep -q Intel; then
1400 cc_type=icc
1401elif $cc -v 2>&1 | grep -q xlc; then
1402 cc_type=xlc
df442a8d
MR
1403elif $cc -V 2>/dev/null | grep -q Compaq; then
1404 cc_type=ccc
1405 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
03754fcd 1406 debuglevel=3
df442a8d 1407 add_ldflags -Wl,-z,now # calls to libots crash without this
03e37762
MR
1408elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1409 test -d "$sysroot" || die "No valid sysroot specified."
1410 cc_type=armcc
1411 armcc_conf="$PWD/armcc.conf"
1412 $cc --arm_linux_configure \
1413 --arm_linux_config_file="$armcc_conf" \
1414 --configure_sysroot="$sysroot" \
1415 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1416 die "Error creating armcc configuration file."
1417 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1418 as_default="${cross_prefix}gcc"
629687f6
MR
1419fi
1420
1421test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1422
75800dce
MR
1423set_default as
1424
154d432c
MR
1425if test -n "$sysroot"; then
1426 case "$cc_type" in
1427 gcc)
1428 add_cflags --sysroot="$sysroot"
1429 add_ldflags --sysroot="$sysroot"
1430 ;;
1431 esac
1432fi
1433
993f2d0f
MR
1434# compiler sanity check
1435check_exec <<EOF
1436int main(void){ return 0; }
1437EOF
1438if test "$?" != 0; then
1439 echo "$cc is unable to create an executable file."
1440 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1441 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1442 echo "Only do this if you know what cross compiling means."
1443 fi
1444 die "C compiler test failed."
1445fi
1446
e9b9a2f8 1447check_cflags -std=c99
9d821fc2
DB
1448check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1449#include <stdlib.h>
1450EOF
1451check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1452#include <stdlib.h>
1453EOF
e9b9a2f8 1454
b24dbcbd 1455case "$arch" in
b24dbcbd
RP
1456 alpha)
1457 arch="alpha"
1458 enable fast_64bit
c0a02a3e 1459 check_cflags -mieee
b24dbcbd 1460 ;;
cfdb6148
MR
1461 arm|armv[4567]*l)
1462 arch="arm"
b24dbcbd 1463 ;;
f4870943
MR
1464 avr32)
1465 ;;
cfdb6148
MR
1466 bfin)
1467 arch="bfin"
1468 ;;
1469 ia64)
1470 arch="ia64"
b24dbcbd 1471 enable fast_64bit
cfdb6148
MR
1472 ;;
1473 m68k)
1474 arch="m68k"
b24dbcbd 1475 ;;
de3a1240 1476 mips|mipsel|IP*)
b24dbcbd
RP
1477 arch="mips"
1478 ;;
de3a1240
DB
1479 mips64)
1480 arch="mips"
1481 enable fast_64bit
1482 ;;
61597a98 1483 parisc|hppa)
b24dbcbd
RP
1484 arch="parisc"
1485 ;;
61597a98 1486 parisc64|hppa64)
b24dbcbd
RP
1487 arch="parisc"
1488 enable fast_64bit
1489 ;;
cfdb6148
MR
1490 "Power Macintosh"|ppc|powerpc)
1491 arch="ppc"
1492 enable fast_unaligned
1493 ;;
1494 ppc64)
1495 arch="ppc"
1496 enable fast_64bit
1497 enable fast_unaligned
1498 ;;
b24dbcbd
RP
1499 s390|s390x)
1500 arch="s390"
1501 ;;
cfdb6148
MR
1502 sh4|sh)
1503 arch="sh4"
b24dbcbd 1504 ;;
cfdb6148
MR
1505 sparc)
1506 arch="sparc"
1507 ;;
1508 sun4u|sparc64)
1509 arch="sparc"
1510 subarch="sparc64"
b24dbcbd
RP
1511 enable fast_64bit
1512 ;;
cfdb6148
MR
1513 i386|i486|i586|i686|i86pc|BePC)
1514 arch="x86"
1515 subarch="x86_32"
1516 enable fast_unaligned
1517 ;;
1518 x86_64|amd64)
1519 arch="x86"
1520 subarch="x86_32"
1521 enable cmov
1522 enable fast_cmov
1523 enable fast_unaligned
1524 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1525 int test[sizeof(char*) - 7];
1526EOF
b24dbcbd
RP
1527 ;;
1528 *)
1529 arch="unknown"
1530 ;;
1531esac
1532
62045d48 1533enable $arch $subarch
b24dbcbd 1534
7483e694 1535# OS specific
4f854758 1536case $target_os in
7483e694 1537 beos|haiku|zeta)
c9d19248 1538 prefix_default="$HOME/config"
7483e694 1539 # helps building libavcodec
0f010b2f 1540 add_cflags -DPIC -fomit-frame-pointer
7483e694 1541 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1542 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1543 case "$gcc_version" in
1544 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1545 disable mmx
1546 ;;
1547 *20010315*) echo "BeBits gcc"
0f010b2f 1548 add_cflags -fno-expensive-optimizations
7483e694
DB
1549 ;;
1550 esac
7483e694
DB
1551 SHFLAGS=-nostart
1552 # enable BeOS things
1553 enable audio_beos
1554 # no need for libm, but the inet stuff
1555 # Check for BONE
1556 # XXX: actually should check for NOT net_server
78fe7631 1557 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1558 network_extralibs="-lbind -lsocket"
1559 else
1560 enable beos_netserver
1561 network_extralibs="-lnet"
1562 fi ;;
1563 sunos)
1564 FFSERVERLDFLAGS=""
9987769a 1565 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694 1566 network_extralibs="-lsocket -lnsl"
e193c74e 1567 add_cflags -D__EXTENSIONS__
7483e694
DB
1568 ;;
1569 netbsd)
1570 oss_demuxer_extralibs="-lossaudio"
1571 oss_muxer_extralibs="-lossaudio"
1572 ;;
1573 openbsd)
1574 disable need_memalign
1575 LIBOBJFLAGS='$(PIC)'
7483e694 1576 SHFLAGS='-shared'
7483e694
DB
1577 oss_demuxer_extralibs="-lossaudio"
1578 oss_muxer_extralibs="-lossaudio"
1579 ;;
1580 freebsd)
1581 disable need_memalign
1582 ;;
1583 bsd/os)
1584 osextralibs="-lpoll -lgnugetopt"
1585 strip="strip -d"
1586 ;;
1587 darwin)
1588 disable need_memalign
0138c54e 1589 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
1590 strip="strip -x"
1591 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1592 SLIBSUF=".dylib"
1593 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1594 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1595 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 1596 objformat="macho"
1b0f6fb8 1597 enabled x86_64 && objformat="macho64"
7483e694
DB
1598 ;;
1599 mingw32*)
4f854758 1600 target_os=mingw32
dcc01c06 1601 LIBTARGET=i386
1fc9fb8a 1602 if enabled x86_64; then
dcc01c06
RP
1603 disable need_memalign
1604 LIBTARGET=x64
1605 fi
fbd971a4 1606 shlibdir_default="$bindir_default"
7483e694
DB
1607 disable ffserver
1608 SLIBPREF=""
1609 SLIBSUF=".dll"
7483e694
DB
1610 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1611 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 1612 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1613 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1614 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1615 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 1616 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 1617 objformat="win32"
bc574408 1618 enable dos_paths
b1549d61 1619 if ! enabled x86_64; then
f7ad5aa2
RP
1620 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1621 die "ERROR: MinGW runtime version must be >= 3.15."
1622 enabled_any avisynth vfwcap_demuxer &&
1623 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1624 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1625 fi
7483e694
DB
1626 ;;
1627 cygwin*)
4f854758 1628 target_os=cygwin
fbd971a4 1629 shlibdir_default="$bindir_default"
7483e694
DB
1630 SLIBPREF="cyg"
1631 SLIBSUF=".dll"
1632 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1633 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1634 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 1635 objformat="win32"
bc574408 1636 enable dos_paths
7483e694 1637 ;;
4f365f37 1638 *-dos|freedos|opendos)
fdf11906 1639 disable ffplay ffserver
4f365f37
MK
1640 disable $INDEV_LIST $OUTDEV_LIST
1641 network_extralibs="-lsocket"
ff1c015d 1642 objformat="coff"
bc574408 1643 enable dos_paths
4f365f37 1644 ;;
7483e694 1645 linux)
7483e694
DB
1646 enable dv1394
1647 ;;
1648 irix*)
4f854758 1649 target_os=irix
7483e694
DB
1650 ranlib="echo ignoring ranlib"
1651 ;;
d22e8442 1652 os/2*)
d22e8442
DY
1653 strip="lxlite"
1654 ln_s="cp -f"
d22e8442 1655 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1656 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1657 FFSERVERLDFLAGS=""
287d3b13 1658 LIBSUF="_s.a"
d22e8442
DY
1659 SLIBPREF=""
1660 SLIBSUF=".dll"
1661 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1662 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1663 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1664 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1665 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1666 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1667 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1668 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1669 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1670 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1671 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1672 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 1673 enable dos_paths
d22e8442
DY
1674 ;;
1675
7483e694 1676 *)
4f924f9a 1677 die "Unknown OS '$target_os'."
7483e694
DB
1678 ;;
1679esac
1680
c9d19248
MR
1681set_default $PATHS_LIST
1682
c597172e 1683add_extralibs $osextralibs
de6d9b64 1684
28d8e661
DB
1685# Combine FFLDFLAGS and the LDFLAGS environment variable.
1686LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1687
320d060a 1688# we need to build at least one lib type
93b3c083 1689if ! enabled_any static shared; then
320d060a
DB
1690 cat <<EOF
1691At least one library type must be built.
1692Specify --enable-static to build the static libraries or --enable-shared to
1693build the shared libraries as well. To only build the shared libraries specify
1694--disable-static in addition to --enable-shared.
1695EOF
1696 exit 1;
1697fi
1698
abc4e572 1699disabled static && LIBNAME=""
2a320695 1700
a2234ceb
RP
1701if enabled_any libfaad libfaadbin ; then
1702 if check_header faad.h; then
295b8c70 1703 check_cc <<EOF
a2234ceb
RP
1704#include <faad.h>
1705#ifndef FAAD2_VERSION
1706ok faad1
1707#endif
db817cf3 1708int main(void) { return 0; }
a2234ceb
RP
1709EOF
1710 test $? = 0 && enable libfaad2
1711 else
ff3dac65 1712 die "FAAD test failed."
a2234ceb
RP
1713 fi
1714fi
1715
1716
93b3c083 1717if ! enabled gpl; then
54118497
RP
1718 die_gpl_disabled(){
1719 name=$1
1720 shift
1721 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1722 }
4a24ab64 1723 die_gpl_disabled "The Postprocessing code" postproc
1cc60c47
DB
1724 die_gpl_disabled "libx264" libx264
1725 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1726 die_gpl_disabled "FAAD2" libfaad2
1727 die_gpl_disabled "The X11 grabber" x11grab
ebb810d9 1728fi
b2e3c528 1729
3fe142e2
DB
1730if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1731 die "libamr is nonfree and --enable-nonfree is not specified."
1732fi
1733
9eeed841 1734check_deps $ARCH_EXT_LIST
0f3cb305 1735
5d323602
MR
1736test -z "$need_memalign" && need_memalign="$mmx"
1737
cf9d24ad 1738#Darwin CC versions
4f854758 1739if test $target_os = darwin; then
629687f6 1740 if enabled xlc; then
0f010b2f 1741 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
cf9d24ad 1742 else
0f010b2f
DB
1743 add_cflags -pipe
1744 check_cflags -force_cpusubtype_ALL
1745 check_cflags -Wno-sign-compare
f946a9a4 1746 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1747 fi
2a1a6b64
MN
1748fi
1749
40617a6d 1750disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 1751
a4adb608 1752# Add processor-specific flags
38d0a8aa 1753if test $cpu != "generic"; then
bc8ec47b
MR
1754 warn_altivec(){
1755 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1756 }
38d0a8aa 1757 case $cpu in
bb270c08 1758 601|ppc601|PowerPC601)
0f010b2f 1759 add_cflags -mcpu=601
bc8ec47b 1760 warn_altivec enabled PPC601
bb270c08
DB
1761 ;;
1762 603*|ppc603*|PowerPC603*)
0f010b2f 1763 add_cflags -mcpu=603
bc8ec47b 1764 warn_altivec enabled PPC603
bb270c08
DB
1765 ;;
1766 604*|ppc604*|PowerPC604*)
0f010b2f 1767 add_cflags -mcpu=604
bc8ec47b 1768 warn_altivec enabled PPC604
bb270c08
DB
1769 ;;
1770 G3|g3|75*|ppc75*|PowerPC75*)
0f010b2f 1771 add_cflags -mcpu=750 -mpowerpc-gfxopt
bc8ec47b 1772 warn_altivec enabled PPC75x
bb270c08
DB
1773 ;;
1774 G4|g4|745*|ppc745*|PowerPC745*)
0f010b2f 1775 add_cflags -mcpu=7450 -mpowerpc-gfxopt
bc8ec47b 1776 warn_altivec disabled PPC745x
bb270c08
DB
1777 ;;
1778 74*|ppc74*|PowerPC74*)
0f010b2f 1779 add_cflags -mcpu=7400 -mpowerpc-gfxopt
bc8ec47b 1780 warn_altivec disabled PPC74xx
bb270c08
DB
1781 ;;
1782 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
0f010b2f 1783 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
bc8ec47b 1784 warn_altivec disabled PPC970
9cafbd6c 1785 enable ppc64
bb270c08 1786 ;;
e07e357d 1787 Cell|CELL|cell)
0f010b2f 1788 add_cflags -mcpu=cell
e07e357d 1789 warn_altivec disabled Cell
9cafbd6c 1790 enable ppc64
e07e357d 1791 ;;
e7768fc5
GP
1792 # targets that do NOT support conditional mov (cmov)
1793 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
0f010b2f 1794 add_cflags -march=$cpu
497237c7 1795 disable cmov
e7768fc5
GP
1796 ;;
1797 # targets that do support conditional mov (cmov)
416519dd 1798 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
0f010b2f 1799 add_cflags -march=$cpu
497237c7
RP
1800 enable cmov
1801 enable fast_cmov
94e4c3a3
GP
1802 ;;
1803 # targets that do support conditional mov but on which it's slow
800a5a19 1804 pentium4|pentium4m|prescott|nocona)
0f010b2f 1805 add_cflags -march=$cpu
497237c7
RP
1806 enable cmov
1807 disable fast_cmov
bb270c08 1808 ;;
d7b34d08 1809 sparc64)
0f010b2f 1810 add_cflags -mcpu=v9
d7b34d08 1811 ;;
f2e49553 1812 arm11*|cortex*)
0f010b2f 1813 add_cflags -mcpu=$cpu
f2e49553
MR
1814 enable fast_unaligned
1815 ;;
0223bd6f 1816 armv*)
0f010b2f 1817 add_cflags -march=$cpu
0223bd6f 1818 ;;
f2e49553 1819 arm*)
0f010b2f 1820 add_cflags -mcpu=$cpu
6b19786b 1821 ;;
1cd11856 1822 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
df442a8d 1823 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1cd11856 1824 ;;
bb270c08 1825 *)
7483e694 1826 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1827 ;;
a4adb608
MN
1828 esac
1829fi
1830
b4d96ba2
MR
1831check_cc <<EOF || die "Symbol mangling check failed."
1832int ff_extern;
1833EOF
2f05d9c1 1834sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1835extern_prefix=${sym%%ff_extern*}
1836
f65883c8
MR
1837check_cc <<EOF && enable inline_asm
1838void foo(void) { __asm__ volatile ("" ::); }
1839EOF
61d251db 1840
9eeed841 1841if enabled x86; then
44965991
PI
1842 # check whether EBP is available on x86
1843 # As 'i' is stored on the stack, this program will crash
1844 # if the base pointer is used to access it because the
1845 # base pointer is cleared in the inline assembly code.
7dfef245 1846 check_exec_crash <<EOF && enable ebp_available
44965991 1847 volatile int i=0;
be449fca 1848 __asm__ volatile (
44965991
PI
1849 "xorl %%ebp, %%ebp"
1850 ::: "%ebp");
1851 return i;
44965991
PI
1852EOF
1853
1854 # check wether EBX is available on x86
940f335a 1855 check_asm ebx_available '"":::"%ebx"'
8e380710 1856
d3a4b4e0
DB
1857 # check whether more than 10 operands are supported
1858 check_cc <<EOF && enable ten_operands
1859int main(void) {
1860 int x=0;
1861 __asm__ volatile(
1862 ""
1863 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1864 );
1865 return 0;
1866}
1867EOF
1868
d7f0920b 1869 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1870 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 1871 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
1872
1873 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 1874
d52481b9 1875 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d
LM
1876 enabled x86_64 && append YASMFLAGS "-m amd64"
1877 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1878 case "$objformat" in
1879 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1b0f6fb8 1880 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
304d586d
LM
1881 *) append YASMFLAGS "-DPREFIX" ;;
1882 esac
7595a5e4 1883 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
44965991
PI
1884fi
1885
87ea51e0
LB
1886# check for assembler specific support
1887
5b6c2cbd 1888enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
799fde37 1889enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
87ea51e0 1890
57bd82d4
MR
1891# check for SIMD availability
1892
115329f1 1893# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1894if enabled altivec; then
3ed1a2ee
DB
1895 check_cflags -maltivec -mabi=altivec &&
1896 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1897 check_cflags -faltivec
b6e52719 1898
0182fee8 1899 # check if our compiler supports Motorola AltiVec C API
497237c7 1900 check_cc <<EOF || disable altivec
dcd479c0 1901$inc_altivec_h
a9a07762
MN
1902int main(void) {
1903 vector signed int v1, v2, v3;
1904 v1 = vec_add(v2,v3);
1905 return 0;
1906}
1907EOF
b006b26c
DB
1908
1909 # check if our compiler supports braces for vector declarations
80a61f08 1910 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
b006b26c 1911$inc_altivec_h
80a61f08 1912int main (void) { (vector int) {1}; return 0; }
b006b26c 1913EOF
a9a07762 1914fi
ab6c65f6 1915
b4e806b2 1916# We have to check if pld is a nop and disable it.
a2fc0f6a 1917enabled arm && check_asm pld '"pld [r0]"'
940f335a
MR
1918enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1919enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
ab5cb084 1920enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
f55b299a 1921enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1922enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1923enabled mmi && check_asm mmi '"lq $2, 0($2)"'
6b18d278 1924enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
940f335a 1925enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1926
0f010b2f 1927enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
8b03def6 1928
57bd82d4
MR
1929# ---
1930# big/little-endian test
9eebe687
MR
1931check_cc <<EOF || die "endian test failed"
1932unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1933EOF
d04d9e16 1934od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1935
a3999908 1936# ---
3d204385
NK
1937# check availability of some header files
1938
a98bb16d
RP
1939if check_func dlopen; then
1940 ldl=
1941elif check_func dlopen -ldl; then
1942 ldl=-ldl
8bf5d58f
MN
1943fi
1944
75ecf149
DB
1945# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1946check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1947
7483e694
DB
1948check_func fork
1949check_func gethrtime
1950check_func getrusage
094c09bb 1951check_func inet_aton $network_extralibs
7483e694
DB
1952check_func memalign
1953check_func mkstemp
1f91cdce 1954check_func posix_memalign
b507ebd1 1955check_func_headers io.h setmode
2446d3d6 1956check_func_headers windows.h GetProcessTimes
7c5bfe7a 1957check_func_headers windows.h VirtualAlloc
6ffa87d3 1958
e16e49ac 1959check_header conio.h
a98bb16d
RP
1960check_header dlfcn.h
1961check_header malloc.h
bf6ce82d 1962check_header poll.h
b58412f1 1963check_header sys/mman.h
b091aa44 1964check_header sys/resource.h
bf6ce82d 1965check_header sys/select.h
a98bb16d 1966check_header termios.h
272081b0
CEH
1967check_header vdpau/vdpau.h
1968check_header vdpau/vdpau_x11.h
68178ca9 1969check_header X11/extensions/XvMClib.h
a98bb16d 1970
1f91cdce
RP
1971if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1972 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 1973fi
e16e49ac 1974
a4fa192c 1975disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 1976disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
1977
1978# check for some common methods of building with pthread support
1979# do this before the optional library checks as some of them require pthreads
1980if enabled pthreads; then
9e7fd101
MR
1981 if check_func pthread_create; then
1982 :
1983 elif check_func pthread_create -pthread; then
1984 add_cflags -pthread
afc9aee2 1985 add_extralibs -pthread
9e7fd101
MR
1986 elif check_func pthread_create -pthreads; then
1987 add_cflags -pthreads
afc9aee2 1988 add_extralibs -pthreads
8d94f606
GT
1989 elif check_func pthread_create -lpthreadGC2; then
1990 add_extralibs -lpthreadGC2
9e7fd101
MR
1991 elif ! check_lib pthread.h pthread_create -lpthread; then
1992 die "ERROR: can't find pthreads library"
1993 fi
57bd82d4
MR
1994fi
1995
8eee7025 1996for thread in $THREADS_LIST; do
e5f94c2b 1997 if enabled $thread; then
3ae3b721
RP
1998 test -n "$thread_type" &&
1999 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2000 thread_type="$thread"
e5f94c2b
RP
2001 fi
2002done
2003
fdf88598
MR
2004check_lib math.h sin -lm
2005
a33cab3a 2006# test for C99 functions in math.h
7b04b8a0 2007for func in llrint lrint lrintf round roundf truncf; do
a33cab3a 2008 check_exec <<EOF && enable $func || disable $func
f32adb22 2009#include <math.h>
a33cab3a 2010int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 2011EOF
a33cab3a 2012done
f32adb22 2013
57bd82d4 2014# these are off by default, so fail if requested and not available
79fda097 2015enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
2016enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2017enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
e3cc7d6f 2018enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
36718e51
DB
2019 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2020 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
2021enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2022enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2023enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2024enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2025enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3d6fac8c 2026enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2027enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2028 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2029enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
7483e694
DB
2030enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2031enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2bfecf73 2032enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
57f0ec6e
MR
2033 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2034 die "ERROR: libx264 version must be >= 0.65."; }
2bfecf73 2035enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2036enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2037
0b4a1821
AS
2038# libdc1394 check
2039if enabled libdc1394; then
2040 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2041 enable libdc1394_2; } ||
2042 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2043 enable libdc1394_1; } ||
2044 die "ERROR: No version of libdc1394 found "
2045fi
2046
2047
c13e1abd
FH
2048_restrict=
2049for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 2050 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
2051void foo(char * $restrict_keyword p);
2052EOF
c13e1abd
FH
2053done
2054
a86b921c 2055##########################################
29799f8b 2056# SDL check
a86b921c 2057
497237c7
RP
2058disable sdl_too_old
2059disable sdl
6a1a892f 2060SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2061if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2062 sdl_cflags=$("${SDL_CONFIG}" --cflags)
225e21ef 2063 temp_cflags $sdl_cflags
5e622c40 2064 temp_extralibs $("${SDL_CONFIG}" --libs)
1ca5d97f 2065 if check_lib2 SDL.h SDL_Init; then
5e622c40 2066 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
29f3b38a 2067 if test "$_sdlversion" -lt 121 ; then
497237c7 2068 enable sdl_too_old
dcd479c0 2069 else
497237c7 2070 enable sdl
225e21ef 2071 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 2072#include <SDL.h>
d6773f56 2073int main(int argc, char **argv){
29f3b38a
MR
2074 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2075 int w = vi->current_w;
2076 return 0;
2077}
2078EOF
dcd479c0
MR
2079 fi
2080 fi
29f3b38a 2081 restore_flags
c3f6b472 2082fi
57bd82d4 2083
2270b4b2 2084texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2085
7a91333f 2086##########################################
73b46a95
RP
2087# Network check
2088
2089if enabled network; then
96000432 2090 check_type "sys/types.h sys/socket.h" socklen_t
73b46a95
RP
2091 # Prefer arpa/inet.h over winsock2
2092 if check_header arpa/inet.h ; then
2093 check_func closesocket
2094 elif check_header winsock2.h ; then
ea10ddde 2095 network_extralibs="-lws2_32"
72be9e73 2096 check_type ws2tcpip.h socklen_t
2446d3d6 2097 check_func_headers winsock2.h closesocket
73b46a95
RP
2098 fi
2099fi
2100
2101##########################################
29799f8b 2102# IPv6 check
7a91333f 2103
497237c7 2104enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
2105#include <sys/types.h>
2106#include <sys/socket.h>
2107#include <netinet/in.h>
2108#include <netdb.h>
db817cf3 2109int main(void) {
7483e694
DB
2110 struct sockaddr_storage saddr;
2111 struct ipv6_mreq mreq6;
2112 getaddrinfo(0,0,0,0);
2113 getnameinfo(0,0,0,0,0,0,0);
2114 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2115}
2116EOF
2117
06e31011
RP
2118check_header linux/videodev.h
2119check_header linux/videodev2.h
1b6e8b73 2120check_header sys/videoio.h
47f38850 2121
2446d3d6 2122check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2123
f8aa696f 2124# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2125{ check_header dev/bktr/ioctl_meteor.h &&
2126 check_header dev/bktr/ioctl_bt848.h; } ||
2127{ check_header machine/ioctl_meteor.h &&
2128 check_header machine/ioctl_bt848.h; } ||
2129{ check_header dev/video/meteor/ioctl_meteor.h &&
2130 check_header dev/video/bktr/ioctl_bt848.h; } ||
2131check_header dev/ic/bt8xx.h
f8aa696f 2132
c7682de0
RP
2133check_header sys/soundcard.h
2134check_header soundcard.h
deb29777 2135
35fd8122
NG
2136check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2137
7483e694 2138# deal with the X11 frame grabber
56a059ac 2139enabled x11grab &&
f58f4ce1
GP
2140check_header X11/Xlib.h &&
2141check_header X11/extensions/XShm.h &&
2142check_func XOpenDisplay -lX11 &&
06eab4ba 2143check_func XShmCreateImage -lX11 -lXext
f58f4ce1 2144
40bcf4c7 2145enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
2146
2147# add some useful compiler flags if supported
2148check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2149check_cflags -Wall
2150check_cflags -Wno-switch
c07bd6a9
MN
2151check_cflags -Wdisabled-optimization
2152check_cflags -Wpointer-arith
2153check_cflags -Wredundant-decls
cc1fb623 2154check_cflags -Wno-pointer-sign
f4929996 2155check_cflags -Wcast-qual
9aceb3cf 2156check_cflags -Wwrite-strings
652a5bf6 2157check_cflags -Wtype-limits
764551c6 2158check_cflags -Wundef
5af4e0cc 2159enabled extra_warnings && check_cflags -Winline
cf9d24ad 2160
57bd82d4 2161# add some linker flags
5c0e9479 2162check_ldflags -Wl,--warn-common
8351d2ba
DB
2163check_ldflags -Wl,--as-needed
2164check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c2fd6530 2165check_ldflags -Wl,-Bsymbolic
94a3401e 2166
bd2216e4
MR
2167if enabled small; then
2168 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2169 optimizations="small"
2170elif enabled optimizations; then
629687f6 2171 if enabled xlc; then
0f010b2f
DB
2172 add_cflags -O5
2173 add_ldflags -O5
df442a8d
MR
2174 elif enabled ccc; then
2175 add_cflags -fast
cf9d24ad 2176 else
0f010b2f 2177 add_cflags -O3
cf9d24ad 2178 fi
cddf3f45 2179fi
11fdbc44 2180check_cflags -fno-math-errno
b2eb2ff0 2181check_cflags -fno-signed-zeros
cddf3f45 2182
504a64b9 2183# add some flags for Intel C Compiler
629687f6 2184if enabled icc; then
b1598b58
MR
2185 # Just warnings, no remarks
2186 check_cflags -w1
2187 # -wd: Disable following warnings
2188 # 144, 167, 556: -Wno-pointer-sign
2189 # 10006: ignoring unknown option -fno-signed-zeros
2190 # 10156: ignoring option '-W'; no argument required
2191 check_cflags -wd144,167,556,10006,10156
2192 # 11030: Warning unknown option --as-needed
2193 # 10156: ignoring option '-export'; no argument required
2194 check_ldflags -wd10156,11030
2195 # Allow to compile with optimizations
2196 check_ldflags -march=$cpu
be2cf98a
CEH
2197 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2198 enable ebp_available
df442a8d
MR
2199elif enabled ccc; then
2200 # disable some annoying warnings
2201 add_cflags -msg_disable cvtu32to64
2202 add_cflags -msg_disable embedcomment
2203 add_cflags -msg_disable needconstext
2204 add_cflags -msg_disable nomainieee
2205 add_cflags -msg_disable ptrmismatch1
2206 add_cflags -msg_disable unreachcode
504a64b9
CEH
2207fi
2208
80581e98 2209# PIC flags for shared library objects where they are needed
5af4e0cc 2210if enabled shared; then
569cb218
MR
2211 # LIBOBJFLAGS may have already been set in the OS configuration
2212 if test -z "$LIBOBJFLAGS" ; then
a8e28698 2213 case "${subarch-$arch}" in
b6bd7268 2214 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
569cb218
MR
2215 esac
2216 fi
80581e98
MN
2217fi
2218
90be59ef 2219if enabled gprof; then
0f010b2f
DB
2220 add_cflags -p
2221 add_ldflags -p
1db54e20
DB
2222fi
2223
7f3c02fc 2224# Find out if the .align argument is a power of two or not.
9377b6ce 2225check_asm asmalign_pot '".align 3"'
4454dc1b 2226
7483e694
DB
2227enabled_any $DECODER_LIST && enable decoders
2228enabled_any $ENCODER_LIST && enable encoders
2229enabled_any $BSF_LIST && enable bsfs
2230enabled_any $DEMUXER_LIST && enable demuxers
2231enabled_any $MUXER_LIST && enable muxers
f7679c54 2232enabled_any $FILTER_LIST && enable filters
7483e694
DB
2233enabled_any $INDEV_LIST && enable demuxers
2234enabled_any $OUTDEV_LIST && enable muxers
2235enabled_any $PROTOCOL_LIST && enable protocols
2236
2237enabled_any $THREADS_LIST && enable threads
2238
2239check_deps $CONFIG_LIST \
b6bb00b0 2240 $CONFIG_EXTRA \
7483e694
DB
2241 $HAVE_LIST \
2242 $DECODER_LIST \
2243 $ENCODER_LIST \
2244 $PARSER_LIST \
2245 $BSF_LIST \
2246 $DEMUXER_LIST \
2247 $MUXER_LIST \
f7679c54 2248 $FILTER_LIST \
7483e694
DB
2249 $INDEV_LIST \
2250 $OUTDEV_LIST \
2251 $PROTOCOL_LIST \
f70f03f6 2252
3e89171a 2253echo "install prefix $prefix"
f36958f8
DB
2254echo "source path $source_path"
2255echo "C compiler $cc"
bfd5afd8 2256echo ".align is power-of-two $asmalign_pot"
f36958f8 2257echo "ARCH $arch ($cpu)"
ce8871c2
MR
2258if test "$build_suffix" != ""; then
2259 echo "build suffix $build_suffix"
eb94aca9 2260fi
ac63af34
DB
2261if test "$extra_version" != ""; then
2262 echo "version string suffix $extra_version"
2263fi
0db2ce77 2264echo "big-endian ${bigendian-no}"
5b6c2cbd 2265if enabled x86; then
af44e8e4 2266 echo "yasm ${yasm-no}"
0db2ce77 2267 echo "MMX enabled ${mmx-no}"
30e98e62 2268 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2269 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2270 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2271 echo "SSE enabled ${sse-no}"
30e98e62 2272 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2273 echo "CMOV enabled ${cmov-no}"
2274 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2275 echo "EBX available ${ebx_available-no}"
2276 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2277 echo "10 operands supported ${ten_operands-no}"
e41e8342 2278fi
5b6c2cbd 2279if enabled arm; then
0db2ce77
MR
2280 echo "ARMv5TE enabled ${armv5te-no}"
2281 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2282 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2283 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2284 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2285 echo "NEON enabled ${neon-no}"
eba9ae3c 2286fi
5b6c2cbd 2287if enabled mips; then
0db2ce77 2288 echo "MMI enabled ${mmi-no}"
e41e8342 2289fi
5b6c2cbd 2290if enabled ppc; then
0db2ce77 2291 echo "AltiVec enabled ${altivec-no}"
30e98e62 2292 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2293 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2294 echo "performance report ${powerpc_perf-no}"
2295fi
2296if enabled sparc; then
2297 echo "VIS enabled ${vis-no}"
e41e8342 2298fi
0db2ce77
MR
2299echo "gprof enabled ${gprof-no}"
2300echo "debug symbols ${debug-no}"
87a0fb62 2301echo "strip symbols ${stripping-no}"
8400d6b8 2302echo "optimizations ${optimizations-no}"
0db2ce77
MR
2303echo "static ${static-no}"
2304echo "shared ${shared-no}"
4a24ab64 2305echo "postprocessing support ${postproc-no}"
f7679c54 2306echo "new filter support ${avfilter-no}"
81124ba0 2307echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2308echo "network support ${network-no}"
90be59ef 2309if enabled network; then
0db2ce77 2310 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2311fi
0db2ce77
MR
2312echo "threading support ${thread_type-no}"
2313echo "SDL support ${sdl-no}"
90be59ef 2314if enabled sdl_too_old; then
bfd5afd8
DB
2315 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2316fi
0db2ce77
MR
2317echo "Sun medialib support ${mlib-no}"
2318echo "AVISynth enabled ${avisynth-no}"
0db2ce77
MR
2319echo "libamr-nb support ${libamr_nb-no}"
2320echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 2321echo "libdc1394 support ${libdc1394-no}"
690bfceb 2322echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2323echo "libfaac enabled ${libfaac-no}"
2324echo "libfaad enabled ${libfaad-no}"
7e0871a7 2325echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2326echo "libgsm enabled ${libgsm-no}"
2327echo "libmp3lame enabled ${libmp3lame-no}"
2328echo "libnut enabled ${libnut-no}"
9a77d59a 2329echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2330echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2331echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2332echo "libtheora enabled ${libtheora-no}"
2333echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2334echo "libx264 enabled ${libx264-no}"
2335echo "libxvid enabled ${libxvid-no}"
0db2ce77 2336echo "zlib enabled ${zlib-no}"
f402916e 2337echo "bzlib enabled ${bzlib-no}"
2c62e737 2338echo
de6d9b64 2339
f7679c54 2340for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2341 echo "Enabled ${type}s:"
f65c9da1 2342 eval list=\$$(toupper $type)_LIST
8138b9db 2343 for part in $list; do
f65c9da1
MR
2344 enabled $part && echo ${part%_*}
2345 done | sort | pr -3 -t
2346 echo
8138b9db
RP
2347done
2348
ba321adb
JK
2349license="LGPL"
2350if enabled nonfree; then
2351 license="unredistributable"
2352elif enabled gpl; then
2353 license="GPL"
2354fi
2355
2356echo "License: $license"
ca5323af 2357
cf1392e9
DB
2358echo "Creating config.mak and config.h..."
2359
29799f8b
DB
2360echo "# Automatically generated by configure - do not modify!" > config.mak
2361echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2362echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2363echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2364echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
14a8acf1 2365echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
de6d9b64 2366
d921f03f 2367echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
c9d19248 2368echo "prefix=$prefix" >> config.mak
22a324da
DB
2369echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2370echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2371echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2372echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
14a8acf1 2373echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
22a324da 2374echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
0a7ee3ef
DB
2375echo "SRC_PATH=\"$source_path\"" >> config.mak
2376echo "SRC_PATH_BARE=$source_path" >> config.mak
2377echo "BUILD_ROOT=\"$PWD\"" >> config.mak
980fc7b8 2378echo "CC=$cc" >> config.mak
313c46a6 2379echo "AS=$as" >> config.mak
304d586d 2380echo "YASM=$yasmexe" >> config.mak
980fc7b8 2381echo "AR=$ar" >> config.mak
be7109c1 2382echo "RANLIB=$ranlib" >> config.mak
20369773 2383echo "LN_S=$ln_s" >> config.mak
87a0fb62 2384enabled stripping &&
3ae3b721 2385 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2386 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2387
a9b3f630 2388echo "OPTFLAGS=$CFLAGS" >> config.mak
0f3cb305 2389echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2390echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2391echo "SHFLAGS=$SHFLAGS" >> config.mak
304d586d 2392echo "YASMFLAGS=$YASMFLAGS" >> config.mak
80581e98 2393echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2394echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2395echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2396echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2397echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2398echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2399echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2400echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2401echo "SLIBSUF=$SLIBSUF" >> config.mak
2402echo "EXESUF=$EXESUF" >> config.mak
ac63af34 2403echo "EXTRA_VERSION=$extra_version" >> config.mak
315c741d 2404echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
9da6609f
MR
2405echo "HOSTCC=$host_cc" >> config.mak
2406echo "HOSTCFLAGS=$host_cflags" >> config.mak
82bb3329 2407echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
9da6609f
MR
2408echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2409echo "HOSTLIBS=$host_libs" >> config.mak
a7ada2ba
MR
2410echo "TARGET_EXEC=$target_exec" >> config.mak
2411echo "TARGET_PATH=$target_path" >> config.mak
4dc62701 2412
90be59ef 2413if enabled bigendian; then
7483e694
DB
2414 echo "WORDS_BIGENDIAN=yes" >> config.mak
2415 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2416fi
44161118 2417
90be59ef 2418if enabled sdl; then
5e622c40
DB
2419 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2420 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
a86b921c 2421fi
90be59ef 2422if enabled texi2html; then
7483e694 2423 echo "BUILD_DOC=yes" >> config.mak
146ea952 2424fi
5a872801 2425
719c8e00
MR
2426get_version(){
2427 name=$1
2428 file=$source_path/$2
147e7692
MR
2429 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2430 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2431 lcname=$(tolower $name)
2432 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2433 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2434}
2435
147e7692
MR
2436get_version LIBSWSCALE libswscale/swscale.h
2437get_version LIBPOSTPROC libpostproc/postprocess.h
2438get_version LIBAVCODEC libavcodec/avcodec.h
2439get_version LIBAVDEVICE libavdevice/avdevice.h
2440get_version LIBAVFORMAT libavformat/avformat.h
2441get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2442get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2443
5af4e0cc 2444if enabled shared; then
7483e694
DB
2445 echo "BUILD_SHARED=yes" >> config.mak
2446 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2447 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2448 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2449 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2450 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2451 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2452 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2453 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2454 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2455fi
d7e27559 2456echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2457echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2458
7b5e8a27
DB
2459echo "ARCH=$arch" >> config.mak
2460
3d907e22
MR
2461print_config ARCH_ $TMPH config.mak $ARCH_LIST
2462print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2463print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2464 $CONFIG_EXTRA \
7483e694
DB
2465 $DECODER_LIST \
2466 $ENCODER_LIST \
2467 $PARSER_LIST \
2468 $BSF_LIST \
2469 $DEMUXER_LIST \
2470 $MUXER_LIST \
f7679c54 2471 $FILTER_LIST \
7483e694
DB
2472 $PROTOCOL_LIST \
2473 $INDEV_LIST \
2474 $OUTDEV_LIST \
8ac17293 2475
c13e1abd
FH
2476echo "#define restrict $_restrict" >> $TMPH
2477
bd2216e4 2478if enabled small; then
7483e694 2479 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2480fi
2481
0f3cb305 2482
8156056e 2483# Apparently it's not possible to portably echo a backslash.
3ae3b721 2484enabled asmalign_pot &&
7483e694 2485 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
295b8c70 2486 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2487
b4d96ba2 2488echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2489
9c05103f
DB
2490echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2491
b7860763 2492# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2493cmp -s $TMPH config.h &&
2494 echo "config.h is unchanged" ||
2495 mv -f $TMPH config.h
3d204385 2496
165af439 2497# build tree in object directory if source path is different from current one
90be59ef 2498if enabled source_path_used; then
165af439 2499 DIRS="\
7483e694
DB
2500 doc \
2501 libavcodec \
2502 libavcodec/alpha \
a2fc0f6a 2503 libavcodec/arm \
7483e694 2504 libavcodec/bfin \
7483e694
DB
2505 libavcodec/mlib \
2506 libavcodec/ppc \
2507 libavcodec/sh4 \
2508 libavcodec/sparc \
a6493a8f 2509 libavcodec/x86 \
52a9cf34 2510 libavdevice \
f7679c54 2511 libavfilter \
7483e694
DB
2512 libavformat \
2513 libavutil \
2514 libpostproc \
2515 libswscale \
b2cfd7e3
RP
2516 libswscale/bfin \
2517 libswscale/mlib \
2518 libswscale/ppc \
2519 libswscale/sparc \
2520 libswscale/x86 \
7483e694
DB
2521 tests \
2522 tools \
7483e694 2523 "
165af439 2524 FILES="\
7483e694
DB
2525 Makefile \
2526 common.mak \
71c61f62 2527 subdir.mak \
7483e694
DB
2528 doc/texi2pod.pl \
2529 libavcodec/Makefile \
52a9cf34 2530 libavdevice/Makefile \
f7679c54 2531 libavfilter/Makefile \
7483e694
DB
2532 libavformat/Makefile \
2533 libavutil/Makefile \
2534 libpostproc/Makefile \
2535 libswscale/Makefile \
2536 "
165af439 2537 for dir in $DIRS ; do
7483e694 2538 mkdir -p $dir
165af439
MR
2539 done
2540 for f in $FILES ; do
20369773 2541 $ln_s "$source_path/$f" $f
165af439
MR
2542 done
2543fi
def4272a 2544
def4272a 2545
d0674868 2546# build pkg-config files
def4272a 2547
d0674868
DB
2548pkgconfig_generate(){
2549name=$1
b0dfd108 2550shortname=${name#lib}${build_suffix}
d0674868
DB
2551comment=$2
2552version=$3
2553libs=$4
2554requires=$5
25cd5cb3 2555cat <<EOF > $name/$name.pc
3e89171a 2556prefix=$prefix
a94e666c 2557exec_prefix=\${prefix}
f2b7382c 2558libdir=$libdir
7622778e 2559includedir=$incdir
def4272a 2560
d0674868
DB
2561Name: $name
2562Description: $comment
2563Version: $version
5dcfe9f8
AH
2564Requires: $(disabled shared && echo $requires)
2565Requires.private: $(enabled shared && echo $requires)
def4272a 2566Conflicts:
12701f6e
AH
2567Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2568Libs.private: $(enabled shared && echo $libs)
76a448ed 2569Cflags: -I\${includedir}
def4272a 2570EOF
25cd5cb3 2571cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2572prefix=
2573exec_prefix=
46d1ff83 2574libdir=\${pcfiledir}
1d44d365 2575includedir=${source_path}
def4272a 2576
d0674868
DB
2577Name: $name
2578Description: $comment
2579Version: $version
2580Requires: $requires
def4272a 2581Conflicts:
12701f6e 2582Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2583Cflags: -I\${includedir}
2584EOF
d0674868 2585}
def4272a 2586
e426941d 2587pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2588pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2589pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2590pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2591enabled avfilter &&
46983309 2592 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2593enabled postproc &&
e426941d 2594 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 2595pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"