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