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