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