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