build: Allow building old API/ABI libpostproc version
[ffmpeg.git] / 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   --enable-avconv          enable  avconv build
85   --disable-ffplay         disable ffplay build
86   --disable-ffprobe        disable ffprobe build
87   --disable-ffserver       disable ffserver build
88   --disable-avdevice       disable libavdevice build
89   --disable-avcodec        disable libavcodec build
90   --disable-avformat       disable libavformat build
91   --disable-swresample     disable libswresample build
92   --disable-swscale        disable libswscale build
93   --disable-postproc       disable libpostproc build
94   --disable-avfilter       disable video filter support [no]
95   --disable-pthreads       disable pthreads [auto]
96   --disable-w32threads     disable Win32 threads [auto]
97   --disable-os2threads     disable OS/2 threads [auto]
98   --enable-x11grab         enable X11 grabbing [no]
99   --disable-network        disable network support [no]
100   --enable-gray            enable full grayscale support (slower color)
101   --disable-swscale-alpha  disable alpha channel support in swscale
102   --disable-fastdiv        disable table-based division
103   --enable-small           optimize for size instead of speed
104   --disable-aandct         disable AAN DCT code
105   --disable-dct            disable DCT code
106   --disable-fft            disable FFT code
107   --disable-golomb         disable Golomb code
108   --disable-huffman        disable Huffman code
109   --disable-lpc            disable LPC code
110   --disable-mdct           disable MDCT code
111   --disable-rdft           disable RDFT code
112   --enable-vaapi           enable VAAPI code [autodetect]
113   --enable-vda             enable VDA code [autodetect]
114   --enable-vdpau           enable VDPAU code [autodetect]
115   --disable-dxva2          disable DXVA2 code
116   --disable-vda            disable VDA code
117   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
118   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
119   --disable-safe-bitstream-reader
120                            disable buffer boundary checking in bitreaders
121                            (faster, but may crash)
122   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
123   --disable-everything     disable all components listed below
124   --disable-encoder=NAME   disable encoder NAME
125   --enable-encoder=NAME    enable encoder NAME
126   --disable-encoders       disable all encoders
127   --disable-decoder=NAME   disable decoder NAME
128   --enable-decoder=NAME    enable decoder NAME
129   --disable-decoders       disable all decoders
130   --disable-hwaccel=NAME   disable hwaccel NAME
131   --enable-hwaccel=NAME    enable hwaccel NAME
132   --disable-hwaccels       disable all hwaccels
133   --disable-muxer=NAME     disable muxer NAME
134   --enable-muxer=NAME      enable muxer NAME
135   --disable-muxers         disable all muxers
136   --disable-demuxer=NAME   disable demuxer NAME
137   --enable-demuxer=NAME    enable demuxer NAME
138   --disable-demuxers       disable all demuxers
139   --enable-parser=NAME     enable parser NAME
140   --disable-parser=NAME    disable parser NAME
141   --disable-parsers        disable all parsers
142   --enable-bsf=NAME        enable bitstream filter NAME
143   --disable-bsf=NAME       disable bitstream filter NAME
144   --disable-bsfs           disable all bitstream filters
145   --enable-protocol=NAME   enable protocol NAME
146   --disable-protocol=NAME  disable protocol NAME
147   --disable-protocols      disable all protocols
148   --disable-indev=NAME     disable input device NAME
149   --disable-outdev=NAME    disable output device NAME
150   --disable-indevs         disable input devices
151   --disable-outdevs        disable output devices
152   --disable-devices        disable all devices
153   --enable-filter=NAME     enable filter NAME
154   --disable-filter=NAME    disable filter NAME
155   --disable-filters        disable all filters
156   --list-decoders          show all available decoders
157   --list-encoders          show all available encoders
158   --list-hwaccels          show all available hardware accelerators
159   --list-muxers            show all available muxers
160   --list-demuxers          show all available demuxers
161   --list-parsers           show all available parsers
162   --list-protocols         show all available protocols
163   --list-bsfs              show all available bitstream filters
164   --list-indevs            show all available input devices
165   --list-outdevs           show all available output devices
166   --list-filters           show all available filters
167
168 External library support:
169   --enable-avisynth        enable reading of AVISynth script files [no]
170   --enable-bzlib           enable bzlib [autodetect]
171   --enable-frei0r          enable frei0r video filtering
172   --enable-gnutls          enable gnutls [no]
173   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
174   --enable-libass          enable libass subtitles rendering [no]
175   --enable-libcelt         enable CELT decoding via libcelt [no]
176   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
177   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
178   --enable-libopencv       enable video filtering via libopencv [no]
179   --enable-libcdio         enable audio CD grabbing with libcdio
180   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
181                            and libraw1394 [no]
182   --enable-libdirac        enable Dirac support via libdirac [no]
183   --enable-libfaac         enable FAAC support via libfaac [no]
184   --enable-libfreetype     enable libfreetype [no]
185   --enable-libgsm          enable GSM support via libgsm [no]
186   --enable-libmodplug      enable ModPlug via libmodplug [no]
187   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
188   --enable-libnut          enable NUT (de)muxing via libnut,
189                            native (de)muxer exists [no]
190   --enable-libopenjpeg     enable JPEG 2000 encoding/decoding via OpenJPEG [no]
191   --enable-libpulse        enable Pulseaudio input via libpulse [no]
192   --enable-librtmp         enable RTMP[E] support via librtmp [no]
193   --enable-libschroedinger enable Dirac support via libschroedinger [no]
194   --enable-libspeex        enable Speex support via libspeex [no]
195   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
196   --enable-libtheora       enable Theora encoding via libtheora [no]
197   --enable-libutvideo      enable Ut Video decoding via libutvideo [no]
198   --enable-libv4l2         enable libv4l2/v4l-utils [no]
199   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
200   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
201   --enable-libvorbis       enable Vorbis encoding via libvorbis,
202                            native implementation exists [no]
203   --enable-libvpx          enable VP8 support via libvpx [no]
204   --enable-libx264         enable H.264 encoding via x264 [no]
205   --enable-libxavs         enable AVS encoding via xavs [no]
206   --enable-libxvid         enable Xvid encoding via xvidcore,
207                            native MPEG-4/Xvid encoder exists [no]
208   --enable-openal          enable OpenAL 1.1 capture support [no]
209   --enable-mlib            enable Sun medialib [no]
210   --enable-openssl         enable openssl [no]
211   --enable-zlib            enable zlib [autodetect]
212
213 Advanced options (experts only):
214   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
215   --enable-cross-compile   assume a cross-compiler is used
216   --sysroot=PATH           root of cross-build tree
217   --sysinclude=PATH        location of cross-build system headers
218   --target-os=OS           compiler targets OS [$target_os]
219   --target-exec=CMD        command to run executables on target
220   --target-path=DIR        path to view of build directory on target
221   --nm=NM                  use nm tool NM [$nm_default]
222   --ar=AR                  use archive tool AR [$ar_default]
223   --as=AS                  use assembler AS [$as_default]
224   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
225   --cc=CC                  use C compiler CC [$cc_default]
226   --cxx=CXX                use C compiler CXX [$cxx_default]
227   --ld=LD                  use linker LD [$ld_default]
228   --host-cc=HOSTCC         use host C compiler HOSTCC
229   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
230   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
231   --host-libs=HLIBS        use libs HLIBS when linking for host
232   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
233   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
234   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
235   --extra-libs=ELIBS       add ELIBS [$ELIBS]
236   --extra-version=STRING   version string suffix []
237   --build-suffix=SUFFIX    library name suffix []
238   --progs-suffix=SUFFIX    program name suffix []
239   --arch=ARCH              select architecture [$arch]
240   --cpu=CPU                select the minimum required CPU (affects
241                            instruction selection, may crash on older CPUs)
242   --disable-asm            disable all assembler optimizations
243   --disable-altivec        disable AltiVec optimizations
244   --disable-amd3dnow       disable 3DNow! optimizations
245   --disable-amd3dnowext    disable 3DNow! extended optimizations
246   --disable-mmx            disable MMX optimizations
247   --disable-mmx2           disable MMX2 optimizations
248   --disable-sse            disable SSE optimizations
249   --disable-ssse3          disable SSSE3 optimizations
250   --disable-avx            disable AVX optimizations
251   --disable-armv5te        disable armv5te optimizations
252   --disable-armv6          disable armv6 optimizations
253   --disable-armv6t2        disable armv6t2 optimizations
254   --disable-armvfp         disable ARM VFP optimizations
255   --disable-iwmmxt         disable iwmmxt optimizations
256   --disable-mmi            disable MMI optimizations
257   --disable-neon           disable NEON optimizations
258   --disable-vis            disable VIS optimizations
259   --disable-yasm           disable use of yasm assembler
260   --enable-pic             build position-independent code
261   --malloc-prefix=PFX      prefix malloc and related names with PFX
262   --enable-sram            allow use of on-chip SRAM
263   --disable-symver         disable symbol versioning
264   --optflags               override optimization-related compiler flags
265   --postproc-version=V     build libpostproc version V.
266                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
267
268 Developer options (useful when working on FFmpeg itself):
269   --enable-coverage        build with test coverage instrumentation
270   --disable-debug          disable debugging symbols
271   --enable-debug=LEVEL     set the debug level [$debuglevel]
272   --disable-optimizations  disable compiler optimizations
273   --enable-extra-warnings  enable more compiler warnings
274   --disable-stripping      disable stripping of executables and shared libraries
275   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
276                            leaks and errors, using the specified valgrind binary.
277                            Cannot be combined with --target-exec
278   --samples=PATH           location of test samples for FATE, if not set use
279                            \$FATE_SAMPLES at make invocation time.
280
281 NOTE: Object files are built at the place where configure is launched.
282 EOF
283   exit 0
284 }
285
286 quotes='""'
287
288 log(){
289     echo "$@" >> $logfile
290 }
291
292 log_file(){
293     log BEGIN $1
294     pr -n -t $1 >> $logfile
295     log END $1
296 }
297
298 echolog(){
299     log "$@"
300     echo "$@"
301 }
302
303 warn(){
304     log "WARNING: $*"
305     WARNINGS="${WARNINGS}WARNING: $*\n"
306 }
307
308 die(){
309     echolog "$@"
310     cat <<EOF
311
312 If you think configure made a mistake, make sure you are using the latest
313 version from Git.  If the latest version fails, report the problem to the
314 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
315 EOF
316     if disabled logging; then
317         cat <<EOF
318 Rerun configure with logging enabled (do not use --disable-logging), and
319 include the log this produces with your report.
320 EOF
321     else
322 cat <<EOF
323 Include the log file "$logfile" produced by configure as this will help
324 solving the problem.
325 EOF
326     fi
327     exit 1
328 }
329
330 # Avoid locale weirdness, besides we really just want to translate ASCII.
331 toupper(){
332     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
333 }
334
335 tolower(){
336     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
337 }
338
339 c_escape(){
340     echo "$*" | sed 's/["\\]/\\\0/g'
341 }
342
343 sh_quote(){
344     v=$(echo "$1" | sed "s/'/'\\\\''/g")
345     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
346     echo "$v"
347 }
348
349 cleanws(){
350     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
351 }
352
353 filter(){
354     pat=$1
355     shift
356     for v; do
357         eval "case $v in $pat) echo $v ;; esac"
358     done
359 }
360
361 filter_out(){
362     pat=$1
363     shift
364     for v; do
365         eval "case $v in $pat) ;; *) echo $v ;; esac"
366     done
367 }
368
369 map(){
370     m=$1
371     shift
372     for v; do eval $m; done
373 }
374
375 set_all(){
376     value=$1
377     shift
378     for var in $*; do
379         eval $var=$value
380     done
381 }
382
383 set_weak(){
384     value=$1
385     shift
386     for var; do
387         eval : \${$var:=$value}
388     done
389 }
390
391 set_safe(){
392     var=$1
393     shift
394     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
395 }
396
397 get_safe(){
398     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
399 }
400
401 pushvar(){
402     for var in $*; do
403         eval level=\${${var}_level:=0}
404         eval ${var}_${level}="\$$var"
405         eval ${var}_level=$(($level+1))
406     done
407 }
408
409 popvar(){
410     for var in $*; do
411         eval level=\${${var}_level:-0}
412         test $level = 0 && continue
413         eval level=$(($level-1))
414         eval $var="\${${var}_${level}}"
415         eval ${var}_level=$level
416         eval unset ${var}_${level}
417     done
418 }
419
420 enable(){
421     set_all yes $*
422 }
423
424 disable(){
425     set_all no $*
426 }
427
428 enable_weak(){
429     set_weak yes $*
430 }
431
432 disable_weak(){
433     set_weak no $*
434 }
435
436 enable_safe(){
437     for var; do
438         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
439     done
440 }
441
442 disable_safe(){
443     for var; do
444         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
445     done
446 }
447
448 do_enable_deep(){
449     for var; do
450         enabled $var && continue
451         eval sel="\$${var}_select"
452         eval sgs="\$${var}_suggest"
453         pushvar var sgs
454         enable_deep $sel
455         popvar sgs
456         enable_deep_weak $sgs
457         popvar var
458     done
459 }
460
461 enable_deep(){
462     do_enable_deep $*
463     enable $*
464 }
465
466 enable_deep_weak(){
467     do_enable_deep $*
468     enable_weak $*
469 }
470
471 enabled(){
472     test "${1#!}" = "$1" && op== || op=!=
473     eval test "x\$${1#!}" $op "xyes"
474 }
475
476 disabled(){
477     test "${1#!}" = "$1" && op== || op=!=
478     eval test "x\$${1#!}" $op "xno"
479 }
480
481 enabled_all(){
482     for opt; do
483         enabled $opt || return 1
484     done
485 }
486
487 disabled_all(){
488     for opt; do
489         disabled $opt || return 1
490     done
491 }
492
493 enabled_any(){
494     for opt; do
495         enabled $opt && return 0
496     done
497 }
498
499 disabled_any(){
500     for opt; do
501         disabled $opt && return 0
502     done
503     return 1
504 }
505
506 set_default(){
507     for opt; do
508         eval : \${$opt:=\$${opt}_default}
509     done
510 }
511
512 is_in(){
513     value=$1
514     shift
515     for var in $*; do
516         [ $var = $value ] && return 0
517     done
518     return 1
519 }
520
521 check_deps(){
522     for cfg; do
523         cfg="${cfg#!}"
524         enabled ${cfg}_checking && die "Circular dependency for $cfg."
525         disabled ${cfg}_checking && continue
526         enable ${cfg}_checking
527
528         eval dep_all="\$${cfg}_deps"
529         eval dep_any="\$${cfg}_deps_any"
530         eval dep_sel="\$${cfg}_select"
531         eval dep_sgs="\$${cfg}_suggest"
532         eval dep_ifa="\$${cfg}_if"
533         eval dep_ifn="\$${cfg}_if_any"
534
535         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
536         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
537         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
538
539         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
540         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
541         enabled_all  $dep_all || disable $cfg
542         enabled_any  $dep_any || disable $cfg
543         disabled_any $dep_sel && disable $cfg
544
545         if enabled $cfg; then
546             eval dep_extralibs="\$${cfg}_extralibs"
547             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
548             enable_deep $dep_sel
549             enable_deep_weak $dep_sgs
550         fi
551
552         disable ${cfg}_checking
553     done
554 }
555
556 print_config_h(){
557     enabled $1 && v=1 || v=0
558     echo "#define $2 $v"
559 }
560
561 print_config_mak(){
562     enabled $1 && v= || v=!
563     echo "$v$2=yes"
564 }
565
566 print_config_asm(){
567     enabled $1 && echo "%define $2"
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     avconv
1001     avplay
1002     avprobe
1003     avserver
1004     aandct
1005     ac3dsp
1006     avcodec
1007     avdevice
1008     avfilter
1009     avformat
1010     avisynth
1011     bzlib
1012     crystalhd
1013     dct
1014     doc
1015     dwt
1016     dxva2
1017     fastdiv
1018     fft
1019     frei0r
1020     gnutls
1021     golomb
1022     gpl
1023     gray
1024     h264chroma
1025     h264dsp
1026     h264pred
1027     hardcoded_tables
1028     huffman
1029     libaacplus
1030     libass
1031     libcdio
1032     libcelt
1033     libdc1394
1034     libdirac
1035     libfaac
1036     libfreetype
1037     libgsm
1038     libmodplug
1039     libmp3lame
1040     libnut
1041     libopencore_amrnb
1042     libopencore_amrwb
1043     libopencv
1044     libopenjpeg
1045     libpulse
1046     librtmp
1047     libschroedinger
1048     libspeex
1049     libstagefright_h264
1050     libtheora
1051     libutvideo
1052     libv4l2
1053     libvo_aacenc
1054     libvo_amrwbenc
1055     libvorbis
1056     libvpx
1057     libx264
1058     libxavs
1059     libxvid
1060     lpc
1061     lsp
1062     mdct
1063     memalign_hack
1064     mlib
1065     mpegaudiodsp
1066     network
1067     nonfree
1068     openal
1069     openssl
1070     pic
1071     postproc
1072     rdft
1073     rtpdec
1074     runtime_cpudetect
1075     safe_bitstream_reader
1076     shared
1077     sinewin
1078     small
1079     sram
1080     static
1081     swresample
1082     swscale
1083     swscale_alpha
1084     thumb
1085     vaapi
1086     vda
1087     vdpau
1088     version3
1089     x11grab
1090     zlib
1091 "
1092
1093 THREADS_LIST='
1094     pthreads
1095     w32threads
1096     os2threads
1097 '
1098
1099 ARCH_LIST='
1100     alpha
1101     arm
1102     avr32
1103     avr32_ap
1104     avr32_uc
1105     bfin
1106     ia64
1107     m68k
1108     mips
1109     mips64
1110     parisc
1111     ppc
1112     ppc64
1113     s390
1114     sh4
1115     sparc
1116     sparc64
1117     tomi
1118     x86
1119     x86_32
1120     x86_64
1121 '
1122
1123 ARCH_EXT_LIST='
1124     altivec
1125     amd3dnow
1126     amd3dnowext
1127     armv5te
1128     armv6
1129     armv6t2
1130     armvfp
1131     avx
1132     iwmmxt
1133     mmi
1134     mmx
1135     mmx2
1136     neon
1137     ppc4xx
1138     sse
1139     ssse3
1140     vfpv3
1141     vis
1142 '
1143
1144 HAVE_LIST_PUB='
1145     bigendian
1146     fast_unaligned
1147 '
1148
1149 HAVE_LIST="
1150     $ARCH_EXT_LIST
1151     $HAVE_LIST_PUB
1152     $THREADS_LIST
1153     aligned_stack
1154     alsa_asoundlib_h
1155     altivec_h
1156     arpa_inet_h
1157     asm_mod_y
1158     asm_types_h
1159     attribute_may_alias
1160     attribute_packed
1161     cbrtf
1162     closesocket
1163     cmov
1164     dcbzl
1165     dev_bktr_ioctl_bt848_h
1166     dev_bktr_ioctl_meteor_h
1167     dev_ic_bt8xx_h
1168     dev_video_bktr_ioctl_bt848_h
1169     dev_video_meteor_ioctl_meteor_h
1170     dlfcn_h
1171     dlopen
1172     dos_paths
1173     ebp_available
1174     ebx_available
1175     exp2
1176     exp2f
1177     fast_64bit
1178     fast_clz
1179     fast_cmov
1180     fcntl
1181     fork
1182     getaddrinfo
1183     gethrtime
1184     GetProcessAffinityMask
1185     GetProcessMemoryInfo
1186     GetProcessTimes
1187     getrusage
1188     gnu_as
1189     ibm_asm
1190     inet_aton
1191     inline_asm
1192     isatty
1193     kbhit
1194     ldbrx
1195     llrint
1196     llrintf
1197     local_aligned_16
1198     local_aligned_8
1199     localtime_r
1200     log2
1201     log2f
1202     loongson
1203     lrint
1204     lrintf
1205     lzo1x_999_compress
1206     machine_ioctl_bt848_h
1207     machine_ioctl_meteor_h
1208     makeinfo
1209     malloc_h
1210     MapViewOfFile
1211     memalign
1212     mkstemp
1213     mmap
1214     PeekNamedPipe
1215     poll_h
1216     posix_memalign
1217     round
1218     roundf
1219     sched_getaffinity
1220     sdl
1221     sdl_video_size
1222     setmode
1223     setrlimit
1224     sndio_h
1225     socklen_t
1226     soundcard_h
1227     strerror_r
1228     strptime
1229     struct_addrinfo
1230     struct_ipv6_mreq
1231     struct_rusage_ru_maxrss
1232     struct_sockaddr_in6
1233     struct_sockaddr_sa_len
1234     struct_sockaddr_storage
1235     struct_v4l2_frmivalenum_discrete
1236     symver
1237     symver_asm_label
1238     symver_gnu_asm
1239     sysconf
1240     sysctl
1241     sys_mman_h
1242     sys_param_h
1243     sys_resource_h
1244     sys_select_h
1245     sys_soundcard_h
1246     sys_videoio_h
1247     termios_h
1248     threads
1249     trunc
1250     truncf
1251     vfp_args
1252     VirtualAlloc
1253     winsock2_h
1254     xform_asm
1255     xmm_clobbers
1256     yasm
1257 "
1258
1259 # options emitted with CONFIG_ prefix but not available on command line
1260 CONFIG_EXTRA="
1261     avutil
1262     gplv3
1263     lgplv3
1264 "
1265
1266 CMDLINE_SELECT="
1267     $ARCH_EXT_LIST
1268     $CONFIG_LIST
1269     $THREADS_LIST
1270     asm
1271     coverage
1272     cross_compile
1273     debug
1274     extra_warnings
1275     logging
1276     optimizations
1277     stripping
1278     symver
1279     yasm
1280 "
1281
1282 PATHS_LIST='
1283     bindir
1284     datadir
1285     incdir
1286     libdir
1287     mandir
1288     prefix
1289     shlibdir
1290 '
1291
1292 CMDLINE_SET="
1293     $PATHS_LIST
1294     ar
1295     arch
1296     as
1297     build_suffix
1298     progs_suffix
1299     cc
1300     cpu
1301     cross_prefix
1302     cxx
1303     dep_cc
1304     extra_version
1305     host_cc
1306     host_cflags
1307     host_ldflags
1308     host_libs
1309     host_os
1310     install
1311     ld
1312     logfile
1313     malloc_prefix
1314     nm
1315     optflags
1316     pkg_config
1317     samples
1318     strip
1319     sysinclude
1320     sysroot
1321     target_exec
1322     target_os
1323     target_path
1324     postproc_version
1325     valgrind
1326     yasmexe
1327 "
1328
1329 CMDLINE_APPEND="
1330     extra_cflags
1331     extra_cxxflags
1332 "
1333
1334 # code dependency declarations
1335
1336 # architecture extensions
1337
1338 armv5te_deps="arm"
1339 armv6_deps="arm"
1340 armv6t2_deps="arm"
1341 armvfp_deps="arm"
1342 iwmmxt_deps="arm"
1343 neon_deps="arm"
1344 vfpv3_deps="armvfp"
1345
1346 mmi_deps="mips"
1347
1348 altivec_deps="ppc"
1349 ppc4xx_deps="ppc"
1350
1351 vis_deps="sparc"
1352
1353 x86_64_suggest="cmov fast_cmov"
1354 amd3dnow_deps="mmx"
1355 amd3dnowext_deps="amd3dnow"
1356 mmx_deps="x86"
1357 mmx2_deps="mmx"
1358 sse_deps="mmx"
1359 ssse3_deps="sse"
1360 avx_deps="ssse3"
1361
1362 aligned_stack_if_any="ppc x86"
1363 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1364 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1365 fast_unaligned_if_any="armv6 ppc x86"
1366
1367 inline_asm_deps="!tms470"
1368 need_memalign="altivec neon sse"
1369
1370 symver_if_any="symver_asm_label symver_gnu_asm"
1371
1372 # subsystems
1373 dct_select="rdft"
1374 mdct_select="fft"
1375 rdft_select="fft"
1376 mpegaudiodsp_select="dct"
1377
1378 # decoders / encoders / hardware accelerators
1379 aac_decoder_select="mdct sinewin"
1380 aac_encoder_select="mdct sinewin"
1381 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1382 ac3_decoder_select="mdct ac3dsp ac3_parser"
1383 ac3_encoder_select="mdct ac3dsp"
1384 ac3_fixed_encoder_select="mdct ac3dsp"
1385 alac_encoder_select="lpc"
1386 amrnb_decoder_select="lsp"
1387 amrwb_decoder_select="lsp"
1388 atrac1_decoder_select="mdct sinewin"
1389 atrac3_decoder_select="mdct"
1390 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1391 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1392 cavs_decoder_select="golomb"
1393 cook_decoder_select="mdct sinewin"
1394 cscd_decoder_suggest="zlib"
1395 dca_decoder_select="mdct"
1396 dnxhd_encoder_select="aandct"
1397 dxa_decoder_select="zlib"
1398 eac3_decoder_select="ac3_decoder"
1399 eac3_encoder_select="mdct ac3dsp"
1400 eamad_decoder_select="aandct"
1401 eatgq_decoder_select="aandct"
1402 eatqi_decoder_select="aandct"
1403 ffv1_decoder_select="golomb"
1404 flac_decoder_select="golomb"
1405 flac_encoder_select="golomb lpc"
1406 flashsv_decoder_select="zlib"
1407 flashsv_encoder_select="zlib"
1408 flashsv2_encoder_select="zlib"
1409 flashsv2_decoder_select="zlib"
1410 flv_decoder_select="h263_decoder"
1411 flv_encoder_select="h263_encoder"
1412 fraps_decoder_select="huffman"
1413 h261_encoder_select="aandct"
1414 h263_decoder_select="h263_parser"
1415 h263_encoder_select="aandct"
1416 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1417 h263i_decoder_select="h263_decoder"
1418 h263p_encoder_select="h263_encoder"
1419 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1420 h264_decoder_select="golomb h264chroma h264dsp h264pred"
1421 h264_dxva2_hwaccel_deps="dxva2api_h"
1422 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1423 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1424 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1425 h264_vda_hwaccel_select="vda h264_decoder"
1426 h264_vdpau_decoder_select="vdpau h264_decoder"
1427 imc_decoder_select="fft mdct sinewin"
1428 jpegls_decoder_select="golomb"
1429 jpegls_encoder_select="golomb"
1430 ljpeg_encoder_select="aandct"
1431 loco_decoder_select="golomb"
1432 mjpeg_encoder_select="aandct"
1433 mlp_decoder_select="mlp_parser"
1434 mp1_decoder_select="mpegaudiodsp"
1435 mp1float_decoder_select="mpegaudiodsp"
1436 mp2_decoder_select="mpegaudiodsp"
1437 mp2float_decoder_select="mpegaudiodsp"
1438 mp3_decoder_select="mpegaudiodsp"
1439 mp3adu_decoder_select="mpegaudiodsp"
1440 mp3adufloat_decoder_select="mpegaudiodsp"
1441 mp3float_decoder_select="mpegaudiodsp"
1442 mp3on4_decoder_select="mpegaudiodsp"
1443 mp3on4float_decoder_select="mpegaudiodsp"
1444 mpc7_decoder_select="mpegaudiodsp"
1445 mpc8_decoder_select="mpegaudiodsp"
1446 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1447 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1448 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1449 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1450 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1451 mpeg1video_encoder_select="aandct"
1452 mpeg2_crystalhd_decoder_select="crystalhd"
1453 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1454 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1455 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1456 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1457 mpeg2video_encoder_select="aandct"
1458 mpeg4_crystalhd_decoder_select="crystalhd"
1459 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1460 mpeg4_encoder_select="h263_encoder"
1461 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1462 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1463 msmpeg4_crystalhd_decoder_select="crystalhd"
1464 msmpeg4v1_decoder_select="h263_decoder"
1465 msmpeg4v1_encoder_select="h263_encoder"
1466 msmpeg4v2_decoder_select="h263_decoder"
1467 msmpeg4v2_encoder_select="h263_encoder"
1468 msmpeg4v3_decoder_select="h263_decoder"
1469 msmpeg4v3_encoder_select="h263_encoder"
1470 nellymoser_decoder_select="mdct sinewin"
1471 nellymoser_encoder_select="mdct sinewin"
1472 png_decoder_select="zlib"
1473 png_encoder_select="zlib"
1474 qcelp_decoder_select="lsp"
1475 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1476 ra_144_encoder_select="lpc"
1477 rv10_decoder_select="h263_decoder"
1478 rv10_encoder_select="h263_encoder"
1479 rv20_decoder_select="h263_decoder"
1480 rv20_encoder_select="h263_encoder"
1481 rv30_decoder_select="golomb h264chroma h264pred"
1482 rv40_decoder_select="golomb h264chroma h264pred"
1483 shorten_decoder_select="golomb"
1484 sipr_decoder_select="lsp"
1485 snow_decoder_select="dwt"
1486 snow_encoder_select="aandct dwt"
1487 sonic_decoder_select="golomb"
1488 sonic_encoder_select="golomb"
1489 sonic_ls_encoder_select="golomb"
1490 svq1_encoder_select="aandct"
1491 svq3_decoder_select="golomb h264chroma h264dsp h264pred"
1492 svq3_decoder_suggest="zlib"
1493 theora_decoder_select="vp3_decoder"
1494 tiff_decoder_suggest="zlib"
1495 tiff_encoder_suggest="zlib"
1496 truehd_decoder_select="mlp_decoder"
1497 tscc_decoder_select="zlib"
1498 twinvq_decoder_select="mdct lsp sinewin"
1499 vc1_crystalhd_decoder_select="crystalhd"
1500 vc1_decoder_select="h263_decoder h264chroma"
1501 vc1_dxva2_hwaccel_deps="dxva2api_h"
1502 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1503 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1504 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1505 vc1image_decoder_select="vc1_decoder"
1506 vorbis_decoder_select="mdct"
1507 vorbis_encoder_select="mdct"
1508 vp6_decoder_select="huffman"
1509 vp6a_decoder_select="vp6_decoder"
1510 vp6f_decoder_select="vp6_decoder"
1511 vp8_decoder_select="h264pred"
1512 wmapro_decoder_select="mdct sinewin"
1513 wmav1_decoder_select="mdct sinewin"
1514 wmav1_encoder_select="mdct sinewin"
1515 wmav2_decoder_select="mdct sinewin"
1516 wmav2_encoder_select="mdct sinewin"
1517 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1518 wmv1_decoder_select="h263_decoder"
1519 wmv1_encoder_select="h263_encoder"
1520 wmv2_decoder_select="h263_decoder"
1521 wmv2_encoder_select="h263_encoder"
1522 wmv3_decoder_select="vc1_decoder"
1523 wmv3_crystalhd_decoder_select="crystalhd"
1524 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1525 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1526 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1527 wmv3image_decoder_select="wmv3_decoder"
1528 zlib_decoder_select="zlib"
1529 zlib_encoder_select="zlib"
1530 zmbv_decoder_select="zlib"
1531 zmbv_encoder_select="zlib"
1532
1533 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1534 vaapi_deps="va_va_h"
1535 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1536 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1537
1538 # parsers
1539 h264_parser_select="golomb h264chroma h264dsp h264pred"
1540
1541 # external libraries
1542 libaacplus_encoder_deps="libaacplus"
1543 libcelt_decoder_deps="libcelt"
1544 libdirac_decoder_deps="libdirac !libschroedinger"
1545 libdirac_encoder_deps="libdirac"
1546 libfaac_encoder_deps="libfaac"
1547 libgsm_decoder_deps="libgsm"
1548 libgsm_encoder_deps="libgsm"
1549 libgsm_ms_decoder_deps="libgsm"
1550 libgsm_ms_encoder_deps="libgsm"
1551 libmodplug_demuxer_deps="libmodplug"
1552 libmp3lame_encoder_deps="libmp3lame"
1553 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1554 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1555 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1556 libopenjpeg_decoder_deps="libopenjpeg"
1557 libopenjpeg_encoder_deps="libopenjpeg"
1558 libschroedinger_decoder_deps="libschroedinger"
1559 libschroedinger_encoder_deps="libschroedinger"
1560 libspeex_decoder_deps="libspeex"
1561 libspeex_encoder_deps="libspeex"
1562 libstagefright_h264_decoder_deps="libstagefright_h264"
1563 libtheora_encoder_deps="libtheora"
1564 libvo_aacenc_encoder_deps="libvo_aacenc"
1565 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1566 libvorbis_encoder_deps="libvorbis"
1567 libvpx_decoder_deps="libvpx"
1568 libvpx_encoder_deps="libvpx"
1569 libx264_encoder_deps="libx264"
1570 libx264rgb_encoder_deps="libx264"
1571 libxavs_encoder_deps="libxavs"
1572 libxvid_encoder_deps="libxvid"
1573 libutvideo_decoder_deps="libutvideo gpl"
1574
1575 # demuxers / muxers
1576 ac3_demuxer_select="ac3_parser"
1577 asf_stream_muxer_select="asf_muxer"
1578 avisynth_demuxer_deps="avisynth"
1579 dirac_demuxer_select="dirac_parser"
1580 eac3_demuxer_select="ac3_parser"
1581 flac_demuxer_select="flac_parser"
1582 ipod_muxer_select="mov_muxer"
1583 libnut_demuxer_deps="libnut"
1584 libnut_muxer_deps="libnut"
1585 matroska_audio_muxer_select="matroska_muxer"
1586 matroska_demuxer_suggest="zlib bzlib"
1587 mov_demuxer_suggest="zlib"
1588 mp3_demuxer_select="mpegaudio_parser"
1589 mp4_muxer_select="mov_muxer"
1590 mpegtsraw_demuxer_select="mpegts_demuxer"
1591 mxf_d10_muxer_select="mxf_muxer"
1592 ogg_demuxer_select="golomb"
1593 psp_muxer_select="mov_muxer"
1594 rtp_demuxer_select="sdp_demuxer"
1595 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1596 rtsp_demuxer_select="http_protocol rtpdec"
1597 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1598 sap_demuxer_select="sdp_demuxer"
1599 sap_muxer_select="rtp_muxer rtp_protocol"
1600 sdp_demuxer_select="rtpdec"
1601 spdif_muxer_select="aac_parser"
1602 tg2_muxer_select="mov_muxer"
1603 tgp_muxer_select="mov_muxer"
1604 w64_demuxer_deps="wav_demuxer"
1605
1606 # indevs / outdevs
1607 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1608 alsa_outdev_deps="alsa_asoundlib_h"
1609 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1610 dshow_indev_deps="IBaseFilter"
1611 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1612 dv1394_indev_deps="dv1394 dv_demuxer"
1613 fbdev_indev_deps="linux_fb_h"
1614 jack_indev_deps="jack_jack_h sem_timedwait"
1615 lavfi_indev_deps="avfilter"
1616 libcdio_indev_deps="libcdio"
1617 libdc1394_indev_deps="libdc1394"
1618 libv4l2_indev_deps="libv4l2"
1619 openal_indev_deps="openal"
1620 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1621 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1622 pulse_indev_deps="libpulse"
1623 sdl_outdev_deps="sdl"
1624 sndio_indev_deps="sndio_h"
1625 sndio_outdev_deps="sndio_h"
1626 v4l_indev_deps="linux_videodev_h"
1627 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1628 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1629 vfwcap_indev_extralibs="-lavicap32"
1630 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1631 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1632
1633 # protocols
1634 gopher_protocol_deps="network"
1635 httpproxy_protocol_deps="network"
1636 httpproxy_protocol_select="tcp_protocol"
1637 http_protocol_deps="network"
1638 http_protocol_select="tcp_protocol"
1639 https_protocol_select="tls_protocol"
1640 mmsh_protocol_select="http_protocol"
1641 mmst_protocol_deps="network"
1642 rtmp_protocol_select="tcp_protocol"
1643 rtp_protocol_select="udp_protocol"
1644 tcp_protocol_deps="network"
1645 tls_protocol_deps_any="openssl gnutls"
1646 tls_protocol_select="tcp_protocol"
1647 udp_protocol_deps="network"
1648
1649 # filters
1650 amovie_filter_deps="avcodec avformat"
1651 ass_filter_deps="libass"
1652 blackframe_filter_deps="gpl"
1653 boxblur_filter_deps="gpl"
1654 cropdetect_filter_deps="gpl"
1655 delogo_filter_deps="gpl"
1656 drawtext_filter_deps="libfreetype"
1657 frei0r_filter_deps="frei0r dlopen"
1658 frei0r_src_filter_deps="frei0r dlopen"
1659 hqdn3d_filter_deps="gpl"
1660 movie_filter_deps="avcodec avformat"
1661 mp_filter_deps="gpl avcodec"
1662 mptestsrc_filter_deps="gpl"
1663 negate_filter_deps="lut_filter"
1664 ocv_filter_deps="libopencv"
1665 pan_filter_deps="swresample"
1666 scale_filter_deps="swscale"
1667 tinterlace_filter_deps="gpl"
1668 yadif_filter_deps="gpl"
1669
1670 # libraries
1671 avdevice_deps="avcodec avformat"
1672 avformat_deps="avcodec"
1673 postproc_deps="gpl"
1674
1675 # programs
1676 avconv_deps="avcodec avformat swscale"
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 !shared"
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 libdc1394  && require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new
3137 enabled libdirac   && require_pkg_config dirac                          \
3138     "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
3139     "dirac_decoder_init dirac_encoder_init"
3140 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3141 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3142 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3143 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3144 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3145 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3146 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3147 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3148 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3149 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3150 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3151 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3152 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3153 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3154 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3155     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3156     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder
3157 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3158 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3159 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3160 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3161 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3162 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3163 enabled libvpx     && {
3164     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3165                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3166     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3167                                 die "ERROR: libvpx encoder version must be >=0.9.6"; } }
3168 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3169                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3170                         die "ERROR: libx264 version must be >= 0.118."; }
3171 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3172 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3173 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3174                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3175                         die "ERROR: openal not found"; } &&
3176                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3177                         die "ERROR: openal version must be 1.1 or compatible"; }
3178 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
3179 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3180                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3181                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3182                         die "ERROR: openssl not found"; }
3183
3184 SDL_CONFIG="${cross_prefix}sdl-config"
3185 if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
3186     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3187     enable sdl &&
3188     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3189 else
3190   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3191     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3192     sdl_libs=$("${SDL_CONFIG}" --libs)
3193     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
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   fi
3198 fi
3199 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3200
3201 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3202 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3203
3204 check_header linux/fb.h
3205 check_header linux/videodev.h
3206 check_header linux/videodev2.h
3207 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3208
3209 check_header sys/videoio.h
3210
3211 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3212 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3213 # w32api 3.12 had it defined wrong
3214 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3215
3216 check_type "dshow.h" IBaseFilter
3217
3218 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3219 { check_header dev/bktr/ioctl_meteor.h &&
3220   check_header dev/bktr/ioctl_bt848.h; } ||
3221 { check_header machine/ioctl_meteor.h &&
3222   check_header machine/ioctl_bt848.h; } ||
3223 { check_header dev/video/meteor/ioctl_meteor.h &&
3224   check_header dev/video/bktr/ioctl_bt848.h; } ||
3225 check_header dev/ic/bt8xx.h
3226
3227 check_header sndio.h
3228 if check_struct sys/soundcard.h audio_buf_info bytes; then
3229     enable_safe sys/soundcard.h
3230 else
3231     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3232     #include <sys/soundcard.h>
3233     audio_buf_info abc;
3234 EOF
3235 fi
3236 check_header soundcard.h
3237
3238 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3239
3240 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
3241
3242 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3243
3244 enabled libcdio &&
3245     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3246
3247 enabled x11grab                         &&
3248 check_header X11/Xlib.h                 &&
3249 check_header X11/extensions/XShm.h      &&
3250 check_header X11/extensions/Xfixes.h    &&
3251 check_func XOpenDisplay -lX11           &&
3252 check_func XShmCreateImage -lX11 -lXext &&
3253 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
3254
3255 if ! disabled vaapi; then
3256     check_lib va/va.h vaInitialize -lva && {
3257         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3258         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3259     } || disable vaapi
3260 fi
3261
3262 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3263 check_cpp_condition \
3264     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3265     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3266       disable vdpau; }
3267 fi
3268
3269 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3270 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3271 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"
3272
3273 # add some useful compiler flags if supported
3274 check_cflags -Wdeclaration-after-statement
3275 check_cflags -Wall
3276 check_cflags -Wno-parentheses
3277 check_cflags -Wno-switch
3278 check_cflags -Wno-format-zero-length
3279 check_cflags -Wdisabled-optimization
3280 check_cflags -Wpointer-arith
3281 check_cflags -Wredundant-decls
3282 check_cflags -Wno-pointer-sign
3283 check_cflags -Wcast-qual
3284 check_cflags -Wwrite-strings
3285 check_cflags -Wtype-limits
3286 check_cflags -Wundef
3287 check_cflags -Wmissing-prototypes
3288 check_cflags -Wno-pointer-to-int-cast
3289 check_cflags -Wstrict-prototypes
3290 enabled extra_warnings && check_cflags -Winline
3291
3292 # add some linker flags
3293 check_ldflags -Wl,--warn-common
3294 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
3295 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3296
3297 echo "X{};" > $TMPV
3298 if test_ldflags -Wl,--version-script,$TMPV; then
3299     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3300     check_cc <<EOF && enable symver_asm_label
3301 void ff_foo(void) __asm__ ("av_foo@VERSION");
3302 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3303 EOF
3304     check_cc <<EOF && enable symver_gnu_asm
3305 __asm__(".symver ff_foo,av_foo@VERSION");
3306 void ff_foo(void) {}
3307 EOF
3308 fi
3309
3310 if [ -n "$optflags" ]; then
3311     add_cflags $optflags
3312 elif enabled small; then
3313     add_cflags $size_cflags
3314 elif enabled optimizations; then
3315     add_cflags $speed_cflags
3316 else
3317     add_cflags $noopt_cflags
3318 fi
3319 check_cflags -fno-math-errno
3320 check_cflags -fno-signed-zeros
3321 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3322 int x;
3323 EOF
3324
3325
3326 if enabled icc; then
3327     # Just warnings, no remarks
3328     check_cflags -w1
3329     # -wd: Disable following warnings
3330     # 144, 167, 556: -Wno-pointer-sign
3331     # 1292: attribute "foo" ignored
3332     # 10006: ignoring unknown option -fno-signed-zeros
3333     # 10148: ignoring unknown option -Wno-parentheses
3334     # 10156: ignoring option '-W'; no argument required
3335     check_cflags -wd144,167,556,1292,10006,10148,10156
3336     # 11030: Warning unknown option --as-needed
3337     # 10156: ignoring option '-export'; no argument required
3338     check_ldflags -wd10156,11030
3339     # Allow to compile with optimizations
3340     check_ldflags -march=$cpu
3341     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3342     enable ebp_available
3343     if enabled x86_32; then
3344         test ${icc_version%%.*} -ge 11 && \
3345             check_cflags -falign-stack=maintain-16-byte || \
3346             disable aligned_stack
3347     fi
3348 elif enabled ccc; then
3349     # disable some annoying warnings
3350     add_cflags -msg_disable cvtu32to64
3351     add_cflags -msg_disable embedcomment
3352     add_cflags -msg_disable needconstext
3353     add_cflags -msg_disable nomainieee
3354     add_cflags -msg_disable ptrmismatch1
3355     add_cflags -msg_disable unreachcode
3356 elif enabled gcc; then
3357     check_cflags -fno-tree-vectorize
3358     check_cflags -Werror=implicit-function-declaration
3359     check_cflags -Werror=missing-prototypes
3360 elif enabled llvm_gcc; then
3361     check_cflags -mllvm -stack-alignment=16
3362 elif enabled clang; then
3363     check_cflags -mllvm -stack-alignment=16
3364     check_cflags -Qunused-arguments
3365 elif enabled armcc; then
3366     # 2523: use of inline assembler is deprecated
3367     add_cflags -W${armcc_opt},--diag_suppress=2523
3368     add_cflags -W${armcc_opt},--diag_suppress=1207
3369     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3370     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3371     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3372     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3373 elif enabled tms470; then
3374     add_cflags -pds=824 -pds=837
3375 elif enabled pathscale; then
3376     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3377 fi
3378
3379 enabled_any $THREADS_LIST      && enable threads
3380
3381 check_deps $CONFIG_LIST       \
3382            $CONFIG_EXTRA      \
3383            $HAVE_LIST         \
3384            $ALL_COMPONENTS    \
3385            $ALL_TESTS         \
3386
3387 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3388
3389 if test $target_os = "haiku"; then
3390     disable memalign
3391     disable posix_memalign
3392 fi
3393
3394 ! enabled_any memalign posix_memalign malloc_aligned &&
3395     enabled_any $need_memalign && enable memalign_hack
3396
3397 echo "install prefix            $prefix"
3398 echo "source path               $source_path"
3399 echo "C compiler                $cc"
3400 echo "ARCH                      $arch ($cpu)"
3401 if test "$build_suffix" != ""; then
3402     echo "build suffix              $build_suffix"
3403 fi
3404 if test "$progs_suffix" != ""; then
3405     echo "progs suffix              $progs_suffix"
3406 fi
3407 if test "$extra_version" != ""; then
3408     echo "version string suffix     $extra_version"
3409 fi
3410 echo "big-endian                ${bigendian-no}"
3411 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3412 if enabled x86; then
3413     echo "${yasmexe}                      ${yasm-no}"
3414     echo "MMX enabled               ${mmx-no}"
3415     echo "MMX2 enabled              ${mmx2-no}"
3416     echo "3DNow! enabled            ${amd3dnow-no}"
3417     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3418     echo "SSE enabled               ${sse-no}"
3419     echo "SSSE3 enabled             ${ssse3-no}"
3420     echo "AVX enabled               ${avx-no}"
3421     echo "CMOV enabled              ${cmov-no}"
3422     echo "CMOV is fast              ${fast_cmov-no}"
3423     echo "EBX available             ${ebx_available-no}"
3424     echo "EBP available             ${ebp_available-no}"
3425 fi
3426 if enabled arm; then
3427     echo "ARMv5TE enabled           ${armv5te-no}"
3428     echo "ARMv6 enabled             ${armv6-no}"
3429     echo "ARMv6T2 enabled           ${armv6t2-no}"
3430     echo "ARM VFP enabled           ${armvfp-no}"
3431     echo "IWMMXT enabled            ${iwmmxt-no}"
3432     echo "NEON enabled              ${neon-no}"
3433 fi
3434 if enabled mips; then
3435     echo "MMI enabled               ${mmi-no}"
3436 fi
3437 if enabled ppc; then
3438     echo "AltiVec enabled           ${altivec-no}"
3439     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3440     echo "dcbzl available           ${dcbzl-no}"
3441 fi
3442 if enabled sparc; then
3443     echo "VIS enabled               ${vis-no}"
3444 fi
3445 echo "debug symbols             ${debug-no}"
3446 echo "strip symbols             ${stripping-no}"
3447 echo "optimize for size         ${small-no}"
3448 echo "optimizations             ${optimizations-no}"
3449 echo "static                    ${static-no}"
3450 echo "shared                    ${shared-no}"
3451 echo "postprocessing support    ${postproc-no}"
3452 echo "new filter support        ${avfilter-no}"
3453 echo "network support           ${network-no}"
3454 echo "threading support         ${thread_type-no}"
3455 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3456 echo "SDL support               ${sdl-no}"
3457 echo "Sun medialib support      ${mlib-no}"
3458 echo "libdxva2 enabled          ${dxva2-no}"
3459 echo "libva enabled             ${vaapi-no}"
3460 echo "libvdpau enabled          ${vdpau-no}"
3461 echo "AVISynth enabled          ${avisynth-no}"
3462 echo "frei0r enabled            ${frei0r-no}"
3463 echo "gnutls enabled            ${gnutls-no}"
3464 echo "libaacplus enabled        ${libaacplus-no}"
3465 echo "libass enabled            ${libass-no}"
3466 echo "libcdio support           ${libcdio-no}"
3467 echo "libcelt enabled           ${libcelt-no}"
3468 echo "libdc1394 support         ${libdc1394-no}"
3469 echo "libdirac enabled          ${libdirac-no}"
3470 echo "libfaac enabled           ${libfaac-no}"
3471 echo "libgsm enabled            ${libgsm-no}"
3472 echo "libmodplug enabled        ${libmodplug-no}"
3473 echo "libmp3lame enabled        ${libmp3lame-no}"
3474 echo "libnut enabled            ${libnut-no}"
3475 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3476 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3477 echo "libopencv support         ${libopencv-no}"
3478 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3479 echo "libpulse enabled          ${libpulse-no}"
3480 echo "librtmp enabled           ${librtmp-no}"
3481 echo "libschroedinger enabled   ${libschroedinger-no}"
3482 echo "libspeex enabled          ${libspeex-no}"
3483 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3484 echo "libtheora enabled         ${libtheora-no}"
3485 echo "libutvideo enabled        ${libutvideo-no}"
3486 echo "libv4l2 enabled           ${libv4l2-no}"
3487 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3488 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3489 echo "libvorbis enabled         ${libvorbis-no}"
3490 echo "libvpx enabled            ${libvpx-no}"
3491 echo "libx264 enabled           ${libx264-no}"
3492 echo "libxavs enabled           ${libxavs-no}"
3493 echo "libxvid enabled           ${libxvid-no}"
3494 echo "openal enabled            ${openal-no}"
3495 echo "openssl enabled           ${openssl-no}"
3496 echo "zlib enabled              ${zlib-no}"
3497 echo "bzlib enabled             ${bzlib-no}"
3498 echo
3499
3500 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3501     echo "Enabled ${type}s:"
3502     eval list=\$$(toupper $type)_LIST
3503     print_enabled '_*' $list | sort | pr -r -3 -t
3504     echo
3505 done
3506
3507 license="LGPL version 2.1 or later"
3508 if enabled nonfree; then
3509     license="nonfree and unredistributable"
3510 elif enabled gplv3; then
3511     license="GPL version 3 or later"
3512 elif enabled lgplv3; then
3513     license="LGPL version 3 or later"
3514 elif enabled gpl; then
3515     license="GPL version 2 or later"
3516 fi
3517
3518 echo "License: $license"
3519
3520 echo "Creating config.mak and config.h..."
3521
3522 test -e Makefile || $ln_s "$source_path/Makefile" .
3523
3524 enabled stripping || strip="echo skipping strip"
3525
3526 config_files="$TMPH config.mak"
3527
3528 cat > config.mak <<EOF
3529 # Automatically generated by configure - do not modify!
3530 ifndef FFMPEG_CONFIG_MAK
3531 FFMPEG_CONFIG_MAK=1
3532 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3533 prefix=$prefix
3534 LIBDIR=\$(DESTDIR)$libdir
3535 SHLIBDIR=\$(DESTDIR)$shlibdir
3536 INCDIR=\$(DESTDIR)$incdir
3537 BINDIR=\$(DESTDIR)$bindir
3538 DATADIR=\$(DESTDIR)$datadir
3539 MANDIR=\$(DESTDIR)$mandir
3540 SRC_PATH=$source_path
3541 ifndef MAIN_MAKEFILE
3542 SRC_PATH:=\$(SRC_PATH:.%=..%)
3543 endif
3544 CC_IDENT=$cc_ident
3545 ARCH=$arch
3546 CC=$cc
3547 CXX=$cxx
3548 AS=$as
3549 LD=$ld
3550 DEPCC=$dep_cc
3551 YASM=$yasmexe
3552 YASMDEP=$yasmexe
3553 AR=$ar
3554 RANLIB=$ranlib
3555 CP=cp -p
3556 LN_S=$ln_s
3557 STRIP=$strip
3558 CPPFLAGS=$CPPFLAGS
3559 CFLAGS=$CFLAGS
3560 CXXFLAGS=$CXXFLAGS
3561 ASFLAGS=$ASFLAGS
3562 AS_O=$CC_O
3563 CC_O=$CC_O
3564 CXX_O=$CXX_O
3565 LDFLAGS=$LDFLAGS
3566 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3567 SHFLAGS=$SHFLAGS
3568 YASMFLAGS=$YASMFLAGS
3569 BUILDSUF=$build_suffix
3570 PROGSSUF=$progs_suffix
3571 FULLNAME=$FULLNAME
3572 LIBPREF=$LIBPREF
3573 LIBSUF=$LIBSUF
3574 LIBNAME=$LIBNAME
3575 SLIBPREF=$SLIBPREF
3576 SLIBSUF=$SLIBSUF
3577 EXESUF=$EXESUF
3578 EXTRA_VERSION=$extra_version
3579 DEPFLAGS=$DEPFLAGS
3580 CCDEP=$CCDEP
3581 CXXDEP=$CXXDEP
3582 ASDEP=$ASDEP
3583 CC_DEPFLAGS=$CC_DEPFLAGS
3584 AS_DEPFLAGS=$AS_DEPFLAGS
3585 HOSTCC=$host_cc
3586 HOSTCFLAGS=$host_cflags
3587 HOSTEXESUF=$HOSTEXESUF
3588 HOSTLDFLAGS=$host_ldflags
3589 HOSTLIBS=$host_libs
3590 TARGET_EXEC=$target_exec
3591 TARGET_PATH=$target_path
3592 SDL_LIBS=$sdl_libs
3593 SDL_CFLAGS=$sdl_cflags
3594 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3595 EXTRALIBS=$extralibs
3596 INSTALL=$install
3597 LIBTARGET=${LIBTARGET}
3598 SLIBNAME=${SLIBNAME}
3599 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3600 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3601 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3602 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3603 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3604 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3605 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3606 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3607 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3608 NOREDZONE_FLAGS=$noredzone_flags
3609 EOF
3610
3611 get_version(){
3612     name=$1
3613     file=$source_path/$2
3614 # This condition will be removed when we stop supporting old libpostproc versions
3615 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3616     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3617     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3618 fi
3619     lcname=$(tolower $name)
3620     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3621     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3622 }
3623
3624 get_version LIBAVCODEC  libavcodec/version.h
3625 get_version LIBAVDEVICE libavdevice/avdevice.h
3626 get_version LIBAVFILTER libavfilter/version.h
3627 get_version LIBAVFORMAT libavformat/version.h
3628 get_version LIBAVUTIL   libavutil/avutil.h
3629 get_version LIBPOSTPROC libpostproc/postprocess.h
3630 get_version LIBSWRESAMPLE libswresample/swresample.h
3631 get_version LIBSWSCALE  libswscale/swscale.h
3632
3633 cat > $TMPH <<EOF
3634 /* Automatically generated by configure - do not modify! */
3635 #ifndef FFMPEG_CONFIG_H
3636 #define FFMPEG_CONFIG_H
3637 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3638 #define FFMPEG_LICENSE "$(c_escape $license)"
3639 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3640 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3641 #define CC_TYPE "$cc_type"
3642 #define CC_VERSION $cc_version
3643 #define restrict $_restrict
3644 #define EXTERN_PREFIX "${extern_prefix}"
3645 #define EXTERN_ASM ${extern_prefix}
3646 #define SLIBSUF "$SLIBSUF"
3647 EOF
3648
3649 test -n "$malloc_prefix" &&
3650     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3651
3652 if enabled small || disabled optimizations; then
3653     echo "#undef  av_always_inline"  >> $TMPH
3654     if enabled small; then
3655         echo "#define av_always_inline inline"  >> $TMPH
3656     else
3657         echo "#define av_always_inline av_unused"  >> $TMPH
3658     fi
3659 fi
3660
3661 if enabled yasm; then
3662     append config_files $TMPASM
3663     printf '' >$TMPASM
3664 fi
3665
3666 print_config ARCH_   "$config_files" $ARCH_LIST
3667 print_config HAVE_   "$config_files" $HAVE_LIST
3668 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3669                                      $CONFIG_EXTRA      \
3670                                      $ALL_COMPONENTS    \
3671
3672 cat >>config.mak <<EOF
3673 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3674 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3675 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3676 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3677 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3678 EOF
3679
3680 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3681 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3682
3683 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3684 cp_if_changed $TMPH config.h
3685 touch .config
3686
3687 enabled yasm && cp_if_changed $TMPASM config.asm
3688
3689 cat > $TMPH <<EOF
3690 /* Generated by ffconf */
3691 #ifndef AVUTIL_AVCONFIG_H
3692 #define AVUTIL_AVCONFIG_H
3693 EOF
3694
3695 test "$postproc_version" != current && cat >> $TMPH <<EOF
3696 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
3697 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
3698 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
3699 EOF
3700
3701 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3702
3703 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3704
3705 cp_if_changed $TMPH libavutil/avconfig.h
3706
3707 test -n "$WARNINGS" && printf "\n$WARNINGS"
3708
3709 # build pkg-config files
3710
3711 pkgconfig_generate(){
3712 name=$1
3713 shortname=${name#lib}${build_suffix}
3714 comment=$2
3715 version=$3
3716 libs=$4
3717 requires=$5
3718 enabled ${name#lib} || return 0
3719 mkdir -p $name
3720 cat <<EOF > $name/$name.pc
3721 prefix=$prefix
3722 exec_prefix=\${prefix}
3723 libdir=$libdir
3724 includedir=$incdir
3725
3726 Name: $name
3727 Description: $comment
3728 Version: $version
3729 Requires: $(enabled shared || echo $requires)
3730 Requires.private: $(enabled shared && echo $requires)
3731 Conflicts:
3732 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3733 Libs.private: $(enabled shared && echo $libs)
3734 Cflags: -I\${includedir}
3735 EOF
3736 cat <<EOF > $name/$name-uninstalled.pc
3737 prefix=
3738 exec_prefix=
3739 libdir=\${pcfiledir}
3740 includedir=${source_path}
3741
3742 Name: $name
3743 Description: $comment
3744 Version: $version
3745 Requires: $requires
3746 Conflicts:
3747 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3748 Cflags: -I\${includedir}
3749 EOF
3750 }
3751
3752 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3753 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3754 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3755 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3756 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3757 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3758 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
3759 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"