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