94cf3687d9dad671321222f383f85fbb57c10b3e
[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 rdft 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 http_protocol_select="tcp_protocol"
1398 rtmp_protocol_deps="tcp_protocol"
1399 rtp_protocol_deps="udp_protocol"
1400 tcp_protocol_deps="network"
1401 udp_protocol_deps="network"
1402
1403 # filters
1404 movie_filter_deps="avfilter_lavf"
1405 avfilter_lavf_deps="avformat"
1406
1407 # libraries
1408 avdevice_deps="avcodec avformat"
1409 avformat_deps="avcodec"
1410
1411 # programs
1412 ffmpeg_deps="avcodec avformat swscale"
1413 ffplay_deps="avcodec avformat swscale sdl"
1414 ffplay_select="rdft"
1415 ffprobe_deps="avcodec avformat"
1416 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1417 ffserver_extralibs='$ldl'
1418
1419 doc_deps="texi2html"
1420
1421 # default parameters
1422
1423 logfile="config.err"
1424
1425 # installation paths
1426 prefix_default="/usr/local"
1427 bindir_default='${prefix}/bin'
1428 datadir_default='${prefix}/share/ffmpeg'
1429 incdir_default='${prefix}/include'
1430 libdir_default='${prefix}/lib'
1431 mandir_default='${prefix}/share/man'
1432 shlibdir_default="$libdir_default"
1433
1434 # toolchain
1435 ar="ar"
1436 cc_default="gcc"
1437 cc_version=\"unknown\"
1438 host_cc_default="gcc"
1439 ln_s="ln -sf"
1440 nm_default="nm"
1441 objformat="elf"
1442 ranlib="ranlib"
1443 strip_default="strip"
1444 yasmexe="yasm"
1445
1446 nm_opts='-g'
1447
1448 # machine
1449 arch_default=$(uname -m)
1450 cpu="generic"
1451
1452 # OS
1453 target_os_default=$(tolower $(uname -s))
1454 host_os=$target_os_default
1455
1456 # configurable options
1457 enable avcodec
1458 enable avdevice
1459 enable avformat
1460 enable avutil
1461 enable asm
1462 enable debug
1463 enable doc
1464 enable fastdiv
1465 enable ffmpeg
1466 enable ffplay
1467 enable ffprobe
1468 enable ffserver
1469 enable mpegaudio_hp
1470 enable network
1471 enable optimizations
1472 enable protocols
1473 enable static
1474 enable stripping
1475 enable swscale
1476 enable swscale_alpha
1477
1478 # build settings
1479 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1480 FFSERVERLDFLAGS=-Wl,-E
1481 LIBPREF="lib"
1482 LIBSUF=".a"
1483 FULLNAME='$(NAME)$(BUILDSUF)'
1484 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1485 SLIBPREF="lib"
1486 SLIBSUF=".so"
1487 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1488 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1489 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1490 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1491
1492 CC_O='-o $@'
1493
1494 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1495 host_libs='-lm'
1496
1497 target_path='$(CURDIR)'
1498
1499 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1500 # full relative path for objects in subdirectories for non-recursive Make.
1501 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1502 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1503
1504 # find source path
1505 source_path="$(dirname "$0")"
1506 enable source_path_used
1507 if test -f configure; then
1508 source_path="$(pwd)"
1509 disable source_path_used
1510 else
1511 source_path="$(cd "$source_path"; pwd)"
1512 echo "$source_path" | grep -q '[[:blank:]]' &&
1513 die "Out of tree builds are impossible with whitespace in source path."
1514 test -e "$source_path/config.h" &&
1515 die "Out of tree builds are impossible with config.h in source dir."
1516 fi
1517
1518 for v in "$@"; do
1519 r=${v#*=}
1520 l=${v%"$r"}
1521 r=$(sh_quote "$r")
1522 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1523 done
1524
1525 find_things(){
1526 thing=$1
1527 pattern=$2
1528 file=$source_path/$3
1529 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1530 }
1531
1532 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1533 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1534 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1535 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1536 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1537 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1538 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1539 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1540 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1541 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1542 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1543
1544 enable $ARCH_EXT_LIST \
1545 $DECODER_LIST \
1546 $ENCODER_LIST \
1547 $HWACCEL_LIST \
1548 $PARSER_LIST \
1549 $BSF_LIST \
1550 $DEMUXER_LIST \
1551 $MUXER_LIST \
1552 $FILTER_LIST \
1553 $PROTOCOL_LIST \
1554 $INDEV_LIST \
1555 $OUTDEV_LIST \
1556
1557 die_unknown(){
1558 echo "Unknown option \"$1\"."
1559 echo "See $0 --help for available options."
1560 exit 1
1561 }
1562
1563 show_list() {
1564 suffix=_$1
1565 shift
1566 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1567 exit 0
1568 }
1569
1570 for opt do
1571 optval="${opt#*=}"
1572 case "$opt" in
1573 --extra-ldflags=*) add_ldflags $optval
1574 ;;
1575 --extra-libs=*) add_extralibs $optval
1576 ;;
1577 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1578 ;;
1579 --enable-debug=*) debuglevel="$optval"
1580 ;;
1581 --enable-*=*|--disable-*=*)
1582 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1583 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1584 eval list=\$$(toupper $thing)_LIST
1585 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1586 $action $(filter "$name" $list)
1587 ;;
1588 --enable-?*|--disable-?*)
1589 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1590 if is_in $option $COMPONENT_LIST; then
1591 test $action = disable && action=unset
1592 eval $action \$$(toupper ${option%s})_LIST
1593 elif is_in $option $CMDLINE_SELECT; then
1594 $action $option
1595 else
1596 die_unknown $opt
1597 fi
1598 ;;
1599 --list-*)
1600 NAME="${opt#--list-}"
1601 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1602 NAME=${NAME%s}
1603 eval show_list $NAME \$$(toupper $NAME)_LIST
1604 ;;
1605 --help|-h) show_help
1606 ;;
1607 *)
1608 optname="${opt%%=*}"
1609 optname="${optname#--}"
1610 optname=$(echo "$optname" | sed 's/-/_/g')
1611 if is_in $optname $CMDLINE_SET; then
1612 eval $optname='$optval'
1613 elif is_in $optname $CMDLINE_APPEND; then
1614 append $optname "$optval"
1615 else
1616 die_unknown $opt
1617 fi
1618 ;;
1619 esac
1620 done
1621
1622 disabled logging && logfile=/dev/null
1623
1624 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1625 set >> $logfile
1626
1627 test -n "$cross_prefix" && enable cross_compile
1628
1629 if enabled cross_compile; then
1630 test -n "$arch" && test -n "$target_os" ||
1631 die "Must specify target arch and OS when cross-compiling"
1632 fi
1633
1634 set_default arch target_os
1635
1636 ar="${cross_prefix}${ar}"
1637 cc_default="${cross_prefix}${cc_default}"
1638 nm_default="${cross_prefix}${nm_default}"
1639 ranlib="${cross_prefix}${ranlib}"
1640 strip_default="${cross_prefix}${strip_default}"
1641
1642 sysinclude_default="${sysroot}/usr/include"
1643
1644 set_default cc nm strip sysinclude
1645 enabled cross_compile || host_cc_default=$cc
1646 set_default host_cc
1647
1648 exesuf() {
1649 case $1 in
1650 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1651 esac
1652 }
1653
1654 EXESUF=$(exesuf $target_os)
1655 HOSTEXESUF=$(exesuf $host_os)
1656
1657 # set temporary file name
1658 : ${TMPDIR:=$TEMPDIR}
1659 : ${TMPDIR:=$TMP}
1660 : ${TMPDIR:=/tmp}
1661
1662 if ! check_cmd type mktemp; then
1663 # simple replacement for missing mktemp
1664 # NOT SAFE FOR GENERAL USE
1665 mktemp(){
1666 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1667 }
1668 fi
1669
1670 tmpfile(){
1671 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1672 (set -C; exec > $tmp) 2>/dev/null ||
1673 die "Unable to create temporary file in $TMPDIR."
1674 append TMPFILES $tmp
1675 eval $1=$tmp
1676 }
1677
1678 trap 'rm -f -- $TMPFILES' EXIT
1679 trap exit HUP INT TERM
1680
1681 tmpfile TMPC .c
1682 tmpfile TMPE $EXESUF
1683 tmpfile TMPH .h
1684 tmpfile TMPO .o
1685 tmpfile TMPS .S
1686 tmpfile TMPV .ver
1687 tmpfile TMPSH .sh
1688
1689 unset -f mktemp
1690
1691 # make sure we can execute files in $TMPDIR
1692 cat > $TMPSH 2>> $logfile <<EOF
1693 #! /bin/sh
1694 EOF
1695 chmod +x $TMPSH >> $logfile 2>&1
1696 if ! $TMPSH >> $logfile 2>&1; then
1697 cat <<EOF
1698 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1699 variable to another directory and make sure that it is not mounted noexec.
1700 EOF
1701 die "Sanity test failed."
1702 fi
1703
1704 filter_cflags=echo
1705 filter_cppflags=echo
1706 filter_asflags=echo
1707
1708 if $cc -v 2>&1 | grep -qi ^gcc; then
1709 cc_type=gcc
1710 cc_version=__VERSION__
1711 if ! $cc -dumpversion | grep -q '^2\.'; then
1712 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1713 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1714 fi
1715 speed_cflags='-O3'
1716 size_cflags='-Os'
1717 elif $cc --version 2>/dev/null | grep -q Intel; then
1718 cc_type=icc
1719 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1720 CC_DEPFLAGS='-MMD'
1721 AS_DEPFLAGS='-MMD'
1722 speed_cflags='-O3'
1723 size_cflags='-Os'
1724 elif $cc -v 2>&1 | grep -q xlc; then
1725 cc_type=xlc
1726 cc_version="AV_STRINGIFY(__IBMC__)"
1727 speed_cflags='-O5'
1728 size_cflags='-O5 -qcompact'
1729 elif $cc -V 2>/dev/null | grep -q Compaq; then
1730 cc_type=ccc
1731 cc_version="AV_STRINGIFY(__DECC_VER)"
1732 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1733 debuglevel=3
1734 add_ldflags -Wl,-z,now # calls to libots crash without this
1735 speed_cflags='-fast'
1736 size_cflags='-O1'
1737 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1738 test -d "$sysroot" || die "No valid sysroot specified."
1739 cc_type=armcc
1740 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1741 armcc_conf="$PWD/armcc.conf"
1742 $cc --arm_linux_configure \
1743 --arm_linux_config_file="$armcc_conf" \
1744 --configure_sysroot="$sysroot" \
1745 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1746 die "Error creating armcc configuration file."
1747 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1748 as_default="${cross_prefix}gcc"
1749 CC_DEPFLAGS='-MMD'
1750 AS_DEPFLAGS='-MMD'
1751 speed_cflags='-O3'
1752 size_cflags='-Os'
1753 elif $cc -version 2>/dev/null | grep -q TMS470; then
1754 cc_type=tms470
1755 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1756 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1757 CC_O='-fr=$(@D)'
1758 as_default="${cross_prefix}gcc"
1759 ld_default="${cross_prefix}gcc"
1760 TMPO=$(basename $TMPC .c).o
1761 append TMPFILES $TMPO
1762 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1763 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1764 AS_DEPFLAGS='-MMD'
1765 speed_cflags='-O3 -mf=5'
1766 size_cflags='-O3 -mf=2'
1767 filter_cflags=tms470_flags
1768 tms470_flags(){
1769 for flag; do
1770 case $flag in
1771 -march=*|-mcpu=*)
1772 case "${flag#*=}" in
1773 armv7-a|cortex-a*) echo -mv=7a8 ;;
1774 armv7-r|cortex-r*) echo -mv=7r4 ;;
1775 armv7-m|cortex-m*) echo -mv=7m3 ;;
1776 armv6*|arm11*) echo -mv=6 ;;
1777 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1778 echo -mv=5e ;;
1779 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1780 esac
1781 ;;
1782 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1783 -mfpu=vfp) echo --float_support=vfpv2 ;;
1784 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
1785 -msoft-float) echo --float_support=vfplib ;;
1786 -O[0-3]|-mf=*) echo $flag ;;
1787 -g) echo -g -mn ;;
1788 -pds=*) echo $flag ;;
1789 esac
1790 done
1791 }
1792 elif $cc -v 2>&1 | grep -q clang; then
1793 cc_type=clang
1794 cc_version=__VERSION__
1795 CC_DEPFLAGS='-MMD'
1796 AS_DEPFLAGS='-MMD'
1797 speed_cflags='-O3'
1798 size_cflags='-Os'
1799 elif $cc -V 2>&1 | grep -q Sun; then
1800 cc_type=suncc
1801 cc_version="AV_STRINGIFY(__SUNPRO_C)"
1802 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1803 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1804 speed_cflags='-O5'
1805 size_cflags='-O5 -xspace'
1806 filter_cflags=suncc_flags
1807 suncc_flags(){
1808 for flag; do
1809 case $flag in
1810 -march=*|-mcpu=*)
1811 case "${flag#*=}" in
1812 native) echo -xtarget=native ;;
1813 v9) echo -xarch=sparc ;;
1814 ultrasparc) echo -xarch=sparcvis ;;
1815 ultrasparc3|niagara*) echo -xarch=sparcvis2 ;;
1816 i586|pentium) echo -xchip=pentium ;;
1817 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1818 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1819 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1820 pentium4*) echo -xtarget=pentium4 ;;
1821 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1822 *-sse3) echo -xarch=sse3 ;;
1823 core2) echo -xarch=ssse3 -xchip=core2 ;;
1824 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1825 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1826 k8|opteron|athlon64|athlon-fx)
1827 echo -xarch=sse2a ;;
1828 athlon*) echo -xarch=pentium_proa ;;
1829 esac
1830 ;;
1831 -std=c99) echo -xc99 ;;
1832 -fomit-frame-pointer) echo -xregs=frameptr ;;
1833 -fPIC) echo -KPIC -xcode=pic32 ;;
1834 -W*,*) echo $flag ;;
1835 -f*-*|-W*) ;;
1836 *) echo $flag ;;
1837 esac
1838 done
1839 }
1840 fi
1841
1842 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1843
1844 : ${as_default:=$cc}
1845 : ${dep_cc_default:=$cc}
1846 : ${ld_default:=$cc}
1847 set_default as dep_cc ld
1848
1849 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1850 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1851
1852 add_cflags $extra_cflags
1853 add_asflags $extra_cflags
1854
1855 if test -n "$sysroot"; then
1856 case "$cc_type" in
1857 gcc)
1858 add_cppflags --sysroot="$sysroot"
1859 add_ldflags --sysroot="$sysroot"
1860 ;;
1861 tms470)
1862 add_cppflags -I"$sysinclude"
1863 add_ldflags --sysroot="$sysroot"
1864 ;;
1865 clang)
1866 add_cppflags -isysroot "$sysroot"
1867 add_ldflags -isysroot "$sysroot"
1868 ;;
1869 esac
1870 fi
1871
1872 if test "$cpu" = host; then
1873 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1874
1875 case "$cc_type" in
1876 gcc)
1877 check_native(){
1878 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1879 sed -n "/$1=/{
1880 s/.*$1=\\([^ ]*\\).*/\\1/
1881 p
1882 q
1883 }" $TMPE
1884 }
1885 cpu=$(check_native -march || check_native -mcpu)
1886 ;;
1887 esac
1888
1889 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1890 fi
1891
1892 # Deal with common $arch aliases
1893 case "$arch" in
1894 arm*)
1895 arch="arm"
1896 ;;
1897 mips|mipsel|IP*)
1898 arch="mips"
1899 ;;
1900 mips64*)
1901 arch="mips"
1902 subarch="mips64"
1903 ;;
1904 parisc|hppa)
1905 arch="parisc"
1906 ;;
1907 parisc64|hppa64)
1908 arch="parisc"
1909 subarch="parisc64"
1910 ;;
1911 "Power Macintosh"|ppc|powerpc)
1912 arch="ppc"
1913 ;;
1914 ppc64|powerpc64)
1915 arch="ppc"
1916 subarch="ppc64"
1917 ;;
1918 s390|s390x)
1919 arch="s390"
1920 ;;
1921 sh4|sh)
1922 arch="sh4"
1923 ;;
1924 sun4u|sparc64)
1925 arch="sparc"
1926 subarch="sparc64"
1927 ;;
1928 i[3-6]86|i86pc|BePC|x86_64|amd64)
1929 arch="x86"
1930 ;;
1931 esac
1932
1933 is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1934 enable $arch
1935
1936 # Add processor-specific flags
1937 if test "$cpu" = generic; then
1938 : do nothing
1939 elif enabled ppc; then
1940
1941 case $(tolower $cpu) in
1942 601|ppc601|powerpc601)
1943 cpuflags="-mcpu=601"
1944 disable altivec
1945 ;;
1946 603*|ppc603*|powerpc603*)
1947 cpuflags="-mcpu=603"
1948 disable altivec
1949 ;;
1950 604*|ppc604*|powerpc604*)
1951 cpuflags="-mcpu=604"
1952 disable altivec
1953 ;;
1954 g3|75*|ppc75*|powerpc75*)
1955 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1956 disable altivec
1957 ;;
1958 g4|745*|ppc745*|powerpc745*)
1959 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1960 ;;
1961 74*|ppc74*|powerpc74*)
1962 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1963 ;;
1964 g5|970|ppc970|powerpc970|power4*)
1965 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1966 ;;
1967 cell)
1968 cpuflags="-mcpu=cell"
1969 enable ldbrx
1970 ;;
1971 e500v2)
1972 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1973 disable altivec
1974 ;;
1975 e500)
1976 cpuflags="-mcpu=8540 -mhard-float"
1977 disable altivec
1978 ;;
1979 esac
1980
1981 elif enabled x86; then
1982
1983 case $cpu in
1984 i[345]86|pentium)
1985 cpuflags="-march=$cpu"
1986 disable mmx
1987 ;;
1988 # targets that do NOT support conditional mov (cmov)
1989 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1990 cpuflags="-march=$cpu"
1991 disable cmov
1992 ;;
1993 # targets that do support conditional mov (cmov)
1994 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1995 cpuflags="-march=$cpu"
1996 enable cmov
1997 enable fast_cmov
1998 ;;
1999 # targets that do support conditional mov but on which it's slow
2000 pentium4|pentium4m|prescott|nocona)
2001 cpuflags="-march=$cpu"
2002 enable cmov
2003 disable fast_cmov
2004 ;;
2005 esac
2006
2007 elif enabled sparc; then
2008
2009 case $cpu in
2010 sparc64)
2011 cpuflags="-mcpu=v9"
2012 ;;
2013 esac
2014
2015 elif enabled arm; then
2016
2017 case $cpu in
2018 armv*)
2019 cpuflags="-march=$cpu"
2020 ;;
2021 *)
2022 cpuflags="-mcpu=$cpu"
2023 ;;
2024 esac
2025
2026 elif enabled alpha; then
2027
2028 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2029
2030 elif enabled bfin; then
2031
2032 cpuflags="-mcpu=$cpu"
2033
2034 elif enabled mips; then
2035
2036 cpuflags="-march=$cpu"
2037
2038 elif enabled avr32; then
2039
2040 case $cpu in
2041 ap7[02]0[0-2])
2042 subarch="avr32_ap"
2043 cpuflags="-mpart=$cpu"
2044 ;;
2045 ap)
2046 subarch="avr32_ap"
2047 cpuflags="-march=$cpu"
2048 ;;
2049 uc3[ab]*)
2050 subarch="avr32_uc"
2051 cpuflags="-mcpu=$cpu"
2052 ;;
2053 uc)
2054 subarch="avr32_uc"
2055 cpuflags="-march=$cpu"
2056 ;;
2057 esac
2058
2059 fi
2060
2061 add_cflags $cpuflags
2062 add_asflags $cpuflags
2063
2064 # compiler sanity check
2065 check_exec <<EOF
2066 int main(void){ return 0; }
2067 EOF
2068 if test "$?" != 0; then
2069 echo "$cc is unable to create an executable file."
2070 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2071 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2072 echo "Only do this if you know what cross compiling means."
2073 fi
2074 die "C compiler test failed."
2075 fi
2076
2077 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2078 check_cflags -std=c99
2079 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2080 #include <stdlib.h>
2081 EOF
2082 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2083 #include <stdlib.h>
2084 EOF
2085
2086 check_host_cflags -std=c99
2087
2088 case "$arch" in
2089 alpha|ia64|mips|parisc|sparc)
2090 spic=$shared
2091 ;;
2092 x86)
2093 subarch="x86_32"
2094 check_cc <<EOF && subarch="x86_64"
2095 int test[(int)sizeof(char*) - 7];
2096 EOF
2097 if test "$subarch" = "x86_64"; then
2098 spic=$shared
2099 fi
2100 ;;
2101 esac
2102
2103 enable $subarch
2104 enabled spic && enable pic
2105 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2106
2107 # OS specific
2108 case $target_os in
2109 beos|haiku|zeta)
2110 prefix_default="$HOME/config"
2111 # 3 gcc releases known for BeOS, each with ugly bugs
2112 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
2113 case "$gcc_version" in
2114 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
2115 disable mmx
2116 ;;
2117 *20010315*) echo "BeBits gcc"
2118 add_cflags -fno-expensive-optimizations
2119 ;;
2120 esac
2121 SHFLAGS=-nostart
2122 # enable BeOS things
2123 enable audio_beos
2124 # no need for libm, but the inet stuff
2125 # Check for BONE
2126 # XXX: actually should check for NOT net_server
2127 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
2128 network_extralibs="-lbind -lsocket"
2129 else
2130 enable beos_netserver
2131 network_extralibs="-lnet"
2132 fi ;;
2133 sunos)
2134 FFSERVERLDFLAGS=""
2135 SHFLAGS='-shared -Wl,-h,$$(@F)'
2136 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2137 network_extralibs="-lsocket -lnsl"
2138 add_cppflags -D__EXTENSIONS__
2139 nm_opts='-P -g'
2140 ;;
2141 netbsd)
2142 oss_indev_extralibs="-lossaudio"
2143 oss_outdev_extralibs="-lossaudio"
2144 ;;
2145 openbsd)
2146 enable malloc_aligned
2147 # On OpenBSD 4.5. the compiler does not use PIC unless
2148 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2149 # however the generated executable will not do anything
2150 # (simply quits with exit-code 1, no crash, no output).
2151 # Thus explicitly enable PIC here.
2152 enable pic
2153 SHFLAGS='-shared'
2154 oss_indev_extralibs="-lossaudio"
2155 oss_outdev_extralibs="-lossaudio"
2156 ;;
2157 freebsd|dragonfly)
2158 enable malloc_aligned
2159 ;;
2160 bsd/os)
2161 osextralibs="-lpoll -lgnugetopt"
2162 strip="strip -d"
2163 ;;
2164 darwin)
2165 enable malloc_aligned
2166 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2167 strip="strip -x"
2168 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2169 SLIBSUF=".dylib"
2170 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2171 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2172 FFSERVERLDFLAGS=-Wl,-bind_at_load
2173 objformat="macho"
2174 enabled x86_64 && objformat="macho64"
2175 enabled_any pic shared ||
2176 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2177 ;;
2178 mingw32*)
2179 if test $target_os = "mingw32ce"; then
2180 disable network
2181 else
2182 target_os=mingw32
2183 fi
2184 LIBTARGET=i386
2185 if enabled x86_64; then
2186 enable malloc_aligned
2187 LIBTARGET=x64
2188 elif enabled arm; then
2189 LIBTARGET=arm
2190 fi
2191 shlibdir_default="$bindir_default"
2192 disable ffserver
2193 SLIBPREF=""
2194 SLIBSUF=".dll"
2195 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2196 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2197 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2198 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2199 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2200 install -d "$(LIBDIR)"; \
2201 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2202 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2203 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'
2204 objformat="win32"
2205 enable dos_paths
2206 check_cflags -fno-common
2207 if ! enabled x86_64; then
2208 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2209 die "ERROR: MinGW runtime version must be >= 3.15."
2210 enabled_any avisynth vfwcap_indev &&
2211 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2212 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2213 fi
2214 ;;
2215 cygwin*)
2216 target_os=cygwin
2217 shlibdir_default="$bindir_default"
2218 SLIBPREF="cyg"
2219 SLIBSUF=".dll"
2220 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2221 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2222 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2223 objformat="win32"
2224 enable dos_paths
2225 check_cflags -fno-common
2226 ;;
2227 *-dos|freedos|opendos)
2228 disable ffplay ffserver
2229 disable $INDEV_LIST $OUTDEV_LIST
2230 network_extralibs="-lsocket"
2231 objformat="coff"
2232 enable dos_paths
2233 ;;
2234 linux)
2235 enable dv1394
2236 ;;
2237 irix*)
2238 target_os=irix
2239 ranlib="echo ignoring ranlib"
2240 ;;
2241 os/2*)
2242 strip="lxlite"
2243 ln_s="cp -f"
2244 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2245 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2246 FFSERVERLDFLAGS=""
2247 LIBSUF="_s.a"
2248 SLIBPREF=""
2249 SLIBSUF=".dll"
2250 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2251 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2252 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2253 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2254 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2255 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2256 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2257 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2258 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2259 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2260 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2261 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2262 enable dos_paths
2263 ;;
2264 gnu/kfreebsd)
2265 ;;
2266 gnu)
2267 ;;
2268 none)
2269 ;;
2270 *)
2271 die "Unknown OS '$target_os'."
2272 ;;
2273 esac
2274
2275 set_default $PATHS_LIST
2276
2277 add_extralibs $osextralibs
2278
2279 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2280 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2281
2282 # we need to build at least one lib type
2283 if ! enabled_any static shared; then
2284 cat <<EOF
2285 At least one library type must be built.
2286 Specify --enable-static to build the static libraries or --enable-shared to
2287 build the shared libraries as well. To only build the shared libraries specify
2288 --disable-static in addition to --enable-shared.
2289 EOF
2290 exit 1;
2291 fi
2292
2293 disabled static && LIBNAME=""
2294
2295 if enabled_any libfaad libfaadbin ; then
2296 if check_header faad.h; then
2297 check_cc <<EOF
2298 #include <faad.h>
2299 #ifndef FAAD2_VERSION
2300 ok faad1
2301 #endif
2302 int main(void) { return 0; }
2303 EOF
2304 test $? = 0 && enable libfaad2
2305 else
2306 die "FAAD test failed."
2307 fi
2308 fi
2309
2310
2311 die_license_disabled() {
2312 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2313 }
2314
2315 die_license_disabled gpl libfaad2
2316 die_license_disabled gpl libx264
2317 die_license_disabled gpl libxvid
2318 die_license_disabled gpl postproc
2319 die_license_disabled gpl x11grab
2320
2321 die_license_disabled nonfree libfaac
2322
2323 die_license_disabled version3 libopencore_amrnb
2324 die_license_disabled version3 libopencore_amrwb
2325
2326 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2327
2328 check_deps $ARCH_EXT_LIST
2329
2330 disabled optimizations || check_cflags -fomit-frame-pointer
2331
2332 enable_pic() {
2333 enable pic
2334 add_cppflags -DPIC
2335 add_cflags -fPIC
2336 add_asflags -fPIC
2337 }
2338
2339 enabled pic && enable_pic
2340
2341 check_cc <<EOF || die "Symbol mangling check failed."
2342 int ff_extern;
2343 EOF
2344 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2345 extern_prefix=${sym%%ff_extern*}
2346
2347 check_cc <<EOF && enable inline_asm
2348 void foo(void) { __asm__ volatile ("" ::); }
2349 EOF
2350
2351 _restrict=
2352 for restrict_keyword in restrict __restrict__ __restrict; do
2353 check_cc <<EOF && _restrict=$restrict_keyword && break
2354 void foo(char * $restrict_keyword p);
2355 EOF
2356 done
2357
2358 check_cc <<EOF && enable attribute_packed
2359 struct { int x; } __attribute__((packed)) x;
2360 EOF
2361
2362 check_cc <<EOF && enable attribute_may_alias
2363 union { int x; } __attribute__((may_alias)) x;
2364 EOF
2365
2366 check_cc <<EOF || die "endian test failed"
2367 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2368 EOF
2369 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2370
2371 if enabled alpha; then
2372
2373 check_cflags -mieee
2374
2375 elif enabled arm; then
2376
2377 check_cflags -marm
2378
2379 check_ld <<EOF && enable vfp_args
2380 __asm__ (".eabi_attribute 28, 1");
2381 int main(void) { return 0; }
2382 EOF
2383
2384 # We have to check if pld is a nop and disable it.
2385 check_asm pld '"pld [r0]"'
2386
2387 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2388 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2389 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2390 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2391 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2392 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2393
2394 enabled_all armv6t2 shared !pic && enable_pic
2395
2396 elif enabled ia64; then
2397
2398 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2399 enabled shared && enable_weak hardcoded_tables
2400
2401 elif enabled mips; then
2402
2403 check_asm loongson '"dmult.g $1, $2, $3"'
2404 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2405
2406 elif enabled ppc; then
2407
2408 enable local_aligned_8 local_aligned_16
2409
2410 check_asm dcbzl '"dcbzl 0, 1"'
2411 check_asm ppc4xx '"maclhw r10, r11, r12"'
2412 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2413
2414 # AltiVec flags: The FSF version of GCC differs from the Apple version
2415 if enabled altivec; then
2416 check_cflags -maltivec -mabi=altivec &&
2417 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2418 check_cflags -faltivec
2419
2420 # check if our compiler supports Motorola AltiVec C API
2421 check_cc <<EOF || disable altivec
2422 $inc_altivec_h
2423 int main(void) {
2424 vector signed int v1, v2, v3;
2425 v1 = vec_add(v2,v3);
2426 return 0;
2427 }
2428 EOF
2429
2430 # check if our compiler supports braces for vector declarations
2431 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2432 $inc_altivec_h
2433 int main (void) { (vector int) {1}; return 0; }
2434 EOF
2435 fi
2436
2437 elif enabled sparc; then
2438
2439 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2440 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2441
2442 elif enabled x86; then
2443
2444 enable local_aligned_8 local_aligned_16
2445
2446 # check whether EBP is available on x86
2447 # As 'i' is stored on the stack, this program will crash
2448 # if the base pointer is used to access it because the
2449 # base pointer is cleared in the inline assembly code.
2450 check_exec_crash <<EOF && enable ebp_available
2451 volatile int i=0;
2452 __asm__ volatile (
2453 "xorl %%ebp, %%ebp"
2454 ::: "%ebp");
2455 return i;
2456 EOF
2457
2458 # check whether EBX is available on x86
2459 check_asm ebx_available '""::"b"(0)' &&
2460 check_asm ebx_available '"":::"%ebx"'
2461
2462 # check whether more than 10 operands are supported
2463 check_cc <<EOF && enable ten_operands
2464 int main(void) {
2465 int x=0;
2466 __asm__ volatile(
2467 ""
2468 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2469 );
2470 return 0;
2471 }
2472 EOF
2473
2474 # check whether binutils is new enough to compile SSSE3/MMX2
2475 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2476 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2477
2478 check_asm bswap '"bswap %%eax" ::: "%eax"'
2479
2480 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2481 enabled x86_64 && append YASMFLAGS "-m amd64"
2482 enabled pic && append YASMFLAGS "-DPIC"
2483 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2484 case "$objformat" in
2485 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2486 esac
2487 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2488
2489 case "$cpu" in
2490 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2491 disable fast_clz
2492 ;;
2493 esac
2494
2495 fi
2496
2497 if check_func dlopen; then
2498 ldl=
2499 elif check_func dlopen -ldl; then
2500 ldl=-ldl
2501 fi
2502
2503 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2504 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2505
2506 check_func fork
2507 check_func getaddrinfo $network_extralibs
2508 check_func gethrtime
2509 check_func getrusage
2510 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2511 check_func inet_aton $network_extralibs
2512 check_func isatty
2513 check_func ${malloc_prefix}memalign && enable memalign
2514 check_func mkstemp
2515 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
2516 check_func setrlimit
2517 check_func_headers io.h setmode
2518 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2519 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2520 check_func_headers windows.h GetProcessTimes
2521 check_func_headers windows.h VirtualAlloc
2522
2523 check_header conio.h
2524 check_header dlfcn.h
2525 check_header dxva2api.h
2526 check_header malloc.h
2527 check_header poll.h
2528 check_header sys/mman.h
2529 check_header sys/resource.h
2530 check_header sys/select.h
2531 check_header termios.h
2532 check_header vdpau/vdpau.h
2533 check_header vdpau/vdpau_x11.h
2534 check_header X11/extensions/XvMClib.h
2535
2536 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2537
2538 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2539 enabled_any $need_memalign ; then
2540 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2541 fi
2542
2543 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2544 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2545
2546 # check for some common methods of building with pthread support
2547 # do this before the optional library checks as some of them require pthreads
2548 if enabled pthreads; then
2549 if check_func pthread_create; then
2550 :
2551 elif check_func pthread_create -pthread; then
2552 add_cflags -pthread
2553 add_extralibs -pthread
2554 elif check_func pthread_create -pthreads; then
2555 add_cflags -pthreads
2556 add_extralibs -pthreads
2557 elif check_func pthread_create -lpthreadGC2; then
2558 add_extralibs -lpthreadGC2
2559 elif ! check_lib pthread.h pthread_create -lpthread; then
2560 die "ERROR: can't find pthreads library"
2561 fi
2562 fi
2563
2564 for thread in $THREADS_LIST; do
2565 if enabled $thread; then
2566 test -n "$thread_type" &&
2567 die "ERROR: Only one thread type must be selected." ||
2568 thread_type="$thread"
2569 fi
2570 done
2571
2572 check_lib math.h sin -lm
2573 check_lib va/va.h vaInitialize -lva
2574
2575 check_mathfunc exp2
2576 check_mathfunc exp2f
2577 check_mathfunc llrint
2578 check_mathfunc log2
2579 check_mathfunc log2f
2580 check_mathfunc lrint
2581 check_mathfunc lrintf
2582 check_mathfunc round
2583 check_mathfunc roundf
2584 check_mathfunc truncf
2585
2586 # these are off by default, so fail if requested and not available
2587 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2588 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2589 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2590 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2591 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2592 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2593 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
2594 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2595 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2596 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2597 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2598 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2599 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2600 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2601 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2602 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2603 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2604 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
2605 { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2606 die "ERROR: libx264 version must be >= 0.83."; }
2607 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2608 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2609
2610 # libdc1394 check
2611 if enabled libdc1394; then
2612 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2613 enable libdc1394_2; } ||
2614 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2615 enable libdc1394_1; } ||
2616 die "ERROR: No version of libdc1394 found "
2617 fi
2618
2619 SDL_CONFIG="${cross_prefix}sdl-config"
2620 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2621 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2622 sdl_libs=$("${SDL_CONFIG}" --libs)
2623 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2624 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2625 enable sdl &&
2626 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2627 fi
2628
2629 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2630
2631 if enabled network; then
2632 check_type "sys/types.h sys/socket.h" socklen_t
2633 check_type netdb.h "struct addrinfo"
2634 check_type netinet/in.h "struct ipv6_mreq"
2635 check_type netinet/in.h "struct sockaddr_in6"
2636 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2637 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2638 # Prefer arpa/inet.h over winsock2
2639 if check_header arpa/inet.h ; then
2640 check_func closesocket
2641 elif check_header winsock2.h ; then
2642 check_func_headers winsock2.h closesocket -lws2 && \
2643 network_extralibs="-lws2" || \
2644 { check_func_headers winsock2.h closesocket -lws2_32 && \
2645 network_extralibs="-lws2_32"; }
2646 check_type ws2tcpip.h socklen_t
2647 check_type ws2tcpip.h "struct addrinfo"
2648 check_type ws2tcpip.h "struct ipv6_mreq"
2649 check_type ws2tcpip.h "struct sockaddr_in6"
2650 check_type ws2tcpip.h "struct sockaddr_storage"
2651 check_struct winsock2.h "struct sockaddr" sa_len
2652 else
2653 disable network
2654 fi
2655 fi
2656
2657 check_header linux/videodev.h
2658 check_header linux/videodev2.h
2659 check_header sys/videoio.h
2660
2661 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2662
2663 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2664 { check_header dev/bktr/ioctl_meteor.h &&
2665 check_header dev/bktr/ioctl_bt848.h; } ||
2666 { check_header machine/ioctl_meteor.h &&
2667 check_header machine/ioctl_bt848.h; } ||
2668 { check_header dev/video/meteor/ioctl_meteor.h &&
2669 check_header dev/video/bktr/ioctl_bt848.h; } ||
2670 check_header dev/ic/bt8xx.h
2671
2672 check_header sys/soundcard.h
2673 check_header soundcard.h
2674
2675 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2676
2677 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2678
2679 enabled x11grab &&
2680 check_header X11/Xlib.h &&
2681 check_header X11/extensions/XShm.h &&
2682 check_header X11/extensions/Xfixes.h &&
2683 check_func XOpenDisplay -lX11 &&
2684 check_func XShmCreateImage -lX11 -lXext &&
2685 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2686
2687 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2688 check_cpp_condition \
2689 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2690 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2691 disable vdpau; }
2692 fi
2693
2694 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2695
2696 # add some useful compiler flags if supported
2697 check_cflags -Wdeclaration-after-statement
2698 check_cflags -Wall
2699 check_cflags -Wno-switch
2700 check_cflags -Wdisabled-optimization
2701 check_cflags -Wpointer-arith
2702 check_cflags -Wredundant-decls
2703 check_cflags -Wno-pointer-sign
2704 check_cflags -Wcast-qual
2705 check_cflags -Wwrite-strings
2706 check_cflags -Wtype-limits
2707 check_cflags -Wundef
2708 check_cflags -Wmissing-prototypes
2709 enabled extra_warnings && check_cflags -Winline
2710
2711 # add some linker flags
2712 check_ldflags -Wl,--warn-common
2713 check_ldflags -Wl,--as-needed
2714 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'
2715 check_ldflags -Wl,-Bsymbolic
2716
2717 echo "X{};" > $TMPV
2718 test_ldflags -Wl,--version-script,$TMPV &&
2719 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2720
2721 if enabled small; then
2722 add_cflags $size_cflags
2723 optimizations="small"
2724 elif enabled optimizations; then
2725 add_cflags $speed_cflags
2726 fi
2727 check_cflags -fno-math-errno
2728 check_cflags -fno-signed-zeros
2729
2730 if enabled icc; then
2731 # Just warnings, no remarks
2732 check_cflags -w1
2733 # -wd: Disable following warnings
2734 # 144, 167, 556: -Wno-pointer-sign
2735 # 10006: ignoring unknown option -fno-signed-zeros
2736 # 10156: ignoring option '-W'; no argument required
2737 check_cflags -wd144,167,556,10006,10156
2738 # 11030: Warning unknown option --as-needed
2739 # 10156: ignoring option '-export'; no argument required
2740 check_ldflags -wd10156,11030
2741 # Allow to compile with optimizations
2742 check_ldflags -march=$cpu
2743 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2744 enable ebp_available
2745 elif enabled ccc; then
2746 # disable some annoying warnings
2747 add_cflags -msg_disable cvtu32to64
2748 add_cflags -msg_disable embedcomment
2749 add_cflags -msg_disable needconstext
2750 add_cflags -msg_disable nomainieee
2751 add_cflags -msg_disable ptrmismatch1
2752 add_cflags -msg_disable unreachcode
2753 elif enabled gcc; then
2754 check_cflags -fno-tree-vectorize
2755 check_cflags -Werror=implicit
2756 check_cflags -Werror=missing-prototypes
2757 elif enabled clang; then
2758 check_cflags -Qunused-arguments
2759 elif enabled armcc; then
2760 # 2523: use of inline assembler is deprecated
2761 add_cflags -Wrvct,--diag_suppress=2523
2762 add_cflags -Wrvct,--diag_suppress=1207
2763 elif enabled tms470; then
2764 add_cflags -pds=824 -pds=837
2765 fi
2766
2767 if enabled gprof; then
2768 add_cflags -p
2769 add_ldflags -p
2770 fi
2771
2772 # Find out if the .align argument is a power of two or not.
2773 check_asm asmalign_pot '".align 3"'
2774
2775 enabled_any $DECODER_LIST && enable decoders
2776 enabled_any $ENCODER_LIST && enable encoders
2777 enabled_any $HWACCEL_LIST && enable hwaccels
2778 enabled_any $BSF_LIST && enable bsfs
2779 enabled_any $DEMUXER_LIST && enable demuxers
2780 enabled_any $MUXER_LIST && enable muxers
2781 enabled_any $FILTER_LIST && enable filters
2782 enabled_any $INDEV_LIST && enable indevs
2783 enabled_any $OUTDEV_LIST && enable outdevs
2784 enabled_any $PROTOCOL_LIST && enable protocols
2785
2786 enabled_any $THREADS_LIST && enable threads
2787
2788 check_deps $CONFIG_LIST \
2789 $CONFIG_EXTRA \
2790 $HAVE_LIST \
2791 $DECODER_LIST \
2792 $ENCODER_LIST \
2793 $HWACCEL_LIST \
2794 $PARSER_LIST \
2795 $BSF_LIST \
2796 $DEMUXER_LIST \
2797 $MUXER_LIST \
2798 $FILTER_LIST \
2799 $INDEV_LIST \
2800 $OUTDEV_LIST \
2801 $PROTOCOL_LIST \
2802
2803 enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2804
2805 echo "install prefix $prefix"
2806 echo "source path $source_path"
2807 echo "C compiler $cc"
2808 echo ".align is power-of-two $asmalign_pot"
2809 echo "ARCH $arch ($cpu)"
2810 if test "$build_suffix" != ""; then
2811 echo "build suffix $build_suffix"
2812 fi
2813 if test "$extra_version" != ""; then
2814 echo "version string suffix $extra_version"
2815 fi
2816 echo "big-endian ${bigendian-no}"
2817 echo "runtime cpu detection ${runtime_cpudetect-no}"
2818 if enabled x86; then
2819 echo "yasm ${yasm-no}"
2820 echo "MMX enabled ${mmx-no}"
2821 echo "MMX2 enabled ${mmx2-no}"
2822 echo "3DNow! enabled ${amd3dnow-no}"
2823 echo "3DNow! extended enabled ${amd3dnowext-no}"
2824 echo "SSE enabled ${sse-no}"
2825 echo "SSSE3 enabled ${ssse3-no}"
2826 echo "CMOV enabled ${cmov-no}"
2827 echo "CMOV is fast ${fast_cmov-no}"
2828 echo "EBX available ${ebx_available-no}"
2829 echo "EBP available ${ebp_available-no}"
2830 echo "10 operands supported ${ten_operands-no}"
2831 fi
2832 if enabled arm; then
2833 echo "ARMv5TE enabled ${armv5te-no}"
2834 echo "ARMv6 enabled ${armv6-no}"
2835 echo "ARMv6T2 enabled ${armv6t2-no}"
2836 echo "ARM VFP enabled ${armvfp-no}"
2837 echo "IWMMXT enabled ${iwmmxt-no}"
2838 echo "NEON enabled ${neon-no}"
2839 fi
2840 if enabled mips; then
2841 echo "MMI enabled ${mmi-no}"
2842 fi
2843 if enabled ppc; then
2844 echo "AltiVec enabled ${altivec-no}"
2845 echo "PPC 4xx optimizations ${ppc4xx-no}"
2846 echo "dcbzl available ${dcbzl-no}"
2847 echo "performance report ${powerpc_perf-no}"
2848 fi
2849 if enabled sparc; then
2850 echo "VIS enabled ${vis-no}"
2851 fi
2852 echo "gprof enabled ${gprof-no}"
2853 echo "debug symbols ${debug-no}"
2854 echo "strip symbols ${stripping-no}"
2855 echo "optimizations ${optimizations-no}"
2856 echo "static ${static-no}"
2857 echo "shared ${shared-no}"
2858 echo "postprocessing support ${postproc-no}"
2859 echo "new filter support ${avfilter-no}"
2860 echo "filters using lavformat ${avfilter_lavf-no}"
2861 echo "network support ${network-no}"
2862 echo "threading support ${thread_type-no}"
2863 echo "SDL support ${sdl-no}"
2864 echo "Sun medialib support ${mlib-no}"
2865 echo "AVISynth enabled ${avisynth-no}"
2866 echo "libdc1394 support ${libdc1394-no}"
2867 echo "libdirac enabled ${libdirac-no}"
2868 echo "libfaac enabled ${libfaac-no}"
2869 echo "libfaad enabled ${libfaad-no}"
2870 echo "libfaad dlopened ${libfaadbin-no}"
2871 echo "libgsm enabled ${libgsm-no}"
2872 echo "libmp3lame enabled ${libmp3lame-no}"
2873 echo "libnut enabled ${libnut-no}"
2874 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2875 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2876 echo "libopenjpeg enabled ${libopenjpeg-no}"
2877 echo "libschroedinger enabled ${libschroedinger-no}"
2878 echo "libspeex enabled ${libspeex-no}"
2879 echo "libtheora enabled ${libtheora-no}"
2880 echo "libvorbis enabled ${libvorbis-no}"
2881 echo "libx264 enabled ${libx264-no}"
2882 echo "libxvid enabled ${libxvid-no}"
2883 echo "zlib enabled ${zlib-no}"
2884 echo "bzlib enabled ${bzlib-no}"
2885 echo
2886
2887 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2888 echo "Enabled ${type}s:"
2889 eval list=\$$(toupper $type)_LIST
2890 for part in $list; do
2891 enabled $part && echo ${part%_*}
2892 done | sort | pr -3 -t
2893 echo
2894 done
2895
2896 license="LGPL version 2.1 or later"
2897 if enabled nonfree; then
2898 license="nonfree and unredistributable"
2899 elif enabled gplv3; then
2900 license="GPL version 3 or later"
2901 elif enabled lgplv3; then
2902 license="LGPL version 3 or later"
2903 elif enabled gpl; then
2904 license="GPL version 2 or later"
2905 fi
2906
2907 echo "License: $license"
2908
2909 echo "Creating config.mak and config.h..."
2910
2911 # build tree in object directory if source path is different from current one
2912 if enabled source_path_used; then
2913 DIRS="
2914 doc
2915 libavcodec
2916 libavcodec/$arch
2917 libavdevice
2918 libavfilter
2919 libavformat
2920 libavutil
2921 libavutil/$arch
2922 libpostproc
2923 libswscale
2924 libswscale/$arch
2925 tests
2926 tools
2927 "
2928 FILES="
2929 Makefile
2930 common.mak
2931 subdir.mak
2932 doc/texi2pod.pl
2933 libavcodec/Makefile
2934 libavdevice/Makefile
2935 libavfilter/Makefile
2936 libavformat/Makefile
2937 libavutil/Makefile
2938 libpostproc/Makefile
2939 libswscale/Makefile
2940 "
2941 for dir in $DIRS ; do
2942 mkdir -p $dir
2943 done
2944 for f in $FILES ; do
2945 $ln_s "$source_path/$f" $f
2946 done
2947 fi
2948
2949 enabled stripping || strip="echo skipping strip"
2950
2951 cat > config.mak <<EOF
2952 # Automatically generated by configure - do not modify!
2953 ifndef FFMPEG_CONFIG_MAK
2954 FFMPEG_CONFIG_MAK=1
2955 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2956 prefix=$prefix
2957 LIBDIR=\$(DESTDIR)$libdir
2958 SHLIBDIR=\$(DESTDIR)$shlibdir
2959 INCDIR=\$(DESTDIR)$incdir
2960 BINDIR=\$(DESTDIR)$bindir
2961 DATADIR=\$(DESTDIR)$datadir
2962 MANDIR=\$(DESTDIR)$mandir
2963 SRC_PATH="$source_path"
2964 SRC_PATH_BARE=$source_path
2965 BUILD_ROOT="$PWD"
2966 ARCH=$arch
2967 CC=$cc
2968 AS=$as
2969 LD=$ld
2970 DEPCC=$dep_cc
2971 YASM=$yasmexe
2972 YASMDEP=$yasmexe
2973 AR=$ar
2974 RANLIB=$ranlib
2975 CP=cp -p
2976 LN_S=$ln_s
2977 STRIP=$strip
2978 CPPFLAGS=$CPPFLAGS
2979 CFLAGS=$CFLAGS
2980 ASFLAGS=$ASFLAGS
2981 CC_O=$CC_O
2982 LDFLAGS=$LDFLAGS
2983 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2984 SHFLAGS=$SHFLAGS
2985 YASMFLAGS=$YASMFLAGS
2986 BUILDSUF=$build_suffix
2987 FULLNAME=$FULLNAME
2988 LIBPREF=$LIBPREF
2989 LIBSUF=$LIBSUF
2990 LIBNAME=$LIBNAME
2991 SLIBPREF=$SLIBPREF
2992 SLIBSUF=$SLIBSUF
2993 EXESUF=$EXESUF
2994 EXTRA_VERSION=$extra_version
2995 DEPFLAGS=$DEPFLAGS
2996 CCDEP=$CCDEP
2997 ASDEP=$ASDEP
2998 CC_DEPFLAGS=$CC_DEPFLAGS
2999 AS_DEPFLAGS=$AS_DEPFLAGS
3000 HOSTCC=$host_cc
3001 HOSTCFLAGS=$host_cflags
3002 HOSTEXESUF=$HOSTEXESUF
3003 HOSTLDFLAGS=$host_ldflags
3004 HOSTLIBS=$host_libs
3005 TARGET_EXEC=$target_exec
3006 TARGET_PATH=$target_path
3007 SDL_LIBS=$sdl_libs
3008 SDL_CFLAGS=$sdl_cflags
3009 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3010 EXTRALIBS=$extralibs
3011 INSTALL=install
3012 LIBTARGET=${LIBTARGET}
3013 SLIBNAME=${SLIBNAME}
3014 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3015 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3016 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3017 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3018 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3019 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3020 EOF
3021
3022 get_version(){
3023 name=$1
3024 file=$source_path/$2
3025 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3026 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3027 lcname=$(tolower $name)
3028 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3029 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3030 }
3031
3032 get_version LIBSWSCALE libswscale/swscale.h
3033 get_version LIBPOSTPROC libpostproc/postprocess.h
3034 get_version LIBAVCODEC libavcodec/avcodec.h
3035 get_version LIBAVDEVICE libavdevice/avdevice.h
3036 get_version LIBAVFORMAT libavformat/avformat.h
3037 get_version LIBAVUTIL libavutil/avutil.h
3038 get_version LIBAVFILTER libavfilter/avfilter.h
3039
3040 enabled asmalign_pot || align_shift="1 <<"
3041
3042 cat > $TMPH <<EOF
3043 /* Automatically generated by configure - do not modify! */
3044 #ifndef FFMPEG_CONFIG_H
3045 #define FFMPEG_CONFIG_H
3046 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3047 #define FFMPEG_LICENSE "$(c_escape $license)"
3048 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3049 #define CC_TYPE "$cc_type"
3050 #define CC_VERSION $cc_version
3051 #define restrict $_restrict
3052 #define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3053 #define EXTERN_PREFIX "${extern_prefix}"
3054 #define EXTERN_ASM ${extern_prefix}
3055 EOF
3056
3057 test -n "$malloc_prefix" &&
3058 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3059
3060 if enabled small || disabled optimizations; then
3061 echo "#undef av_always_inline" >> $TMPH
3062 echo "#define av_always_inline" >> $TMPH
3063 fi
3064
3065 print_config ARCH_ $TMPH config.mak $ARCH_LIST
3066 print_config HAVE_ $TMPH config.mak $HAVE_LIST
3067 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
3068 $CONFIG_EXTRA \
3069 $DECODER_LIST \
3070 $ENCODER_LIST \
3071 $HWACCEL_LIST \
3072 $PARSER_LIST \
3073 $BSF_LIST \
3074 $DEMUXER_LIST \
3075 $MUXER_LIST \
3076 $FILTER_LIST \
3077 $PROTOCOL_LIST \
3078 $INDEV_LIST \
3079 $OUTDEV_LIST \
3080
3081 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3082 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3083
3084 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3085 cp_if_changed $TMPH config.h
3086
3087 cat > $TMPH <<EOF
3088 /* Generated by ffconf */
3089 #ifndef AVUTIL_AVCONFIG_H
3090 #define AVUTIL_AVCONFIG_H
3091 EOF
3092
3093 print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3094
3095 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3096
3097 cp_if_changed $TMPH libavutil/avconfig.h
3098
3099 # build pkg-config files
3100
3101 pkgconfig_generate(){
3102 name=$1
3103 shortname=${name#lib}${build_suffix}
3104 comment=$2
3105 version=$3
3106 libs=$4
3107 requires=$5
3108 cat <<EOF > $name/$name.pc
3109 prefix=$prefix
3110 exec_prefix=\${prefix}
3111 libdir=$libdir
3112 includedir=$incdir
3113
3114 Name: $name
3115 Description: $comment
3116 Version: $version
3117 Requires: $(enabled shared || echo $requires)
3118 Requires.private: $(enabled shared && echo $requires)
3119 Conflicts:
3120 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3121 Libs.private: $(enabled shared && echo $libs)
3122 Cflags: -I\${includedir}
3123 EOF
3124 cat <<EOF > $name/$name-uninstalled.pc
3125 prefix=
3126 exec_prefix=
3127 libdir=\${pcfiledir}
3128 includedir=${source_path}
3129
3130 Name: $name
3131 Description: $comment
3132 Version: $version
3133 Requires: $requires
3134 Conflicts:
3135 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3136 Cflags: -I\${includedir}
3137 EOF
3138 }
3139
3140 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3141 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3142 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3143 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3144 enabled avfilter &&
3145 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3146 enabled postproc &&
3147 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3148 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"