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