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