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