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