configure: reverse order of -l flags
[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 57show_help(){
06454877
MR
58cat <<EOF
59Usage: configure [options]
60Options: [defaults in brackets after descriptions]
61
62Standard options:
63 --help print this message
19bd477d 64 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
336ce917 85 --disable-ffprobe disable ffprobe build
06454877 86 --disable-ffserver disable ffserver build
5a0f7131
MR
87 --disable-avdevice disable libavdevice build
88 --disable-avcodec disable libavcodec build
89 --disable-avformat disable libavformat build
90 --disable-swscale disable libswscale build
06454877 91 --enable-postproc enable GPLed postprocessing support [no]
cccc039f 92 --disable-avfilter disable video filter support [no]
06454877 93 --enable-avfilter-lavf video filters dependent on avformat [no]
0dbfc1db 94 --disable-pthreads disable pthreads [auto]
06454877
MR
95 --enable-w32threads use Win32 threads [no]
96 --enable-x11grab enable X11 grabbing [no]
97 --disable-network disable network support [no]
06454877
MR
98 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
99 --enable-gray enable full grayscale support (slower color)
100 --disable-swscale-alpha disable alpha channel support in swscale
101 --disable-fastdiv disable table-based division
102 --enable-small optimize for size instead of speed
103 --disable-aandct disable AAN DCT code
7f3f5f46 104 --disable-dct disable DCT code
06454877
MR
105 --disable-fft disable FFT code
106 --disable-golomb disable Golomb code
107 --disable-lpc disable LPC code
108 --disable-mdct disable MDCT code
109 --disable-rdft disable RDFT code
110 --disable-vaapi disable VAAPI code
111 --disable-vdpau disable VDPAU code
92c6a099 112 --disable-dxva2 disable DXVA2 code
06454877
MR
113 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115 --enable-memalign-hack emulate memalign, interferes with memory debuggers
bb55e3a3 116 --disable-everything disable all components listed below
06454877
MR
117 --disable-encoder=NAME disable encoder NAME
118 --enable-encoder=NAME enable encoder NAME
119 --disable-encoders disable all encoders
120 --disable-decoder=NAME disable decoder NAME
121 --enable-decoder=NAME enable decoder NAME
122 --disable-decoders disable all decoders
123 --disable-hwaccel=NAME disable hwaccel NAME
124 --enable-hwaccel=NAME enable hwaccel NAME
125 --disable-hwaccels disable all hwaccels
126 --disable-muxer=NAME disable muxer NAME
127 --enable-muxer=NAME enable muxer NAME
128 --disable-muxers disable all muxers
129 --disable-demuxer=NAME disable demuxer NAME
130 --enable-demuxer=NAME enable demuxer NAME
131 --disable-demuxers disable all demuxers
132 --enable-parser=NAME enable parser NAME
133 --disable-parser=NAME disable parser NAME
134 --disable-parsers disable all parsers
135 --enable-bsf=NAME enable bitstream filter NAME
136 --disable-bsf=NAME disable bitstream filter NAME
137 --disable-bsfs disable all bitstream filters
138 --enable-protocol=NAME enable protocol NAME
139 --disable-protocol=NAME disable protocol NAME
140 --disable-protocols disable all protocols
141 --disable-indev=NAME disable input device NAME
142 --disable-outdev=NAME disable output device NAME
143 --disable-indevs disable input devices
144 --disable-outdevs disable output devices
145 --disable-devices disable all devices
146 --enable-filter=NAME enable filter NAME
147 --disable-filter=NAME disable filter NAME
148 --disable-filters disable all filters
149 --list-decoders show all available decoders
150 --list-encoders show all available encoders
151 --list-hwaccels show all available hardware accelerators
152 --list-muxers show all available muxers
153 --list-demuxers show all available demuxers
154 --list-parsers show all available parsers
155 --list-protocols show all available protocols
156 --list-bsfs show all available bitstream filters
157 --list-indevs show all available input devices
158 --list-outdevs show all available output devices
159 --list-filters show all available filters
160
161External library support:
162 --enable-avisynth enable reading of AVISynth script files [no]
163 --enable-bzlib enable bzlib [autodetect]
164 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
165 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
166 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
167 and libraw1394 [no]
168 --enable-libdirac enable Dirac support via libdirac [no]
169 --enable-libfaac enable FAAC support via libfaac [no]
06454877
MR
170 --enable-libgsm enable GSM support via libgsm [no]
171 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
172 --enable-libnut enable NUT (de)muxing via libnut,
173 native (de)muxer exists [no]
174 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
0f943ce6 175 --enable-librtmp enable RTMP[E] support via librtmp [no]
06454877
MR
176 --enable-libschroedinger enable Dirac support via libschroedinger [no]
177 --enable-libspeex enable Speex decoding via libspeex [no]
178 --enable-libtheora enable Theora encoding via libtheora [no]
179 --enable-libvorbis enable Vorbis encoding via libvorbis,
180 native implementation exists [no]
8299a7f8 181 --enable-libvpx enable VP8 support via libvpx [no]
06454877
MR
182 --enable-libx264 enable H.264 encoding via x264 [no]
183 --enable-libxvid enable Xvid encoding via xvidcore,
184 native MPEG-4/Xvid encoder exists [no]
185 --enable-mlib enable Sun medialib [no]
186 --enable-zlib enable zlib [autodetect]
187
188Advanced options (experts only):
189 --source-path=PATH path to source code [$source_path]
190 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
191 --enable-cross-compile assume a cross-compiler is used
192 --sysroot=PATH root of cross-build tree
193 --sysinclude=PATH location of cross-build system headers
194 --target-os=OS compiler targets OS [$target_os]
195 --target-exec=CMD command to run executables on target
196 --target-path=DIR path to view of build directory on target
197 --nm=NM use nm tool
121d78d0 198 --ar=AR use archive tool AR [$ar_default]
06454877
MR
199 --as=AS use assembler AS [$as_default]
200 --cc=CC use C compiler CC [$cc_default]
201 --ld=LD use linker LD
202 --host-cc=HOSTCC use host C compiler HOSTCC
203 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
204 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
205 --host-libs=HLIBS use libs HLIBS when linking for host
206 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
207 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
208 --extra-libs=ELIBS add ELIBS [$ELIBS]
209 --extra-version=STRING version string suffix []
210 --build-suffix=SUFFIX library name suffix []
211 --arch=ARCH select architecture [$arch]
212 --cpu=CPU select the minimum required CPU (affects
213 instruction selection, may crash on older CPUs)
214 --enable-powerpc-perf enable performance report on PPC
215 (requires enabling PMC)
c8a4ae00 216 --disable-asm disable all assembler optimizations
06454877
MR
217 --disable-altivec disable AltiVec optimizations
218 --disable-amd3dnow disable 3DNow! optimizations
219 --disable-amd3dnowext disable 3DNow! extended optimizations
220 --disable-mmx disable MMX optimizations
221 --disable-mmx2 disable MMX2 optimizations
222 --disable-sse disable SSE optimizations
223 --disable-ssse3 disable SSSE3 optimizations
224 --disable-armv5te disable armv5te optimizations
225 --disable-armv6 disable armv6 optimizations
226 --disable-armv6t2 disable armv6t2 optimizations
227 --disable-armvfp disable ARM VFP optimizations
228 --disable-iwmmxt disable iwmmxt optimizations
229 --disable-mmi disable MMI optimizations
230 --disable-neon disable neon optimizations
231 --disable-vis disable VIS optimizations
232 --disable-yasm disable use of yasm assembler
233 --enable-pic build position-independent code
4ae40685 234 --malloc-prefix=PFX prefix malloc and related names with PFX
6b35d421 235 --enable-sram allow use of on-chip SRAM
06454877
MR
236
237Developer options (useful when working on FFmpeg itself):
238 --disable-debug disable debugging symbols
239 --enable-debug=LEVEL set the debug level [$debuglevel]
240 --enable-gprof enable profiling with gprof [$gprof]
241 --disable-optimizations disable compiler optimizations
242 --enable-extra-warnings enable more compiler warnings
243 --disable-stripping disable stripping of executables and shared libraries
2fad0977 244 --samples=PATH location of test samples for FATE
06454877
MR
245
246NOTE: Object files are built at the place where configure is launched.
247EOF
60e8bc13 248 exit 0
74c53c2d 249}
cf9d24ad 250
0884fadf
MR
251quotes='""'
252
57bd82d4 253log(){
2270b4b2 254 echo "$@" >> $logfile
57bd82d4
MR
255}
256
720c69da 257log_file(){
c8e9f801 258 log BEGIN $1
2270b4b2 259 pr -n -t $1 >> $logfile
c8e9f801
MR
260 log END $1
261}
262
2ba042a7 263echolog(){
c8e9f801 264 log "$@"
57bd82d4 265 echo "$@"
2ba042a7
MR
266}
267
7bfc8ae6
MR
268warn(){
269 log "WARNING: $*"
270 WARNINGS="${WARNINGS}WARNING: $*\n"
271}
272
2ba042a7
MR
273die(){
274 echolog "$@"
275 cat <<EOF
d326cf7f 276
2ba042a7
MR
277If you think configure made a mistake, make sure you are using the latest
278version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 279ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 280EOF
e155a21a 281 if disabled logging; then
2ba042a7 282 cat <<EOF
e155a21a
DB
283Rerun configure with logging enabled (do not use --disable-logging), and
284include the log this produces with your report.
2ba042a7
MR
285EOF
286 else
287cat <<EOF
e155a21a
DB
288Include the log file "$logfile" produced by configure as this will help
289solving the problem.
2ba042a7
MR
290EOF
291 fi
57bd82d4
MR
292 exit 1
293}
294
6c6007d6 295# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 296toupper(){
6c6007d6 297 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
298}
299
4a5444db 300tolower(){
6c6007d6 301 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
302}
303
14a8acf1
MR
304c_escape(){
305 echo "$*" | sed 's/["\\]/\\\0/g'
306}
307
b04251c5
MR
308sh_quote(){
309 v=$(echo "$1" | sed "s/'/'\\\\''/g")
310 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
311 echo "$v"
312}
313
be8f2501
MR
314filter(){
315 pat=$1
316 shift
317 for v; do
98ef6079 318 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
319 done
320}
321
36e2dea0
MR
322map(){
323 m=$1
324 shift
e0e335a0 325 for v; do eval $m; done
36e2dea0
MR
326}
327
a8d04fba
MR
328set_all(){
329 value=$1
330 shift
331 for var in $*; do
332 eval $var=$value
333 done
334}
335
72a43668
MR
336set_weak(){
337 value=$1
338 shift
339 for var; do
340 eval : \${$var:=$value}
341 done
342}
343
799c9e9b
MR
344pushvar(){
345 for var in $*; do
346 eval level=\${${var}_level:=0}
347 eval ${var}_${level}="\$$var"
348 eval ${var}_level=$(($level+1))
349 done
350}
351
352popvar(){
353 for var in $*; do
354 eval level=\${${var}_level:-0}
355 test $level = 0 && continue
356 eval level=$(($level-1))
357 eval $var="\${${var}_${level}}"
358 eval ${var}_level=$level
359 eval unset ${var}_${level}
360 done
361}
362
a8d04fba
MR
363enable(){
364 set_all yes $*
365}
366
367disable(){
368 set_all no $*
369}
370
72a43668
MR
371enable_weak(){
372 set_weak yes $*
373}
374
375disable_weak(){
376 set_weak no $*
377}
378
72702705 379enable_safe(){
fd07f803
MR
380 for var; do
381 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
382 done
72702705
MR
383}
384
385disable_safe(){
fd07f803
MR
386 for var; do
387 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
388 done
72702705
MR
389}
390
f9d328da
MR
391do_enable_deep(){
392 for var; do
393 enabled $var && continue
394 eval sel="\$${var}_select"
c510c7b5
MR
395 eval sgs="\$${var}_suggest"
396 pushvar var sgs
f9d328da 397 enable_deep $sel
c510c7b5
MR
398 popvar sgs
399 enable_deep_weak $sgs
f9d328da
MR
400 popvar var
401 done
402}
403
404enable_deep(){
405 do_enable_deep $*
406 enable $*
407}
408
72a43668
MR
409enable_deep_weak(){
410 do_enable_deep $*
411 enable_weak $*
412}
413
57bd82d4 414enabled(){
3250003c
MR
415 test "${1#!}" = "$1" && op== || op=!=
416 eval test "x\$${1#!}" $op "xyes"
44161118
MR
417}
418
37970ebf 419disabled(){
3250003c
MR
420 test "${1#!}" = "$1" && op== || op=!=
421 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
422}
423
44161118
MR
424enabled_all(){
425 for opt; do
426 enabled $opt || return 1
427 done
428}
429
85bca2c5
DB
430disabled_all(){
431 for opt; do
432 disabled $opt || return 1
433 done
434}
435
44161118
MR
436enabled_any(){
437 for opt; do
438 enabled $opt && return 0
439 done
440}
441
85bca2c5
DB
442disabled_any(){
443 for opt; do
444 disabled $opt && return 0
445 done
f7b230a7 446 return 1
85bca2c5
DB
447}
448
c9d19248
MR
449set_default(){
450 for opt; do
88268e94 451 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
452 done
453}
454
4a0d6686
AJ
455is_in(){
456 value=$1
457 shift
458 for var in $*; do
459 [ $var = $value ] && return 0
460 done
461 return 1
462}
463
30fd06be
MR
464check_deps(){
465 for cfg; do
3250003c 466 cfg="${cfg#!}"
799c9e9b
MR
467 enabled ${cfg}_checking && die "Circular dependency for $cfg."
468 disabled ${cfg}_checking && continue
469 enable ${cfg}_checking
470
30fd06be
MR
471 eval dep_all="\$${cfg}_deps"
472 eval dep_any="\$${cfg}_deps_any"
7ef3425f 473 eval dep_sel="\$${cfg}_select"
c510c7b5 474 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
475 eval dep_ifa="\$${cfg}_if"
476 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 477
3d7453e0
MR
478 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
479 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
480 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 481
3d7453e0
MR
482 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
483 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
484 enabled_all $dep_all || disable $cfg
485 enabled_any $dep_any || disable $cfg
7ef3425f 486 disabled_any $dep_sel && disable $cfg
799c9e9b 487
4ec45764
RP
488 if enabled $cfg; then
489 eval dep_extralibs="\$${cfg}_extralibs"
490 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 491 enable_deep $dep_sel
c510c7b5 492 enable_deep_weak $dep_sgs
4ec45764
RP
493 fi
494
799c9e9b 495 disable ${cfg}_checking
30fd06be
MR
496 done
497}
498
44161118
MR
499print_config(){
500 pfx=$1
501 header=$2
502 makefile=$3
503 shift 3
504 for cfg; do
5e622c40 505 ucname="$(toupper $cfg)"
44161118 506 if enabled $cfg; then
3d907e22 507 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
508 echo "${pfx}${ucname}=yes" >> $makefile
509 else
b250f9c6 510 echo "#define ${pfx}${ucname} 0" >> $header
fbb6c6c2 511 echo "!${pfx}${ucname}=yes" >> $makefile
44161118
MR
512 fi
513 done
57bd82d4
MR
514}
515
57bd82d4
MR
516append(){
517 var=$1
518 shift
57bd82d4
MR
519 eval "$var=\"\$$var $*\""
520}
521
60361817
MR
522prepend(){
523 var=$1
524 shift
525 eval "$var=\"$* \$$var\""
526}
527
50a334e4 528add_cppflags(){
caf458dd 529 append CPPFLAGS $($filter_cppflags "$@")
50a334e4
MR
530}
531
57bd82d4 532add_cflags(){
caf458dd 533 append CFLAGS $($filter_cflags "$@")
57bd82d4
MR
534}
535
2f2e6c7c 536add_asflags(){
caf458dd 537 append ASFLAGS $($filter_asflags "$@")
2f2e6c7c
MR
538}
539
57bd82d4
MR
540add_ldflags(){
541 append LDFLAGS "$@"
542}
543
544add_extralibs(){
60361817 545 prepend extralibs "$@"
57bd82d4
MR
546}
547
b0cfb663 548check_cmd(){
b3cb5d51 549 log "$@"
2270b4b2 550 "$@" >> $logfile 2>&1
b0cfb663
MR
551}
552
dcd479c0 553check_cc(){
57bd82d4 554 log check_cc "$@"
2270b4b2 555 cat > $TMPC
720c69da 556 log_file $TMPC
50a334e4 557 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
558}
559
560check_cpp(){
561 log check_cpp "$@"
2270b4b2 562 cat > $TMPC
720c69da 563 log_file $TMPC
9e7f3277 564 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
565}
566
f65883c8
MR
567check_as(){
568 log check_as "$@"
569 cat > $TMPC
570 log_file $TMPC
2f2e6c7c 571 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
f65883c8
MR
572}
573
940f335a
MR
574check_asm(){
575 log check_asm "$@"
576 name="$1"
3784e82e 577 code="$2"
940f335a 578 shift 2
49214f61
MR
579 disable $name
580 check_as "$@" <<EOF && enable $name
3784e82e 581void foo(void){ __asm__ volatile($code); }
940f335a
MR
582EOF
583}
584
304d586d
LM
585check_yasm(){
586 log check_yasm "$@"
587 echo "$1" > $TMPS
588 log_file $TMPS
589 shift 1
590 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
591}
592
dcd479c0 593check_ld(){
57bd82d4 594 log check_ld "$@"
3155a644
MR
595 flags=''
596 libs=''
597 for f; do
598 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
599 done
2a194acd 600 check_cc $($filter_cflags $flags) || return
684b28e0 601 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
602}
603
50a334e4
MR
604check_cppflags(){
605 log check_cppflags "$@"
caf458dd
MR
606 set -- $($filter_cppflags "$@")
607 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
608int x;
609EOF
610}
611
dcd479c0 612check_cflags(){
57bd82d4 613 log check_cflags "$@"
caf458dd
MR
614 set -- $($filter_cflags "$@")
615 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
616int x;
617EOF
618}
619
2ed46eea
MR
620test_ldflags(){
621 log test_ldflags "$@"
622 check_ld "$@" <<EOF
c23a0ac8 623int main(void){ return 0; }
dcd479c0
MR
624EOF
625}
626
2ed46eea
MR
627check_ldflags(){
628 log check_ldflags "$@"
629 test_ldflags "$@" && add_ldflags "$@"
630}
631
dcd479c0 632check_header(){
57bd82d4 633 log check_header "$@"
dcd479c0
MR
634 header=$1
635 shift
b77df637
MR
636 disable_safe $header
637 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
638#include <$header>
639int x;
640EOF
641}
642
643check_func(){
57bd82d4 644 log check_func "$@"
dcd479c0
MR
645 func=$1
646 shift
d8bc5f06
MR
647 disable $func
648 check_ld "$@" <<EOF && enable $func
dcd479c0 649extern int $func();
c23a0ac8 650int main(void){ $func(); }
dcd479c0
MR
651EOF
652}
653
645d2652 654check_mathfunc(){
6b73c0ae 655 log check_mathfunc "$@"
645d2652
MR
656 func=$1
657 shift
658 disable $func
659 check_ld "$@" <<EOF && enable $func
660#include <math.h>
33bd38db
MR
661float foo(float f) { return $func(f); }
662int main(void){ return 0; }
645d2652
MR
663EOF
664}
665
2446d3d6
DB
666check_func_headers(){
667 log check_func_headers "$@"
f8d7b072
MR
668 headers=$1
669 func=$2
670 shift 2
671 disable $func
672 incs=""
673 for hdr in $headers; do
674 incs="$incs
675#include <$hdr>"
676 done
cd0d9a9d 677 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 678$incs
d6773f56 679int main(int argc, char **argv){
2b2c2a81 680 return (long) $func;
f8d7b072
MR
681}
682EOF
683}
684
a5344cf7
SS
685check_cpp_condition(){
686 log check_cpp_condition "$@"
687 header=$1
688 condition=$2
f855b7b9
MR
689 shift 2
690 check_cpp $($filter_cppflags "$@") <<EOF
a5344cf7
SS
691#include <$header>
692#if !($condition)
693#error "unsatisfied condition: $condition"
694#endif
695EOF
696}
697
57bd82d4
MR
698check_lib(){
699 log check_lib "$@"
700 header="$1"
701 func="$2"
702 shift 2
84400e9d 703 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
704}
705
f8d7b072
MR
706check_lib2(){
707 log check_lib2 "$@"
708 headers="$1"
709 func="$2"
710 shift 2
300cde27 711 check_func_headers "$headers" $func "$@" && add_extralibs "$@"
f8d7b072
MR
712}
713
dcd479c0 714check_exec(){
2270b4b2 715 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
716}
717
7dfef245 718check_exec_crash(){
5e622c40 719 code=$(cat)
7dfef245
MR
720
721 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
722 # are safe but may not be available everywhere. Thus we use
723 # raise(SIGTERM) instead. The check is run in a subshell so we
724 # can redirect the "Terminated" message from the shell. SIGBUS
725 # is not defined by standard C so it is used conditionally.
726
2270b4b2 727 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
728#include <signal.h>
729static void sighandler(int sig){
730 raise(SIGTERM);
731}
e5af4a11 732int main(void){
7dfef245
MR
733 signal(SIGILL, sighandler);
734 signal(SIGFPE, sighandler);
735 signal(SIGSEGV, sighandler);
736#ifdef SIGBUS
737 signal(SIGBUS, sighandler);
738#endif
739 { $code }
740}
741EOF
742}
743
72be9e73
DY
744check_type(){
745 log check_type "$@"
746 headers=$1
747 type=$2
748 shift 2
ae550ce9 749 disable_safe "$type"
72be9e73
DY
750 incs=""
751 for hdr in $headers; do
752 incs="$incs
753#include <$hdr>"
754 done
ae550ce9 755 check_cc "$@" <<EOF && enable_safe "$type"
72be9e73
DY
756$incs
757$type v;
758EOF
759}
760
14d36751
MR
761check_struct(){
762 log check_type "$@"
763 headers=$1
764 struct=$2
765 member=$3
766 shift 3
767 disable_safe "${struct}_${member}"
768 incs=""
769 for hdr in $headers; do
770 incs="$incs
771#include <$hdr>"
772 done
773 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
774$incs
775const void *p = &(($struct *)0)->$member;
776EOF
777}
778
57bd82d4
MR
779require(){
780 name="$1"
781 header="$2"
782 func="$3"
783 shift 3
784 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
785}
786
f8d7b072
MR
787require2(){
788 name="$1"
789 headers="$2"
790 func="$3"
791 shift 3
792 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
793}
794
f0125de9
MR
795check_host_cc(){
796 log check_host_cc "$@"
797 cat > $TMPC
798 log_file $TMPC
799 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
800}
801
802check_host_cflags(){
803 log check_host_cflags "$@"
804 check_host_cc "$@" <<EOF && append host_cflags "$@"
805int x;
806EOF
807}
808
c505dd31
MR
809apply(){
810 file=$1
811 shift
812 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
813}
814
c34681df
MR
815cp_if_changed(){
816 cmp -s "$1" "$2" &&
817 echo "$2 is unchanged" ||
818 cp -f "$1" "$2"
819}
820
dcd61286
DB
821# CONFIG_LIST contains configurable options, while HAVE_LIST is for
822# system-dependent things.
823
4a0d6686
AJ
824COMPONENT_LIST="
825 bsfs
826 decoders
827 demuxers
828 encoders
3cde40aa 829 filters
5666fd73 830 hwaccels
c552605c 831 indevs
4a0d6686 832 muxers
c552605c 833 outdevs
4a0d6686
AJ
834 parsers
835 protocols
836"
837
838CONFIG_LIST="
839 $COMPONENT_LIST
e8ed9b7a 840 aandct
5a0f7131
MR
841 avcodec
842 avdevice
f7679c54
VS
843 avfilter
844 avfilter_lavf
5a0f7131 845 avformat
c88f5d72 846 avisynth
f402916e 847 bzlib
7f3f5f46 848 dct
c73f65d9 849 doc
05aec7bb 850 dwt
92c6a099 851 dxva2
27a9466b 852 fastdiv
c88f5d72
MR
853 ffmpeg
854 ffplay
336ce917 855 ffprobe
c88f5d72 856 ffserver
1848f7d9 857 fft
4f034993 858 golomb
c88f5d72 859 gpl
ecfc4f44 860 gprof
d8d0d0b2 861 gray
4693b031 862 h264dsp
3abe5fbd 863 hardcoded_tables
f7b8bffe 864 libdc1394
690bfceb 865 libdirac
2eed5a46 866 libfaac
c88f5d72 867 libgsm
6ebe07fb 868 libmp3lame
c88f5d72 869 libnut
0b175caa
DB
870 libopencore_amrnb
871 libopencore_amrwb
9a77d59a 872 libopenjpeg
0f943ce6 873 librtmp
f7cd9eed 874 libschroedinger
ae14f311 875 libspeex
150d2772 876 libtheora
c88f5d72 877 libvorbis
8299a7f8 878 libvpx
1cc60c47
DB
879 libx264
880 libxvid
f4d608e3 881 lpc
b781cc12 882 lsp
47a158cb 883 mdct
c88f5d72 884 memalign_hack
a8150374 885 mlib
c88f5d72
MR
886 mpegaudio_hp
887 network
3fe142e2 888 nonfree
8a3c8627 889 pic
4a24ab64 890 postproc
2b4c3615 891 powerpc_perf
68602540 892 rdft
e90f5b5a 893 runtime_cpudetect
2e35e684 894 shared
bd2216e4 895 small
6b35d421 896 sram
2e35e684 897 static
5a0f7131 898 swscale
a9ddb5b1 899 swscale_alpha
17492d5e
DB
900 vaapi
901 vdpau
9cad0e4e 902 version3
56a059ac 903 x11grab
c88f5d72 904 zlib
4a0d6686 905"
c88f5d72 906
8eee7025 907THREADS_LIST='
8eee7025
DB
908 pthreads
909 w32threads
910'
911
3f5b56e5
MR
912ARCH_LIST='
913 alpha
a2fc0f6a 914 arm
fdcd782d
MR
915 avr32
916 avr32_ap
917 avr32_uc
3f5b56e5
MR
918 bfin
919 ia64
920 m68k
921 mips
bae3abb0 922 mips64
3f5b56e5 923 parisc
79cb09b2 924 ppc
34d11b87 925 ppc64
3f5b56e5
MR
926 s390
927 sh4
928 sparc
929 sparc64
0844bae1 930 tomi
3f5b56e5
MR
931 x86
932 x86_32
933 x86_64
934'
935
936ARCH_EXT_LIST='
1ac9331a 937 altivec
3bf96eec 938 amd3dnow
a1ef9f08 939 amd3dnowext
1ac9331a 940 armv5te
edab3048 941 armv6
ab5cb084 942 armv6t2
f55b299a 943 armvfp
3f5b56e5
MR
944 iwmmxt
945 mmi
946 mmx
d7f0920b 947 mmx2
6b18d278 948 neon
799fde37 949 ppc4xx
1bb04d5a 950 sse
9eeed841 951 ssse3
bd9d34a0 952 vis
3f5b56e5
MR
953'
954
a3e02a8c
MR
955HAVE_LIST_PUB='
956 bigendian
957'
958
3f5b56e5
MR
959HAVE_LIST="
960 $ARCH_EXT_LIST
a3e02a8c 961 $HAVE_LIST_PUB
3f5b56e5 962 $THREADS_LIST
35fd8122 963 alsa_asoundlib_h
3f5b56e5 964 altivec_h
c9fdab0d 965 arpa_inet_h
dffb41b9 966 attribute_may_alias
e7ea5e3d 967 attribute_packed
6bd859d6 968 bswap
ecf97f22 969 closesocket
1ac9331a 970 cmov
e16e49ac 971 conio_h
c88f5d72 972 dcbzl
f8aa696f
DB
973 dev_bktr_ioctl_bt848_h
974 dev_bktr_ioctl_meteor_h
975 dev_ic_bt8xx_h
976 dev_video_meteor_ioctl_meteor_h
977 dev_video_bktr_ioctl_bt848_h
18b67ae5 978 dlfcn_h
c88f5d72 979 dlopen
bc574408 980 dos_paths
245626d0
DB
981 ebp_available
982 ebx_available
6b7c7703
VS
983 exp2
984 exp2f
c2a29455 985 fast_64bit
669b5583 986 fast_clz
7073e9fc 987 fast_cmov
7b829d2a 988 fast_unaligned
9d99cc5a 989 fork
84882df6 990 getaddrinfo
da9e86f8 991 gethrtime
fc5607f8 992 GetProcessMemoryInfo
4e68cb8a 993 GetProcessTimes
66be5b45 994 getrusage
fc5607f8 995 struct_rusage_ru_maxrss
2e1913b1 996 inet_aton
61d251db 997 inline_asm
abfc8d05 998 isatty
9f5ff83f 999 ldbrx
0b4a1821
AS
1000 libdc1394_1
1001 libdc1394_2
a33cab3a 1002 llrint
07876e25 1003 llrintf
d96cd429
MR
1004 local_aligned_16
1005 local_aligned_8
291fd18a 1006 log2
6b7c7703 1007 log2f
85dd97ad 1008 loongson
a33cab3a 1009 lrint
c88f5d72 1010 lrintf
e4673692 1011 lzo1x_999_compress
f8aa696f
DB
1012 machine_ioctl_bt848_h
1013 machine_ioctl_meteor_h
c88f5d72
MR
1014 malloc_h
1015 memalign
6ffa87d3 1016 mkstemp
b4e806b2 1017 pld
1f91cdce 1018 posix_memalign
a33cab3a
MK
1019 round
1020 roundf
c88f5d72
MR
1021 sdl
1022 sdl_video_size
b507ebd1 1023 setmode
72be9e73 1024 socklen_t
deb29777 1025 soundcard_h
f8cda19e 1026 poll_h
0104b608 1027 setrlimit
87958234 1028 strerror_r
c0018613 1029 struct_addrinfo
b4d68544
MS
1030 struct_ipv6_mreq
1031 struct_sockaddr_in6
3b2372bf 1032 struct_sockaddr_sa_len
33a4dbdd 1033 struct_sockaddr_storage
b462d132
MR
1034 symver
1035 symver_gnu_asm
1036 symver_asm_label
b58412f1 1037 sys_mman_h
b091aa44 1038 sys_resource_h
81644c2e 1039 sys_select_h
deb29777 1040 sys_soundcard_h
1b6e8b73 1041 sys_videoio_h
d3a4b4e0 1042 ten_operands
e16e49ac 1043 termios_h
b265431e 1044 threads
7b04b8a0 1045 truncf
ce742de2 1046 vfp_args
7c5bfe7a 1047 VirtualAlloc
6ff3f3e7 1048 winsock2_h
cc078b5d 1049 xform_asm
304d586d 1050 yasm
0cb78cef 1051"
44161118 1052
b6bb00b0
MR
1053# options emitted with CONFIG_ prefix but not available on command line
1054CONFIG_EXTRA="
dc4f5a1c 1055 avutil
9cad0e4e
DB
1056 gplv3
1057 lgplv3
b6bb00b0
MR
1058"
1059
520cc7f1 1060CMDLINE_SELECT="
3f5b56e5 1061 $ARCH_EXT_LIST
520cc7f1 1062 $CONFIG_LIST
8eee7025 1063 $THREADS_LIST
c8a4ae00 1064 asm
db6107b6 1065 cross_compile
520cc7f1
MR
1066 debug
1067 extra_warnings
8c6afa4d 1068 logging
d2bbb2f7 1069 optimizations
87a0fb62 1070 stripping
7595a5e4 1071 yasm
520cc7f1 1072"
426be5dc
DB
1073
1074PATHS_LIST='
d156bede 1075 bindir
14a8acf1 1076 datadir
26759c44
MR
1077 incdir
1078 libdir
26759c44
MR
1079 mandir
1080 prefix
1081 shlibdir
426be5dc
DB
1082'
1083
1084CMDLINE_SET="
1085 $PATHS_LIST
121d78d0 1086 ar
426be5dc 1087 arch
313c46a6 1088 as
426be5dc
DB
1089 build_suffix
1090 cc
1091 cpu
1092 cross_prefix
50567afa 1093 dep_cc
ac63af34 1094 extra_version
9da6609f
MR
1095 host_cc
1096 host_cflags
1097 host_ldflags
1098 host_libs
82bb3329 1099 host_os
684b28e0 1100 ld
426be5dc 1101 logfile
4ae40685 1102 malloc_prefix
89641463 1103 nm
2fad0977 1104 samples
26759c44 1105 source_path
4f837398 1106 strip
c5200f17
MR
1107 sysinclude
1108 sysroot
a7ada2ba 1109 target_exec
26759c44 1110 target_os
a7ada2ba 1111 target_path
426be5dc 1112"
520cc7f1 1113
89f2932b
MR
1114CMDLINE_APPEND="
1115 extra_cflags
1116"
1117
912f3148
DB
1118# code dependency declarations
1119
9eeed841 1120# architecture extensions
808fa33c 1121
a2fc0f6a
MR
1122armv5te_deps="arm"
1123armv6_deps="arm"
ab5cb084 1124armv6t2_deps="arm"
a2fc0f6a
MR
1125armvfp_deps="arm"
1126iwmmxt_deps="arm"
808fa33c
MR
1127neon_deps="arm"
1128
e241ba14 1129mmi_deps="mips"
808fa33c
MR
1130
1131altivec_deps="ppc"
1132ppc4xx_deps="ppc"
1133
1134vis_deps="sparc"
1135
7f8c3d1f 1136x86_64_suggest="cmov fast_cmov"
808fa33c
MR
1137amd3dnow_deps="mmx"
1138amd3dnowext_deps="amd3dnow"
9eeed841 1139mmx_deps="x86"
75aa95a6 1140mmx2_deps="mmx"
75aa95a6
DB
1141sse_deps="mmx"
1142ssse3_deps="sse"
9eeed841 1143
e939cedd 1144fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1145fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1146fast_unaligned_if_any="armv6 ppc x86"
669b5583 1147
89e053f8 1148need_memalign="altivec neon sse"
6fec122a 1149inline_asm_deps="!tms470"
89e053f8 1150
b462d132
MR
1151symver_if_any="symver_asm_label symver_gnu_asm"
1152
26fbcc85
MR
1153# subsystems
1154mdct_select="fft"
1155rdft_select="fft"
1156
5666fd73 1157# decoders / encoders / hardware accelerators
49351479 1158aac_decoder_select="mdct rdft aac_parser"
26fbcc85
MR
1159aac_encoder_select="mdct"
1160ac3_decoder_select="mdct ac3_parser"
f4d608e3 1161alac_encoder_select="lpc"
b781cc12 1162amrnb_decoder_select="lsp"
084cbbaa 1163atrac1_decoder_select="mdct"
26fbcc85
MR
1164atrac3_decoder_select="mdct"
1165binkaudio_dct_decoder_select="mdct rdft dct"
1166binkaudio_rdft_decoder_select="mdct rdft"
4f034993 1167cavs_decoder_select="golomb"
26fbcc85 1168cook_decoder_select="mdct"
2eef7c62 1169cscd_decoder_suggest="zlib"
26fbcc85 1170dca_decoder_select="mdct"
e8ed9b7a 1171dnxhd_encoder_select="aandct"
2eef7c62 1172dxa_decoder_select="zlib"
baf91bb9 1173eac3_decoder_select="ac3_decoder"
84c04e25 1174eamad_decoder_select="aandct"
e8ed9b7a 1175eatgq_decoder_select="aandct"
d52b39c7 1176eatqi_decoder_select="aandct"
4f034993
MR
1177ffv1_decoder_select="golomb"
1178flac_decoder_select="golomb"
f4d608e3 1179flac_encoder_select="golomb lpc"
2eef7c62
AJ
1180flashsv_decoder_select="zlib"
1181flashsv_encoder_select="zlib"
4414137e 1182flv_decoder_select="h263_decoder"
4d4b4bd1 1183flv_encoder_select="h263_encoder"
e8ed9b7a 1184h261_encoder_select="aandct"
7f647ae0 1185h263_decoder_select="h263_parser"
e8ed9b7a 1186h263_encoder_select="aandct"
95a61cfc 1187h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1188h263i_decoder_select="h263_decoder"
fe629c2d 1189h263p_encoder_select="h263_encoder"
4693b031 1190h264_decoder_select="golomb h264dsp"
92c6a099
LA
1191h264_dxva2_hwaccel_deps="dxva2api_h"
1192h264_dxva2_hwaccel_select="dxva2 h264_decoder"
17492d5e 1193h264_vaapi_hwaccel_select="vaapi"
95a61cfc 1194h264_vdpau_decoder_select="vdpau h264_decoder"
47a158cb 1195imc_decoder_select="fft mdct"
4f034993
MR
1196jpegls_decoder_select="golomb"
1197jpegls_encoder_select="golomb"
e8ed9b7a 1198ljpeg_encoder_select="aandct"
4f034993 1199loco_decoder_select="golomb"
e8ed9b7a 1200mjpeg_encoder_select="aandct"
2cca233b 1201mlp_decoder_select="mlp_parser"
e8ed9b7a
DB
1202mpeg1video_encoder_select="aandct"
1203mpeg2video_encoder_select="aandct"
4414137e 1204mpeg4_decoder_select="h263_decoder mpeg4video_parser"
c37de5e1 1205mpeg4_encoder_select="h263_encoder"
95a61cfc 1206mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
95a61cfc 1207mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
164aab02
LA
1208mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1209mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
95a61cfc 1210mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
95a61cfc 1211mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871 1212mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
8f6f050a 1213mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
4d8eecf4 1214mpeg_xvmc_decoder_select="mpegvideo_decoder"
4414137e 1215msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1216msmpeg4v1_encoder_select="h263_encoder"
4414137e 1217msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1218msmpeg4v2_encoder_select="h263_encoder"
4414137e 1219msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1220msmpeg4v3_encoder_select="h263_encoder"
26fbcc85
MR
1221nellymoser_decoder_select="mdct"
1222nellymoser_encoder_select="mdct"
2eef7c62
AJ
1223png_decoder_select="zlib"
1224png_encoder_select="zlib"
b781cc12 1225qcelp_decoder_select="lsp"
26fbcc85 1226qdm2_decoder_select="mdct rdft"
31ed3f1f 1227ra_144_encoder_select="lpc"
a8beb22f 1228rv10_decoder_select="h263_decoder"
b2bf38b4 1229rv10_encoder_select="h263_encoder"
a8beb22f 1230rv20_decoder_select="h263_decoder"
b2bf38b4 1231rv20_encoder_select="h263_encoder"
4693b031
MR
1232rv30_decoder_select="golomb h264dsp"
1233rv40_decoder_select="golomb h264dsp"
4f034993 1234shorten_decoder_select="golomb"
b781cc12 1235sipr_decoder_select="lsp"
05aec7bb
MR
1236snow_decoder_select="dwt"
1237snow_encoder_select="aandct dwt"
4f034993
MR
1238sonic_decoder_select="golomb"
1239sonic_encoder_select="golomb"
1240sonic_ls_encoder_select="golomb"
19ecfb8a 1241svq1_encoder_select="aandct"
4693b031 1242svq3_decoder_select="golomb h264dsp"
bee2eac5 1243svq3_decoder_suggest="zlib"
4eef77c1 1244theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1245tiff_decoder_suggest="zlib"
1246tiff_encoder_suggest="zlib"
aec09a00 1247truehd_decoder_select="mlp_decoder"
2eef7c62 1248tscc_decoder_select="zlib"
b781cc12 1249twinvq_decoder_select="mdct lsp"
f95bfab0 1250vc1_decoder_select="h263_decoder"
9104cd51 1251vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
f0f86627 1252vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
95a61cfc 1253vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
95a61cfc 1254vc1_vdpau_decoder_select="vdpau vc1_decoder"
26fbcc85
MR
1255vorbis_decoder_select="mdct"
1256vorbis_encoder_select="mdct"
e82dc4c9
DB
1257vp6a_decoder_select="vp6_decoder"
1258vp6f_decoder_select="vp6_decoder"
084cbbaa 1259wmapro_decoder_select="mdct"
26fbcc85
MR
1260wmav1_decoder_select="mdct"
1261wmav1_encoder_select="mdct"
1262wmav2_decoder_select="mdct"
1263wmav2_encoder_select="mdct"
005ad8a0 1264wmavoice_decoder_select="lsp rdft dct"
f95bfab0 1265wmv1_decoder_select="h263_decoder"
665507aa 1266wmv1_encoder_select="h263_encoder"
f95bfab0 1267wmv2_decoder_select="h263_decoder"
1746e2a9 1268wmv2_encoder_select="h263_encoder"
015f8ee0 1269wmv3_decoder_select="vc1_decoder"
f0f86627 1270wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
015f8ee0
DB
1271wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1272wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2eef7c62
AJ
1273zlib_decoder_select="zlib"
1274zlib_encoder_select="zlib"
1275zmbv_decoder_select="zlib"
1276zmbv_encoder_select="zlib"
30fd06be 1277
0afab17e 1278vaapi_deps="va_va_h"
c89c96e9
MR
1279vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1280
28b80940 1281# parsers
4693b031 1282h264_parser_select="golomb h264dsp"
28b80940 1283
f1e94694
DB
1284# bitstream_filters
1285aac_adtstoasc_bsf_select="aac_parser"
1286
912f3148 1287# external libraries
1b71f045 1288libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1289libdirac_encoder_deps="libdirac"
c9171a83 1290libfaac_encoder_deps="libfaac"
299c77d5
MR
1291libgsm_decoder_deps="libgsm"
1292libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1293libgsm_ms_decoder_deps="libgsm"
1294libgsm_ms_encoder_deps="libgsm"
1cc60c47 1295libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1296libopencore_amrnb_decoder_deps="libopencore_amrnb"
1297libopencore_amrnb_encoder_deps="libopencore_amrnb"
1298libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1299libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1300libschroedinger_decoder_deps="libschroedinger"
1301libschroedinger_encoder_deps="libschroedinger"
ae14f311 1302libspeex_decoder_deps="libspeex"
150d2772 1303libtheora_encoder_deps="libtheora"
b0caf888 1304libvorbis_encoder_deps="libvorbis"
8299a7f8 1305libvpx_decoder_deps="libvpx"
ee0e9146 1306libvpx_encoder_deps="libvpx"
1cc60c47
DB
1307libx264_encoder_deps="libx264"
1308libxvid_encoder_deps="libxvid"
30fd06be 1309
912f3148 1310# demuxers / muxers
03a76ba9 1311ac3_demuxer_deps="ac3_parser"
647c2356 1312asf_stream_muxer_select="asf_muxer"
4e622dea
SS
1313avisynth_demuxer_deps="avisynth"
1314dirac_demuxer_deps="dirac_parser"
5b423887 1315eac3_demuxer_select="ac3_parser"
647c2356 1316ipod_muxer_select="mov_muxer"
4e622dea
SS
1317libnut_demuxer_deps="libnut"
1318libnut_muxer_deps="libnut"
647c2356 1319matroska_audio_muxer_select="matroska_muxer"
4e622dea
SS
1320matroska_demuxer_suggest="zlib bzlib"
1321mov_demuxer_suggest="zlib"
1322mp3_demuxer_deps="mpegaudio_parser"
647c2356
DB
1323mp4_muxer_select="mov_muxer"
1324mpegtsraw_demuxer_select="mpegts_demuxer"
1325mxf_d10_muxer_select="mxf_muxer"
24ca518b 1326ogg_demuxer_select="golomb"
647c2356 1327psp_muxer_select="mov_muxer"
4e622dea 1328rtsp_demuxer_deps="sdp_demuxer"
6f5a3d0a
MS
1329rtsp_muxer_deps="sdp_demuxer"
1330rtsp_muxer_select="rtp_muxer"
4e622dea 1331sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
0298cc04 1332sdp_demuxer_select="asf_demuxer rm_demuxer"
f1e94694 1333spdif_muxer_select="aac_parser"
647c2356
DB
1334tg2_muxer_select="mov_muxer"
1335tgp_muxer_select="mov_muxer"
6bdaa5f4 1336w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1337
1338# indevs / outdevs
38e54a75
SS
1339alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1340alsa_indev_extralibs="-lasound"
1341alsa_outdev_deps="alsa_asoundlib_h"
1342alsa_outdev_extralibs="-lasound"
38e54a75 1343bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75
SS
1344dv1394_indev_deps="dv1394 dv_demuxer"
1345jack_indev_deps="jack_jack_h"
1346jack_indev_extralibs="-ljack"
1347libdc1394_indev_deps="libdc1394"
38e54a75
SS
1348oss_indev_deps_any="soundcard_h sys_soundcard_h"
1349oss_outdev_deps_any="soundcard_h sys_soundcard_h"
38e54a75
SS
1350v4l_indev_deps="linux_videodev_h"
1351v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1352vfwcap_indev_deps="capCreateCaptureWindow"
a1b3c5a3 1353vfwcap_indev_extralibs="-lavicap32"
38e54a75 1354x11_grab_device_indev_deps="x11grab XShmCreateImage"
781c1aa6 1355x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
30fd06be 1356
912f3148 1357# protocols
3fff6382 1358gopher_protocol_deps="network"
c08fb000 1359http_protocol_deps="network"
279a0c97 1360http_protocol_select="tcp_protocol"
b4cf3f6c 1361mmst_protocol_deps="network"
deeb7012
MS
1362rtmp_protocol_select="tcp_protocol"
1363rtp_protocol_select="udp_protocol"
c08fb000
AB
1364tcp_protocol_deps="network"
1365udp_protocol_deps="network"
1366
f7679c54 1367# filters
81124ba0 1368movie_filter_deps="avfilter_lavf"
5a0f7131
MR
1369avfilter_lavf_deps="avformat"
1370
1371# libraries
1372avdevice_deps="avcodec avformat"
1373avformat_deps="avcodec"
f7679c54 1374
912f3148 1375# programs
5a0f7131 1376ffmpeg_deps="avcodec avformat swscale"
21ae6790 1377ffmpeg_select="buffer_filter"
5a0f7131 1378ffplay_deps="avcodec avformat swscale sdl"
43689902 1379ffplay_select="rdft"
336ce917 1380ffprobe_deps="avcodec avformat"
5a0f7131 1381ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1382ffserver_extralibs='$ldl'
a2830dca 1383
c73f65d9 1384doc_deps="texi2html"
912f3148 1385
de6d9b64 1386# default parameters
8a608357 1387
19bd477d 1388logfile="config.log"
8a608357
MR
1389
1390# installation paths
c9d19248
MR
1391prefix_default="/usr/local"
1392bindir_default='${prefix}/bin'
14a8acf1 1393datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1394incdir_default='${prefix}/include'
1395libdir_default='${prefix}/lib'
1396mandir_default='${prefix}/share/man'
1397shlibdir_default="$libdir_default"
8a608357
MR
1398
1399# toolchain
121d78d0 1400ar_default="ar"
13c7df3d 1401cc_default="gcc"
a3d7c197 1402cc_version=\"unknown\"
9da6609f 1403host_cc_default="gcc"
11e6d03a 1404ln_s="ln -sf"
89641463 1405nm_default="nm"
11e6d03a 1406objformat="elf"
be7109c1 1407ranlib="ranlib"
4f837398 1408strip_default="strip"
11e6d03a 1409yasmexe="yasm"
8a608357 1410
8182dc34
MR
1411nm_opts='-g'
1412
8a608357 1413# machine
8d4c00ed 1414arch_default=$(uname -m)
38d0a8aa 1415cpu="generic"
8a608357 1416
8a608357 1417# OS
8d4c00ed
MR
1418target_os_default=$(tolower $(uname -s))
1419host_os=$target_os_default
8a608357 1420
8a608357 1421# configurable options
5a0f7131
MR
1422enable avcodec
1423enable avdevice
cccc039f 1424enable avfilter
5a0f7131 1425enable avformat
dc4f5a1c 1426enable avutil
c8a4ae00 1427enable asm
497237c7 1428enable debug
c73f65d9 1429enable doc
aa033b1e 1430enable fastdiv
497237c7
RP
1431enable ffmpeg
1432enable ffplay
336ce917 1433enable ffprobe
497237c7 1434enable ffserver
497237c7
RP
1435enable mpegaudio_hp
1436enable network
8400d6b8 1437enable optimizations
497237c7 1438enable protocols
530dc538 1439enable static
87a0fb62 1440enable stripping
5a0f7131 1441enable swscale
a9ddb5b1 1442enable swscale_alpha
8a608357 1443
8a608357 1444# build settings
9987769a 1445SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1446FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1447LIBPREF="lib"
1448LIBSUF=".a"
c5f14466
RP
1449FULLNAME='$(NAME)$(BUILDSUF)'
1450LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1451SLIBPREF="lib"
1452SLIBSUF=".so"
c5f14466 1453SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1454SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1455SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 1456LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1457
7e6c86e6
MR
1458CC_O='-o $@'
1459
f0125de9 1460host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
9da6609f
MR
1461host_libs='-lm'
1462
9b861379 1463target_path='$(CURDIR)'
a7ada2ba 1464
0d7dca36
DB
1465# gcc stupidly only outputs the basename of targets with -MM, but we need the
1466# full relative path for objects in subdirectories for non-recursive Make.
c1c3933a 1467DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
d8059267 1468DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
315c741d 1469
c597172e 1470# find source path
5e622c40 1471source_path="$(dirname "$0")"
497237c7 1472enable source_path_used
24524f36 1473if test -f configure; then
5e622c40 1474 source_path="$(pwd)"
497237c7 1475 disable source_path_used
c597172e 1476else
5e622c40 1477 source_path="$(cd "$source_path"; pwd)"
c597172e 1478 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1479 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1480 test -e "$source_path/config.h" &&
1481 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1482fi
1483
13cbe2c0 1484for v in "$@"; do
b04251c5
MR
1485 r=${v#*=}
1486 l=${v%"$r"}
1487 r=$(sh_quote "$r")
13cbe2c0
MR
1488 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1489done
c597172e 1490
73ef8980
MR
1491find_things(){
1492 thing=$1
1493 pattern=$2
1494 file=$source_path/$3
932ccf39 1495 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1496}
1497
1498ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1499DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1500HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1501PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1502BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1503MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1504DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1505OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1506INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1507PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1508FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1509
8469ae22
MR
1510for n in $COMPONENT_LIST; do
1511 v=$(toupper ${n%s})_LIST
1512 eval enable \$$v
1513 eval ${n}_if_any="\$$v"
1514done
1515
1516enable $ARCH_EXT_LIST
c597172e
MR
1517
1518die_unknown(){
1519 echo "Unknown option \"$1\"."
1520 echo "See $0 --help for available options."
1521 exit 1
1522}
1523
794f8e97 1524show_list() {
bf0c4afa
RP
1525 suffix=_$1
1526 shift
2b444ea7 1527 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
794f8e97
PI
1528 exit 0
1529}
1530
c597172e 1531for opt do
7483e694
DB
1532 optval="${opt#*=}"
1533 case "$opt" in
0f010b2f 1534 --extra-ldflags=*) add_ldflags $optval
7483e694 1535 ;;
0f010b2f 1536 --extra-libs=*) add_extralibs $optval
7483e694 1537 ;;
8fb1cb58 1538 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1539 ;;
40bcf4c7
BL
1540 --enable-debug=*) debuglevel="$optval"
1541 ;;
36e2dea0 1542 --disable-everything)
e0e335a0 1543 map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
36e2dea0 1544 ;;
7483e694 1545 --enable-*=*|--disable-*=*)
8b93ddc3 1546 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1547 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1548 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1549 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1550 $action $(filter "$name" $list)
7483e694
DB
1551 ;;
1552 --enable-?*|--disable-?*)
5e622c40 1553 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1554 if is_in $option $COMPONENT_LIST; then
fed5d54b 1555 test $action = disable && action=unset
e3773a55
MR
1556 eval $action \$$(toupper ${option%s})_LIST
1557 elif is_in $option $CMDLINE_SELECT; then
1558 $action $option
1559 else
1560 die_unknown $opt
1561 fi
7483e694
DB
1562 ;;
1563 --list-*)
1564 NAME="${opt#--list-}"
1565 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1566 NAME=${NAME%s}
1567 eval show_list $NAME \$$(toupper $NAME)_LIST
1568 ;;
1569 --help|-h) show_help
1570 ;;
1571 *)
884a36a7 1572 optname="${opt%%=*}"
26759c44
MR
1573 optname="${optname#--}"
1574 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1575 if is_in $optname $CMDLINE_SET; then
1576 eval $optname='$optval'
1577 elif is_in $optname $CMDLINE_APPEND; then
1578 append $optname "$optval"
1579 else
1580 die_unknown $opt
1581 fi
7483e694
DB
1582 ;;
1583 esac
c597172e
MR
1584done
1585
bcea99bb
MR
1586disabled logging && logfile=/dev/null
1587
13cbe2c0 1588echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1589set >> $logfile
1590
9da6609f
MR
1591test -n "$cross_prefix" && enable cross_compile
1592
8d4c00ed
MR
1593if enabled cross_compile; then
1594 test -n "$arch" && test -n "$target_os" ||
1595 die "Must specify target arch and OS when cross-compiling"
1596fi
1597
1598set_default arch target_os
1599
121d78d0 1600ar_default="${cross_prefix}${ar_default}"
11e6d03a 1601cc_default="${cross_prefix}${cc_default}"
20e0ed95 1602nm_default="${cross_prefix}${nm_default}"
adb2b908 1603ranlib="${cross_prefix}${ranlib}"
4f837398 1604strip_default="${cross_prefix}${strip_default}"
adb2b908 1605
c5200f17
MR
1606sysinclude_default="${sysroot}/usr/include"
1607
4f837398 1608set_default cc nm strip sysinclude
9da6609f
MR
1609enabled cross_compile || host_cc_default=$cc
1610set_default host_cc
13c7df3d 1611
82bb3329
MR
1612exesuf() {
1613 case $1 in
1614 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1615 esac
1616}
1617
1618EXESUF=$(exesuf $target_os)
1619HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1620
e4e69e0b 1621# set temporary file name
a49d42c2 1622: ${TMPDIR:=$TEMPDIR}
c51fafa1 1623: ${TMPDIR:=$TMP}
a49d42c2 1624: ${TMPDIR:=/tmp}
e4e69e0b 1625
54460a83
MR
1626if ! check_cmd type mktemp; then
1627 # simple replacement for missing mktemp
1628 # NOT SAFE FOR GENERAL USE
1629 mktemp(){
1630 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1631 }
1632fi
1633
1634tmpfile(){
1635 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1636 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 1637 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
1638 append TMPFILES $tmp
1639 eval $1=$tmp
1640}
1641
1642trap 'rm -f -- $TMPFILES' EXIT
1643trap exit HUP INT TERM
1644
1645tmpfile TMPC .c
1646tmpfile TMPE $EXESUF
1647tmpfile TMPH .h
1648tmpfile TMPO .o
1649tmpfile TMPS .S
a482e61b 1650tmpfile TMPV .ver
54460a83
MR
1651tmpfile TMPSH .sh
1652
1653unset -f mktemp
e4e69e0b 1654
993f2d0f
MR
1655# make sure we can execute files in $TMPDIR
1656cat > $TMPSH 2>> $logfile <<EOF
1657#! /bin/sh
1658EOF
1659chmod +x $TMPSH >> $logfile 2>&1
1660if ! $TMPSH >> $logfile 2>&1; then
1661 cat <<EOF
1662Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1663variable to another directory and make sure that it is not mounted noexec.
1664EOF
1665 die "Sanity test failed."
1666fi
993f2d0f 1667
19b4c628
MR
1668filter_cflags=echo
1669filter_cppflags=echo
1670filter_asflags=echo
1671
8f0c157a 1672if $cc -v 2>&1 | grep -qi ^gcc; then
629687f6 1673 cc_type=gcc
a3d7c197 1674 cc_version=__VERSION__
aef6bd1b
MR
1675 if ! $cc -dumpversion | grep -q '^2\.'; then
1676 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1677 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1678 fi
14ca9cd0
MR
1679 speed_cflags='-O3'
1680 size_cflags='-Os'
629687f6
MR
1681elif $cc --version 2>/dev/null | grep -q Intel; then
1682 cc_type=icc
6e3fa35d 1683 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
07dec06e
MR
1684 CC_DEPFLAGS='-MMD'
1685 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1686 speed_cflags='-O3'
1687 size_cflags='-Os'
b05394a0 1688 noopt_cflags='-O1'
629687f6
MR
1689elif $cc -v 2>&1 | grep -q xlc; then
1690 cc_type=xlc
6e3fa35d 1691 cc_version="AV_STRINGIFY(__IBMC__)"
14ca9cd0
MR
1692 speed_cflags='-O5'
1693 size_cflags='-O5 -qcompact'
df442a8d
MR
1694elif $cc -V 2>/dev/null | grep -q Compaq; then
1695 cc_type=ccc
6e3fa35d 1696 cc_version="AV_STRINGIFY(__DECC_VER)"
d8059267 1697 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
03754fcd 1698 debuglevel=3
df442a8d 1699 add_ldflags -Wl,-z,now # calls to libots crash without this
14ca9cd0
MR
1700 speed_cflags='-fast'
1701 size_cflags='-O1'
6a0d5493 1702elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
03e37762
MR
1703 test -d "$sysroot" || die "No valid sysroot specified."
1704 cc_type=armcc
6e3fa35d 1705 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
03e37762
MR
1706 armcc_conf="$PWD/armcc.conf"
1707 $cc --arm_linux_configure \
1708 --arm_linux_config_file="$armcc_conf" \
1709 --configure_sysroot="$sysroot" \
1710 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1711 die "Error creating armcc configuration file."
1712 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1713 as_default="${cross_prefix}gcc"
07dec06e
MR
1714 CC_DEPFLAGS='-MMD'
1715 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1716 speed_cflags='-O3'
1717 size_cflags='-Os'
6fec122a
MR
1718elif $cc -version 2>/dev/null | grep -q TMS470; then
1719 cc_type=tms470
6e3fa35d 1720 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
6fec122a
MR
1721 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1722 CC_O='-fr=$(@D)'
1723 as_default="${cross_prefix}gcc"
1724 ld_default="${cross_prefix}gcc"
6fec122a
MR
1725 TMPO=$(basename $TMPC .c).o
1726 append TMPFILES $TMPO
1727 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
07dec06e
MR
1728 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1729 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1730 speed_cflags='-O3 -mf=5'
1731 size_cflags='-O3 -mf=2'
6fec122a
MR
1732 filter_cflags=tms470_flags
1733 tms470_flags(){
1734 for flag; do
1735 case $flag in
1736 -march=*|-mcpu=*)
1737 case "${flag#*=}" in
1738 armv7-a|cortex-a*) echo -mv=7a8 ;;
1739 armv7-r|cortex-r*) echo -mv=7r4 ;;
1740 armv7-m|cortex-m*) echo -mv=7m3 ;;
1741 armv6*|arm11*) echo -mv=6 ;;
1742 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1743 echo -mv=5e ;;
1744 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1745 esac
1746 ;;
1747 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1748 -mfpu=vfp) echo --float_support=vfpv2 ;;
5fcb865b 1749 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
a2709020 1750 -msoft-float) echo --float_support=vfplib ;;
14ca9cd0 1751 -O[0-3]|-mf=*) echo $flag ;;
6fec122a 1752 -g) echo -g -mn ;;
587d24ff 1753 -pds=*) echo $flag ;;
6fec122a
MR
1754 esac
1755 done
1756 }
06da6943
DC
1757elif $cc -v 2>&1 | grep -q clang; then
1758 cc_type=clang
1759 cc_version=__VERSION__
1760 CC_DEPFLAGS='-MMD'
1761 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1762 speed_cflags='-O3'
1763 size_cflags='-Os'
2a472e9c
MK
1764elif $cc -V 2>&1 | grep -q Sun; then
1765 cc_type=suncc
1766 cc_version="AV_STRINGIFY(__SUNPRO_C)"
faa374b7 1767 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2a472e9c 1768 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
14ca9cd0
MR
1769 speed_cflags='-O5'
1770 size_cflags='-O5 -xspace'
03279bbe
MK
1771 filter_cflags=suncc_flags
1772 suncc_flags(){
1773 for flag; do
1774 case $flag in
1775 -march=*|-mcpu=*)
1776 case "${flag#*=}" in
1777 native) echo -xtarget=native ;;
87ddc38b 1778 v9|niagara) echo -xarch=sparc ;;
03279bbe 1779 ultrasparc) echo -xarch=sparcvis ;;
87ddc38b 1780 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
03279bbe
MK
1781 i586|pentium) echo -xchip=pentium ;;
1782 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1783 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1784 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1785 pentium4*) echo -xtarget=pentium4 ;;
1786 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1787 *-sse3) echo -xarch=sse3 ;;
1788 core2) echo -xarch=ssse3 -xchip=core2 ;;
1789 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1790 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1791 k8|opteron|athlon64|athlon-fx)
1792 echo -xarch=sse2a ;;
1793 athlon*) echo -xarch=pentium_proa ;;
1794 esac
1795 ;;
1796 -std=c99) echo -xc99 ;;
1797 -fomit-frame-pointer) echo -xregs=frameptr ;;
1798 -fPIC) echo -KPIC -xcode=pic32 ;;
03279bbe
MK
1799 -W*,*) echo $flag ;;
1800 -f*-*|-W*) ;;
1801 *) echo $flag ;;
1802 esac
1803 done
1804 }
629687f6
MR
1805fi
1806
851ffa80
MR
1807test -n "$cc_type" && enable $cc_type ||
1808 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 1809
75bafbac 1810: ${as_default:=$cc}
50567afa 1811: ${dep_cc_default:=$cc}
684b28e0 1812: ${ld_default:=$cc}
121d78d0 1813set_default ar as dep_cc ld
75800dce 1814
07dec06e
MR
1815test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1816test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1817
7f32f40c 1818add_cflags $extra_cflags
2f2e6c7c 1819add_asflags $extra_cflags
7f32f40c 1820
154d432c
MR
1821if test -n "$sysroot"; then
1822 case "$cc_type" in
1823 gcc)
467256f2 1824 add_cppflags --sysroot="$sysroot"
154d432c
MR
1825 add_ldflags --sysroot="$sysroot"
1826 ;;
6fec122a
MR
1827 tms470)
1828 add_cppflags -I"$sysinclude"
1829 add_ldflags --sysroot="$sysroot"
1830 ;;
06da6943 1831 clang)
4def700e
DC
1832 add_cppflags -isysroot "$sysroot"
1833 add_ldflags -isysroot "$sysroot"
06da6943 1834 ;;
154d432c
MR
1835 esac
1836fi
1837
d22c13a8
MR
1838if test "$cpu" = host; then
1839 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1840
1841 case "$cc_type" in
1842 gcc)
1843 check_native(){
1844 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
27ce1be8
MR
1845 sed -n "/$1=/{
1846 s/.*$1=\\([^ ]*\\).*/\\1/
1847 p
1848 q
1849 }" $TMPE
d22c13a8
MR
1850 }
1851 cpu=$(check_native -march || check_native -mcpu)
1852 ;;
1853 esac
1854
1855 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1856fi
1857
e939cedd
MR
1858# Deal with common $arch aliases
1859case "$arch" in
1860 arm*)
1861 arch="arm"
1862 ;;
1863 mips|mipsel|IP*)
1864 arch="mips"
1865 ;;
47b1860e 1866 mips64*)
e939cedd
MR
1867 arch="mips"
1868 subarch="mips64"
1869 ;;
1870 parisc|hppa)
1871 arch="parisc"
1872 ;;
1873 parisc64|hppa64)
1874 arch="parisc"
1875 subarch="parisc64"
1876 ;;
1877 "Power Macintosh"|ppc|powerpc)
1878 arch="ppc"
1879 ;;
47b1860e 1880 ppc64|powerpc64)
e939cedd
MR
1881 arch="ppc"
1882 subarch="ppc64"
1883 ;;
1884 s390|s390x)
1885 arch="s390"
1886 ;;
1887 sh4|sh)
1888 arch="sh4"
1889 ;;
1890 sun4u|sparc64)
1891 arch="sparc"
1892 subarch="sparc64"
1893 ;;
1894 i[3-6]86|i86pc|BePC|x86_64|amd64)
1895 arch="x86"
1896 ;;
1897esac
1898
851ffa80 1899is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 1900enable $arch
e939cedd 1901
df5cdc24 1902# Add processor-specific flags
5d54c126
MR
1903if test "$cpu" = generic; then
1904 : do nothing
1905elif enabled ppc; then
343aef9b 1906
56348891
MR
1907 case $(tolower $cpu) in
1908 601|ppc601|powerpc601)
9dbd5c3d 1909 cpuflags="-mcpu=601"
64ad53ff 1910 disable altivec
9dbd5c3d 1911 ;;
56348891 1912 603*|ppc603*|powerpc603*)
9dbd5c3d 1913 cpuflags="-mcpu=603"
64ad53ff 1914 disable altivec
9dbd5c3d 1915 ;;
56348891 1916 604*|ppc604*|powerpc604*)
9dbd5c3d 1917 cpuflags="-mcpu=604"
64ad53ff 1918 disable altivec
9dbd5c3d 1919 ;;
56348891 1920 g3|75*|ppc75*|powerpc75*)
9dbd5c3d 1921 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
64ad53ff 1922 disable altivec
9dbd5c3d 1923 ;;
56348891 1924 g4|745*|ppc745*|powerpc745*)
9dbd5c3d
MR
1925 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1926 ;;
56348891 1927 74*|ppc74*|powerpc74*)
9dbd5c3d
MR
1928 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1929 ;;
56348891 1930 g5|970|ppc970|powerpc970|power4*)
9dbd5c3d
MR
1931 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1932 ;;
56348891 1933 cell)
9dbd5c3d
MR
1934 cpuflags="-mcpu=cell"
1935 enable ldbrx
1936 ;;
7b0b81a1
AL
1937 e500v2)
1938 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1939 disable altivec
1940 ;;
1941 e500)
1942 cpuflags="-mcpu=8540 -mhard-float"
1943 disable altivec
1944 ;;
9dbd5c3d 1945 esac
343aef9b
MR
1946
1947elif enabled x86; then
1948
9dbd5c3d
MR
1949 case $cpu in
1950 i[345]86|pentium)
1951 cpuflags="-march=$cpu"
1952 disable mmx
1953 ;;
1954 # targets that do NOT support conditional mov (cmov)
1955 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1956 cpuflags="-march=$cpu"
1957 disable cmov
1958 ;;
1959 # targets that do support conditional mov (cmov)
a65e687b 1960 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
9dbd5c3d
MR
1961 cpuflags="-march=$cpu"
1962 enable cmov
1963 enable fast_cmov
1964 ;;
1965 # targets that do support conditional mov but on which it's slow
1966 pentium4|pentium4m|prescott|nocona)
1967 cpuflags="-march=$cpu"
1968 enable cmov
1969 disable fast_cmov
1970 ;;
1971 esac
343aef9b
MR
1972
1973elif enabled sparc; then
1974
9dbd5c3d 1975 case $cpu in
26b7199e
MK
1976 niagara)
1977 cpuflags="-mcpu=$cpu"
1978 disable vis
1979 ;;
9dbd5c3d
MR
1980 sparc64)
1981 cpuflags="-mcpu=v9"
1982 ;;
1983 esac
343aef9b
MR
1984
1985elif enabled arm; then
1986
34ba23c9
MR
1987 case $cpu in
1988 armv*)
1989 cpuflags="-march=$cpu"
1990 ;;
1991 *)
1992 cpuflags="-mcpu=$cpu"
1993 ;;
1994 esac
343aef9b
MR
1995
1996elif enabled alpha; then
1997
34ba23c9 1998 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
1999
2000elif enabled bfin; then
2001
34ba23c9 2002 cpuflags="-mcpu=$cpu"
343aef9b
MR
2003
2004elif enabled mips; then
2005
34ba23c9 2006 cpuflags="-march=$cpu"
343aef9b
MR
2007
2008elif enabled avr32; then
2009
9dbd5c3d
MR
2010 case $cpu in
2011 ap7[02]0[0-2])
2012 subarch="avr32_ap"
2013 cpuflags="-mpart=$cpu"
2014 ;;
2015 ap)
2016 subarch="avr32_ap"
2017 cpuflags="-march=$cpu"
2018 ;;
2019 uc3[ab]*)
2020 subarch="avr32_uc"
2021 cpuflags="-mcpu=$cpu"
2022 ;;
2023 uc)
2024 subarch="avr32_uc"
2025 cpuflags="-march=$cpu"
2026 ;;
2027 esac
df5cdc24 2028
343aef9b
MR
2029fi
2030
df5cdc24
MR
2031add_cflags $cpuflags
2032add_asflags $cpuflags
2033
993f2d0f
MR
2034# compiler sanity check
2035check_exec <<EOF
2036int main(void){ return 0; }
2037EOF
2038if test "$?" != 0; then
2039 echo "$cc is unable to create an executable file."
2040 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2041 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2042 echo "Only do this if you know what cross compiling means."
2043 fi
2044 die "C compiler test failed."
2045fi
2046
38a9c529 2047add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
e9b9a2f8 2048check_cflags -std=c99
50a334e4 2049check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
2050#include <stdlib.h>
2051EOF
50a334e4 2052check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
2053#include <stdlib.h>
2054EOF
e9b9a2f8 2055
f0125de9
MR
2056check_host_cflags -std=c99
2057
b24dbcbd 2058case "$arch" in
e939cedd 2059 alpha|ia64|mips|parisc|sparc)
8a3c8627 2060 spic=$shared
b24dbcbd 2061 ;;
e939cedd 2062 x86)
cfdb6148 2063 subarch="x86_32"
e939cedd 2064 check_cc <<EOF && subarch="x86_64"
58b3536d 2065 int test[(int)sizeof(char*) - 7];
cfdb6148 2066EOF
de27f4d9 2067 if test "$subarch" = "x86_64"; then
e939cedd 2068 spic=$shared
de27f4d9 2069 fi
b24dbcbd 2070 ;;
b24dbcbd
RP
2071esac
2072
343aef9b 2073enable $subarch
8a3c8627 2074enabled spic && enable pic
b24dbcbd 2075
7483e694 2076# OS specific
4f854758 2077case $target_os in
a1629e28 2078 haiku)
63ae7e7c 2079 prefix_default="/boot/common"
108caaaa 2080 network_extralibs="-lnetwork"
a1629e28 2081 ;;
7483e694
DB
2082 sunos)
2083 FFSERVERLDFLAGS=""
9987769a 2084 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2085 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2086 network_extralibs="-lsocket -lnsl"
50a334e4 2087 add_cppflags -D__EXTENSIONS__
8182dc34 2088 nm_opts='-P -g'
7483e694
DB
2089 ;;
2090 netbsd)
07a8eef6
MR
2091 oss_indev_extralibs="-lossaudio"
2092 oss_outdev_extralibs="-lossaudio"
2138dc99 2093 add_cppflags -D_XOPEN_SOURCE=600
7483e694
DB
2094 ;;
2095 openbsd)
89e053f8 2096 enable malloc_aligned
7c4a001a
MR
2097 # On OpenBSD 4.5. the compiler does not use PIC unless
2098 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2099 # however the generated executable will not do anything
2100 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2101 # Thus explicitly enable PIC here.
cd78208b 2102 enable pic
7483e694 2103 SHFLAGS='-shared'
07a8eef6
MR
2104 oss_indev_extralibs="-lossaudio"
2105 oss_outdev_extralibs="-lossaudio"
7483e694 2106 ;;
90b4f091 2107 freebsd|dragonfly)
89e053f8 2108 enable malloc_aligned
7483e694
DB
2109 ;;
2110 bsd/os)
2111 osextralibs="-lpoll -lgnugetopt"
2112 strip="strip -d"
2113 ;;
2114 darwin)
89e053f8 2115 enable malloc_aligned
0138c54e 2116 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
be90cd27 2117 strip="${strip} -x"
7483e694
DB
2118 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2119 SLIBSUF=".dylib"
2120 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2121 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2122 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2123 objformat="macho"
1b0f6fb8 2124 enabled x86_64 && objformat="macho64"
8dfa86f7 2125 enabled_any pic shared ||
2704bd1a 2126 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2127 ;;
2128 mingw32*)
9d3f4f50 2129 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2130 disable network
2131 else
2132 target_os=mingw32
2133 fi
dcc01c06 2134 LIBTARGET=i386
1fc9fb8a 2135 if enabled x86_64; then
89e053f8 2136 enable malloc_aligned
dcc01c06 2137 LIBTARGET=x64
336cc1b0
MS
2138 elif enabled arm; then
2139 LIBTARGET=arm
dcc01c06 2140 fi
fbd971a4 2141 shlibdir_default="$bindir_default"
7483e694
DB
2142 disable ffserver
2143 SLIBPREF=""
2144 SLIBSUF=".dll"
7483e694
DB
2145 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2146 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 2147 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159 2148 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
b9349ff4
MS
2149 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2150 install -d "$(LIBDIR)"; \
2151 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
7483e694 2152 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 2153 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 2154 objformat="win32"
bc574408 2155 enable dos_paths
1894e741 2156 check_cflags -fno-common
b1549d61 2157 if ! enabled x86_64; then
f7ad5aa2
RP
2158 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2159 die "ERROR: MinGW runtime version must be >= 3.15."
8beb4178 2160 enabled_any avisynth vfwcap_indev &&
f7ad5aa2 2161 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
8beb4178 2162 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
626c46ec 2163 fi
7483e694
DB
2164 ;;
2165 cygwin*)
4f854758 2166 target_os=cygwin
fbd971a4 2167 shlibdir_default="$bindir_default"
7483e694
DB
2168 SLIBPREF="cyg"
2169 SLIBSUF=".dll"
2170 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2171 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2172 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 2173 objformat="win32"
bc574408 2174 enable dos_paths
1894e741 2175 check_cflags -fno-common
7483e694 2176 ;;
4f365f37 2177 *-dos|freedos|opendos)
fdf11906 2178 disable ffplay ffserver
4f365f37
MK
2179 disable $INDEV_LIST $OUTDEV_LIST
2180 network_extralibs="-lsocket"
ff1c015d 2181 objformat="coff"
bc574408 2182 enable dos_paths
4f365f37 2183 ;;
7483e694 2184 linux)
7483e694
DB
2185 enable dv1394
2186 ;;
2187 irix*)
4f854758 2188 target_os=irix
7483e694
DB
2189 ranlib="echo ignoring ranlib"
2190 ;;
d22e8442 2191 os/2*)
d22e8442
DY
2192 strip="lxlite"
2193 ln_s="cp -f"
d22e8442 2194 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 2195 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 2196 FFSERVERLDFLAGS=""
287d3b13 2197 LIBSUF="_s.a"
d22e8442
DY
2198 SLIBPREF=""
2199 SLIBSUF=".dll"
2200 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2201 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
2202 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2203 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2204 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2205 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2206 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2207 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2208 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2209 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2210 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 2211 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 2212 enable dos_paths
d22e8442 2213 ;;
83993c1c
AM
2214 gnu/kfreebsd)
2215 ;;
34e82167 2216 gnu)
34e82167 2217 ;;
614d8911
MR
2218 none)
2219 ;;
7483e694 2220 *)
4f924f9a 2221 die "Unknown OS '$target_os'."
7483e694
DB
2222 ;;
2223esac
2224
13cb2187
AS
2225check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2226
c9d19248
MR
2227set_default $PATHS_LIST
2228
c597172e 2229add_extralibs $osextralibs
de6d9b64 2230
28d8e661
DB
2231# Combine FFLDFLAGS and the LDFLAGS environment variable.
2232LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 2233
320d060a 2234# we need to build at least one lib type
93b3c083 2235if ! enabled_any static shared; then
320d060a
DB
2236 cat <<EOF
2237At least one library type must be built.
2238Specify --enable-static to build the static libraries or --enable-shared to
2239build the shared libraries as well. To only build the shared libraries specify
2240--disable-static in addition to --enable-shared.
2241EOF
2242 exit 1;
2243fi
2244
abc4e572 2245disabled static && LIBNAME=""
2a320695 2246
2184c6f7 2247die_license_disabled() {
4c27207c 2248 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2249}
2250
2184c6f7
DB
2251die_license_disabled gpl libx264
2252die_license_disabled gpl libxvid
2253die_license_disabled gpl postproc
2254die_license_disabled gpl x11grab
2255
2f7ae63b 2256die_license_disabled nonfree libfaac
b2e3c528 2257
0b175caa
DB
2258die_license_disabled version3 libopencore_amrnb
2259die_license_disabled version3 libopencore_amrwb
2260
9cad0e4e 2261enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 2262
9eeed841 2263check_deps $ARCH_EXT_LIST
0f3cb305 2264
40617a6d 2265disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 2266
e276d9e8
MR
2267enable_pic() {
2268 enable pic
bce7b696
MR
2269 add_cppflags -DPIC
2270 add_cflags -fPIC
2271 add_asflags -fPIC
e276d9e8
MR
2272}
2273
2274enabled pic && enable_pic
bce7b696 2275
b4d96ba2
MR
2276check_cc <<EOF || die "Symbol mangling check failed."
2277int ff_extern;
2278EOF
8182dc34 2279sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
b4d96ba2
MR
2280extern_prefix=${sym%%ff_extern*}
2281
f65883c8
MR
2282check_cc <<EOF && enable inline_asm
2283void foo(void) { __asm__ volatile ("" ::); }
2284EOF
61d251db 2285
df5e3978
MR
2286_restrict=
2287for restrict_keyword in restrict __restrict__ __restrict; do
2288 check_cc <<EOF && _restrict=$restrict_keyword && break
2289void foo(char * $restrict_keyword p);
2290EOF
2291done
2292
2293check_cc <<EOF && enable attribute_packed
2294struct { int x; } __attribute__((packed)) x;
2295EOF
2296
dffb41b9
MR
2297check_cc <<EOF && enable attribute_may_alias
2298union { int x; } __attribute__((may_alias)) x;
2299EOF
2300
df5e3978
MR
2301check_cc <<EOF || die "endian test failed"
2302unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2303EOF
48fc536a 2304od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
df5e3978 2305
e939cedd
MR
2306if enabled alpha; then
2307
2308 check_cflags -mieee
2309
2310elif enabled arm; then
e45391bb 2311
50fa82e6
MR
2312 check_cflags -marm
2313
fa0912fe
MR
2314 check_ld <<EOF && enable vfp_args
2315__asm__ (".eabi_attribute 28, 1");
2316int main(void) { return 0; }
2317EOF
2318
2319 # We have to check if pld is a nop and disable it.
2320 check_asm pld '"pld [r0]"'
2321
2322 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2323 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2324 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2325 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2326 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2327 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
e45391bb 2328
e276d9e8
MR
2329 enabled_all armv6t2 shared !pic && enable_pic
2330
fa0912fe 2331elif enabled mips; then
e45391bb 2332
fa0912fe
MR
2333 check_asm loongson '"dmult.g $1, $2, $3"'
2334 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
e45391bb 2335
fa0912fe 2336elif enabled ppc; then
e45391bb 2337
e6a0c354
MR
2338 enable local_aligned_8 local_aligned_16
2339
fa0912fe
MR
2340 check_asm dcbzl '"dcbzl 0, 1"'
2341 check_asm ppc4xx '"maclhw r10, r11, r12"'
64de20d1 2342 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
2343
2344 # AltiVec flags: The FSF version of GCC differs from the Apple version
2345 if enabled altivec; then
2346 check_cflags -maltivec -mabi=altivec &&
2347 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2348 check_cflags -faltivec
2349
2350 # check if our compiler supports Motorola AltiVec C API
2351 check_cc <<EOF || disable altivec
2352$inc_altivec_h
2353int main(void) {
2354 vector signed int v1, v2, v3;
2355 v1 = vec_add(v2,v3);
2356 return 0;
2357}
2358EOF
2359
2360 # check if our compiler supports braces for vector declarations
2361 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2362$inc_altivec_h
2363int main (void) { (vector int) {1}; return 0; }
2364EOF
2365 fi
e45391bb 2366
fa0912fe 2367elif enabled sparc; then
e45391bb 2368
fa0912fe
MR
2369 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2370 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
e45391bb 2371
fa0912fe 2372elif enabled x86; then
e45391bb 2373
e6a0c354
MR
2374 enable local_aligned_8 local_aligned_16
2375
44965991
PI
2376 # check whether EBP is available on x86
2377 # As 'i' is stored on the stack, this program will crash
2378 # if the base pointer is used to access it because the
2379 # base pointer is cleared in the inline assembly code.
7dfef245 2380 check_exec_crash <<EOF && enable ebp_available
44965991 2381 volatile int i=0;
be449fca 2382 __asm__ volatile (
44965991
PI
2383 "xorl %%ebp, %%ebp"
2384 ::: "%ebp");
2385 return i;
44965991
PI
2386EOF
2387
f494213c 2388 # check whether EBX is available on x86
7cee5421
MR
2389 check_asm ebx_available '""::"b"(0)' &&
2390 check_asm ebx_available '"":::"%ebx"'
8e380710 2391
d3a4b4e0
DB
2392 # check whether more than 10 operands are supported
2393 check_cc <<EOF && enable ten_operands
2394int main(void) {
2395 int x=0;
2396 __asm__ volatile(
2397 ""
2398 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2399 );
2400 return 0;
2401}
2402EOF
2403
d7f0920b 2404 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 2405 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 2406 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
2407
2408 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 2409
d52481b9 2410 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d 2411 enabled x86_64 && append YASMFLAGS "-m amd64"
a34ebe60 2412 enabled pic && append YASMFLAGS "-DPIC"
5f36d94d 2413 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
304d586d
LM
2414 case "$objformat" in
2415 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
304d586d 2416 esac
31a0dcb2
MR
2417 if ! disabled yasm; then
2418 check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2419 warn "yasm not found, performance will suffer"
2420 fi
e45391bb 2421
669b5583
MR
2422 case "$cpu" in
2423 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2424 disable fast_clz
2425 ;;
2426 esac
2427
44965991
PI
2428fi
2429
a98bb16d
RP
2430if check_func dlopen; then
2431 ldl=
2432elif check_func dlopen -ldl; then
2433 ldl=-ldl
8bf5d58f
MN
2434fi
2435
75ecf149
DB
2436# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2437check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2438
7483e694 2439check_func fork
84882df6 2440check_func getaddrinfo $network_extralibs
7483e694
DB
2441check_func gethrtime
2442check_func getrusage
fc5607f8 2443check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
094c09bb 2444check_func inet_aton $network_extralibs
abfc8d05 2445check_func isatty
4ae40685 2446check_func ${malloc_prefix}memalign && enable memalign
7483e694 2447check_func mkstemp
4ae40685 2448check_func ${malloc_prefix}posix_memalign && enable posix_memalign
0104b608 2449check_func setrlimit
87958234 2450check_func strerror_r
b507ebd1 2451check_func_headers io.h setmode
e4673692 2452check_func_headers lzo/lzo1x.h lzo1x_999_compress
fc5607f8 2453check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2446d3d6 2454check_func_headers windows.h GetProcessTimes
7c5bfe7a 2455check_func_headers windows.h VirtualAlloc
6ffa87d3 2456
e16e49ac 2457check_header conio.h
a98bb16d 2458check_header dlfcn.h
92c6a099 2459check_header dxva2api.h
a98bb16d 2460check_header malloc.h
bf6ce82d 2461check_header poll.h
b58412f1 2462check_header sys/mman.h
b091aa44 2463check_header sys/resource.h
bf6ce82d 2464check_header sys/select.h
a98bb16d 2465check_header termios.h
272081b0
CEH
2466check_header vdpau/vdpau.h
2467check_header vdpau/vdpau_x11.h
68178ca9 2468check_header X11/extensions/XvMClib.h
a98bb16d 2469
9104cd51
RP
2470check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2471
89e053f8
MR
2472if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2473 enabled_any $need_memalign ; then
1f91cdce 2474 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 2475fi
e16e49ac 2476
a4fa192c 2477disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2478disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
2479
2480# check for some common methods of building with pthread support
2481# do this before the optional library checks as some of them require pthreads
0dbfc1db
MR
2482if ! disabled pthreads && ! enabled w32threads; then
2483 enable pthreads
9e7fd101
MR
2484 if check_func pthread_create; then
2485 :
2486 elif check_func pthread_create -pthread; then
2487 add_cflags -pthread
afc9aee2 2488 add_extralibs -pthread
9e7fd101
MR
2489 elif check_func pthread_create -pthreads; then
2490 add_cflags -pthreads
afc9aee2 2491 add_extralibs -pthreads
8d94f606
GT
2492 elif check_func pthread_create -lpthreadGC2; then
2493 add_extralibs -lpthreadGC2
9e7fd101 2494 elif ! check_lib pthread.h pthread_create -lpthread; then
0dbfc1db 2495 disable pthreads
9e7fd101 2496 fi
57bd82d4
MR
2497fi
2498
8eee7025 2499for thread in $THREADS_LIST; do
e5f94c2b 2500 if enabled $thread; then
3ae3b721
RP
2501 test -n "$thread_type" &&
2502 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2503 thread_type="$thread"
e5f94c2b
RP
2504 fi
2505done
2506
fdf88598 2507check_lib math.h sin -lm
edd43c95 2508disabled vaapi || check_lib va/va.h vaInitialize -lva
fdf88598 2509
645d2652
MR
2510check_mathfunc exp2
2511check_mathfunc exp2f
2512check_mathfunc llrint
07876e25 2513check_mathfunc llrintf
645d2652
MR
2514check_mathfunc log2
2515check_mathfunc log2f
2516check_mathfunc lrint
2517check_mathfunc lrintf
2518check_mathfunc round
2519check_mathfunc roundf
2520check_mathfunc truncf
f32adb22 2521
57bd82d4 2522# these are off by default, so fail if requested and not available
a1b3c5a3 2523enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
e3cc7d6f 2524enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2513b2b4
DB
2525 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2526 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
79fda097 2527enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5af41508 2528enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
2bfecf73 2529enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2530enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
0b175caa
DB
2531enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2532enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
3d6fac8c 2533enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3a9bc39e 2534enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
36718e51
DB
2535enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2536 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2537enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
c261a5d9 2538enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
7483e694 2539enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
ee0e9146
JZ
2540enabled libvpx && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2541 require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
60877ad9 2542enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
652d9d24
JGG
2543 { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2544 die "ERROR: libx264 version must be >= 0.98."; }
2bfecf73 2545enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2546enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2547
0b4a1821
AS
2548# libdc1394 check
2549if enabled libdc1394; then
2550 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2551 enable libdc1394_2; } ||
2552 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2553 enable libdc1394_1; } ||
2554 die "ERROR: No version of libdc1394 found "
2555fi
2556
6a1a892f 2557SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2558if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2559 sdl_cflags=$("${SDL_CONFIG}" --cflags)
b4f93564 2560 sdl_libs=$("${SDL_CONFIG}" --libs)
aa692d54
MR
2561 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2562 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2563 enable sdl &&
2564 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
c3f6b472 2565fi
57bd82d4 2566
2270b4b2 2567texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2568
73b46a95 2569if enabled network; then
96000432 2570 check_type "sys/types.h sys/socket.h" socklen_t
c0018613 2571 check_type netdb.h "struct addrinfo"
b4d68544
MS
2572 check_type netinet/in.h "struct ipv6_mreq"
2573 check_type netinet/in.h "struct sockaddr_in6"
ff6e82a9 2574 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3b2372bf 2575 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
73b46a95
RP
2576 # Prefer arpa/inet.h over winsock2
2577 if check_header arpa/inet.h ; then
2578 check_func closesocket
2579 elif check_header winsock2.h ; then
f4c13872
MS
2580 check_func_headers winsock2.h closesocket -lws2 && \
2581 network_extralibs="-lws2" || \
2582 { check_func_headers winsock2.h closesocket -lws2_32 && \
2583 network_extralibs="-lws2_32"; }
72be9e73 2584 check_type ws2tcpip.h socklen_t
c0018613 2585 check_type ws2tcpip.h "struct addrinfo"
b4d68544
MS
2586 check_type ws2tcpip.h "struct ipv6_mreq"
2587 check_type ws2tcpip.h "struct sockaddr_in6"
33a4dbdd 2588 check_type ws2tcpip.h "struct sockaddr_storage"
3b2372bf 2589 check_struct winsock2.h "struct sockaddr" sa_len
28c9f069
MK
2590 else
2591 disable network
73b46a95
RP
2592 fi
2593fi
2594
06e31011
RP
2595check_header linux/videodev.h
2596check_header linux/videodev2.h
1b6e8b73 2597check_header sys/videoio.h
47f38850 2598
27796dc3 2599check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
c2345207 2600
f8aa696f 2601# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2602{ check_header dev/bktr/ioctl_meteor.h &&
2603 check_header dev/bktr/ioctl_bt848.h; } ||
2604{ check_header machine/ioctl_meteor.h &&
2605 check_header machine/ioctl_bt848.h; } ||
2606{ check_header dev/video/meteor/ioctl_meteor.h &&
2607 check_header dev/video/bktr/ioctl_bt848.h; } ||
2608check_header dev/ic/bt8xx.h
f8aa696f 2609
c7682de0
RP
2610check_header sys/soundcard.h
2611check_header soundcard.h
deb29777 2612
b6f3d925 2613enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
35fd8122 2614
0e57fe17 2615enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 2616
56a059ac 2617enabled x11grab &&
f58f4ce1
GP
2618check_header X11/Xlib.h &&
2619check_header X11/extensions/XShm.h &&
0a045661 2620check_header X11/extensions/Xfixes.h &&
f58f4ce1 2621check_func XOpenDisplay -lX11 &&
781c1aa6
R
2622check_func XShmCreateImage -lX11 -lXext &&
2623check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
f58f4ce1 2624
598ef02b 2625if ! disabled vdpau && enabled vdpau_vdpau_h; then
deda2a4a
AC
2626check_cpp_condition \
2627 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
d1ebd4a9
AC
2628 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2629 disable vdpau; }
abf649c7 2630fi
deda2a4a 2631
95e561ec 2632enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
57bd82d4
MR
2633
2634# add some useful compiler flags if supported
2635check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2636check_cflags -Wall
2637check_cflags -Wno-switch
c07bd6a9
MN
2638check_cflags -Wdisabled-optimization
2639check_cflags -Wpointer-arith
2640check_cflags -Wredundant-decls
cc1fb623 2641check_cflags -Wno-pointer-sign
f4929996 2642check_cflags -Wcast-qual
9aceb3cf 2643check_cflags -Wwrite-strings
652a5bf6 2644check_cflags -Wtype-limits
764551c6 2645check_cflags -Wundef
fc298fd9 2646check_cflags -Wmissing-prototypes
5af4e0cc 2647enabled extra_warnings && check_cflags -Winline
cf9d24ad 2648
57bd82d4 2649# add some linker flags
5c0e9479 2650check_ldflags -Wl,--warn-common
8351d2ba
DB
2651check_ldflags -Wl,--as-needed
2652check_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 2653check_ldflags -Wl,-Bsymbolic
94a3401e 2654
a482e61b 2655echo "X{};" > $TMPV
b462d132 2656if test_ldflags -Wl,--version-script,$TMPV; then
a482e61b 2657 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
b462d132
MR
2658 check_cc <<EOF && enable symver_asm_label
2659void ff_foo(void) __asm__ ("av_foo@VERSION");
0884fadf 2660void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
b462d132
MR
2661EOF
2662 check_cc <<EOF && enable symver_gnu_asm
2663__asm__(".symver ff_foo,av_foo@VERSION");
2664void ff_foo(void) {}
2665EOF
2666fi
a482e61b 2667
bd2216e4 2668if enabled small; then
14ca9cd0 2669 add_cflags $size_cflags
8400d6b8
DB
2670 optimizations="small"
2671elif enabled optimizations; then
14ca9cd0 2672 add_cflags $speed_cflags
b05394a0
MR
2673else
2674 add_cflags $noopt_cflags
cddf3f45 2675fi
11fdbc44 2676check_cflags -fno-math-errno
b2eb2ff0 2677check_cflags -fno-signed-zeros
cddf3f45 2678
629687f6 2679if enabled icc; then
b1598b58
MR
2680 # Just warnings, no remarks
2681 check_cflags -w1
2682 # -wd: Disable following warnings
2683 # 144, 167, 556: -Wno-pointer-sign
2684 # 10006: ignoring unknown option -fno-signed-zeros
2685 # 10156: ignoring option '-W'; no argument required
dd4a03f7 2686 check_cflags -wd144,167,556,10006,10156
b1598b58
MR
2687 # 11030: Warning unknown option --as-needed
2688 # 10156: ignoring option '-export'; no argument required
2689 check_ldflags -wd10156,11030
2690 # Allow to compile with optimizations
2691 check_ldflags -march=$cpu
be2cf98a
CEH
2692 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2693 enable ebp_available
df442a8d
MR
2694elif enabled ccc; then
2695 # disable some annoying warnings
2696 add_cflags -msg_disable cvtu32to64
2697 add_cflags -msg_disable embedcomment
2698 add_cflags -msg_disable needconstext
2699 add_cflags -msg_disable nomainieee
2700 add_cflags -msg_disable ptrmismatch1
2701 add_cflags -msg_disable unreachcode
973859f5
MR
2702elif enabled gcc; then
2703 check_cflags -fno-tree-vectorize
62df111c 2704 check_cflags -Werror=implicit
de63bfec 2705 check_cflags -Werror=missing-prototypes
06da6943
DC
2706elif enabled clang; then
2707 check_cflags -Qunused-arguments
138132be
MR
2708elif enabled armcc; then
2709 # 2523: use of inline assembler is deprecated
2710 add_cflags -Wrvct,--diag_suppress=2523
976d7bf7 2711 add_cflags -Wrvct,--diag_suppress=1207
587d24ff
MR
2712elif enabled tms470; then
2713 add_cflags -pds=824 -pds=837
504a64b9
CEH
2714fi
2715
90be59ef 2716if enabled gprof; then
0f010b2f
DB
2717 add_cflags -p
2718 add_ldflags -p
1db54e20
DB
2719fi
2720
7483e694
DB
2721enabled_any $THREADS_LIST && enable threads
2722
2723check_deps $CONFIG_LIST \
b6bb00b0 2724 $CONFIG_EXTRA \
7483e694
DB
2725 $HAVE_LIST \
2726 $DECODER_LIST \
2727 $ENCODER_LIST \
5666fd73 2728 $HWACCEL_LIST \
7483e694
DB
2729 $PARSER_LIST \
2730 $BSF_LIST \
2731 $DEMUXER_LIST \
2732 $MUXER_LIST \
f7679c54 2733 $FILTER_LIST \
7483e694
DB
2734 $INDEV_LIST \
2735 $OUTDEV_LIST \
2736 $PROTOCOL_LIST \
f70f03f6 2737
3bfd582c 2738enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
c8a4ae00 2739
3e89171a 2740echo "install prefix $prefix"
f36958f8
DB
2741echo "source path $source_path"
2742echo "C compiler $cc"
f36958f8 2743echo "ARCH $arch ($cpu)"
ce8871c2
MR
2744if test "$build_suffix" != ""; then
2745 echo "build suffix $build_suffix"
eb94aca9 2746fi
ac63af34
DB
2747if test "$extra_version" != ""; then
2748 echo "version string suffix $extra_version"
2749fi
0db2ce77 2750echo "big-endian ${bigendian-no}"
e90f5b5a 2751echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 2752if enabled x86; then
af44e8e4 2753 echo "yasm ${yasm-no}"
0db2ce77 2754 echo "MMX enabled ${mmx-no}"
30e98e62 2755 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2756 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2757 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2758 echo "SSE enabled ${sse-no}"
30e98e62 2759 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2760 echo "CMOV enabled ${cmov-no}"
2761 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2762 echo "EBX available ${ebx_available-no}"
2763 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2764 echo "10 operands supported ${ten_operands-no}"
e41e8342 2765fi
5b6c2cbd 2766if enabled arm; then
0db2ce77
MR
2767 echo "ARMv5TE enabled ${armv5te-no}"
2768 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2769 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2770 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2771 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2772 echo "NEON enabled ${neon-no}"
eba9ae3c 2773fi
5b6c2cbd 2774if enabled mips; then
0db2ce77 2775 echo "MMI enabled ${mmi-no}"
e41e8342 2776fi
5b6c2cbd 2777if enabled ppc; then
0db2ce77 2778 echo "AltiVec enabled ${altivec-no}"
30e98e62 2779 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2780 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2781 echo "performance report ${powerpc_perf-no}"
2782fi
2783if enabled sparc; then
2784 echo "VIS enabled ${vis-no}"
e41e8342 2785fi
0db2ce77
MR
2786echo "gprof enabled ${gprof-no}"
2787echo "debug symbols ${debug-no}"
87a0fb62 2788echo "strip symbols ${stripping-no}"
8400d6b8 2789echo "optimizations ${optimizations-no}"
0db2ce77
MR
2790echo "static ${static-no}"
2791echo "shared ${shared-no}"
4a24ab64 2792echo "postprocessing support ${postproc-no}"
f7679c54 2793echo "new filter support ${avfilter-no}"
81124ba0 2794echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2795echo "network support ${network-no}"
0db2ce77
MR
2796echo "threading support ${thread_type-no}"
2797echo "SDL support ${sdl-no}"
0db2ce77
MR
2798echo "Sun medialib support ${mlib-no}"
2799echo "AVISynth enabled ${avisynth-no}"
f7b8bffe 2800echo "libdc1394 support ${libdc1394-no}"
690bfceb 2801echo "libdirac enabled ${libdirac-no}"
0db2ce77 2802echo "libfaac enabled ${libfaac-no}"
0db2ce77
MR
2803echo "libgsm enabled ${libgsm-no}"
2804echo "libmp3lame enabled ${libmp3lame-no}"
2805echo "libnut enabled ${libnut-no}"
0b175caa
DB
2806echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2807echo "libopencore-amrwb support ${libopencore_amrwb-no}"
9a77d59a 2808echo "libopenjpeg enabled ${libopenjpeg-no}"
0f943ce6 2809echo "librtmp enabled ${librtmp-no}"
f7cd9eed 2810echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2811echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2812echo "libtheora enabled ${libtheora-no}"
2813echo "libvorbis enabled ${libvorbis-no}"
8299a7f8 2814echo "libvpx enabled ${libvpx-no}"
d6bd62db
DB
2815echo "libx264 enabled ${libx264-no}"
2816echo "libxvid enabled ${libxvid-no}"
0db2ce77 2817echo "zlib enabled ${zlib-no}"
f402916e 2818echo "bzlib enabled ${bzlib-no}"
2c62e737 2819echo
de6d9b64 2820
5666fd73 2821for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2822 echo "Enabled ${type}s:"
f65c9da1 2823 eval list=\$$(toupper $type)_LIST
8138b9db 2824 for part in $list; do
f65c9da1
MR
2825 enabled $part && echo ${part%_*}
2826 done | sort | pr -3 -t
2827 echo
8138b9db
RP
2828done
2829
ba7a7039 2830license="LGPL version 2.1 or later"
ba321adb 2831if enabled nonfree; then
ba7a7039 2832 license="nonfree and unredistributable"
9cad0e4e
DB
2833elif enabled gplv3; then
2834 license="GPL version 3 or later"
2835elif enabled lgplv3; then
2836 license="LGPL version 3 or later"
ba321adb 2837elif enabled gpl; then
ba7a7039 2838 license="GPL version 2 or later"
ba321adb
JK
2839fi
2840
2841echo "License: $license"
ca5323af 2842
cf1392e9
DB
2843echo "Creating config.mak and config.h..."
2844
df642790
MR
2845# build tree in object directory if source path is different from current one
2846if enabled source_path_used; then
2847 DIRS="
2848 doc
2849 libavcodec
2850 libavcodec/$arch
2851 libavdevice
2852 libavfilter
2853 libavformat
2854 libavutil
2855 libavutil/$arch
2856 libpostproc
2857 libswscale
2858 libswscale/$arch
2859 tests
2860 tools
2861 "
2862 FILES="
2863 Makefile
2864 common.mak
2865 subdir.mak
2866 doc/texi2pod.pl
2867 libavcodec/Makefile
43f60eba 2868 libavcodec/${arch}/Makefile
df642790
MR
2869 libavdevice/Makefile
2870 libavfilter/Makefile
2871 libavformat/Makefile
2872 libavutil/Makefile
2873 libpostproc/Makefile
2874 libswscale/Makefile
2875 "
e0e335a0 2876 map 'mkdir -p $v' $DIRS;
43f60eba 2877 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
df642790
MR
2878fi
2879
ad212cc6
MR
2880enabled stripping || strip="echo skipping strip"
2881
173c983b
MR
2882cat > config.mak <<EOF
2883# Automatically generated by configure - do not modify!
2884ifndef FFMPEG_CONFIG_MAK
2885FFMPEG_CONFIG_MAK=1
2886FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2887prefix=$prefix
2888LIBDIR=\$(DESTDIR)$libdir
2889SHLIBDIR=\$(DESTDIR)$shlibdir
2890INCDIR=\$(DESTDIR)$incdir
2891BINDIR=\$(DESTDIR)$bindir
2892DATADIR=\$(DESTDIR)$datadir
2893MANDIR=\$(DESTDIR)$mandir
2894SRC_PATH="$source_path"
2895SRC_PATH_BARE=$source_path
2896BUILD_ROOT="$PWD"
2897ARCH=$arch
2898CC=$cc
2899AS=$as
2900LD=$ld
2901DEPCC=$dep_cc
2902YASM=$yasmexe
a4aea515 2903YASMDEP=$yasmexe
173c983b
MR
2904AR=$ar
2905RANLIB=$ranlib
4335125c 2906CP=cp -p
173c983b
MR
2907LN_S=$ln_s
2908STRIP=$strip
2909CPPFLAGS=$CPPFLAGS
2910CFLAGS=$CFLAGS
2911ASFLAGS=$ASFLAGS
2912CC_O=$CC_O
2913LDFLAGS=$LDFLAGS
2914FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2915SHFLAGS=$SHFLAGS
2916YASMFLAGS=$YASMFLAGS
2917BUILDSUF=$build_suffix
2918FULLNAME=$FULLNAME
2919LIBPREF=$LIBPREF
2920LIBSUF=$LIBSUF
2921LIBNAME=$LIBNAME
2922SLIBPREF=$SLIBPREF
2923SLIBSUF=$SLIBSUF
2924EXESUF=$EXESUF
2925EXTRA_VERSION=$extra_version
2926DEPFLAGS=$DEPFLAGS
2927CCDEP=$CCDEP
2928ASDEP=$ASDEP
2929CC_DEPFLAGS=$CC_DEPFLAGS
2930AS_DEPFLAGS=$AS_DEPFLAGS
2931HOSTCC=$host_cc
2932HOSTCFLAGS=$host_cflags
2933HOSTEXESUF=$HOSTEXESUF
2934HOSTLDFLAGS=$host_ldflags
2935HOSTLIBS=$host_libs
2936TARGET_EXEC=$target_exec
2937TARGET_PATH=$target_path
2938SDL_LIBS=$sdl_libs
2939SDL_CFLAGS=$sdl_cflags
2940LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2941EXTRALIBS=$extralibs
fd676deb 2942INSTALL=install
1afc4750
MR
2943LIBTARGET=${LIBTARGET}
2944SLIBNAME=${SLIBNAME}
2945SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2946SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2947SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2948SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2949SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2950SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2fad0977 2951SAMPLES=$samples
173c983b 2952EOF
5a872801 2953
719c8e00
MR
2954get_version(){
2955 name=$1
2956 file=$source_path/$2
147e7692
MR
2957 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2958 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2959 lcname=$(tolower $name)
2960 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2961 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2962}
2963
147e7692
MR
2964get_version LIBSWSCALE libswscale/swscale.h
2965get_version LIBPOSTPROC libpostproc/postprocess.h
2966get_version LIBAVCODEC libavcodec/avcodec.h
2967get_version LIBAVDEVICE libavdevice/avdevice.h
2968get_version LIBAVFORMAT libavformat/avformat.h
2969get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2970get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2971
173c983b
MR
2972cat > $TMPH <<EOF
2973/* Automatically generated by configure - do not modify! */
2974#ifndef FFMPEG_CONFIG_H
2975#define FFMPEG_CONFIG_H
2976#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
c1736936 2977#define FFMPEG_LICENSE "$(c_escape $license)"
173c983b
MR
2978#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2979#define CC_TYPE "$cc_type"
2980#define CC_VERSION $cc_version
2981#define restrict $_restrict
42719e20 2982#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
173c983b
MR
2983#define EXTERN_PREFIX "${extern_prefix}"
2984#define EXTERN_ASM ${extern_prefix}
2985EOF
523ef551 2986
4ae40685
MR
2987test -n "$malloc_prefix" &&
2988 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2989
523ef551 2990if enabled small || disabled optimizations; then
9a894c48 2991 echo "#undef av_always_inline" >> $TMPH
523ef551
DB
2992 echo "#define av_always_inline" >> $TMPH
2993fi
2994
3d907e22
MR
2995print_config ARCH_ $TMPH config.mak $ARCH_LIST
2996print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2997print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2998 $CONFIG_EXTRA \
7483e694
DB
2999 $DECODER_LIST \
3000 $ENCODER_LIST \
5666fd73 3001 $HWACCEL_LIST \
7483e694
DB
3002 $PARSER_LIST \
3003 $BSF_LIST \
3004 $DEMUXER_LIST \
3005 $MUXER_LIST \
f7679c54 3006 $FILTER_LIST \
7483e694
DB
3007 $PROTOCOL_LIST \
3008 $INDEV_LIST \
3009 $OUTDEV_LIST \
8ac17293 3010
9c05103f 3011echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
8c6d2da5 3012echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
9c05103f 3013
b7860763 3014# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
c34681df 3015cp_if_changed $TMPH config.h
3d204385 3016
a3e02a8c
MR
3017cat > $TMPH <<EOF
3018/* Generated by ffconf */
3019#ifndef AVUTIL_AVCONFIG_H
3020#define AVUTIL_AVCONFIG_H
3021EOF
3022
3023print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3024
3025echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3026
3027cp_if_changed $TMPH libavutil/avconfig.h
3028
7bfc8ae6
MR
3029test -n "$WARNINGS" && printf "\n$WARNINGS"
3030
d0674868 3031# build pkg-config files
def4272a 3032
d0674868
DB
3033pkgconfig_generate(){
3034name=$1
b0dfd108 3035shortname=${name#lib}${build_suffix}
d0674868
DB
3036comment=$2
3037version=$3
3038libs=$4
3039requires=$5
25cd5cb3 3040cat <<EOF > $name/$name.pc
3e89171a 3041prefix=$prefix
a94e666c 3042exec_prefix=\${prefix}
f2b7382c 3043libdir=$libdir
7622778e 3044includedir=$incdir
def4272a 3045
d0674868
DB
3046Name: $name
3047Description: $comment
3048Version: $version
8cd6b388 3049Requires: $(enabled shared || echo $requires)
5dcfe9f8 3050Requires.private: $(enabled shared && echo $requires)
def4272a 3051Conflicts:
8cd6b388 3052Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
12701f6e 3053Libs.private: $(enabled shared && echo $libs)
76a448ed 3054Cflags: -I\${includedir}
def4272a 3055EOF
25cd5cb3 3056cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
3057prefix=
3058exec_prefix=
46d1ff83 3059libdir=\${pcfiledir}
1d44d365 3060includedir=${source_path}
def4272a 3061
d0674868
DB
3062Name: $name
3063Description: $comment
3064Version: $version
3065Requires: $requires
def4272a 3066Conflicts:
12701f6e 3067Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
3068Cflags: -I\${includedir}
3069EOF
d0674868 3070}
def4272a 3071
e426941d 3072pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
3073pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3074pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3075pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 3076enabled avfilter &&
46983309 3077 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 3078enabled postproc &&
e426941d 3079 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 3080pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"