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