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