]> git.sesse.net Git - ffmpeg/blob - configure
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
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" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
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."
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
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Standard options:
63   --help                   print this message
64   --logfile=FILE           log tests and output to FILE [config.log]
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
74 Configuration 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
85   --disable-ffprobe        disable ffprobe build
86   --disable-ffserver       disable ffserver build
87   --disable-avdevice       disable libavdevice build
88   --disable-avcodec        disable libavcodec build
89   --disable-avformat       disable libavformat build
90   --disable-swresample     disable libswresample build
91   --disable-swscale        disable libswscale build
92   --disable-postproc       disable libpostproc build
93   --disable-avfilter       disable video filter support [no]
94   --disable-pthreads       disable pthreads [auto]
95   --disable-w32threads     disable Win32 threads [auto]
96   --disable-os2threads     disable OS/2 threads [auto]
97   --enable-x11grab         enable X11 grabbing [no]
98   --disable-network        disable network support [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
104   --disable-dct            disable DCT code
105   --disable-fft            disable FFT code
106   --disable-golomb         disable Golomb code
107   --disable-huffman        disable Huffman code
108   --disable-lpc            disable LPC code
109   --disable-mdct           disable MDCT code
110   --disable-rdft           disable RDFT code
111   --enable-vaapi           enable VAAPI code [autodetect]
112   --enable-vda             enable VDA code [autodetect]
113   --enable-vdpau           enable VDPAU code [autodetect]
114   --disable-dxva2          disable DXVA2 code
115   --disable-vda            disable VDA code
116   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
117   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
118   --disable-safe-bitstream-reader
119                            disable buffer boundary checking in bitreaders
120                            (faster, but may crash)
121   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
122   --disable-everything     disable all components listed below
123   --disable-encoder=NAME   disable encoder NAME
124   --enable-encoder=NAME    enable encoder NAME
125   --disable-encoders       disable all encoders
126   --disable-decoder=NAME   disable decoder NAME
127   --enable-decoder=NAME    enable decoder NAME
128   --disable-decoders       disable all decoders
129   --disable-hwaccel=NAME   disable hwaccel NAME
130   --enable-hwaccel=NAME    enable hwaccel NAME
131   --disable-hwaccels       disable all hwaccels
132   --disable-muxer=NAME     disable muxer NAME
133   --enable-muxer=NAME      enable muxer NAME
134   --disable-muxers         disable all muxers
135   --disable-demuxer=NAME   disable demuxer NAME
136   --enable-demuxer=NAME    enable demuxer NAME
137   --disable-demuxers       disable all demuxers
138   --enable-parser=NAME     enable parser NAME
139   --disable-parser=NAME    disable parser NAME
140   --disable-parsers        disable all parsers
141   --enable-bsf=NAME        enable bitstream filter NAME
142   --disable-bsf=NAME       disable bitstream filter NAME
143   --disable-bsfs           disable all bitstream filters
144   --enable-protocol=NAME   enable protocol NAME
145   --disable-protocol=NAME  disable protocol NAME
146   --disable-protocols      disable all protocols
147   --disable-indev=NAME     disable input device NAME
148   --disable-outdev=NAME    disable output device NAME
149   --disable-indevs         disable input devices
150   --disable-outdevs        disable output devices
151   --disable-devices        disable all devices
152   --enable-filter=NAME     enable filter NAME
153   --disable-filter=NAME    disable filter NAME
154   --disable-filters        disable all filters
155   --list-decoders          show all available decoders
156   --list-encoders          show all available encoders
157   --list-hwaccels          show all available hardware accelerators
158   --list-muxers            show all available muxers
159   --list-demuxers          show all available demuxers
160   --list-parsers           show all available parsers
161   --list-protocols         show all available protocols
162   --list-bsfs              show all available bitstream filters
163   --list-indevs            show all available input devices
164   --list-outdevs           show all available output devices
165   --list-filters           show all available filters
166
167 External library support:
168   --enable-avisynth        enable reading of AVISynth script files [no]
169   --enable-bzlib           enable bzlib [autodetect]
170   --enable-frei0r          enable frei0r video filtering
171   --enable-gnutls          enable gnutls [no]
172   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
173   --enable-libass          enable libass subtitles rendering [no]
174   --enable-libcelt         enable CELT decoding via libcelt [no]
175   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
176   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
177   --enable-libopencv       enable video filtering via libopencv [no]
178   --enable-libcdio         enable audio CD grabbing with libcdio
179   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
180                            and libraw1394 [no]
181   --enable-libdirac        enable Dirac support via libdirac [no]
182   --enable-libfaac         enable FAAC support via libfaac [no]
183   --enable-libfreetype     enable libfreetype [no]
184   --enable-libgsm          enable GSM support via libgsm [no]
185   --enable-libmodplug      enable ModPlug via libmodplug [no]
186   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
187   --enable-libnut          enable NUT (de)muxing via libnut,
188                            native (de)muxer exists [no]
189   --enable-libopenjpeg     enable JPEG 2000 encoding/decoding via OpenJPEG [no]
190   --enable-libpulse        enable Pulseaudio input via libpulse [no]
191   --enable-librtmp         enable RTMP[E] support via librtmp [no]
192   --enable-libschroedinger enable Dirac support via libschroedinger [no]
193   --enable-libspeex        enable Speex support via libspeex [no]
194   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
195   --enable-libtheora       enable Theora encoding via libtheora [no]
196   --enable-libutvideo      enable Ut Video decoding via libutvideo [no]
197   --enable-libv4l2         enable libv4l2/v4l-utils [no]
198   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
199   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
200   --enable-libvorbis       enable Vorbis encoding via libvorbis,
201                            native implementation exists [no]
202   --enable-libvpx          enable VP8 support via libvpx [no]
203   --enable-libx264         enable H.264 encoding via x264 [no]
204   --enable-libxavs         enable AVS encoding via xavs [no]
205   --enable-libxvid         enable Xvid encoding via xvidcore,
206                            native MPEG-4/Xvid encoder exists [no]
207   --enable-openal          enable OpenAL 1.1 capture support [no]
208   --enable-mlib            enable Sun medialib [no]
209   --enable-openssl         enable openssl [no]
210   --enable-zlib            enable zlib [autodetect]
211
212 Advanced options (experts only):
213   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
214   --enable-cross-compile   assume a cross-compiler is used
215   --sysroot=PATH           root of cross-build tree
216   --sysinclude=PATH        location of cross-build system headers
217   --target-os=OS           compiler targets OS [$target_os]
218   --target-exec=CMD        command to run executables on target
219   --target-path=DIR        path to view of build directory on target
220   --nm=NM                  use nm tool NM [$nm_default]
221   --ar=AR                  use archive tool AR [$ar_default]
222   --as=AS                  use assembler AS [$as_default]
223   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
224   --cc=CC                  use C compiler CC [$cc_default]
225   --cxx=CXX                use C compiler CXX [$cxx_default]
226   --ld=LD                  use linker LD [$ld_default]
227   --host-cc=HOSTCC         use host C compiler HOSTCC
228   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
229   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
230   --host-libs=HLIBS        use libs HLIBS when linking for host
231   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
232   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
233   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
234   --extra-libs=ELIBS       add ELIBS [$ELIBS]
235   --extra-version=STRING   version string suffix []
236   --build-suffix=SUFFIX    library name suffix []
237   --progs-suffix=SUFFIX    program name suffix []
238   --arch=ARCH              select architecture [$arch]
239   --cpu=CPU                select the minimum required CPU (affects
240                            instruction selection, may crash on older CPUs)
241   --disable-asm            disable all assembler optimizations
242   --disable-altivec        disable AltiVec optimizations
243   --disable-amd3dnow       disable 3DNow! optimizations
244   --disable-amd3dnowext    disable 3DNow! extended optimizations
245   --disable-mmx            disable MMX optimizations
246   --disable-mmx2           disable MMX2 optimizations
247   --disable-sse            disable SSE optimizations
248   --disable-ssse3          disable SSSE3 optimizations
249   --disable-avx            disable AVX optimizations
250   --disable-armv5te        disable armv5te optimizations
251   --disable-armv6          disable armv6 optimizations
252   --disable-armv6t2        disable armv6t2 optimizations
253   --disable-armvfp         disable ARM VFP optimizations
254   --disable-iwmmxt         disable iwmmxt optimizations
255   --disable-mmi            disable MMI optimizations
256   --disable-neon           disable NEON optimizations
257   --disable-vis            disable VIS optimizations
258   --disable-yasm           disable use of yasm assembler
259   --enable-pic             build position-independent code
260   --malloc-prefix=PFX      prefix malloc and related names with PFX
261   --enable-sram            allow use of on-chip SRAM
262   --disable-symver         disable symbol versioning
263   --optflags               override optimization-related compiler flags
264   --postproc-version=V     build libpostproc version V.
265                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
266
267 Developer options (useful when working on FFmpeg itself):
268   --enable-coverage        build with test coverage instrumentation
269   --disable-debug          disable debugging symbols
270   --enable-debug=LEVEL     set the debug level [$debuglevel]
271   --disable-optimizations  disable compiler optimizations
272   --enable-extra-warnings  enable more compiler warnings
273   --disable-stripping      disable stripping of executables and shared libraries
274   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
275                            leaks and errors, using the specified valgrind binary.
276                            Cannot be combined with --target-exec
277   --samples=PATH           location of test samples for FATE, if not set use
278                            \$FATE_SAMPLES at make invocation time.
279
280 NOTE: Object files are built at the place where configure is launched.
281 EOF
282   exit 0
283 }
284
285 quotes='""'
286
287 log(){
288     echo "$@" >> $logfile
289 }
290
291 log_file(){
292     log BEGIN $1
293     pr -n -t $1 >> $logfile
294     log END $1
295 }
296
297 echolog(){
298     log "$@"
299     echo "$@"
300 }
301
302 warn(){
303     log "WARNING: $*"
304     WARNINGS="${WARNINGS}WARNING: $*\n"
305 }
306
307 die(){
308     echolog "$@"
309     cat <<EOF
310
311 If you think configure made a mistake, make sure you are using the latest
312 version from Git.  If the latest version fails, report the problem to the
313 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
314 EOF
315     if disabled logging; then
316         cat <<EOF
317 Rerun configure with logging enabled (do not use --disable-logging), and
318 include the log this produces with your report.
319 EOF
320     else
321 cat <<EOF
322 Include the log file "$logfile" produced by configure as this will help
323 solving the problem.
324 EOF
325     fi
326     exit 1
327 }
328
329 # Avoid locale weirdness, besides we really just want to translate ASCII.
330 toupper(){
331     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
332 }
333
334 tolower(){
335     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
336 }
337
338 c_escape(){
339     echo "$*" | sed 's/["\\]/\\\0/g'
340 }
341
342 sh_quote(){
343     v=$(echo "$1" | sed "s/'/'\\\\''/g")
344     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
345     echo "$v"
346 }
347
348 cleanws(){
349     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
350 }
351
352 filter(){
353     pat=$1
354     shift
355     for v; do
356         eval "case $v in $pat) echo $v ;; esac"
357     done
358 }
359
360 filter_out(){
361     pat=$1
362     shift
363     for v; do
364         eval "case $v in $pat) ;; *) echo $v ;; esac"
365     done
366 }
367
368 map(){
369     m=$1
370     shift
371     for v; do eval $m; done
372 }
373
374 set_all(){
375     value=$1
376     shift
377     for var in $*; do
378         eval $var=$value
379     done
380 }
381
382 set_weak(){
383     value=$1
384     shift
385     for var; do
386         eval : \${$var:=$value}
387     done
388 }
389
390 set_safe(){
391     var=$1
392     shift
393     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
394 }
395
396 get_safe(){
397     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
398 }
399
400 pushvar(){
401     for var in $*; do
402         eval level=\${${var}_level:=0}
403         eval ${var}_${level}="\$$var"
404         eval ${var}_level=$(($level+1))
405     done
406 }
407
408 popvar(){
409     for var in $*; do
410         eval level=\${${var}_level:-0}
411         test $level = 0 && continue
412         eval level=$(($level-1))
413         eval $var="\${${var}_${level}}"
414         eval ${var}_level=$level
415         eval unset ${var}_${level}
416     done
417 }
418
419 enable(){
420     set_all yes $*
421 }
422
423 disable(){
424     set_all no $*
425 }
426
427 enable_weak(){
428     set_weak yes $*
429 }
430
431 disable_weak(){
432     set_weak no $*
433 }
434
435 enable_safe(){
436     for var; do
437         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
438     done
439 }
440
441 disable_safe(){
442     for var; do
443         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
444     done
445 }
446
447 do_enable_deep(){
448     for var; do
449         enabled $var && continue
450         eval sel="\$${var}_select"
451         eval sgs="\$${var}_suggest"
452         pushvar var sgs
453         enable_deep $sel
454         popvar sgs
455         enable_deep_weak $sgs
456         popvar var
457     done
458 }
459
460 enable_deep(){
461     do_enable_deep $*
462     enable $*
463 }
464
465 enable_deep_weak(){
466     do_enable_deep $*
467     enable_weak $*
468 }
469
470 enabled(){
471     test "${1#!}" = "$1" && op== || op=!=
472     eval test "x\$${1#!}" $op "xyes"
473 }
474
475 disabled(){
476     test "${1#!}" = "$1" && op== || op=!=
477     eval test "x\$${1#!}" $op "xno"
478 }
479
480 enabled_all(){
481     for opt; do
482         enabled $opt || return 1
483     done
484 }
485
486 disabled_all(){
487     for opt; do
488         disabled $opt || return 1
489     done
490 }
491
492 enabled_any(){
493     for opt; do
494         enabled $opt && return 0
495     done
496 }
497
498 disabled_any(){
499     for opt; do
500         disabled $opt && return 0
501     done
502     return 1
503 }
504
505 set_default(){
506     for opt; do
507         eval : \${$opt:=\$${opt}_default}
508     done
509 }
510
511 is_in(){
512     value=$1
513     shift
514     for var in $*; do
515         [ $var = $value ] && return 0
516     done
517     return 1
518 }
519
520 check_deps(){
521     for cfg; do
522         cfg="${cfg#!}"
523         enabled ${cfg}_checking && die "Circular dependency for $cfg."
524         disabled ${cfg}_checking && continue
525         enable ${cfg}_checking
526
527         eval dep_all="\$${cfg}_deps"
528         eval dep_any="\$${cfg}_deps_any"
529         eval dep_sel="\$${cfg}_select"
530         eval dep_sgs="\$${cfg}_suggest"
531         eval dep_ifa="\$${cfg}_if"
532         eval dep_ifn="\$${cfg}_if_any"
533
534         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
535         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
536         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
537
538         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
539         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
540         enabled_all  $dep_all || disable $cfg
541         enabled_any  $dep_any || disable $cfg
542         disabled_any $dep_sel && disable $cfg
543
544         if enabled $cfg; then
545             eval dep_extralibs="\$${cfg}_extralibs"
546             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
547             enable_deep $dep_sel
548             enable_deep_weak $dep_sgs
549         fi
550
551         disable ${cfg}_checking
552     done
553 }
554
555 print_config_h(){
556     enabled $1 && v=1 || v=0
557     echo "#define $2 $v"
558 }
559
560 print_config_mak(){
561     enabled $1 && v= || v=!
562     echo "$v$2=yes"
563 }
564
565 print_config_asm(){
566     enabled $1 && v=1 || v=0
567     echo "%define $2 $v"
568 }
569
570 print_config(){
571     pfx=$1
572     files=$2
573     shift 2
574     for cfg; do
575         ucname="$(toupper $cfg)"
576         for f in $files; do
577             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
578         done
579     done
580 }
581
582 print_enabled(){
583     test "$1" = -n && end=" " && shift || end="\n"
584     suf=$1
585     shift
586     for v; do
587         enabled $v && printf "%s$end" ${v%$suf};
588     done
589 }
590
591 append(){
592     var=$1
593     shift
594     eval "$var=\"\$$var $*\""
595 }
596
597 prepend(){
598     var=$1
599     shift
600     eval "$var=\"$* \$$var\""
601 }
602
603 add_cppflags(){
604     append CPPFLAGS $($filter_cppflags "$@")
605 }
606
607 add_cflags(){
608     append CFLAGS $($filter_cflags "$@")
609 }
610
611 add_cxxflags(){
612     append CXXFLAGS $($filter_cflags "$@")
613 }
614
615 add_asflags(){
616     append ASFLAGS $($filter_asflags "$@")
617 }
618
619 add_ldflags(){
620     append LDFLAGS "$@"
621 }
622
623 add_extralibs(){
624     prepend extralibs "$@"
625 }
626
627 check_cmd(){
628     log "$@"
629     "$@" >> $logfile 2>&1
630 }
631
632 check_cc(){
633     log check_cc "$@"
634     cat > $TMPC
635     log_file $TMPC
636     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
637 }
638
639 check_cxx(){
640     log check_cxx "$@"
641     cat > $TMPCPP
642     log_file $TMPCPP
643     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" -c -o $TMPO $TMPCPP
644 }
645
646 check_cpp(){
647     log check_cpp "$@"
648     cat > $TMPC
649     log_file $TMPC
650     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
651 }
652
653 check_as(){
654     log check_as "$@"
655     cat > $TMPC
656     log_file $TMPC
657     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
658 }
659
660 check_asm(){
661     log check_asm "$@"
662     name="$1"
663     code="$2"
664     shift 2
665     disable $name
666     check_as "$@" <<EOF && enable $name
667 void foo(void){ __asm__ volatile($code); }
668 EOF
669 }
670
671 check_yasm(){
672     log check_yasm "$@"
673     echo "$1" > $TMPS
674     log_file $TMPS
675     shift 1
676     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
677 }
678
679 check_ld(){
680     log check_ld "$@"
681     type=$1
682     shift 1
683     flags=''
684     libs=''
685     for f; do
686         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
687     done
688     check_$type $($filter_cflags $flags) || return
689     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
690 }
691
692 check_cppflags(){
693     log check_cppflags "$@"
694     set -- $($filter_cppflags "$@")
695     check_cc "$@" <<EOF && append CPPFLAGS "$@"
696 int x;
697 EOF
698 }
699
700 check_cflags(){
701     log check_cflags "$@"
702     set -- $($filter_cflags "$@")
703     check_cc "$@" <<EOF && append CFLAGS "$@"
704 int x;
705 EOF
706 }
707
708 check_cxxflags(){
709     log check_cxxflags "$@"
710     set -- $($filter_cflags "$@")
711     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
712 int x;
713 EOF
714 }
715
716 test_ldflags(){
717     log test_ldflags "$@"
718     check_ld "cc" "$@" <<EOF
719 int main(void){ return 0; }
720 EOF
721 }
722
723 check_ldflags(){
724     log check_ldflags "$@"
725     test_ldflags "$@" && add_ldflags "$@"
726 }
727
728 check_header(){
729     log check_header "$@"
730     header=$1
731     shift
732     disable_safe $header
733     check_cpp "$@" <<EOF && enable_safe $header
734 #include <$header>
735 int x;
736 EOF
737 }
738
739 check_func(){
740     log check_func "$@"
741     func=$1
742     shift
743     disable $func
744     check_ld "cc" "$@" <<EOF && enable $func
745 extern int $func();
746 int main(void){ $func(); }
747 EOF
748 }
749
750 check_mathfunc(){
751     log check_mathfunc "$@"
752     func=$1
753     shift
754     disable $func
755     check_ld "cc" "$@" <<EOF && enable $func
756 #include <math.h>
757 float foo(float f) { return $func(f); }
758 int main(void){ return (int) foo; }
759 EOF
760 }
761
762 check_func_headers(){
763     log check_func_headers "$@"
764     headers=$1
765     funcs=$2
766     shift 2
767     {
768         for hdr in $headers; do
769             echo "#include <$hdr>"
770         done
771         for func in $funcs; do
772             echo "long check_$func(void) { return (long) $func; }"
773         done
774         echo "int main(void) { return 0; }"
775     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
776 }
777
778 check_class_headers_cpp(){
779     log check_class_headers_cpp "$@"
780     headers=$1
781     classes=$2
782     shift 2
783     {
784         for hdr in $headers; do
785             echo "#include <$hdr>"
786         done
787         echo "int main(void) { "
788         i=1
789         for class in $classes; do
790             echo "$class obj$i;"
791             i=$(expr $i + 1)
792         done
793         echo "return 0; }"
794     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
795 }
796
797 check_cpp_condition(){
798     log check_cpp_condition "$@"
799     header=$1
800     condition=$2
801     shift 2
802     check_cpp $($filter_cppflags "$@") <<EOF
803 #include <$header>
804 #if !($condition)
805 #error "unsatisfied condition: $condition"
806 #endif
807 EOF
808 }
809
810 check_lib(){
811     log check_lib "$@"
812     header="$1"
813     func="$2"
814     shift 2
815     check_header $header && check_func $func "$@" && add_extralibs "$@"
816 }
817
818 check_lib2(){
819     log check_lib2 "$@"
820     headers="$1"
821     funcs="$2"
822     shift 2
823     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
824 }
825
826 check_lib_cpp(){
827     log check_lib_cpp "$@"
828     headers="$1"
829     classes="$2"
830     shift 2
831     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
832 }
833
834 check_pkg_config(){
835     log check_pkg_config "$@"
836     pkg="$1"
837     headers="$2"
838     funcs="$3"
839     shift 3
840     $pkg_config --exists $pkg 2>/dev/null || return
841     pkg_cflags=$($pkg_config --cflags $pkg)
842     pkg_libs=$($pkg_config --libs $pkg)
843     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
844         set_safe ${pkg}_cflags $pkg_cflags   &&
845         set_safe ${pkg}_libs   $pkg_libs
846 }
847
848 check_exec(){
849     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
850 }
851
852 check_exec_crash(){
853     code=$(cat)
854
855     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
856     # are safe but may not be available everywhere.  Thus we use
857     # raise(SIGTERM) instead.  The check is run in a subshell so we
858     # can redirect the "Terminated" message from the shell.  SIGBUS
859     # is not defined by standard C so it is used conditionally.
860
861     (check_exec "$@") >> $logfile 2>&1 <<EOF
862 #include <signal.h>
863 static void sighandler(int sig){
864     raise(SIGTERM);
865 }
866 int func(void){
867     $code
868 }
869 int main(void){
870     signal(SIGILL, sighandler);
871     signal(SIGFPE, sighandler);
872     signal(SIGSEGV, sighandler);
873 #ifdef SIGBUS
874     signal(SIGBUS, sighandler);
875 #endif
876     return func();
877 }
878 EOF
879 }
880
881 check_type(){
882     log check_type "$@"
883     headers=$1
884     type=$2
885     shift 2
886     disable_safe "$type"
887     incs=""
888     for hdr in $headers; do
889         incs="$incs
890 #include <$hdr>"
891     done
892     check_cc "$@" <<EOF && enable_safe "$type"
893 $incs
894 $type v;
895 EOF
896 }
897
898 check_struct(){
899     log check_type "$@"
900     headers=$1
901     struct=$2
902     member=$3
903     shift 3
904     disable_safe "${struct}_${member}"
905     incs=""
906     for hdr in $headers; do
907         incs="$incs
908 #include <$hdr>"
909     done
910     check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
911 $incs
912 const void *p = &(($struct *)0)->$member;
913 EOF
914 }
915
916 require(){
917     name="$1"
918     header="$2"
919     func="$3"
920     shift 3
921     check_lib $header $func "$@" || die "ERROR: $name not found"
922 }
923
924 require2(){
925     name="$1"
926     headers="$2"
927     func="$3"
928     shift 3
929     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
930 }
931
932 require_cpp(){
933     name="$1"
934     headers="$2"
935     classes="$3"
936     shift 3
937     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
938 }
939
940 require_pkg_config(){
941     pkg="$1"
942     check_pkg_config "$@" || die "ERROR: $pkg not found"
943     add_cflags    $(get_safe ${pkg}_cflags)
944     add_extralibs $(get_safe ${pkg}_libs)
945 }
946
947 check_host_cc(){
948     log check_host_cc "$@"
949     cat > $TMPC
950     log_file $TMPC
951     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
952 }
953
954 check_host_cflags(){
955     log check_host_cflags "$@"
956     check_host_cc "$@" <<EOF && append host_cflags "$@"
957 int x;
958 EOF
959 }
960
961 apply(){
962     file=$1
963     shift
964     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
965 }
966
967 cp_if_changed(){
968     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
969     mkdir -p "$(dirname $2)"
970     cp -f "$1" "$2"
971 }
972
973 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
974 # system-dependent things.
975
976 COMPONENT_LIST="
977     bsfs
978     decoders
979     demuxers
980     encoders
981     filters
982     hwaccels
983     indevs
984     muxers
985     outdevs
986     parsers
987     protocols
988 "
989
990 PROGRAM_LIST="
991     ffplay
992     ffprobe
993     ffserver
994     ffmpeg
995 "
996
997 CONFIG_LIST="
998     $COMPONENT_LIST
999     $PROGRAM_LIST
1000     avplay
1001     avprobe
1002     avserver
1003     aandct
1004     ac3dsp
1005     avcodec
1006     avdevice
1007     avfilter
1008     avformat
1009     avisynth
1010     bzlib
1011     crystalhd
1012     dct
1013     doc
1014     dwt
1015     dxva2
1016     fastdiv
1017     fft
1018     frei0r
1019     gnutls
1020     golomb
1021     gpl
1022     gray
1023     h264chroma
1024     h264dsp
1025     h264pred
1026     hardcoded_tables
1027     huffman
1028     libaacplus
1029     libass
1030     libcdio
1031     libcelt
1032     libdc1394
1033     libdirac
1034     libfaac
1035     libfreetype
1036     libgsm
1037     libmodplug
1038     libmp3lame
1039     libnut
1040     libopencore_amrnb
1041     libopencore_amrwb
1042     libopencv
1043     libopenjpeg
1044     libpulse
1045     librtmp
1046     libschroedinger
1047     libspeex
1048     libstagefright_h264
1049     libtheora
1050     libutvideo
1051     libv4l2
1052     libvo_aacenc
1053     libvo_amrwbenc
1054     libvorbis
1055     libvpx
1056     libx264
1057     libxavs
1058     libxvid
1059     lpc
1060     lsp
1061     mdct
1062     memalign_hack
1063     mlib
1064     mpegaudiodsp
1065     network
1066     nonfree
1067     openal
1068     openssl
1069     pic
1070     postproc
1071     rdft
1072     rtpdec
1073     runtime_cpudetect
1074     safe_bitstream_reader
1075     shared
1076     sinewin
1077     small
1078     sram
1079     static
1080     swresample
1081     swscale
1082     swscale_alpha
1083     thumb
1084     vaapi
1085     vda
1086     vdpau
1087     version3
1088     x11grab
1089     zlib
1090 "
1091
1092 THREADS_LIST='
1093     pthreads
1094     w32threads
1095     os2threads
1096 '
1097
1098 ARCH_LIST='
1099     alpha
1100     arm
1101     avr32
1102     avr32_ap
1103     avr32_uc
1104     bfin
1105     ia64
1106     m68k
1107     mips
1108     mips64
1109     parisc
1110     ppc
1111     ppc64
1112     s390
1113     sh4
1114     sparc
1115     sparc64
1116     tomi
1117     x86
1118     x86_32
1119     x86_64
1120 '
1121
1122 ARCH_EXT_LIST='
1123     altivec
1124     amd3dnow
1125     amd3dnowext
1126     armv5te
1127     armv6
1128     armv6t2
1129     armvfp
1130     avx
1131     iwmmxt
1132     mmi
1133     mmx
1134     mmx2
1135     neon
1136     ppc4xx
1137     sse
1138     ssse3
1139     vfpv3
1140     vis
1141 '
1142
1143 HAVE_LIST_PUB='
1144     bigendian
1145     fast_unaligned
1146 '
1147
1148 HAVE_LIST="
1149     $ARCH_EXT_LIST
1150     $HAVE_LIST_PUB
1151     $THREADS_LIST
1152     aligned_stack
1153     alsa_asoundlib_h
1154     altivec_h
1155     arpa_inet_h
1156     asm_mod_y
1157     asm_types_h
1158     attribute_may_alias
1159     attribute_packed
1160     cbrtf
1161     closesocket
1162     cmov
1163     dcbzl
1164     dev_bktr_ioctl_bt848_h
1165     dev_bktr_ioctl_meteor_h
1166     dev_ic_bt8xx_h
1167     dev_video_bktr_ioctl_bt848_h
1168     dev_video_meteor_ioctl_meteor_h
1169     dlfcn_h
1170     dlopen
1171     dos_paths
1172     ebp_available
1173     ebx_available
1174     exp2
1175     exp2f
1176     fast_64bit
1177     fast_clz
1178     fast_cmov
1179     fcntl
1180     fork
1181     getaddrinfo
1182     gethrtime
1183     GetProcessAffinityMask
1184     GetProcessMemoryInfo
1185     GetProcessTimes
1186     getrusage
1187     gnu_as
1188     ibm_asm
1189     inet_aton
1190     inline_asm
1191     isatty
1192     kbhit
1193     ldbrx
1194     libdc1394_1
1195     libdc1394_2
1196     llrint
1197     llrintf
1198     local_aligned_16
1199     local_aligned_8
1200     localtime_r
1201     log2
1202     log2f
1203     loongson
1204     lrint
1205     lrintf
1206     lzo1x_999_compress
1207     machine_ioctl_bt848_h
1208     machine_ioctl_meteor_h
1209     makeinfo
1210     malloc_h
1211     MapViewOfFile
1212     memalign
1213     mkstemp
1214     mmap
1215     PeekNamedPipe
1216     poll_h
1217     posix_memalign
1218     round
1219     roundf
1220     sched_getaffinity
1221     sdl
1222     sdl_video_size
1223     setmode
1224     setrlimit
1225     sndio_h
1226     socklen_t
1227     soundcard_h
1228     strerror_r
1229     strptime
1230     struct_addrinfo
1231     struct_ipv6_mreq
1232     struct_rusage_ru_maxrss
1233     struct_sockaddr_in6
1234     struct_sockaddr_sa_len
1235     struct_sockaddr_storage
1236     struct_v4l2_frmivalenum_discrete
1237     symver
1238     symver_asm_label
1239     symver_gnu_asm
1240     sysconf
1241     sysctl
1242     sys_mman_h
1243     sys_param_h
1244     sys_resource_h
1245     sys_select_h
1246     sys_soundcard_h
1247     sys_videoio_h
1248     termios_h
1249     threads
1250     trunc
1251     truncf
1252     vfp_args
1253     VirtualAlloc
1254     winsock2_h
1255     xform_asm
1256     xmm_clobbers
1257     yasm
1258 "
1259
1260 # options emitted with CONFIG_ prefix but not available on command line
1261 CONFIG_EXTRA="
1262     avutil
1263     gplv3
1264     lgplv3
1265 "
1266
1267 CMDLINE_SELECT="
1268     $ARCH_EXT_LIST
1269     $CONFIG_LIST
1270     $THREADS_LIST
1271     asm
1272     coverage
1273     cross_compile
1274     debug
1275     extra_warnings
1276     logging
1277     optimizations
1278     stripping
1279     symver
1280     yasm
1281 "
1282
1283 PATHS_LIST='
1284     bindir
1285     datadir
1286     incdir
1287     libdir
1288     mandir
1289     prefix
1290     shlibdir
1291 '
1292
1293 CMDLINE_SET="
1294     $PATHS_LIST
1295     ar
1296     arch
1297     as
1298     build_suffix
1299     progs_suffix
1300     cc
1301     cpu
1302     cross_prefix
1303     cxx
1304     dep_cc
1305     extra_version
1306     host_cc
1307     host_cflags
1308     host_ldflags
1309     host_libs
1310     host_os
1311     install
1312     ld
1313     logfile
1314     malloc_prefix
1315     nm
1316     optflags
1317     pkg_config
1318     samples
1319     strip
1320     sysinclude
1321     sysroot
1322     target_exec
1323     target_os
1324     target_path
1325     postproc_version
1326     valgrind
1327     yasmexe
1328 "
1329
1330 CMDLINE_APPEND="
1331     extra_cflags
1332     extra_cxxflags
1333 "
1334
1335 # code dependency declarations
1336
1337 # architecture extensions
1338
1339 armv5te_deps="arm"
1340 armv6_deps="arm"
1341 armv6t2_deps="arm"
1342 armvfp_deps="arm"
1343 iwmmxt_deps="arm"
1344 neon_deps="arm"
1345 vfpv3_deps="armvfp"
1346
1347 mmi_deps="mips"
1348
1349 altivec_deps="ppc"
1350 ppc4xx_deps="ppc"
1351
1352 vis_deps="sparc"
1353
1354 x86_64_suggest="cmov fast_cmov"
1355 amd3dnow_deps="mmx"
1356 amd3dnowext_deps="amd3dnow"
1357 mmx_deps="x86"
1358 mmx2_deps="mmx"
1359 sse_deps="mmx"
1360 ssse3_deps="sse"
1361 avx_deps="ssse3"
1362
1363 aligned_stack_if_any="ppc x86"
1364 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1365 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1366 fast_unaligned_if_any="armv6 ppc x86"
1367
1368 inline_asm_deps="!tms470"
1369 need_memalign="altivec neon sse"
1370
1371 symver_if_any="symver_asm_label symver_gnu_asm"
1372
1373 # subsystems
1374 dct_select="rdft"
1375 mdct_select="fft"
1376 rdft_select="fft"
1377 mpegaudiodsp_select="dct"
1378
1379 # decoders / encoders / hardware accelerators
1380 aac_decoder_select="mdct sinewin"
1381 aac_encoder_select="mdct sinewin"
1382 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1383 ac3_decoder_select="mdct ac3dsp ac3_parser"
1384 ac3_encoder_select="mdct ac3dsp"
1385 ac3_fixed_encoder_select="mdct ac3dsp"
1386 alac_encoder_select="lpc"
1387 amrnb_decoder_select="lsp"
1388 amrwb_decoder_select="lsp"
1389 atrac1_decoder_select="mdct sinewin"
1390 atrac3_decoder_select="mdct"
1391 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1392 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1393 cavs_decoder_select="golomb"
1394 cook_decoder_select="mdct sinewin"
1395 cscd_decoder_suggest="zlib"
1396 dca_decoder_select="mdct"
1397 dnxhd_encoder_select="aandct"
1398 dxa_decoder_select="zlib"
1399 eac3_decoder_select="ac3_decoder"
1400 eac3_encoder_select="mdct ac3dsp"
1401 eamad_decoder_select="aandct"
1402 eatgq_decoder_select="aandct"
1403 eatqi_decoder_select="aandct"
1404 ffv1_decoder_select="golomb"
1405 flac_decoder_select="golomb"
1406 flac_encoder_select="golomb lpc"
1407 flashsv_decoder_select="zlib"
1408 flashsv_encoder_select="zlib"
1409 flashsv2_encoder_select="zlib"
1410 flashsv2_decoder_select="zlib"
1411 flv_decoder_select="h263_decoder"
1412 flv_encoder_select="h263_encoder"
1413 fraps_decoder_select="huffman"
1414 h261_encoder_select="aandct"
1415 h263_decoder_select="h263_parser"
1416 h263_encoder_select="aandct"
1417 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1418 h263i_decoder_select="h263_decoder"
1419 h263p_encoder_select="h263_encoder"
1420 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1421 h264_decoder_select="golomb h264chroma h264dsp h264pred"
1422 h264_dxva2_hwaccel_deps="dxva2api_h"
1423 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1424 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1425 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1426 h264_vda_hwaccel_select="vda h264_decoder"
1427 h264_vdpau_decoder_select="vdpau h264_decoder"
1428 imc_decoder_select="fft mdct sinewin"
1429 jpegls_decoder_select="golomb"
1430 jpegls_encoder_select="golomb"
1431 ljpeg_encoder_select="aandct"
1432 loco_decoder_select="golomb"
1433 mjpeg_encoder_select="aandct"
1434 mlp_decoder_select="mlp_parser"
1435 mp1_decoder_select="mpegaudiodsp"
1436 mp1float_decoder_select="mpegaudiodsp"
1437 mp2_decoder_select="mpegaudiodsp"
1438 mp2float_decoder_select="mpegaudiodsp"
1439 mp3_decoder_select="mpegaudiodsp"
1440 mp3adu_decoder_select="mpegaudiodsp"
1441 mp3adufloat_decoder_select="mpegaudiodsp"
1442 mp3float_decoder_select="mpegaudiodsp"
1443 mp3on4_decoder_select="mpegaudiodsp"
1444 mp3on4float_decoder_select="mpegaudiodsp"
1445 mpc7_decoder_select="mpegaudiodsp"
1446 mpc8_decoder_select="mpegaudiodsp"
1447 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1448 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1449 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1450 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1451 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1452 mpeg1video_encoder_select="aandct"
1453 mpeg2_crystalhd_decoder_select="crystalhd"
1454 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1455 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1456 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1457 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1458 mpeg2video_encoder_select="aandct"
1459 mpeg4_crystalhd_decoder_select="crystalhd"
1460 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1461 mpeg4_encoder_select="h263_encoder"
1462 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1463 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1464 msmpeg4_crystalhd_decoder_select="crystalhd"
1465 msmpeg4v1_decoder_select="h263_decoder"
1466 msmpeg4v1_encoder_select="h263_encoder"
1467 msmpeg4v2_decoder_select="h263_decoder"
1468 msmpeg4v2_encoder_select="h263_encoder"
1469 msmpeg4v3_decoder_select="h263_decoder"
1470 msmpeg4v3_encoder_select="h263_encoder"
1471 nellymoser_decoder_select="mdct sinewin"
1472 nellymoser_encoder_select="mdct sinewin"
1473 png_decoder_select="zlib"
1474 png_encoder_select="zlib"
1475 qcelp_decoder_select="lsp"
1476 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1477 ra_144_encoder_select="lpc"
1478 rv10_decoder_select="h263_decoder"
1479 rv10_encoder_select="h263_encoder"
1480 rv20_decoder_select="h263_decoder"
1481 rv20_encoder_select="h263_encoder"
1482 rv30_decoder_select="golomb h264chroma h264pred"
1483 rv40_decoder_select="golomb h264chroma h264pred"
1484 shorten_decoder_select="golomb"
1485 sipr_decoder_select="lsp"
1486 snow_decoder_select="dwt"
1487 snow_encoder_select="aandct dwt"
1488 sonic_decoder_select="golomb"
1489 sonic_encoder_select="golomb"
1490 sonic_ls_encoder_select="golomb"
1491 svq1_encoder_select="aandct"
1492 svq3_decoder_select="golomb h264chroma h264dsp h264pred"
1493 svq3_decoder_suggest="zlib"
1494 theora_decoder_select="vp3_decoder"
1495 tiff_decoder_suggest="zlib"
1496 tiff_encoder_suggest="zlib"
1497 truehd_decoder_select="mlp_decoder"
1498 tscc_decoder_select="zlib"
1499 twinvq_decoder_select="mdct lsp sinewin"
1500 vc1_crystalhd_decoder_select="crystalhd"
1501 vc1_decoder_select="h263_decoder h264chroma"
1502 vc1_dxva2_hwaccel_deps="dxva2api_h"
1503 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1504 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1505 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1506 vc1image_decoder_select="vc1_decoder"
1507 vorbis_decoder_select="mdct"
1508 vorbis_encoder_select="mdct"
1509 vp6_decoder_select="huffman"
1510 vp6a_decoder_select="vp6_decoder"
1511 vp6f_decoder_select="vp6_decoder"
1512 vp8_decoder_select="h264pred"
1513 wmapro_decoder_select="mdct sinewin"
1514 wmav1_decoder_select="mdct sinewin"
1515 wmav1_encoder_select="mdct sinewin"
1516 wmav2_decoder_select="mdct sinewin"
1517 wmav2_encoder_select="mdct sinewin"
1518 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1519 wmv1_decoder_select="h263_decoder"
1520 wmv1_encoder_select="h263_encoder"
1521 wmv2_decoder_select="h263_decoder"
1522 wmv2_encoder_select="h263_encoder"
1523 wmv3_decoder_select="vc1_decoder"
1524 wmv3_crystalhd_decoder_select="crystalhd"
1525 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1526 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1527 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1528 wmv3image_decoder_select="wmv3_decoder"
1529 zlib_decoder_select="zlib"
1530 zlib_encoder_select="zlib"
1531 zmbv_decoder_select="zlib"
1532 zmbv_encoder_select="zlib"
1533
1534 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1535 vaapi_deps="va_va_h"
1536 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1537 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1538
1539 # parsers
1540 h264_parser_select="golomb h264chroma h264dsp h264pred"
1541
1542 # external libraries
1543 libaacplus_encoder_deps="libaacplus"
1544 libcelt_decoder_deps="libcelt"
1545 libdirac_decoder_deps="libdirac !libschroedinger"
1546 libdirac_encoder_deps="libdirac"
1547 libfaac_encoder_deps="libfaac"
1548 libgsm_decoder_deps="libgsm"
1549 libgsm_encoder_deps="libgsm"
1550 libgsm_ms_decoder_deps="libgsm"
1551 libgsm_ms_encoder_deps="libgsm"
1552 libmodplug_demuxer_deps="libmodplug"
1553 libmp3lame_encoder_deps="libmp3lame"
1554 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1555 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1556 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1557 libopenjpeg_decoder_deps="libopenjpeg"
1558 libopenjpeg_encoder_deps="libopenjpeg"
1559 libschroedinger_decoder_deps="libschroedinger"
1560 libschroedinger_encoder_deps="libschroedinger"
1561 libspeex_decoder_deps="libspeex"
1562 libspeex_encoder_deps="libspeex"
1563 libstagefright_h264_decoder_deps="libstagefright_h264"
1564 libtheora_encoder_deps="libtheora"
1565 libvo_aacenc_encoder_deps="libvo_aacenc"
1566 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1567 libvorbis_encoder_deps="libvorbis"
1568 libvpx_decoder_deps="libvpx"
1569 libvpx_encoder_deps="libvpx"
1570 libx264_encoder_deps="libx264"
1571 libx264rgb_encoder_deps="libx264"
1572 libxavs_encoder_deps="libxavs"
1573 libxvid_encoder_deps="libxvid"
1574 libutvideo_decoder_deps="libutvideo gpl"
1575
1576 # demuxers / muxers
1577 ac3_demuxer_select="ac3_parser"
1578 asf_stream_muxer_select="asf_muxer"
1579 avisynth_demuxer_deps="avisynth"
1580 dirac_demuxer_select="dirac_parser"
1581 eac3_demuxer_select="ac3_parser"
1582 flac_demuxer_select="flac_parser"
1583 ipod_muxer_select="mov_muxer"
1584 libnut_demuxer_deps="libnut"
1585 libnut_muxer_deps="libnut"
1586 matroska_audio_muxer_select="matroska_muxer"
1587 matroska_demuxer_suggest="zlib bzlib"
1588 mov_demuxer_suggest="zlib"
1589 mp3_demuxer_select="mpegaudio_parser"
1590 mp4_muxer_select="mov_muxer"
1591 mpegtsraw_demuxer_select="mpegts_demuxer"
1592 mxf_d10_muxer_select="mxf_muxer"
1593 ogg_demuxer_select="golomb"
1594 psp_muxer_select="mov_muxer"
1595 rtp_demuxer_select="sdp_demuxer"
1596 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1597 rtsp_demuxer_select="http_protocol rtpdec"
1598 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1599 sap_demuxer_select="sdp_demuxer"
1600 sap_muxer_select="rtp_muxer rtp_protocol"
1601 sdp_demuxer_select="rtpdec"
1602 spdif_muxer_select="aac_parser"
1603 tg2_muxer_select="mov_muxer"
1604 tgp_muxer_select="mov_muxer"
1605 w64_demuxer_deps="wav_demuxer"
1606
1607 # indevs / outdevs
1608 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1609 alsa_outdev_deps="alsa_asoundlib_h"
1610 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1611 dshow_indev_deps="IBaseFilter"
1612 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1613 dv1394_indev_deps="dv1394 dv_demuxer"
1614 fbdev_indev_deps="linux_fb_h"
1615 jack_indev_deps="jack_jack_h sem_timedwait"
1616 lavfi_indev_deps="avfilter"
1617 libcdio_indev_deps="libcdio"
1618 libdc1394_indev_deps="libdc1394"
1619 libv4l2_indev_deps="libv4l2"
1620 openal_indev_deps="openal"
1621 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1622 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1623 pulse_indev_deps="libpulse"
1624 sdl_outdev_deps="sdl"
1625 sndio_indev_deps="sndio_h"
1626 sndio_outdev_deps="sndio_h"
1627 v4l_indev_deps="linux_videodev_h"
1628 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1629 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1630 vfwcap_indev_extralibs="-lavicap32"
1631 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1632 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1633
1634 # protocols
1635 gopher_protocol_deps="network"
1636 httpproxy_protocol_deps="network"
1637 httpproxy_protocol_select="tcp_protocol"
1638 http_protocol_deps="network"
1639 http_protocol_select="tcp_protocol"
1640 https_protocol_select="tls_protocol"
1641 mmsh_protocol_select="http_protocol"
1642 mmst_protocol_deps="network"
1643 rtmp_protocol_select="tcp_protocol"
1644 rtp_protocol_select="udp_protocol"
1645 tcp_protocol_deps="network"
1646 tls_protocol_deps_any="openssl gnutls"
1647 tls_protocol_select="tcp_protocol"
1648 udp_protocol_deps="network"
1649
1650 # filters
1651 amovie_filter_deps="avcodec avformat"
1652 ass_filter_deps="libass"
1653 blackframe_filter_deps="gpl"
1654 boxblur_filter_deps="gpl"
1655 cropdetect_filter_deps="gpl"
1656 delogo_filter_deps="gpl"
1657 drawtext_filter_deps="libfreetype"
1658 frei0r_filter_deps="frei0r dlopen"
1659 frei0r_src_filter_deps="frei0r dlopen"
1660 hqdn3d_filter_deps="gpl"
1661 movie_filter_deps="avcodec avformat"
1662 mp_filter_deps="gpl avcodec"
1663 mptestsrc_filter_deps="gpl"
1664 negate_filter_deps="lut_filter"
1665 ocv_filter_deps="libopencv"
1666 pan_filter_deps="swresample"
1667 scale_filter_deps="swscale"
1668 tinterlace_filter_deps="gpl"
1669 yadif_filter_deps="gpl"
1670
1671 # libraries
1672 avdevice_deps="avcodec avformat"
1673 avformat_deps="avcodec"
1674 postproc_deps="gpl"
1675
1676 # programs
1677 ffplay_deps="avcodec avformat swscale sdl"
1678 ffplay_select="buffersink_filter rdft"
1679 ffprobe_deps="avcodec avformat"
1680 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1681 ffserver_extralibs='$ldl'
1682 ffmpeg_deps="avcodec avformat swscale swresample"
1683 ffmpeg_select="buffersink_filter"
1684
1685 doc_deps="texi2html"
1686
1687 # tests
1688
1689 test_deps(){
1690     suf1=$1
1691     suf2=$2
1692     shift 2
1693     for v; do
1694         dep=${v%=*}
1695         tests=${v#*=}
1696         for name in ${tests}; do
1697             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1698         done
1699     done
1700 }
1701
1702 mxf_d10_test_deps="avfilter"
1703 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1704
1705 test_deps _encoder _decoder                                             \
1706     adpcm_ima_qt                                                        \
1707     adpcm_ima_wav                                                       \
1708     adpcm_ms                                                            \
1709     adpcm_swf                                                           \
1710     adpcm_yamaha=adpcm_yam                                              \
1711     alac                                                                \
1712     asv1                                                                \
1713     asv2                                                                \
1714     bmp                                                                 \
1715     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1716     dvvideo="dv dv_411 dv50"                                            \
1717     ffv1                                                                \
1718     flac                                                                \
1719     flashsv                                                             \
1720     flv                                                                 \
1721     adpcm_g726=g726                                                     \
1722     gif                                                                 \
1723     h261                                                                \
1724     h263="h263 h263p"                                                   \
1725     huffyuv                                                             \
1726     jpegls                                                              \
1727     mjpeg="jpg mjpeg ljpeg"                                             \
1728     mp2                                                                 \
1729     mpeg1video="mpeg mpeg1b"                                            \
1730     mpeg2video="mpeg2 mpeg2_422 mpeg2_idct_int mpeg2_ilace mpeg2_ivlc_qprd" \
1731     mpeg2video="mpeg2thread mpeg2thread_ilace"                          \
1732     mpeg4="mpeg4 mpeg4_adap mpeg4_qpel mpeg4_qprd mpeg4adv mpeg4nr"     \
1733     mpeg4="mpeg4thread error rc"                                        \
1734     msmpeg4v3=msmpeg4                                                   \
1735     msmpeg4v2                                                           \
1736     pbm=pbmpipe                                                         \
1737     pcx                                                                 \
1738     pgm="pgm pgmpipe"                                                   \
1739     png                                                                 \
1740     ppm="ppm ppmpipe"                                                   \
1741     rawvideo="rgb yuv"                                                  \
1742     roq                                                                 \
1743     rv10                                                                \
1744     rv20                                                                \
1745     sgi                                                                 \
1746     snow="snow snowll"                                                  \
1747     svq1                                                                \
1748     targa=tga                                                           \
1749     tiff                                                                \
1750     wmav1                                                               \
1751     wmav2                                                               \
1752     wmv1                                                                \
1753     wmv2                                                                \
1754
1755 test_deps _muxer _demuxer                                               \
1756     aiff                                                                \
1757     pcm_alaw=alaw                                                       \
1758     asf                                                                 \
1759     au                                                                  \
1760     avi                                                                 \
1761     dv=dv_fmt                                                           \
1762     ffm                                                                 \
1763     flv=flv_fmt                                                         \
1764     gxf                                                                 \
1765     matroska=mkv                                                        \
1766     mmf                                                                 \
1767     mov                                                                 \
1768     pcm_mulaw=mulaw                                                     \
1769     mxf="mxf mxf_d10"                                                   \
1770     nut                                                                 \
1771     ogg                                                                 \
1772     rawvideo=pixfmt                                                     \
1773     rm                                                                  \
1774     swf                                                                 \
1775     mpegts=ts                                                           \
1776     voc                                                                 \
1777     wav                                                                 \
1778     yuv4mpegpipe=yuv4mpeg                                               \
1779
1780 ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1781 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1782
1783 # default parameters
1784
1785 logfile="config.log"
1786
1787 # installation paths
1788 prefix_default="/usr/local"
1789 bindir_default='${prefix}/bin'
1790 datadir_default='${prefix}/share/ffmpeg'
1791 incdir_default='${prefix}/include'
1792 libdir_default='${prefix}/lib'
1793 mandir_default='${prefix}/share/man'
1794 shlibdir_default="$libdir_default"
1795 postproc_version_default="current"
1796
1797 # toolchain
1798 ar_default="ar"
1799 cc_default="gcc"
1800 cxx_default="g++"
1801 cc_version=\"unknown\"
1802 host_cc_default="gcc"
1803 install="install"
1804 ln_s="ln -sf"
1805 nm_default="nm"
1806 objformat="elf"
1807 pkg_config_default=pkg-config
1808 ranlib="ranlib"
1809 strip_default="strip"
1810 yasmexe_default="yasm"
1811
1812 nm_opts='-g'
1813 nogas=":"
1814
1815 # machine
1816 arch_default=$(uname -m)
1817 cpu="generic"
1818
1819 # OS
1820 target_os_default=$(tolower $(uname -s))
1821 host_os=$target_os_default
1822
1823 # alternative libpostproc version
1824 ALT_PP_VER_MAJOR=51
1825 ALT_PP_VER_MINOR=2
1826 ALT_PP_VER_MICRO=101
1827 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1828
1829 # configurable options
1830 enable $PROGRAM_LIST
1831
1832 enable avcodec
1833 enable avdevice
1834 enable avfilter
1835 enable avformat
1836 enable avutil
1837 enable postproc
1838 enable stripping
1839 enable swresample
1840 enable swscale
1841
1842 enable asm
1843 enable debug
1844 enable doc
1845 enable fastdiv
1846 enable network
1847 enable optimizations
1848 enable safe_bitstream_reader
1849 enable static
1850 enable swscale_alpha
1851
1852 # build settings
1853 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1854 FFSERVERLDFLAGS=-Wl,-E
1855 LIBPREF="lib"
1856 LIBSUF=".a"
1857 FULLNAME='$(NAME)$(BUILDSUF)'
1858 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1859 SLIBPREF="lib"
1860 SLIBSUF=".so"
1861 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1862 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1863 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1864 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1865 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1866 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1867
1868 AS_O='-o $@'
1869 CC_O='-o $@'
1870 CXX_O='-o $@'
1871
1872 host_cflags='-D_ISOC99_SOURCE -O3 -g'
1873 host_libs='-lm'
1874
1875 target_path='$(CURDIR)'
1876
1877 # since the object filename is not given with the -MM flag, the compiler
1878 # is only able to print the basename, and we must add the path ourselves
1879 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1880 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1881
1882 # find source path
1883 if test -f configure; then
1884     source_path=.
1885 else
1886     source_path=$(cd $(dirname "$0"); pwd)
1887     echo "$source_path" | grep -q '[[:blank:]]' &&
1888         die "Out of tree builds are impossible with whitespace in source path."
1889     test -e "$source_path/config.h" &&
1890         die "Out of tree builds are impossible with config.h in source dir."
1891 fi
1892
1893 for v in "$@"; do
1894     r=${v#*=}
1895     l=${v%"$r"}
1896     r=$(sh_quote "$r")
1897     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1898 done
1899
1900 find_things(){
1901     thing=$1
1902     pattern=$2
1903     file=$source_path/$3
1904     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1905 }
1906
1907 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1908 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1909 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1910 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1911 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1912 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1913 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1914 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1915 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1916 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1917 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1918
1919 ALL_COMPONENTS="
1920     $BSF_LIST
1921     $DECODER_LIST
1922     $DEMUXER_LIST
1923     $ENCODER_LIST
1924     $FILTER_LIST
1925     $HWACCEL_LIST
1926     $INDEV_LIST
1927     $MUXER_LIST
1928     $OUTDEV_LIST
1929     $PARSER_LIST
1930     $PROTOCOL_LIST
1931 "
1932
1933 find_tests(){
1934     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1935 }
1936
1937 ACODEC_TESTS=$(find_tests acodec)
1938 VCODEC_TESTS=$(find_tests vsynth1)
1939 LAVF_TESTS=$(find_tests lavf)
1940 LAVFI_TESTS=$(find_tests lavfi)
1941 SEEK_TESTS=$(find_tests seek seek_)
1942
1943 ALL_TESTS="$ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1944
1945 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1946
1947 for n in $COMPONENT_LIST; do
1948     v=$(toupper ${n%s})_LIST
1949     eval enable \$$v
1950     eval ${n}_if_any="\$$v"
1951 done
1952
1953 enable $ARCH_EXT_LIST $ALL_TESTS
1954
1955 die_unknown(){
1956     echo "Unknown option \"$1\"."
1957     echo "See $0 --help for available options."
1958     exit 1
1959 }
1960
1961 show_list() {
1962     suffix=_$1
1963     shift
1964     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1965     exit 0
1966 }
1967
1968 for opt do
1969     optval="${opt#*=}"
1970     case "$opt" in
1971     --extra-ldflags=*) add_ldflags $optval
1972     ;;
1973     --extra-libs=*) add_extralibs $optval
1974     ;;
1975     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1976     ;;
1977     --enable-debug=*) debuglevel="$optval"
1978     ;;
1979     --disable-everything)
1980     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1981     ;;
1982     --enable-*=*|--disable-*=*)
1983     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1984     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1985     eval list=\$$(toupper $thing)_LIST
1986     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1987     $action $(filter "$name" $list)
1988     ;;
1989     --enable-?*|--disable-?*)
1990     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1991     if is_in $option $COMPONENT_LIST; then
1992         test $action = disable && action=unset
1993         eval $action \$$(toupper ${option%s})_LIST
1994     elif is_in $option $CMDLINE_SELECT; then
1995         $action $option
1996     else
1997         die_unknown $opt
1998     fi
1999     ;;
2000     --list-*)
2001         NAME="${opt#--list-}"
2002         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2003         NAME=${NAME%s}
2004         eval show_list $NAME \$$(toupper $NAME)_LIST
2005     ;;
2006     --help|-h) show_help
2007     ;;
2008     *)
2009     optname="${opt%%=*}"
2010     optname="${optname#--}"
2011     optname=$(echo "$optname" | sed 's/-/_/g')
2012     if is_in $optname $CMDLINE_SET; then
2013         eval $optname='$optval'
2014     elif is_in $optname $CMDLINE_APPEND; then
2015         append $optname "$optval"
2016     else
2017          die_unknown $opt
2018     fi
2019     ;;
2020     esac
2021 done
2022
2023 disabled logging && logfile=/dev/null
2024
2025 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2026 set >> $logfile
2027
2028 test -n "$cross_prefix" && enable cross_compile
2029
2030 if enabled cross_compile; then
2031     test -n "$arch" && test -n "$target_os" ||
2032         die "Must specify target arch and OS when cross-compiling"
2033 fi
2034
2035 set_default arch target_os postproc_version
2036
2037 # Check if we should build alternative libpostproc version instead of current
2038 if   test "$postproc_version" = $ALT_PP_VER; then
2039   LIBPOSTPROC_VERSION=$ALT_PP_VER
2040   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2041   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2042   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2043 elif test "$postproc_version" != current; then
2044   die "Invalid argument to --postproc-version. See --help output."
2045 fi
2046
2047 ar_default="${cross_prefix}${ar_default}"
2048 cc_default="${cross_prefix}${cc_default}"
2049 cxx_default="${cross_prefix}${cxx_default}"
2050 nm_default="${cross_prefix}${nm_default}"
2051 pkg_config_default="${cross_prefix}${pkg_config_default}"
2052 ranlib="${cross_prefix}${ranlib}"
2053 strip_default="${cross_prefix}${strip_default}"
2054
2055 sysinclude_default="${sysroot}/usr/include"
2056
2057 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2058 enabled cross_compile || host_cc_default=$cc
2059 set_default host_cc
2060
2061 if ! $pkg_config --version >/dev/null 2>&1; then
2062     warn "$pkg_config not found, library detection may fail."
2063     pkg_config=false
2064 fi
2065
2066 exesuf() {
2067     case $1 in
2068         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2069     esac
2070 }
2071
2072 EXESUF=$(exesuf $target_os)
2073 HOSTEXESUF=$(exesuf $host_os)
2074
2075 # set temporary file name
2076 : ${TMPDIR:=$TEMPDIR}
2077 : ${TMPDIR:=$TMP}
2078 : ${TMPDIR:=/tmp}
2079
2080 if ! check_cmd mktemp -u XXXXXX; then
2081     # simple replacement for missing mktemp
2082     # NOT SAFE FOR GENERAL USE
2083     mktemp(){
2084         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2085     }
2086 fi
2087
2088 tmpfile(){
2089     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2090         (set -C; exec > $tmp) 2>/dev/null ||
2091         die "Unable to create temporary file in $TMPDIR."
2092     append TMPFILES $tmp
2093     eval $1=$tmp
2094 }
2095
2096 trap 'rm -f -- $TMPFILES' EXIT
2097
2098 tmpfile TMPASM .asm
2099 tmpfile TMPC   .c
2100 tmpfile TMPCPP .cpp
2101 tmpfile TMPE   $EXESUF
2102 tmpfile TMPH   .h
2103 tmpfile TMPO   .o
2104 tmpfile TMPS   .S
2105 tmpfile TMPSH  .sh
2106 tmpfile TMPV   .ver
2107
2108 unset -f mktemp
2109
2110 chmod +x $TMPE
2111
2112 # make sure we can execute files in $TMPDIR
2113 cat > $TMPSH 2>> $logfile <<EOF
2114 #! /bin/sh
2115 EOF
2116 chmod +x $TMPSH >> $logfile 2>&1
2117 if ! $TMPSH >> $logfile 2>&1; then
2118     cat <<EOF
2119 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2120 variable to another directory and make sure that it is not mounted noexec.
2121 EOF
2122     die "Sanity test failed."
2123 fi
2124
2125 filter_asflags=echo
2126 filter_cflags=echo
2127 filter_cppflags=echo
2128
2129 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2130     cc_type=llvm_gcc
2131     cc_version=__VERSION__
2132     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
2133     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
2134     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2135     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2136     speed_cflags='-O3'
2137     size_cflags='-Os'
2138 elif $cc -v 2>&1 | grep -qi ^gcc; then
2139     cc_type=gcc
2140     cc_version=__VERSION__
2141     gcc_version=$($cc --version | head -n1)
2142     gcc_basever=$($cc -dumpversion)
2143     gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2144     gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2145     cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2146     if ! $cc -dumpversion | grep -q '^2\.'; then
2147         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2148         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2149     fi
2150     speed_cflags='-O3'
2151     size_cflags='-Os'
2152 elif $cc --version 2>/dev/null | grep -q Intel; then
2153     cc_type=icc
2154     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
2155     cc_ident=$($cc --version | head -n1)
2156     icc_version=$($cc -dumpversion)
2157     CC_DEPFLAGS='-MMD'
2158     AS_DEPFLAGS='-MMD'
2159     speed_cflags='-O3'
2160     size_cflags='-Os'
2161     noopt_cflags='-O1'
2162 elif $cc -v 2>&1 | grep -q xlc; then
2163     cc_type=xlc
2164     cc_version="AV_STRINGIFY(__IBMC__)"
2165     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
2166     speed_cflags='-O5'
2167     size_cflags='-O5 -qcompact'
2168 elif $cc -V 2>/dev/null | grep -q Compaq; then
2169     cc_type=ccc
2170     cc_version="AV_STRINGIFY(__DECC_VER)"
2171     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
2172     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
2173     debuglevel=3
2174     add_ldflags -Wl,-z,now # calls to libots crash without this
2175     speed_cflags='-fast'
2176     size_cflags='-O1'
2177 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2178     test -d "$sysroot" || die "No valid sysroot specified."
2179     cc_type=armcc
2180     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
2181     cc_ident=$($cc --vsn | head -n1)
2182     armcc_conf="$PWD/armcc.conf"
2183     $cc --arm_linux_configure                 \
2184         --arm_linux_config_file="$armcc_conf" \
2185         --configure_sysroot="$sysroot"        \
2186         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2187         die "Error creating armcc configuration file."
2188     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2189     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
2190     as_default="${cross_prefix}gcc"
2191     CC_DEPFLAGS='-MMD'
2192     AS_DEPFLAGS='-MMD'
2193     speed_cflags='-O3'
2194     size_cflags='-Os'
2195     filter_asflags="filter_out -W${armcc_opt}*"
2196 elif $cc -version 2>/dev/null | grep -q TMS470; then
2197     cc_type=tms470
2198     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
2199     cc_ident=$($cc -version | head -n1 | tr -s ' ')
2200     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
2201     CC_O='-fr=$(@D)'
2202     as_default="${cross_prefix}gcc"
2203     ld_default="${cross_prefix}gcc"
2204     TMPO=$(basename $TMPC .c).o
2205     append TMPFILES $TMPO
2206     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2207     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2208     AS_DEPFLAGS='-MMD'
2209     speed_cflags='-O3 -mf=5'
2210     size_cflags='-O3 -mf=2'
2211     filter_cflags=tms470_flags
2212     tms470_flags(){
2213         for flag; do
2214             case $flag in
2215                 -march=*|-mcpu=*)
2216                     case "${flag#*=}" in
2217                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
2218                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
2219                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
2220                         armv6*|arm11*)          echo -mv=6   ;;
2221                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2222                                                 echo -mv=5e  ;;
2223                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2224                     esac
2225                     ;;
2226                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2227                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
2228                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2229                 -msoft-float)   echo --float_support=vfplib       ;;
2230                 -O[0-3]|-mf=*)  echo $flag                        ;;
2231                 -g)             echo -g -mn                       ;;
2232                 -pds=*)         echo $flag                        ;;
2233             esac
2234         done
2235     }
2236 elif $cc -v 2>&1 | grep -q clang; then
2237     cc_type=clang
2238     $cc -dM -E $TMPC | grep -q __clang_version__ &&
2239         cc_version=__clang_version__ || cc_version=__VERSION__
2240     cc_ident=$($cc --version | head -n1)
2241     CC_DEPFLAGS='-MMD'
2242     AS_DEPFLAGS='-MMD'
2243     speed_cflags='-O3'
2244     size_cflags='-Os'
2245 elif $cc -V 2>&1 | grep -q Sun; then
2246     cc_type=suncc
2247     cc_version="AV_STRINGIFY(__SUNPRO_C)"
2248     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2249     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2250     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2251     add_ldflags -xc99
2252     speed_cflags='-O5'
2253     size_cflags='-O5 -xspace'
2254     filter_cflags=suncc_flags
2255     suncc_flags(){
2256         for flag; do
2257             case $flag in
2258                 -march=*|-mcpu=*)
2259                     case "${flag#*=}" in
2260                         native)                   echo -xtarget=native       ;;
2261                         v9|niagara)               echo -xarch=sparc          ;;
2262                         ultrasparc)               echo -xarch=sparcvis       ;;
2263                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2264                         i586|pentium)             echo -xchip=pentium        ;;
2265                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2266                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2267                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2268                         pentium4*)          echo -xtarget=pentium4           ;;
2269                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2270                         *-sse3)             echo -xarch=sse3                 ;;
2271                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
2272                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2273                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2274                         k8|opteron|athlon64|athlon-fx)
2275                                                   echo -xarch=sse2a          ;;
2276                         athlon*)                  echo -xarch=pentium_proa   ;;
2277                     esac
2278                     ;;
2279                 -std=c99)             echo -xc99              ;;
2280                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
2281                 -fPIC)                echo -KPIC -xcode=pic32 ;;
2282                 -W*,*)                echo $flag              ;;
2283                 -f*-*|-W*)                                    ;;
2284                 *)                    echo $flag              ;;
2285             esac
2286         done
2287     }
2288 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2289     cc_type=pathscale
2290     cc_version=__PATHSCALE__
2291     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2292     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2293     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2294     speed_cflags='-O2'
2295     size_cflags='-Os'
2296     filter_cflags='filter_out -Wdisabled-optimization'
2297 elif $cc -v 2>&1 | grep -q Open64; then
2298     cc_type=open64
2299     cc_version=__OPEN64__
2300     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2301     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2302     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2303     speed_cflags='-O2'
2304     size_cflags='-Os'
2305     filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2306 fi
2307
2308 test -n "$cc_type" && enable $cc_type ||
2309     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2310
2311 : ${as_default:=$cc}
2312 : ${dep_cc_default:=$cc}
2313 : ${ld_default:=$cc}
2314 set_default ar as dep_cc ld
2315
2316 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2317 test -n "$CXX_DEPFLAGS" || CXXDEP=$DEPEND_CMD
2318 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2319
2320 add_cflags $extra_cflags
2321 add_cxxflags $extra_cxxflags
2322 add_asflags $extra_cflags
2323
2324 if test -n "$sysroot"; then
2325     case "$cc_type" in
2326         gcc|llvm_gcc|clang)
2327             add_cppflags --sysroot="$sysroot"
2328             add_ldflags --sysroot="$sysroot"
2329         ;;
2330         tms470)
2331             add_cppflags -I"$sysinclude"
2332             add_ldflags  --sysroot="$sysroot"
2333         ;;
2334     esac
2335 fi
2336
2337 if test "$cpu" = host; then
2338     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2339
2340     case "$cc_type" in
2341         gcc|llvm_gcc)
2342             check_native(){
2343                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2344                 sed -n "/cc1.*$1=/{
2345                             s/.*$1=\\([^ ]*\\).*/\\1/
2346                             p
2347                             q
2348                         }" $TMPE
2349             }
2350             cpu=$(check_native -march || check_native -mcpu)
2351         ;;
2352     esac
2353
2354     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2355 fi
2356
2357 # Deal with common $arch aliases
2358 case "$arch" in
2359     arm*|iPad*)
2360         arch="arm"
2361     ;;
2362     mips|mipsel|IP*)
2363         arch="mips"
2364     ;;
2365     mips64*)
2366         arch="mips"
2367         subarch="mips64"
2368     ;;
2369     parisc|hppa)
2370         arch="parisc"
2371     ;;
2372     parisc64|hppa64)
2373         arch="parisc"
2374         subarch="parisc64"
2375     ;;
2376     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2377         arch="ppc"
2378     ;;
2379     s390|s390x)
2380         arch="s390"
2381     ;;
2382     sh4|sh)
2383         arch="sh4"
2384     ;;
2385     sun4u|sparc64)
2386         arch="sparc"
2387         subarch="sparc64"
2388     ;;
2389     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2390         arch="x86"
2391     ;;
2392 esac
2393
2394 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2395 enable $arch
2396
2397 # Add processor-specific flags
2398 if test "$cpu" = generic; then
2399     : do nothing
2400 elif enabled ppc; then
2401
2402     case $(tolower $cpu) in
2403         601|ppc601|powerpc601)
2404             cpuflags="-mcpu=601"
2405             disable altivec
2406         ;;
2407         603*|ppc603*|powerpc603*)
2408             cpuflags="-mcpu=603"
2409             disable altivec
2410         ;;
2411         604*|ppc604*|powerpc604*)
2412             cpuflags="-mcpu=604"
2413             disable altivec
2414         ;;
2415         g3|75*|ppc75*|powerpc75*)
2416             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2417             disable altivec
2418         ;;
2419         g4|745*|ppc745*|powerpc745*)
2420             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2421         ;;
2422         74*|ppc74*|powerpc74*)
2423             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2424         ;;
2425         g5|970|ppc970|powerpc970|power4*)
2426             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2427         ;;
2428         cell)
2429             cpuflags="-mcpu=cell"
2430             enable ldbrx
2431         ;;
2432         e500v2)
2433             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2434             disable altivec
2435         ;;
2436         e500)
2437             cpuflags="-mcpu=8540 -mhard-float"
2438             disable altivec
2439         ;;
2440     esac
2441
2442 elif enabled x86; then
2443
2444     case $cpu in
2445         i[345]86|pentium)
2446             cpuflags="-march=$cpu"
2447             disable mmx
2448         ;;
2449         # targets that do NOT support conditional mov (cmov)
2450         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2451             cpuflags="-march=$cpu"
2452             disable cmov
2453         ;;
2454         # targets that do support conditional mov (cmov)
2455         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2456             cpuflags="-march=$cpu"
2457             enable cmov
2458             enable fast_cmov
2459         ;;
2460         # targets that do support conditional mov but on which it's slow
2461         pentium4|pentium4m|prescott|nocona)
2462             cpuflags="-march=$cpu"
2463             enable cmov
2464             disable fast_cmov
2465         ;;
2466     esac
2467
2468 elif enabled sparc; then
2469
2470     case $cpu in
2471         niagara)
2472             cpuflags="-mcpu=$cpu"
2473             disable vis
2474         ;;
2475         sparc64)
2476             cpuflags="-mcpu=v9"
2477         ;;
2478     esac
2479
2480 elif enabled arm; then
2481
2482     case $cpu in
2483         armv*)
2484             cpuflags="-march=$cpu"
2485             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2486         ;;
2487         *)
2488             cpuflags="-mcpu=$cpu"
2489             case $cpu in
2490                 cortex-a*)                               subarch=armv7a  ;;
2491                 cortex-r*)                               subarch=armv7r  ;;
2492                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2493                 arm11*)                                  subarch=armv6   ;;
2494                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2495                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2496             esac
2497         ;;
2498     esac
2499
2500 elif enabled alpha; then
2501
2502     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2503
2504 elif enabled bfin; then
2505
2506     cpuflags="-mcpu=$cpu"
2507
2508 elif enabled mips; then
2509
2510     cpuflags="-march=$cpu"
2511
2512 elif enabled avr32; then
2513
2514     case $cpu in
2515         ap7[02]0[0-2])
2516             subarch="avr32_ap"
2517             cpuflags="-mpart=$cpu"
2518         ;;
2519         ap)
2520             subarch="avr32_ap"
2521             cpuflags="-march=$cpu"
2522         ;;
2523         uc3[ab]*)
2524             subarch="avr32_uc"
2525             cpuflags="-mcpu=$cpu"
2526         ;;
2527         uc)
2528             subarch="avr32_uc"
2529             cpuflags="-march=$cpu"
2530         ;;
2531     esac
2532
2533 fi
2534
2535 add_cflags $cpuflags
2536 add_asflags $cpuflags
2537
2538 # compiler sanity check
2539 check_exec <<EOF
2540 int main(void){ return 0; }
2541 EOF
2542 if test "$?" != 0; then
2543     echo "$cc is unable to create an executable file."
2544     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2545         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2546         echo "Only do this if you know what cross compiling means."
2547     fi
2548     die "C compiler test failed."
2549 fi
2550
2551 add_cppflags -D_ISOC99_SOURCE
2552 add_cxxflags -D__STDC_CONSTANT_MACROS
2553 check_cflags -std=c99
2554 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2555 #include <stdlib.h>
2556 EOF
2557 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2558 #include <stdlib.h>
2559 EOF
2560
2561 check_host_cflags -std=c99
2562 check_host_cflags -Wall
2563
2564 case "$arch" in
2565     alpha|ia64|mips|parisc|sparc)
2566         spic=$shared
2567     ;;
2568     x86)
2569         subarch="x86_32"
2570         check_cc <<EOF && subarch="x86_64"
2571         int test[(int)sizeof(char*) - 7];
2572 EOF
2573         if test "$subarch" = "x86_64"; then
2574             spic=$shared
2575         fi
2576     ;;
2577     ppc)
2578         check_cc <<EOF && subarch="ppc64"
2579         int test[(int)sizeof(char*) - 7];
2580 EOF
2581     ;;
2582 esac
2583
2584 enable $subarch
2585 enabled spic && enable pic
2586
2587 # OS specific
2588 case $target_os in
2589     haiku)
2590         prefix_default="/boot/common"
2591         network_extralibs="-lnetwork"
2592         host_libs=
2593         ;;
2594     sunos)
2595         FFSERVERLDFLAGS=""
2596         SHFLAGS='-shared -Wl,-h,$$(@F)'
2597         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2598         network_extralibs="-lsocket -lnsl"
2599         add_cppflags -D__EXTENSIONS__
2600         # When using suncc to build, the Solaris linker will mark
2601         # an executable with each instruction set encountered by
2602         # the Solaris assembler.  As our libraries contain their own
2603         # guards for processor-specific code, instead suppress
2604         # generation of the HWCAPS ELF section on Solaris x86 only.
2605         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2606         nm_opts='-P -g'
2607         ;;
2608     netbsd)
2609         disable symver
2610         oss_indev_extralibs="-lossaudio"
2611         oss_outdev_extralibs="-lossaudio"
2612         ;;
2613     openbsd)
2614         enable malloc_aligned
2615         # On OpenBSD 4.5. the compiler does not use PIC unless
2616         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2617         # however the generated executable will not do anything
2618         # (simply quits with exit-code 1, no crash, no output).
2619         # Thus explicitly enable PIC here.
2620         enable pic
2621         disable symver
2622         SHFLAGS='-shared'
2623         oss_indev_extralibs="-lossaudio"
2624         oss_outdev_extralibs="-lossaudio"
2625         ;;
2626     dragonfly)
2627         enable malloc_aligned
2628         disable symver
2629         ;;
2630     freebsd)
2631         enable malloc_aligned
2632         ;;
2633     bsd/os)
2634         add_extralibs -lpoll -lgnugetopt
2635         strip="strip -d"
2636         ;;
2637     darwin)
2638         enable malloc_aligned
2639         gas="gas-preprocessor.pl $cc"
2640         enabled ppc && add_asflags -force_cpusubtype_ALL
2641         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2642         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2643         strip="${strip} -x"
2644         add_ldflags -Wl,-dynamic,-search_paths_first
2645         SLIBSUF=".dylib"
2646         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2647         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2648         FFSERVERLDFLAGS=-Wl,-bind_at_load
2649         objformat="macho"
2650         enabled x86_64 && objformat="macho64"
2651         enabled_any pic shared ||
2652             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2653         ;;
2654     mingw32*)
2655         if test $target_os = "mingw32ce"; then
2656             disable network
2657         else
2658             target_os=mingw32
2659         fi
2660         LIBTARGET=i386
2661         if enabled x86_64; then
2662             enable malloc_aligned
2663             LIBTARGET=x64
2664         elif enabled arm; then
2665             LIBTARGET=arm-wince
2666         fi
2667         shlibdir_default="$bindir_default"
2668         SLIBPREF=""
2669         SLIBSUF=".dll"
2670         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2671         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2672         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2673         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2674         SLIB_INSTALL_LINKS=
2675         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2676         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2677         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'
2678         objformat="win32"
2679         enable dos_paths
2680         check_cflags -fno-common
2681         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2682                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2683                 die "ERROR: MinGW runtime version must be >= 3.15."
2684         add_cppflags -U__STRICT_ANSI__
2685         ;;
2686     cygwin*)
2687         target_os=cygwin
2688         shlibdir_default="$bindir_default"
2689         SLIBPREF="cyg"
2690         SLIBSUF=".dll"
2691         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2692         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2693         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2694         objformat="win32"
2695         enable dos_paths
2696         check_cflags -fno-common
2697         add_cppflags -U__STRICT_ANSI__
2698         ;;
2699     *-dos|freedos|opendos)
2700         network_extralibs="-lsocket"
2701         objformat="coff"
2702         enable dos_paths
2703         add_cppflags -U__STRICT_ANSI__
2704         ;;
2705     linux)
2706         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2707         enable dv1394
2708         ;;
2709     irix*)
2710         target_os=irix
2711         ranlib="echo ignoring ranlib"
2712         ;;
2713     os/2*)
2714         strip="lxlite -CS"
2715         ln_s="cp -f"
2716         objformat="aout"
2717         add_cppflags -D_GNU_SOURCE
2718         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2719         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2720         FFSERVERLDFLAGS=""
2721         LIBSUF="_s.a"
2722         SLIBPREF=""
2723         SLIBSUF=".dll"
2724         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2725         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2726         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2727           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2728           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2729           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2730           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2731           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2732         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2733           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2734         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2735         enable dos_paths
2736         enable_weak os2threads
2737         ;;
2738     gnu/kfreebsd)
2739         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2740         ;;
2741     gnu)
2742         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2743         ;;
2744     qnx)
2745         add_cppflags -D_QNX_SOURCE
2746         network_extralibs="-lsocket"
2747         ;;
2748     symbian)
2749         SLIBSUF=".dll"
2750         enable dos_paths
2751         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2752         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2753         add_ldflags -Wl,--target1-abs,--no-undefined \
2754                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2755                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2756         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2757                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2758                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2759         ;;
2760     none)
2761         ;;
2762     *)
2763         die "Unknown OS '$target_os'."
2764         ;;
2765 esac
2766
2767 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2768
2769 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2770
2771 set_default $PATHS_LIST
2772
2773 # we need to build at least one lib type
2774 if ! enabled_any static shared; then
2775     cat <<EOF
2776 At least one library type must be built.
2777 Specify --enable-static to build the static libraries or --enable-shared to
2778 build the shared libraries as well. To only build the shared libraries specify
2779 --disable-static in addition to --enable-shared.
2780 EOF
2781     exit 1;
2782 fi
2783
2784 die_license_disabled() {
2785     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2786 }
2787
2788 die_license_disabled gpl libcdio
2789 die_license_disabled gpl libx264
2790 die_license_disabled gpl libxavs
2791 die_license_disabled gpl libxvid
2792 die_license_disabled gpl x11grab
2793
2794 die_license_disabled nonfree libaacplus
2795 die_license_disabled nonfree libfaac
2796 die_license_disabled nonfree openssl
2797
2798 die_license_disabled version3 libopencore_amrnb
2799 die_license_disabled version3 libopencore_amrwb
2800 die_license_disabled version3 libvo_aacenc
2801 die_license_disabled version3 libvo_amrwbenc
2802
2803 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2804
2805 disabled optimizations || check_cflags -fomit-frame-pointer
2806
2807 enable_pic() {
2808     enable pic
2809     add_cppflags -DPIC
2810     add_cflags   -fPIC
2811     add_asflags  -fPIC
2812 }
2813
2814 enabled pic && enable_pic
2815
2816 check_cc <<EOF || die "Symbol mangling check failed."
2817 int ff_extern;
2818 EOF
2819 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2820 extern_prefix=${sym%%ff_extern*}
2821
2822 check_cc <<EOF && enable inline_asm
2823 void foo(void) { __asm__ volatile ("" ::); }
2824 EOF
2825
2826 _restrict=
2827 for restrict_keyword in restrict __restrict__ __restrict; do
2828     check_cc <<EOF && _restrict=$restrict_keyword && break
2829 void foo(char * $restrict_keyword p);
2830 EOF
2831 done
2832
2833 check_cc <<EOF && enable attribute_packed
2834 struct { int x; } __attribute__((packed)) x;
2835 EOF
2836
2837 check_cc <<EOF && enable attribute_may_alias
2838 union { int x; } __attribute__((may_alias)) x;
2839 EOF
2840
2841 check_cc <<EOF || die "endian test failed"
2842 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2843 EOF
2844 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2845
2846 if enabled alpha; then
2847
2848     check_cflags -mieee
2849
2850 elif enabled arm; then
2851
2852     enabled thumb && check_cflags -mthumb || check_cflags -marm
2853     nogas=die
2854
2855     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2856         enable vfp_args
2857     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2858         case "${cross_prefix:-$cc}" in
2859             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2860             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2861 __asm__ (".eabi_attribute 28, 1");
2862 int main(void) { return 0; }
2863 EOF
2864         esac
2865         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2866     fi
2867
2868     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2869     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2870     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2871     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2872     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2873     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2874     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2875
2876     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2877
2878     enabled_all armv6t2 shared !pic && enable_pic
2879
2880 elif enabled mips; then
2881
2882     check_asm loongson '"dmult.g $1, $2, $3"'
2883     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2884
2885 elif enabled ppc; then
2886
2887     enable local_aligned_8 local_aligned_16
2888
2889     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2890     check_asm ibm_asm   '"add 0, 0, 0"'
2891     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2892     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2893
2894     # AltiVec flags: The FSF version of GCC differs from the Apple version
2895     if enabled altivec; then
2896         nogas=warn
2897         check_cflags -maltivec -mabi=altivec &&
2898         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2899         check_cflags -faltivec
2900
2901         # check if our compiler supports Motorola AltiVec C API
2902         check_cc <<EOF || disable altivec
2903 $inc_altivec_h
2904 int main(void) {
2905     vector signed int v1, v2, v3;
2906     v1 = vec_add(v2,v3);
2907     return 0;
2908 }
2909 EOF
2910
2911         # check if our compiler supports braces for vector declarations
2912         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2913 $inc_altivec_h
2914 int main (void) { (vector int) {1}; return 0; }
2915 EOF
2916     fi
2917
2918 elif enabled sparc; then
2919
2920     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2921         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2922
2923 elif enabled x86; then
2924
2925     enable local_aligned_8 local_aligned_16
2926
2927     # check whether EBP is available on x86
2928     # As 'i' is stored on the stack, this program will crash
2929     # if the base pointer is used to access it because the
2930     # base pointer is cleared in the inline assembly code.
2931     check_exec_crash <<EOF && enable ebp_available
2932     volatile int i=0;
2933     __asm__ volatile (
2934         "xorl %%ebp, %%ebp"
2935     ::: "%ebp");
2936     return i;
2937 EOF
2938
2939     # check whether EBX is available on x86
2940     check_asm ebx_available '""::"b"(0)' &&
2941         check_asm ebx_available '"":::"%ebx"'
2942
2943     # check whether xmm clobbers are supported
2944     check_asm xmm_clobbers '"":::"%xmm0"'
2945
2946     # check whether binutils is new enough to compile SSSE3/MMX2
2947     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2948     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2949
2950     if ! disabled_any asm mmx yasm; then
2951         if check_cmd $yasmexe --version; then
2952             enabled x86_64 && yasm_extra="-m amd64"
2953             yasm_debug="-g dwarf2"
2954         elif check_cmd nasm -v; then
2955             yasmexe=nasm
2956             yasm_debug="-g -F dwarf"
2957             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2958         fi
2959
2960         YASMFLAGS="-f $objformat $yasm_extra"
2961         enabled pic               && append YASMFLAGS "-DPIC"
2962         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2963         case "$objformat" in
2964             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2965         esac
2966
2967         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2968             die "yasm not found, use --disable-yasm for a crippled build"
2969         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2970     fi
2971
2972     case "$cpu" in
2973         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2974             disable fast_clz
2975         ;;
2976     esac
2977
2978 fi
2979
2980 if enabled asm; then
2981     as=${gas:=$as}
2982     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2983         $nogas "GNU assembler not found, install gas-preprocessor"
2984 fi
2985
2986 check_ldflags -Wl,--as-needed
2987
2988 if check_func dlopen; then
2989     ldl=
2990 elif check_func dlopen -ldl; then
2991     ldl=-ldl
2992 fi
2993
2994 if enabled network; then
2995     check_type "sys/types.h sys/socket.h" socklen_t
2996     check_type netdb.h "struct addrinfo"
2997     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2998     check_type netinet/in.h "struct sockaddr_in6"
2999     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3000     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3001     # Prefer arpa/inet.h over winsock2
3002     if check_header arpa/inet.h ; then
3003         check_func closesocket
3004     elif check_header winsock2.h ; then
3005         check_func_headers winsock2.h closesocket -lws2 && \
3006             network_extralibs="-lws2" || \
3007         { check_func_headers winsock2.h closesocket -lws2_32 && \
3008             network_extralibs="-lws2_32"; }
3009         check_type ws2tcpip.h socklen_t
3010         check_type ws2tcpip.h "struct addrinfo"
3011         check_type ws2tcpip.h "struct ipv6_mreq"
3012         check_type ws2tcpip.h "struct sockaddr_in6"
3013         check_type ws2tcpip.h "struct sockaddr_storage"
3014         check_struct winsock2.h "struct sockaddr" sa_len
3015     else
3016         disable network
3017     fi
3018 fi
3019
3020 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3021 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3022
3023 check_func  fcntl
3024 check_func  fork
3025 check_func  getaddrinfo $network_extralibs
3026 check_func  gethrtime
3027 check_func  getrusage
3028 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3029 check_func  inet_aton $network_extralibs
3030 check_func  isatty
3031 check_func  localtime_r
3032 check_func  ${malloc_prefix}memalign            && enable memalign
3033 check_func  mkstemp
3034 check_func  mmap
3035 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3036 check_func  setrlimit
3037 check_func  strerror_r
3038 check_func  strptime
3039 check_func  sched_getaffinity
3040 check_func  sysconf
3041 check_func  sysctl
3042 check_func_headers conio.h kbhit
3043 check_func_headers windows.h PeekNamedPipe
3044 check_func_headers io.h setmode
3045 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3046 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3047 check_func_headers windows.h GetProcessAffinityMask
3048 check_func_headers windows.h GetProcessTimes
3049 check_func_headers windows.h MapViewOfFile
3050 check_func_headers windows.h VirtualAlloc
3051
3052 check_header dlfcn.h
3053 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3054 check_header libcrystalhd/libcrystalhd_if.h
3055 check_header malloc.h
3056 check_header poll.h
3057 check_header sys/mman.h
3058 check_header sys/param.h
3059 check_header sys/resource.h
3060 check_header sys/select.h
3061 check_header termios.h
3062 check_header vdpau/vdpau.h
3063 check_header vdpau/vdpau_x11.h
3064 check_header X11/extensions/XvMClib.h
3065 check_header asm/types.h
3066
3067 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3068 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3069
3070 # check for VDA header
3071 if ! disabled vda; then
3072     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3073         enable vda
3074         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3075     fi
3076 fi
3077
3078 if ! disabled w32threads && ! enabled pthreads; then
3079     check_func _beginthreadex && enable w32threads
3080 fi
3081
3082 # check for some common methods of building with pthread support
3083 # do this before the optional library checks as some of them require pthreads
3084 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3085     enable pthreads
3086     if check_func pthread_create; then
3087         :
3088     elif check_func pthread_create -pthread; then
3089         add_cflags -pthread
3090         add_extralibs -pthread
3091     elif check_func pthread_create -pthreads; then
3092         add_cflags -pthreads
3093         add_extralibs -pthreads
3094     elif check_func pthread_create -lpthreadGC2; then
3095         add_extralibs -lpthreadGC2
3096     elif ! check_lib pthread.h pthread_create -lpthread; then
3097         disable pthreads
3098     fi
3099 fi
3100
3101 for thread in $THREADS_LIST; do
3102     if enabled $thread; then
3103         test -n "$thread_type" &&
3104             die "ERROR: Only one thread type must be selected." ||
3105             thread_type="$thread"
3106     fi
3107 done
3108
3109 check_lib math.h sin -lm && LIBM="-lm"
3110 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3111 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3112
3113 check_mathfunc cbrtf
3114 check_mathfunc exp2
3115 check_mathfunc exp2f
3116 check_mathfunc llrint
3117 check_mathfunc llrintf
3118 check_mathfunc log2
3119 check_mathfunc log2f
3120 check_mathfunc lrint
3121 check_mathfunc lrintf
3122 check_mathfunc round
3123 check_mathfunc roundf
3124 check_mathfunc trunc
3125 check_mathfunc truncf
3126
3127 # these are off by default, so fail if requested and not available
3128 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3129 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3130 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3131 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3132 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3133 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3134                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3135                         die "ERROR: libcelt version must be >= 0.11.0."; }
3136 enabled libdirac   && require_pkg_config dirac                          \
3137     "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
3138     "dirac_decoder_init dirac_encoder_init"
3139 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3140 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3141 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3142 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3143 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3144 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3145 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3146 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3147 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3148 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3149 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3150 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3151 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3152 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3153 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3154     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3155     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder
3156 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3157 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3158 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3159 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3160 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3161 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3162 enabled libvpx     && {
3163     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3164                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3165     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3166                                 die "ERROR: libvpx encoder version must be >=0.9.6"; } }
3167 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3168                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3169                         die "ERROR: libx264 version must be >= 0.118."; }
3170 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3171 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3172 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3173                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3174                         die "ERROR: openal not found"; } &&
3175                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3176                         die "ERROR: openal version must be 1.1 or compatible"; }
3177 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
3178 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3179                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3180                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3181                         die "ERROR: openssl not found"; }
3182
3183 # libdc1394 check
3184 if enabled libdc1394; then
3185     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3186         enable libdc1394_2; } ||
3187     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3188         enable libdc1394_1; } ||
3189     die "ERROR: No version of libdc1394 found "
3190 fi
3191
3192 SDL_CONFIG="${cross_prefix}sdl-config"
3193 if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
3194     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3195     enable sdl &&
3196     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3197 else
3198   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3199     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3200     sdl_libs=$("${SDL_CONFIG}" --libs)
3201     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3202     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3203     enable sdl &&
3204     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3205   fi
3206 fi
3207 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3208
3209 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3210 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3211
3212 check_header linux/fb.h
3213 check_header linux/videodev.h
3214 check_header linux/videodev2.h
3215 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3216
3217 check_header sys/videoio.h
3218
3219 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3220 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3221 # w32api 3.12 had it defined wrong
3222 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3223
3224 check_type "dshow.h" IBaseFilter
3225
3226 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3227 { check_header dev/bktr/ioctl_meteor.h &&
3228   check_header dev/bktr/ioctl_bt848.h; } ||
3229 { check_header machine/ioctl_meteor.h &&
3230   check_header machine/ioctl_bt848.h; } ||
3231 { check_header dev/video/meteor/ioctl_meteor.h &&
3232   check_header dev/video/bktr/ioctl_bt848.h; } ||
3233 check_header dev/ic/bt8xx.h
3234
3235 check_header sndio.h
3236 if check_struct sys/soundcard.h audio_buf_info bytes; then
3237     enable_safe sys/soundcard.h
3238 else
3239     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3240     #include <sys/soundcard.h>
3241     audio_buf_info abc;
3242 EOF
3243 fi
3244 check_header soundcard.h
3245
3246 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3247
3248 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
3249
3250 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3251
3252 enabled libcdio &&
3253     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3254
3255 enabled x11grab                         &&
3256 check_header X11/Xlib.h                 &&
3257 check_header X11/extensions/XShm.h      &&
3258 check_header X11/extensions/Xfixes.h    &&
3259 check_func XOpenDisplay -lX11           &&
3260 check_func XShmCreateImage -lX11 -lXext &&
3261 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
3262
3263 if ! disabled vaapi; then
3264     check_lib va/va.h vaInitialize -lva && {
3265         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3266         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3267     } || disable vaapi
3268 fi
3269
3270 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3271 check_cpp_condition \
3272     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3273     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3274       disable vdpau; }
3275 fi
3276
3277 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3278 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3279 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3280
3281 # add some useful compiler flags if supported
3282 check_cflags -Wdeclaration-after-statement
3283 check_cflags -Wall
3284 check_cflags -Wno-parentheses
3285 check_cflags -Wno-switch
3286 check_cflags -Wno-format-zero-length
3287 check_cflags -Wdisabled-optimization
3288 check_cflags -Wpointer-arith
3289 check_cflags -Wredundant-decls
3290 check_cflags -Wno-pointer-sign
3291 check_cflags -Wcast-qual
3292 check_cflags -Wwrite-strings
3293 check_cflags -Wtype-limits
3294 check_cflags -Wundef
3295 check_cflags -Wmissing-prototypes
3296 check_cflags -Wno-pointer-to-int-cast
3297 check_cflags -Wstrict-prototypes
3298 enabled extra_warnings && check_cflags -Winline
3299
3300 # add some linker flags
3301 check_ldflags -Wl,--warn-common
3302 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
3303 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3304
3305 echo "X{};" > $TMPV
3306 if test_ldflags -Wl,--version-script,$TMPV; then
3307     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3308     check_cc <<EOF && enable symver_asm_label
3309 void ff_foo(void) __asm__ ("av_foo@VERSION");
3310 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3311 EOF
3312     check_cc <<EOF && enable symver_gnu_asm
3313 __asm__(".symver ff_foo,av_foo@VERSION");
3314 void ff_foo(void) {}
3315 EOF
3316 fi
3317
3318 if [ -n "$optflags" ]; then
3319     add_cflags $optflags
3320 elif enabled small; then
3321     add_cflags $size_cflags
3322 elif enabled optimizations; then
3323     add_cflags $speed_cflags
3324 else
3325     add_cflags $noopt_cflags
3326 fi
3327 check_cflags -fno-math-errno
3328 check_cflags -fno-signed-zeros
3329 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3330 int x;
3331 EOF
3332
3333
3334 if enabled icc; then
3335     # Just warnings, no remarks
3336     check_cflags -w1
3337     # -wd: Disable following warnings
3338     # 144, 167, 556: -Wno-pointer-sign
3339     # 1292: attribute "foo" ignored
3340     # 10006: ignoring unknown option -fno-signed-zeros
3341     # 10148: ignoring unknown option -Wno-parentheses
3342     # 10156: ignoring option '-W'; no argument required
3343     check_cflags -wd144,167,556,1292,10006,10148,10156
3344     # 11030: Warning unknown option --as-needed
3345     # 10156: ignoring option '-export'; no argument required
3346     check_ldflags -wd10156,11030
3347     # Allow to compile with optimizations
3348     check_ldflags -march=$cpu
3349     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3350     enable ebp_available
3351     if enabled x86_32; then
3352         test ${icc_version%%.*} -ge 11 && \
3353             check_cflags -falign-stack=maintain-16-byte || \
3354             disable aligned_stack
3355     fi
3356 elif enabled ccc; then
3357     # disable some annoying warnings
3358     add_cflags -msg_disable cvtu32to64
3359     add_cflags -msg_disable embedcomment
3360     add_cflags -msg_disable needconstext
3361     add_cflags -msg_disable nomainieee
3362     add_cflags -msg_disable ptrmismatch1
3363     add_cflags -msg_disable unreachcode
3364 elif enabled gcc; then
3365     check_cflags -fno-tree-vectorize
3366     check_cflags -Werror=implicit-function-declaration
3367     check_cflags -Werror=missing-prototypes
3368 elif enabled llvm_gcc; then
3369     check_cflags -mllvm -stack-alignment=16
3370 elif enabled clang; then
3371     check_cflags -mllvm -stack-alignment=16
3372     check_cflags -Qunused-arguments
3373 elif enabled armcc; then
3374     # 2523: use of inline assembler is deprecated
3375     add_cflags -W${armcc_opt},--diag_suppress=2523
3376     add_cflags -W${armcc_opt},--diag_suppress=1207
3377     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3378     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3379     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3380     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3381 elif enabled tms470; then
3382     add_cflags -pds=824 -pds=837
3383 elif enabled pathscale; then
3384     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3385 fi
3386
3387 enabled_any $THREADS_LIST      && enable threads
3388
3389 check_deps $CONFIG_LIST       \
3390            $CONFIG_EXTRA      \
3391            $HAVE_LIST         \
3392            $ALL_COMPONENTS    \
3393            $ALL_TESTS         \
3394
3395 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3396
3397 if test $target_os = "haiku"; then
3398     disable memalign
3399     disable posix_memalign
3400 fi
3401
3402 ! enabled_any memalign posix_memalign malloc_aligned &&
3403     enabled_any $need_memalign && enable memalign_hack
3404
3405 echo "install prefix            $prefix"
3406 echo "source path               $source_path"
3407 echo "C compiler                $cc"
3408 echo "ARCH                      $arch ($cpu)"
3409 if test "$build_suffix" != ""; then
3410     echo "build suffix              $build_suffix"
3411 fi
3412 if test "$progs_suffix" != ""; then
3413     echo "progs suffix              $progs_suffix"
3414 fi
3415 if test "$extra_version" != ""; then
3416     echo "version string suffix     $extra_version"
3417 fi
3418 echo "big-endian                ${bigendian-no}"
3419 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3420 if enabled x86; then
3421     echo "${yasmexe}                      ${yasm-no}"
3422     echo "MMX enabled               ${mmx-no}"
3423     echo "MMX2 enabled              ${mmx2-no}"
3424     echo "3DNow! enabled            ${amd3dnow-no}"
3425     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3426     echo "SSE enabled               ${sse-no}"
3427     echo "SSSE3 enabled             ${ssse3-no}"
3428     echo "AVX enabled               ${avx-no}"
3429     echo "CMOV enabled              ${cmov-no}"
3430     echo "CMOV is fast              ${fast_cmov-no}"
3431     echo "EBX available             ${ebx_available-no}"
3432     echo "EBP available             ${ebp_available-no}"
3433 fi
3434 if enabled arm; then
3435     echo "ARMv5TE enabled           ${armv5te-no}"
3436     echo "ARMv6 enabled             ${armv6-no}"
3437     echo "ARMv6T2 enabled           ${armv6t2-no}"
3438     echo "ARM VFP enabled           ${armvfp-no}"
3439     echo "IWMMXT enabled            ${iwmmxt-no}"
3440     echo "NEON enabled              ${neon-no}"
3441 fi
3442 if enabled mips; then
3443     echo "MMI enabled               ${mmi-no}"
3444 fi
3445 if enabled ppc; then
3446     echo "AltiVec enabled           ${altivec-no}"
3447     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3448     echo "dcbzl available           ${dcbzl-no}"
3449 fi
3450 if enabled sparc; then
3451     echo "VIS enabled               ${vis-no}"
3452 fi
3453 echo "debug symbols             ${debug-no}"
3454 echo "strip symbols             ${stripping-no}"
3455 echo "optimize for size         ${small-no}"
3456 echo "optimizations             ${optimizations-no}"
3457 echo "static                    ${static-no}"
3458 echo "shared                    ${shared-no}"
3459 echo "postprocessing support    ${postproc-no}"
3460 echo "new filter support        ${avfilter-no}"
3461 echo "network support           ${network-no}"
3462 echo "threading support         ${thread_type-no}"
3463 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3464 echo "SDL support               ${sdl-no}"
3465 echo "Sun medialib support      ${mlib-no}"
3466 echo "libdxva2 enabled          ${dxva2-no}"
3467 echo "libva enabled             ${vaapi-no}"
3468 echo "libvdpau enabled          ${vdpau-no}"
3469 echo "AVISynth enabled          ${avisynth-no}"
3470 echo "frei0r enabled            ${frei0r-no}"
3471 echo "gnutls enabled            ${gnutls-no}"
3472 echo "libaacplus enabled        ${libaacplus-no}"
3473 echo "libass enabled            ${libass-no}"
3474 echo "libcdio support           ${libcdio-no}"
3475 echo "libcelt enabled           ${libcelt-no}"
3476 echo "libdc1394 support         ${libdc1394-no}"
3477 echo "libdirac enabled          ${libdirac-no}"
3478 echo "libfaac enabled           ${libfaac-no}"
3479 echo "libgsm enabled            ${libgsm-no}"
3480 echo "libmodplug enabled        ${libmodplug-no}"
3481 echo "libmp3lame enabled        ${libmp3lame-no}"
3482 echo "libnut enabled            ${libnut-no}"
3483 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3484 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3485 echo "libopencv support         ${libopencv-no}"
3486 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3487 echo "libpulse enabled          ${libpulse-no}"
3488 echo "librtmp enabled           ${librtmp-no}"
3489 echo "libschroedinger enabled   ${libschroedinger-no}"
3490 echo "libspeex enabled          ${libspeex-no}"
3491 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3492 echo "libtheora enabled         ${libtheora-no}"
3493 echo "libutvideo enabled        ${libutvideo-no}"
3494 echo "libv4l2 enabled           ${libv4l2-no}"
3495 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3496 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3497 echo "libvorbis enabled         ${libvorbis-no}"
3498 echo "libvpx enabled            ${libvpx-no}"
3499 echo "libx264 enabled           ${libx264-no}"
3500 echo "libxavs enabled           ${libxavs-no}"
3501 echo "libxvid enabled           ${libxvid-no}"
3502 echo "openal enabled            ${openal-no}"
3503 echo "openssl enabled           ${openssl-no}"
3504 echo "zlib enabled              ${zlib-no}"
3505 echo "bzlib enabled             ${bzlib-no}"
3506 echo
3507
3508 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3509     echo "Enabled ${type}s:"
3510     eval list=\$$(toupper $type)_LIST
3511     print_enabled '_*' $list | sort | pr -r -3 -t
3512     echo
3513 done
3514
3515 license="LGPL version 2.1 or later"
3516 if enabled nonfree; then
3517     license="nonfree and unredistributable"
3518 elif enabled gplv3; then
3519     license="GPL version 3 or later"
3520 elif enabled lgplv3; then
3521     license="LGPL version 3 or later"
3522 elif enabled gpl; then
3523     license="GPL version 2 or later"
3524 fi
3525
3526 echo "License: $license"
3527
3528 echo "Creating config.mak and config.h..."
3529
3530 test -e Makefile || $ln_s "$source_path/Makefile" .
3531
3532 enabled stripping || strip="echo skipping strip"
3533
3534 config_files="$TMPH config.mak"
3535
3536 cat > config.mak <<EOF
3537 # Automatically generated by configure - do not modify!
3538 ifndef FFMPEG_CONFIG_MAK
3539 FFMPEG_CONFIG_MAK=1
3540 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3541 prefix=$prefix
3542 LIBDIR=\$(DESTDIR)$libdir
3543 SHLIBDIR=\$(DESTDIR)$shlibdir
3544 INCDIR=\$(DESTDIR)$incdir
3545 BINDIR=\$(DESTDIR)$bindir
3546 DATADIR=\$(DESTDIR)$datadir
3547 MANDIR=\$(DESTDIR)$mandir
3548 SRC_PATH=$source_path
3549 ifndef MAIN_MAKEFILE
3550 SRC_PATH:=\$(SRC_PATH:.%=..%)
3551 endif
3552 CC_IDENT=$cc_ident
3553 ARCH=$arch
3554 CC=$cc
3555 CXX=$cxx
3556 AS=$as
3557 LD=$ld
3558 DEPCC=$dep_cc
3559 YASM=$yasmexe
3560 YASMDEP=$yasmexe
3561 AR=$ar
3562 RANLIB=$ranlib
3563 CP=cp -p
3564 LN_S=$ln_s
3565 STRIP=$strip
3566 CPPFLAGS=$CPPFLAGS
3567 CFLAGS=$CFLAGS
3568 CXXFLAGS=$CXXFLAGS
3569 ASFLAGS=$ASFLAGS
3570 AS_O=$CC_O
3571 CC_O=$CC_O
3572 CXX_O=$CXX_O
3573 LDFLAGS=$LDFLAGS
3574 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3575 SHFLAGS=$SHFLAGS
3576 YASMFLAGS=$YASMFLAGS
3577 BUILDSUF=$build_suffix
3578 PROGSSUF=$progs_suffix
3579 FULLNAME=$FULLNAME
3580 LIBPREF=$LIBPREF
3581 LIBSUF=$LIBSUF
3582 LIBNAME=$LIBNAME
3583 SLIBPREF=$SLIBPREF
3584 SLIBSUF=$SLIBSUF
3585 EXESUF=$EXESUF
3586 EXTRA_VERSION=$extra_version
3587 DEPFLAGS=$DEPFLAGS
3588 CCDEP=$CCDEP
3589 CXXDEP=$CXXDEP
3590 ASDEP=$ASDEP
3591 CC_DEPFLAGS=$CC_DEPFLAGS
3592 AS_DEPFLAGS=$AS_DEPFLAGS
3593 HOSTCC=$host_cc
3594 HOSTCFLAGS=$host_cflags
3595 HOSTEXESUF=$HOSTEXESUF
3596 HOSTLDFLAGS=$host_ldflags
3597 HOSTLIBS=$host_libs
3598 TARGET_EXEC=$target_exec
3599 TARGET_PATH=$target_path
3600 SDL_LIBS=$sdl_libs
3601 SDL_CFLAGS=$sdl_cflags
3602 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3603 EXTRALIBS=$extralibs
3604 INSTALL=$install
3605 LIBTARGET=${LIBTARGET}
3606 SLIBNAME=${SLIBNAME}
3607 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3608 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3609 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3610 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3611 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3612 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3613 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3614 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3615 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3616 NOREDZONE_FLAGS=$noredzone_flags
3617 EOF
3618
3619 get_version(){
3620     name=$1
3621     file=$source_path/$2
3622 # This condition will be removed when we stop supporting old libpostproc versions
3623 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3624     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3625     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3626 fi
3627     lcname=$(tolower $name)
3628     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3629     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3630 }
3631
3632 get_version LIBAVCODEC  libavcodec/version.h
3633 get_version LIBAVDEVICE libavdevice/avdevice.h
3634 get_version LIBAVFILTER libavfilter/version.h
3635 get_version LIBAVFORMAT libavformat/version.h
3636 get_version LIBAVUTIL   libavutil/avutil.h
3637 get_version LIBPOSTPROC libpostproc/postprocess.h
3638 get_version LIBSWRESAMPLE libswresample/swresample.h
3639 get_version LIBSWSCALE  libswscale/swscale.h
3640
3641 cat > $TMPH <<EOF
3642 /* Automatically generated by configure - do not modify! */
3643 #ifndef FFMPEG_CONFIG_H
3644 #define FFMPEG_CONFIG_H
3645 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3646 #define FFMPEG_LICENSE "$(c_escape $license)"
3647 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3648 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3649 #define CC_TYPE "$cc_type"
3650 #define CC_VERSION $cc_version
3651 #define restrict $_restrict
3652 #define EXTERN_PREFIX "${extern_prefix}"
3653 #define EXTERN_ASM ${extern_prefix}
3654 #define SLIBSUF "$SLIBSUF"
3655 EOF
3656
3657 test -n "$malloc_prefix" &&
3658     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3659
3660 if enabled small || disabled optimizations; then
3661     echo "#undef  av_always_inline"  >> $TMPH
3662     if enabled small; then
3663         echo "#define av_always_inline inline"  >> $TMPH
3664     else
3665         echo "#define av_always_inline av_unused"  >> $TMPH
3666     fi
3667 fi
3668
3669 if enabled yasm; then
3670     append config_files $TMPASM
3671     printf '' >$TMPASM
3672 fi
3673
3674 print_config ARCH_   "$config_files" $ARCH_LIST
3675 print_config HAVE_   "$config_files" $HAVE_LIST
3676 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3677                                      $CONFIG_EXTRA      \
3678                                      $ALL_COMPONENTS    \
3679
3680 cat >>config.mak <<EOF
3681 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3682 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3683 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3684 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3685 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3686 EOF
3687
3688 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3689 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3690
3691 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3692 cp_if_changed $TMPH config.h
3693 touch .config
3694
3695 enabled yasm && cp_if_changed $TMPASM config.asm
3696
3697 cat > $TMPH <<EOF
3698 /* Generated by ffconf */
3699 #ifndef AVUTIL_AVCONFIG_H
3700 #define AVUTIL_AVCONFIG_H
3701 EOF
3702
3703 test "$postproc_version" != current && cat >> $TMPH <<EOF
3704 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
3705 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
3706 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
3707 EOF
3708
3709 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3710
3711 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3712
3713 cp_if_changed $TMPH libavutil/avconfig.h
3714
3715 test -n "$WARNINGS" && printf "\n$WARNINGS"
3716
3717 # build pkg-config files
3718
3719 pkgconfig_generate(){
3720 name=$1
3721 shortname=${name#lib}${build_suffix}
3722 comment=$2
3723 version=$3
3724 libs=$4
3725 requires=$5
3726 enabled ${name#lib} || return 0
3727 mkdir -p $name
3728 cat <<EOF > $name/$name.pc
3729 prefix=$prefix
3730 exec_prefix=\${prefix}
3731 libdir=$libdir
3732 includedir=$incdir
3733
3734 Name: $name
3735 Description: $comment
3736 Version: $version
3737 Requires: $(enabled shared || echo $requires)
3738 Requires.private: $(enabled shared && echo $requires)
3739 Conflicts:
3740 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3741 Libs.private: $(enabled shared && echo $libs)
3742 Cflags: -I\${includedir}
3743 EOF
3744 cat <<EOF > $name/$name-uninstalled.pc
3745 prefix=
3746 exec_prefix=
3747 libdir=\${pcfiledir}
3748 includedir=${source_path}
3749
3750 Name: $name
3751 Description: $comment
3752 Version: $version
3753 Requires: $requires
3754 Conflicts:
3755 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3756 Cflags: -I\${includedir}
3757 EOF
3758 }
3759
3760 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3761 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3762 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3763 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3764 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3765 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3766 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
3767 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"