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