configure: allow to disable sse code.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58   echo "Usage: configure [options]"
59   echo "Options: [defaults in brackets after descriptions]"
60   echo
61   echo "Standard options:"
62   echo "  --help                   print this message"
63   echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64   echo "  --disable-logging        do not log configure debug information"
65   echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66   echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71   echo "  --enable-static          build static libraries [yes]"
72   echo "  --disable-static         do not build static libraries [no]"
73   echo "  --enable-shared          build shared libraries [no]"
74   echo "  --disable-shared         do not build shared libraries [yes]"
75   echo "  --enable-gpl             allow use of GPL code, the resulting libs"
76   echo "                           and binaries will be under GPL [no]"
77   echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
78   echo "                           and binaries will be unredistributable [no]"
79   echo "  --enable-postproc        enable GPLed postprocessing support [no]"
80   echo "  --enable-swscale         enable GPLed software scaler support [no]"
81   echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
82   echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
83   echo "  --disable-vhook          disable video hooking support"
84   echo "  --enable-beosthreads     use BeOS threads [no]"
85   echo "  --enable-os2threads      use OS/2 threads [no]"
86   echo "  --enable-pthreads        use pthreads [no]"
87   echo "  --enable-vdpau           enable VDPAU support [no]"
88   echo "  --enable-w32threads      use Win32 threads [no]"
89   echo "  --enable-x11grab         enable X11 grabbing [no]"
90   echo "  --enable-xvmc            enable XvMC support [no]"
91   echo
92   echo "External library support:"
93   echo "  --enable-mlib            enable Sun medialib [no]"
94   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
95   echo "  --enable-bzlib           enable bzlib [autodetect]"
96   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
97   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
98   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
99   echo "                           and libraw1394 [no]"
100   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
101   echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
102   echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
103   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
104   echo "  --enable-libgsm          enable GSM support via libgsm [no]"
105   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
106   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
107   echo "                           native (de)muxer exists [no]"
108   echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
109   echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
110   echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
111   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
112   echo "                           native implementation exists [no]"
113   echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
114   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
115   echo "                           native MPEG-4/Xvid encoder exists [no]"
116   echo "  --enable-zlib            enable zlib [autodetect]"
117   echo ""
118   echo "Advanced options (experts only):"
119   echo "  --source-path=PATH       path to source code [$source_path]"
120   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
121   echo "  --enable-cross-compile   assume a cross-compiler is used"
122   echo "  --target-os=OS           compiler targets OS [$target_os]"
123   echo "  --target-exec=CMD        command to run executables on target"
124   echo "  --target-path=DIR        path to view of build directory on target"
125   echo "  --nm=NM                  use nm tool"
126   echo "  --cc=CC                  use C compiler CC [$cc]"
127   echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
128   echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
129   echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
130   echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
131   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
132   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
133   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
134   echo "  --extra-version=STRING   version string suffix []"
135   echo "  --build-suffix=SUFFIX    library name suffix []"
136   echo "  --arch=ARCH              select architecture [$arch]"
137   echo "  --cpu=CPU                select the minimum required CPU (affects"
138   echo "                           instruction selection, may crash on older CPUs)"
139   echo "  --enable-powerpc-perf    enable performance report on PPC"
140   echo "                           (requires enabling PMC)"
141   echo "  --disable-altivec        disable AltiVec optimizations"
142   echo "  --disable-mmx            disable MMX optimizations"
143   echo "  --disable-mmx2           disable MMX2 optimizations"
144   echo "  --disable-sse            disable SSE optimizations"
145   echo "  --disable-ssse3          disable SSSE3 optimizations"
146   echo "  --disable-armv5te        disable armv5te optimizations"
147   echo "  --disable-armv6          disable armv6 optimizations"
148   echo "  --disable-armvfp         disable ARM VFP optimizations"
149   echo "  --disable-iwmmxt         disable iwmmxt optimizations"
150   echo "  --disable-mmi            disable MMI optimizations"
151   echo "  --disable-neon           disable neon optimizations"
152   echo "  --disable-vis            disable VIS optimizations"
153   echo "  --disable-network        disable network support [no]"
154   echo "  --disable-ipv6           disable IPv6 support [no]"
155   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
156   echo "                           MPEG audio decoding [no]"
157   echo "  --disable-aandct         disable AAN DCT code"
158   echo "  --disable-fft            disable FFT code"
159   echo "  --disable-golomb         disable Golomb code"
160   echo "  --disable-mdct           disable MDCT code"
161   echo "  --enable-gray            enable full grayscale support (slower color)"
162   echo "  --disable-ffmpeg         disable ffmpeg build"
163   echo "  --disable-ffplay         disable ffplay build"
164   echo "  --disable-ffserver       disable ffserver build"
165   echo "  --enable-small           optimize for size instead of speed"
166   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
167   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
168   echo "  --enable-beos-netserver  enable BeOS netserver"
169   echo "  --disable-encoder=NAME   disable encoder NAME"
170   echo "  --enable-encoder=NAME    enable encoder NAME"
171   echo "  --disable-encoders       disable all encoders"
172   echo "  --disable-decoder=NAME   disable decoder NAME"
173   echo "  --enable-decoder=NAME    enable decoder NAME"
174   echo "  --disable-decoders       disable all decoders"
175   echo "  --disable-muxer=NAME     disable muxer NAME"
176   echo "  --enable-muxer=NAME      enable muxer NAME"
177   echo "  --disable-muxers         disable all muxers"
178   echo "  --disable-demuxer=NAME   disable demuxer NAME"
179   echo "  --enable-demuxer=NAME    enable demuxer NAME"
180   echo "  --disable-demuxers       disable all demuxers"
181   echo "  --enable-parser=NAME     enable parser NAME"
182   echo "  --disable-parser=NAME    disable parser NAME"
183   echo "  --disable-parsers        disable all parsers"
184   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
185   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
186   echo "  --disable-bsfs           disable all bitstream filters"
187   echo "  --enable-protocol=NAME   enable protocol NAME"
188   echo "  --disable-protocol=NAME  disable protocol NAME"
189   echo "  --disable-protocols      disable all protocols"
190   echo "  --disable-indevs         disable input devices"
191   echo "  --disable-outdevs        disable output devices"
192   echo "  --disable-devices        disable all devices"
193   echo "  --enable-filter=NAME     enable filter NAME"
194   echo "  --disable-filter=NAME    disable filter NAME"
195   echo "  --disable-filters        disable all filters"
196   echo "  --list-decoders          show all available decoders"
197   echo "  --list-encoders          show all available encoders"
198   echo "  --list-muxers            show all available muxers"
199   echo "  --list-demuxers          show all available demuxers"
200   echo "  --list-parsers           show all available parsers"
201   echo "  --list-protocols         show all available protocols"
202   echo "  --list-bsfs              show all available bitstream filters"
203   echo "  --list-indevs            show all available input devices"
204   echo "  --list-outdevs           show all available output devices"
205   echo "  --list-filters           show all available filters"
206   echo
207   echo "Developer options (useful when working on FFmpeg itself):"
208   echo "  --disable-debug          disable debugging symbols"
209   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
210   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
211   echo "  --disable-optimizations  disable compiler optimizations"
212   echo "  --enable-extra-warnings  enable more compiler warnings"
213   echo "  --disable-stripping      disable stripping of executables and shared libraries"
214   echo ""
215   echo "NOTE: Object files are built at the place where configure is launched."
216   exit 0
217 }
218
219 log(){
220     echo "$@" >> $logfile
221 }
222
223 log_file(){
224     log BEGIN $1
225     pr -n -t $1 >> $logfile
226     log END $1
227 }
228
229 echolog(){
230     log "$@"
231     echo "$@"
232 }
233
234 die(){
235     echolog "$@"
236     cat <<EOF
237 If you think configure made a mistake, make sure you are using the latest
238 version from SVN.  If the latest version fails, report the problem to the
239 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
240 EOF
241     if disabled logging; then
242         cat <<EOF
243 Rerun configure with logging enabled (do not use --disable-logging), and
244 include the log this produces with your report.
245 EOF
246     else
247 cat <<EOF
248 Include the log file "$logfile" produced by configure as this will help
249 solving the problem.
250 EOF
251     fi
252     rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
253     exit 1
254 }
255
256 # Avoid locale weirdness, besides we really just want to translate ASCII.
257 toupper(){
258     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
259 }
260
261 tolower(){
262     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
263 }
264
265 set_all(){
266     value=$1
267     shift
268     for var in $*; do
269         eval $var=$value
270     done
271 }
272
273 set_weak(){
274     value=$1
275     shift
276     for var; do
277         eval : \${$var:=$value}
278     done
279 }
280
281 pushvar(){
282     for var in $*; do
283         eval level=\${${var}_level:=0}
284         eval ${var}_${level}="\$$var"
285         eval ${var}_level=$(($level+1))
286     done
287 }
288
289 popvar(){
290     for var in $*; do
291         eval level=\${${var}_level:-0}
292         test $level = 0 && continue
293         eval level=$(($level-1))
294         eval $var="\${${var}_${level}}"
295         eval ${var}_level=$level
296         eval unset ${var}_${level}
297     done
298 }
299
300 enable(){
301     set_all yes $*
302 }
303
304 disable(){
305     set_all no $*
306 }
307
308 enable_weak(){
309     set_weak yes $*
310 }
311
312 disable_weak(){
313     set_weak no $*
314 }
315
316 do_enable_deep(){
317     for var; do
318         enabled $var && continue
319         eval sel="\$${var}_select"
320         eval sgs="\$${var}_suggest"
321         pushvar var sgs
322         enable_deep $sel
323         popvar sgs
324         enable_deep_weak $sgs
325         popvar var
326     done
327 }
328
329 enable_deep(){
330     do_enable_deep $*
331     enable $*
332 }
333
334 enable_deep_weak(){
335     do_enable_deep $*
336     enable_weak $*
337 }
338
339 enabled(){
340     test "${1#!}" = "$1" && op== || op=!=
341     eval test "x\$${1#!}" $op "xyes"
342 }
343
344 disabled(){
345     test "${1#!}" = "$1" && op== || op=!=
346     eval test "x\$${1#!}" $op "xno"
347 }
348
349 enabled_all(){
350     for opt; do
351         enabled $opt || return 1
352     done
353 }
354
355 disabled_all(){
356     for opt; do
357         disabled $opt || return 1
358     done
359 }
360
361 enabled_any(){
362     for opt; do
363         enabled $opt && return 0
364     done
365 }
366
367 disabled_any(){
368     for opt; do
369         disabled $opt && return 0
370     done
371     return 1
372 }
373
374 set_default(){
375     for opt; do
376         eval : \${$opt:=\$${opt}_default}
377     done
378 }
379
380 is_in(){
381     value=$1
382     shift
383     for var in $*; do
384         [ $var = $value ] && return 0
385     done
386     return 1
387 }
388
389 check_deps(){
390     for cfg; do
391         cfg="${cfg#!}"
392         enabled ${cfg}_checking && die "Circular dependency for $cfg."
393         disabled ${cfg}_checking && continue
394         enable ${cfg}_checking
395
396         eval dep_all="\$${cfg}_deps"
397         eval dep_any="\$${cfg}_deps_any"
398         eval dep_sel="\$${cfg}_select"
399         eval dep_sgs="\$${cfg}_suggest"
400
401         pushvar cfg dep_all dep_any dep_sel dep_sgs
402         check_deps $dep_all $dep_any $dep_sel $dep_sgs
403         popvar cfg dep_all dep_any dep_sel dep_sgs
404
405         enabled_all  $dep_all || disable $cfg
406         enabled_any  $dep_any || disable $cfg
407         disabled_any $dep_sel && disable $cfg
408
409         if enabled $cfg; then
410             eval dep_extralibs="\$${cfg}_extralibs"
411             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
412             enable_deep $dep_sel
413             enable_deep_weak $dep_sgs
414         fi
415
416         disable ${cfg}_checking
417     done
418 }
419
420 print_config(){
421     pfx=$1
422     header=$2
423     makefile=$3
424     shift 3
425     for cfg; do
426         ucname="`toupper $cfg`"
427         if enabled $cfg; then
428             echo "#define ${pfx}${ucname} 1" >> $header
429             echo "#define ENABLE_${ucname} 1" >> $header
430             echo "${pfx}${ucname}=yes" >> $makefile
431         else
432             echo "#define ENABLE_${ucname} 0" >> $header
433         fi
434     done
435 }
436
437 flags_saved(){
438     (: ${SAVE_CFLAGS?}) 2> /dev/null
439 }
440
441 save_flags(){
442     flags_saved && return
443     SAVE_CFLAGS="$CFLAGS"
444     SAVE_LDFLAGS="$LDFLAGS"
445     SAVE_extralibs="$extralibs"
446 }
447
448 restore_flags(){
449     flags_saved || return
450     CFLAGS="$SAVE_CFLAGS"
451     LDFLAGS="$SAVE_LDFLAGS"
452     extralibs="$SAVE_extralibs"
453     unset SAVE_CFLAGS
454     unset SAVE_LDFLAGS
455     unset SAVE_extralibs
456 }
457
458 temp_cflags(){
459     save_flags
460     CFLAGS="$CFLAGS $*"
461 }
462
463 temp_ldflags(){
464     save_flags
465     LDFLAGS="$LDFLAGS $*"
466 }
467
468 temp_extralibs(){
469     save_flags
470     extralibs="$extralibs $*"
471 }
472
473 append(){
474     var=$1
475     shift
476     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
477     eval "$var=\"\$$var $*\""
478 }
479
480 add_cflags(){
481     append CFLAGS "$@"
482 }
483
484 add_ldflags(){
485     append LDFLAGS "$@"
486 }
487
488 add_extralibs(){
489     append extralibs "$@"
490 }
491
492 check_cmd(){
493     log "$@"
494     "$@" >> $logfile 2>&1
495 }
496
497 check_cc(){
498     log check_cc "$@"
499     cat > $TMPC
500     log_file $TMPC
501     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
502 }
503
504 check_cpp(){
505     log check_cpp "$@"
506     cat > $TMPC
507     log_file $TMPC
508     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
509 }
510
511 check_asm(){
512     log check_asm "$@"
513     name="$1"
514     asm="$2"
515     shift 2
516     check_cc "$@" <<EOF && enable $name || disable $name
517 void foo(void){ __asm__ volatile($asm); }
518 EOF
519 }
520
521 check_yasm(){
522     log check_yasm "$@"
523     echo "$1" > $TMPS
524     log_file $TMPS
525     shift 1
526     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
527 }
528
529 check_ld(){
530     log check_ld "$@"
531     check_cc || return
532     flags=''
533     libs=''
534     for f; do
535         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
536     done
537     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
538 }
539
540 check_cflags(){
541     log check_cflags "$@"
542     check_cc "$@" <<EOF && add_cflags "$@"
543 int x;
544 EOF
545 }
546
547 check_ldflags(){
548     log check_ldflags "$@"
549     check_ld "$@" <<EOF && add_ldflags "$@"
550 int main(void){ return 0; }
551 EOF
552 }
553
554 check_header(){
555     log check_header "$@"
556     header=$1
557     shift
558     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
559     disable $var
560     check_cpp "$@" <<EOF && enable $var
561 #include <$header>
562 int x;
563 EOF
564 }
565
566 check_func(){
567     log check_func "$@"
568     func=$1
569     shift
570     disable $func
571     check_ld "$@" <<EOF && enable $func
572 extern int $func();
573 int main(void){ $func(); }
574 EOF
575 }
576
577 check_func_headers(){
578     log check_func_headers "$@"
579     headers=$1
580     func=$2
581     shift 2
582     disable $func
583     incs=""
584     for hdr in $headers; do
585         incs="$incs
586 #include <$hdr>"
587     done
588     check_ld "$@" <<EOF && enable $func
589 $incs
590 int main(int argc, char **argv){
591     (void) $func;
592     return 0;
593 }
594 EOF
595 }
596
597 check_cpp_condition(){
598     log check_cpp_condition "$@"
599     header=$1
600     condition=$2
601     check_cpp <<EOF
602 #include <$header>
603 #if !($condition)
604 #error "unsatisfied condition: $condition"
605 #endif
606 EOF
607 }
608
609 check_lib(){
610     log check_lib "$@"
611     header="$1"
612     func="$2"
613     shift 2
614     temp_extralibs "$@"
615     check_header $header && check_func $func && add_extralibs "$@"
616     err=$?
617     restore_flags
618     return $err
619 }
620
621 check_lib2(){
622     log check_lib2 "$@"
623     headers="$1"
624     func="$2"
625     shift 2
626     temp_extralibs "$@"
627     check_func_headers "$headers" $func && add_extralibs "$@"
628     err=$?
629     restore_flags
630     return $err
631 }
632
633 check_exec(){
634     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
635 }
636
637 check_exec_crash(){
638     code=`cat`
639
640     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
641     # are safe but may not be available everywhere.  Thus we use
642     # raise(SIGTERM) instead.  The check is run in a subshell so we
643     # can redirect the "Terminated" message from the shell.  SIGBUS
644     # is not defined by standard C so it is used conditionally.
645
646     (check_exec "$@") >> $logfile 2>&1 <<EOF
647 #include <signal.h>
648 static void sighandler(int sig){
649     raise(SIGTERM);
650 }
651 int main(void){
652     signal(SIGILL, sighandler);
653     signal(SIGFPE, sighandler);
654     signal(SIGSEGV, sighandler);
655 #ifdef SIGBUS
656     signal(SIGBUS, sighandler);
657 #endif
658     { $code }
659 }
660 EOF
661 }
662
663 check_type(){
664     log check_type "$@"
665     headers=$1
666     type=$2
667     shift 2
668     disable $type
669     incs=""
670     for hdr in $headers; do
671         incs="$incs
672 #include <$hdr>"
673     done
674     check_cc "$@" <<EOF && enable $type
675 $incs
676 $type v;
677 EOF
678 }
679
680 require(){
681     name="$1"
682     header="$2"
683     func="$3"
684     shift 3
685     check_lib $header $func "$@" || die "ERROR: $name not found"
686 }
687
688 require2(){
689     name="$1"
690     headers="$2"
691     func="$3"
692     shift 3
693     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
694 }
695
696 check_foo_config(){
697     cfg=$1
698     pkg=$2
699     header=$3
700     func=$4
701     shift 4
702     disable $cfg
703     check_cmd ${pkg}-config --version
704     err=$?
705     if test "$err" = 0; then
706         temp_cflags `${pkg}-config --cflags`
707         temp_extralibs `${pkg}-config --libs`
708         check_lib "$@" $header $func && enable $cfg
709     fi
710     return $err
711 }
712
713 apply(){
714     file=$1
715     shift
716     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
717 }
718
719 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
720 # system-dependent things.
721
722 COMPONENT_LIST="
723     bsfs
724     decoders
725     demuxers
726     encoders
727     filters
728     indevs
729     muxers
730     outdevs
731     parsers
732     protocols
733 "
734
735 CONFIG_LIST="
736     $COMPONENT_LIST
737     aandct
738     avfilter
739     avfilter_lavf
740     avisynth
741     beos_netserver
742     bzlib
743     ffmpeg
744     ffplay
745     ffserver
746     fft
747     golomb
748     gpl
749     gprof
750     gray
751     hardcoded_tables
752     ipv6
753     libamr_nb
754     libamr_wb
755     libdc1394
756     libdirac
757     libfaac
758     libfaad
759     libfaadbin
760     libgsm
761     libmp3lame
762     libnut
763     libschroedinger
764     libspeex
765     libtheora
766     libvorbis
767     libx264
768     libxvid
769     mdct
770     memalign_hack
771     mlib
772     mpegaudio_hp
773     network
774     nonfree
775     postproc
776     powerpc_perf
777     shared
778     small
779     static
780     swscale
781     vdpau
782     vhook
783     x11grab
784     xvmc
785     zlib
786 "
787
788 THREADS_LIST='
789     beosthreads
790     os2threads
791     pthreads
792     w32threads
793 '
794
795 ARCH_LIST='
796     alpha
797     arm
798     bfin
799     ia64
800     m68k
801     mips
802     parisc
803     ppc
804     s390
805     sh4
806     sparc
807     sparc64
808     x86
809     x86_32
810     x86_64
811 '
812
813 ARCH_EXT_LIST='
814     altivec
815     armv5te
816     armv6
817     armv6t2
818     armvfp
819     iwmmxt
820     mmi
821     mmx
822     mmx2
823     neon
824     sse
825     ssse3
826     vis
827 '
828
829 HAVE_LIST="
830     $ARCH_EXT_LIST
831     $THREADS_LIST
832     altivec_h
833     arpa_inet_h
834     bswap
835     closesocket
836     cmov
837     conio_h
838     dcbzl
839     dev_bktr_ioctl_bt848_h
840     dev_bktr_ioctl_meteor_h
841     dev_ic_bt8xx_h
842     dev_video_meteor_ioctl_meteor_h
843     dev_video_bktr_ioctl_bt848_h
844     dlfcn_h
845     dlopen
846     dos_paths
847     ebp_available
848     ebx_available
849     fast_64bit
850     fast_cmov
851     fast_unaligned
852     fork
853     freetype2
854     gethrtime
855     GetProcessTimes
856     getrusage
857     imlib2
858     inet_aton
859     inline_asm
860     libdc1394_1
861     libdc1394_2
862     llrint
863     lrint
864     lrintf
865     machine_ioctl_bt848_h
866     machine_ioctl_meteor_h
867     malloc_h
868     memalign
869     mkstemp
870     pld
871     posix_memalign
872     ppc64
873     round
874     roundf
875     sdl
876     sdl_video_size
877     socklen_t
878     soundcard_h
879     poll_h
880     sys_mman_h
881     sys_resource_h
882     sys_select_h
883     sys_soundcard_h
884     sys_videoio_h
885     termios_h
886     threads
887     winsock2_h
888     yasm
889 "
890
891 # options emitted with CONFIG_ prefix but not available on command line
892 CONFIG_EXTRA="
893     fft_mmx
894     oldscaler
895 "
896
897 CMDLINE_SELECT="
898     $ARCH_EXT_LIST
899     $CONFIG_LIST
900     $THREADS_LIST
901     cross_compile
902     debug
903     extra_warnings
904     logging
905     optimizations
906     stripping
907 "
908
909 PATHS_LIST='
910     bindir
911     incdir
912     libdir
913     mandir
914     prefix
915     shlibdir
916 '
917
918 CMDLINE_SET="
919     $PATHS_LIST
920     arch
921     build_suffix
922     cc
923     cpu
924     cross_prefix
925     extra_version
926     host_cc
927     host_cflags
928     host_ldflags
929     host_libs
930     logfile
931     nm
932     source_path
933     target_exec
934     target_os
935     target_path
936 "
937
938 # code dependency declarations
939
940 # architecture extensions
941 altivec_deps="ppc"
942 armv5te_deps="arm"
943 armv6_deps="arm"
944 armv6t2_deps="arm"
945 armvfp_deps="arm"
946 iwmmxt_deps="arm"
947 mmi_deps="mips"
948 mmx_deps="x86"
949 mmx2_deps="x86 mmx"
950 neon_deps="arm"
951 sse_deps="mmx"
952 ssse3_deps="x86 sse"
953 vis_deps="sparc"
954
955 # common features
956 fft_suggest="fft_mmx"
957 fft_mmx_deps="mmx yasm"
958 oldscaler_deps="!swscale"
959
960 # decoders / encoders
961 aac_decoder_select="fft mdct"
962 ac3_decoder_deps="gpl"
963 ac3_decoder_select="fft mdct"
964 atrac3_decoder_select="fft mdct"
965 cavs_decoder_select="golomb"
966 cook_decoder_select="fft mdct"
967 cscd_decoder_suggest="zlib"
968 dca_decoder_select="fft mdct"
969 dnxhd_encoder_select="aandct"
970 dxa_decoder_select="zlib"
971 eac3_decoder_deps="gpl"
972 eac3_decoder_select="fft mdct"
973 eatgq_decoder_select="aandct"
974 ffv1_decoder_select="golomb"
975 flac_decoder_select="golomb"
976 flac_encoder_select="golomb"
977 flashsv_decoder_select="zlib"
978 flashsv_encoder_select="zlib"
979 flv_encoder_select="aandct"
980 h261_encoder_select="aandct"
981 h263_encoder_select="aandct"
982 h263p_encoder_select="aandct"
983 h264_decoder_select="golomb"
984 h264_vdpau_decoder_deps="vdpau"
985 imc_decoder_select="fft mdct"
986 jpegls_decoder_select="golomb"
987 jpegls_encoder_select="golomb"
988 ljpeg_encoder_select="aandct"
989 loco_decoder_select="golomb"
990 mjpeg_encoder_select="aandct"
991 mpeg1video_encoder_select="aandct"
992 mpeg2video_encoder_select="aandct"
993 mpeg4_encoder_select="aandct"
994 mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
995 msmpeg4v1_encoder_select="aandct"
996 msmpeg4v2_encoder_select="aandct"
997 msmpeg4v3_encoder_select="aandct"
998 nellymoser_decoder_select="fft mdct"
999 nellymoser_encoder_select="fft mdct"
1000 png_decoder_select="zlib"
1001 png_encoder_select="zlib"
1002 qdm2_decoder_select="fft mdct"
1003 rv10_encoder_select="aandct"
1004 rv20_encoder_select="aandct"
1005 shorten_decoder_select="golomb"
1006 sonic_decoder_select="golomb"
1007 sonic_encoder_select="golomb"
1008 sonic_ls_encoder_select="golomb"
1009 svq3_decoder_select="golomb"
1010 svq3_decoder_suggest="zlib"
1011 tiff_decoder_suggest="zlib"
1012 tiff_encoder_suggest="zlib"
1013 tscc_decoder_select="zlib"
1014 vorbis_decoder_select="fft mdct"
1015 vorbis_encoder_select="fft mdct"
1016 wmav1_decoder_select="fft mdct"
1017 wmav1_encoder_select="fft mdct"
1018 wmav2_decoder_select="fft mdct"
1019 wmav2_encoder_select="fft mdct"
1020 wmv1_encoder_select="aandct"
1021 wmv2_encoder_select="aandct"
1022 zlib_decoder_select="zlib"
1023 zlib_encoder_select="zlib"
1024 zmbv_decoder_select="zlib"
1025 zmbv_encoder_select="zlib"
1026
1027 # external libraries
1028 libamr_nb_decoder_deps="libamr_nb"
1029 libamr_nb_encoder_deps="libamr_nb"
1030 libamr_wb_decoder_deps="libamr_wb"
1031 libamr_wb_encoder_deps="libamr_wb"
1032 libdirac_decoder_deps="libdirac !libschroedinger"
1033 libdirac_encoder_deps="libdirac"
1034 libfaac_encoder_deps="libfaac"
1035 libfaad_decoder_deps="libfaad"
1036 libfaadbin_decoder_extralibs='$ldl'
1037 libgsm_decoder_deps="libgsm"
1038 libgsm_encoder_deps="libgsm"
1039 libgsm_ms_decoder_deps="libgsm"
1040 libgsm_ms_encoder_deps="libgsm"
1041 libmp3lame_encoder_deps="libmp3lame"
1042 libschroedinger_decoder_deps="libschroedinger"
1043 libschroedinger_encoder_deps="libschroedinger"
1044 libspeex_decoder_deps="libspeex"
1045 libtheora_encoder_deps="libtheora"
1046 libvorbis_encoder_deps="libvorbis"
1047 libx264_encoder_deps="libx264"
1048 libxvid_encoder_deps="libxvid"
1049 mpeg4aac_decoder_deps="libfaad"
1050 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1051
1052 # demuxers / muxers
1053 ac3_demuxer_deps="ac3_parser"
1054 audio_beos_demuxer_deps="audio_beos"
1055 audio_beos_demuxer_extralibs="-lmedia -lbe"
1056 audio_beos_muxer_deps="audio_beos"
1057 audio_beos_muxer_extralibs="-lmedia -lbe"
1058 avisynth_demuxer_deps="avisynth"
1059 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1060 dirac_demuxer_deps="dirac_parser"
1061 dv1394_demuxer_deps="dv1394 dv_demuxer"
1062 libdc1394_demuxer_deps="libdc1394"
1063 libnut_demuxer_deps="libnut"
1064 libnut_muxer_deps="libnut"
1065 matroska_demuxer_suggest="zlib bzlib"
1066 mov_demuxer_suggest="zlib"
1067 mp3_demuxer_deps="mpegaudio_parser"
1068 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1069 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1070 redir_demuxer_deps="network"
1071 rtp_muxer_deps="network rtp_protocol"
1072 rtsp_demuxer_deps="sdp_demuxer"
1073 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1074 v4l_demuxer_deps="linux_videodev_h"
1075 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1076 vfwcap_demuxer_deps="capCreateCaptureWindow"
1077 vfwcap_demuxer_extralibs="-lvfw32"
1078 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1079 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1080
1081 # protocols
1082 http_protocol_deps="network"
1083 rtp_protocol_deps="udp_protocol"
1084 tcp_protocol_deps="network"
1085 udp_protocol_deps="network"
1086
1087 # filters
1088 movie_filter_deps="avfilter_lavf"
1089
1090 # programs
1091 ffplay_deps="sdl"
1092 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1093 ffserver_extralibs='$ldl'
1094 vhook_extralibs='$ldl'
1095
1096
1097 # default parameters
1098
1099 logfile="config.err"
1100
1101 # installation paths
1102 prefix_default="/usr/local"
1103 bindir_default='${prefix}/bin'
1104 incdir_default='${prefix}/include'
1105 libdir_default='${prefix}/lib'
1106 mandir_default='${prefix}/share/man'
1107 shlibdir_default="$libdir_default"
1108
1109 # toolchain
1110 ar="ar"
1111 cc_default="gcc"
1112 host_cc_default="gcc"
1113 ln_s="ln -sf"
1114 nm_default="nm"
1115 objformat="elf"
1116 ranlib="ranlib"
1117 strip="strip"
1118 yasmexe="yasm"
1119
1120 # machine
1121 arch=`uname -m`
1122 cpu="generic"
1123
1124 # OS
1125 target_os=$(tolower $(uname -s))
1126
1127 # configurable options
1128 enable debug
1129 enable ffmpeg
1130 enable ffplay
1131 enable ffserver
1132 enable ipv6
1133 enable mpegaudio_hp
1134 enable network
1135 enable oldscaler
1136 enable optimizations
1137 enable protocols
1138 enable static
1139 enable stripping
1140 vhook="default"
1141
1142 # build settings
1143 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1144 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1145 VHOOKSHFLAGS='$(SHFLAGS)'
1146 FFSERVERLDFLAGS=-Wl,-E
1147 LIBPREF="lib"
1148 LIBSUF=".a"
1149 FULLNAME='$(NAME)$(BUILDSUF)'
1150 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1151 SLIBPREF="lib"
1152 SLIBSUF=".so"
1153 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1154 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1155 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1156 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1157
1158 host_cflags='-O3 -g -Wall'
1159 host_libs='-lm'
1160
1161 target_path='.'
1162
1163 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1164 # full relative path for objects in subdirectories for non-recursive Make.
1165 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1166
1167 # find source path
1168 source_path="`dirname \"$0\"`"
1169 enable source_path_used
1170 if test -z "$source_path" -o "$source_path" = "." ; then
1171     source_path="`pwd`"
1172     disable source_path_used
1173 else
1174     source_path="`cd \"$source_path\"; pwd`"
1175     echo "$source_path" | grep -q '[[:blank:]]' &&
1176         die "Out of tree builds are impossible with whitespace in source path."
1177 fi
1178
1179 FFMPEG_CONFIGURATION="$@"
1180
1181 find_things(){
1182     thing=$1
1183     pattern=$2
1184     file=$source_path/$3
1185     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1186 }
1187
1188 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1189 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1190 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1191 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1192 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1193 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1194 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1195 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1196 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1197 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1198
1199 enable $ARCH_EXT_LIST \
1200        $DECODER_LIST \
1201        $ENCODER_LIST \
1202        $PARSER_LIST \
1203        $BSF_LIST \
1204        $DEMUXER_LIST \
1205        $MUXER_LIST \
1206        $FILTER_LIST \
1207        $PROTOCOL_LIST \
1208        $INDEV_LIST \
1209        $OUTDEV_LIST \
1210
1211 die_unknown(){
1212     echo "Unknown option \"$1\"."
1213     echo "See $0 --help for available options."
1214     exit 1
1215 }
1216
1217 show_list() {
1218     suffix=_$1
1219     shift
1220     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1221     exit 0
1222 }
1223
1224 for opt do
1225     optval="${opt#*=}"
1226     case "$opt" in
1227     --extra-cflags=*) add_cflags "$optval"
1228     ;;
1229     --extra-ldflags=*) add_ldflags "$optval"
1230     ;;
1231     --extra-libs=*) add_extralibs "$optval"
1232     ;;
1233     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1234     ;;
1235     --enable-debug=*) debuglevel="$optval"
1236     ;;
1237     --enable-*=*|--disable-*=*)
1238     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1239     case "$thing" in
1240         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1241         *) die_unknown "$opt" ;;
1242     esac
1243     ;;
1244     --enable-?*|--disable-?*)
1245     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1246     if is_in $option $COMPONENT_LIST; then
1247         eval $action \$$(toupper ${option%s})_LIST
1248     elif is_in $option $CMDLINE_SELECT; then
1249         $action $option
1250     else
1251         die_unknown $opt
1252     fi
1253     ;;
1254     --list-*)
1255         NAME="${opt#--list-}"
1256         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1257         NAME=${NAME%s}
1258         eval show_list $NAME \$$(toupper $NAME)_LIST
1259     ;;
1260     --help|-h) show_help
1261     ;;
1262     *)
1263     optname="${opt%%=*}"
1264     optname="${optname#--}"
1265     optname=$(echo "$optname" | sed 's/-/_/g')
1266     is_in $optname $CMDLINE_SET || die_unknown $opt
1267     eval $optname='$optval'
1268     ;;
1269     esac
1270 done
1271
1272 disabled logging && logfile=/dev/null
1273
1274 echo "# $0 $@" > $logfile
1275 set >> $logfile
1276
1277 test -n "$cross_prefix" && enable cross_compile
1278
1279 ar="${cross_prefix}${ar}"
1280 cc_default="${cross_prefix}${cc_default}"
1281 nm_default="${cross_prefix}${nm_default}"
1282 ranlib="${cross_prefix}${ranlib}"
1283 strip="${cross_prefix}${strip}"
1284
1285 set_default cc nm
1286 enabled cross_compile || host_cc_default=$cc
1287 set_default host_cc
1288
1289 # set temporary file name
1290 : ${TMPDIR:=$TEMPDIR}
1291 : ${TMPDIR:=$TMP}
1292 : ${TMPDIR:=/tmp}
1293
1294 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1295 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1296 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1297 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1298 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1299 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1300
1301 check_cflags -std=c99
1302
1303 case "$arch" in
1304     i386|i486|i586|i686|i86pc|BePC)
1305         arch="x86_32"
1306         enable fast_unaligned
1307     ;;
1308     x86_64|amd64)
1309         arch="x86_32"
1310         enable cmov
1311         enable fast_cmov
1312         enable fast_unaligned
1313         check_cc <<EOF && enable fast_64bit && arch="x86_64"
1314         int test[sizeof(char*) - 7];
1315 EOF
1316     ;;
1317     arm|armv[4567]*l)
1318         arch="arm"
1319     ;;
1320     alpha)
1321         arch="alpha"
1322         enable fast_64bit
1323     ;;
1324     "Power Macintosh"|ppc|powerpc)
1325         arch="ppc"
1326         enable fast_unaligned
1327     ;;
1328     ppc64)
1329         arch="ppc"
1330         enable fast_64bit
1331         enable fast_unaligned
1332     ;;
1333     mips|mipsel|IP*)
1334         arch="mips"
1335     ;;
1336     mips64)
1337         arch="mips"
1338         enable fast_64bit
1339     ;;
1340     sun4u|sparc64)
1341         arch="sparc64"
1342         enable fast_64bit
1343     ;;
1344     sparc)
1345         arch="sparc"
1346     ;;
1347     sh4|sh)
1348         arch="sh4"
1349     ;;
1350     parisc|hppa)
1351         arch="parisc"
1352     ;;
1353     parisc64|hppa64)
1354         arch="parisc"
1355         enable fast_64bit
1356     ;;
1357     s390|s390x)
1358         arch="s390"
1359     ;;
1360     m68k)
1361         arch="m68k"
1362     ;;
1363     ia64)
1364         arch="ia64"
1365         enable fast_64bit
1366     ;;
1367     bfin)
1368         arch="bfin"
1369     ;;
1370     *)
1371         arch="unknown"
1372     ;;
1373 esac
1374
1375 enable $arch
1376 enabled_any x86_32 x86_64 && enable x86
1377 enabled     sparc64       && enable sparc
1378
1379 # OS specific
1380 case $target_os in
1381     beos|haiku|zeta)
1382         prefix_default="$HOME/config"
1383         # helps building libavcodec
1384         add_cflags "-DPIC -fomit-frame-pointer"
1385         # 3 gcc releases known for BeOS, each with ugly bugs
1386         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1387         case "$gcc_version" in
1388           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1389             disable mmx
1390             ;;
1391           *20010315*) echo "BeBits gcc"
1392             add_cflags "-fno-expensive-optimizations"
1393             ;;
1394         esac
1395         SHFLAGS=-nostart
1396         # enable BeOS things
1397         enable audio_beos
1398         # no need for libm, but the inet stuff
1399         # Check for BONE
1400         # XXX: actually should check for NOT net_server
1401         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1402             network_extralibs="-lbind -lsocket"
1403         else
1404             enable beos_netserver
1405             network_extralibs="-lnet"
1406         fi ;;
1407     sunos)
1408         FFSERVERLDFLAGS=""
1409         SHFLAGS='-shared -Wl,-h,$$(@F)'
1410         network_extralibs="-lsocket -lnsl"
1411         add_cflags -D__EXTENSIONS__
1412         ;;
1413     netbsd)
1414         oss_demuxer_extralibs="-lossaudio"
1415         oss_muxer_extralibs="-lossaudio"
1416         ;;
1417     openbsd)
1418         disable need_memalign
1419         LIBOBJFLAGS='$(PIC)'
1420         SHFLAGS='-shared'
1421         oss_demuxer_extralibs="-lossaudio"
1422         oss_muxer_extralibs="-lossaudio"
1423         ;;
1424     freebsd)
1425         disable need_memalign
1426         ;;
1427     bsd/os)
1428         osextralibs="-lpoll -lgnugetopt"
1429         strip="strip -d"
1430         ;;
1431     darwin)
1432         disable need_memalign
1433         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1434         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1435         strip="strip -x"
1436         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1437         SLIBSUF=".dylib"
1438         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1439         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1440         FFSERVERLDFLAGS=-Wl,-bind_at_load
1441         objformat="macho"
1442         enabled x86_64 && objformat="macho64"
1443         ;;
1444     mingw32*)
1445         target_os=mingw32
1446         LIBTARGET=i386
1447         if test $arch = x86_64; then
1448             disable need_memalign
1449             LIBTARGET=x64
1450         fi
1451         shlibdir_default="$bindir_default"
1452         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1453         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1454         if enabled swscale; then
1455             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1456             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1457         fi
1458         disable ffserver
1459         SLIBPREF=""
1460         SLIBSUF=".dll"
1461         EXESUF=".exe"
1462         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1463         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1464         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1465         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1466             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1467         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1468         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1469         objformat="win32"
1470         enable dos_paths
1471         check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1472             die "ERROR: MinGW runtime version must be >= 3.15."
1473         enabled_any avisynth vfwcap_demuxer &&
1474             { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1475               die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1476         ;;
1477     cygwin*)
1478         target_os=cygwin
1479         shlibdir_default="$bindir_default"
1480         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1481         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1482         if enabled swscale; then
1483             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1484             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1485         fi
1486         EXESUF=".exe"
1487         SLIBPREF="cyg"
1488         SLIBSUF=".dll"
1489         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1490         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1491         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1492         objformat="win32"
1493         enable dos_paths
1494         ;;
1495     *-dos|freedos|opendos)
1496         disable ffplay ffserver vhook
1497         disable $INDEV_LIST $OUTDEV_LIST
1498         network_extralibs="-lsocket"
1499         EXESUF=".exe"
1500         objformat="win32"
1501         enable dos_paths
1502         ;;
1503     linux)
1504         enable dv1394
1505         ;;
1506     irix*)
1507         target_os=irix
1508         ranlib="echo ignoring ranlib"
1509         ;;
1510     os/2*)
1511         strip="lxlite"
1512         ln_s="cp -f"
1513         EXESUF=".exe"
1514         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1515         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1516         FFSERVERLDFLAGS=""
1517         LIBSUF="_s.a"
1518         SLIBPREF=""
1519         SLIBSUF=".dll"
1520         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1521         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1522         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1523           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1524           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1525           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1526           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1527           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1528         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1529           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1530         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1531         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1532         disable vhook
1533         enable dos_paths
1534         ;;
1535     interix)
1536         disable vhook
1537         ;;
1538
1539     *)
1540         target_os="${target_os}-UNKNOWN"
1541         ;;
1542 esac
1543
1544 set_default $PATHS_LIST
1545
1546 add_extralibs $osextralibs
1547
1548 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1549 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1550
1551 # we need to build at least one lib type
1552 if ! enabled_any static shared; then
1553     cat <<EOF
1554 At least one library type must be built.
1555 Specify --enable-static to build the static libraries or --enable-shared to
1556 build the shared libraries as well. To only build the shared libraries specify
1557 --disable-static in addition to --enable-shared.
1558 EOF
1559     exit 1;
1560 fi
1561
1562 disabled static && LIBNAME=""
1563
1564 if enabled_any libfaad libfaadbin ; then
1565     if check_header faad.h; then
1566         check_cc <<EOF
1567 #include <faad.h>
1568 #ifndef FAAD2_VERSION
1569 ok faad1
1570 #endif
1571 int main(void) { return 0; }
1572 EOF
1573         test $? = 0 && enable libfaad2
1574     else
1575         die "FAAD test failed."
1576     fi
1577 fi
1578
1579
1580 if ! enabled gpl; then
1581     die_gpl_disabled(){
1582         name=$1
1583         shift
1584         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1585     }
1586     die_gpl_disabled "The Postprocessing code" postproc
1587     die_gpl_disabled "libx264"                 libx264
1588     die_gpl_disabled "libxvidcore"             libxvid
1589     die_gpl_disabled "FAAD2"                   libfaad2
1590     die_gpl_disabled "The X11 grabber"         x11grab
1591     die_gpl_disabled "The software scaler"     swscale
1592 fi
1593
1594 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1595     die "libamr is nonfree and --enable-nonfree is not specified."
1596 fi
1597
1598 check_deps $ARCH_EXT_LIST
1599
1600 test -z "$need_memalign" && need_memalign="$mmx"
1601
1602 #Darwin CC versions
1603 if test $target_os = darwin; then
1604     if $cc -v 2>&1 | grep -q xlc; then
1605         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1606     else
1607         add_cflags "-pipe"
1608         check_cflags "-force_cpusubtype_ALL"
1609         check_cflags "-Wno-sign-compare"
1610         enabled shared || check_cflags -mdynamic-no-pic
1611     fi
1612 fi
1613
1614 disabled optimizations || check_cflags -fomit-frame-pointer
1615
1616 # Add processor-specific flags
1617 if test $cpu != "generic"; then
1618     warn_altivec(){
1619         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1620     }
1621     case $cpu in
1622         601|ppc601|PowerPC601)
1623             add_cflags "-mcpu=601"
1624             warn_altivec enabled PPC601
1625         ;;
1626         603*|ppc603*|PowerPC603*)
1627             add_cflags "-mcpu=603"
1628             warn_altivec enabled PPC603
1629         ;;
1630         604*|ppc604*|PowerPC604*)
1631             add_cflags "-mcpu=604"
1632             warn_altivec enabled PPC604
1633         ;;
1634         G3|g3|75*|ppc75*|PowerPC75*)
1635             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1636             warn_altivec enabled PPC75x
1637         ;;
1638         G4|g4|745*|ppc745*|PowerPC745*)
1639             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1640             warn_altivec disabled PPC745x
1641         ;;
1642         74*|ppc74*|PowerPC74*)
1643             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1644             warn_altivec disabled PPC74xx
1645         ;;
1646         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1647             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1648             warn_altivec disabled PPC970
1649             enable ppc64
1650         ;;
1651         Cell|CELL|cell)
1652             add_cflags "-mcpu=cell"
1653             warn_altivec disabled Cell
1654             enable ppc64
1655         ;;
1656         # targets that do NOT support conditional mov (cmov)
1657         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1658             add_cflags "-march=$cpu"
1659             disable cmov
1660         ;;
1661         # targets that do support conditional mov (cmov)
1662         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1663             add_cflags "-march=$cpu"
1664             enable cmov
1665             enable fast_cmov
1666         ;;
1667         # targets that do support conditional mov but on which it's slow
1668         pentium4|pentium4m|prescott|nocona)
1669             add_cflags "-march=$cpu"
1670             enable cmov
1671             disable fast_cmov
1672         ;;
1673         sparc64)
1674             add_cflags "-mcpu=v9"
1675         ;;
1676         arm11*|cortex*)
1677             add_cflags "-mcpu=$cpu"
1678             enable fast_unaligned
1679         ;;
1680         armv*)
1681             add_cflags "-march=$cpu"
1682         ;;
1683         arm*)
1684             add_cflags "-mcpu=$cpu"
1685         ;;
1686         *)
1687             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1688         ;;
1689     esac
1690 fi
1691
1692 # make sure we can execute files in $TMPDIR
1693 cat > $TMPSH 2>> $logfile <<EOF
1694 #! /bin/sh
1695 EOF
1696 chmod +x $TMPSH >> $logfile 2>&1
1697 if ! $TMPSH >> $logfile 2>&1; then
1698     cat <<EOF
1699 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1700 variable to another directory and make sure that it is not mounted noexec.
1701 EOF
1702     die "Sanity test failed."
1703 fi
1704 rm $TMPSH
1705
1706 # compiler sanity check
1707 check_exec <<EOF
1708 int main(void){ return 0; }
1709 EOF
1710 if test "$?" != 0; then
1711     echo "$cc is unable to create an executable file."
1712     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1713         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1714         echo "Only do this if you know what cross compiling means."
1715     fi
1716     die "C compiler test failed."
1717 fi
1718
1719 check_cc <<EOF || die "Symbol mangling check failed."
1720 int ff_extern;
1721 EOF
1722 sym=$($nm -P -g $TMPO | grep ff_extern)
1723 extern_prefix=${sym%%ff_extern*}
1724
1725 check_asm inline_asm '""'
1726
1727 if enabled x86; then
1728     # check whether EBP is available on x86
1729     # As 'i' is stored on the stack, this program will crash
1730     # if the base pointer is used to access it because the
1731     # base pointer is cleared in the inline assembly code.
1732     check_exec_crash <<EOF && enable ebp_available
1733     volatile int i=0;
1734     __asm__ volatile (
1735         "xorl %%ebp, %%ebp"
1736     ::: "%ebp");
1737     return i;
1738 EOF
1739
1740     # check wether EBX is available on x86
1741     check_asm ebx_available '"":::"%ebx"'
1742
1743     # check whether binutils is new enough to compile SSSE3/MMX2
1744     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1745     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1746
1747     check_asm bswap '"bswap %%eax" ::: "%eax"'
1748
1749     YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1750     enabled     x86_64        && append YASMFLAGS "-m amd64"
1751     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1752     case "$objformat" in
1753         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1754         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1755         *)                    append YASMFLAGS "-DPREFIX"  ;;
1756     esac
1757     check_yasm "pabsw xmm0, xmm0" && enable yasm
1758 fi
1759
1760 # check for assembler specific support
1761
1762 if test $arch = "ppc"; then
1763     check_asm dcbzl '"dcbzl 0, 1"'
1764 fi
1765
1766 # check for SIMD availability
1767
1768 # AltiVec flags: The FSF version of GCC differs from the Apple version
1769 if enabled altivec; then
1770     check_cflags -maltivec -mabi=altivec &&
1771         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1772         check_cflags -faltivec
1773
1774     # check if our compiler supports Motorola AltiVec C API
1775     check_cc <<EOF || disable altivec
1776 $inc_altivec_h
1777 int main(void) {
1778     vector signed int v1, v2, v3;
1779     v1 = vec_add(v2,v3);
1780     return 0;
1781 }
1782 EOF
1783
1784     # check if our compiler supports braces for vector declarations
1785     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1786 $inc_altivec_h
1787 int main (void) { (vector int) {1}; return 0; }
1788 EOF
1789 fi
1790
1791 # We have to check if pld is a nop and disable it.
1792 enabled arm     && check_asm pld     '"pld [r0]"'
1793 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1794 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1795 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1796 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1797 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1798 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1799 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1800 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1801
1802 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1803
1804 # ---
1805 # big/little-endian test
1806 check_cc <<EOF || die "endian test failed"
1807 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1808 EOF
1809 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1810
1811 # ---
1812 # check availability of some header files
1813
1814 if check_func dlopen; then
1815     ldl=
1816 elif check_func dlopen -ldl; then
1817     ldl=-ldl
1818 fi
1819
1820 check_func  fork
1821 check_func  gethrtime
1822 check_func  getrusage
1823 check_func  inet_aton $network_extralibs
1824 check_func  memalign
1825 check_func  mkstemp
1826 check_func  posix_memalign
1827 check_func_headers windows.h GetProcessTimes
1828
1829 check_header conio.h
1830 check_header dlfcn.h
1831 check_header malloc.h
1832 check_header poll.h
1833 check_header sys/mman.h
1834 check_header sys/resource.h
1835 check_header sys/select.h
1836 check_header termios.h
1837 check_header vdpau/vdpau.h
1838 check_header vdpau/vdpau_x11.h
1839 check_header X11/extensions/XvMClib.h
1840
1841 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1842     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1843 fi
1844
1845 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1846 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1847
1848 # check for some common methods of building with pthread support
1849 # do this before the optional library checks as some of them require pthreads
1850 if enabled pthreads; then
1851     if check_func pthread_create; then
1852         :
1853     elif check_func pthread_create -pthread; then
1854         add_cflags -pthread
1855         add_extralibs -pthread
1856     elif check_func pthread_create -pthreads; then
1857         add_cflags -pthreads
1858         add_extralibs -pthreads
1859     elif check_func pthread_create -lpthreadGC2; then
1860         add_extralibs -lpthreadGC2
1861     elif ! check_lib pthread.h pthread_create -lpthread; then
1862         die "ERROR: can't find pthreads library"
1863     fi
1864 fi
1865
1866 for thread in $THREADS_LIST; do
1867     if enabled $thread; then
1868         test -n "$thread_type" &&
1869             die "ERROR: Only one thread type must be selected." ||
1870             thread_type="$thread"
1871     fi
1872 done
1873
1874 check_lib math.h sin -lm
1875
1876 # test for C99 functions in math.h
1877 for func in llrint lrint lrintf round roundf; do
1878     check_exec <<EOF && enable $func || disable $func
1879 #include <math.h>
1880 int main(void) { return ($func(3.999f) > 0)?0:1; }
1881 EOF
1882 done
1883
1884 # these are off by default, so fail if requested and not available
1885 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1886 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1887 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1888 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1889                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1890                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1891 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1892 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1893 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1894 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1895 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1896 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1897                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1898 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1899 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1900 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1901 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1902                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1903                         die "ERROR: libx264 version must be >= 0.65."; }
1904 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1905 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1906
1907 # libdc1394 check
1908 if enabled libdc1394; then
1909     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1910         enable libdc1394_2; } ||
1911     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1912         enable libdc1394_1; } ||
1913     die "ERROR: No version of libdc1394 found "
1914 fi
1915
1916
1917 _restrict=
1918 for restrict_keyword in restrict __restrict__ __restrict; do
1919     check_cc <<EOF && _restrict=$restrict_keyword && break
1920 void foo(char * $restrict_keyword p);
1921 EOF
1922 done
1923
1924 test "$vhook" = "default" && vhook="$dlopen"
1925
1926 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1927     disable vhook
1928     echo
1929     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1930     echo "Patches welcome."
1931     echo
1932 fi
1933
1934 if enabled vhook; then
1935     check_ldflags -rdynamic
1936     check_ldflags -export-dynamic
1937 fi
1938
1939 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1940 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1941
1942 ##########################################
1943 # SDL check
1944
1945 disable sdl_too_old
1946 disable sdl
1947 SDL_CONFIG="${cross_prefix}sdl-config"
1948 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1949     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1950     temp_cflags $sdl_cflags
1951     temp_extralibs `"${SDL_CONFIG}" --libs`
1952     if check_lib2 SDL.h SDL_Init; then
1953         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1954         if test "$_sdlversion" -lt 121 ; then
1955             enable sdl_too_old
1956         else
1957             enable sdl
1958             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1959 #include <SDL.h>
1960 int main(int argc, char **argv){
1961     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1962     int w = vi->current_w;
1963     return 0;
1964 }
1965 EOF
1966         fi
1967     fi
1968     restore_flags
1969 fi
1970
1971 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1972
1973 ##########################################
1974 # Network check
1975
1976 if enabled network; then
1977     check_type "sys/types.h sys/socket.h" socklen_t
1978     # Prefer arpa/inet.h over winsock2
1979     if check_header arpa/inet.h ; then
1980         check_func closesocket
1981     elif check_header winsock2.h ; then
1982         network_extralibs="-lws2_32"
1983         check_type ws2tcpip.h socklen_t
1984         check_func_headers winsock2.h closesocket
1985     fi
1986 fi
1987
1988 ##########################################
1989 # IPv6 check
1990
1991 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1992 #include <sys/types.h>
1993 #include <sys/socket.h>
1994 #include <netinet/in.h>
1995 #include <netdb.h>
1996 int main(void) {
1997     struct sockaddr_storage saddr;
1998     struct ipv6_mreq mreq6;
1999     getaddrinfo(0,0,0,0);
2000     getnameinfo(0,0,0,0,0,0,0);
2001     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2002 }
2003 EOF
2004
2005 check_header linux/videodev.h
2006 check_header linux/videodev2.h
2007 check_header sys/videoio.h
2008
2009 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2010
2011 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2012 { check_header dev/bktr/ioctl_meteor.h &&
2013   check_header dev/bktr/ioctl_bt848.h; } ||
2014 { check_header machine/ioctl_meteor.h &&
2015   check_header machine/ioctl_bt848.h; } ||
2016 { check_header dev/video/meteor/ioctl_meteor.h &&
2017   check_header dev/video/bktr/ioctl_bt848.h; } ||
2018 check_header dev/ic/bt8xx.h
2019
2020 check_header sys/soundcard.h
2021 check_header soundcard.h
2022
2023 # deal with the X11 frame grabber
2024 enabled x11grab                         &&
2025 check_header X11/Xlib.h                 &&
2026 check_header X11/extensions/XShm.h      &&
2027 check_func XOpenDisplay -lX11           &&
2028 check_func XShmCreateImage -lX11 -lXext
2029
2030 enabled debug && add_cflags -g"$debuglevel"
2031
2032 # add some useful compiler flags if supported
2033 check_cflags -Wdeclaration-after-statement
2034 check_cflags -Wall
2035 check_cflags -Wno-switch
2036 check_cflags -Wdisabled-optimization
2037 check_cflags -Wpointer-arith
2038 check_cflags -Wredundant-decls
2039 check_cflags -Wno-pointer-sign
2040 check_cflags -Wcast-qual
2041 check_cflags -Wwrite-strings
2042 check_cflags -Wtype-limits
2043 enabled extra_warnings && check_cflags -Winline
2044
2045 # add some linker flags
2046 check_ldflags -Wl,--warn-common
2047 check_ldflags -Wl,--as-needed
2048 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2049 check_ldflags -Wl,-Bsymbolic
2050
2051 if enabled small; then
2052     check_cflags -Os            # not all compilers support -Os
2053     optimizations="small"
2054 elif enabled optimizations; then
2055     if $cc -v 2>&1 | grep -q xlc; then
2056         add_cflags  "-O5"
2057         add_ldflags "-O5"
2058     else
2059         add_cflags "-O3"
2060     fi
2061 fi
2062 check_cflags -fno-math-errno
2063 check_cflags -fno-signed-zeros
2064
2065 # add some flags for Intel C Compiler
2066 if $cc --version 2> /dev/null | grep -q Intel; then
2067   # Just warnings, no remarks
2068   check_cflags -w1
2069   # -wd: Disable following warnings
2070   # 144, 167, 556: -Wno-pointer-sign
2071   # 10006: ignoring unknown option -fno-signed-zeros
2072   # 10156: ignoring option '-W'; no argument required
2073   check_cflags -wd144,167,556,10006,10156
2074   # 11030: Warning unknown option --as-needed
2075   # 10156: ignoring option '-export'; no argument required
2076   check_ldflags -wd10156,11030
2077   # Allow to compile with optimizations
2078   check_ldflags -march=$cpu
2079 fi
2080
2081 # PIC flags for shared library objects where they are needed
2082 if enabled shared; then
2083     # LIBOBJFLAGS may have already been set in the OS configuration
2084     if test -z "$LIBOBJFLAGS" ; then
2085         case "$arch" in
2086             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2087         esac
2088     fi
2089 fi
2090
2091 if enabled gprof; then
2092     add_cflags  "-p"
2093     add_ldflags "-p"
2094 fi
2095
2096 VHOOKCFLAGS="-fPIC"
2097
2098 # Find out if the .align argument is a power of two or not.
2099 check_asm asmalign_pot '".align 3"'
2100
2101 enabled_any $DECODER_LIST      && enable decoders
2102 enabled_any $ENCODER_LIST      && enable encoders
2103 enabled_any $BSF_LIST          && enable bsfs
2104 enabled_any $DEMUXER_LIST      && enable demuxers
2105 enabled_any $MUXER_LIST        && enable muxers
2106 enabled_any $FILTER_LIST       && enable filters
2107 enabled_any $INDEV_LIST        && enable demuxers
2108 enabled_any $OUTDEV_LIST       && enable muxers
2109 enabled_any $PROTOCOL_LIST     && enable protocols
2110
2111 enabled_any $THREADS_LIST      && enable threads
2112
2113 check_deps $CONFIG_LIST       \
2114            $CONFIG_EXTRA      \
2115            $HAVE_LIST         \
2116            $DECODER_LIST      \
2117            $ENCODER_LIST      \
2118            $PARSER_LIST       \
2119            $BSF_LIST          \
2120            $DEMUXER_LIST      \
2121            $MUXER_LIST        \
2122            $FILTER_LIST       \
2123            $INDEV_LIST        \
2124            $OUTDEV_LIST       \
2125            $PROTOCOL_LIST     \
2126
2127 echo "install prefix            $prefix"
2128 echo "source path               $source_path"
2129 echo "C compiler                $cc"
2130 echo ".align is power-of-two    $asmalign_pot"
2131 echo "ARCH                      $arch ($cpu)"
2132 if test "$build_suffix" != ""; then
2133     echo "build suffix              $build_suffix"
2134 fi
2135 if test "$extra_version" != ""; then
2136     echo "version string suffix     $extra_version"
2137 fi
2138 echo "big-endian                ${bigendian-no}"
2139 if test $arch = "x86_32" -o $arch = "x86_64"; then
2140     echo "yasm                      ${yasm-no}"
2141     echo "MMX enabled               ${mmx-no}"
2142     echo "SSE enabled               ${sse-no}"
2143     echo "CMOV enabled              ${cmov-no}"
2144     echo "CMOV is fast              ${fast_cmov-no}"
2145     echo "EBX available             ${ebx_available-no}"
2146     echo "EBP available             ${ebp_available-no}"
2147 fi
2148 if test $arch = "arm"; then
2149     echo "ARMv5TE enabled           ${armv5te-no}"
2150     echo "ARMv6 enabled             ${armv6-no}"
2151     echo "ARMv6T2 enabled           ${armv6t2-no}"
2152     echo "ARM VFP enabled           ${armvfp-no}"
2153     echo "IWMMXT enabled            ${iwmmxt-no}"
2154     echo "NEON enabled              ${neon-no}"
2155 fi
2156 if test $arch = "mips"; then
2157     echo "MMI enabled               ${mmi-no}"
2158 fi
2159 if test $arch = "ppc"; then
2160     echo "AltiVec enabled           ${altivec-no}"
2161     echo "dcbzl available           ${dcbzl-no}"
2162 fi
2163 echo "gprof enabled             ${gprof-no}"
2164 echo "debug symbols             ${debug-no}"
2165 echo "strip symbols             ${stripping-no}"
2166 echo "optimizations             ${optimizations-no}"
2167 echo "static                    ${static-no}"
2168 echo "shared                    ${shared-no}"
2169 echo "postprocessing support    ${postproc-no}"
2170 echo "software scaler enabled   ${swscale-no}"
2171 echo "new filter support        ${avfilter-no}"
2172 echo "filters using lavformat   ${avfilter_lavf-no}"
2173 echo "video hooking             ${vhook-no}"
2174 if enabled vhook; then
2175     echo "Imlib2 support            ${imlib2-no}"
2176     echo "FreeType support          ${freetype2-no}"
2177 fi
2178 echo "network support           ${network-no}"
2179 if enabled network; then
2180     echo "IPv6 support              ${ipv6-no}"
2181 fi
2182 echo "threading support         ${thread_type-no}"
2183 echo "SDL support               ${sdl-no}"
2184 if enabled sdl_too_old; then
2185     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2186 fi
2187 echo "Sun medialib support      ${mlib-no}"
2188 echo "AVISynth enabled          ${avisynth-no}"
2189 echo "libamr-nb support         ${libamr_nb-no}"
2190 echo "libamr-wb support         ${libamr_wb-no}"
2191 echo "libdc1394 support         ${libdc1394-no}"
2192 echo "libdirac enabled          ${libdirac-no}"
2193 echo "libfaac enabled           ${libfaac-no}"
2194 echo "libfaad enabled           ${libfaad-no}"
2195 echo "libfaad dlopened          ${libfaadbin-no}"
2196 echo "libgsm enabled            ${libgsm-no}"
2197 echo "libmp3lame enabled        ${libmp3lame-no}"
2198 echo "libnut enabled            ${libnut-no}"
2199 echo "libschroedinger enabled   ${libschroedinger-no}"
2200 echo "libspeex enabled          ${libspeex-no}"
2201 echo "libtheora enabled         ${libtheora-no}"
2202 echo "libvorbis enabled         ${libvorbis-no}"
2203 echo "libx264 enabled           ${libx264-no}"
2204 echo "libxvid enabled           ${libxvid-no}"
2205 echo "vdpau enabled             ${vdpau-no}"
2206 echo "zlib enabled              ${zlib-no}"
2207 echo "bzlib enabled             ${bzlib-no}"
2208 echo
2209
2210 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2211     echo "Enabled ${type}s:"
2212     eval list=\$$(toupper $type)_LIST
2213     for part in $list; do
2214         enabled $part && echo ${part%_*}
2215     done | sort | pr -3 -t
2216     echo
2217 done
2218
2219 license="LGPL"
2220 if enabled nonfree; then
2221     license="unredistributable"
2222 elif enabled gpl; then
2223     license="GPL"
2224 fi
2225
2226 echo "License: $license"
2227
2228 echo "Creating config.mak and config.h..."
2229
2230 echo "# Automatically generated by configure - do not modify!" > config.mak
2231 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2232 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2233 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2234 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2235
2236 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2237 echo "prefix=$prefix" >> config.mak
2238 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2239 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2240 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2241 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2242 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2243 echo "CC=$cc" >> config.mak
2244 echo "YASM=$yasmexe" >> config.mak
2245 echo "AR=$ar" >> config.mak
2246 echo "RANLIB=$ranlib" >> config.mak
2247 echo "LN_S=$ln_s" >> config.mak
2248 enabled stripping &&
2249     echo "STRIP=$strip" >> config.mak ||
2250     echo "STRIP=echo ignoring strip" >> config.mak
2251
2252 echo "OPTFLAGS=$CFLAGS" >> config.mak
2253 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2254 echo "LDFLAGS=$LDFLAGS" >> config.mak
2255 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2256 echo "SHFLAGS=$SHFLAGS" >> config.mak
2257 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2258 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2259 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2260 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2261 echo "BUILD_STATIC=$static" >> config.mak
2262 echo "BUILDSUF=$build_suffix" >> config.mak
2263 echo "FULLNAME=$FULLNAME" >> config.mak
2264 echo "LIBPREF=$LIBPREF" >> config.mak
2265 echo "LIBSUF=$LIBSUF" >> config.mak
2266 echo "LIBNAME=$LIBNAME" >> config.mak
2267 echo "SLIBPREF=$SLIBPREF" >> config.mak
2268 echo "SLIBSUF=$SLIBSUF" >> config.mak
2269 echo "EXESUF=$EXESUF" >> config.mak
2270 echo "EXTRA_VERSION=$extra_version" >> config.mak
2271 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2272 echo "HOSTCC=$host_cc" >> config.mak
2273 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2274 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2275 echo "HOSTLIBS=$host_libs" >> config.mak
2276 echo "TARGET_EXEC=$target_exec" >> config.mak
2277 echo "TARGET_PATH=$target_path" >> config.mak
2278
2279 if enabled bigendian; then
2280     echo "WORDS_BIGENDIAN=yes" >> config.mak
2281     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2282 fi
2283
2284 if enabled sdl; then
2285     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2286     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2287 fi
2288 if enabled texi2html; then
2289     echo "BUILD_DOC=yes" >> config.mak
2290 fi
2291
2292 get_version(){
2293     name=$1
2294     file=$source_path/$2
2295     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2296     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2297     lcname=$(tolower $name)
2298     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2299     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2300 }
2301
2302 get_version LIBSWSCALE  libswscale/swscale.h
2303 get_version LIBPOSTPROC libpostproc/postprocess.h
2304 get_version LIBAVCODEC  libavcodec/avcodec.h
2305 get_version LIBAVDEVICE libavdevice/avdevice.h
2306 get_version LIBAVFORMAT libavformat/avformat.h
2307 get_version LIBAVUTIL   libavutil/avutil.h
2308 get_version LIBAVFILTER libavfilter/avfilter.h
2309
2310 if enabled shared; then
2311     echo "BUILD_SHARED=yes" >> config.mak
2312     echo "PIC=-fPIC -DPIC" >> config.mak
2313     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2314     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2315     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2316     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2317     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2318     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2319     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2320     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2321 fi
2322 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2323 echo "EXTRALIBS=$extralibs" >> config.mak
2324
2325 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2326 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2327 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2328                                       $CONFIG_EXTRA      \
2329                                       $DECODER_LIST      \
2330                                       $ENCODER_LIST      \
2331                                       $PARSER_LIST       \
2332                                       $BSF_LIST          \
2333                                       $DEMUXER_LIST      \
2334                                       $MUXER_LIST        \
2335                                       $FILTER_LIST       \
2336                                       $PROTOCOL_LIST     \
2337                                       $INDEV_LIST        \
2338                                       $OUTDEV_LIST       \
2339
2340 echo "#define restrict $_restrict" >> $TMPH
2341
2342 if enabled small; then
2343     echo "#define av_always_inline"  >> $TMPH
2344 fi
2345
2346 echo "SRC_PATH=\"$source_path\"" >> config.mak
2347 echo "SRC_PATH_BARE=$source_path" >> config.mak
2348 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2349
2350 # Apparently it's not possible to portably echo a backslash.
2351 enabled asmalign_pot &&
2352     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2353     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2354
2355 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2356
2357 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2358
2359 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2360 cmp -s $TMPH config.h &&
2361     echo "config.h is unchanged" ||
2362     mv -f $TMPH config.h
2363
2364 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2365
2366 # build tree in object directory if source path is different from current one
2367 if enabled source_path_used; then
2368     DIRS="\
2369         doc               \
2370         libavcodec        \
2371         libavcodec/alpha  \
2372         libavcodec/arm    \
2373         libavcodec/bfin   \
2374         libavcodec/mlib   \
2375         libavcodec/ppc    \
2376         libavcodec/sh4    \
2377         libavcodec/sparc  \
2378         libavcodec/x86    \
2379         libavdevice       \
2380         libavfilter       \
2381         libavformat       \
2382         libavutil         \
2383         libpostproc       \
2384         libswscale        \
2385         tests             \
2386         tools             \
2387         vhook             \
2388         "
2389     FILES="\
2390         Makefile             \
2391         common.mak           \
2392         subdir.mak           \
2393         doc/texi2pod.pl      \
2394         libavcodec/Makefile  \
2395         libavdevice/Makefile \
2396         libavfilter/Makefile \
2397         libavformat/Makefile \
2398         libavutil/Makefile   \
2399         libpostproc/Makefile \
2400         libswscale/Makefile  \
2401         "
2402     for dir in $DIRS ; do
2403         mkdir -p $dir
2404     done
2405     for f in $FILES ; do
2406         $ln_s "$source_path/$f" $f
2407     done
2408 fi
2409
2410
2411 # build pkg-config files
2412
2413 pkgconfig_generate(){
2414 name=$1
2415 shortname=${name#lib}${build_suffix}
2416 comment=$2
2417 version=$3
2418 libs=$4
2419 requires=$5
2420 cat <<EOF > $name/$name.pc
2421 prefix=$prefix
2422 exec_prefix=\${prefix}
2423 libdir=$libdir
2424 includedir=$incdir
2425
2426 Name: $name
2427 Description: $comment
2428 Version: $version
2429 Requires: $(disabled shared && echo $requires)
2430 Requires.private: $(enabled shared && echo $requires)
2431 Conflicts:
2432 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2433 Libs.private: $(enabled shared && echo $libs)
2434 Cflags: -I\${includedir}
2435 EOF
2436 cat <<EOF > $name/$name-uninstalled.pc
2437 prefix=
2438 exec_prefix=
2439 libdir=\${pcfiledir}
2440 includedir=${source_path}
2441
2442 Name: $name
2443 Description: $comment
2444 Version: $version
2445 Requires: $requires
2446 Conflicts:
2447 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2448 Cflags: -I\${includedir}
2449 EOF
2450 }
2451
2452 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2453 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2454 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2455 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2456 enabled avfilter &&
2457     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2458 enabled postproc &&
2459     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2460 if enabled swscale; then
2461     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2462 else
2463     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2464     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2465 fi