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