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