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