configure: add --enable/disable-random option
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # Libav 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 LIBAV, 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 Libav."
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 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Component options:
103   --disable-doc            do not build documentation
104   --disable-avconv         disable avconv build
105   --disable-avplay         disable avplay build
106   --disable-avprobe        disable avprobe build
107   --disable-avserver       disable avserver build
108   --disable-avdevice       disable libavdevice build
109   --disable-avcodec        disable libavcodec build
110   --disable-avformat       disable libavformat build
111   --disable-swscale        disable libswscale build
112   --disable-avfilter       disable video filter support [no]
113   --disable-avresample     disable libavresample build [no]
114   --disable-pthreads       disable pthreads [auto]
115   --disable-w32threads     disable Win32 threads [auto]
116   --enable-x11grab         enable X11 grabbing [no]
117   --disable-network        disable network support [no]
118   --disable-dct            disable DCT code
119   --disable-dwt            disable DWT code
120   --disable-lsp            disable LSP code
121   --disable-mdct           disable MDCT code
122   --disable-rdft           disable RDFT code
123   --disable-fft            disable FFT code
124   --enable-dxva2           enable DXVA2 code
125   --enable-vaapi           enable VAAPI code
126   --enable-vda             enable VDA code
127   --enable-vdpau           enable VDPAU code
128
129 Individual component options:
130   --disable-everything     disable all components listed below
131   --disable-encoder=NAME   disable encoder NAME
132   --enable-encoder=NAME    enable encoder NAME
133   --disable-encoders       disable all encoders
134   --disable-decoder=NAME   disable decoder NAME
135   --enable-decoder=NAME    enable decoder NAME
136   --disable-decoders       disable all decoders
137   --disable-hwaccel=NAME   disable hwaccel NAME
138   --enable-hwaccel=NAME    enable hwaccel NAME
139   --disable-hwaccels       disable all hwaccels
140   --disable-muxer=NAME     disable muxer NAME
141   --enable-muxer=NAME      enable muxer NAME
142   --disable-muxers         disable all muxers
143   --disable-demuxer=NAME   disable demuxer NAME
144   --enable-demuxer=NAME    enable demuxer NAME
145   --disable-demuxers       disable all demuxers
146   --enable-parser=NAME     enable parser NAME
147   --disable-parser=NAME    disable parser NAME
148   --disable-parsers        disable all parsers
149   --enable-bsf=NAME        enable bitstream filter NAME
150   --disable-bsf=NAME       disable bitstream filter NAME
151   --disable-bsfs           disable all bitstream filters
152   --enable-protocol=NAME   enable protocol NAME
153   --disable-protocol=NAME  disable protocol NAME
154   --disable-protocols      disable all protocols
155   --enable-indev=NAME      enable input device NAME
156   --disable-indev=NAME     disable input device NAME
157   --disable-indevs         disable input devices
158   --enable-outdev=NAME     enable output device NAME
159   --disable-outdev=NAME    disable output device NAME
160   --disable-outdevs        disable output devices
161   --disable-devices        disable all devices
162   --enable-filter=NAME     enable filter NAME
163   --disable-filter=NAME    disable filter NAME
164   --disable-filters        disable all filters
165
166 External library support:
167   --enable-avisynth        enable reading of AVISynth script files [no]
168   --enable-bzlib           enable bzlib [autodetect]
169   --enable-frei0r          enable frei0r video filtering
170   --enable-gnutls          enable gnutls [no]
171   --enable-libcdio         enable audio CD grabbing with libcdio
172   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
173                            and libraw1394 [no]
174   --enable-libfaac         enable AAC encoding via libfaac [no]
175   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
176   --enable-libfreetype     enable libfreetype [no]
177   --enable-libgsm          enable GSM de/encoding via libgsm [no]
178   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
179   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
180   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
181   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
182   --enable-libopencv       enable video filtering via libopencv [no]
183   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
184   --enable-libpulse        enable Pulseaudio input via libpulse [no]
185   --enable-librtmp         enable RTMP[E] support via librtmp [no]
186   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
187   --enable-libspeex        enable Speex de/encoding via libspeex [no]
188   --enable-libtheora       enable Theora encoding via libtheora [no]
189   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
190   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
191   --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
192   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
193   --enable-libx264         enable H.264 encoding via x264 [no]
194   --enable-libxavs         enable AVS encoding via xavs [no]
195   --enable-libxvid         enable Xvid encoding via xvidcore,
196                            native MPEG-4/Xvid encoder exists [no]
197   --enable-openssl         enable openssl [no]
198   --enable-zlib            enable zlib [autodetect]
199
200 Advanced options (experts only):
201   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
202   --enable-cross-compile   assume a cross-compiler is used
203   --sysroot=PATH           root of cross-build tree
204   --sysinclude=PATH        location of cross-build system headers
205   --target-os=OS           compiler targets OS [$target_os]
206   --target-exec=CMD        command to run executables on target
207   --target-path=DIR        path to view of build directory on target
208   --nm=NM                  use nm tool
209   --ar=AR                  use archive tool AR [$ar_default]
210   --as=AS                  use assembler AS [$as_default]
211   --cc=CC                  use C compiler CC [$cc_default]
212   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
213   --ld=LD                  use linker LD
214   --host-cc=HOSTCC         use host C compiler HOSTCC
215   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
216   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
217   --host-libs=HLIBS        use libs HLIBS when linking for host
218   --host-os=OS             compiler host OS [$target_os]
219   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
220   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
221   --extra-libs=ELIBS       add ELIBS [$ELIBS]
222   --extra-version=STRING   version string suffix []
223   --optflags=OPTFLAGS      override optimization-related compiler flags
224   --build-suffix=SUFFIX    library name suffix []
225   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
226   --arch=ARCH              select architecture [$arch]
227   --cpu=CPU                select the minimum required CPU (affects
228                            instruction selection, may crash on older CPUs)
229   --enable-pic             build position-independent code
230   --enable-sram            allow use of on-chip SRAM
231   --enable-thumb           compile for Thumb instruction set
232   --disable-symver         disable symbol versioning
233   --disable-fastdiv        disable table-based division
234   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
235   --disable-safe-bitstream-reader
236                            disable buffer boundary checking in bitreaders
237                            (faster, but may crash)
238   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
239
240 Optimization options (experts only):
241   --disable-asm            disable all assembler optimizations
242   --disable-altivec        disable AltiVec optimizations
243   --disable-amd3dnow       disable 3DNow! optimizations
244   --disable-amd3dnowext    disable 3DNow! extended optimizations
245   --disable-mmx            disable MMX optimizations
246   --disable-mmxext         disable MMXEXT optimizations
247   --disable-sse            disable SSE optimizations
248   --disable-ssse3          disable SSSE3 optimizations
249   --disable-avx            disable AVX optimizations
250   --disable-fma4           disable FMA4 optimizations
251   --disable-armv5te        disable armv5te optimizations
252   --disable-armv6          disable armv6 optimizations
253   --disable-armv6t2        disable armv6t2 optimizations
254   --disable-armvfp         disable ARM VFP optimizations
255   --disable-mmi            disable MMI optimizations
256   --disable-neon           disable NEON optimizations
257   --disable-vis            disable VIS optimizations
258   --disable-yasm           disable use of yasm assembler
259
260 Developer options (useful when working on Libav itself):
261   --disable-debug          disable debugging symbols
262   --enable-debug=LEVEL     set the debug level [$debuglevel]
263   --disable-optimizations  disable compiler optimizations
264   --enable-extra-warnings  enable more compiler warnings
265   --samples=PATH           location of test samples for FATE, if not set use
266                            \$LIBAV_SAMPLES at make invocation time.
267   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
268                            should be used only for debugging purposes)
269   --enable-random          randomly enable/disable components
270   --disable-random
271   --enable-random=LIST     randomly enable/disable specific components or
272   --disable-random=LIST    component groups. LIST is a comma-separated list
273                            of NAME[:PROB] entries where NAME is a component
274                            (group) and PROB the probability associated with
275                            NAME (default 0.5).
276   --random-seed=VALUE      seed value for --enable/disable-random
277
278 NOTE: Object files are built at the place where configure is launched.
279 EOF
280   exit 0
281 }
282
283 quotes='""'
284
285 log(){
286     echo "$@" >> $logfile
287 }
288
289 log_file(){
290     log BEGIN $1
291     pr -n -t $1 >> $logfile
292     log END $1
293 }
294
295 echolog(){
296     log "$@"
297     echo "$@"
298 }
299
300 warn(){
301     log "WARNING: $*"
302     WARNINGS="${WARNINGS}WARNING: $*\n"
303 }
304
305 die(){
306     echolog "$@"
307     cat <<EOF
308
309 If you think configure made a mistake, make sure you are using the latest
310 version from Git.  If the latest version fails, report the problem to the
311 libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
312 EOF
313     if disabled logging; then
314         cat <<EOF
315 Rerun configure with logging enabled (do not use --disable-logging), and
316 include the log this produces with your report.
317 EOF
318     else
319 cat <<EOF
320 Include the log file "$logfile" produced by configure as this will help
321 solving the problem.
322 EOF
323     fi
324     exit 1
325 }
326
327 # Avoid locale weirdness, besides we really just want to translate ASCII.
328 toupper(){
329     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
330 }
331
332 tolower(){
333     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
334 }
335
336 c_escape(){
337     echo "$*" | sed 's/["\\]/\\\0/g'
338 }
339
340 sh_quote(){
341     v=$(echo "$1" | sed "s/'/'\\\\''/g")
342     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
343     echo "$v"
344 }
345
346 cleanws(){
347     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
348 }
349
350 filter(){
351     pat=$1
352     shift
353     for v; do
354         eval "case $v in $pat) echo $v ;; esac"
355     done
356 }
357
358 filter_out(){
359     pat=$1
360     shift
361     for v; do
362         eval "case $v in $pat) ;; *) echo $v ;; esac"
363     done
364 }
365
366 map(){
367     m=$1
368     shift
369     for v; do eval $m; done
370 }
371
372 set_all(){
373     value=$1
374     shift
375     for var in $*; do
376         eval $var=$value
377     done
378 }
379
380 set_weak(){
381     value=$1
382     shift
383     for var; do
384         eval : \${$var:=$value}
385     done
386 }
387
388 set_safe(){
389     var=$1
390     shift
391     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
392 }
393
394 get_safe(){
395     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
396 }
397
398 pushvar(){
399     for var in $*; do
400         eval level=\${${var}_level:=0}
401         eval ${var}_${level}="\$$var"
402         eval ${var}_level=$(($level+1))
403     done
404 }
405
406 popvar(){
407     for var in $*; do
408         eval level=\${${var}_level:-0}
409         test $level = 0 && continue
410         eval level=$(($level-1))
411         eval $var="\${${var}_${level}}"
412         eval ${var}_level=$level
413         eval unset ${var}_${level}
414     done
415 }
416
417 enable(){
418     set_all yes $*
419 }
420
421 disable(){
422     set_all no $*
423 }
424
425 enable_weak(){
426     set_weak yes $*
427 }
428
429 disable_weak(){
430     set_weak no $*
431 }
432
433 enable_safe(){
434     for var; do
435         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
436     done
437 }
438
439 disable_safe(){
440     for var; do
441         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
442     done
443 }
444
445 do_enable_deep(){
446     for var; do
447         enabled $var && continue
448         eval sel="\$${var}_select"
449         eval sgs="\$${var}_suggest"
450         pushvar var sgs
451         enable_deep $sel
452         popvar sgs
453         enable_deep_weak $sgs
454         popvar var
455     done
456 }
457
458 enable_deep(){
459     do_enable_deep $*
460     enable $*
461 }
462
463 enable_deep_weak(){
464     do_enable_deep $*
465     enable_weak $*
466 }
467
468 enabled(){
469     test "${1#!}" = "$1" && op== || op=!=
470     eval test "x\$${1#!}" $op "xyes"
471 }
472
473 disabled(){
474     test "${1#!}" = "$1" && op== || op=!=
475     eval test "x\$${1#!}" $op "xno"
476 }
477
478 enabled_all(){
479     for opt; do
480         enabled $opt || return 1
481     done
482 }
483
484 disabled_all(){
485     for opt; do
486         disabled $opt || return 1
487     done
488 }
489
490 enabled_any(){
491     for opt; do
492         enabled $opt && return 0
493     done
494 }
495
496 disabled_any(){
497     for opt; do
498         disabled $opt && return 0
499     done
500     return 1
501 }
502
503 set_default(){
504     for opt; do
505         eval : \${$opt:=\$${opt}_default}
506     done
507 }
508
509 is_in(){
510     value=$1
511     shift
512     for var in $*; do
513         [ $var = $value ] && return 0
514     done
515     return 1
516 }
517
518 check_deps(){
519     for cfg; do
520         cfg="${cfg#!}"
521         enabled ${cfg}_checking && die "Circular dependency for $cfg."
522         disabled ${cfg}_checking && continue
523         enable ${cfg}_checking
524
525         eval dep_all="\$${cfg}_deps"
526         eval dep_any="\$${cfg}_deps_any"
527         eval dep_sel="\$${cfg}_select"
528         eval dep_sgs="\$${cfg}_suggest"
529         eval dep_ifa="\$${cfg}_if"
530         eval dep_ifn="\$${cfg}_if_any"
531
532         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
533         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
534         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
535
536         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
537         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
538         enabled_all  $dep_all || disable $cfg
539         enabled_any  $dep_any || disable $cfg
540         disabled_any $dep_sel && disable $cfg
541
542         if enabled $cfg; then
543             eval dep_extralibs="\$${cfg}_extralibs"
544             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
545             enable_deep $dep_sel
546             enable_deep_weak $dep_sgs
547         fi
548
549         disable ${cfg}_checking
550     done
551 }
552
553 print_config_h(){
554     enabled $1 && v=1 || v=0
555     echo "#define $2 $v"
556 }
557
558 print_config_mak(){
559     enabled $1 && v= || v=!
560     echo "$v$2=yes"
561 }
562
563 print_config_asm(){
564     enabled $1 && v=1 || v=0
565     echo "%define $2 $v"
566 }
567
568 print_config(){
569     pfx=$1
570     files=$2
571     shift 2
572     for cfg; do
573         ucname="$(toupper $cfg)"
574         for f in $files; do
575             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
576         done
577     done
578 }
579
580 print_enabled(){
581     test "$1" = -n && end=" " && shift || end="\n"
582     suf=$1
583     shift
584     for v; do
585         enabled $v && printf "%s$end" ${v%$suf};
586     done
587 }
588
589 append(){
590     var=$1
591     shift
592     eval "$var=\"\$$var $*\""
593 }
594
595 prepend(){
596     var=$1
597     shift
598     eval "$var=\"$* \$$var\""
599 }
600
601 add_cppflags(){
602     append CPPFLAGS "$@"
603 }
604
605 add_cflags(){
606     append CFLAGS $($cflags_filter "$@")
607 }
608
609 add_asflags(){
610     append ASFLAGS $($asflags_filter "$@")
611 }
612
613 add_ldflags(){
614     append LDFLAGS $($ldflags_filter "$@")
615 }
616
617 add_extralibs(){
618     prepend extralibs $($ldflags_filter "$@")
619 }
620
621 add_host_cflags(){
622     append host_cflags $($host_cflags_filter "$@")
623 }
624
625 add_host_ldflags(){
626     append host_ldflags $($host_ldflags_filter "$@")
627 }
628
629 check_cmd(){
630     log "$@"
631     "$@" >> $logfile 2>&1
632 }
633
634 cc_o(){
635     eval printf '%s\\n' $CC_O
636 }
637
638 cc_e(){
639     eval printf '%s\\n' $CC_E
640 }
641
642 check_cc(){
643     log check_cc "$@"
644     cat > $TMPC
645     log_file $TMPC
646     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
647 }
648
649 check_cpp(){
650     log check_cpp "$@"
651     cat > $TMPC
652     log_file $TMPC
653     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
654 }
655
656 check_as(){
657     log check_as "$@"
658     cat > $TMPC
659     log_file $TMPC
660     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C -o $TMPO $TMPC
661 }
662
663 check_asm(){
664     log check_asm "$@"
665     name="$1"
666     code="$2"
667     shift 2
668     disable $name
669     check_as "$@" <<EOF && enable $name
670 void foo(void){ __asm__ volatile($code); }
671 EOF
672 }
673
674 check_yasm(){
675     log check_yasm "$@"
676     echo "$1" > $TMPS
677     log_file $TMPS
678     shift 1
679     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
680 }
681
682 check_ld(){
683     log check_ld "$@"
684     flags=''
685     libs=''
686     for f; do
687         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
688     done
689     check_cc $($cflags_filter $flags) || return
690     flags=$($ldflags_filter $flags)
691     libs=$($ldflags_filter $libs)
692     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
693 }
694
695 check_code(){
696     log check_code "$@"
697     check=$1
698     headers=$2
699     code=$3
700     shift 3
701     {
702         for hdr in $headers; do
703             echo "#include <$hdr>"
704         done
705         echo "int main(void) { $code; return 0; }"
706     } | check_$check "$@"
707 }
708
709 check_cppflags(){
710     log check_cppflags "$@"
711     check_cc "$@" <<EOF && append CPPFLAGS "$@"
712 int x;
713 EOF
714 }
715
716 check_cflags(){
717     log check_cflags "$@"
718     set -- $($cflags_filter "$@")
719     check_cc "$@" <<EOF && append CFLAGS "$@"
720 int x;
721 EOF
722 }
723
724 test_ldflags(){
725     log test_ldflags "$@"
726     check_ld "$@" <<EOF
727 int main(void){ return 0; }
728 EOF
729 }
730
731 check_ldflags(){
732     log check_ldflags "$@"
733     test_ldflags "$@" && add_ldflags "$@"
734 }
735
736 check_header(){
737     log check_header "$@"
738     header=$1
739     shift
740     disable_safe $header
741     check_cpp "$@" <<EOF && enable_safe $header
742 #include <$header>
743 int x;
744 EOF
745 }
746
747 check_func(){
748     log check_func "$@"
749     func=$1
750     shift
751     disable $func
752     check_ld "$@" <<EOF && enable $func
753 extern int $func();
754 int main(void){ $func(); }
755 EOF
756 }
757
758 check_mathfunc(){
759     log check_mathfunc "$@"
760     func=$1
761     shift
762     disable $func
763     check_ld "$@" <<EOF && enable $func
764 #include <math.h>
765 float foo(float f) { return $func(f); }
766 int main(void){ return 0; }
767 EOF
768 }
769
770 check_func_headers(){
771     log check_func_headers "$@"
772     headers=$1
773     funcs=$2
774     shift 2
775     {
776         for hdr in $headers; do
777             echo "#include <$hdr>"
778         done
779         for func in $funcs; do
780             echo "long check_$func(void) { return (long) $func; }"
781         done
782         echo "int main(void) { return 0; }"
783     } | check_ld "$@" && enable $funcs && enable_safe $headers
784 }
785
786 check_cpp_condition(){
787     log check_cpp_condition "$@"
788     header=$1
789     condition=$2
790     shift 2
791     check_cpp "$@" <<EOF
792 #include <$header>
793 #if !($condition)
794 #error "unsatisfied condition: $condition"
795 #endif
796 EOF
797 }
798
799 check_lib(){
800     log check_lib "$@"
801     header="$1"
802     func="$2"
803     shift 2
804     check_header $header && check_func $func "$@" && add_extralibs "$@"
805 }
806
807 check_lib2(){
808     log check_lib2 "$@"
809     headers="$1"
810     funcs="$2"
811     shift 2
812     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
813 }
814
815 check_pkg_config(){
816     log check_pkg_config "$@"
817     pkg="$1"
818     headers="$2"
819     funcs="$3"
820     shift 3
821     $pkg_config --exists $pkg || return
822     pkg_cflags=$($pkg_config --cflags $pkg)
823     pkg_libs=$($pkg_config --libs $pkg)
824     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
825         set_safe ${pkg}_cflags $pkg_cflags   &&
826         set_safe ${pkg}_libs   $pkg_libs
827 }
828
829 check_exec(){
830     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
831 }
832
833 check_exec_crash(){
834     code=$(cat)
835
836     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
837     # are safe but may not be available everywhere.  Thus we use
838     # raise(SIGTERM) instead.  The check is run in a subshell so we
839     # can redirect the "Terminated" message from the shell.  SIGBUS
840     # is not defined by standard C so it is used conditionally.
841
842     (check_exec "$@") >> $logfile 2>&1 <<EOF
843 #include <signal.h>
844 static void sighandler(int sig){
845     raise(SIGTERM);
846 }
847 int main(void){
848     signal(SIGILL, sighandler);
849     signal(SIGFPE, sighandler);
850     signal(SIGSEGV, sighandler);
851 #ifdef SIGBUS
852     signal(SIGBUS, sighandler);
853 #endif
854     { $code }
855 }
856 EOF
857 }
858
859 check_type(){
860     log check_type "$@"
861     headers=$1
862     type=$2
863     shift 2
864     disable_safe "$type"
865     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
866 }
867
868 check_struct(){
869     log check_type "$@"
870     headers=$1
871     struct=$2
872     member=$3
873     shift 3
874     disable_safe "${struct}_${member}"
875     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
876         enable_safe "${struct}_${member}"
877 }
878
879 require(){
880     name="$1"
881     header="$2"
882     func="$3"
883     shift 3
884     check_lib $header $func "$@" || die "ERROR: $name not found"
885 }
886
887 require2(){
888     name="$1"
889     headers="$2"
890     func="$3"
891     shift 3
892     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
893 }
894
895 require_pkg_config(){
896     pkg="$1"
897     check_pkg_config "$@" || die "ERROR: $pkg not found"
898     add_cflags    $(get_safe ${pkg}_cflags)
899     add_extralibs $(get_safe ${pkg}_libs)
900 }
901
902 check_host_cc(){
903     log check_host_cc "$@"
904     cat > $TMPC
905     log_file $TMPC
906     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
907 }
908
909 check_host_cflags(){
910     log check_host_cflags "$@"
911     set -- $($host_cflags_filter "$@")
912     check_host_cc "$@" <<EOF && append host_cflags "$@"
913 int x;
914 EOF
915 }
916
917 apply(){
918     file=$1
919     shift
920     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
921 }
922
923 cp_if_changed(){
924     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
925     mkdir -p "$(dirname $2)"
926     cp -f "$1" "$2"
927 }
928
929 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
930 # system-dependent things.
931
932 COMPONENT_LIST="
933     bsfs
934     decoders
935     demuxers
936     encoders
937     filters
938     hwaccels
939     indevs
940     muxers
941     outdevs
942     parsers
943     protocols
944 "
945
946 PROGRAM_LIST="
947     avconv
948     avplay
949     avprobe
950     avserver
951 "
952
953 CONFIG_LIST="
954     $COMPONENT_LIST
955     $PROGRAM_LIST
956     avcodec
957     avdevice
958     avfilter
959     avformat
960     avresample
961     avisynth
962     bzlib
963     dct
964     doc
965     dwt
966     dxva2
967     fastdiv
968     fft
969     frei0r
970     gnutls
971     gpl
972     gray
973     hardcoded_tables
974     libcdio
975     libdc1394
976     libfaac
977     libfdk_aac
978     libfreetype
979     libgsm
980     libilbc
981     libmp3lame
982     libopencore_amrnb
983     libopencore_amrwb
984     libopencv
985     libopenjpeg
986     libpulse
987     librtmp
988     libschroedinger
989     libspeex
990     libtheora
991     libvo_aacenc
992     libvo_amrwbenc
993     libvorbis
994     libvpx
995     libx264
996     libxavs
997     libxvid
998     lsp
999     mdct
1000     memalign_hack
1001     network
1002     nonfree
1003     openssl
1004     pic
1005     rdft
1006     runtime_cpudetect
1007     safe_bitstream_reader
1008     shared
1009     small
1010     sram
1011     static
1012     swscale
1013     swscale_alpha
1014     thumb
1015     vaapi
1016     vda
1017     vdpau
1018     version3
1019     xmm_clobber_test
1020     x11grab
1021     zlib
1022 "
1023
1024 THREADS_LIST='
1025     pthreads
1026     w32threads
1027 '
1028
1029 ARCH_LIST='
1030     alpha
1031     arm
1032     avr32
1033     avr32_ap
1034     avr32_uc
1035     bfin
1036     ia64
1037     m68k
1038     mips
1039     mips64
1040     parisc
1041     ppc
1042     ppc64
1043     s390
1044     sh4
1045     sparc
1046     sparc64
1047     tomi
1048     x86
1049     x86_32
1050     x86_64
1051 '
1052
1053 ARCH_EXT_LIST='
1054     altivec
1055     amd3dnow
1056     amd3dnowext
1057     armv5te
1058     armv6
1059     armv6t2
1060     armvfp
1061     avx
1062     fma4
1063     mmi
1064     mmx
1065     mmxext
1066     neon
1067     ppc4xx
1068     sse
1069     ssse3
1070     vfpv3
1071     vis
1072 '
1073
1074 HAVE_LIST_PUB='
1075     bigendian
1076     fast_unaligned
1077 '
1078
1079 HAVE_LIST="
1080     $ARCH_EXT_LIST
1081     $HAVE_LIST_PUB
1082     $THREADS_LIST
1083     aligned_malloc
1084     aligned_stack
1085     alsa_asoundlib_h
1086     altivec_h
1087     arpa_inet_h
1088     asm_mod_q
1089     asm_mod_y
1090     attribute_may_alias
1091     attribute_packed
1092     cbrtf
1093     closesocket
1094     cmov
1095     cpuid
1096     cpunop
1097     dcbzl
1098     dev_bktr_ioctl_bt848_h
1099     dev_bktr_ioctl_meteor_h
1100     dev_ic_bt8xx_h
1101     dev_video_bktr_ioctl_bt848_h
1102     dev_video_meteor_ioctl_meteor_h
1103     dlfcn_h
1104     dlopen
1105     dos_paths
1106     dxva_h
1107     ebp_available
1108     ebx_available
1109     exp2
1110     exp2f
1111     fast_64bit
1112     fast_clz
1113     fast_cmov
1114     fcntl
1115     fork
1116     getaddrinfo
1117     gethrtime
1118     getopt
1119     GetProcessAffinityMask
1120     GetProcessMemoryInfo
1121     GetProcessTimes
1122     GetSystemTimeAsFileTime
1123     getrusage
1124     gettimeofday
1125     gnu_as
1126     ibm_asm
1127     inet_aton
1128     inline_asm
1129     io_h
1130     isatty
1131     isinf
1132     isnan
1133     jack_port_get_latency_range
1134     ldbrx
1135     libdc1394_1
1136     libdc1394_2
1137     llrint
1138     llrintf
1139     local_aligned_16
1140     local_aligned_8
1141     localtime_r
1142     log2
1143     log2f
1144     loongson
1145     lrint
1146     lrintf
1147     machine_ioctl_bt848_h
1148     machine_ioctl_meteor_h
1149     malloc_h
1150     MapViewOfFile
1151     memalign
1152     mkstemp
1153     mm_empty
1154     mmap
1155     nanosleep
1156     netinet_sctp_h
1157     poll_h
1158     posix_memalign
1159     rdtsc
1160     rint
1161     round
1162     roundf
1163     rweflags
1164     sched_getaffinity
1165     sdl
1166     sdl_video_size
1167     setmode
1168     setrlimit
1169     Sleep
1170     sndio_h
1171     socklen_t
1172     soundcard_h
1173     strerror_r
1174     strptime
1175     strtok_r
1176     struct_addrinfo
1177     struct_group_source_req
1178     struct_ip_mreq_source
1179     struct_ipv6_mreq
1180     struct_pollfd
1181     struct_rusage_ru_maxrss
1182     struct_sockaddr_in6
1183     struct_sockaddr_sa_len
1184     struct_sockaddr_storage
1185     struct_v4l2_frmivalenum_discrete
1186     symver
1187     symver_asm_label
1188     symver_gnu_asm
1189     sysconf
1190     sysctl
1191     sys_mman_h
1192     sys_param_h
1193     sys_resource_h
1194     sys_select_h
1195     sys_soundcard_h
1196     sys_time_h
1197     sys_videoio_h
1198     threads
1199     trunc
1200     truncf
1201     unistd_h
1202     usleep
1203     vfp_args
1204     VirtualAlloc
1205     windows_h
1206     winsock2_h
1207     xform_asm
1208     xgetbv
1209     xmm_clobbers
1210     yasm
1211 "
1212
1213 # options emitted with CONFIG_ prefix but not available on command line
1214 CONFIG_EXTRA="
1215     aandcttables
1216     ac3dsp
1217     avutil
1218     gcrypt
1219     golomb
1220     gplv3
1221     h264chroma
1222     h264dsp
1223     h264pred
1224     h264qpel
1225     huffman
1226     lgplv3
1227     lpc
1228     mpegaudiodsp
1229     nettle
1230     rtpdec
1231     sinewin
1232     vp3dsp
1233 "
1234
1235 CMDLINE_SELECT="
1236     $ARCH_EXT_LIST
1237     $CONFIG_LIST
1238     $THREADS_LIST
1239     asm
1240     cross_compile
1241     debug
1242     extra_warnings
1243     logging
1244     optimizations
1245     symver
1246     yasm
1247 "
1248
1249 PATHS_LIST='
1250     bindir
1251     datadir
1252     incdir
1253     libdir
1254     mandir
1255     prefix
1256     shlibdir
1257 '
1258
1259 CMDLINE_SET="
1260     $PATHS_LIST
1261     ar
1262     arch
1263     as
1264     build_suffix
1265     cc
1266     cpu
1267     cross_prefix
1268     dep_cc
1269     extra_version
1270     host_cc
1271     host_cflags
1272     host_ldflags
1273     host_libs
1274     host_os
1275     ld
1276     logfile
1277     malloc_prefix
1278     nm
1279     optflags
1280     pkg_config
1281     random_seed
1282     samples
1283     sysinclude
1284     sysroot
1285     target_exec
1286     target_os
1287     target_path
1288 "
1289
1290 CMDLINE_APPEND="
1291     extra_cflags
1292 "
1293
1294 # code dependency declarations
1295
1296 # architecture extensions
1297
1298 armv5te_deps="arm"
1299 armv6_deps="arm"
1300 armv6t2_deps="arm"
1301 armvfp_deps="arm"
1302 neon_deps="arm"
1303 vfpv3_deps="armvfp"
1304
1305 mmi_deps="mips"
1306
1307 altivec_deps="ppc"
1308 ppc4xx_deps="ppc"
1309
1310 vis_deps="sparc"
1311
1312 x86_64_suggest="cmov fast_cmov"
1313 amd3dnow_deps="mmx"
1314 amd3dnowext_deps="amd3dnow"
1315 mmx_deps="x86"
1316 mmxext_deps="mmx"
1317 sse_deps="mmx"
1318 ssse3_deps="sse"
1319 avx_deps="ssse3"
1320 fma4_deps="avx"
1321
1322 aligned_stack_if_any="ppc x86"
1323 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1324 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1325 fast_unaligned_if_any="armv6 ppc x86"
1326
1327 inline_asm_deps="!tms470"
1328 need_memalign="altivec neon sse"
1329
1330 symver_if_any="symver_asm_label symver_gnu_asm"
1331
1332 # subsystems
1333 dct_select="rdft"
1334 mdct_select="fft"
1335 rdft_select="fft"
1336 mpegaudiodsp_select="dct"
1337
1338 # decoders / encoders / hardware accelerators
1339 aac_decoder_select="mdct sinewin"
1340 aac_encoder_select="mdct sinewin"
1341 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1342 ac3_decoder_select="mdct ac3dsp ac3_parser"
1343 ac3_encoder_select="mdct ac3dsp"
1344 ac3_fixed_encoder_select="mdct ac3dsp"
1345 alac_encoder_select="lpc"
1346 amrnb_decoder_select="lsp"
1347 amrwb_decoder_select="lsp"
1348 atrac1_decoder_select="mdct sinewin"
1349 atrac3_decoder_select="mdct"
1350 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1351 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1352 cavs_decoder_select="golomb"
1353 cook_decoder_select="mdct sinewin"
1354 cscd_decoder_suggest="zlib"
1355 dca_decoder_select="mdct"
1356 dnxhd_encoder_select="aandcttables"
1357 dxa_decoder_select="zlib"
1358 eac3_decoder_select="ac3_decoder"
1359 eac3_encoder_select="mdct ac3dsp"
1360 eamad_decoder_select="aandcttables"
1361 eatgq_decoder_select="aandcttables"
1362 eatqi_decoder_select="aandcttables"
1363 ffv1_decoder_select="golomb"
1364 flac_decoder_select="golomb"
1365 flac_encoder_select="golomb lpc"
1366 flashsv_decoder_select="zlib"
1367 flashsv_encoder_select="zlib"
1368 flashsv2_decoder_select="zlib"
1369 flv_decoder_select="h263_decoder"
1370 flv_encoder_select="h263_encoder"
1371 fraps_decoder_select="huffman"
1372 h261_encoder_select="aandcttables"
1373 h263_decoder_select="h263_parser"
1374 h263_encoder_select="aandcttables"
1375 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1376 h263i_decoder_select="h263_decoder"
1377 h263p_encoder_select="h263_encoder"
1378 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1379 h264_dxva2_hwaccel_deps="dxva2api_h"
1380 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1381 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1382 h264_vda_hwaccel_select="vda h264_decoder"
1383 h264_vdpau_decoder_select="vdpau h264_decoder"
1384 iac_decoder_select="fft mdct sinewin"
1385 imc_decoder_select="fft mdct sinewin"
1386 jpegls_decoder_select="golomb"
1387 jpegls_encoder_select="golomb"
1388 ljpeg_encoder_select="aandcttables"
1389 loco_decoder_select="golomb"
1390 mjpeg_encoder_select="aandcttables"
1391 mlp_decoder_select="mlp_parser"
1392 mp1_decoder_select="mpegaudiodsp"
1393 mp1float_decoder_select="mpegaudiodsp"
1394 mp2_decoder_select="mpegaudiodsp"
1395 mp2float_decoder_select="mpegaudiodsp"
1396 mp3_decoder_select="mpegaudiodsp"
1397 mp3adu_decoder_select="mpegaudiodsp"
1398 mp3adufloat_decoder_select="mpegaudiodsp"
1399 mp3float_decoder_select="mpegaudiodsp"
1400 mp3on4_decoder_select="mpegaudiodsp"
1401 mp3on4float_decoder_select="mpegaudiodsp"
1402 mpc7_decoder_select="mpegaudiodsp"
1403 mpc8_decoder_select="mpegaudiodsp"
1404 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1405 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1406 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1407 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1408 mpeg1video_encoder_select="aandcttables"
1409 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1410 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1411 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1412 mpeg2video_encoder_select="aandcttables"
1413 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1414 mpeg4_encoder_select="h263_encoder"
1415 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1416 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1417 msmpeg4v1_decoder_select="h263_decoder"
1418 msmpeg4v1_encoder_select="h263_encoder"
1419 msmpeg4v2_decoder_select="h263_decoder"
1420 msmpeg4v2_encoder_select="h263_encoder"
1421 msmpeg4v3_decoder_select="h263_decoder"
1422 msmpeg4v3_encoder_select="h263_encoder"
1423 nellymoser_decoder_select="mdct sinewin"
1424 nellymoser_encoder_select="mdct sinewin"
1425 png_decoder_select="zlib"
1426 png_encoder_select="zlib"
1427 qcelp_decoder_select="lsp"
1428 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1429 ra_144_encoder_select="lpc"
1430 ralf_decoder_select="golomb"
1431 rv10_decoder_select="h263_decoder"
1432 rv10_encoder_select="h263_encoder"
1433 rv20_decoder_select="h263_decoder"
1434 rv20_encoder_select="h263_encoder"
1435 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1436 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1437 shorten_decoder_select="golomb"
1438 sipr_decoder_select="lsp"
1439 snow_decoder_select="dwt"
1440 snow_encoder_select="aandcttables dwt"
1441 svq1_encoder_select="aandcttables"
1442 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1443 svq3_decoder_suggest="zlib"
1444 theora_decoder_select="vp3_decoder"
1445 tiff_decoder_suggest="zlib"
1446 tiff_encoder_suggest="zlib"
1447 truehd_decoder_select="mlp_decoder"
1448 tscc_decoder_select="zlib"
1449 twinvq_decoder_select="mdct lsp sinewin"
1450 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1451 vc1_dxva2_hwaccel_deps="dxva2api_h"
1452 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1453 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1454 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1455 vc1image_decoder_select="vc1_decoder"
1456 vorbis_decoder_select="mdct"
1457 vorbis_encoder_select="mdct"
1458 vp3_decoder_select="vp3dsp"
1459 vp5_decoder_select="vp3dsp"
1460 vp6_decoder_select="huffman vp3dsp"
1461 vp6a_decoder_select="vp6_decoder"
1462 vp6f_decoder_select="vp6_decoder"
1463 vp8_decoder_select="h264pred h264qpel"
1464 wmapro_decoder_select="mdct sinewin"
1465 wmav1_decoder_select="mdct sinewin"
1466 wmav1_encoder_select="mdct sinewin"
1467 wmav2_decoder_select="mdct sinewin"
1468 wmav2_encoder_select="mdct sinewin"
1469 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1470 wmv1_decoder_select="h263_decoder"
1471 wmv1_encoder_select="h263_encoder"
1472 wmv2_decoder_select="h263_decoder"
1473 wmv2_encoder_select="h263_encoder"
1474 wmv3_decoder_select="vc1_decoder"
1475 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1476 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1477 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1478 wmv3image_decoder_select="wmv3_decoder"
1479 zerocodec_decoder_select="zlib"
1480 zlib_decoder_select="zlib"
1481 zlib_encoder_select="zlib"
1482 zmbv_decoder_select="zlib"
1483 zmbv_encoder_select="zlib"
1484
1485 vaapi_deps="va_va_h"
1486 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1487 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1488
1489 # parsers
1490 h264_parser_select="golomb h264dsp h264pred"
1491
1492 # external libraries
1493 libfaac_encoder_deps="libfaac"
1494 libfdk_aac_encoder_deps="libfdk_aac"
1495 libgsm_decoder_deps="libgsm"
1496 libgsm_encoder_deps="libgsm"
1497 libgsm_ms_decoder_deps="libgsm"
1498 libgsm_ms_encoder_deps="libgsm"
1499 libilbc_decoder_deps="libilbc"
1500 libilbc_encoder_deps="libilbc"
1501 libmp3lame_encoder_deps="libmp3lame"
1502 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1503 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1504 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1505 libopenjpeg_decoder_deps="libopenjpeg"
1506 libopenjpeg_encoder_deps="libopenjpeg"
1507 libschroedinger_decoder_deps="libschroedinger"
1508 libschroedinger_encoder_deps="libschroedinger"
1509 libspeex_decoder_deps="libspeex"
1510 libspeex_encoder_deps="libspeex"
1511 libtheora_encoder_deps="libtheora"
1512 libvo_aacenc_encoder_deps="libvo_aacenc"
1513 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1514 libvorbis_encoder_deps="libvorbis"
1515 libvpx_decoder_deps="libvpx"
1516 libvpx_encoder_deps="libvpx"
1517 libx264_encoder_deps="libx264"
1518 libxavs_encoder_deps="libxavs"
1519 libxvid_encoder_deps="libxvid"
1520
1521 # demuxers / muxers
1522 ac3_demuxer_select="ac3_parser"
1523 asf_stream_muxer_select="asf_muxer"
1524 avisynth_demuxer_deps="avisynth"
1525 dirac_demuxer_select="dirac_parser"
1526 eac3_demuxer_select="ac3_parser"
1527 flac_demuxer_select="flac_parser"
1528 ipod_muxer_select="mov_muxer"
1529 matroska_audio_muxer_select="matroska_muxer"
1530 matroska_demuxer_suggest="zlib bzlib"
1531 mov_demuxer_suggest="zlib"
1532 mp3_demuxer_select="mpegaudio_parser"
1533 mp4_muxer_select="mov_muxer"
1534 mpegts_muxer_select="adts_muxer latm_muxer"
1535 mpegtsraw_demuxer_select="mpegts_demuxer"
1536 mxf_d10_muxer_select="mxf_muxer"
1537 ogg_demuxer_select="golomb"
1538 psp_muxer_select="mov_muxer"
1539 rtp_demuxer_select="sdp_demuxer"
1540 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1541 rtsp_demuxer_select="http_protocol rtpdec"
1542 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1543 sap_demuxer_select="sdp_demuxer"
1544 sap_muxer_select="rtp_muxer rtp_protocol"
1545 sdp_demuxer_select="rtpdec"
1546 spdif_muxer_select="aac_parser"
1547 tg2_muxer_select="mov_muxer"
1548 tgp_muxer_select="mov_muxer"
1549 w64_demuxer_deps="wav_demuxer"
1550
1551 # indevs / outdevs
1552 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1553 alsa_outdev_deps="alsa_asoundlib_h"
1554 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1555 dv1394_indev_deps="dv1394 dv_demuxer"
1556 fbdev_indev_deps="linux_fb_h"
1557 jack_indev_deps="jack_jack_h"
1558 libcdio_indev_deps="libcdio"
1559 libdc1394_indev_deps="libdc1394"
1560 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1561 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1562 pulse_indev_deps="libpulse"
1563 sndio_indev_deps="sndio_h"
1564 sndio_outdev_deps="sndio_h"
1565 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1566 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1567 vfwcap_indev_extralibs="-lavicap32"
1568 x11grab_indev_deps="x11grab XShmCreateImage"
1569
1570 # protocols
1571 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1572 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1573 ffrtmpcrypt_protocol_select="tcp_protocol"
1574 ffrtmphttp_protocol_deps="!librtmp_protocol"
1575 ffrtmphttp_protocol_select="http_protocol"
1576 gopher_protocol_deps="network"
1577 httpproxy_protocol_deps="network"
1578 httpproxy_protocol_select="tcp_protocol"
1579 http_protocol_deps="network"
1580 http_protocol_select="tcp_protocol"
1581 https_protocol_select="tls_protocol"
1582 librtmp_protocol_deps="librtmp"
1583 librtmpe_protocol_deps="librtmp"
1584 librtmps_protocol_deps="librtmp"
1585 librtmpt_protocol_deps="librtmp"
1586 librtmpte_protocol_deps="librtmp"
1587 mmsh_protocol_select="http_protocol"
1588 mmst_protocol_deps="network"
1589 rtmp_protocol_deps="!librtmp_protocol"
1590 rtmp_protocol_select="tcp_protocol"
1591 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1592 rtmps_protocol_deps="!librtmp_protocol"
1593 rtmps_protocol_select="tls_protocol"
1594 rtmpt_protocol_select="ffrtmphttp_protocol"
1595 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1596 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1597 rtp_protocol_select="udp_protocol"
1598 sctp_protocol_deps="network netinet_sctp_h"
1599 tcp_protocol_deps="network"
1600 tls_protocol_deps_any="openssl gnutls"
1601 tls_protocol_select="tcp_protocol"
1602 udp_protocol_deps="network"
1603
1604 # filters
1605 blackframe_filter_deps="gpl"
1606 boxblur_filter_deps="gpl"
1607 cropdetect_filter_deps="gpl"
1608 delogo_filter_deps="gpl"
1609 drawtext_filter_deps="libfreetype"
1610 frei0r_filter_deps="frei0r dlopen strtok_r"
1611 frei0r_filter_extralibs='$ldl'
1612 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1613 frei0r_src_filter_extralibs='$ldl'
1614 hqdn3d_filter_deps="gpl"
1615 resample_filter_deps="avresample"
1616 ocv_filter_deps="libopencv"
1617 scale_filter_deps="swscale"
1618 yadif_filter_deps="gpl"
1619
1620 # libraries
1621 avdevice_deps="avcodec avformat"
1622 avformat_deps="avcodec"
1623
1624 # programs
1625 avconv_deps="avcodec avfilter avformat avresample swscale
1626              aformat_filter asyncts_filter
1627              format_filter fps_filter scale_filter setpts_filter"
1628 avplay_deps="avcodec avformat swscale sdl"
1629 avplay_select="rdft"
1630 avprobe_deps="avcodec avformat"
1631 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1632 avserver_extralibs='$ldl'
1633
1634 doc_deps="texi2html"
1635
1636 # tests
1637
1638 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1639 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1640
1641 test_deps(){
1642     suf1=$1
1643     suf2=$2
1644     shift 2
1645     for v; do
1646         dep=${v%=*}
1647         tests=${v#*=}
1648         for name in ${tests}; do
1649             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1650         done
1651     done
1652 }
1653
1654 test_deps _muxer _demuxer                                               \
1655     aiff                                                                \
1656     pcm_alaw=alaw                                                       \
1657     asf                                                                 \
1658     au                                                                  \
1659     avi                                                                 \
1660     dv=dv_fmt                                                           \
1661     ffm                                                                 \
1662     flv=flv_fmt                                                         \
1663     gxf                                                                 \
1664     matroska=mkv                                                        \
1665     mmf                                                                 \
1666     mov                                                                 \
1667     pcm_mulaw=mulaw                                                     \
1668     mxf="mxf mxf_d10"                                                   \
1669     nut                                                                 \
1670     ogg                                                                 \
1671     rawvideo=pixfmt                                                     \
1672     rm                                                                  \
1673     swf                                                                 \
1674     mpegts=ts                                                           \
1675     voc                                                                 \
1676     wav                                                                 \
1677     yuv4mpegpipe=yuv4mpeg                                               \
1678
1679 # default parameters
1680
1681 logfile="config.log"
1682
1683 # installation paths
1684 prefix_default="/usr/local"
1685 bindir_default='${prefix}/bin'
1686 datadir_default='${prefix}/share/avconv'
1687 incdir_default='${prefix}/include'
1688 libdir_default='${prefix}/lib'
1689 mandir_default='${prefix}/share/man'
1690 shlibdir_default="$libdir_default"
1691
1692 # toolchain
1693 ar_default="ar"
1694 cc_default="gcc"
1695 host_cc_default="gcc"
1696 ln_s="ln -sf"
1697 nm_default="nm"
1698 objformat="elf"
1699 pkg_config_default=pkg-config
1700 ranlib="ranlib"
1701 yasmexe="yasm"
1702
1703 nm_opts='-g'
1704 nogas=":"
1705
1706 # machine
1707 arch_default=$(uname -m)
1708 cpu="generic"
1709
1710 # OS
1711 target_os_default=$(tolower $(uname -s))
1712 host_os=$target_os_default
1713
1714 # configurable options
1715 enable $PROGRAM_LIST
1716
1717 enable avcodec
1718 enable avdevice
1719 enable avfilter
1720 enable avformat
1721 enable avresample
1722 enable avutil
1723 enable swscale
1724
1725 enable asm
1726 enable debug
1727 enable doc
1728 enable fastdiv
1729 enable network
1730 enable optimizations
1731 enable safe_bitstream_reader
1732 enable static
1733 enable swscale_alpha
1734
1735 # build settings
1736 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1737 AVSERVERLDFLAGS=-Wl,-E
1738 LIBPREF="lib"
1739 LIBSUF=".a"
1740 FULLNAME='$(NAME)$(BUILDSUF)'
1741 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1742 SLIBPREF="lib"
1743 SLIBSUF=".so"
1744 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1745 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1746 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1747 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1748 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1749 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1750
1751 asflags_filter=echo
1752 cflags_filter=echo
1753 ldflags_filter=echo
1754
1755 AS_C='-c'
1756 AS_O='-o $@'
1757 CC_C='-c'
1758 CC_E='-E -o $@'
1759 CC_O='-o $@'
1760 LD_O='-o $@'
1761 HOSTCC_C='-c'
1762 HOSTCC_O='-o $@'
1763
1764 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1765 host_libs='-lm'
1766 host_cflags_filter=echo
1767 host_ldflags_filter=echo
1768
1769 target_path='$(CURDIR)'
1770
1771 # since the object filename is not given with the -MM flag, the compiler
1772 # is only able to print the basename, and we must add the path ourselves
1773 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1774 DEPFLAGS='-MM'
1775
1776 # find source path
1777 if test -f configure; then
1778     source_path=.
1779 else
1780     source_path=$(cd $(dirname "$0"); pwd)
1781     echo "$source_path" | grep -q '[[:blank:]]' &&
1782         die "Out of tree builds are impossible with whitespace in source path."
1783     test -e "$source_path/config.h" &&
1784         die "Out of tree builds are impossible with config.h in source dir."
1785 fi
1786
1787 for v in "$@"; do
1788     r=${v#*=}
1789     l=${v%"$r"}
1790     r=$(sh_quote "$r")
1791     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1792 done
1793
1794 find_things(){
1795     thing=$1
1796     pattern=$2
1797     file=$source_path/$3
1798     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1799 }
1800
1801 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1802 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1803 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1804 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1805 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1806 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1807 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1808 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1809 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1810 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1811 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1812
1813 ALL_COMPONENTS="
1814     $BSF_LIST
1815     $DECODER_LIST
1816     $DEMUXER_LIST
1817     $ENCODER_LIST
1818     $FILTER_LIST
1819     $HWACCEL_LIST
1820     $INDEV_LIST
1821     $MUXER_LIST
1822     $OUTDEV_LIST
1823     $PARSER_LIST
1824     $PROTOCOL_LIST
1825 "
1826
1827 find_tests(){
1828     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1829 }
1830
1831 LAVF_TESTS=$(find_tests lavf)
1832 LAVFI_TESTS=$(find_tests lavfi)
1833 SEEK_TESTS=$(find_tests seek seek_)
1834
1835 ALL_TESTS="$LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1836
1837 for n in $COMPONENT_LIST; do
1838     v=$(toupper ${n%s})_LIST
1839     eval enable \$$v
1840     eval ${n}_if_any="\$$v"
1841 done
1842
1843 enable $ARCH_EXT_LIST $ALL_TESTS
1844
1845 die_unknown(){
1846     echo "Unknown option \"$1\"."
1847     echo "See $0 --help for available options."
1848     exit 1
1849 }
1850
1851 show_list() {
1852     suffix=_$1
1853     shift
1854     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1855     exit 0
1856 }
1857
1858 rand_list(){
1859     IFS=', '
1860     set -- $*
1861     unset IFS
1862     for thing; do
1863         comp=${thing%:*}
1864         prob=${thing#$comp}
1865         prob=${prob#:}
1866         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
1867         echo "prob ${prob:-0.5}"
1868         printf '%s\n' $comp
1869     done
1870 }
1871
1872 do_random(){
1873     action=$1
1874     shift
1875     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
1876     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
1877 }
1878
1879 for opt do
1880     optval="${opt#*=}"
1881     case "$opt" in
1882     --extra-ldflags=*) add_ldflags $optval
1883     ;;
1884     --extra-libs=*) add_extralibs $optval
1885     ;;
1886     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1887     ;;
1888     --enable-debug=*) debuglevel="$optval"
1889     ;;
1890     --disable-everything)
1891     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1892     ;;
1893     --enable-random|--disable-random)
1894     action=${opt%%-random}
1895     do_random ${action#--} $COMPONENT_LIST
1896     ;;
1897     --enable-random=*|--disable-random=*)
1898     action=${opt%%-random=*}
1899     do_random ${action#--} $optval
1900     ;;
1901     --enable-*=*|--disable-*=*)
1902     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1903     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1904     eval list=\$$(toupper $thing)_LIST
1905     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1906     $action $(filter "$name" $list)
1907     ;;
1908     --enable-?*|--disable-?*)
1909     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1910     if is_in $option $COMPONENT_LIST; then
1911         test $action = disable && action=unset
1912         eval $action \$$(toupper ${option%s})_LIST
1913     elif is_in $option $CMDLINE_SELECT; then
1914         $action $option
1915     else
1916         die_unknown $opt
1917     fi
1918     ;;
1919     --list-*)
1920         NAME="${opt#--list-}"
1921         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1922         NAME=${NAME%s}
1923         eval show_list $NAME \$$(toupper $NAME)_LIST
1924     ;;
1925     --help|-h) show_help
1926     ;;
1927     *)
1928     optname="${opt%%=*}"
1929     optname="${optname#--}"
1930     optname=$(echo "$optname" | sed 's/-/_/g')
1931     if is_in $optname $CMDLINE_SET; then
1932         eval $optname='$optval'
1933     elif is_in $optname $CMDLINE_APPEND; then
1934         append $optname "$optval"
1935     else
1936          die_unknown $opt
1937     fi
1938     ;;
1939     esac
1940 done
1941
1942 disabled logging && logfile=/dev/null
1943
1944 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
1945 set >> $logfile
1946
1947 test -n "$cross_prefix" && enable cross_compile
1948
1949 if enabled cross_compile; then
1950     test -n "$arch" && test -n "$target_os" ||
1951         die "Must specify target arch and OS when cross-compiling"
1952 fi
1953
1954 set_default arch target_os
1955
1956 ar_default="${cross_prefix}${ar_default}"
1957 cc_default="${cross_prefix}${cc_default}"
1958 nm_default="${cross_prefix}${nm_default}"
1959 pkg_config_default="${cross_prefix}${pkg_config_default}"
1960 ranlib="${cross_prefix}${ranlib}"
1961
1962 sysinclude_default="${sysroot}/usr/include"
1963
1964 set_default cc nm pkg_config sysinclude
1965 enabled cross_compile || host_cc_default=$cc
1966 set_default host_cc
1967
1968 if ! $pkg_config --version >/dev/null 2>&1; then
1969     warn "$pkg_config not found, library detection may fail."
1970     pkg_config=false
1971 fi
1972
1973 exesuf() {
1974     case $1 in
1975         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1976     esac
1977 }
1978
1979 EXESUF=$(exesuf $target_os)
1980 HOSTEXESUF=$(exesuf $host_os)
1981
1982 # set temporary file name
1983 : ${TMPDIR:=$TEMPDIR}
1984 : ${TMPDIR:=$TMP}
1985 : ${TMPDIR:=/tmp}
1986
1987 if ! check_cmd mktemp -u XXXXXX; then
1988     # simple replacement for missing mktemp
1989     # NOT SAFE FOR GENERAL USE
1990     mktemp(){
1991         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1992     }
1993 fi
1994
1995 tmpfile(){
1996     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1997         (set -C; exec > $tmp) 2>/dev/null ||
1998         die "Unable to create temporary file in $TMPDIR."
1999     append TMPFILES $tmp
2000     eval $1=$tmp
2001 }
2002
2003 trap 'rm -f -- $TMPFILES' EXIT
2004
2005 tmpfile TMPASM .asm
2006 tmpfile TMPC   .c
2007 tmpfile TMPE   $EXESUF
2008 tmpfile TMPH   .h
2009 tmpfile TMPO   .o
2010 tmpfile TMPS   .S
2011 tmpfile TMPSH  .sh
2012 tmpfile TMPV   .ver
2013
2014 unset -f mktemp
2015
2016 chmod +x $TMPE
2017
2018 # make sure we can execute files in $TMPDIR
2019 cat > $TMPSH 2>> $logfile <<EOF
2020 #! /bin/sh
2021 EOF
2022 chmod +x $TMPSH >> $logfile 2>&1
2023 if ! $TMPSH >> $logfile 2>&1; then
2024     cat <<EOF
2025 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2026 variable to another directory and make sure that it is not mounted noexec.
2027 EOF
2028     die "Sanity test failed."
2029 fi
2030
2031 pgi_flags(){
2032     for flag; do
2033         case $flag in
2034             -fomit-frame-pointer) echo -Mnoframe ;;
2035             -g)                   echo -gopt ;;
2036             *)                    echo $flag ;;
2037         esac
2038     done
2039 }
2040
2041 suncc_flags(){
2042     for flag; do
2043         case $flag in
2044             -march=*|-mcpu=*)
2045                 case "${flag#*=}" in
2046                     native)                   echo -xtarget=native       ;;
2047                     v9|niagara)               echo -xarch=sparc          ;;
2048                     ultrasparc)               echo -xarch=sparcvis       ;;
2049                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2050                     i586|pentium)             echo -xchip=pentium        ;;
2051                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2052                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2053                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2054                     pentium4*)          echo -xtarget=pentium4           ;;
2055                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2056                     *-sse3)             echo -xarch=sse3                 ;;
2057                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2058                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2059                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2060                     k8|opteron|athlon64|athlon-fx)
2061                                               echo -xarch=sse2a          ;;
2062                     athlon*)                  echo -xarch=pentium_proa   ;;
2063                 esac
2064                 ;;
2065             -std=c99)             echo -xc99              ;;
2066             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2067             -fPIC)                echo -KPIC -xcode=pic32 ;;
2068             -W*,*)                echo $flag              ;;
2069             -f*-*|-W*)                                    ;;
2070             *)                    echo $flag              ;;
2071         esac
2072     done
2073 }
2074
2075 tms470_flags(){
2076     for flag; do
2077         case $flag in
2078             -march=*|-mcpu=*)
2079                 case "${flag#*=}" in
2080                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2081                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2082                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2083                     armv6*|arm11*)          echo -mv=6   ;;
2084                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2085                                             echo -mv=5e  ;;
2086                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2087                 esac
2088                 ;;
2089             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2090             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2091             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2092             -msoft-float)   echo --float_support=vfplib       ;;
2093             -O[0-3]|-mf=*)  echo $flag                        ;;
2094             -g)             echo -g -mn                       ;;
2095             -pds=*)         echo $flag                        ;;
2096             -D*|-I*)        echo $flag                        ;;
2097             --gcc|--abi=*)  echo $flag                        ;;
2098             -me)            echo $flag                        ;;
2099         esac
2100     done
2101 }
2102
2103 probe_cc(){
2104     pfx=$1
2105     _cc=$2
2106
2107     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
2108     unset _depflags _DEPCMD _DEPFLAGS
2109     _flags_filter=echo
2110
2111     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2112         _type=llvm_gcc
2113         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2114         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2115         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2116         _cflags_speed='-O3'
2117         _cflags_size='-Os'
2118     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2119         _type=gcc
2120         gcc_version=$($_cc --version | head -n1)
2121         gcc_basever=$($_cc -dumpversion)
2122         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2123         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2124         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2125         if ! $_cc -dumpversion | grep -q '^2\.'; then
2126             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2127         fi
2128         _cflags_speed='-O3'
2129         _cflags_size='-Os'
2130     elif $_cc --version 2>/dev/null | grep -q Intel; then
2131         _type=icc
2132         _ident=$($_cc --version | head -n1)
2133         _depflags='-MMD'
2134         _cflags_speed='-O3'
2135         _cflags_size='-Os'
2136         _cflags_noopt='-O1'
2137     elif $_cc -v 2>&1 | grep -q xlc; then
2138         _type=xlc
2139         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2140         _cflags_speed='-O5'
2141         _cflags_size='-O5 -qcompact'
2142     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2143         _type=ccc
2144         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2145         _DEPFLAGS='-M'
2146         debuglevel=3
2147         _ldflags='-Wl,-z,now' # calls to libots crash without this
2148         _cflags_speed='-fast'
2149         _cflags_size='-O1'
2150     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2151         test -d "$sysroot" || die "No valid sysroot specified."
2152         _type=armcc
2153         _ident=$($_cc --vsn | head -n1)
2154         armcc_conf="$PWD/armcc.conf"
2155         $_cc --arm_linux_configure                 \
2156              --arm_linux_config_file="$armcc_conf" \
2157              --configure_sysroot="$sysroot"        \
2158              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2159              die "Error creating armcc configuration file."
2160         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2161         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2162         as_default="${cross_prefix}gcc"
2163         _depflags='-MMD'
2164         _cflags_speed='-O3'
2165         _cflags_size='-Os'
2166     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2167         _type=tms470
2168         _ident=$($_cc -version | head -n1 | tr -s ' ')
2169         _flags='--gcc --abi=eabi -me'
2170         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2171         _cc_e='-ppl -fe=$@'
2172         _cc_o='-fe=$@'
2173         as_default="${cross_prefix}gcc"
2174         ld_default="${cross_prefix}gcc"
2175         _depflags='-ppa -ppd=$(@:.o=.d)'
2176         _cflags_speed='-O3 -mf=5'
2177         _cflags_size='-O3 -mf=2'
2178         _flags_filter=tms470_flags
2179     elif $_cc -v 2>&1 | grep -q clang; then
2180         _type=clang
2181         _ident=$($_cc --version | head -n1)
2182         _depflags='-MMD'
2183         _cflags_speed='-O3'
2184         _cflags_size='-Os'
2185     elif $_cc -V 2>&1 | grep -q Sun; then
2186         _type=suncc
2187         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2188         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2189         _DEPFLAGS='-xM1'
2190         _ldflags='-std=c99'
2191         _cflags_speed='-O5'
2192         _cflags_size='-O5 -xspace'
2193         _flags_filter=suncc_flags
2194     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2195         _type=pathscale
2196         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2197         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2198         _cflags_speed='-O2'
2199         _cflags_size='-Os'
2200         _flags_filter='filter_out -Wdisabled-optimization'
2201     elif $_cc -v 2>&1 | grep -q Open64; then
2202         _type=open64
2203         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2204         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2205         _cflags_speed='-O2'
2206         _cflags_size='-Os'
2207         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2208     elif $_cc -V 2>&1 | grep -q Portland; then
2209         _type=pgi
2210         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2211         opt_common='-alias=ansi -Mlre -Mpre'
2212         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2213         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2214         _cflags_noopt="-O1"
2215         _flags_filter=pgi_flags
2216     fi
2217
2218     eval ${pfx}_type=\$_type
2219     eval ${pfx}_ident=\$_ident
2220 }
2221
2222 set_ccvars(){
2223     eval ${1}_C=\${_cc_c-\${${1}_C}}
2224     eval ${1}_E=\${_cc_e-\${${1}_E}}
2225     eval ${1}_O=\${_cc_o-\${${1}_O}}
2226
2227     if [ -n "$_depflags" ]; then
2228         eval ${1}_DEPFLAGS=\$_depflags
2229     else
2230         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2231         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2232         eval DEP${1}FLAGS=\$_flags
2233     fi
2234 }
2235
2236 probe_cc cc "$cc"
2237 cflags_filter=$_flags_filter
2238 cflags_speed=$_cflags_speed
2239 cflags_size=$_cflags_size
2240 cflags_noopt=$_cflags_noopt
2241 add_cflags $_flags $_cflags
2242 cc_ldflags=$_ldflags
2243 set_ccvars CC
2244
2245 probe_cc hostcc "$host_cc"
2246 host_cflags_filter=$_flags_filter
2247 host_ldflags_filter=$_flags_filter
2248 add_host_cflags  $_flags $_cflags
2249 add_host_ldflags $_flags $_ldflags
2250 set_ccvars HOSTCC
2251
2252 test -n "$cc_type" && enable $cc_type ||
2253     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2254
2255 : ${as_default:=$cc}
2256 : ${dep_cc_default:=$cc}
2257 : ${ld_default:=$cc}
2258 set_default ar as dep_cc ld
2259
2260 probe_cc as "$as"
2261 asflags_filter=$_flags_filter
2262 add_asflags $_flags $_cflags
2263 set_ccvars AS
2264
2265 probe_cc ld "$ld"
2266 ldflags_filter=$_flags_filter
2267 add_ldflags $_flags $_ldflags
2268 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2269 LD_O=${_cc_o-$LD_O}
2270
2271 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2272     probe_cc depcc "$dep_cc"
2273     CCDEP=${_DEPCMD:-$DEPCMD}
2274     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2275     DEPCCFLAGS=$_flags
2276 fi
2277
2278 add_cflags $extra_cflags
2279 add_asflags $extra_cflags
2280
2281 if test -n "$sysroot"; then
2282     case "$cc_type" in
2283         gcc|llvm_gcc|clang)
2284             add_cppflags --sysroot="$sysroot"
2285             add_ldflags --sysroot="$sysroot"
2286         ;;
2287         tms470)
2288             add_cppflags -I"$sysinclude"
2289             add_ldflags  --sysroot="$sysroot"
2290         ;;
2291     esac
2292 fi
2293
2294 if test "$cpu" = host; then
2295     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2296
2297     case "$cc_type" in
2298         gcc|llvm_gcc)
2299             check_native(){
2300                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2301                 sed -n "/cc1.*$1=/{
2302                             s/.*$1=\\([^ ]*\\).*/\\1/
2303                             p
2304                             q
2305                         }" $TMPE
2306             }
2307             cpu=$(check_native -march || check_native -mcpu)
2308         ;;
2309     esac
2310
2311     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2312 fi
2313
2314 # Deal with common $arch aliases
2315 case "$arch" in
2316     arm*)
2317         arch="arm"
2318     ;;
2319     mips|mipsel|IP*)
2320         arch="mips"
2321     ;;
2322     mips64*)
2323         arch="mips"
2324         subarch="mips64"
2325     ;;
2326     parisc|hppa)
2327         arch="parisc"
2328     ;;
2329     parisc64|hppa64)
2330         arch="parisc"
2331         subarch="parisc64"
2332     ;;
2333     "Power Macintosh"|ppc|powerpc)
2334         arch="ppc"
2335     ;;
2336     ppc64|powerpc64)
2337         arch="ppc"
2338         subarch="ppc64"
2339     ;;
2340     s390|s390x)
2341         arch="s390"
2342     ;;
2343     sh4|sh)
2344         arch="sh4"
2345     ;;
2346     sun4u|sparc64)
2347         arch="sparc"
2348         subarch="sparc64"
2349     ;;
2350     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2351         arch="x86"
2352     ;;
2353 esac
2354
2355 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2356 enable $arch
2357
2358 # Add processor-specific flags
2359 if test "$cpu" = generic; then
2360     : do nothing
2361 elif enabled ppc; then
2362
2363     case $(tolower $cpu) in
2364         601|ppc601|powerpc601)
2365             cpuflags="-mcpu=601"
2366             disable altivec
2367         ;;
2368         603*|ppc603*|powerpc603*)
2369             cpuflags="-mcpu=603"
2370             disable altivec
2371         ;;
2372         604*|ppc604*|powerpc604*)
2373             cpuflags="-mcpu=604"
2374             disable altivec
2375         ;;
2376         g3|75*|ppc75*|powerpc75*)
2377             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2378             disable altivec
2379         ;;
2380         g4|745*|ppc745*|powerpc745*)
2381             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2382         ;;
2383         74*|ppc74*|powerpc74*)
2384             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2385         ;;
2386         g5|970|ppc970|powerpc970)
2387             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2388         ;;
2389         power[3-7]*)
2390             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2391         ;;
2392         cell)
2393             cpuflags="-mcpu=cell"
2394             enable ldbrx
2395         ;;
2396         e500mc)
2397             cpuflags="-mcpu=e500mc"
2398             disable altivec
2399         ;;
2400         e500v2)
2401             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2402             disable altivec
2403         ;;
2404         e500)
2405             cpuflags="-mcpu=8540 -mhard-float"
2406             disable altivec
2407         ;;
2408     esac
2409
2410 elif enabled x86; then
2411
2412     case $cpu in
2413         i[345]86|pentium)
2414             cpuflags="-march=$cpu"
2415             disable mmx
2416         ;;
2417         # targets that do NOT support conditional mov (cmov)
2418         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2419             cpuflags="-march=$cpu"
2420             disable cmov
2421         ;;
2422         # targets that do support conditional mov (cmov)
2423         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2424             cpuflags="-march=$cpu"
2425             enable cmov
2426             enable fast_cmov
2427         ;;
2428         # targets that do support conditional mov but on which it's slow
2429         pentium4|pentium4m|prescott|nocona)
2430             cpuflags="-march=$cpu"
2431             enable cmov
2432             disable fast_cmov
2433         ;;
2434     esac
2435
2436 elif enabled sparc; then
2437
2438     case $cpu in
2439         niagara)
2440             cpuflags="-mcpu=$cpu"
2441             disable vis
2442         ;;
2443         sparc64)
2444             cpuflags="-mcpu=v9"
2445         ;;
2446     esac
2447
2448 elif enabled arm; then
2449
2450     case $cpu in
2451         armv*)
2452             cpuflags="-march=$cpu"
2453             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2454         ;;
2455         *)
2456             cpuflags="-mcpu=$cpu"
2457             case $cpu in
2458                 cortex-a*)                               subarch=armv7a  ;;
2459                 cortex-r*)                               subarch=armv7r  ;;
2460                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2461                 arm11*)                                  subarch=armv6   ;;
2462                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2463                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2464             esac
2465         ;;
2466     esac
2467
2468 elif enabled alpha; then
2469
2470     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2471
2472 elif enabled bfin; then
2473
2474     cpuflags="-mcpu=$cpu"
2475
2476 elif enabled mips; then
2477
2478     cpuflags="-march=$cpu"
2479
2480 elif enabled avr32; then
2481
2482     case $cpu in
2483         ap7[02]0[0-2])
2484             subarch="avr32_ap"
2485             cpuflags="-mpart=$cpu"
2486         ;;
2487         ap)
2488             subarch="avr32_ap"
2489             cpuflags="-march=$cpu"
2490         ;;
2491         uc3[ab]*)
2492             subarch="avr32_uc"
2493             cpuflags="-mcpu=$cpu"
2494         ;;
2495         uc)
2496             subarch="avr32_uc"
2497             cpuflags="-march=$cpu"
2498         ;;
2499     esac
2500
2501 fi
2502
2503 add_cflags $cpuflags
2504 add_asflags $cpuflags
2505
2506 # compiler sanity check
2507 check_exec <<EOF
2508 int main(void){ return 0; }
2509 EOF
2510 if test "$?" != 0; then
2511     echo "$cc is unable to create an executable file."
2512     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2513         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2514         echo "Only do this if you know what cross compiling means."
2515     fi
2516     die "C compiler test failed."
2517 fi
2518
2519 add_cppflags -D_ISOC99_SOURCE
2520 check_cflags -std=c99
2521 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2522 #include <stdlib.h>
2523 EOF
2524 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2525 #include <stdlib.h>
2526 EOF
2527
2528 check_host_cflags -std=c99
2529 check_host_cflags -Wall
2530
2531 case "$arch" in
2532     alpha|ia64|mips|parisc|sparc)
2533         spic=$shared
2534     ;;
2535     x86)
2536         subarch="x86_32"
2537         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2538         if test "$subarch" = "x86_64"; then
2539             spic=$shared
2540         fi
2541     ;;
2542 esac
2543
2544 enable $subarch
2545 enabled spic && enable pic
2546
2547 # OS specific
2548 case $target_os in
2549     haiku)
2550         prefix_default="/boot/common"
2551         network_extralibs="-lnetwork"
2552         host_libs=
2553         ;;
2554     sunos)
2555         AVSERVERLDFLAGS=""
2556         SHFLAGS='-shared -Wl,-h,$$(@F)'
2557         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2558         network_extralibs="-lsocket -lnsl"
2559         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2560         # When using suncc to build, the Solaris linker will mark
2561         # an executable with each instruction set encountered by
2562         # the Solaris assembler.  As our libraries contain their own
2563         # guards for processor-specific code, instead suppress
2564         # generation of the HWCAPS ELF section on Solaris x86 only.
2565         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2566         nm_opts='-P -g'
2567         ;;
2568     netbsd)
2569         disable symver
2570         oss_indev_extralibs="-lossaudio"
2571         oss_outdev_extralibs="-lossaudio"
2572         ;;
2573     openbsd)
2574         # On OpenBSD 4.5. the compiler does not use PIC unless
2575         # explicitly using -fPIC. Libav builds fine without PIC,
2576         # however the generated executable will not do anything
2577         # (simply quits with exit-code 1, no crash, no output).
2578         # Thus explicitly enable PIC here.
2579         enable pic
2580         disable symver
2581         SHFLAGS='-shared'
2582         oss_indev_extralibs="-lossaudio"
2583         oss_outdev_extralibs="-lossaudio"
2584         ;;
2585     dragonfly)
2586         disable symver
2587         ;;
2588     freebsd)
2589         ;;
2590     bsd/os)
2591         add_extralibs -lpoll -lgnugetopt
2592         ;;
2593     darwin)
2594         gas="gas-preprocessor.pl $cc"
2595         enabled ppc && add_asflags -force_cpusubtype_ALL
2596         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2597         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2598         add_ldflags -Wl,-dynamic,-search_paths_first
2599         SLIBSUF=".dylib"
2600         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2601         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2602         AVSERVERLDFLAGS=-Wl,-bind_at_load
2603         objformat="macho"
2604         enabled x86_64 && objformat="macho64"
2605         enabled_any pic shared ||
2606             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2607         ;;
2608     mingw32*)
2609         if test $target_os = "mingw32ce"; then
2610             disable network
2611         else
2612             target_os=mingw32
2613         fi
2614         LIBTARGET=i386
2615         if enabled x86_64; then
2616             LIBTARGET="i386:x86-64"
2617         elif enabled arm; then
2618             LIBTARGET=arm-wince
2619         fi
2620         shlibdir_default="$bindir_default"
2621         SLIBPREF=""
2622         SLIBSUF=".dll"
2623         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2624         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2625         SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2626         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2627         SLIB_INSTALL_LINKS=
2628         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2629         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2630         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'
2631         objformat="win32"
2632         dlltool="${cross_prefix}dlltool"
2633         enable dos_paths
2634         check_cflags -fno-common
2635         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2636                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2637                 die "ERROR: MinGW runtime version must be >= 3.15."
2638         add_cppflags -U__STRICT_ANSI__
2639         ;;
2640     cygwin*)
2641         target_os=cygwin
2642         shlibdir_default="$bindir_default"
2643         SLIBPREF="cyg"
2644         SLIBSUF=".dll"
2645         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2646         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2647         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2648         SLIB_INSTALL_LINKS=
2649         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2650         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2651         objformat="win32"
2652         enable dos_paths
2653         check_cflags -fno-common
2654         add_cppflags -U__STRICT_ANSI__
2655         ;;
2656     *-dos|freedos|opendos)
2657         network_extralibs="-lsocket"
2658         objformat="coff"
2659         enable dos_paths
2660         add_cppflags -U__STRICT_ANSI__
2661         ;;
2662     linux)
2663         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2664         enable dv1394
2665         ;;
2666     irix*)
2667         target_os=irix
2668         ranlib="echo ignoring ranlib"
2669         ;;
2670     os/2*)
2671         ln_s="cp -f"
2672         objformat="aout"
2673         add_cppflags -D_GNU_SOURCE
2674         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2675         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2676         AVSERVERLDFLAGS=""
2677         LIBSUF="_s.a"
2678         SLIBPREF=""
2679         SLIBSUF=".dll"
2680         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2681         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2682         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2683           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2684           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2685           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2686           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2687           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2688         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2689           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2690         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2691         enable dos_paths
2692         ;;
2693     gnu/kfreebsd)
2694         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2695         ;;
2696     gnu)
2697         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2698         ;;
2699     qnx)
2700         add_cppflags -D_QNX_SOURCE
2701         network_extralibs="-lsocket"
2702         ;;
2703     symbian)
2704         SLIBSUF=".dll"
2705         enable dos_paths
2706         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2707         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2708         add_ldflags -Wl,--target1-abs,--no-undefined \
2709                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2710                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2711         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2712                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2713                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2714         ;;
2715     none)
2716         ;;
2717     *)
2718         die "Unknown OS '$target_os'."
2719         ;;
2720 esac
2721
2722 esc(){
2723     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2724 }
2725
2726 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
2727
2728 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2729
2730 set_default $PATHS_LIST
2731
2732 # we need to build at least one lib type
2733 if ! enabled_any static shared; then
2734     cat <<EOF
2735 At least one library type must be built.
2736 Specify --enable-static to build the static libraries or --enable-shared to
2737 build the shared libraries as well. To only build the shared libraries specify
2738 --disable-static in addition to --enable-shared.
2739 EOF
2740     exit 1;
2741 fi
2742
2743 die_license_disabled() {
2744     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2745 }
2746
2747 die_license_disabled gpl libcdio
2748 die_license_disabled gpl libx264
2749 die_license_disabled gpl libxavs
2750 die_license_disabled gpl libxvid
2751 die_license_disabled gpl x11grab
2752
2753 die_license_disabled nonfree libfaac
2754 die_license_disabled nonfree libfdk_aac
2755 die_license_disabled nonfree openssl
2756
2757 die_license_disabled version3 libopencore_amrnb
2758 die_license_disabled version3 libopencore_amrwb
2759 die_license_disabled version3 libvo_aacenc
2760 die_license_disabled version3 libvo_amrwbenc
2761
2762 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2763
2764 disabled optimizations || check_cflags -fomit-frame-pointer
2765
2766 enable_pic() {
2767     enable pic
2768     add_cppflags -DPIC
2769     add_cflags   -fPIC
2770     add_asflags  -fPIC
2771 }
2772
2773 enabled pic && enable_pic
2774
2775 check_cc <<EOF || die "Symbol mangling check failed."
2776 int ff_extern;
2777 EOF
2778 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2779 extern_prefix=${sym%%ff_extern*}
2780
2781 check_cc <<EOF && enable inline_asm
2782 void foo(void) { __asm__ volatile ("" ::); }
2783 EOF
2784
2785 _restrict=
2786 for restrict_keyword in restrict __restrict__ __restrict; do
2787     check_cc <<EOF && _restrict=$restrict_keyword && break
2788 void foo(char * $restrict_keyword p);
2789 EOF
2790 done
2791
2792 check_cc <<EOF && enable attribute_packed
2793 struct { int x; } __attribute__((packed)) x;
2794 EOF
2795
2796 check_cc <<EOF && enable attribute_may_alias
2797 union { int x; } __attribute__((may_alias)) x;
2798 EOF
2799
2800 check_cc <<EOF || die "endian test failed"
2801 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2802 EOF
2803 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2804
2805 if enabled alpha; then
2806
2807     check_cflags -mieee
2808
2809 elif enabled arm; then
2810
2811     enabled thumb && check_cflags -mthumb || check_cflags -marm
2812     nogas=die
2813
2814     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2815         enable vfp_args
2816     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2817         case "${cross_prefix:-$cc}" in
2818             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2819             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2820 __asm__ (".eabi_attribute 28, 1");
2821 int main(void) { return 0; }
2822 EOF
2823         esac
2824         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2825     fi
2826
2827     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2828     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2829     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2830     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2831     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2832     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2833
2834     check_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
2835     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2836
2837     enabled_all armv6t2 shared !pic && enable_pic
2838
2839 elif enabled mips; then
2840
2841     check_asm loongson '"dmult.g $1, $2, $3"'
2842     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2843
2844 elif enabled ppc; then
2845
2846     enable local_aligned_8 local_aligned_16
2847
2848     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2849     check_asm ibm_asm   '"add 0, 0, 0"'
2850     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2851     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2852
2853     # AltiVec flags: The FSF version of GCC differs from the Apple version
2854     if enabled altivec; then
2855         nogas=warn
2856         check_cflags -maltivec -mabi=altivec &&
2857         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2858         check_cflags -faltivec
2859
2860         # check if our compiler supports Motorola AltiVec C API
2861         check_cc <<EOF || disable altivec
2862 $inc_altivec_h
2863 int main(void) {
2864     vector signed int v1, v2, v3;
2865     v1 = vec_add(v2,v3);
2866     return 0;
2867 }
2868 EOF
2869
2870         # check if our compiler supports braces for vector declarations
2871         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2872 $inc_altivec_h
2873 int main (void) { (vector int) {1}; return 0; }
2874 EOF
2875     fi
2876
2877 elif enabled sparc; then
2878
2879     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2880         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2881
2882 elif enabled x86; then
2883
2884     check_code ld immintrin.h "__xgetbv(0)" && enable xgetbv
2885     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" && enable cpuid
2886     check_code ld intrin.h "__rdtsc()" && enable rdtsc
2887     check_code ld intrin.h "unsigned int x = __readeflags()" && enable rweflags
2888
2889     check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
2890
2891     enable local_aligned_8 local_aligned_16
2892
2893     # check whether EBP is available on x86
2894     # As 'i' is stored on the stack, this program will crash
2895     # if the base pointer is used to access it because the
2896     # base pointer is cleared in the inline assembly code.
2897     check_exec_crash <<EOF && enable ebp_available
2898     volatile int i=0;
2899     __asm__ volatile (
2900         "xorl %%ebp, %%ebp"
2901     ::: "%ebp");
2902     return i;
2903 EOF
2904
2905     # check whether EBX is available on x86
2906     check_asm ebx_available '""::"b"(0)' &&
2907         check_asm ebx_available '"":::"%ebx"'
2908
2909     # check whether xmm clobbers are supported
2910     check_asm xmm_clobbers '"":::"%xmm0"'
2911
2912     # check whether binutils is new enough to compile SSSE3/MMXEXT
2913     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2914     enabled mmxext && check_asm mmxext '"pmaxub %mm0, %mm1"'
2915
2916     if ! disabled_any asm mmx yasm; then
2917         if check_cmd $yasmexe --version; then
2918             enabled x86_64 && yasm_extra="-m amd64"
2919             yasm_debug="-g dwarf2"
2920         elif check_cmd nasm -v; then
2921             yasmexe=nasm
2922             yasm_debug="-g -F dwarf"
2923             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2924         fi
2925
2926         YASMFLAGS="-f $objformat $yasm_extra"
2927         enabled pic               && append YASMFLAGS "-DPIC"
2928         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2929         case "$objformat" in
2930             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2931         esac
2932
2933         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2934             die "yasm not found, use --disable-yasm for a crippled build"
2935         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2936         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
2937         check_yasm "CPU amdnop" && enable cpunop
2938     fi
2939
2940     case "$cpu" in
2941         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2942             disable fast_clz
2943         ;;
2944     esac
2945
2946 fi
2947
2948 if enabled asm; then
2949     as=${gas:=$as}
2950     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2951         $nogas "GNU assembler not found, install gas-preprocessor"
2952 fi
2953
2954 check_ldflags -Wl,--as-needed
2955
2956 if check_func dlopen; then
2957     ldl=
2958 elif check_func dlopen -ldl; then
2959     ldl=-ldl
2960 fi
2961
2962 if enabled network; then
2963     check_type "sys/types.h sys/socket.h" socklen_t
2964     check_type netdb.h "struct addrinfo"
2965     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
2966     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
2967     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2968     check_type netinet/in.h "struct sockaddr_in6"
2969     check_type poll.h "struct pollfd"
2970     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2971     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2972     check_header netinet/sctp.h
2973     check_func getaddrinfo $network_extralibs
2974     # Prefer arpa/inet.h over winsock2
2975     if check_header arpa/inet.h ; then
2976         check_func closesocket
2977     elif check_header winsock2.h ; then
2978         check_func_headers winsock2.h closesocket -lws2 &&
2979             network_extralibs="-lws2" ||
2980         { check_func_headers winsock2.h closesocket -lws2_32 &&
2981             network_extralibs="-lws2_32"; }
2982         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
2983         check_type ws2tcpip.h socklen_t
2984         check_type ws2tcpip.h "struct addrinfo"
2985         check_type ws2tcpip.h "struct group_source_req"
2986         check_type ws2tcpip.h "struct ip_mreq_source"
2987         check_type ws2tcpip.h "struct ipv6_mreq"
2988         check_type winsock2.h "struct pollfd"
2989         check_type ws2tcpip.h "struct sockaddr_in6"
2990         check_type ws2tcpip.h "struct sockaddr_storage"
2991         check_struct winsock2.h "struct sockaddr" sa_len
2992     else
2993         disable network
2994     fi
2995 fi
2996
2997 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2998 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2999
3000 check_func  fcntl
3001 check_func  fork
3002 check_func  gethrtime
3003 check_func  getopt
3004 check_func  getrusage
3005 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3006 check_func  gettimeofday
3007 check_func  inet_aton $network_extralibs
3008 check_func  isatty
3009 check_func  localtime_r
3010 check_func  ${malloc_prefix}memalign            && enable memalign
3011 check_func  mkstemp
3012 check_func  mmap
3013 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3014 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3015 check_func  setrlimit
3016 check_func  strerror_r
3017 check_func  strptime
3018 check_func  strtok_r
3019 check_func  sched_getaffinity
3020 check_func  sysconf
3021 check_func  sysctl
3022 check_func  usleep
3023 check_func_headers io.h setmode
3024 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3025 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3026 check_func_headers windows.h GetProcessAffinityMask
3027 check_func_headers windows.h GetProcessTimes
3028 check_func_headers windows.h GetSystemTimeAsFileTime
3029 check_func_headers windows.h MapViewOfFile
3030 check_func_headers windows.h Sleep
3031 check_func_headers windows.h VirtualAlloc
3032
3033 check_header dlfcn.h
3034 check_header dxva.h
3035 check_header dxva2api.h
3036 check_header io.h
3037 check_header malloc.h
3038 check_header poll.h
3039 check_header sys/mman.h
3040 check_header sys/param.h
3041 check_header sys/resource.h
3042 check_header sys/select.h
3043 check_header sys/time.h
3044 check_header unistd.h
3045 check_header vdpau/vdpau.h
3046 check_header vdpau/vdpau_x11.h
3047 check_header windows.h
3048 check_header X11/extensions/XvMClib.h
3049
3050 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3051 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3052
3053 if ! disabled w32threads && ! enabled pthreads; then
3054     check_func _beginthreadex && enable w32threads
3055 fi
3056
3057 # check for some common methods of building with pthread support
3058 # do this before the optional library checks as some of them require pthreads
3059 if ! disabled pthreads && ! enabled w32threads; then
3060     enable pthreads
3061     if check_func pthread_create; then
3062         :
3063     elif check_func pthread_create -pthread; then
3064         add_cflags -pthread
3065         add_extralibs -pthread
3066     elif check_func pthread_create -pthreads; then
3067         add_cflags -pthreads
3068         add_extralibs -pthreads
3069     elif check_func pthread_create -lpthreadGC2; then
3070         add_extralibs -lpthreadGC2
3071     elif ! check_lib pthread.h pthread_create -lpthread; then
3072         disable pthreads
3073     fi
3074 fi
3075
3076 for thread in $THREADS_LIST; do
3077     if enabled $thread; then
3078         test -n "$thread_type" &&
3079             die "ERROR: Only one thread type must be selected." ||
3080             thread_type="$thread"
3081     fi
3082 done
3083
3084 check_lib math.h sin -lm && LIBM="-lm"
3085 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3086
3087 check_mathfunc cbrtf
3088 check_mathfunc exp2
3089 check_mathfunc exp2f
3090 check_mathfunc isinf
3091 check_mathfunc isnan
3092 check_mathfunc llrint
3093 check_mathfunc llrintf
3094 check_mathfunc log2
3095 check_mathfunc log2f
3096 check_mathfunc lrint
3097 check_mathfunc lrintf
3098 check_mathfunc rint
3099 check_mathfunc round
3100 check_mathfunc roundf
3101 check_mathfunc trunc
3102 check_mathfunc truncf
3103
3104 # these are off by default, so fail if requested and not available
3105 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3106 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3107 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3108 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3109 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3110 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3111 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3112 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3113 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3114 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3115 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3116 enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3117 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3118 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3119 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3120 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3121 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3122 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3123 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3124 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3125 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3126 enabled libvpx     && {
3127     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3128                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3129     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
3130                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
3131 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3132                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3133                         die "ERROR: libx264 version must be >= 0.118."; }
3134 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3135 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3136 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3137                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3138                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3139                         die "ERROR: openssl not found"; }
3140
3141 if enabled gnutls; then
3142     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3143     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3144 fi
3145
3146 # libdc1394 check
3147 if enabled libdc1394; then
3148     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3149         enable libdc1394_2; } ||
3150     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3151         enable libdc1394_1; } ||
3152     die "ERROR: No version of libdc1394 found "
3153 fi
3154
3155 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3156     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3157     enable sdl &&
3158     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3159 fi
3160
3161 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3162
3163 check_header linux/fb.h
3164 check_header linux/videodev2.h
3165 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3166
3167 check_header sys/videoio.h
3168
3169 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3170 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3171 # w32api 3.12 had it defined wrong
3172 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3173
3174 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3175 { check_header dev/bktr/ioctl_meteor.h &&
3176   check_header dev/bktr/ioctl_bt848.h; } ||
3177 { check_header machine/ioctl_meteor.h &&
3178   check_header machine/ioctl_bt848.h; } ||
3179 { check_header dev/video/meteor/ioctl_meteor.h &&
3180   check_header dev/video/bktr/ioctl_bt848.h; } ||
3181 check_header dev/ic/bt8xx.h
3182
3183 check_header sndio.h
3184 check_header sys/soundcard.h
3185 check_header soundcard.h
3186
3187 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3188
3189 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3190     check_func jack_port_get_latency_range -ljack
3191
3192 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3193
3194 enabled libcdio &&
3195     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3196
3197 enabled x11grab                                           &&
3198 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3199 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3200 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3201
3202 # check for VDA header
3203 if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then
3204     enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3205 fi
3206
3207 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3208 check_cpp_condition \
3209     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3210     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3211       disable vdpau; }
3212 fi
3213
3214 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3215
3216 # add some useful compiler flags if supported
3217 check_cflags -Wdeclaration-after-statement
3218 check_cflags -Wall
3219 check_cflags -Wno-parentheses
3220 check_cflags -Wno-switch
3221 check_cflags -Wno-format-zero-length
3222 check_cflags -Wdisabled-optimization
3223 check_cflags -Wpointer-arith
3224 check_cflags -Wredundant-decls
3225 check_cflags -Wno-pointer-sign
3226 check_cflags -Wcast-qual
3227 check_cflags -Wwrite-strings
3228 check_cflags -Wtype-limits
3229 check_cflags -Wundef
3230 check_cflags -Wmissing-prototypes
3231 check_cflags -Wstrict-prototypes
3232 enabled extra_warnings && check_cflags -Winline
3233
3234 # add some linker flags
3235 check_ldflags -Wl,--warn-common
3236 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3237 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3238
3239 enabled xmm_clobber_test &&
3240     check_ldflags -Wl,--wrap,avcodec_open2              \
3241                   -Wl,--wrap,avcodec_decode_audio4      \
3242                   -Wl,--wrap,avcodec_decode_video2      \
3243                   -Wl,--wrap,avcodec_decode_subtitle2   \
3244                   -Wl,--wrap,avcodec_encode_audio2      \
3245                   -Wl,--wrap,avcodec_encode_video       \
3246                   -Wl,--wrap,avcodec_encode_subtitle    \
3247                   -Wl,--wrap,sws_scale ||
3248     disable xmm_clobber_test
3249
3250 echo "X{};" > $TMPV
3251 if test_ldflags -Wl,--version-script,$TMPV; then
3252     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3253     check_cc <<EOF && enable symver_asm_label
3254 void ff_foo(void) __asm__ ("av_foo@VERSION");
3255 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3256 EOF
3257     check_cc <<EOF && enable symver_gnu_asm
3258 __asm__(".symver ff_foo,av_foo@VERSION");
3259 void ff_foo(void) {}
3260 EOF
3261 fi
3262
3263 if [ -n "$optflags" ]; then
3264     add_cflags $optflags
3265 elif enabled small; then
3266     add_cflags $cflags_size
3267 elif enabled optimizations; then
3268     add_cflags $cflags_speed
3269 else
3270     add_cflags $cflags_noopt
3271 fi
3272 check_cflags -fno-math-errno
3273 check_cflags -fno-signed-zeros
3274
3275 if enabled icc; then
3276     # Just warnings, no remarks
3277     check_cflags -w1
3278     # -wd: Disable following warnings
3279     # 144, 167, 556: -Wno-pointer-sign
3280     # 1292: attribute "foo" ignored
3281     # 1419: external declaration in primary source file
3282     # 10006: ignoring unknown option -fno-signed-zeros
3283     # 10148: ignoring unknown option -Wno-parentheses
3284     # 10156: ignoring option '-W'; no argument required
3285     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3286     # 11030: Warning unknown option --as-needed
3287     # 10156: ignoring option '-export'; no argument required
3288     check_ldflags -wd10156,11030
3289     # Allow to compile with optimizations
3290     check_ldflags -march=$cpu
3291     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3292     enable ebp_available
3293     if enabled x86_32; then
3294         icc_version=$($cc -dumpversion)
3295         test ${icc_version%%.*} -ge 11 &&
3296             check_cflags -falign-stack=maintain-16-byte ||
3297             disable aligned_stack
3298     fi
3299 elif enabled ccc; then
3300     # disable some annoying warnings
3301     add_cflags -msg_disable cvtu32to64
3302     add_cflags -msg_disable embedcomment
3303     add_cflags -msg_disable needconstext
3304     add_cflags -msg_disable nomainieee
3305     add_cflags -msg_disable ptrmismatch1
3306     add_cflags -msg_disable unreachcode
3307 elif enabled gcc; then
3308     check_cflags -fno-tree-vectorize
3309     check_cflags -Werror=implicit-function-declaration
3310     check_cflags -Werror=missing-prototypes
3311     check_cflags -Werror=declaration-after-statement
3312 elif enabled llvm_gcc; then
3313     check_cflags -mllvm -stack-alignment=16
3314 elif enabled clang; then
3315     check_cflags -mllvm -stack-alignment=16
3316     check_cflags -Qunused-arguments
3317 elif enabled armcc; then
3318     # 2523: use of inline assembler is deprecated
3319     add_cflags -W${armcc_opt},--diag_suppress=2523
3320     add_cflags -W${armcc_opt},--diag_suppress=1207
3321     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3322     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3323     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3324     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3325 elif enabled tms470; then
3326     add_cflags -pds=824 -pds=837
3327 elif enabled pathscale; then
3328     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3329 fi
3330
3331 enabled_any $THREADS_LIST      && enable threads
3332
3333 check_deps $CONFIG_LIST       \
3334            $CONFIG_EXTRA      \
3335            $HAVE_LIST         \
3336            $ALL_COMPONENTS    \
3337            $ALL_TESTS         \
3338
3339 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3340
3341 ! enabled_any memalign posix_memalign aligned_malloc &&
3342     enabled_any $need_memalign && enable memalign_hack
3343
3344 echo "install prefix            $prefix"
3345 echo "source path               $source_path"
3346 echo "C compiler                $cc"
3347 echo "ARCH                      $arch ($cpu)"
3348 if test "$build_suffix" != ""; then
3349     echo "build suffix              $build_suffix"
3350 fi
3351 if test "$extra_version" != ""; then
3352     echo "version string suffix     $extra_version"
3353 fi
3354 echo "big-endian                ${bigendian-no}"
3355 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3356 if enabled x86; then
3357     echo "${yasmexe}                      ${yasm-no}"
3358     echo "MMX enabled               ${mmx-no}"
3359     echo "MMXEXT enabled            ${mmxext-no}"
3360     echo "3DNow! enabled            ${amd3dnow-no}"
3361     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3362     echo "SSE enabled               ${sse-no}"
3363     echo "SSSE3 enabled             ${ssse3-no}"
3364     echo "AVX enabled               ${avx-no}"
3365     echo "FMA4 enabled              ${fma4-no}"
3366     echo "CMOV enabled              ${cmov-no}"
3367     echo "CMOV is fast              ${fast_cmov-no}"
3368     echo "EBX available             ${ebx_available-no}"
3369     echo "EBP available             ${ebp_available-no}"
3370 fi
3371 if enabled arm; then
3372     echo "ARMv5TE enabled           ${armv5te-no}"
3373     echo "ARMv6 enabled             ${armv6-no}"
3374     echo "ARMv6T2 enabled           ${armv6t2-no}"
3375     echo "ARM VFP enabled           ${armvfp-no}"
3376     echo "NEON enabled              ${neon-no}"
3377 fi
3378 if enabled mips; then
3379     echo "MMI enabled               ${mmi-no}"
3380 fi
3381 if enabled ppc; then
3382     echo "AltiVec enabled           ${altivec-no}"
3383     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3384     echo "dcbzl available           ${dcbzl-no}"
3385 fi
3386 if enabled sparc; then
3387     echo "VIS enabled               ${vis-no}"
3388 fi
3389 echo "debug symbols             ${debug-no}"
3390 echo "optimize for size         ${small-no}"
3391 echo "optimizations             ${optimizations-no}"
3392 echo "static                    ${static-no}"
3393 echo "shared                    ${shared-no}"
3394 echo "new filter support        ${avfilter-no}"
3395 echo "network support           ${network-no}"
3396 echo "threading support         ${thread_type-no}"
3397 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3398 echo "SDL support               ${sdl-no}"
3399 echo "libdxva2 enabled          ${dxva2-no}"
3400 echo "libva enabled             ${vaapi-no}"
3401 echo "libvdpau enabled          ${vdpau-no}"
3402 echo "AVISynth enabled          ${avisynth-no}"
3403 echo "frei0r enabled            ${frei0r-no}"
3404 echo "gnutls enabled            ${gnutls-no}"
3405 echo "libcdio support           ${libcdio-no}"
3406 echo "libdc1394 support         ${libdc1394-no}"
3407 echo "libfaac enabled           ${libfaac-no}"
3408 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3409 echo "libgsm enabled            ${libgsm-no}"
3410 echo "libilbc enabled           ${libilbc-no}"
3411 echo "libmp3lame enabled        ${libmp3lame-no}"
3412 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3413 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3414 echo "libopencv support         ${libopencv-no}"
3415 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3416 echo "libpulse enabled          ${libpulse-no}"
3417 echo "librtmp enabled           ${librtmp-no}"
3418 echo "libschroedinger enabled   ${libschroedinger-no}"
3419 echo "libspeex enabled          ${libspeex-no}"
3420 echo "libtheora enabled         ${libtheora-no}"
3421 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3422 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3423 echo "libvorbis enabled         ${libvorbis-no}"
3424 echo "libvpx enabled            ${libvpx-no}"
3425 echo "libx264 enabled           ${libx264-no}"
3426 echo "libxavs enabled           ${libxavs-no}"
3427 echo "libxvid enabled           ${libxvid-no}"
3428 echo "openssl enabled           ${openssl-no}"
3429 echo "zlib enabled              ${zlib-no}"
3430 echo "bzlib enabled             ${bzlib-no}"
3431 test -n "$random_seed" &&
3432     echo "random seed               ${random_seed}"
3433 echo
3434
3435 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3436     echo "Enabled ${type}s:"
3437     eval list=\$$(toupper $type)_LIST
3438     print_enabled '_*' $list | sort | pr -r -3 -t
3439     echo
3440 done
3441
3442 license="LGPL version 2.1 or later"
3443 if enabled nonfree; then
3444     license="nonfree and unredistributable"
3445 elif enabled gplv3; then
3446     license="GPL version 3 or later"
3447 elif enabled lgplv3; then
3448     license="LGPL version 3 or later"
3449 elif enabled gpl; then
3450     license="GPL version 2 or later"
3451 fi
3452
3453 echo "License: $license"
3454
3455 echo "Creating config.mak and config.h..."
3456
3457 test -e Makefile || $ln_s "$source_path/Makefile" .
3458
3459 config_files="$TMPH config.mak"
3460
3461 cat > config.mak <<EOF
3462 # Automatically generated by configure - do not modify!
3463 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3464 prefix=$prefix
3465 LIBDIR=\$(DESTDIR)$libdir
3466 SHLIBDIR=\$(DESTDIR)$shlibdir
3467 INCDIR=\$(DESTDIR)$incdir
3468 BINDIR=\$(DESTDIR)$bindir
3469 DATADIR=\$(DESTDIR)$datadir
3470 MANDIR=\$(DESTDIR)$mandir
3471 SRC_PATH=$source_path
3472 CC_IDENT=$cc_ident
3473 ARCH=$arch
3474 CC=$cc
3475 AS=$as
3476 LD=$ld
3477 DEPCC=$dep_cc
3478 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3479 DEPAS=$as
3480 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3481 YASM=$yasmexe
3482 DEPYASM=$yasmexe
3483 AR=$ar
3484 RANLIB=$ranlib
3485 LN_S=$ln_s
3486 CPPFLAGS=$CPPFLAGS
3487 CFLAGS=$CFLAGS
3488 ASFLAGS=$ASFLAGS
3489 AS_C=$AS_C
3490 AS_O=$AS_O
3491 CC_C=$CC_C
3492 CC_O=$CC_O
3493 LD_O=$LD_O
3494 DLLTOOL=$dlltool
3495 LDFLAGS=$LDFLAGS
3496 LDFLAGS-avserver=$AVSERVERLDFLAGS
3497 SHFLAGS=$SHFLAGS
3498 YASMFLAGS=$YASMFLAGS
3499 BUILDSUF=$build_suffix
3500 FULLNAME=$FULLNAME
3501 LIBPREF=$LIBPREF
3502 LIBSUF=$LIBSUF
3503 LIBNAME=$LIBNAME
3504 SLIBPREF=$SLIBPREF
3505 SLIBSUF=$SLIBSUF
3506 EXESUF=$EXESUF
3507 EXTRA_VERSION=$extra_version
3508 CCDEP=$CCDEP
3509 CCDEP_FLAGS=$CCDEP_FLAGS
3510 ASDEP=$ASDEP
3511 ASDEP_FLAGS=$ASDEP_FLAGS
3512 CC_DEPFLAGS=$CC_DEPFLAGS
3513 AS_DEPFLAGS=$AS_DEPFLAGS
3514 HOSTCC=$host_cc
3515 HOSTCFLAGS=$host_cflags
3516 HOSTEXESUF=$HOSTEXESUF
3517 HOSTLDFLAGS=$host_ldflags
3518 HOSTLIBS=$host_libs
3519 DEPHOSTCC=$host_cc
3520 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3521 HOSTCCDEP=$HOSTCCDEP
3522 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3523 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3524 HOSTCC_C=$HOSTCC_C
3525 HOSTCC_O=$HOSTCC_O
3526 TARGET_EXEC=$target_exec
3527 TARGET_PATH=$target_path
3528 LIBS-avplay=$sdl_libs
3529 CFLAGS-avplay=$sdl_cflags
3530 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3531 EXTRALIBS=$extralibs
3532 INSTALL=install
3533 LIBTARGET=${LIBTARGET}
3534 SLIBNAME=${SLIBNAME}
3535 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3536 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3537 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3538 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3539 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3540 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3541 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3542 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3543 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
3544 EOF
3545
3546 get_version(){
3547     lcname=$1
3548     name=$(toupper $lcname)
3549     file=$source_path/$lcname/version.h
3550     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3551     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3552     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3553     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3554 }
3555
3556 get_version libavcodec
3557 get_version libavdevice
3558 get_version libavfilter
3559 get_version libavformat
3560 get_version libavresample
3561 get_version libavutil
3562 get_version libswscale
3563
3564 cat > $TMPH <<EOF
3565 /* Automatically generated by configure - do not modify! */
3566 #ifndef LIBAV_CONFIG_H
3567 #define LIBAV_CONFIG_H
3568 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3569 #define LIBAV_LICENSE "$(c_escape $license)"
3570 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3571 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3572 #define restrict $_restrict
3573 #define EXTERN_PREFIX "${extern_prefix}"
3574 #define EXTERN_ASM ${extern_prefix}
3575 #define SLIBSUF "$SLIBSUF"
3576 EOF
3577
3578 test -n "$malloc_prefix" &&
3579     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3580
3581 if enabled yasm; then
3582     append config_files $TMPASM
3583     printf '' >$TMPASM
3584 fi
3585
3586 print_config ARCH_   "$config_files" $ARCH_LIST
3587 print_config HAVE_   "$config_files" $HAVE_LIST
3588 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3589                                      $CONFIG_EXTRA      \
3590                                      $ALL_COMPONENTS    \
3591
3592 cat >>config.mak <<EOF
3593 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3594 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3595 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3596 EOF
3597
3598 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3599
3600 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3601 cp_if_changed $TMPH config.h
3602 touch .config
3603
3604 enabled yasm && cp_if_changed $TMPASM config.asm
3605
3606 cat > $TMPH <<EOF
3607 /* Generated by ffconf */
3608 #ifndef AVUTIL_AVCONFIG_H
3609 #define AVUTIL_AVCONFIG_H
3610 EOF
3611
3612 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3613
3614 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3615
3616 cp_if_changed $TMPH libavutil/avconfig.h
3617
3618 test -n "$WARNINGS" && printf "\n$WARNINGS"
3619
3620 # build pkg-config files
3621
3622 pkgconfig_generate(){
3623 name=$1
3624 shortname=${name#lib}${build_suffix}
3625 comment=$2
3626 version=$3
3627 libs=$4
3628 requires=$5
3629 enabled ${name#lib} || return 0
3630 mkdir -p $name
3631 cat <<EOF > $name/$name.pc
3632 prefix=$prefix
3633 exec_prefix=\${prefix}
3634 libdir=$libdir
3635 includedir=$incdir
3636
3637 Name: $name
3638 Description: $comment
3639 Version: $version
3640 Requires: $(enabled shared || echo $requires)
3641 Requires.private: $(enabled shared && echo $requires)
3642 Conflicts:
3643 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3644 Libs.private: $(enabled shared && echo $libs)
3645 Cflags: -I\${includedir}
3646 EOF
3647 cat <<EOF > $name/$name-uninstalled.pc
3648 prefix=
3649 exec_prefix=
3650 libdir=\${pcfiledir}
3651 includedir=${source_path}
3652
3653 Name: $name
3654 Description: $comment
3655 Version: $version
3656 Requires: $requires
3657 Conflicts:
3658 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3659 Cflags: -I\${includedir}
3660 EOF
3661 }
3662
3663 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3664 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3665 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3666 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3667 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3668 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
3669 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"