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