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