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