]> git.sesse.net Git - ffmpeg/blob - configure
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 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 cropdetect_filter_deps="gpl"
1674 delogo_filter_deps="gpl"
1675 drawtext_filter_deps="libfreetype"
1676 frei0r_filter_deps="frei0r dlopen"
1677 frei0r_src_filter_deps="frei0r dlopen"
1678 hqdn3d_filter_deps="gpl"
1679 movie_filter_deps="avcodec avformat"
1680 mp_filter_deps="gpl avcodec swscale postproc"
1681 mptestsrc_filter_deps="gpl"
1682 negate_filter_deps="lut_filter"
1683 ocv_filter_deps="libopencv"
1684 pan_filter_deps="swresample"
1685 scale_filter_deps="swscale"
1686 tinterlace_filter_deps="gpl"
1687 yadif_filter_deps="gpl"
1688
1689 # libraries
1690 avdevice_deps="avcodec avformat"
1691 avformat_deps="avcodec"
1692 postproc_deps="gpl"
1693
1694 # programs
1695 ffplay_deps="avcodec avformat swscale swresample sdl"
1696 ffplay_select="buffersink_filter rdft"
1697 ffprobe_deps="avcodec avformat"
1698 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1699 ffserver_extralibs='$ldl'
1700 ffmpeg_deps="avcodec avformat swscale swresample"
1701 ffmpeg_select="buffersink_filter"
1702
1703 doc_deps="texi2html"
1704
1705 # tests
1706
1707 test_deps(){
1708     suf1=$1
1709     suf2=$2
1710     shift 2
1711     for v; do
1712         dep=${v%=*}
1713         tests=${v#*=}
1714         for name in ${tests}; do
1715             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1716         done
1717     done
1718 }
1719
1720 mxf_d10_test_deps="avfilter"
1721 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1722
1723 test_deps _encoder _decoder                                             \
1724     adpcm_ima_qt                                                        \
1725     adpcm_ima_wav                                                       \
1726     adpcm_ms                                                            \
1727     adpcm_swf                                                           \
1728     adpcm_yamaha=adpcm_yam                                              \
1729     alac                                                                \
1730     asv1                                                                \
1731     asv2                                                                \
1732     bmp                                                                 \
1733     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1734     dvvideo="dv dv_411 dv50"                                            \
1735     ffv1                                                                \
1736     flac                                                                \
1737     flashsv                                                             \
1738     flv                                                                 \
1739     adpcm_g726=g726                                                     \
1740     gif                                                                 \
1741     h261                                                                \
1742     h263="h263 h263p"                                                   \
1743     huffyuv                                                             \
1744     jpegls                                                              \
1745     mjpeg="jpg mjpeg ljpeg"                                             \
1746     mp2                                                                 \
1747     mpeg1video="mpeg mpeg1b"                                            \
1748     mpeg2video="mpeg2 mpeg2_422 mpeg2_idct_int mpeg2_ilace mpeg2_ivlc_qprd" \
1749     mpeg2video="mpeg2thread mpeg2thread_ilace"                          \
1750     mpeg4="mpeg4 mpeg4_adap mpeg4_qpel mpeg4_qprd mpeg4adv mpeg4nr"     \
1751     mpeg4="mpeg4thread error rc"                                        \
1752     msmpeg4v3=msmpeg4                                                   \
1753     msmpeg4v2                                                           \
1754     pbm=pbmpipe                                                         \
1755     pcx                                                                 \
1756     pgm="pgm pgmpipe"                                                   \
1757     png                                                                 \
1758     ppm="ppm ppmpipe"                                                   \
1759     rawvideo="rgb yuv"                                                  \
1760     roq                                                                 \
1761     rv10                                                                \
1762     rv20                                                                \
1763     sgi                                                                 \
1764     snow="snow snowll"                                                  \
1765     svq1                                                                \
1766     targa=tga                                                           \
1767     tiff                                                                \
1768     wmav1                                                               \
1769     wmav2                                                               \
1770     wmv1                                                                \
1771     wmv2                                                                \
1772
1773 test_deps _muxer _demuxer                                               \
1774     aiff                                                                \
1775     pcm_alaw=alaw                                                       \
1776     asf                                                                 \
1777     au                                                                  \
1778     avi                                                                 \
1779     dv=dv_fmt                                                           \
1780     ffm                                                                 \
1781     flv=flv_fmt                                                         \
1782     gxf                                                                 \
1783     matroska=mkv                                                        \
1784     mmf                                                                 \
1785     mov="mov ismv"                                                      \
1786     pcm_mulaw=mulaw                                                     \
1787     mxf="mxf mxf_d10"                                                   \
1788     nut                                                                 \
1789     ogg="ogg ogg_vp3"                                                   \
1790     rawvideo=pixfmt                                                     \
1791     rm                                                                  \
1792     swf                                                                 \
1793     mpegts=ts                                                           \
1794     voc                                                                 \
1795     wav                                                                 \
1796     yuv4mpegpipe=yuv4mpeg                                               \
1797
1798 ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder"
1799 flashsv2_test_deps="zlib"
1800 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1801 mpng_test_deps="zlib"
1802 pp_test_deps="mp_filter"
1803 pp2_test_deps="mp_filter"
1804 pp3_test_deps="mp_filter"
1805 pp4_test_deps="mp_filter"
1806 pp5_test_deps="mp_filter"
1807 pp6_test_deps="mp_filter"
1808 zlib_test_deps="zlib"
1809 zmbv_test_deps="zlib"
1810
1811 # default parameters
1812
1813 logfile="config.log"
1814
1815 # installation paths
1816 prefix_default="/usr/local"
1817 bindir_default='${prefix}/bin'
1818 datadir_default='${prefix}/share/ffmpeg'
1819 incdir_default='${prefix}/include'
1820 libdir_default='${prefix}/lib'
1821 mandir_default='${prefix}/share/man'
1822 shlibdir_default="$libdir_default"
1823 postproc_version_default="current"
1824
1825 # toolchain
1826 ar_default="ar"
1827 cc_default="gcc"
1828 cxx_default="g++"
1829 cc_version=\"unknown\"
1830 host_cc_default="gcc"
1831 install="install"
1832 ln_s="ln -sf"
1833 nm_default="nm"
1834 objformat="elf"
1835 pkg_config_default=pkg-config
1836 ranlib="ranlib"
1837 strip_default="strip"
1838 yasmexe_default="yasm"
1839
1840 nm_opts='-g'
1841 nogas=":"
1842
1843 # machine
1844 arch_default=$(uname -m)
1845 cpu="generic"
1846
1847 # OS
1848 target_os_default=$(tolower $(uname -s))
1849 host_os=$target_os_default
1850
1851 # alternative libpostproc version
1852 ALT_PP_VER_MAJOR=51
1853 ALT_PP_VER_MINOR=2
1854 ALT_PP_VER_MICRO=101
1855 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1856
1857 # configurable options
1858 enable $PROGRAM_LIST
1859
1860 enable avcodec
1861 enable avdevice
1862 enable avfilter
1863 enable avformat
1864 enable avutil
1865 enable postproc
1866 enable stripping
1867 enable swresample
1868 enable swscale
1869
1870 enable asm
1871 enable debug
1872 enable doc
1873 enable fastdiv
1874 enable network
1875 enable optimizations
1876 enable safe_bitstream_reader
1877 enable static
1878 enable swscale_alpha
1879
1880 # build settings
1881 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1882 FFSERVERLDFLAGS=-Wl,-E
1883 LIBPREF="lib"
1884 LIBSUF=".a"
1885 FULLNAME='$(NAME)$(BUILDSUF)'
1886 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1887 SLIBPREF="lib"
1888 SLIBSUF=".so"
1889 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1890 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1891 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1892 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1893 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1894 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1895
1896 AS_O='-o $@'
1897 CC_O='-o $@'
1898 CXX_O='-o $@'
1899
1900 host_cflags='-D_ISOC99_SOURCE -O3 -g'
1901 host_libs='-lm'
1902
1903 target_path='$(CURDIR)'
1904
1905 # since the object filename is not given with the -MM flag, the compiler
1906 # is only able to print the basename, and we must add the path ourselves
1907 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1908 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1909
1910 # find source path
1911 if test -f configure; then
1912     source_path=.
1913 else
1914     source_path=$(cd $(dirname "$0"); pwd)
1915     echo "$source_path" | grep -q '[[:blank:]]' &&
1916         die "Out of tree builds are impossible with whitespace in source path."
1917     test -e "$source_path/config.h" &&
1918         die "Out of tree builds are impossible with config.h in source dir."
1919 fi
1920
1921 for v in "$@"; do
1922     r=${v#*=}
1923     l=${v%"$r"}
1924     r=$(sh_quote "$r")
1925     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1926 done
1927
1928 find_things(){
1929     thing=$1
1930     pattern=$2
1931     file=$source_path/$3
1932     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1933 }
1934
1935 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1936 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1937 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1938 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1939 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1940 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1941 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1942 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1943 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1944 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1945 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1946
1947 ALL_COMPONENTS="
1948     $BSF_LIST
1949     $DECODER_LIST
1950     $DEMUXER_LIST
1951     $ENCODER_LIST
1952     $FILTER_LIST
1953     $HWACCEL_LIST
1954     $INDEV_LIST
1955     $MUXER_LIST
1956     $OUTDEV_LIST
1957     $PARSER_LIST
1958     $PROTOCOL_LIST
1959 "
1960
1961 find_tests(){
1962     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1963 }
1964
1965 ACODEC_TESTS=$(find_tests acodec)
1966 VCODEC_TESTS=$(find_tests vsynth1)
1967 LAVF_FATE_TESTS=$(find_tests lavf-fate)
1968 LAVF_TESTS=$(find_tests lavf)
1969 LAVFI_TESTS=$(find_tests lavfi)
1970 SEEK_TESTS=$(find_tests seek seek_)
1971
1972 ALL_TESTS="$ACODEC_TESTS $VCODEC_TESTS $LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1973
1974 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1975
1976 for n in $COMPONENT_LIST; do
1977     v=$(toupper ${n%s})_LIST
1978     eval enable \$$v
1979     eval ${n}_if_any="\$$v"
1980 done
1981
1982 enable $ARCH_EXT_LIST $ALL_TESTS
1983
1984 die_unknown(){
1985     echo "Unknown option \"$1\"."
1986     echo "See $0 --help for available options."
1987     exit 1
1988 }
1989
1990 show_list() {
1991     suffix=_$1
1992     shift
1993     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1994     exit 0
1995 }
1996
1997 for opt do
1998     optval="${opt#*=}"
1999     case "$opt" in
2000     --extra-ldflags=*) add_ldflags $optval
2001     ;;
2002     --extra-libs=*) add_extralibs $optval
2003     ;;
2004     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2005     ;;
2006     --enable-debug=*) debuglevel="$optval"
2007     ;;
2008     --disable-everything)
2009     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2010     ;;
2011     --enable-*=*|--disable-*=*)
2012     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2013     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2014     eval list=\$$(toupper $thing)_LIST
2015     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2016     $action $(filter "$name" $list)
2017     ;;
2018     --enable-?*|--disable-?*)
2019     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2020     if is_in $option $COMPONENT_LIST; then
2021         test $action = disable && action=unset
2022         eval $action \$$(toupper ${option%s})_LIST
2023     elif is_in $option $CMDLINE_SELECT; then
2024         $action $option
2025     else
2026         die_unknown $opt
2027     fi
2028     ;;
2029     --list-*)
2030         NAME="${opt#--list-}"
2031         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2032         NAME=${NAME%s}
2033         eval show_list $NAME \$$(toupper $NAME)_LIST
2034     ;;
2035     --help|-h) show_help
2036     ;;
2037     *)
2038     optname="${opt%%=*}"
2039     optname="${optname#--}"
2040     optname=$(echo "$optname" | sed 's/-/_/g')
2041     if is_in $optname $CMDLINE_SET; then
2042         eval $optname='$optval'
2043     elif is_in $optname $CMDLINE_APPEND; then
2044         append $optname "$optval"
2045     else
2046          die_unknown $opt
2047     fi
2048     ;;
2049     esac
2050 done
2051
2052 disabled logging && logfile=/dev/null
2053
2054 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2055 set >> $logfile
2056
2057 test -n "$cross_prefix" && enable cross_compile
2058
2059 if enabled cross_compile; then
2060     test -n "$arch" && test -n "$target_os" ||
2061         die "Must specify target arch and OS when cross-compiling"
2062 fi
2063
2064 set_default arch target_os postproc_version
2065
2066 # Check if we should build alternative libpostproc version instead of current
2067 if   test "$postproc_version" = $ALT_PP_VER; then
2068   LIBPOSTPROC_VERSION=$ALT_PP_VER
2069   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2070   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2071   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2072 elif test "$postproc_version" != current; then
2073   die "Invalid argument to --postproc-version. See --help output."
2074 fi
2075
2076 ar_default="${cross_prefix}${ar_default}"
2077 cc_default="${cross_prefix}${cc_default}"
2078 cxx_default="${cross_prefix}${cxx_default}"
2079 nm_default="${cross_prefix}${nm_default}"
2080 pkg_config_default="${cross_prefix}${pkg_config_default}"
2081 ranlib="${cross_prefix}${ranlib}"
2082 strip_default="${cross_prefix}${strip_default}"
2083
2084 sysinclude_default="${sysroot}/usr/include"
2085
2086 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2087 enabled cross_compile || host_cc_default=$cc
2088 set_default host_cc
2089
2090 if ! $pkg_config --version >/dev/null 2>&1; then
2091     warn "$pkg_config not found, library detection may fail."
2092     pkg_config=false
2093 fi
2094
2095 exesuf() {
2096     case $1 in
2097         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2098     esac
2099 }
2100
2101 EXESUF=$(exesuf $target_os)
2102 HOSTEXESUF=$(exesuf $host_os)
2103
2104 # set temporary file name
2105 : ${TMPDIR:=$TEMPDIR}
2106 : ${TMPDIR:=$TMP}
2107 : ${TMPDIR:=/tmp}
2108
2109 if ! check_cmd mktemp -u XXXXXX; then
2110     # simple replacement for missing mktemp
2111     # NOT SAFE FOR GENERAL USE
2112     mktemp(){
2113         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2114     }
2115 fi
2116
2117 tmpfile(){
2118     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2119         (set -C; exec > $tmp) 2>/dev/null ||
2120         die "Unable to create temporary file in $TMPDIR."
2121     append TMPFILES $tmp
2122     eval $1=$tmp
2123 }
2124
2125 trap 'rm -f -- $TMPFILES' EXIT
2126
2127 tmpfile TMPASM .asm
2128 tmpfile TMPC   .c
2129 tmpfile TMPCPP .cpp
2130 tmpfile TMPE   $EXESUF
2131 tmpfile TMPH   .h
2132 tmpfile TMPO   .o
2133 tmpfile TMPS   .S
2134 tmpfile TMPSH  .sh
2135 tmpfile TMPV   .ver
2136
2137 unset -f mktemp
2138
2139 chmod +x $TMPE
2140
2141 # make sure we can execute files in $TMPDIR
2142 cat > $TMPSH 2>> $logfile <<EOF
2143 #! /bin/sh
2144 EOF
2145 chmod +x $TMPSH >> $logfile 2>&1
2146 if ! $TMPSH >> $logfile 2>&1; then
2147     cat <<EOF
2148 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2149 variable to another directory and make sure that it is not mounted noexec.
2150 EOF
2151     die "Sanity test failed."
2152 fi
2153
2154 filter_asflags=echo
2155 filter_cflags=echo
2156 filter_cppflags=echo
2157
2158 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2159     cc_type=llvm_gcc
2160     cc_version=__VERSION__
2161     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
2162     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
2163     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2164     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2165     speed_cflags='-O3'
2166     size_cflags='-Os'
2167 elif $cc -v 2>&1 | grep -qi ^gcc; then
2168     cc_type=gcc
2169     cc_version=__VERSION__
2170     gcc_version=$($cc --version | head -n1)
2171     gcc_basever=$($cc -dumpversion)
2172     gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2173     gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2174     cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2175     if ! $cc -dumpversion | grep -q '^2\.'; then
2176         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2177         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2178     fi
2179     speed_cflags='-O3'
2180     size_cflags='-Os'
2181 elif $cc --version 2>/dev/null | grep -q Intel; then
2182     cc_type=icc
2183     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
2184     cc_ident=$($cc --version | head -n1)
2185     icc_version=$($cc -dumpversion)
2186     CC_DEPFLAGS='-MMD'
2187     AS_DEPFLAGS='-MMD'
2188     speed_cflags='-O3'
2189     size_cflags='-Os'
2190     noopt_cflags='-O1'
2191 elif $cc -v 2>&1 | grep -q xlc; then
2192     cc_type=xlc
2193     cc_version="AV_STRINGIFY(__IBMC__)"
2194     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
2195     speed_cflags='-O5'
2196     size_cflags='-O5 -qcompact'
2197 elif $cc -V 2>/dev/null | grep -q Compaq; then
2198     cc_type=ccc
2199     cc_version="AV_STRINGIFY(__DECC_VER)"
2200     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
2201     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
2202     debuglevel=3
2203     add_ldflags -Wl,-z,now # calls to libots crash without this
2204     speed_cflags='-fast'
2205     size_cflags='-O1'
2206 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2207     test -d "$sysroot" || die "No valid sysroot specified."
2208     cc_type=armcc
2209     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
2210     cc_ident=$($cc --vsn | head -n1)
2211     armcc_conf="$PWD/armcc.conf"
2212     $cc --arm_linux_configure                 \
2213         --arm_linux_config_file="$armcc_conf" \
2214         --configure_sysroot="$sysroot"        \
2215         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2216         die "Error creating armcc configuration file."
2217     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2218     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
2219     as_default="${cross_prefix}gcc"
2220     CC_DEPFLAGS='-MMD'
2221     AS_DEPFLAGS='-MMD'
2222     speed_cflags='-O3'
2223     size_cflags='-Os'
2224     filter_asflags="filter_out -W${armcc_opt}*"
2225 elif $cc -version 2>/dev/null | grep -q TMS470; then
2226     cc_type=tms470
2227     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
2228     cc_ident=$($cc -version | head -n1 | tr -s ' ')
2229     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
2230     CC_O='-fr=$(@D)'
2231     as_default="${cross_prefix}gcc"
2232     ld_default="${cross_prefix}gcc"
2233     TMPO=$(basename $TMPC .c).o
2234     append TMPFILES $TMPO
2235     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2236     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2237     AS_DEPFLAGS='-MMD'
2238     speed_cflags='-O3 -mf=5'
2239     size_cflags='-O3 -mf=2'
2240     filter_cflags=tms470_flags
2241     tms470_flags(){
2242         for flag; do
2243             case $flag in
2244                 -march=*|-mcpu=*)
2245                     case "${flag#*=}" in
2246                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
2247                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
2248                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
2249                         armv6*|arm11*)          echo -mv=6   ;;
2250                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2251                                                 echo -mv=5e  ;;
2252                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2253                     esac
2254                     ;;
2255                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2256                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
2257                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2258                 -msoft-float)   echo --float_support=vfplib       ;;
2259                 -O[0-3]|-mf=*)  echo $flag                        ;;
2260                 -g)             echo -g -mn                       ;;
2261                 -pds=*)         echo $flag                        ;;
2262             esac
2263         done
2264     }
2265 elif $cc -v 2>&1 | grep -q clang; then
2266     cc_type=clang
2267     $cc -dM -E $TMPC | grep -q __clang_version__ &&
2268         cc_version=__clang_version__ || cc_version=__VERSION__
2269     cc_ident=$($cc --version | head -n1)
2270     CC_DEPFLAGS='-MMD'
2271     AS_DEPFLAGS='-MMD'
2272     speed_cflags='-O3'
2273     size_cflags='-Os'
2274 elif $cc -V 2>&1 | grep -q Sun; then
2275     cc_type=suncc
2276     cc_version="AV_STRINGIFY(__SUNPRO_C)"
2277     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2278     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2279     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2280     add_ldflags -xc99
2281     speed_cflags='-O5'
2282     size_cflags='-O5 -xspace'
2283     filter_cflags=suncc_flags
2284     suncc_flags(){
2285         for flag; do
2286             case $flag in
2287                 -march=*|-mcpu=*)
2288                     case "${flag#*=}" in
2289                         native)                   echo -xtarget=native       ;;
2290                         v9|niagara)               echo -xarch=sparc          ;;
2291                         ultrasparc)               echo -xarch=sparcvis       ;;
2292                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2293                         i586|pentium)             echo -xchip=pentium        ;;
2294                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2295                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2296                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2297                         pentium4*)          echo -xtarget=pentium4           ;;
2298                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2299                         *-sse3)             echo -xarch=sse3                 ;;
2300                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
2301                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2302                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2303                         k8|opteron|athlon64|athlon-fx)
2304                                                   echo -xarch=sse2a          ;;
2305                         athlon*)                  echo -xarch=pentium_proa   ;;
2306                     esac
2307                     ;;
2308                 -std=c99)             echo -xc99              ;;
2309                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
2310                 -fPIC)                echo -KPIC -xcode=pic32 ;;
2311                 -W*,*)                echo $flag              ;;
2312                 -f*-*|-W*)                                    ;;
2313                 *)                    echo $flag              ;;
2314             esac
2315         done
2316     }
2317 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2318     cc_type=pathscale
2319     cc_version=__PATHSCALE__
2320     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2321     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2322     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2323     speed_cflags='-O2'
2324     size_cflags='-Os'
2325     filter_cflags='filter_out -Wdisabled-optimization'
2326 elif $cc -v 2>&1 | grep -q Open64; then
2327     cc_type=open64
2328     cc_version=__OPEN64__
2329     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2330     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2331     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2332     speed_cflags='-O2'
2333     size_cflags='-Os'
2334     filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2335 fi
2336
2337 test -n "$cc_type" && enable $cc_type ||
2338     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2339
2340 : ${as_default:=$cc}
2341 : ${dep_cc_default:=$cc}
2342 : ${ld_default:=$cc}
2343 set_default ar as dep_cc ld
2344
2345 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2346 test -n "$CXX_DEPFLAGS" || CXXDEP=$DEPEND_CMD
2347 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2348
2349 add_cflags $extra_cflags
2350 add_cxxflags $extra_cxxflags
2351 add_asflags $extra_cflags
2352
2353 if test -n "$sysroot"; then
2354     case "$cc_type" in
2355         gcc|llvm_gcc|clang)
2356             add_cppflags --sysroot="$sysroot"
2357             add_ldflags --sysroot="$sysroot"
2358         ;;
2359         tms470)
2360             add_cppflags -I"$sysinclude"
2361             add_ldflags  --sysroot="$sysroot"
2362         ;;
2363     esac
2364 fi
2365
2366 if test "$cpu" = host; then
2367     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2368
2369     case "$cc_type" in
2370         gcc|llvm_gcc)
2371             check_native(){
2372                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2373                 sed -n "/cc1.*$1=/{
2374                             s/.*$1=\\([^ ]*\\).*/\\1/
2375                             p
2376                             q
2377                         }" $TMPE
2378             }
2379             cpu=$(check_native -march || check_native -mcpu)
2380         ;;
2381     esac
2382
2383     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2384 fi
2385
2386 # Deal with common $arch aliases
2387 case "$arch" in
2388     arm*|iPad*)
2389         arch="arm"
2390     ;;
2391     mips|mipsel|IP*)
2392         arch="mips"
2393     ;;
2394     mips64*)
2395         arch="mips"
2396         subarch="mips64"
2397     ;;
2398     parisc|hppa)
2399         arch="parisc"
2400     ;;
2401     parisc64|hppa64)
2402         arch="parisc"
2403         subarch="parisc64"
2404     ;;
2405     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2406         arch="ppc"
2407     ;;
2408     s390|s390x)
2409         arch="s390"
2410     ;;
2411     sh4|sh)
2412         arch="sh4"
2413     ;;
2414     sun4u|sparc64)
2415         arch="sparc"
2416         subarch="sparc64"
2417     ;;
2418     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2419         arch="x86"
2420     ;;
2421 esac
2422
2423 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2424 enable $arch
2425
2426 # Add processor-specific flags
2427 if test "$cpu" = generic; then
2428     : do nothing
2429 elif enabled ppc; then
2430
2431     case $(tolower $cpu) in
2432         601|ppc601|powerpc601)
2433             cpuflags="-mcpu=601"
2434             disable altivec
2435         ;;
2436         603*|ppc603*|powerpc603*)
2437             cpuflags="-mcpu=603"
2438             disable altivec
2439         ;;
2440         604*|ppc604*|powerpc604*)
2441             cpuflags="-mcpu=604"
2442             disable altivec
2443         ;;
2444         g3|75*|ppc75*|powerpc75*)
2445             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2446             disable altivec
2447         ;;
2448         g4|745*|ppc745*|powerpc745*)
2449             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2450         ;;
2451         74*|ppc74*|powerpc74*)
2452             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2453         ;;
2454         g5|970|ppc970|powerpc970|power4*)
2455             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2456         ;;
2457         cell)
2458             cpuflags="-mcpu=cell"
2459             enable ldbrx
2460         ;;
2461         e500v2)
2462             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2463             disable altivec
2464         ;;
2465         e500)
2466             cpuflags="-mcpu=8540 -mhard-float"
2467             disable altivec
2468         ;;
2469     esac
2470
2471 elif enabled x86; then
2472
2473     case $cpu in
2474         i[345]86|pentium)
2475             cpuflags="-march=$cpu"
2476             disable mmx
2477         ;;
2478         # targets that do NOT support conditional mov (cmov)
2479         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2480             cpuflags="-march=$cpu"
2481             disable cmov
2482         ;;
2483         # targets that do support conditional mov (cmov)
2484         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2485             cpuflags="-march=$cpu"
2486             enable cmov
2487             enable fast_cmov
2488         ;;
2489         # targets that do support conditional mov but on which it's slow
2490         pentium4|pentium4m|prescott|nocona)
2491             cpuflags="-march=$cpu"
2492             enable cmov
2493             disable fast_cmov
2494         ;;
2495     esac
2496
2497 elif enabled sparc; then
2498
2499     case $cpu in
2500         niagara)
2501             cpuflags="-mcpu=$cpu"
2502             disable vis
2503         ;;
2504         sparc64)
2505             cpuflags="-mcpu=v9"
2506         ;;
2507     esac
2508
2509 elif enabled arm; then
2510
2511     case $cpu in
2512         armv*)
2513             cpuflags="-march=$cpu"
2514             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2515         ;;
2516         *)
2517             cpuflags="-mcpu=$cpu"
2518             case $cpu in
2519                 cortex-a*)                               subarch=armv7a  ;;
2520                 cortex-r*)                               subarch=armv7r  ;;
2521                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2522                 arm11*)                                  subarch=armv6   ;;
2523                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2524                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2525             esac
2526         ;;
2527     esac
2528
2529 elif enabled alpha; then
2530
2531     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2532
2533 elif enabled bfin; then
2534
2535     cpuflags="-mcpu=$cpu"
2536
2537 elif enabled mips; then
2538
2539     cpuflags="-march=$cpu"
2540
2541 elif enabled avr32; then
2542
2543     case $cpu in
2544         ap7[02]0[0-2])
2545             subarch="avr32_ap"
2546             cpuflags="-mpart=$cpu"
2547         ;;
2548         ap)
2549             subarch="avr32_ap"
2550             cpuflags="-march=$cpu"
2551         ;;
2552         uc3[ab]*)
2553             subarch="avr32_uc"
2554             cpuflags="-mcpu=$cpu"
2555         ;;
2556         uc)
2557             subarch="avr32_uc"
2558             cpuflags="-march=$cpu"
2559         ;;
2560     esac
2561
2562 fi
2563
2564 add_cflags $cpuflags
2565 add_asflags $cpuflags
2566
2567 # compiler sanity check
2568 check_exec <<EOF
2569 int main(void){ return 0; }
2570 EOF
2571 if test "$?" != 0; then
2572     echo "$cc is unable to create an executable file."
2573     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2574         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2575         echo "Only do this if you know what cross compiling means."
2576     fi
2577     die "C compiler test failed."
2578 fi
2579
2580 add_cppflags -D_ISOC99_SOURCE
2581 add_cxxflags -D__STDC_CONSTANT_MACROS
2582 check_cflags -std=c99
2583 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2584 #include <stdlib.h>
2585 EOF
2586 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2587 #include <stdlib.h>
2588 EOF
2589
2590 check_host_cflags -std=c99
2591 check_host_cflags -Wall
2592
2593 case "$arch" in
2594     alpha|ia64|mips|parisc|sparc)
2595         spic=$shared
2596     ;;
2597     x86)
2598         subarch="x86_32"
2599         check_cc <<EOF && subarch="x86_64"
2600         int test[(int)sizeof(char*) - 7];
2601 EOF
2602         if test "$subarch" = "x86_64"; then
2603             spic=$shared
2604         fi
2605     ;;
2606     ppc)
2607         check_cc <<EOF && subarch="ppc64"
2608         int test[(int)sizeof(char*) - 7];
2609 EOF
2610     ;;
2611 esac
2612
2613 enable $subarch
2614 enabled spic && enable pic
2615
2616 # OS specific
2617 case $target_os in
2618     haiku)
2619         prefix_default="/boot/common"
2620         network_extralibs="-lnetwork"
2621         host_libs=
2622         ;;
2623     sunos)
2624         FFSERVERLDFLAGS=""
2625         SHFLAGS='-shared -Wl,-h,$$(@F)'
2626         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2627         network_extralibs="-lsocket -lnsl"
2628         add_cppflags -D__EXTENSIONS__
2629         # When using suncc to build, the Solaris linker will mark
2630         # an executable with each instruction set encountered by
2631         # the Solaris assembler.  As our libraries contain their own
2632         # guards for processor-specific code, instead suppress
2633         # generation of the HWCAPS ELF section on Solaris x86 only.
2634         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2635         nm_opts='-P -g'
2636         ;;
2637     netbsd)
2638         disable symver
2639         oss_indev_extralibs="-lossaudio"
2640         oss_outdev_extralibs="-lossaudio"
2641         ;;
2642     openbsd)
2643         enable malloc_aligned
2644         # On OpenBSD 4.5. the compiler does not use PIC unless
2645         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2646         # however the generated executable will not do anything
2647         # (simply quits with exit-code 1, no crash, no output).
2648         # Thus explicitly enable PIC here.
2649         enable pic
2650         disable symver
2651         SHFLAGS='-shared'
2652         oss_indev_extralibs="-lossaudio"
2653         oss_outdev_extralibs="-lossaudio"
2654         ;;
2655     dragonfly)
2656         enable malloc_aligned
2657         disable symver
2658         ;;
2659     freebsd)
2660         enable malloc_aligned
2661         ;;
2662     bsd/os)
2663         add_extralibs -lpoll -lgnugetopt
2664         strip="strip -d"
2665         ;;
2666     darwin)
2667         enable malloc_aligned
2668         gas="gas-preprocessor.pl $cc"
2669         enabled ppc && add_asflags -force_cpusubtype_ALL
2670         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2671         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2672         strip="${strip} -x"
2673         add_ldflags -Wl,-dynamic,-search_paths_first
2674         SLIBSUF=".dylib"
2675         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2676         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2677         FFSERVERLDFLAGS=-Wl,-bind_at_load
2678         objformat="macho"
2679         enabled x86_64 && objformat="macho64"
2680         enabled_any pic shared ||
2681             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2682         ;;
2683     mingw32*)
2684         if test $target_os = "mingw32ce"; then
2685             disable network
2686         else
2687             target_os=mingw32
2688         fi
2689         LIBTARGET=i386
2690         if enabled x86_64; then
2691             enable malloc_aligned
2692             LIBTARGET=x64
2693         elif enabled arm; then
2694             LIBTARGET=arm-wince
2695         fi
2696         shlibdir_default="$bindir_default"
2697         SLIBPREF=""
2698         SLIBSUF=".dll"
2699         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2700         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2701         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2702         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2703         SLIB_INSTALL_LINKS=
2704         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2705         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2706         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'
2707         objformat="win32"
2708         enable dos_paths
2709         check_cflags -fno-common
2710         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2711                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2712                 die "ERROR: MinGW runtime version must be >= 3.15."
2713         add_cppflags -U__STRICT_ANSI__
2714         ;;
2715     cygwin*)
2716         target_os=cygwin
2717         shlibdir_default="$bindir_default"
2718         SLIBPREF="cyg"
2719         SLIBSUF=".dll"
2720         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2721         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2722         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2723         objformat="win32"
2724         enable dos_paths
2725         check_cflags -fno-common
2726         add_cppflags -U__STRICT_ANSI__
2727         ;;
2728     *-dos|freedos|opendos)
2729         network_extralibs="-lsocket"
2730         objformat="coff"
2731         enable dos_paths
2732         add_cppflags -U__STRICT_ANSI__
2733         ;;
2734     linux)
2735         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2736         enable dv1394
2737         ;;
2738     irix*)
2739         target_os=irix
2740         ranlib="echo ignoring ranlib"
2741         ;;
2742     os/2*)
2743         strip="lxlite -CS"
2744         ln_s="cp -f"
2745         objformat="aout"
2746         add_cppflags -D_GNU_SOURCE
2747         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2748         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2749         FFSERVERLDFLAGS=""
2750         LIBSUF="_s.a"
2751         SLIBPREF=""
2752         SLIBSUF=".dll"
2753         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2754         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2755         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2756           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2757           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2758           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2759           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2760           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2761         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2762           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2763         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2764         enable dos_paths
2765         enable_weak os2threads
2766         ;;
2767     gnu/kfreebsd)
2768         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2769         ;;
2770     gnu)
2771         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2772         ;;
2773     qnx)
2774         add_cppflags -D_QNX_SOURCE
2775         network_extralibs="-lsocket"
2776         ;;
2777     symbian)
2778         SLIBSUF=".dll"
2779         enable dos_paths
2780         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2781         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2782         add_ldflags -Wl,--target1-abs,--no-undefined \
2783                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2784                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2785         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2786                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2787                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2788         ;;
2789     none)
2790         ;;
2791     *)
2792         die "Unknown OS '$target_os'."
2793         ;;
2794 esac
2795
2796 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2797
2798 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2799
2800 set_default $PATHS_LIST
2801
2802 # we need to build at least one lib type
2803 if ! enabled_any static shared; then
2804     cat <<EOF
2805 At least one library type must be built.
2806 Specify --enable-static to build the static libraries or --enable-shared to
2807 build the shared libraries as well. To only build the shared libraries specify
2808 --disable-static in addition to --enable-shared.
2809 EOF
2810     exit 1;
2811 fi
2812
2813 die_license_disabled() {
2814     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2815 }
2816
2817 die_license_disabled gpl libcdio
2818 die_license_disabled gpl libutvideo
2819 die_license_disabled gpl libx264
2820 die_license_disabled gpl libxavs
2821 die_license_disabled gpl libxvid
2822 die_license_disabled gpl x11grab
2823
2824 die_license_disabled nonfree libaacplus
2825 die_license_disabled nonfree libfaac
2826 die_license_disabled nonfree openssl
2827
2828 die_license_disabled version3 libopencore_amrnb
2829 die_license_disabled version3 libopencore_amrwb
2830 die_license_disabled version3 libvo_aacenc
2831 die_license_disabled version3 libvo_amrwbenc
2832
2833 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2834
2835 disabled optimizations || check_cflags -fomit-frame-pointer
2836
2837 enable_pic() {
2838     enable pic
2839     add_cppflags -DPIC
2840     add_cflags   -fPIC
2841     add_asflags  -fPIC
2842 }
2843
2844 enabled pic && enable_pic
2845
2846 check_cc <<EOF || die "Symbol mangling check failed."
2847 int ff_extern;
2848 EOF
2849 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2850 extern_prefix=${sym%%ff_extern*}
2851
2852 check_cc <<EOF && enable inline_asm
2853 void foo(void) { __asm__ volatile ("" ::); }
2854 EOF
2855
2856 _restrict=
2857 for restrict_keyword in restrict __restrict__ __restrict; do
2858     check_cc <<EOF && _restrict=$restrict_keyword && break
2859 void foo(char * $restrict_keyword p);
2860 EOF
2861 done
2862
2863 check_cc <<EOF && enable attribute_packed
2864 struct { int x; } __attribute__((packed)) x;
2865 EOF
2866
2867 check_cc <<EOF && enable attribute_may_alias
2868 union { int x; } __attribute__((may_alias)) x;
2869 EOF
2870
2871 check_cc <<EOF || die "endian test failed"
2872 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2873 EOF
2874 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2875
2876 if enabled alpha; then
2877
2878     check_cflags -mieee
2879
2880 elif enabled arm; then
2881
2882     enabled thumb && check_cflags -mthumb || check_cflags -marm
2883     nogas=die
2884
2885     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2886         enable vfp_args
2887     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2888         case "${cross_prefix:-$cc}" in
2889             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2890             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2891 __asm__ (".eabi_attribute 28, 1");
2892 int main(void) { return 0; }
2893 EOF
2894         esac
2895         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2896     fi
2897
2898     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2899     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2900     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2901     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2902     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2903     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2904
2905     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2906
2907     enabled_all armv6t2 shared !pic && enable_pic
2908
2909 elif enabled mips; then
2910
2911     check_asm loongson '"dmult.g $1, $2, $3"'
2912     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2913
2914 elif enabled ppc; then
2915
2916     enable local_aligned_8 local_aligned_16
2917
2918     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2919     check_asm ibm_asm   '"add 0, 0, 0"'
2920     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2921     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2922
2923     # AltiVec flags: The FSF version of GCC differs from the Apple version
2924     if enabled altivec; then
2925         nogas=warn
2926         check_cflags -maltivec -mabi=altivec &&
2927         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2928         check_cflags -faltivec
2929
2930         # check if our compiler supports Motorola AltiVec C API
2931         check_cc <<EOF || disable altivec
2932 $inc_altivec_h
2933 int main(void) {
2934     vector signed int v1, v2, v3;
2935     v1 = vec_add(v2,v3);
2936     return 0;
2937 }
2938 EOF
2939
2940         # check if our compiler supports braces for vector declarations
2941         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2942 $inc_altivec_h
2943 int main (void) { (vector int) {1}; return 0; }
2944 EOF
2945     fi
2946
2947 elif enabled sparc; then
2948
2949     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2950         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2951
2952 elif enabled x86; then
2953
2954     enable local_aligned_8 local_aligned_16
2955
2956     # check whether EBP is available on x86
2957     # As 'i' is stored on the stack, this program will crash
2958     # if the base pointer is used to access it because the
2959     # base pointer is cleared in the inline assembly code.
2960     check_exec_crash <<EOF && enable ebp_available
2961     volatile int i=0;
2962     __asm__ volatile (
2963         "xorl %%ebp, %%ebp"
2964     ::: "%ebp");
2965     return i;
2966 EOF
2967
2968     # check whether EBX is available on x86
2969     check_asm ebx_available '""::"b"(0)' &&
2970         check_asm ebx_available '"":::"%ebx"'
2971
2972     # check whether xmm clobbers are supported
2973     check_asm xmm_clobbers '"":::"%xmm0"'
2974
2975     # check whether binutils is new enough to compile SSSE3/MMX2
2976     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2977     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2978
2979     if ! disabled_any asm mmx yasm; then
2980         if check_cmd $yasmexe --version; then
2981             enabled x86_64 && yasm_extra="-m amd64"
2982             yasm_debug="-g dwarf2"
2983         elif check_cmd nasm -v; then
2984             yasmexe=nasm
2985             yasm_debug="-g -F dwarf"
2986             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2987         fi
2988
2989         YASMFLAGS="-f $objformat $yasm_extra"
2990         enabled pic               && append YASMFLAGS "-DPIC"
2991         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2992         case "$objformat" in
2993             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2994         esac
2995
2996         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2997             die "yasm not found, use --disable-yasm for a crippled build"
2998         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2999     fi
3000
3001     case "$cpu" in
3002         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3003             disable fast_clz
3004         ;;
3005     esac
3006
3007 fi
3008
3009 if enabled asm; then
3010     as=${gas:=$as}
3011     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3012         $nogas "GNU assembler not found, install gas-preprocessor"
3013 fi
3014
3015 check_ldflags -Wl,--as-needed
3016
3017 if check_func dlopen; then
3018     ldl=
3019 elif check_func dlopen -ldl; then
3020     ldl=-ldl
3021 fi
3022
3023 if enabled network; then
3024     check_type "sys/types.h sys/socket.h" socklen_t
3025     check_type netdb.h "struct addrinfo"
3026     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3027     check_type netinet/in.h "struct sockaddr_in6"
3028     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3029     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3030     # Prefer arpa/inet.h over winsock2
3031     if check_header arpa/inet.h ; then
3032         check_func closesocket
3033     elif check_header winsock2.h ; then
3034         check_func_headers winsock2.h closesocket -lws2 && \
3035             network_extralibs="-lws2" || \
3036         { check_func_headers winsock2.h closesocket -lws2_32 && \
3037             network_extralibs="-lws2_32"; }
3038         check_type ws2tcpip.h socklen_t
3039         check_type ws2tcpip.h "struct addrinfo"
3040         check_type ws2tcpip.h "struct ipv6_mreq"
3041         check_type ws2tcpip.h "struct sockaddr_in6"
3042         check_type ws2tcpip.h "struct sockaddr_storage"
3043         check_struct winsock2.h "struct sockaddr" sa_len
3044     else
3045         disable network
3046     fi
3047 fi
3048
3049 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3050 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3051
3052 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3053 check_func  fcntl
3054 check_func  fork
3055 check_func  getaddrinfo $network_extralibs
3056 check_func  gethrtime
3057 check_func  getrusage
3058 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3059 check_func  inet_aton $network_extralibs
3060 check_func  isatty
3061 check_func  localtime_r
3062 check_func  ${malloc_prefix}memalign            && enable memalign
3063 check_func  mkstemp
3064 check_func  mmap
3065 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3066 check_func  setrlimit
3067 check_func  strerror_r
3068 check_func  strptime
3069 check_func  sched_getaffinity
3070 check_func  sysconf
3071 check_func  sysctl
3072 check_func_headers conio.h kbhit
3073 check_func_headers windows.h PeekNamedPipe
3074 check_func_headers io.h setmode
3075 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3076 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3077 check_func_headers windows.h GetProcessAffinityMask
3078 check_func_headers windows.h GetProcessTimes
3079 check_func_headers windows.h MapViewOfFile
3080 check_func_headers windows.h VirtualAlloc
3081 check_func_headers glob.h glob
3082
3083 check_header dlfcn.h
3084 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3085 check_header libcrystalhd/libcrystalhd_if.h
3086 check_header malloc.h
3087 check_header poll.h
3088 check_header sys/mman.h
3089 check_header sys/param.h
3090 check_header sys/resource.h
3091 check_header sys/select.h
3092 check_header termios.h
3093 check_header vdpau/vdpau.h
3094 check_header vdpau/vdpau_x11.h
3095 check_header X11/extensions/XvMClib.h
3096 check_header asm/types.h
3097
3098 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3099 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3100
3101 # check for VDA header
3102 if ! disabled vda; then
3103     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3104         enable vda
3105         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3106     fi
3107 fi
3108
3109 if ! disabled w32threads && ! enabled pthreads; then
3110     check_func _beginthreadex && enable w32threads
3111 fi
3112
3113 # check for some common methods of building with pthread support
3114 # do this before the optional library checks as some of them require pthreads
3115 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3116     enable pthreads
3117     if check_func pthread_create; then
3118         :
3119     elif check_func pthread_create -pthread; then
3120         add_cflags -pthread
3121         add_extralibs -pthread
3122     elif check_func pthread_create -pthreads; then
3123         add_cflags -pthreads
3124         add_extralibs -pthreads
3125     elif check_func pthread_create -lpthreadGC2; then
3126         add_extralibs -lpthreadGC2
3127     elif ! check_lib pthread.h pthread_create -lpthread; then
3128         disable pthreads
3129     fi
3130 fi
3131
3132 for thread in $THREADS_LIST; do
3133     if enabled $thread; then
3134         test -n "$thread_type" &&
3135             die "ERROR: Only one thread type must be selected." ||
3136             thread_type="$thread"
3137     fi
3138 done
3139
3140 check_lib math.h sin -lm && LIBM="-lm"
3141 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3142 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3143
3144 check_mathfunc cbrtf
3145 check_mathfunc exp2
3146 check_mathfunc exp2f
3147 check_mathfunc llrint
3148 check_mathfunc llrintf
3149 check_mathfunc log2
3150 check_mathfunc log2f
3151 check_mathfunc lrint
3152 check_mathfunc lrintf
3153 check_mathfunc round
3154 check_mathfunc roundf
3155 check_mathfunc trunc
3156 check_mathfunc truncf
3157
3158 # these are off by default, so fail if requested and not available
3159 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3160 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3161 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3162 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3163 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3164 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3165 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3166                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3167                         die "ERROR: libcelt version must be >= 0.11.0."; }
3168 enabled libdirac   && require_pkg_config dirac                          \
3169     "libdirac_decoder/dirac_parser.h"  \
3170     "dirac_decoder_init"
3171 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3172 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3173 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3174 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3175 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3176 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3177 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3178 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3179 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3180 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3181 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3182 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3183 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3184 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3185 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3186     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3187     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder
3188 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3189 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3190 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3191 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3192 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3193 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3194 enabled libvpx     && {
3195     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3196                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3197     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3198                                 die "ERROR: libvpx encoder version must be >=0.9.6"; } }
3199 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3200                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3201                         die "ERROR: libx264 version must be >= 0.118."; }
3202 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3203 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3204 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3205                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3206                         die "ERROR: openal not found"; } &&
3207                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3208                         die "ERROR: openal version must be 1.1 or compatible"; }
3209 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3210                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3211                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3212                         die "ERROR: openssl not found"; }
3213
3214 # libdc1394 check
3215 if enabled libdc1394; then
3216     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3217         enable libdc1394_2; } ||
3218     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3219         enable libdc1394_1; } ||
3220     die "ERROR: No version of libdc1394 found "
3221 fi
3222
3223 SDL_CONFIG="${cross_prefix}sdl-config"
3224 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3225     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3226     enable sdl &&
3227     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3228 else
3229   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3230     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3231     sdl_libs=$("${SDL_CONFIG}" --libs)
3232     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3233     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3234     enable sdl &&
3235     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3236   fi
3237 fi
3238 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3239
3240 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3241 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3242
3243 check_header linux/fb.h
3244 check_header linux/videodev.h
3245 check_header linux/videodev2.h
3246 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3247
3248 check_header sys/videoio.h
3249
3250 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3251 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3252 # w32api 3.12 had it defined wrong
3253 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3254
3255 check_type "dshow.h" IBaseFilter
3256
3257 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3258 { check_header dev/bktr/ioctl_meteor.h &&
3259   check_header dev/bktr/ioctl_bt848.h; } ||
3260 { check_header machine/ioctl_meteor.h &&
3261   check_header machine/ioctl_bt848.h; } ||
3262 { check_header dev/video/meteor/ioctl_meteor.h &&
3263   check_header dev/video/bktr/ioctl_bt848.h; } ||
3264 check_header dev/ic/bt8xx.h
3265
3266 check_header sndio.h
3267 if check_struct sys/soundcard.h audio_buf_info bytes; then
3268     enable_safe sys/soundcard.h
3269 else
3270     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3271     #include <sys/soundcard.h>
3272     audio_buf_info abc;
3273 EOF
3274 fi
3275 check_header soundcard.h
3276
3277 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3278
3279 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
3280
3281 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3282
3283 enabled libcdio &&
3284     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3285
3286 enabled x11grab                                           &&
3287 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3288 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3289 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3290
3291 if ! disabled vaapi; then
3292     check_lib va/va.h vaInitialize -lva && {
3293         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3294         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3295     } || disable vaapi
3296 fi
3297
3298 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3299 check_cpp_condition \
3300     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3301     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3302       disable vdpau; }
3303 fi
3304
3305 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3306 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3307 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"
3308
3309 # add some useful compiler flags if supported
3310 check_cflags -Wdeclaration-after-statement
3311 check_cflags -Wall
3312 check_cflags -Wno-parentheses
3313 check_cflags -Wno-switch
3314 check_cflags -Wno-format-zero-length
3315 check_cflags -Wdisabled-optimization
3316 check_cflags -Wpointer-arith
3317 check_cflags -Wredundant-decls
3318 check_cflags -Wno-pointer-sign
3319 check_cflags -Wcast-qual
3320 check_cflags -Wwrite-strings
3321 check_cflags -Wtype-limits
3322 check_cflags -Wundef
3323 check_cflags -Wmissing-prototypes
3324 check_cflags -Wno-pointer-to-int-cast
3325 check_cflags -Wstrict-prototypes
3326 enabled extra_warnings && check_cflags -Winline
3327
3328 # add some linker flags
3329 check_ldflags -Wl,--warn-common
3330 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
3331 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3332
3333 enabled xmm_clobber_test &&                             \
3334     check_ldflags -Wl,--wrap,avcodec_open2              \
3335                   -Wl,--wrap,avcodec_decode_audio4      \
3336                   -Wl,--wrap,avcodec_decode_video2      \
3337                   -Wl,--wrap,avcodec_decode_subtitle2   \
3338                   -Wl,--wrap,avcodec_encode_audio2      \
3339                   -Wl,--wrap,avcodec_encode_video       \
3340                   -Wl,--wrap,avcodec_encode_subtitle    \
3341                   -Wl,--wrap,sws_scale ||               \
3342     disable xmm_clobber_test
3343
3344 echo "X{};" > $TMPV
3345 if test_ldflags -Wl,--version-script,$TMPV; then
3346     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3347     check_cc <<EOF && enable symver_asm_label
3348 void ff_foo(void) __asm__ ("av_foo@VERSION");
3349 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3350 EOF
3351     check_cc <<EOF && enable symver_gnu_asm
3352 __asm__(".symver ff_foo,av_foo@VERSION");
3353 void ff_foo(void) {}
3354 EOF
3355 fi
3356
3357 if [ -n "$optflags" ]; then
3358     add_cflags $optflags
3359 elif enabled small; then
3360     add_cflags $size_cflags
3361 elif enabled optimizations; then
3362     add_cflags $speed_cflags
3363 else
3364     add_cflags $noopt_cflags
3365 fi
3366 check_cflags -fno-math-errno
3367 check_cflags -fno-signed-zeros
3368 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3369 int x;
3370 EOF
3371
3372
3373 if enabled icc; then
3374     # Just warnings, no remarks
3375     check_cflags -w1
3376     # -wd: Disable following warnings
3377     # 144, 167, 556: -Wno-pointer-sign
3378     # 1292: attribute "foo" ignored
3379     # 10006: ignoring unknown option -fno-signed-zeros
3380     # 10148: ignoring unknown option -Wno-parentheses
3381     # 10156: ignoring option '-W'; no argument required
3382     check_cflags -wd144,167,556,1292,10006,10148,10156
3383     # 11030: Warning unknown option --as-needed
3384     # 10156: ignoring option '-export'; no argument required
3385     check_ldflags -wd10156,11030
3386     # Allow to compile with optimizations
3387     check_ldflags -march=$cpu
3388     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3389     enable ebp_available
3390     if enabled x86_32; then
3391         test ${icc_version%%.*} -ge 11 && \
3392             check_cflags -falign-stack=maintain-16-byte || \
3393             disable aligned_stack
3394     fi
3395 elif enabled ccc; then
3396     # disable some annoying warnings
3397     add_cflags -msg_disable cvtu32to64
3398     add_cflags -msg_disable embedcomment
3399     add_cflags -msg_disable needconstext
3400     add_cflags -msg_disable nomainieee
3401     add_cflags -msg_disable ptrmismatch1
3402     add_cflags -msg_disable unreachcode
3403 elif enabled gcc; then
3404     check_cflags -fno-tree-vectorize
3405     check_cflags -Werror=implicit-function-declaration
3406     check_cflags -Werror=missing-prototypes
3407 elif enabled llvm_gcc; then
3408     check_cflags -mllvm -stack-alignment=16
3409 elif enabled clang; then
3410     check_cflags -mllvm -stack-alignment=16
3411     check_cflags -Qunused-arguments
3412 elif enabled armcc; then
3413     # 2523: use of inline assembler is deprecated
3414     add_cflags -W${armcc_opt},--diag_suppress=2523
3415     add_cflags -W${armcc_opt},--diag_suppress=1207
3416     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3417     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3418     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3419     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3420 elif enabled tms470; then
3421     add_cflags -pds=824 -pds=837
3422 elif enabled pathscale; then
3423     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3424 fi
3425
3426 enabled_any $THREADS_LIST      && enable threads
3427
3428 check_deps $CONFIG_LIST       \
3429            $CONFIG_EXTRA      \
3430            $HAVE_LIST         \
3431            $ALL_COMPONENTS    \
3432            $ALL_TESTS         \
3433
3434 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3435
3436 if test $target_os = "haiku"; then
3437     disable memalign
3438     disable posix_memalign
3439 fi
3440
3441 ! enabled_any memalign posix_memalign malloc_aligned &&
3442     enabled_any $need_memalign && enable memalign_hack
3443
3444 # add_dep lib dep
3445 # -> enable ${lib}_deps_${dep}
3446 # -> add $dep to ${lib}_deps only once
3447 add_dep() {
3448     lib=$1
3449     dep=$2
3450     enabled "${lib}_deps_${dep}" && return 0
3451     enable  "${lib}_deps_${dep}"
3452     prepend "${lib}_deps" $dep
3453 }
3454
3455 # merge deps lib components
3456 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3457 merge_deps() {
3458     lib=$1
3459     shift
3460     for comp in $*; do
3461         enabled $comp || continue
3462         eval "dep=\"\$${comp}_deps\""
3463         for d in $dep; do
3464             add_dep $lib $d
3465         done
3466     done
3467 }
3468
3469 merge_deps libavfilter $FILTER_LIST
3470
3471 echo "install prefix            $prefix"
3472 echo "source path               $source_path"
3473 echo "C compiler                $cc"
3474 echo "ARCH                      $arch ($cpu)"
3475 if test "$build_suffix" != ""; then
3476     echo "build suffix              $build_suffix"
3477 fi
3478 if test "$progs_suffix" != ""; then
3479     echo "progs suffix              $progs_suffix"
3480 fi
3481 if test "$extra_version" != ""; then
3482     echo "version string suffix     $extra_version"
3483 fi
3484 echo "big-endian                ${bigendian-no}"
3485 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3486 if enabled x86; then
3487     echo "${yasmexe}                      ${yasm-no}"
3488     echo "MMX enabled               ${mmx-no}"
3489     echo "MMX2 enabled              ${mmx2-no}"
3490     echo "3DNow! enabled            ${amd3dnow-no}"
3491     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3492     echo "SSE enabled               ${sse-no}"
3493     echo "SSSE3 enabled             ${ssse3-no}"
3494     echo "AVX enabled               ${avx-no}"
3495     echo "CMOV enabled              ${cmov-no}"
3496     echo "CMOV is fast              ${fast_cmov-no}"
3497     echo "EBX available             ${ebx_available-no}"
3498     echo "EBP available             ${ebp_available-no}"
3499 fi
3500 if enabled arm; then
3501     echo "ARMv5TE enabled           ${armv5te-no}"
3502     echo "ARMv6 enabled             ${armv6-no}"
3503     echo "ARMv6T2 enabled           ${armv6t2-no}"
3504     echo "ARM VFP enabled           ${armvfp-no}"
3505     echo "NEON enabled              ${neon-no}"
3506 fi
3507 if enabled mips; then
3508     echo "MMI enabled               ${mmi-no}"
3509 fi
3510 if enabled ppc; then
3511     echo "AltiVec enabled           ${altivec-no}"
3512     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3513     echo "dcbzl available           ${dcbzl-no}"
3514 fi
3515 if enabled sparc; then
3516     echo "VIS enabled               ${vis-no}"
3517 fi
3518 echo "debug symbols             ${debug-no}"
3519 echo "strip symbols             ${stripping-no}"
3520 echo "optimize for size         ${small-no}"
3521 echo "optimizations             ${optimizations-no}"
3522 echo "static                    ${static-no}"
3523 echo "shared                    ${shared-no}"
3524 echo "postprocessing support    ${postproc-no}"
3525 echo "new filter support        ${avfilter-no}"
3526 echo "network support           ${network-no}"
3527 echo "threading support         ${thread_type-no}"
3528 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3529 echo "SDL support               ${sdl-no}"
3530 echo "libdxva2 enabled          ${dxva2-no}"
3531 echo "libva enabled             ${vaapi-no}"
3532 echo "libvdpau enabled          ${vdpau-no}"
3533 echo "AVISynth enabled          ${avisynth-no}"
3534 echo "frei0r enabled            ${frei0r-no}"
3535 echo "gnutls enabled            ${gnutls-no}"
3536 echo "libaacplus enabled        ${libaacplus-no}"
3537 echo "libass enabled            ${libass-no}"
3538 echo "libcdio support           ${libcdio-no}"
3539 echo "libcelt enabled           ${libcelt-no}"
3540 echo "libdc1394 support         ${libdc1394-no}"
3541 echo "libdirac enabled          ${libdirac-no}"
3542 echo "libfaac enabled           ${libfaac-no}"
3543 echo "libgsm enabled            ${libgsm-no}"
3544 echo "libmodplug enabled        ${libmodplug-no}"
3545 echo "libmp3lame enabled        ${libmp3lame-no}"
3546 echo "libnut enabled            ${libnut-no}"
3547 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3548 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3549 echo "libopencv support         ${libopencv-no}"
3550 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3551 echo "libpulse enabled          ${libpulse-no}"
3552 echo "librtmp enabled           ${librtmp-no}"
3553 echo "libschroedinger enabled   ${libschroedinger-no}"
3554 echo "libspeex enabled          ${libspeex-no}"
3555 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3556 echo "libtheora enabled         ${libtheora-no}"
3557 echo "libutvideo enabled        ${libutvideo-no}"
3558 echo "libv4l2 enabled           ${libv4l2-no}"
3559 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3560 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3561 echo "libvorbis enabled         ${libvorbis-no}"
3562 echo "libvpx enabled            ${libvpx-no}"
3563 echo "libx264 enabled           ${libx264-no}"
3564 echo "libxavs enabled           ${libxavs-no}"
3565 echo "libxvid enabled           ${libxvid-no}"
3566 echo "openal enabled            ${openal-no}"
3567 echo "openssl enabled           ${openssl-no}"
3568 echo "zlib enabled              ${zlib-no}"
3569 echo "bzlib enabled             ${bzlib-no}"
3570 echo
3571
3572 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3573     echo "Enabled ${type}s:"
3574     eval list=\$$(toupper $type)_LIST
3575     print_enabled '_*' $list | sort | pr -r -3 -t
3576     echo
3577 done
3578
3579 license="LGPL version 2.1 or later"
3580 if enabled nonfree; then
3581     license="nonfree and unredistributable"
3582 elif enabled gplv3; then
3583     license="GPL version 3 or later"
3584 elif enabled lgplv3; then
3585     license="LGPL version 3 or later"
3586 elif enabled gpl; then
3587     license="GPL version 2 or later"
3588 fi
3589
3590 echo "License: $license"
3591
3592 echo "Creating config.mak and config.h..."
3593
3594 test -e Makefile || $ln_s "$source_path/Makefile" .
3595
3596 enabled stripping || strip="echo skipping strip"
3597
3598 config_files="$TMPH config.mak"
3599
3600 cat > config.mak <<EOF
3601 # Automatically generated by configure - do not modify!
3602 ifndef FFMPEG_CONFIG_MAK
3603 FFMPEG_CONFIG_MAK=1
3604 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3605 prefix=$prefix
3606 LIBDIR=\$(DESTDIR)$libdir
3607 SHLIBDIR=\$(DESTDIR)$shlibdir
3608 INCDIR=\$(DESTDIR)$incdir
3609 BINDIR=\$(DESTDIR)$bindir
3610 DATADIR=\$(DESTDIR)$datadir
3611 MANDIR=\$(DESTDIR)$mandir
3612 SRC_PATH=$source_path
3613 ifndef MAIN_MAKEFILE
3614 SRC_PATH:=\$(SRC_PATH:.%=..%)
3615 endif
3616 CC_IDENT=$cc_ident
3617 ARCH=$arch
3618 CC=$cc
3619 CXX=$cxx
3620 AS=$as
3621 LD=$ld
3622 DEPCC=$dep_cc
3623 YASM=$yasmexe
3624 YASMDEP=$yasmexe
3625 AR=$ar
3626 RANLIB=$ranlib
3627 CP=cp -p
3628 LN_S=$ln_s
3629 STRIP=$strip
3630 CPPFLAGS=$CPPFLAGS
3631 CFLAGS=$CFLAGS
3632 CXXFLAGS=$CXXFLAGS
3633 ASFLAGS=$ASFLAGS
3634 AS_O=$CC_O
3635 CC_O=$CC_O
3636 CXX_O=$CXX_O
3637 LDFLAGS=$LDFLAGS
3638 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3639 SHFLAGS=$SHFLAGS
3640 YASMFLAGS=$YASMFLAGS
3641 BUILDSUF=$build_suffix
3642 PROGSSUF=$progs_suffix
3643 FULLNAME=$FULLNAME
3644 LIBPREF=$LIBPREF
3645 LIBSUF=$LIBSUF
3646 LIBNAME=$LIBNAME
3647 SLIBPREF=$SLIBPREF
3648 SLIBSUF=$SLIBSUF
3649 EXESUF=$EXESUF
3650 EXTRA_VERSION=$extra_version
3651 DEPFLAGS=$DEPFLAGS
3652 CCDEP=$CCDEP
3653 CXXDEP=$CXXDEP
3654 ASDEP=$ASDEP
3655 CC_DEPFLAGS=$CC_DEPFLAGS
3656 AS_DEPFLAGS=$AS_DEPFLAGS
3657 HOSTCC=$host_cc
3658 HOSTCFLAGS=$host_cflags
3659 HOSTEXESUF=$HOSTEXESUF
3660 HOSTLDFLAGS=$host_ldflags
3661 HOSTLIBS=$host_libs
3662 TARGET_EXEC=$target_exec
3663 TARGET_PATH=$target_path
3664 SDL_LIBS=$sdl_libs
3665 SDL_CFLAGS=$sdl_cflags
3666 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3667 EXTRALIBS=$extralibs
3668 INSTALL=$install
3669 LIBTARGET=${LIBTARGET}
3670 SLIBNAME=${SLIBNAME}
3671 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3672 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3673 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3674 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3675 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3676 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3677 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3678 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3679 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3680 NOREDZONE_FLAGS=$noredzone_flags
3681 EOF
3682
3683 get_version(){
3684     name=$1
3685     file=$source_path/$2
3686 # This condition will be removed when we stop supporting old libpostproc versions
3687 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3688     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3689     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3690 fi
3691     lcname=$(tolower $name)
3692     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3693     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3694 }
3695
3696 get_version LIBAVCODEC  libavcodec/version.h
3697 get_version LIBAVDEVICE libavdevice/avdevice.h
3698 get_version LIBAVFILTER libavfilter/version.h
3699 get_version LIBAVFORMAT libavformat/version.h
3700 get_version LIBAVUTIL   libavutil/avutil.h
3701 get_version LIBPOSTPROC libpostproc/postprocess.h
3702 get_version LIBSWRESAMPLE libswresample/swresample.h
3703 get_version LIBSWSCALE  libswscale/swscale.h
3704
3705 cat > $TMPH <<EOF
3706 /* Automatically generated by configure - do not modify! */
3707 #ifndef FFMPEG_CONFIG_H
3708 #define FFMPEG_CONFIG_H
3709 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3710 #define FFMPEG_LICENSE "$(c_escape $license)"
3711 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3712 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3713 #define CC_TYPE "$cc_type"
3714 #define CC_VERSION $cc_version
3715 #define restrict $_restrict
3716 #define EXTERN_PREFIX "${extern_prefix}"
3717 #define EXTERN_ASM ${extern_prefix}
3718 #define SLIBSUF "$SLIBSUF"
3719 EOF
3720
3721 test -n "$malloc_prefix" &&
3722     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3723
3724 if enabled small || disabled optimizations; then
3725     echo "#undef  av_always_inline"  >> $TMPH
3726     if enabled small; then
3727         echo "#define av_always_inline inline"  >> $TMPH
3728     else
3729         echo "#define av_always_inline av_unused"  >> $TMPH
3730     fi
3731 fi
3732
3733 if enabled yasm; then
3734     append config_files $TMPASM
3735     printf '' >$TMPASM
3736 fi
3737
3738 print_config ARCH_   "$config_files" $ARCH_LIST
3739 print_config HAVE_   "$config_files" $HAVE_LIST
3740 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3741                                      $CONFIG_EXTRA      \
3742                                      $ALL_COMPONENTS    \
3743
3744 cat >>config.mak <<EOF
3745 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3746 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3747 LAVF_FATE_TESTS=$(print_enabled -n _test $LAVF_FATE_TESTS)
3748 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3749 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3750 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3751 EOF
3752
3753 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3754 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3755
3756 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3757 cp_if_changed $TMPH config.h
3758 touch .config
3759
3760 enabled yasm && cp_if_changed $TMPASM config.asm
3761
3762 cat > $TMPH <<EOF
3763 /* Generated by ffconf */
3764 #ifndef AVUTIL_AVCONFIG_H
3765 #define AVUTIL_AVCONFIG_H
3766 EOF
3767
3768 test "$postproc_version" != current && cat >> $TMPH <<EOF
3769 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
3770 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
3771 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
3772 EOF
3773
3774 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3775
3776 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3777
3778 cp_if_changed $TMPH libavutil/avconfig.h
3779
3780 test -n "$WARNINGS" && printf "\n$WARNINGS"
3781
3782 # build pkg-config files
3783
3784 pkgconfig_generate(){
3785 name=$1
3786 shortname=${name#lib}${build_suffix}
3787 comment=$2
3788 version=$3
3789 libs=$4
3790 requires=$5
3791 enabled ${name#lib} || return 0
3792 mkdir -p $name
3793 cat <<EOF > $name/$name.pc
3794 prefix=$prefix
3795 exec_prefix=\${prefix}
3796 libdir=$libdir
3797 includedir=$incdir
3798
3799 Name: $name
3800 Description: $comment
3801 Version: $version
3802 Requires: $(enabled shared || echo $requires)
3803 Requires.private: $(enabled shared && echo $requires)
3804 Conflicts:
3805 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3806 Libs.private: $(enabled shared && echo $libs)
3807 Cflags: -I\${includedir}
3808 EOF
3809 cat <<EOF > $name/$name-uninstalled.pc
3810 prefix=
3811 exec_prefix=
3812 libdir=\${pcfiledir}
3813 includedir=${source_path}
3814
3815 Name: $name
3816 Description: $comment
3817 Version: $version
3818 Requires: $requires
3819 Conflicts:
3820 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3821 Cflags: -I\${includedir}
3822 EOF
3823 }
3824
3825 libavfilter_pc_deps=""
3826 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
3827 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
3828 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
3829 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
3830 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
3831 libavfilter_pc_deps=${libavfilter_pc_deps%, }
3832
3833 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
3834 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
3835
3836 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3837 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3838 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3839 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
3840 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
3841 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3842 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
3843 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"