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