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