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