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