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