Rename RUNTIME_CPUDETECT to CONFIG_RUNTIME_CPUDETECT and always define it.
[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"
80ff8a16
OG
1115jack_demuxer_deps="jack_jack_h"
1116jack_demuxer_extralibs="-ljack"
f7b8bffe 1117libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
1118libnut_demuxer_deps="libnut"
1119libnut_muxer_deps="libnut"
2eef7c62
AJ
1120matroska_demuxer_suggest="zlib bzlib"
1121mov_demuxer_suggest="zlib"
4bd8e17c 1122mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
1123oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1124oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 1125redir_demuxer_deps="network"
8eb793c4 1126rtp_muxer_deps="network rtp_protocol"
95c21842
LA
1127rtsp_demuxer_deps="sdp_demuxer"
1128sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 1129v4l_demuxer_deps="linux_videodev_h"
1b6e8b73 1130v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
c2345207
RP
1131vfwcap_demuxer_deps="capCreateCaptureWindow"
1132vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 1133x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 1134x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 1135
912f3148 1136# protocols
3fff6382 1137gopher_protocol_deps="network"
c08fb000
AB
1138http_protocol_deps="network"
1139rtp_protocol_deps="udp_protocol"
1140tcp_protocol_deps="network"
1141udp_protocol_deps="network"
1142
f7679c54 1143# filters
81124ba0 1144movie_filter_deps="avfilter_lavf"
f7679c54 1145
912f3148 1146# programs
fa859b4d 1147ffplay_deps="sdl"
6ad42348 1148ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1149ffserver_extralibs='$ldl'
a2830dca 1150
912f3148 1151
de6d9b64 1152# default parameters
8a608357 1153
2ba042a7 1154logfile="config.err"
8a608357
MR
1155
1156# installation paths
c9d19248
MR
1157prefix_default="/usr/local"
1158bindir_default='${prefix}/bin'
14a8acf1 1159datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1160incdir_default='${prefix}/include'
1161libdir_default='${prefix}/lib'
1162mandir_default='${prefix}/share/man'
1163shlibdir_default="$libdir_default"
8a608357
MR
1164
1165# toolchain
11e6d03a 1166ar="ar"
13c7df3d 1167cc_default="gcc"
9da6609f 1168host_cc_default="gcc"
11e6d03a 1169ln_s="ln -sf"
89641463 1170nm_default="nm"
11e6d03a 1171objformat="elf"
be7109c1 1172ranlib="ranlib"
0f3cb305 1173strip="strip"
11e6d03a 1174yasmexe="yasm"
8a608357
MR
1175
1176# machine
5e622c40 1177arch=$(uname -m)
38d0a8aa 1178cpu="generic"
8a608357 1179
8a608357 1180# OS
4f854758 1181target_os=$(tolower $(uname -s))
82bb3329 1182host_os=$target_os
8a608357 1183
8a608357 1184# configurable options
497237c7 1185enable debug
aa033b1e 1186enable fastdiv
497237c7
RP
1187enable ffmpeg
1188enable ffplay
1189enable ffserver
1190enable ipv6
497237c7
RP
1191enable mpegaudio_hp
1192enable network
8400d6b8 1193enable optimizations
497237c7 1194enable protocols
530dc538 1195enable static
87a0fb62 1196enable stripping
a9ddb5b1 1197enable swscale_alpha
8a608357 1198
8a608357 1199# build settings
11a9d3e8 1200add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
9987769a 1201SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1202FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1203LIBPREF="lib"
1204LIBSUF=".a"
c5f14466
RP
1205FULLNAME='$(NAME)$(BUILDSUF)'
1206LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1207SLIBPREF="lib"
1208SLIBSUF=".so"
c5f14466 1209SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1210SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1211SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1212LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1213
9da6609f
MR
1214host_cflags='-O3 -g -Wall'
1215host_libs='-lm'
1216
a7ada2ba
MR
1217target_path='.'
1218
0d7dca36
DB
1219# gcc stupidly only outputs the basename of targets with -MM, but we need the
1220# full relative path for objects in subdirectories for non-recursive Make.
333d5374 1221DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
315c741d 1222
c597172e 1223# find source path
5e622c40 1224source_path="$(dirname "$0")"
497237c7 1225enable source_path_used
c597172e 1226if test -z "$source_path" -o "$source_path" = "." ; then
5e622c40 1227 source_path="$(pwd)"
497237c7 1228 disable source_path_used
c597172e 1229else
5e622c40 1230 source_path="$(cd "$source_path"; pwd)"
c597172e 1231 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1232 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1233 test -e "$source_path/config.h" &&
1234 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1235fi
1236
13cbe2c0
MR
1237for v in "$@"; do
1238 r="${v#*=}"
1239 l="${v%$r}"
1240 test "$r" = "${r#* }" || r="'$r'"
1241 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1242done
c597172e 1243
73ef8980
MR
1244find_things(){
1245 thing=$1
1246 pattern=$2
1247 file=$source_path/$3
932ccf39 1248 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1249}
1250
1251ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1252DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1253HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1254PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1255BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1256MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1257DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1258OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1259INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1260PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1261FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1262
7483e694
DB
1263enable $ARCH_EXT_LIST \
1264 $DECODER_LIST \
1265 $ENCODER_LIST \
5666fd73 1266 $HWACCEL_LIST \
7483e694
DB
1267 $PARSER_LIST \
1268 $BSF_LIST \
1269 $DEMUXER_LIST \
1270 $MUXER_LIST \
f7679c54 1271 $FILTER_LIST \
7483e694
DB
1272 $PROTOCOL_LIST \
1273 $INDEV_LIST \
1274 $OUTDEV_LIST \
c597172e
MR
1275
1276die_unknown(){
1277 echo "Unknown option \"$1\"."
1278 echo "See $0 --help for available options."
1279 exit 1
1280}
1281
794f8e97 1282show_list() {
bf0c4afa
RP
1283 suffix=_$1
1284 shift
1285 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1286 exit 0
1287}
1288
c597172e 1289for opt do
7483e694
DB
1290 optval="${opt#*=}"
1291 case "$opt" in
0f010b2f 1292 --extra-cflags=*) add_cflags $optval
7483e694 1293 ;;
0f010b2f 1294 --extra-ldflags=*) add_ldflags $optval
7483e694 1295 ;;
0f010b2f 1296 --extra-libs=*) add_extralibs $optval
7483e694 1297 ;;
8fb1cb58 1298 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1299 ;;
40bcf4c7
BL
1300 --enable-debug=*) debuglevel="$optval"
1301 ;;
7483e694 1302 --enable-*=*|--disable-*=*)
5e622c40 1303 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
7483e694 1304 case "$thing" in
5666fd73 1305 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1306 *) die_unknown "$opt" ;;
1307 esac
1308 ;;
1309 --enable-?*|--disable-?*)
5e622c40 1310 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55
MR
1311 if is_in $option $COMPONENT_LIST; then
1312 eval $action \$$(toupper ${option%s})_LIST
1313 elif is_in $option $CMDLINE_SELECT; then
1314 $action $option
1315 else
1316 die_unknown $opt
1317 fi
7483e694
DB
1318 ;;
1319 --list-*)
1320 NAME="${opt#--list-}"
1321 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1322 NAME=${NAME%s}
1323 eval show_list $NAME \$$(toupper $NAME)_LIST
1324 ;;
1325 --help|-h) show_help
1326 ;;
1327 *)
884a36a7 1328 optname="${opt%%=*}"
26759c44
MR
1329 optname="${optname#--}"
1330 optname=$(echo "$optname" | sed 's/-/_/g')
1331 is_in $optname $CMDLINE_SET || die_unknown $opt
1332 eval $optname='$optval'
7483e694
DB
1333 ;;
1334 esac
c597172e
MR
1335done
1336
bcea99bb
MR
1337disabled logging && logfile=/dev/null
1338
13cbe2c0 1339echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1340set >> $logfile
1341
9da6609f
MR
1342test -n "$cross_prefix" && enable cross_compile
1343
adb2b908 1344ar="${cross_prefix}${ar}"
11e6d03a 1345cc_default="${cross_prefix}${cc_default}"
20e0ed95 1346nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1347ranlib="${cross_prefix}${ranlib}"
1348strip="${cross_prefix}${strip}"
1349
c5200f17
MR
1350sysinclude_default="${sysroot}/usr/include"
1351
75800dce
MR
1352set_default cc nm sysinclude
1353as_default=$cc
9da6609f
MR
1354enabled cross_compile || host_cc_default=$cc
1355set_default host_cc
13c7df3d 1356
82bb3329
MR
1357exesuf() {
1358 case $1 in
1359 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1360 esac
1361}
1362
1363EXESUF=$(exesuf $target_os)
1364HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1365
e4e69e0b 1366# set temporary file name
a49d42c2 1367: ${TMPDIR:=$TEMPDIR}
c51fafa1 1368: ${TMPDIR:=$TMP}
a49d42c2 1369: ${TMPDIR:=/tmp}
e4e69e0b 1370
54460a83
MR
1371if ! check_cmd type mktemp; then
1372 # simple replacement for missing mktemp
1373 # NOT SAFE FOR GENERAL USE
1374 mktemp(){
1375 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1376 }
1377fi
1378
1379tmpfile(){
1380 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1381 (set -C; exec > $tmp) 2>/dev/null ||
1382 die "Unable to create temoporary file in $TMPDIR."
1383 append TMPFILES $tmp
1384 eval $1=$tmp
1385}
1386
1387trap 'rm -f -- $TMPFILES' EXIT
1388trap exit HUP INT TERM
1389
1390tmpfile TMPC .c
1391tmpfile TMPE $EXESUF
1392tmpfile TMPH .h
1393tmpfile TMPO .o
1394tmpfile TMPS .S
1395tmpfile TMPSH .sh
1396
1397unset -f mktemp
e4e69e0b 1398
993f2d0f
MR
1399# make sure we can execute files in $TMPDIR
1400cat > $TMPSH 2>> $logfile <<EOF
1401#! /bin/sh
1402EOF
1403chmod +x $TMPSH >> $logfile 2>&1
1404if ! $TMPSH >> $logfile 2>&1; then
1405 cat <<EOF
1406Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1407variable to another directory and make sure that it is not mounted noexec.
1408EOF
1409 die "Sanity test failed."
1410fi
993f2d0f 1411
3a636b6f 1412if $cc --version 2>/dev/null | grep -qi gcc; then
629687f6
MR
1413 cc_type=gcc
1414elif $cc --version 2>/dev/null | grep -q Intel; then
1415 cc_type=icc
1416elif $cc -v 2>&1 | grep -q xlc; then
1417 cc_type=xlc
df442a8d
MR
1418elif $cc -V 2>/dev/null | grep -q Compaq; then
1419 cc_type=ccc
1420 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
03754fcd 1421 debuglevel=3
df442a8d 1422 add_ldflags -Wl,-z,now # calls to libots crash without this
03e37762
MR
1423elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1424 test -d "$sysroot" || die "No valid sysroot specified."
1425 cc_type=armcc
1426 armcc_conf="$PWD/armcc.conf"
1427 $cc --arm_linux_configure \
1428 --arm_linux_config_file="$armcc_conf" \
1429 --configure_sysroot="$sysroot" \
1430 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1431 die "Error creating armcc configuration file."
1432 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1433 as_default="${cross_prefix}gcc"
629687f6
MR
1434fi
1435
1436test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1437
75800dce
MR
1438set_default as
1439
154d432c
MR
1440if test -n "$sysroot"; then
1441 case "$cc_type" in
1442 gcc)
1443 add_cflags --sysroot="$sysroot"
1444 add_ldflags --sysroot="$sysroot"
1445 ;;
1446 esac
1447fi
1448
993f2d0f
MR
1449# compiler sanity check
1450check_exec <<EOF
1451int main(void){ return 0; }
1452EOF
1453if test "$?" != 0; then
1454 echo "$cc is unable to create an executable file."
1455 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1456 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1457 echo "Only do this if you know what cross compiling means."
1458 fi
1459 die "C compiler test failed."
1460fi
1461
e9b9a2f8 1462check_cflags -std=c99
9d821fc2
DB
1463check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1464#include <stdlib.h>
1465EOF
1466check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1467#include <stdlib.h>
1468EOF
e9b9a2f8 1469
b24dbcbd 1470case "$arch" in
b24dbcbd
RP
1471 alpha)
1472 arch="alpha"
1473 enable fast_64bit
c0a02a3e 1474 check_cflags -mieee
b24dbcbd 1475 ;;
cfdb6148
MR
1476 arm|armv[4567]*l)
1477 arch="arm"
b24dbcbd 1478 ;;
f4870943
MR
1479 avr32)
1480 ;;
cfdb6148
MR
1481 bfin)
1482 arch="bfin"
1483 ;;
1484 ia64)
1485 arch="ia64"
b24dbcbd 1486 enable fast_64bit
cfdb6148
MR
1487 ;;
1488 m68k)
1489 arch="m68k"
b24dbcbd 1490 ;;
de3a1240 1491 mips|mipsel|IP*)
b24dbcbd
RP
1492 arch="mips"
1493 ;;
de3a1240
DB
1494 mips64)
1495 arch="mips"
1496 enable fast_64bit
1497 ;;
61597a98 1498 parisc|hppa)
b24dbcbd
RP
1499 arch="parisc"
1500 ;;
61597a98 1501 parisc64|hppa64)
b24dbcbd
RP
1502 arch="parisc"
1503 enable fast_64bit
1504 ;;
cfdb6148
MR
1505 "Power Macintosh"|ppc|powerpc)
1506 arch="ppc"
1507 enable fast_unaligned
1508 ;;
1509 ppc64)
1510 arch="ppc"
1511 enable fast_64bit
1512 enable fast_unaligned
1513 ;;
b24dbcbd
RP
1514 s390|s390x)
1515 arch="s390"
1516 ;;
cfdb6148
MR
1517 sh4|sh)
1518 arch="sh4"
b24dbcbd 1519 ;;
cfdb6148
MR
1520 sparc)
1521 arch="sparc"
1522 ;;
1523 sun4u|sparc64)
1524 arch="sparc"
1525 subarch="sparc64"
b24dbcbd
RP
1526 enable fast_64bit
1527 ;;
cfdb6148
MR
1528 i386|i486|i586|i686|i86pc|BePC)
1529 arch="x86"
1530 subarch="x86_32"
1531 enable fast_unaligned
1532 ;;
1533 x86_64|amd64)
1534 arch="x86"
1535 subarch="x86_32"
1536 enable cmov
1537 enable fast_cmov
1538 enable fast_unaligned
1539 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1540 int test[sizeof(char*) - 7];
1541EOF
b24dbcbd
RP
1542 ;;
1543 *)
1544 arch="unknown"
1545 ;;
1546esac
1547
62045d48 1548enable $arch $subarch
b24dbcbd 1549
7483e694 1550# OS specific
4f854758 1551case $target_os in
7483e694 1552 beos|haiku|zeta)
c9d19248 1553 prefix_default="$HOME/config"
7483e694 1554 # helps building libavcodec
0f010b2f 1555 add_cflags -DPIC -fomit-frame-pointer
7483e694 1556 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1557 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1558 case "$gcc_version" in
1559 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1560 disable mmx
1561 ;;
1562 *20010315*) echo "BeBits gcc"
0f010b2f 1563 add_cflags -fno-expensive-optimizations
7483e694
DB
1564 ;;
1565 esac
7483e694
DB
1566 SHFLAGS=-nostart
1567 # enable BeOS things
1568 enable audio_beos
1569 # no need for libm, but the inet stuff
1570 # Check for BONE
1571 # XXX: actually should check for NOT net_server
78fe7631 1572 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1573 network_extralibs="-lbind -lsocket"
1574 else
1575 enable beos_netserver
1576 network_extralibs="-lnet"
1577 fi ;;
1578 sunos)
1579 FFSERVERLDFLAGS=""
9987769a 1580 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694 1581 network_extralibs="-lsocket -lnsl"
e193c74e 1582 add_cflags -D__EXTENSIONS__
7483e694
DB
1583 ;;
1584 netbsd)
1585 oss_demuxer_extralibs="-lossaudio"
1586 oss_muxer_extralibs="-lossaudio"
1587 ;;
1588 openbsd)
1589 disable need_memalign
1590 LIBOBJFLAGS='$(PIC)'
7483e694 1591 SHFLAGS='-shared'
7483e694
DB
1592 oss_demuxer_extralibs="-lossaudio"
1593 oss_muxer_extralibs="-lossaudio"
1594 ;;
1595 freebsd)
1596 disable need_memalign
1597 ;;
1598 bsd/os)
1599 osextralibs="-lpoll -lgnugetopt"
1600 strip="strip -d"
1601 ;;
1602 darwin)
1603 disable need_memalign
0138c54e 1604 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
1605 strip="strip -x"
1606 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1607 SLIBSUF=".dylib"
1608 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1609 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1610 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 1611 objformat="macho"
1b0f6fb8 1612 enabled x86_64 && objformat="macho64"
7483e694
DB
1613 ;;
1614 mingw32*)
4f854758 1615 target_os=mingw32
dcc01c06 1616 LIBTARGET=i386
1fc9fb8a 1617 if enabled x86_64; then
dcc01c06
RP
1618 disable need_memalign
1619 LIBTARGET=x64
1620 fi
fbd971a4 1621 shlibdir_default="$bindir_default"
7483e694
DB
1622 disable ffserver
1623 SLIBPREF=""
1624 SLIBSUF=".dll"
7483e694
DB
1625 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1626 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 1627 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1628 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1629 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1630 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 1631 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 1632 objformat="win32"
bc574408 1633 enable dos_paths
b1549d61 1634 if ! enabled x86_64; then
f7ad5aa2
RP
1635 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1636 die "ERROR: MinGW runtime version must be >= 3.15."
1637 enabled_any avisynth vfwcap_demuxer &&
1638 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1639 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1640 fi
7483e694
DB
1641 ;;
1642 cygwin*)
4f854758 1643 target_os=cygwin
fbd971a4 1644 shlibdir_default="$bindir_default"
7483e694
DB
1645 SLIBPREF="cyg"
1646 SLIBSUF=".dll"
1647 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1648 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1649 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 1650 objformat="win32"
bc574408 1651 enable dos_paths
7483e694 1652 ;;
4f365f37 1653 *-dos|freedos|opendos)
fdf11906 1654 disable ffplay ffserver
4f365f37
MK
1655 disable $INDEV_LIST $OUTDEV_LIST
1656 network_extralibs="-lsocket"
ff1c015d 1657 objformat="coff"
bc574408 1658 enable dos_paths
4f365f37 1659 ;;
7483e694 1660 linux)
7483e694
DB
1661 enable dv1394
1662 ;;
1663 irix*)
4f854758 1664 target_os=irix
7483e694
DB
1665 ranlib="echo ignoring ranlib"
1666 ;;
d22e8442 1667 os/2*)
d22e8442
DY
1668 strip="lxlite"
1669 ln_s="cp -f"
d22e8442 1670 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1671 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1672 FFSERVERLDFLAGS=""
287d3b13 1673 LIBSUF="_s.a"
d22e8442
DY
1674 SLIBPREF=""
1675 SLIBSUF=".dll"
1676 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1677 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1678 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1679 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1680 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1681 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1682 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1683 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1684 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1685 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1686 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1687 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 1688 enable dos_paths
d22e8442
DY
1689 ;;
1690
7483e694 1691 *)
4f924f9a 1692 die "Unknown OS '$target_os'."
7483e694
DB
1693 ;;
1694esac
1695
c9d19248
MR
1696set_default $PATHS_LIST
1697
c597172e 1698add_extralibs $osextralibs
de6d9b64 1699
28d8e661
DB
1700# Combine FFLDFLAGS and the LDFLAGS environment variable.
1701LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1702
320d060a 1703# we need to build at least one lib type
93b3c083 1704if ! enabled_any static shared; then
320d060a
DB
1705 cat <<EOF
1706At least one library type must be built.
1707Specify --enable-static to build the static libraries or --enable-shared to
1708build the shared libraries as well. To only build the shared libraries specify
1709--disable-static in addition to --enable-shared.
1710EOF
1711 exit 1;
1712fi
1713
abc4e572 1714disabled static && LIBNAME=""
2a320695 1715
a2234ceb
RP
1716if enabled_any libfaad libfaadbin ; then
1717 if check_header faad.h; then
295b8c70 1718 check_cc <<EOF
a2234ceb
RP
1719#include <faad.h>
1720#ifndef FAAD2_VERSION
1721ok faad1
1722#endif
db817cf3 1723int main(void) { return 0; }
a2234ceb
RP
1724EOF
1725 test $? = 0 && enable libfaad2
1726 else
ff3dac65 1727 die "FAAD test failed."
a2234ceb
RP
1728 fi
1729fi
1730
1731
93b3c083 1732if ! enabled gpl; then
54118497
RP
1733 die_gpl_disabled(){
1734 name=$1
1735 shift
1736 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1737 }
4a24ab64 1738 die_gpl_disabled "The Postprocessing code" postproc
1cc60c47
DB
1739 die_gpl_disabled "libx264" libx264
1740 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1741 die_gpl_disabled "FAAD2" libfaad2
1742 die_gpl_disabled "The X11 grabber" x11grab
ebb810d9 1743fi
b2e3c528 1744
3fe142e2
DB
1745if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1746 die "libamr is nonfree and --enable-nonfree is not specified."
1747fi
1748
9eeed841 1749check_deps $ARCH_EXT_LIST
0f3cb305 1750
5d323602
MR
1751test -z "$need_memalign" && need_memalign="$mmx"
1752
cf9d24ad 1753#Darwin CC versions
4f854758 1754if test $target_os = darwin; then
629687f6 1755 if enabled xlc; then
0f010b2f 1756 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
cf9d24ad 1757 else
0f010b2f
DB
1758 add_cflags -pipe
1759 check_cflags -force_cpusubtype_ALL
1760 check_cflags -Wno-sign-compare
f946a9a4 1761 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1762 fi
2a1a6b64
MN
1763fi
1764
40617a6d 1765disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 1766
a4adb608 1767# Add processor-specific flags
38d0a8aa 1768if test $cpu != "generic"; then
bc8ec47b
MR
1769 warn_altivec(){
1770 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1771 }
38d0a8aa 1772 case $cpu in
bb270c08 1773 601|ppc601|PowerPC601)
0f010b2f 1774 add_cflags -mcpu=601
bc8ec47b 1775 warn_altivec enabled PPC601
bb270c08
DB
1776 ;;
1777 603*|ppc603*|PowerPC603*)
0f010b2f 1778 add_cflags -mcpu=603
bc8ec47b 1779 warn_altivec enabled PPC603
bb270c08
DB
1780 ;;
1781 604*|ppc604*|PowerPC604*)
0f010b2f 1782 add_cflags -mcpu=604
bc8ec47b 1783 warn_altivec enabled PPC604
bb270c08
DB
1784 ;;
1785 G3|g3|75*|ppc75*|PowerPC75*)
0f010b2f 1786 add_cflags -mcpu=750 -mpowerpc-gfxopt
bc8ec47b 1787 warn_altivec enabled PPC75x
bb270c08
DB
1788 ;;
1789 G4|g4|745*|ppc745*|PowerPC745*)
0f010b2f 1790 add_cflags -mcpu=7450 -mpowerpc-gfxopt
bc8ec47b 1791 warn_altivec disabled PPC745x
bb270c08
DB
1792 ;;
1793 74*|ppc74*|PowerPC74*)
0f010b2f 1794 add_cflags -mcpu=7400 -mpowerpc-gfxopt
bc8ec47b 1795 warn_altivec disabled PPC74xx
bb270c08
DB
1796 ;;
1797 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
0f010b2f 1798 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
bc8ec47b 1799 warn_altivec disabled PPC970
9cafbd6c 1800 enable ppc64
bb270c08 1801 ;;
e07e357d 1802 Cell|CELL|cell)
0f010b2f 1803 add_cflags -mcpu=cell
e07e357d 1804 warn_altivec disabled Cell
9cafbd6c 1805 enable ppc64
e07e357d 1806 ;;
e7768fc5
GP
1807 # targets that do NOT support conditional mov (cmov)
1808 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
0f010b2f 1809 add_cflags -march=$cpu
497237c7 1810 disable cmov
e7768fc5
GP
1811 ;;
1812 # targets that do support conditional mov (cmov)
416519dd 1813 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
0f010b2f 1814 add_cflags -march=$cpu
497237c7
RP
1815 enable cmov
1816 enable fast_cmov
94e4c3a3
GP
1817 ;;
1818 # targets that do support conditional mov but on which it's slow
800a5a19 1819 pentium4|pentium4m|prescott|nocona)
0f010b2f 1820 add_cflags -march=$cpu
497237c7
RP
1821 enable cmov
1822 disable fast_cmov
bb270c08 1823 ;;
d7b34d08 1824 sparc64)
0f010b2f 1825 add_cflags -mcpu=v9
d7b34d08 1826 ;;
f2e49553 1827 arm11*|cortex*)
0f010b2f 1828 add_cflags -mcpu=$cpu
f2e49553
MR
1829 enable fast_unaligned
1830 ;;
0223bd6f 1831 armv*)
0f010b2f 1832 add_cflags -march=$cpu
0223bd6f 1833 ;;
f2e49553 1834 arm*)
0f010b2f 1835 add_cflags -mcpu=$cpu
6b19786b 1836 ;;
1cd11856 1837 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
df442a8d 1838 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1cd11856 1839 ;;
bb270c08 1840 *)
7483e694 1841 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1842 ;;
a4adb608
MN
1843 esac
1844fi
1845
b4d96ba2
MR
1846check_cc <<EOF || die "Symbol mangling check failed."
1847int ff_extern;
1848EOF
2f05d9c1 1849sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1850extern_prefix=${sym%%ff_extern*}
1851
f65883c8
MR
1852check_cc <<EOF && enable inline_asm
1853void foo(void) { __asm__ volatile ("" ::); }
1854EOF
61d251db 1855
9eeed841 1856if enabled x86; then
44965991
PI
1857 # check whether EBP is available on x86
1858 # As 'i' is stored on the stack, this program will crash
1859 # if the base pointer is used to access it because the
1860 # base pointer is cleared in the inline assembly code.
7dfef245 1861 check_exec_crash <<EOF && enable ebp_available
44965991 1862 volatile int i=0;
be449fca 1863 __asm__ volatile (
44965991
PI
1864 "xorl %%ebp, %%ebp"
1865 ::: "%ebp");
1866 return i;
44965991
PI
1867EOF
1868
1869 # check wether EBX is available on x86
940f335a 1870 check_asm ebx_available '"":::"%ebx"'
8e380710 1871
d3a4b4e0
DB
1872 # check whether more than 10 operands are supported
1873 check_cc <<EOF && enable ten_operands
1874int main(void) {
1875 int x=0;
1876 __asm__ volatile(
1877 ""
1878 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1879 );
1880 return 0;
1881}
1882EOF
1883
d7f0920b 1884 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1885 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 1886 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
1887
1888 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 1889
d52481b9 1890 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d
LM
1891 enabled x86_64 && append YASMFLAGS "-m amd64"
1892 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1893 case "$objformat" in
1894 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1b0f6fb8 1895 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
304d586d
LM
1896 *) append YASMFLAGS "-DPREFIX" ;;
1897 esac
7595a5e4 1898 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
44965991
PI
1899fi
1900
87ea51e0
LB
1901# check for assembler specific support
1902
5b6c2cbd 1903enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
799fde37 1904enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
87ea51e0 1905
57bd82d4
MR
1906# check for SIMD availability
1907
115329f1 1908# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1909if enabled altivec; then
3ed1a2ee
DB
1910 check_cflags -maltivec -mabi=altivec &&
1911 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1912 check_cflags -faltivec
b6e52719 1913
0182fee8 1914 # check if our compiler supports Motorola AltiVec C API
497237c7 1915 check_cc <<EOF || disable altivec
dcd479c0 1916$inc_altivec_h
a9a07762
MN
1917int main(void) {
1918 vector signed int v1, v2, v3;
1919 v1 = vec_add(v2,v3);
1920 return 0;
1921}
1922EOF
b006b26c
DB
1923
1924 # check if our compiler supports braces for vector declarations
80a61f08 1925 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
b006b26c 1926$inc_altivec_h
80a61f08 1927int main (void) { (vector int) {1}; return 0; }
b006b26c 1928EOF
a9a07762 1929fi
ab6c65f6 1930
b4e806b2 1931# We have to check if pld is a nop and disable it.
a2fc0f6a 1932enabled arm && check_asm pld '"pld [r0]"'
940f335a
MR
1933enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1934enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
ab5cb084 1935enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
f55b299a 1936enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1937enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1938enabled mmi && check_asm mmi '"lq $2, 0($2)"'
6b18d278 1939enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
940f335a 1940enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1941
0f010b2f 1942enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
8b03def6 1943
57bd82d4
MR
1944# ---
1945# big/little-endian test
9eebe687
MR
1946check_cc <<EOF || die "endian test failed"
1947unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1948EOF
d04d9e16 1949od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1950
a3999908 1951# ---
3d204385
NK
1952# check availability of some header files
1953
a98bb16d
RP
1954if check_func dlopen; then
1955 ldl=
1956elif check_func dlopen -ldl; then
1957 ldl=-ldl
8bf5d58f
MN
1958fi
1959
75ecf149
DB
1960# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1961check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1962
7483e694
DB
1963check_func fork
1964check_func gethrtime
1965check_func getrusage
094c09bb 1966check_func inet_aton $network_extralibs
7483e694
DB
1967check_func memalign
1968check_func mkstemp
1f91cdce 1969check_func posix_memalign
b507ebd1 1970check_func_headers io.h setmode
2446d3d6 1971check_func_headers windows.h GetProcessTimes
7c5bfe7a 1972check_func_headers windows.h VirtualAlloc
6ffa87d3 1973
e16e49ac 1974check_header conio.h
a98bb16d
RP
1975check_header dlfcn.h
1976check_header malloc.h
bf6ce82d 1977check_header poll.h
b58412f1 1978check_header sys/mman.h
b091aa44 1979check_header sys/resource.h
bf6ce82d 1980check_header sys/select.h
a98bb16d 1981check_header termios.h
272081b0
CEH
1982check_header vdpau/vdpau.h
1983check_header vdpau/vdpau_x11.h
68178ca9 1984check_header X11/extensions/XvMClib.h
a98bb16d 1985
1f91cdce
RP
1986if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1987 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 1988fi
e16e49ac 1989
a4fa192c 1990disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 1991disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
1992
1993# check for some common methods of building with pthread support
1994# do this before the optional library checks as some of them require pthreads
1995if enabled pthreads; then
9e7fd101
MR
1996 if check_func pthread_create; then
1997 :
1998 elif check_func pthread_create -pthread; then
1999 add_cflags -pthread
afc9aee2 2000 add_extralibs -pthread
9e7fd101
MR
2001 elif check_func pthread_create -pthreads; then
2002 add_cflags -pthreads
afc9aee2 2003 add_extralibs -pthreads
8d94f606
GT
2004 elif check_func pthread_create -lpthreadGC2; then
2005 add_extralibs -lpthreadGC2
9e7fd101
MR
2006 elif ! check_lib pthread.h pthread_create -lpthread; then
2007 die "ERROR: can't find pthreads library"
2008 fi
57bd82d4
MR
2009fi
2010
8eee7025 2011for thread in $THREADS_LIST; do
e5f94c2b 2012 if enabled $thread; then
3ae3b721
RP
2013 test -n "$thread_type" &&
2014 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2015 thread_type="$thread"
e5f94c2b
RP
2016 fi
2017done
2018
fdf88598 2019check_lib math.h sin -lm
ff418735 2020check_lib va/va.h vaInitialize -lva
fdf88598 2021
a33cab3a 2022# test for C99 functions in math.h
7b04b8a0 2023for func in llrint lrint lrintf round roundf truncf; do
a33cab3a 2024 check_exec <<EOF && enable $func || disable $func
f32adb22 2025#include <math.h>
a33cab3a 2026int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 2027EOF
a33cab3a 2028done
f32adb22 2029
57bd82d4 2030# these are off by default, so fail if requested and not available
79fda097 2031enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
2032enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2033enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
e3cc7d6f 2034enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
36718e51
DB
2035 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2036 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
2037enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2038enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2039enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2040enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2041enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3d6fac8c 2042enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2043enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2044 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2045enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
7483e694
DB
2046enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2047enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2bfecf73 2048enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
57f0ec6e
MR
2049 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2050 die "ERROR: libx264 version must be >= 0.65."; }
2bfecf73 2051enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2052enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2053
0b4a1821
AS
2054# libdc1394 check
2055if enabled libdc1394; then
2056 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2057 enable libdc1394_2; } ||
2058 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2059 enable libdc1394_1; } ||
2060 die "ERROR: No version of libdc1394 found "
2061fi
2062
2063
c13e1abd
FH
2064_restrict=
2065for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 2066 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
2067void foo(char * $restrict_keyword p);
2068EOF
c13e1abd
FH
2069done
2070
a86b921c 2071##########################################
29799f8b 2072# SDL check
a86b921c 2073
497237c7
RP
2074disable sdl_too_old
2075disable sdl
6a1a892f 2076SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2077if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2078 sdl_cflags=$("${SDL_CONFIG}" --cflags)
225e21ef 2079 temp_cflags $sdl_cflags
5e622c40 2080 temp_extralibs $("${SDL_CONFIG}" --libs)
1ca5d97f 2081 if check_lib2 SDL.h SDL_Init; then
5e622c40 2082 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
29f3b38a 2083 if test "$_sdlversion" -lt 121 ; then
497237c7 2084 enable sdl_too_old
dcd479c0 2085 else
497237c7 2086 enable sdl
225e21ef 2087 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 2088#include <SDL.h>
d6773f56 2089int main(int argc, char **argv){
29f3b38a
MR
2090 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2091 int w = vi->current_w;
2092 return 0;
2093}
2094EOF
dcd479c0
MR
2095 fi
2096 fi
29f3b38a 2097 restore_flags
c3f6b472 2098fi
57bd82d4 2099
2270b4b2 2100texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2101
7a91333f 2102##########################################
73b46a95
RP
2103# Network check
2104
2105if enabled network; then
96000432 2106 check_type "sys/types.h sys/socket.h" socklen_t
73b46a95
RP
2107 # Prefer arpa/inet.h over winsock2
2108 if check_header arpa/inet.h ; then
2109 check_func closesocket
2110 elif check_header winsock2.h ; then
ea10ddde 2111 network_extralibs="-lws2_32"
72be9e73 2112 check_type ws2tcpip.h socklen_t
2446d3d6 2113 check_func_headers winsock2.h closesocket
73b46a95
RP
2114 fi
2115fi
2116
2117##########################################
29799f8b 2118# IPv6 check
7a91333f 2119
497237c7 2120enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
2121#include <sys/types.h>
2122#include <sys/socket.h>
2123#include <netinet/in.h>
2124#include <netdb.h>
db817cf3 2125int main(void) {
7483e694
DB
2126 struct sockaddr_storage saddr;
2127 struct ipv6_mreq mreq6;
2128 getaddrinfo(0,0,0,0);
2129 getnameinfo(0,0,0,0,0,0,0);
2130 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2131}
2132EOF
2133
06e31011
RP
2134check_header linux/videodev.h
2135check_header linux/videodev2.h
1b6e8b73 2136check_header sys/videoio.h
47f38850 2137
2446d3d6 2138check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2139
f8aa696f 2140# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2141{ check_header dev/bktr/ioctl_meteor.h &&
2142 check_header dev/bktr/ioctl_bt848.h; } ||
2143{ check_header machine/ioctl_meteor.h &&
2144 check_header machine/ioctl_bt848.h; } ||
2145{ check_header dev/video/meteor/ioctl_meteor.h &&
2146 check_header dev/video/bktr/ioctl_bt848.h; } ||
2147check_header dev/ic/bt8xx.h
f8aa696f 2148
c7682de0
RP
2149check_header sys/soundcard.h
2150check_header soundcard.h
deb29777 2151
35fd8122
NG
2152check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2153
80ff8a16
OG
2154check_lib2 jack/jack.h jack_client_open -ljack
2155
7483e694 2156# deal with the X11 frame grabber
56a059ac 2157enabled x11grab &&
f58f4ce1
GP
2158check_header X11/Xlib.h &&
2159check_header X11/extensions/XShm.h &&
2160check_func XOpenDisplay -lX11 &&
06eab4ba 2161check_func XShmCreateImage -lX11 -lXext
f58f4ce1 2162
40bcf4c7 2163enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
2164
2165# add some useful compiler flags if supported
2166check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2167check_cflags -Wall
2168check_cflags -Wno-switch
c07bd6a9
MN
2169check_cflags -Wdisabled-optimization
2170check_cflags -Wpointer-arith
2171check_cflags -Wredundant-decls
cc1fb623 2172check_cflags -Wno-pointer-sign
f4929996 2173check_cflags -Wcast-qual
9aceb3cf 2174check_cflags -Wwrite-strings
652a5bf6 2175check_cflags -Wtype-limits
764551c6 2176check_cflags -Wundef
5af4e0cc 2177enabled extra_warnings && check_cflags -Winline
cf9d24ad 2178
57bd82d4 2179# add some linker flags
5c0e9479 2180check_ldflags -Wl,--warn-common
8351d2ba
DB
2181check_ldflags -Wl,--as-needed
2182check_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 2183check_ldflags -Wl,-Bsymbolic
94a3401e 2184
bd2216e4
MR
2185if enabled small; then
2186 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2187 optimizations="small"
2188elif enabled optimizations; then
629687f6 2189 if enabled xlc; then
0f010b2f
DB
2190 add_cflags -O5
2191 add_ldflags -O5
df442a8d
MR
2192 elif enabled ccc; then
2193 add_cflags -fast
cf9d24ad 2194 else
0f010b2f 2195 add_cflags -O3
cf9d24ad 2196 fi
cddf3f45 2197fi
11fdbc44 2198check_cflags -fno-math-errno
b2eb2ff0 2199check_cflags -fno-signed-zeros
cddf3f45 2200
504a64b9 2201# add some flags for Intel C Compiler
629687f6 2202if enabled icc; then
b1598b58
MR
2203 # Just warnings, no remarks
2204 check_cflags -w1
2205 # -wd: Disable following warnings
2206 # 144, 167, 556: -Wno-pointer-sign
2207 # 10006: ignoring unknown option -fno-signed-zeros
2208 # 10156: ignoring option '-W'; no argument required
2209 check_cflags -wd144,167,556,10006,10156
2210 # 11030: Warning unknown option --as-needed
2211 # 10156: ignoring option '-export'; no argument required
2212 check_ldflags -wd10156,11030
2213 # Allow to compile with optimizations
2214 check_ldflags -march=$cpu
be2cf98a
CEH
2215 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2216 enable ebp_available
df442a8d
MR
2217elif enabled ccc; then
2218 # disable some annoying warnings
2219 add_cflags -msg_disable cvtu32to64
2220 add_cflags -msg_disable embedcomment
2221 add_cflags -msg_disable needconstext
2222 add_cflags -msg_disable nomainieee
2223 add_cflags -msg_disable ptrmismatch1
2224 add_cflags -msg_disable unreachcode
504a64b9
CEH
2225fi
2226
80581e98 2227# PIC flags for shared library objects where they are needed
5af4e0cc 2228if enabled shared; then
569cb218
MR
2229 # LIBOBJFLAGS may have already been set in the OS configuration
2230 if test -z "$LIBOBJFLAGS" ; then
a8e28698 2231 case "${subarch-$arch}" in
b6bd7268 2232 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
569cb218
MR
2233 esac
2234 fi
80581e98
MN
2235fi
2236
90be59ef 2237if enabled gprof; then
0f010b2f
DB
2238 add_cflags -p
2239 add_ldflags -p
1db54e20
DB
2240fi
2241
7f3c02fc 2242# Find out if the .align argument is a power of two or not.
9377b6ce 2243check_asm asmalign_pot '".align 3"'
4454dc1b 2244
7483e694
DB
2245enabled_any $DECODER_LIST && enable decoders
2246enabled_any $ENCODER_LIST && enable encoders
5666fd73 2247enabled_any $HWACCEL_LIST && enable hwaccels
7483e694
DB
2248enabled_any $BSF_LIST && enable bsfs
2249enabled_any $DEMUXER_LIST && enable demuxers
2250enabled_any $MUXER_LIST && enable muxers
f7679c54 2251enabled_any $FILTER_LIST && enable filters
7483e694
DB
2252enabled_any $INDEV_LIST && enable demuxers
2253enabled_any $OUTDEV_LIST && enable muxers
2254enabled_any $PROTOCOL_LIST && enable protocols
2255
2256enabled_any $THREADS_LIST && enable threads
2257
2258check_deps $CONFIG_LIST \
b6bb00b0 2259 $CONFIG_EXTRA \
7483e694
DB
2260 $HAVE_LIST \
2261 $DECODER_LIST \
2262 $ENCODER_LIST \
5666fd73 2263 $HWACCEL_LIST \
7483e694
DB
2264 $PARSER_LIST \
2265 $BSF_LIST \
2266 $DEMUXER_LIST \
2267 $MUXER_LIST \
f7679c54 2268 $FILTER_LIST \
7483e694
DB
2269 $INDEV_LIST \
2270 $OUTDEV_LIST \
2271 $PROTOCOL_LIST \
f70f03f6 2272
3e89171a 2273echo "install prefix $prefix"
f36958f8
DB
2274echo "source path $source_path"
2275echo "C compiler $cc"
bfd5afd8 2276echo ".align is power-of-two $asmalign_pot"
f36958f8 2277echo "ARCH $arch ($cpu)"
ce8871c2
MR
2278if test "$build_suffix" != ""; then
2279 echo "build suffix $build_suffix"
eb94aca9 2280fi
ac63af34
DB
2281if test "$extra_version" != ""; then
2282 echo "version string suffix $extra_version"
2283fi
0db2ce77 2284echo "big-endian ${bigendian-no}"
5b6c2cbd 2285if enabled x86; then
af44e8e4 2286 echo "yasm ${yasm-no}"
0db2ce77 2287 echo "MMX enabled ${mmx-no}"
30e98e62 2288 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2289 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2290 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2291 echo "SSE enabled ${sse-no}"
30e98e62 2292 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2293 echo "CMOV enabled ${cmov-no}"
2294 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2295 echo "EBX available ${ebx_available-no}"
2296 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2297 echo "10 operands supported ${ten_operands-no}"
e41e8342 2298fi
5b6c2cbd 2299if enabled arm; then
0db2ce77
MR
2300 echo "ARMv5TE enabled ${armv5te-no}"
2301 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2302 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2303 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2304 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2305 echo "NEON enabled ${neon-no}"
eba9ae3c 2306fi
5b6c2cbd 2307if enabled mips; then
0db2ce77 2308 echo "MMI enabled ${mmi-no}"
e41e8342 2309fi
5b6c2cbd 2310if enabled ppc; then
0db2ce77 2311 echo "AltiVec enabled ${altivec-no}"
30e98e62 2312 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2313 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2314 echo "performance report ${powerpc_perf-no}"
2315fi
2316if enabled sparc; then
2317 echo "VIS enabled ${vis-no}"
e41e8342 2318fi
0db2ce77
MR
2319echo "gprof enabled ${gprof-no}"
2320echo "debug symbols ${debug-no}"
87a0fb62 2321echo "strip symbols ${stripping-no}"
8400d6b8 2322echo "optimizations ${optimizations-no}"
0db2ce77
MR
2323echo "static ${static-no}"
2324echo "shared ${shared-no}"
4a24ab64 2325echo "postprocessing support ${postproc-no}"
f7679c54 2326echo "new filter support ${avfilter-no}"
81124ba0 2327echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2328echo "network support ${network-no}"
90be59ef 2329if enabled network; then
0db2ce77 2330 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2331fi
0db2ce77
MR
2332echo "threading support ${thread_type-no}"
2333echo "SDL support ${sdl-no}"
90be59ef 2334if enabled sdl_too_old; then
bfd5afd8
DB
2335 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2336fi
0db2ce77
MR
2337echo "Sun medialib support ${mlib-no}"
2338echo "AVISynth enabled ${avisynth-no}"
0db2ce77
MR
2339echo "libamr-nb support ${libamr_nb-no}"
2340echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 2341echo "libdc1394 support ${libdc1394-no}"
690bfceb 2342echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2343echo "libfaac enabled ${libfaac-no}"
2344echo "libfaad enabled ${libfaad-no}"
7e0871a7 2345echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2346echo "libgsm enabled ${libgsm-no}"
2347echo "libmp3lame enabled ${libmp3lame-no}"
2348echo "libnut enabled ${libnut-no}"
9a77d59a 2349echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2350echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2351echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2352echo "libtheora enabled ${libtheora-no}"
2353echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2354echo "libx264 enabled ${libx264-no}"
2355echo "libxvid enabled ${libxvid-no}"
0db2ce77 2356echo "zlib enabled ${zlib-no}"
f402916e 2357echo "bzlib enabled ${bzlib-no}"
2c62e737 2358echo
de6d9b64 2359
5666fd73 2360for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2361 echo "Enabled ${type}s:"
f65c9da1 2362 eval list=\$$(toupper $type)_LIST
8138b9db 2363 for part in $list; do
f65c9da1
MR
2364 enabled $part && echo ${part%_*}
2365 done | sort | pr -3 -t
2366 echo
8138b9db
RP
2367done
2368
ba321adb
JK
2369license="LGPL"
2370if enabled nonfree; then
2371 license="unredistributable"
2372elif enabled gpl; then
2373 license="GPL"
2374fi
2375
2376echo "License: $license"
ca5323af 2377
cf1392e9
DB
2378echo "Creating config.mak and config.h..."
2379
29799f8b
DB
2380echo "# Automatically generated by configure - do not modify!" > config.mak
2381echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2382echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2383echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2384echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
14a8acf1 2385echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
de6d9b64 2386
d921f03f 2387echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
c9d19248 2388echo "prefix=$prefix" >> config.mak
22a324da
DB
2389echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2390echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2391echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2392echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
14a8acf1 2393echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
22a324da 2394echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
0a7ee3ef
DB
2395echo "SRC_PATH=\"$source_path\"" >> config.mak
2396echo "SRC_PATH_BARE=$source_path" >> config.mak
2397echo "BUILD_ROOT=\"$PWD\"" >> config.mak
980fc7b8 2398echo "CC=$cc" >> config.mak
313c46a6 2399echo "AS=$as" >> config.mak
304d586d 2400echo "YASM=$yasmexe" >> config.mak
980fc7b8 2401echo "AR=$ar" >> config.mak
be7109c1 2402echo "RANLIB=$ranlib" >> config.mak
20369773 2403echo "LN_S=$ln_s" >> config.mak
87a0fb62 2404enabled stripping &&
3ae3b721 2405 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2406 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2407
a9b3f630 2408echo "OPTFLAGS=$CFLAGS" >> config.mak
0f3cb305 2409echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2410echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2411echo "SHFLAGS=$SHFLAGS" >> config.mak
304d586d 2412echo "YASMFLAGS=$YASMFLAGS" >> config.mak
80581e98 2413echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2414echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2415echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2416echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2417echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2418echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2419echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2420echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2421echo "SLIBSUF=$SLIBSUF" >> config.mak
2422echo "EXESUF=$EXESUF" >> config.mak
ac63af34 2423echo "EXTRA_VERSION=$extra_version" >> config.mak
315c741d 2424echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
9da6609f
MR
2425echo "HOSTCC=$host_cc" >> config.mak
2426echo "HOSTCFLAGS=$host_cflags" >> config.mak
82bb3329 2427echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
9da6609f
MR
2428echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2429echo "HOSTLIBS=$host_libs" >> config.mak
a7ada2ba
MR
2430echo "TARGET_EXEC=$target_exec" >> config.mak
2431echo "TARGET_PATH=$target_path" >> config.mak
4dc62701 2432
90be59ef 2433if enabled bigendian; then
7483e694
DB
2434 echo "WORDS_BIGENDIAN=yes" >> config.mak
2435 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2436fi
44161118 2437
90be59ef 2438if enabled sdl; then
5e622c40
DB
2439 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2440 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
a86b921c 2441fi
90be59ef 2442if enabled texi2html; then
7483e694 2443 echo "BUILD_DOC=yes" >> config.mak
146ea952 2444fi
5a872801 2445
719c8e00
MR
2446get_version(){
2447 name=$1
2448 file=$source_path/$2
147e7692
MR
2449 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2450 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2451 lcname=$(tolower $name)
2452 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2453 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2454}
2455
147e7692
MR
2456get_version LIBSWSCALE libswscale/swscale.h
2457get_version LIBPOSTPROC libpostproc/postprocess.h
2458get_version LIBAVCODEC libavcodec/avcodec.h
2459get_version LIBAVDEVICE libavdevice/avdevice.h
2460get_version LIBAVFORMAT libavformat/avformat.h
2461get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2462get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2463
5af4e0cc 2464if enabled shared; then
7483e694
DB
2465 echo "BUILD_SHARED=yes" >> config.mak
2466 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2467 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2468 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2469 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2470 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2471 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2472 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2473 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2474 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2475fi
d7e27559 2476echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2477echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2478
7b5e8a27
DB
2479echo "ARCH=$arch" >> config.mak
2480
3d907e22
MR
2481print_config ARCH_ $TMPH config.mak $ARCH_LIST
2482print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2483print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2484 $CONFIG_EXTRA \
7483e694
DB
2485 $DECODER_LIST \
2486 $ENCODER_LIST \
5666fd73 2487 $HWACCEL_LIST \
7483e694
DB
2488 $PARSER_LIST \
2489 $BSF_LIST \
2490 $DEMUXER_LIST \
2491 $MUXER_LIST \
f7679c54 2492 $FILTER_LIST \
7483e694
DB
2493 $PROTOCOL_LIST \
2494 $INDEV_LIST \
2495 $OUTDEV_LIST \
8ac17293 2496
c13e1abd
FH
2497echo "#define restrict $_restrict" >> $TMPH
2498
bd2216e4 2499if enabled small; then
7483e694 2500 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2501fi
2502
0f3cb305 2503
8156056e 2504# Apparently it's not possible to portably echo a backslash.
3ae3b721 2505enabled asmalign_pot &&
7483e694 2506 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
295b8c70 2507 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2508
b4d96ba2 2509echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2510
9c05103f
DB
2511echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2512
b7860763 2513# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2514cmp -s $TMPH config.h &&
2515 echo "config.h is unchanged" ||
2516 mv -f $TMPH config.h
3d204385 2517
165af439 2518# build tree in object directory if source path is different from current one
90be59ef 2519if enabled source_path_used; then
165af439 2520 DIRS="\
7483e694
DB
2521 doc \
2522 libavcodec \
2523 libavcodec/alpha \
a2fc0f6a 2524 libavcodec/arm \
7483e694 2525 libavcodec/bfin \
7483e694
DB
2526 libavcodec/mlib \
2527 libavcodec/ppc \
2528 libavcodec/sh4 \
2529 libavcodec/sparc \
a6493a8f 2530 libavcodec/x86 \
52a9cf34 2531 libavdevice \
f7679c54 2532 libavfilter \
7483e694
DB
2533 libavformat \
2534 libavutil \
2535 libpostproc \
2536 libswscale \
b2cfd7e3
RP
2537 libswscale/bfin \
2538 libswscale/mlib \
2539 libswscale/ppc \
2540 libswscale/sparc \
2541 libswscale/x86 \
7483e694
DB
2542 tests \
2543 tools \
7483e694 2544 "
165af439 2545 FILES="\
7483e694
DB
2546 Makefile \
2547 common.mak \
71c61f62 2548 subdir.mak \
7483e694
DB
2549 doc/texi2pod.pl \
2550 libavcodec/Makefile \
52a9cf34 2551 libavdevice/Makefile \
f7679c54 2552 libavfilter/Makefile \
7483e694
DB
2553 libavformat/Makefile \
2554 libavutil/Makefile \
2555 libpostproc/Makefile \
2556 libswscale/Makefile \
2557 "
165af439 2558 for dir in $DIRS ; do
7483e694 2559 mkdir -p $dir
165af439
MR
2560 done
2561 for f in $FILES ; do
20369773 2562 $ln_s "$source_path/$f" $f
165af439
MR
2563 done
2564fi
def4272a 2565
def4272a 2566
d0674868 2567# build pkg-config files
def4272a 2568
d0674868
DB
2569pkgconfig_generate(){
2570name=$1
b0dfd108 2571shortname=${name#lib}${build_suffix}
d0674868
DB
2572comment=$2
2573version=$3
2574libs=$4
2575requires=$5
25cd5cb3 2576cat <<EOF > $name/$name.pc
3e89171a 2577prefix=$prefix
a94e666c 2578exec_prefix=\${prefix}
f2b7382c 2579libdir=$libdir
7622778e 2580includedir=$incdir
def4272a 2581
d0674868
DB
2582Name: $name
2583Description: $comment
2584Version: $version
5dcfe9f8
AH
2585Requires: $(disabled shared && echo $requires)
2586Requires.private: $(enabled shared && echo $requires)
def4272a 2587Conflicts:
12701f6e
AH
2588Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2589Libs.private: $(enabled shared && echo $libs)
76a448ed 2590Cflags: -I\${includedir}
def4272a 2591EOF
25cd5cb3 2592cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2593prefix=
2594exec_prefix=
46d1ff83 2595libdir=\${pcfiledir}
1d44d365 2596includedir=${source_path}
def4272a 2597
d0674868
DB
2598Name: $name
2599Description: $comment
2600Version: $version
2601Requires: $requires
def4272a 2602Conflicts:
12701f6e 2603Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2604Cflags: -I\${includedir}
2605EOF
d0674868 2606}
def4272a 2607
e426941d 2608pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2609pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2610pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2611pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2612enabled avfilter &&
46983309 2613 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2614enabled postproc &&
e426941d 2615 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 2616pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"