Implement a proper configure test for AltiVec vector declaration syntax.
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
4#
5# Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6# Copyright (c) 2005-2006 Diego Biurrun
7# Copyright (c) 2005-2006 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
cde2d79a 10# make sure we are running under a compatible shell
c21d6325
MR
11# try to make this part work with most shells
12
13try_exec(){
0dbe81bb 14 echo "Trying shell $1"
2270b4b2 15 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
16}
17
5237ce67 18unset foo
2270b4b2 19(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
20E1="$?"
21
2270b4b2 22(: ${foo?}) 2> /dev/null
0dbe81bb
MR
23E2="$?"
24
25if test "$E1" != 0 || test "$E2" = 0; then
26 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
27 export FF_CONF_EXEC
28 if test "0$FF_CONF_EXEC" -lt 1; then
29 FF_CONF_EXEC=1
30 try_exec bash "$0" "$@"
31 fi
32 if test "0$FF_CONF_EXEC" -lt 2; then
33 FF_CONF_EXEC=2
34 try_exec ksh "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 3; then
37 FF_CONF_EXEC=3
38 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
39 fi
40 echo "No compatible shell script interpreter found."
fc53da20 41 echo "This configure script requires a POSIX-compatible shell"
c21d6325 42 echo "such as bash or ksh."
505dfb09
DB
43 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44 echo "Instead, install a working POSIX-compatible shell."
45 echo "Disabling this configure test will create a broken FFmpeg."
c21d6325
MR
46 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47 echo "This bash version ($BASH_VERSION) is broken on your platform."
48 echo "Upgrade to a later version if available."
49 fi
cde2d79a
MR
50 exit 1
51fi
52
74c53c2d
MR
53show_help(){
54 echo "Usage: configure [options]"
55 echo "Options: [defaults in brackets after descriptions]"
56 echo
57 echo "Standard options:"
58 echo " --help print this message"
8c6afa4d
DB
59 echo " --logfile=FILE log tests and output to FILE [config.err]"
60 echo " --disable-logging do not log configure debug information"
3e89171a 61 echo " --prefix=PREFIX install in PREFIX [$prefix]"
d156bede 62 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
74c53c2d 63 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 64 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
5341d856 65 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
4ca5ece5 66 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
74c53c2d
MR
67 echo " --enable-static build static libraries [default=yes]"
68 echo " --disable-static do not build static libraries [default=no]"
69 echo " --enable-shared build shared libraries [default=no]"
70 echo " --disable-shared do not build shared libraries [default=yes]"
0a622b98
MR
71 echo " --enable-gpl allow use of GPL code, the resulting libav*"
72 echo " and ffmpeg will be under GPL [default=no]"
3fe142e2
DB
73 echo " --enable-nonfree allow use of nonfree code, the resulting libav*"
74 echo " and ffmpeg will be unredistributable [default=no]"
4a24ab64 75 echo " --enable-postproc enable GPLed postprocessing support [default=no]"
13ca50f3 76 echo " --enable-swscale software scaler support [default=no]"
f7679c54
VS
77 echo " --enable-avfilter video filter support (replaces vhook) [default=no]"
78 echo " --enable-avfilter-lavf video filters dependant on avformat [default=no]"
e5f94c2b 79 echo " --enable-beosthreads use BeOS threads [default=no]"
d22e8442 80 echo " --enable-os2threads use OS/2 threads [default=no]"
74c53c2d 81 echo " --enable-pthreads use pthreads [default=no]"
eb113804 82 echo " --enable-w32threads use Win32 threads [default=no]"
56a059ac 83 echo " --enable-x11grab enable X11 grabbing [default=no]"
0a622b98
MR
84 echo
85 echo "External library support:"
5ce265a1 86 echo " --enable-mlib use Sun medialib [default=no]"
e2745046
MR
87 echo " --enable-liba52 enable GPLed liba52 support [default=no]"
88 echo " --enable-liba52bin open liba52.so.0 at runtime [default=no]"
8ac17293 89 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
f5a756ef
DB
90 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
91 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
f7b8bffe
RP
92 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
93 echo " and libraw1394 [default=no]"
690bfceb 94 echo " --enable-libdirac enable Dirac support via libdirac [default=no]"
e2745046
MR
95 echo " --enable-libfaac enable FAAC support via libfaac [default=no]"
96 echo " --enable-libfaad enable FAAD support via libfaad [default=no]"
06f32b26 97 echo " --enable-libfaadbin open libfaad.so.0 at runtime [default=no]"
dc922953 98 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
e2745046 99 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]"
31235134
DB
100 echo " --enable-libnut enable NUT (de)muxing via libnut,"
101 echo " native demuxer exists [default=no]"
f7cd9eed 102 echo " --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
71757822 103 echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
f9def9cc
DB
104 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
105 echo " native implementation exists [default=no]"
1cc60c47
DB
106 echo " --enable-libx264 enable H.264 encoding via x264 [default=no]"
107 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
31235134 108 echo " native MPEG-4/Xvid encoder exists [default=no]"
74c53c2d
MR
109 echo ""
110 echo "Advanced options (experts only):"
111 echo " --source-path=PATH path to source code [$source_path]"
112 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
db6107b6 113 echo " --enable-cross-compile assume a cross-compiler is used"
4f854758 114 echo " --target-os=OS compiler targets OS [$target_os]"
74c53c2d 115 echo " --cc=CC use C compiler CC [$cc]"
74c53c2d
MR
116 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
117 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
118 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
119 echo " --build-suffix=SUFFIX suffix for application specific build []"
cc6a90dd 120 echo " --arch=ARCH select architecture [$arch]"
7c758d33
DB
121 echo " --cpu=CPU selects the minimum cpu required (affects"
122 echo " instruction selection, may crash on older CPUs)"
2b4c3615 123 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d
MR
124 echo " (requires enabling PMC)"
125 echo " --disable-mmx disable MMX usage"
064df5a9
PI
126 echo " --disable-mmx2 disable MMX2 usage"
127 echo " --disable-ssse3 disable SSSE3 usage"
1839e854 128 echo " --disable-armv5te disable armv5te usage"
edab3048 129 echo " --disable-armv6 disable armv6 usage"
f55b299a 130 echo " --disable-armvfp disable ARM VFP usage"
74c53c2d
MR
131 echo " --disable-iwmmxt disable iwmmxt usage"
132 echo " --disable-altivec disable AltiVec usage"
74c53c2d 133 echo " --disable-network disable network support [default=no]"
0c7bb0e5 134 echo " --disable-ipv6 disable ipv6 support [default=no]"
74c53c2d 135 echo " --disable-zlib disable zlib [default=no]"
f402916e 136 echo " --disable-bzlib disable bzlib [default=no]"
74c53c2d 137 echo " --disable-vhook disable video hooking support"
74c53c2d 138 echo " --disable-debug disable debugging symbols"
74c53c2d
MR
139 echo " --disable-mpegaudio-hp faster (but less accurate)"
140 echo " MPEG audio decoding [default=no]"
cde9e780 141 echo " --enable-gray enable full grayscale support (slower color)"
786b30af 142 echo " --disable-ffmpeg disable ffmpeg build"
74c53c2d
MR
143 echo " --disable-ffserver disable ffserver build"
144 echo " --disable-ffplay disable ffplay build"
145 echo " --enable-small optimize for size instead of speed"
3abe5fbd 146 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
74c53c2d 147 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
74c53c2d
MR
148 echo " --disable-encoder=NAME disables encoder NAME"
149 echo " --enable-encoder=NAME enables encoder NAME"
150 echo " --disable-decoder=NAME disables decoder NAME"
151 echo " --enable-decoder=NAME enables decoder NAME"
152 echo " --disable-encoders disables all encoders"
153 echo " --disable-decoders disables all decoders"
ff70e601
MR
154 echo " --disable-muxer=NAME disables muxer NAME"
155 echo " --enable-muxer=NAME enables muxer NAME"
74c53c2d 156 echo " --disable-muxers disables all muxers"
ff70e601
MR
157 echo " --disable-demuxer=NAME disables demuxer NAME"
158 echo " --enable-demuxer=NAME enables demuxer NAME"
74c53c2d 159 echo " --disable-demuxers disables all demuxers"
af9e7d18
MR
160 echo " --enable-parser=NAME enables parser NAME"
161 echo " --disable-parser=NAME disables parser NAME"
162 echo " --disable-parsers disables all parsers"
cd61e407
JM
163 echo " --enable-bsf=NAME enables bitstream filter NAME"
164 echo " --disable-bsf=NAME disables bitstream filter NAME"
165 echo " --disable-bsfs disables all bitstream filters"
c08fb000
AB
166 echo " --enable-protocol=NAME enables protocol NAME"
167 echo " --disable-protocol=NAME disables protocol NAME"
168 echo " --disable-protocols disables all protocols"
10d46dd0 169 echo " --disable-devices disables all devices"
794f8e97
PI
170 echo " --list-decoders show all available decoders"
171 echo " --list-encoders show all available encoders"
172 echo " --list-muxers show all available muxers"
173 echo " --list-demuxers show all available demuxers"
174 echo " --list-parsers show all available parsers"
175 echo " --list-protocols show all available protocols"
176 echo " --list-bsfs show all available bitstream filters"
c552605c
DB
177 echo " --list-indevs show all available input devices"
178 echo " --list-outdevs show all available output devices"
0a622b98
MR
179 echo
180 echo "Developer options (useful when working on FFmpeg itself):"
181 echo " --enable-gprof enable profiling with gprof [$gprof]"
d2bbb2f7 182 echo " --disable-optimizations disable compiler optimizations"
0a622b98 183 echo " --enable-extra-warnings enable more compiler warnings"
87a0fb62 184 echo " --disable-stripping disable stripping of executables and shared libraries"
74c53c2d
MR
185 echo ""
186 echo "NOTE: Object files are built at the place where configure is launched."
187 exit 1
188}
cf9d24ad 189
57bd82d4 190log(){
2270b4b2 191 echo "$@" >> $logfile
57bd82d4
MR
192}
193
720c69da 194log_file(){
c8e9f801 195 log BEGIN $1
2270b4b2 196 pr -n -t $1 >> $logfile
c8e9f801
MR
197 log END $1
198}
199
2ba042a7 200echolog(){
c8e9f801 201 log "$@"
57bd82d4 202 echo "$@"
2ba042a7
MR
203}
204
205die(){
206 echolog "$@"
207 cat <<EOF
208If you think configure made a mistake, make sure you are using the latest
209version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 210ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 211EOF
e155a21a 212 if disabled logging; then
2ba042a7 213 cat <<EOF
e155a21a
DB
214Rerun configure with logging enabled (do not use --disable-logging), and
215include the log this produces with your report.
2ba042a7
MR
216EOF
217 else
218cat <<EOF
e155a21a
DB
219Include the log file "$logfile" produced by configure as this will help
220solving the problem.
2ba042a7
MR
221EOF
222 fi
cea0ac52 223 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
57bd82d4
MR
224 exit 1
225}
226
6c6007d6 227# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 228toupper(){
6c6007d6 229 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
230}
231
4a5444db 232tolower(){
6c6007d6 233 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
234}
235
a8d04fba
MR
236set_all(){
237 value=$1
238 shift
239 for var in $*; do
240 eval $var=$value
241 done
242}
243
799c9e9b
MR
244pushvar(){
245 for var in $*; do
246 eval level=\${${var}_level:=0}
247 eval ${var}_${level}="\$$var"
248 eval ${var}_level=$(($level+1))
249 done
250}
251
252popvar(){
253 for var in $*; do
254 eval level=\${${var}_level:-0}
255 test $level = 0 && continue
256 eval level=$(($level-1))
257 eval $var="\${${var}_${level}}"
258 eval ${var}_level=$level
259 eval unset ${var}_${level}
260 done
261}
262
a8d04fba
MR
263enable(){
264 set_all yes $*
265}
266
267disable(){
268 set_all no $*
269}
270
57bd82d4 271enabled(){
44161118
MR
272 eval test "x\$$1" = "xyes"
273}
274
37970ebf
RP
275disabled(){
276 eval test "x\$$1" = "xno"
277}
278
44161118
MR
279enabled_all(){
280 for opt; do
281 enabled $opt || return 1
282 done
283}
284
85bca2c5
DB
285disabled_all(){
286 for opt; do
287 disabled $opt || return 1
288 done
289}
290
44161118
MR
291enabled_any(){
292 for opt; do
293 enabled $opt && return 0
294 done
295}
296
85bca2c5
DB
297disabled_any(){
298 for opt; do
299 disabled $opt && return 0
300 done
301}
302
4a0d6686
AJ
303is_in(){
304 value=$1
305 shift
306 for var in $*; do
307 [ $var = $value ] && return 0
308 done
309 return 1
310}
311
30fd06be
MR
312check_deps(){
313 for cfg; do
799c9e9b
MR
314 enabled ${cfg}_checking && die "Circular dependency for $cfg."
315 disabled ${cfg}_checking && continue
316 enable ${cfg}_checking
317
30fd06be
MR
318 eval dep_all="\$${cfg}_deps"
319 eval dep_any="\$${cfg}_deps_any"
799c9e9b
MR
320
321 pushvar cfg dep_all dep_any
322 check_deps $dep_all $dep_any
323 popvar cfg dep_all dep_any
324
30fd06be
MR
325 enabled_all $dep_all || disable $cfg
326 enabled_any $dep_any || disable $cfg
799c9e9b 327
4ec45764
RP
328 if enabled $cfg; then
329 eval dep_extralibs="\$${cfg}_extralibs"
330 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
331 fi
332
799c9e9b 333 disable ${cfg}_checking
30fd06be
MR
334 done
335}
336
44161118
MR
337print_config(){
338 pfx=$1
339 header=$2
340 makefile=$3
341 shift 3
342 for cfg; do
3d907e22 343 ucname="`toupper $cfg`"
44161118 344 if enabled $cfg; then
3d907e22
MR
345 echo "#define ${pfx}${ucname} 1" >> $header
346 echo "#define ENABLE_${ucname} 1" >> $header
347 echo "${pfx}${ucname}=yes" >> $makefile
348 else
349 echo "#define ENABLE_${ucname} 0" >> $header
44161118
MR
350 fi
351 done
57bd82d4
MR
352}
353
354flags_saved(){
2270b4b2 355 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
356}
357
dcd479c0 358save_flags(){
57bd82d4 359 flags_saved && return
dcd479c0
MR
360 SAVE_CFLAGS="$CFLAGS"
361 SAVE_LDFLAGS="$LDFLAGS"
362 SAVE_extralibs="$extralibs"
363}
364
365restore_flags(){
f5d28d10 366 flags_saved || return
dcd479c0
MR
367 CFLAGS="$SAVE_CFLAGS"
368 LDFLAGS="$SAVE_LDFLAGS"
369 extralibs="$SAVE_extralibs"
370 unset SAVE_CFLAGS
371 unset SAVE_LDFLAGS
372 unset SAVE_extralibs
373}
374
375temp_cflags(){
376 save_flags
377 CFLAGS="$CFLAGS $*"
378}
379
380temp_ldflags(){
381 save_flags
382 LDFLAGS="$LDFLAGS $*"
383}
384
385temp_extralibs(){
386 save_flags
387 extralibs="$extralibs $*"
388}
389
57bd82d4
MR
390append(){
391 var=$1
392 shift
393 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
394 eval "$var=\"\$$var $*\""
395}
396
397add_cflags(){
398 append CFLAGS "$@"
399}
400
401add_ldflags(){
402 append LDFLAGS "$@"
403}
404
405add_extralibs(){
406 append extralibs "$@"
407}
408
b0cfb663 409check_cmd(){
b3cb5d51 410 log "$@"
2270b4b2 411 "$@" >> $logfile 2>&1
b0cfb663
MR
412}
413
dcd479c0 414check_cc(){
57bd82d4 415 log check_cc "$@"
2270b4b2 416 cat > $TMPC
720c69da 417 log_file $TMPC
b0cfb663 418 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
419}
420
421check_cpp(){
422 log check_cpp "$@"
2270b4b2 423 cat > $TMPC
720c69da 424 log_file $TMPC
b0cfb663 425 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
426}
427
940f335a
MR
428check_asm(){
429 log check_asm "$@"
430 name="$1"
431 asm="$2"
432 shift 2
433 check_cc "$@" <<EOF && enable $name || disable $name
c23a0ac8 434int foo(void){ asm volatile($asm); }
940f335a
MR
435EOF
436}
437
dcd479c0 438check_ld(){
57bd82d4 439 log check_ld "$@"
0607887f 440 check_cc || return
3155a644
MR
441 flags=''
442 libs=''
443 for f; do
444 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
445 done
446 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
447}
448
449check_cflags(){
57bd82d4
MR
450 log check_cflags "$@"
451 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
452int x;
453EOF
454}
455
456check_ldflags(){
57bd82d4
MR
457 log check_ldflags "$@"
458 check_ld "$@" <<EOF && add_ldflags "$@"
c23a0ac8 459int main(void){ return 0; }
dcd479c0
MR
460EOF
461}
462
463check_header(){
57bd82d4 464 log check_header "$@"
dcd479c0
MR
465 header=$1
466 shift
d8bc5f06
MR
467 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
468 disable $var
469 check_cpp "$@" <<EOF && enable $var
dcd479c0
MR
470#include <$header>
471int x;
472EOF
473}
474
475check_func(){
57bd82d4 476 log check_func "$@"
dcd479c0
MR
477 func=$1
478 shift
d8bc5f06
MR
479 disable $func
480 check_ld "$@" <<EOF && enable $func
dcd479c0 481extern int $func();
c23a0ac8 482int main(void){ $func(); }
dcd479c0
MR
483EOF
484}
485
f8d7b072
MR
486check_func2(){
487 log check_func2 "$@"
488 headers=$1
489 func=$2
490 shift 2
491 disable $func
492 incs=""
493 for hdr in $headers; do
494 incs="$incs
495#include <$hdr>"
496 done
497 check_ld "$@" <<EOF && enable $func
498$incs
d6773f56 499int main(int argc, char **argv){
f8d7b072
MR
500 (void) $func;
501 return 0;
502}
503EOF
504}
505
57bd82d4
MR
506check_lib(){
507 log check_lib "$@"
508 header="$1"
509 func="$2"
510 shift 2
fcfcde17
MR
511 temp_extralibs "$@"
512 check_header $header && check_func $func && add_extralibs "$@"
513 err=$?
514 restore_flags
515 return $err
57bd82d4
MR
516}
517
f8d7b072
MR
518check_lib2(){
519 log check_lib2 "$@"
520 headers="$1"
521 func="$2"
522 shift 2
523 temp_extralibs "$@"
524 check_func2 "$headers" $func && add_extralibs "$@"
525 err=$?
526 restore_flags
527 return $err
528}
529
dcd479c0 530check_exec(){
2270b4b2 531 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
532}
533
7dfef245
MR
534check_exec_crash(){
535 code=`cat`
536
537 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
538 # are safe but may not be available everywhere. Thus we use
539 # raise(SIGTERM) instead. The check is run in a subshell so we
540 # can redirect the "Terminated" message from the shell. SIGBUS
541 # is not defined by standard C so it is used conditionally.
542
2270b4b2 543 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
544#include <signal.h>
545static void sighandler(int sig){
546 raise(SIGTERM);
547}
e5af4a11 548int main(void){
7dfef245
MR
549 signal(SIGILL, sighandler);
550 signal(SIGFPE, sighandler);
551 signal(SIGSEGV, sighandler);
552#ifdef SIGBUS
553 signal(SIGBUS, sighandler);
554#endif
555 { $code }
556}
557EOF
558}
559
72be9e73
DY
560check_type(){
561 log check_type "$@"
562 headers=$1
563 type=$2
564 shift 2
565 disable $type
566 incs=""
567 for hdr in $headers; do
568 incs="$incs
569#include <$hdr>"
570 done
571 check_cc "$@" <<EOF && enable $type
572$incs
573$type v;
574EOF
575}
576
57bd82d4
MR
577require(){
578 name="$1"
579 header="$2"
580 func="$3"
581 shift 3
582 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
583}
584
f8d7b072
MR
585require2(){
586 name="$1"
587 headers="$2"
588 func="$3"
589 shift 3
590 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
591}
592
eea50282
MR
593check_foo_config(){
594 cfg=$1
595 pkg=$2
596 header=$3
597 func=$4
598 shift 4
599 disable $cfg
600 check_cmd ${pkg}-config --version
601 err=$?
602 if test "$err" = 0; then
603 temp_cflags `${pkg}-config --cflags`
604 temp_extralibs `${pkg}-config --libs`
605 check_lib "$@" $header $func && enable $cfg
606 fi
607 return $err
608}
609
c505dd31
MR
610apply(){
611 file=$1
612 shift
613 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
614}
615
4a0d6686
AJ
616COMPONENT_LIST="
617 bsfs
618 decoders
619 demuxers
620 encoders
3cde40aa 621 filters
c552605c 622 indevs
4a0d6686 623 muxers
c552605c 624 outdevs
4a0d6686
AJ
625 parsers
626 protocols
627"
628
629CONFIG_LIST="
630 $COMPONENT_LIST
f7679c54
VS
631 avfilter
632 avfilter_lavf
c88f5d72
MR
633 avisynth
634 beos_netserver
f402916e 635 bzlib
c88f5d72
MR
636 ffmpeg
637 ffplay
638 ffserver
639 gpl
ecfc4f44 640 gprof
d8d0d0b2 641 gray
3abe5fbd 642 hardcoded_tables
c88f5d72 643 ipv6
7bc5f2a8 644 liba52
f8904fd9 645 liba52bin
f5a756ef
DB
646 libamr_nb
647 libamr_wb
f7b8bffe 648 libdc1394
690bfceb 649 libdirac
2eed5a46
DB
650 libfaac
651 libfaad
652 libfaadbin
c88f5d72 653 libgsm
6ebe07fb 654 libmp3lame
c88f5d72 655 libnut
f7cd9eed 656 libschroedinger
150d2772 657 libtheora
c88f5d72 658 libvorbis
1cc60c47
DB
659 libx264
660 libxvid
c88f5d72 661 memalign_hack
a8150374 662 mlib
c88f5d72
MR
663 mpegaudio_hp
664 network
3fe142e2 665 nonfree
4a24ab64 666 postproc
2b4c3615 667 powerpc_perf
bd2216e4 668 small
13ca50f3 669 swscale
c88f5d72 670 vhook
56a059ac 671 x11grab
c88f5d72 672 zlib
4a0d6686 673"
c88f5d72 674
8eee7025
DB
675THREADS_LIST='
676 beosthreads
d22e8442 677 os2threads
8eee7025
DB
678 pthreads
679 w32threads
680'
681
3f5b56e5
MR
682ARCH_LIST='
683 alpha
684 armv4l
685 bfin
686 ia64
687 m68k
688 mips
689 parisc
690 powerpc
691 s390
692 sh4
693 sparc
694 sparc64
695 x86
696 x86_32
697 x86_64
698'
699
700ARCH_EXT_LIST='
1ac9331a 701 altivec
1ac9331a 702 armv5te
edab3048 703 armv6
f55b299a 704 armvfp
3f5b56e5
MR
705 iwmmxt
706 mmi
707 mmx
d7f0920b 708 mmx2
9eeed841 709 ssse3
bd9d34a0 710 vis
3f5b56e5
MR
711'
712
713HAVE_LIST="
714 $ARCH_EXT_LIST
715 $THREADS_LIST
716 altivec_h
b006b26c 717 altivec_vector_braces
c9fdab0d 718 arpa_inet_h
6bd859d6 719 bswap
c88f5d72 720 byteswap_h
ecf97f22 721 closesocket
1ac9331a 722 cmov
e16e49ac 723 conio_h
c88f5d72 724 dcbzl
f8aa696f
DB
725 dev_bktr_ioctl_bt848_h
726 dev_bktr_ioctl_meteor_h
727 dev_ic_bt8xx_h
728 dev_video_meteor_ioctl_meteor_h
729 dev_video_bktr_ioctl_bt848_h
18b67ae5 730 dlfcn_h
c88f5d72 731 dlopen
245626d0
DB
732 ebp_available
733 ebx_available
c2a29455 734 fast_64bit
7073e9fc 735 fast_cmov
7b829d2a 736 fast_unaligned
9d99cc5a 737 fork
c88f5d72 738 freetype2
da9e86f8 739 gethrtime
4e68cb8a 740 GetProcessTimes
66be5b45 741 getrusage
c88f5d72 742 imlib2
2e1913b1 743 inet_aton
61d251db 744 inline_asm
0b4a1821
AS
745 libdc1394_1
746 libdc1394_2
a33cab3a
MK
747 llrint
748 lrint
c88f5d72 749 lrintf
f8aa696f
DB
750 machine_ioctl_bt848_h
751 machine_ioctl_meteor_h
c88f5d72
MR
752 malloc_h
753 memalign
6ffa87d3 754 mkstemp
b4e806b2 755 pld
9cafbd6c 756 ppc64
a33cab3a
MK
757 round
758 roundf
c88f5d72
MR
759 sdl
760 sdl_video_size
72be9e73 761 socklen_t
deb29777 762 soundcard_h
f8cda19e 763 poll_h
b58412f1 764 sys_mman_h
b091aa44 765 sys_resource_h
81644c2e 766 sys_select_h
deb29777 767 sys_soundcard_h
e16e49ac 768 termios_h
b265431e 769 threads
6ff3f3e7 770 winsock2_h
0cb78cef 771"
44161118 772
520cc7f1 773CMDLINE_SELECT="
3f5b56e5 774 $ARCH_EXT_LIST
520cc7f1 775 $CONFIG_LIST
8eee7025 776 $THREADS_LIST
db6107b6 777 cross_compile
520cc7f1
MR
778 debug
779 extra_warnings
8c6afa4d 780 logging
d2bbb2f7 781 optimizations
520cc7f1
MR
782 shared
783 static
87a0fb62 784 stripping
520cc7f1 785"
26759c44
MR
786CMDLINE_SET='
787 arch
d156bede 788 bindir
26759c44
MR
789 build_suffix
790 cc
791 cpu
792 cross_prefix
793 incdir
794 libdir
795 logfile
26759c44
MR
796 mandir
797 prefix
798 shlibdir
799 source_path
800 target_os
801'
520cc7f1 802
912f3148
DB
803# code dependency declarations
804
9eeed841
MR
805# architecture extensions
806altivec_deps="powerpc"
807armv5te_deps="armv4l"
808armv6_deps="armv4l"
f55b299a 809armvfp_deps="armv4l"
9eeed841 810iwmmxt_deps="armv4l"
e241ba14 811mmi_deps="mips"
9eeed841 812mmx_deps="x86"
fbef871d 813mmx2_deps="x86 mmx"
9eeed841 814ssse3_deps="x86"
bd9d34a0 815vis_deps="sparc"
9eeed841 816
912f3148 817# decoders / encoders
6ea67bbb 818ac3_decoder_deps="gpl"
33a0dd37 819dxa_decoder_deps="zlib"
30fd06be 820flashsv_decoder_deps="zlib"
773be23a 821flashsv_encoder_deps="zlib"
30fd06be
MR
822mpeg_xvmc_decoder_deps="xvmc"
823png_decoder_deps="zlib"
824png_encoder_deps="zlib"
30fd06be
MR
825zmbv_decoder_deps="zlib"
826zmbv_encoder_deps="zlib"
827
912f3148 828# external libraries
7bc5f2a8 829liba52_decoder_deps="liba52"
4ec45764 830liba52bin_decoder_extralibs='$ldl'
f5a756ef
DB
831libamr_nb_decoder_deps="libamr_nb"
832libamr_nb_encoder_deps="libamr_nb"
833libamr_wb_decoder_deps="libamr_wb"
834libamr_wb_encoder_deps="libamr_wb"
690bfceb
AS
835libdirac_decoder_deps="libdirac"
836libdirac_encoder_deps="libdirac"
c9171a83 837libfaac_encoder_deps="libfaac"
69ddbd1d 838libfaad_decoder_deps="libfaad"
4ec45764 839libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
840libgsm_decoder_deps="libgsm"
841libgsm_encoder_deps="libgsm"
8ffed8d8
MR
842libgsm_ms_decoder_deps="libgsm"
843libgsm_ms_encoder_deps="libgsm"
1cc60c47 844libmp3lame_encoder_deps="libmp3lame"
f7cd9eed
AS
845libschroedinger_decoder_deps="libschroedinger"
846libschroedinger_encoder_deps="libschroedinger"
150d2772 847libtheora_encoder_deps="libtheora"
b0caf888 848libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
849libx264_encoder_deps="libx264"
850libxvid_encoder_deps="libxvid"
13566c31 851mpeg4aac_decoder_deps="libfaad"
30fd06be 852
912f3148 853# demuxers / muxers
03a76ba9 854ac3_demuxer_deps="ac3_parser"
50383e88 855audio_beos_demuxer_deps="audio_beos"
4ec45764 856audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 857audio_beos_muxer_deps="audio_beos"
4ec45764 858audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 859avisynth_demuxer_deps="avisynth"
73483024 860bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 861dirac_demuxer_deps="dirac_parser"
fe9bb347 862dv1394_demuxer_deps="dv1394 dv_demuxer"
f7b8bffe 863libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
864libnut_demuxer_deps="libnut"
865libnut_muxer_deps="libnut"
4bd8e17c 866mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
867oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
868oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 869redir_demuxer_deps="network"
8eb793c4 870rtp_muxer_deps="network rtp_protocol"
95c21842
LA
871rtsp_demuxer_deps="sdp_demuxer"
872sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 873v4l_demuxer_deps="linux_videodev_h"
530dc538 874v4l2_demuxer_deps="linux_videodev2_h"
c2345207
RP
875vfwcap_demuxer_deps="capCreateCaptureWindow"
876vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 877x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 878x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 879
912f3148 880# protocols
c08fb000
AB
881http_protocol_deps="network"
882rtp_protocol_deps="udp_protocol"
883tcp_protocol_deps="network"
884udp_protocol_deps="network"
885
f7679c54 886# filters
81124ba0 887movie_filter_deps="avfilter_lavf"
f7679c54 888
912f3148 889# programs
fa859b4d 890ffplay_deps="sdl"
6ad42348 891ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764
RP
892ffserver_extralibs='$ldl'
893vhook_extralibs='$ldl'
a2830dca 894
912f3148 895
de6d9b64 896# default parameters
8a608357 897
2ba042a7 898logfile="config.err"
8a608357
MR
899
900# installation paths
3e89171a 901prefix="/usr/local"
c75560ae 902libdir='$(PREFIX)/lib'
84c22efd 903shlibdir="$libdir"
76a448ed 904incdir='$(PREFIX)/include'
4ca5ece5 905mandir='$(PREFIX)/share/man'
c75560ae 906bindir='$(PREFIX)/bin'
8a608357
MR
907
908# toolchain
de6d9b64
FB
909cc="gcc"
910ar="ar"
503d5b58 911nm="nm"
be7109c1 912ranlib="ranlib"
0f3cb305 913strip="strip"
8a608357 914asmalign_pot="unknown"
20369773 915ln_s="ln -sf"
8a608357
MR
916
917# machine
cc6a90dd 918arch=`uname -m`
38d0a8aa 919cpu="generic"
8a608357 920
8a608357 921# OS
4f854758 922target_os=$(tolower $(uname -s))
8a608357 923
8a608357 924# libraries
f402916e 925enable bzlib
497237c7 926enable zlib
8a608357
MR
927
928# configurable options
497237c7 929enable debug
497237c7
RP
930enable ffmpeg
931enable ffplay
932enable ffserver
933enable ipv6
497237c7
RP
934enable mpegaudio_hp
935enable network
8400d6b8 936enable optimizations
497237c7 937enable protocols
530dc538 938enable static
87a0fb62 939enable stripping
8a608357
MR
940vhook="default"
941
8a608357 942# build settings
9987769a 943SHFLAGS='-shared -Wl,-soname,$$(@F)'
cab3ef82 944VHOOKSHFLAGS='$(SHFLAGS)'
e240ee67 945LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c536cb09 946FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
947LIBPREF="lib"
948LIBSUF=".a"
c5f14466
RP
949FULLNAME='$(NAME)$(BUILDSUF)'
950LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
951SLIBPREF="lib"
952SLIBSUF=".so"
c5f14466 953SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
954SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
955SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 956LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 957
315c741d 958# gcc stupidly only outputs the basename of targets with -MM
1489db82 959DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/,"'
315c741d 960
c597172e
MR
961# find source path
962source_path="`dirname \"$0\"`"
497237c7 963enable source_path_used
c597172e
MR
964if test -z "$source_path" -o "$source_path" = "." ; then
965 source_path="`pwd`"
497237c7 966 disable source_path_used
c597172e
MR
967else
968 source_path="`cd \"$source_path\"; pwd`"
969 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 970 die "Out of tree builds are impossible with whitespace in source path."
c597172e
MR
971fi
972
c597172e
MR
973FFMPEG_CONFIGURATION="$@"
974
73ef8980
MR
975find_things(){
976 thing=$1
977 pattern=$2
978 file=$source_path/$3
932ccf39 979 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
980}
981
982ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
983DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
984PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
985BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
986MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
987DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
988OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
989INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
990PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 991FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 992
7483e694
DB
993enable $ARCH_EXT_LIST \
994 $DECODER_LIST \
995 $ENCODER_LIST \
996 $PARSER_LIST \
997 $BSF_LIST \
998 $DEMUXER_LIST \
999 $MUXER_LIST \
f7679c54 1000 $FILTER_LIST \
7483e694
DB
1001 $PROTOCOL_LIST \
1002 $INDEV_LIST \
1003 $OUTDEV_LIST \
c597172e
MR
1004
1005die_unknown(){
1006 echo "Unknown option \"$1\"."
1007 echo "See $0 --help for available options."
1008 exit 1
1009}
1010
794f8e97 1011show_list() {
bf0c4afa
RP
1012 suffix=_$1
1013 shift
1014 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1015 exit 0
1016}
1017
c597172e 1018for opt do
7483e694
DB
1019 optval="${opt#*=}"
1020 case "$opt" in
7483e694
DB
1021 --extra-cflags=*) add_cflags "$optval"
1022 ;;
1023 --extra-ldflags=*) add_ldflags "$optval"
1024 ;;
1025 --extra-libs=*) add_extralibs "$optval"
1026 ;;
8fb1cb58 1027 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1028 ;;
40bcf4c7
BL
1029 --enable-debug=*) debuglevel="$optval"
1030 ;;
7483e694
DB
1031 --enable-*=*|--disable-*=*)
1032 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1033 case "$thing" in
81124ba0 1034 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1035 *) die_unknown "$opt" ;;
1036 esac
1037 ;;
1038 --enable-?*|--disable-?*)
1039 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
e3773a55
MR
1040 if is_in $option $COMPONENT_LIST; then
1041 eval $action \$$(toupper ${option%s})_LIST
1042 elif is_in $option $CMDLINE_SELECT; then
1043 $action $option
1044 else
1045 die_unknown $opt
1046 fi
7483e694
DB
1047 ;;
1048 --list-*)
1049 NAME="${opt#--list-}"
1050 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1051 NAME=${NAME%s}
1052 eval show_list $NAME \$$(toupper $NAME)_LIST
1053 ;;
1054 --help|-h) show_help
1055 ;;
1056 *)
26759c44
MR
1057 optname="${opt%=*}"
1058 optname="${optname#--}"
1059 optname=$(echo "$optname" | sed 's/-/_/g')
1060 is_in $optname $CMDLINE_SET || die_unknown $opt
1061 eval $optname='$optval'
7483e694
DB
1062 ;;
1063 esac
c597172e
MR
1064done
1065
bcea99bb
MR
1066disabled logging && logfile=/dev/null
1067
1068echo "# $0 $@" > $logfile
1069set >> $logfile
1070
adb2b908
RP
1071cc="${cross_prefix}${cc}"
1072ar="${cross_prefix}${ar}"
1073nm="${cross_prefix}${nm}"
1074ranlib="${cross_prefix}${ranlib}"
1075strip="${cross_prefix}${strip}"
1076
e4e69e0b
MR
1077# set temporary file name
1078if test ! -z "$TMPDIR" ; then
1079 TMPDIR1="${TMPDIR}"
1080elif test ! -z "$TEMPDIR" ; then
1081 TMPDIR1="${TEMPDIR}"
1082else
1083 TMPDIR1="/tmp"
1084fi
1085
1086TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1087TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1088TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1089TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1090TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1091TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1092
b24dbcbd
RP
1093case "$arch" in
1094 i386|i486|i586|i686|i86pc|BePC)
1095 arch="x86_32"
1096 enable fast_unaligned
1097 ;;
1098 x86_64|amd64)
1099 arch="x86_32"
1100 enable fast_unaligned
1101 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1102 int test[sizeof(char*) - 7];
1103EOF
1104 ;;
1105 # armv4l is a subset of armv[567]*l
1106 arm|armv[4567]*l)
1107 arch="armv4l"
1108 ;;
1109 alpha)
1110 arch="alpha"
1111 enable fast_64bit
1112 ;;
1113 "Power Macintosh"|ppc|powerpc)
1114 arch="powerpc"
1115 ;;
1116 ppc64)
1117 arch="powerpc"
1118 enable fast_64bit
1119 ;;
1120 mips|mipsel|IP*)
1121 arch="mips"
1122 ;;
1123 sun4u|sparc64)
1124 arch="sparc64"
1125 enable fast_64bit
1126 ;;
1127 sparc)
1128 arch="sparc"
1129 ;;
1130 sh4)
1131 arch="sh4"
1132 ;;
1133 parisc)
1134 arch="parisc"
1135 ;;
1136 parisc64)
1137 arch="parisc"
1138 enable fast_64bit
1139 ;;
1140 s390|s390x)
1141 arch="s390"
1142 ;;
1143 m68k)
1144 arch="m68k"
1145 ;;
1146 ia64)
1147 arch="ia64"
1148 enable fast_64bit
1149 ;;
1150 bfin)
1151 arch="bfin"
1152 ;;
1153 *)
1154 arch="unknown"
1155 ;;
1156esac
1157
1158enable $arch
1159enabled_any x86_32 x86_64 && enable x86
1160enabled sparc64 && enable sparc
1161
7483e694 1162# OS specific
4f854758 1163case $target_os in
7483e694 1164 beos|haiku|zeta)
3e89171a 1165 prefix="$HOME/config"
7483e694
DB
1166 # helps building libavcodec
1167 add_cflags "-DPIC -fomit-frame-pointer"
1168 # 3 gcc releases known for BeOS, each with ugly bugs
1169 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1170 case "$gcc_version" in
1171 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1172 disable mmx
1173 ;;
1174 *20010315*) echo "BeBits gcc"
1175 add_cflags "-fno-expensive-optimizations"
1176 ;;
1177 esac
7483e694
DB
1178 SHFLAGS=-nostart
1179 # enable BeOS things
1180 enable audio_beos
1181 # no need for libm, but the inet stuff
1182 # Check for BONE
1183 # XXX: actually should check for NOT net_server
78fe7631 1184 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1185 network_extralibs="-lbind -lsocket"
1186 else
1187 enable beos_netserver
1188 network_extralibs="-lnet"
1189 fi ;;
1190 sunos)
1191 FFSERVERLDFLAGS=""
9987769a 1192 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694
DB
1193 network_extralibs="-lsocket -lnsl"
1194 ;;
1195 netbsd)
1196 oss_demuxer_extralibs="-lossaudio"
1197 oss_muxer_extralibs="-lossaudio"
1198 ;;
1199 openbsd)
1200 disable need_memalign
1201 LIBOBJFLAGS='$(PIC)'
7483e694
DB
1202 SHFLAGS='-shared'
1203 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1204 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1205 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1206 oss_demuxer_extralibs="-lossaudio"
1207 oss_muxer_extralibs="-lossaudio"
1208 ;;
1209 freebsd)
1210 disable need_memalign
1211 ;;
1212 bsd/os)
1213 osextralibs="-lpoll -lgnugetopt"
1214 strip="strip -d"
1215 ;;
1216 darwin)
1217 disable need_memalign
0138c54e 1218 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
9987769a 1219 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
7483e694
DB
1220 strip="strip -x"
1221 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1222 SLIBSUF=".dylib"
1223 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1224 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1225 FFSERVERLDFLAGS=-Wl,-bind_at_load
1226 ;;
1227 mingw32*)
4f854758 1228 target_os=mingw32
dcc01c06
RP
1229 LIBTARGET=i386
1230 if test $arch = x86_64; then
1231 disable need_memalign
1232 LIBTARGET=x64
1233 fi
7483e694
DB
1234 shlibdir="$bindir"
1235 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1236 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
13ca50f3 1237 if enabled swscale; then
7483e694
DB
1238 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1239 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1240 fi
1241 disable ffserver
1242 SLIBPREF=""
1243 SLIBSUF=".dll"
1244 EXESUF=".exe"
1245 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1246 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
dcc01c06 1247 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1248 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1249 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1250 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
71c61f62 1251 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
7483e694
DB
1252 ;;
1253 cygwin*)
4f854758 1254 target_os=cygwin
7483e694
DB
1255 shlibdir="$bindir"
1256 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1257 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
13ca50f3 1258 if enabled swscale; then
7483e694
DB
1259 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1260 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1261 fi
1262 EXESUF=".exe"
1263 SLIBPREF="cyg"
1264 SLIBSUF=".dll"
1265 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1266 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1267 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1268 ;;
4f365f37 1269 *-dos|freedos|opendos)
4f365f37
MK
1270 disable ffplay ffserver vhook
1271 disable $INDEV_LIST $OUTDEV_LIST
1272 network_extralibs="-lsocket"
1273 EXESUF=".exe"
1274 ;;
7483e694
DB
1275 linux)
1276 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1277 enable dv1394
1278 ;;
1279 irix*)
4f854758 1280 target_os=irix
7483e694
DB
1281 ranlib="echo ignoring ranlib"
1282 ;;
d22e8442 1283 os/2*)
d22e8442
DY
1284 strip="lxlite"
1285 ln_s="cp -f"
d22e8442
DY
1286 EXESUF=".exe"
1287 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1288 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1289 FFSERVERLDFLAGS=""
287d3b13 1290 LIBSUF="_s.a"
d22e8442
DY
1291 SLIBPREF=""
1292 SLIBSUF=".dll"
1293 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1294 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1295 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1296 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1297 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1298 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1299 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1300 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1301 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1302 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1303 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1304 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
c6eed369 1305 disable vhook
d22e8442 1306 ;;
269820f1
PR
1307 interix)
1308 disable vhook
1309 ;;
d22e8442 1310
7483e694 1311 *)
4f854758 1312 target_os="${target_os}-UNKNOWN"
7483e694
DB
1313 ;;
1314esac
1315
c597172e 1316add_extralibs $osextralibs
de6d9b64 1317
28d8e661
DB
1318# Combine FFLDFLAGS and the LDFLAGS environment variable.
1319LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1320
497237c7 1321test -n "$cross_prefix" && enable cross_compile
1ea46bed 1322
320d060a 1323# we need to build at least one lib type
93b3c083 1324if ! enabled_any static shared; then
320d060a
DB
1325 cat <<EOF
1326At least one library type must be built.
1327Specify --enable-static to build the static libraries or --enable-shared to
1328build the shared libraries as well. To only build the shared libraries specify
1329--disable-static in addition to --enable-shared.
1330EOF
1331 exit 1;
1332fi
1333
abc4e572 1334disabled static && LIBNAME=""
2a320695 1335
a2234ceb
RP
1336if enabled_any libfaad libfaadbin ; then
1337 if check_header faad.h; then
1338 check_cc << EOF
1339#include <faad.h>
1340#ifndef FAAD2_VERSION
1341ok faad1
1342#endif
db817cf3 1343int main(void) { return 0; }
a2234ceb
RP
1344EOF
1345 test $? = 0 && enable libfaad2
1346 else
ff3dac65 1347 die "FAAD test failed."
a2234ceb
RP
1348 fi
1349fi
1350
1351
93b3c083 1352if ! enabled gpl; then
54118497
RP
1353 die_gpl_disabled(){
1354 name=$1
1355 shift
1356 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1357 }
4a24ab64 1358 die_gpl_disabled "The Postprocessing code" postproc
7bc5f2a8 1359 die_gpl_disabled "liba52" liba52
1cc60c47
DB
1360 die_gpl_disabled "libx264" libx264
1361 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1362 die_gpl_disabled "FAAD2" libfaad2
1363 die_gpl_disabled "The X11 grabber" x11grab
13ca50f3 1364 die_gpl_disabled "The software scaler" swscale
ebb810d9 1365fi
b2e3c528 1366
3fe142e2
DB
1367if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1368 die "libamr is nonfree and --enable-nonfree is not specified."
1369fi
1370
9eeed841 1371check_deps $ARCH_EXT_LIST
0f3cb305 1372
5d323602
MR
1373test -z "$need_memalign" && need_memalign="$mmx"
1374
cf9d24ad 1375#Darwin CC versions
4f854758 1376if test $target_os = darwin; then
3dddba4b 1377 if $cc -v 2>&1 | grep -q xlc; then
30a3e5d4 1378 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
cf9d24ad 1379 else
8541cc27 1380 add_cflags "-pipe"
26c1b3be
DB
1381 check_cflags "-force_cpusubtype_ALL"
1382 check_cflags "-Wno-sign-compare"
f946a9a4 1383 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1384 fi
2a1a6b64
MN
1385fi
1386
8400d6b8 1387disabled optimizations || add_cflags -fomit-frame-pointer
cf9d24ad 1388
a4adb608 1389# Add processor-specific flags
38d0a8aa 1390if test $cpu != "generic"; then
bc8ec47b
MR
1391 warn_altivec(){
1392 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1393 }
38d0a8aa 1394 case $cpu in
bb270c08 1395 601|ppc601|PowerPC601)
1c5d830c 1396 add_cflags "-mcpu=601"
bc8ec47b 1397 warn_altivec enabled PPC601
bb270c08
DB
1398 ;;
1399 603*|ppc603*|PowerPC603*)
1c5d830c 1400 add_cflags "-mcpu=603"
bc8ec47b 1401 warn_altivec enabled PPC603
bb270c08
DB
1402 ;;
1403 604*|ppc604*|PowerPC604*)
1c5d830c 1404 add_cflags "-mcpu=604"
bc8ec47b 1405 warn_altivec enabled PPC604
bb270c08
DB
1406 ;;
1407 G3|g3|75*|ppc75*|PowerPC75*)
1c5d830c 1408 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
bc8ec47b 1409 warn_altivec enabled PPC75x
bb270c08
DB
1410 ;;
1411 G4|g4|745*|ppc745*|PowerPC745*)
1c5d830c 1412 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
bc8ec47b 1413 warn_altivec disabled PPC745x
bb270c08
DB
1414 ;;
1415 74*|ppc74*|PowerPC74*)
1c5d830c 1416 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
bc8ec47b 1417 warn_altivec disabled PPC74xx
bb270c08
DB
1418 ;;
1419 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1c5d830c 1420 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
bc8ec47b 1421 warn_altivec disabled PPC970
9cafbd6c 1422 enable ppc64
bb270c08 1423 ;;
e07e357d
LB
1424 Cell|CELL|cell)
1425 add_cflags "-mcpu=cell"
1426 warn_altivec disabled Cell
9cafbd6c 1427 enable ppc64
e07e357d 1428 ;;
e7768fc5
GP
1429 # targets that do NOT support conditional mov (cmov)
1430 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
38d0a8aa 1431 add_cflags "-march=$cpu"
497237c7 1432 disable cmov
e7768fc5
GP
1433 ;;
1434 # targets that do support conditional mov (cmov)
416519dd 1435 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
e7768fc5 1436 add_cflags "-march=$cpu"
497237c7
RP
1437 enable cmov
1438 enable fast_cmov
94e4c3a3
GP
1439 ;;
1440 # targets that do support conditional mov but on which it's slow
800a5a19 1441 pentium4|pentium4m|prescott|nocona)
94e4c3a3 1442 add_cflags "-march=$cpu"
497237c7
RP
1443 enable cmov
1444 disable fast_cmov
bb270c08 1445 ;;
d7b34d08 1446 sparc64)
1c5d830c 1447 add_cflags "-mcpu=v9"
d7b34d08 1448 ;;
6b19786b
MR
1449 arm*)
1450 add_cflags "-mcpu=$cpu"
1451 ;;
bb270c08 1452 *)
7483e694 1453 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1454 ;;
a4adb608
MN
1455 esac
1456fi
1457
be0d52ab 1458# make sure we can execute files in $TMPDIR
2270b4b2 1459cat > $TMPSH 2>> $logfile <<EOF
be0d52ab
MR
1460#! /bin/sh
1461EOF
2270b4b2
DB
1462chmod +x $TMPSH >> $logfile 2>&1
1463if ! $TMPSH >> $logfile 2>&1; then
be0d52ab
MR
1464 cat <<EOF
1465Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
68300911
DB
1466variable to another directory and make sure that $TMPDIR1 is not mounted
1467noexec.
be0d52ab
MR
1468EOF
1469 die "Sanity test failed."
1470fi
edd08265 1471rm $TMPSH
be0d52ab 1472
1a268acc
MR
1473# compiler sanity check
1474check_exec <<EOF
c23a0ac8 1475int main(void){ return 0; }
1a268acc
MR
1476EOF
1477if test "$?" != 0; then
1478 echo "$cc is unable to create an executable file."
93b3c083 1479 if test -z "$cross_prefix" && ! enabled cross_compile ; then
db6107b6 1480 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
c7ae6345 1481 echo "Only do this if you know what cross compiling means."
1a268acc
MR
1482 fi
1483 die "C compiler test failed."
1484fi
1485
b4d96ba2
MR
1486check_cc <<EOF || die "Symbol mangling check failed."
1487int ff_extern;
1488EOF
2f05d9c1 1489sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1490extern_prefix=${sym%%ff_extern*}
1491
61d251db
MR
1492check_asm inline_asm '""'
1493
9eeed841 1494if enabled x86; then
44965991
PI
1495 # check whether EBP is available on x86
1496 # As 'i' is stored on the stack, this program will crash
1497 # if the base pointer is used to access it because the
1498 # base pointer is cleared in the inline assembly code.
7dfef245 1499 check_exec_crash <<EOF && enable ebp_available
44965991
PI
1500 volatile int i=0;
1501 asm volatile (
1502 "xorl %%ebp, %%ebp"
1503 ::: "%ebp");
1504 return i;
44965991
PI
1505EOF
1506
1507 # check wether EBX is available on x86
940f335a 1508 check_asm ebx_available '"":::"%ebx"'
8e380710 1509
d7f0920b 1510 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1511 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
d7f0920b 1512 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
6bd859d6
MR
1513
1514 check_asm bswap '"bswap %%eax" ::: "%eax"'
44965991
PI
1515fi
1516
87ea51e0
LB
1517# check for assembler specific support
1518
cc6a90dd 1519if test $arch = "powerpc"; then
497237c7 1520check_cc <<EOF && enable dcbzl
87ea51e0
LB
1521int main(void) {
1522 register long zero = 0;
1523 char data[1024];
1524 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1525return 0;
1526}
1527EOF
1528fi
1529
57bd82d4
MR
1530# check for SIMD availability
1531
115329f1 1532# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1533if enabled altivec; then
de3e16ee 1534 check_cflags -maltivec -mabi=altivec && \
81a5cdde 1535 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } || \
4477b9f4 1536 check_cflags -faltivec
b6e52719 1537
0182fee8 1538 # check if our compiler supports Motorola AltiVec C API
497237c7 1539 check_cc <<EOF || disable altivec
dcd479c0 1540$inc_altivec_h
a9a07762
MN
1541int main(void) {
1542 vector signed int v1, v2, v3;
1543 v1 = vec_add(v2,v3);
1544 return 0;
1545}
1546EOF
b006b26c
DB
1547
1548 # check if our compiler supports braces for vector declarations
1549 check_cc <<EOF && enable altivec_vector_braces
1550$inc_altivec_h
1551#define AVV(x...) {x}
1552int main (void) { (vector int) AVV(1); return 0; }
1553EOF
a9a07762 1554fi
ab6c65f6 1555
b4e806b2
MC
1556# We have to check if pld is a nop and disable it.
1557enabled armv4l && check_asm pld '"pld [r0]"'
940f335a
MR
1558enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1559enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
f55b299a 1560enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1561enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1562enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1563enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1564
8b03def6
DB
1565enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1566
57bd82d4
MR
1567# ---
1568# big/little-endian test
9eebe687
MR
1569check_cc <<EOF || die "endian test failed"
1570unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1571EOF
d04d9e16 1572od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1573
a3999908 1574# ---
3d204385
NK
1575# check availability of some header files
1576
a98bb16d
RP
1577if check_func dlopen; then
1578 ldl=
1579elif check_func dlopen -ldl; then
1580 ldl=-ldl
8bf5d58f
MN
1581fi
1582
7483e694
DB
1583check_func fork
1584check_func gethrtime
1585check_func getrusage
094c09bb 1586check_func inet_aton $network_extralibs
7483e694
DB
1587check_func memalign
1588check_func mkstemp
a98bb16d 1589check_func2 windows.h GetProcessTimes
6ffa87d3 1590
a98bb16d 1591check_header byteswap.h
e16e49ac 1592check_header conio.h
a98bb16d
RP
1593check_header dlfcn.h
1594check_header malloc.h
b58412f1 1595check_header sys/mman.h
b091aa44 1596check_header sys/resource.h
a98bb16d
RP
1597check_header termios.h
1598
1599if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1600 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1601fi
e16e49ac 1602
e8214e0e 1603enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
f402916e 1604enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4 1605
b0c858d8
FR
1606# ffserver uses poll(),
1607# if it's not found we can emulate it using select().
1608if enabled ffserver; then
f8cda19e 1609 check_header poll.h
81644c2e 1610 check_header sys/select.h
b0c858d8
FR
1611fi
1612
57bd82d4
MR
1613# check for some common methods of building with pthread support
1614# do this before the optional library checks as some of them require pthreads
1615if enabled pthreads; then
9e7fd101
MR
1616 if check_func pthread_create; then
1617 :
1618 elif check_func pthread_create -pthread; then
1619 add_cflags -pthread
afc9aee2 1620 add_extralibs -pthread
9e7fd101
MR
1621 elif check_func pthread_create -pthreads; then
1622 add_cflags -pthreads
afc9aee2 1623 add_extralibs -pthreads
8d94f606
GT
1624 elif check_func pthread_create -lpthreadGC2; then
1625 add_extralibs -lpthreadGC2
9e7fd101
MR
1626 elif ! check_lib pthread.h pthread_create -lpthread; then
1627 die "ERROR: can't find pthreads library"
1628 fi
57bd82d4
MR
1629fi
1630
8eee7025 1631for thread in $THREADS_LIST; do
e5f94c2b 1632 if enabled $thread; then
3ae3b721
RP
1633 test -n "$thread_type" &&
1634 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 1635 thread_type="$thread"
e5f94c2b
RP
1636 fi
1637done
1638
fdf88598
MR
1639check_lib math.h sin -lm
1640
a33cab3a
MK
1641# test for C99 functions in math.h
1642for func in llrint lrint lrintf round roundf; do
1643 check_exec <<EOF && enable $func || disable $func
f32adb22
MR
1644#define _ISOC9X_SOURCE 1
1645#include <math.h>
a33cab3a 1646int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 1647EOF
a33cab3a 1648done
f32adb22 1649
57bd82d4 1650# these are off by default, so fail if requested and not available
79fda097 1651enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
1652enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
1653enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1654enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
690bfceb
AS
1655enabled libdirac && add_cflags "$(pkg-config --cflags dirac)" \
1656 && require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1657 && require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
1658enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1659enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694
DB
1660enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1661enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1662enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
f7cd9eed 1663enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
0eeb52f9 1664 && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
7483e694
DB
1665enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1666enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
18ee626c 1667enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lm
7483e694
DB
1668enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1669enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 1670
6ea67bbb
JR
1671# disable the native AC-3 decoder if liba52 is enabled
1672enabled liba52 && disable ac3_decoder
1673
3f89d9c0
AS
1674# disable the slower libdirac decoder if libschroedinger is enabled
1675enabled libschroedinger && enabled libdirac && disable libdirac_decoder
1676
0b4a1821
AS
1677# libdc1394 check
1678if enabled libdc1394; then
1679 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1680 enable libdc1394_2; } ||
1681 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1682 enable libdc1394_1; } ||
1683 die "ERROR: No version of libdc1394 found "
1684fi
1685
1686
c13e1abd
FH
1687_restrict=
1688for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 1689 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
1690void foo(char * $restrict_keyword p);
1691EOF
c13e1abd
FH
1692done
1693
703afd07 1694test "$vhook" = "default" && vhook="$dlopen"
a8721c09 1695
4f854758 1696if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
497237c7 1697 disable vhook
fbb9d104 1698 echo
b0268cc0 1699 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
fbb9d104
VP
1700 echo "Patches welcome."
1701 echo
1702fi
1703
8d923001
MR
1704if enabled vhook; then
1705 check_ldflags -rdynamic
1706 check_ldflags -export-dynamic
1707fi
bfd2edeb 1708
eea50282
MR
1709check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1710check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
04511d53 1711
a86b921c 1712##########################################
29799f8b 1713# SDL check
a86b921c 1714
497237c7
RP
1715disable sdl_too_old
1716disable sdl
6a1a892f 1717SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 1718if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
225e21ef
MR
1719 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1720 temp_cflags $sdl_cflags
dcd479c0 1721 temp_extralibs `"${SDL_CONFIG}" --libs`
1ca5d97f 1722 if check_lib2 SDL.h SDL_Init; then
dcd479c0 1723 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 1724 if test "$_sdlversion" -lt 121 ; then
497237c7 1725 enable sdl_too_old
dcd479c0 1726 else
497237c7 1727 enable sdl
225e21ef 1728 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 1729#include <SDL.h>
d6773f56 1730int main(int argc, char **argv){
29f3b38a
MR
1731 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1732 int w = vi->current_w;
1733 return 0;
1734}
1735EOF
dcd479c0
MR
1736 fi
1737 fi
29f3b38a 1738 restore_flags
c3f6b472 1739fi
57bd82d4 1740
2270b4b2 1741texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 1742
72be9e73
DY
1743check_type sys/socket.h socklen_t
1744
7a91333f 1745##########################################
73b46a95
RP
1746# Network check
1747
1748if enabled network; then
1749 # Prefer arpa/inet.h over winsock2
1750 if check_header arpa/inet.h ; then
1751 check_func closesocket
1752 elif check_header winsock2.h ; then
ea10ddde 1753 network_extralibs="-lws2_32"
72be9e73 1754 check_type ws2tcpip.h socklen_t
73b46a95
RP
1755 check_func2 winsock2.h closesocket
1756 fi
1757fi
1758
1759##########################################
29799f8b 1760# IPv6 check
7a91333f 1761
497237c7 1762enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
1763#include <sys/types.h>
1764#include <sys/socket.h>
1765#include <netinet/in.h>
1766#include <netdb.h>
db817cf3 1767int main(void) {
7483e694
DB
1768 struct sockaddr_storage saddr;
1769 struct ipv6_mreq mreq6;
1770 getaddrinfo(0,0,0,0);
1771 getnameinfo(0,0,0,0,0,0,0);
1772 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
1773}
1774EOF
1775
06e31011
RP
1776check_header linux/videodev.h
1777check_header linux/videodev2.h
47f38850 1778
c2345207
RP
1779check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1780
f8aa696f 1781# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
1782{ check_header dev/bktr/ioctl_meteor.h &&
1783 check_header dev/bktr/ioctl_bt848.h; } ||
1784{ check_header machine/ioctl_meteor.h &&
1785 check_header machine/ioctl_bt848.h; } ||
1786{ check_header dev/video/meteor/ioctl_meteor.h &&
1787 check_header dev/video/bktr/ioctl_bt848.h; } ||
1788check_header dev/ic/bt8xx.h
f8aa696f 1789
c7682de0
RP
1790check_header sys/soundcard.h
1791check_header soundcard.h
deb29777 1792
7483e694 1793# deal with the X11 frame grabber
56a059ac 1794enabled x11grab &&
f58f4ce1
GP
1795check_header X11/Xlib.h &&
1796check_header X11/extensions/XShm.h &&
1797check_func XOpenDisplay -lX11 &&
06eab4ba 1798check_func XShmCreateImage -lX11 -lXext
f58f4ce1 1799
40bcf4c7 1800enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
1801
1802# add some useful compiler flags if supported
1803check_cflags -Wdeclaration-after-statement
dcd479c0
MR
1804check_cflags -Wall
1805check_cflags -Wno-switch
c07bd6a9
MN
1806check_cflags -Wdisabled-optimization
1807check_cflags -Wpointer-arith
1808check_cflags -Wredundant-decls
cc1fb623 1809check_cflags -Wno-pointer-sign
f4929996 1810check_cflags -Wcast-qual
9aceb3cf 1811check_cflags -Wwrite-strings
652a5bf6 1812check_cflags -Wtype-limits
5af4e0cc 1813enabled extra_warnings && check_cflags -Winline
cf9d24ad 1814
57bd82d4 1815# add some linker flags
5c0e9479 1816check_ldflags -Wl,--warn-common
e240ee67 1817check_ldflags $LDLATEFLAGS
c2fd6530 1818check_ldflags -Wl,-Bsymbolic
94a3401e 1819
bd2216e4
MR
1820if enabled small; then
1821 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
1822 optimizations="small"
1823elif enabled optimizations; then
3dddba4b 1824 if $cc -v 2>&1 | grep -q xlc; then
30a3e5d4
NP
1825 add_cflags "-O5"
1826 add_ldflags "-O5"
cf9d24ad 1827 else
30a3e5d4 1828 add_cflags "-O3"
cf9d24ad 1829 fi
cddf3f45 1830fi
11fdbc44 1831check_cflags -fno-math-errno
b2eb2ff0 1832check_cflags -fno-signed-zeros
cddf3f45 1833
504a64b9
CEH
1834# add some flags for Intel C Compiler
1835if $cc --version | grep -q Intel; then
1836 # Just warnings, no remarks
1837 check_cflags -w1
1838 # -wd: Disable following warnings
1839 # 144, 167, 556: -Wno-pointer-sign
1840 # 10006: ignoring unknown option -fno-signed-zeros
1841 # 10156: ignoring option '-W'; no argument required
1842 check_cflags -wd144,167,556,10006,10156
1843 # 11030: Warning unknown option --as-needed
1844 # 10156: ignoring option '-export'; no argument required
1845 check_ldflags -wd10156,11030
907eb3b5
CEH
1846 # Allow to compile with optimizations
1847 check_ldflags -march=$cpu
504a64b9
CEH
1848fi
1849
80581e98 1850# PIC flags for shared library objects where they are needed
5af4e0cc 1851if enabled shared; then
569cb218
MR
1852 # LIBOBJFLAGS may have already been set in the OS configuration
1853 if test -z "$LIBOBJFLAGS" ; then
1854 case "$arch" in
1855 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1856 esac
1857 fi
80581e98
MN
1858fi
1859
90be59ef 1860if enabled gprof; then
30a3e5d4
NP
1861 add_cflags "-p"
1862 add_ldflags "-p"
1db54e20
DB
1863fi
1864
3b26ee47 1865VHOOKCFLAGS="-fPIC"
18451f7d 1866
7f3c02fc 1867# Find out if the .align argument is a power of two or not.
4454dc1b 1868if test $asmalign_pot = "unknown"; then
497237c7
RP
1869 disable asmalign_pot
1870 echo 'asm (".align 3");' | check_cc && enable asmalign_pot
4454dc1b
JD
1871fi
1872
7483e694
DB
1873enabled_any $DECODER_LIST && enable decoders
1874enabled_any $ENCODER_LIST && enable encoders
1875enabled_any $BSF_LIST && enable bsfs
1876enabled_any $DEMUXER_LIST && enable demuxers
1877enabled_any $MUXER_LIST && enable muxers
f7679c54 1878enabled_any $FILTER_LIST && enable filters
7483e694
DB
1879enabled_any $INDEV_LIST && enable demuxers
1880enabled_any $OUTDEV_LIST && enable muxers
1881enabled_any $PROTOCOL_LIST && enable protocols
1882
1883enabled_any $THREADS_LIST && enable threads
1884
1885check_deps $CONFIG_LIST \
1886 $HAVE_LIST \
1887 $DECODER_LIST \
1888 $ENCODER_LIST \
1889 $PARSER_LIST \
1890 $BSF_LIST \
1891 $DEMUXER_LIST \
1892 $MUXER_LIST \
f7679c54 1893 $FILTER_LIST \
7483e694
DB
1894 $INDEV_LIST \
1895 $OUTDEV_LIST \
1896 $PROTOCOL_LIST \
f70f03f6 1897
f7b8bffe 1898enabled libdc1394 && append pkg_requires "libraw1394"
690bfceb 1899enabled libdirac && append pkg_requires "dirac"
fb2ce7d9 1900enabled libtheora && append pkg_requires "theora"
f9def9cc 1901enabled libvorbis && append pkg_requires "vorbisenc"
fb2ce7d9 1902
3e89171a 1903echo "install prefix $prefix"
f36958f8
DB
1904echo "source path $source_path"
1905echo "C compiler $cc"
bfd5afd8 1906echo ".align is power-of-two $asmalign_pot"
f36958f8 1907echo "ARCH $arch ($cpu)"
ce8871c2
MR
1908if test "$build_suffix" != ""; then
1909 echo "build suffix $build_suffix"
eb94aca9 1910fi
0db2ce77 1911echo "big-endian ${bigendian-no}"
419b8784 1912if test $arch = "x86_32" -o $arch = "x86_64"; then
0db2ce77
MR
1913 echo "MMX enabled ${mmx-no}"
1914 echo "CMOV enabled ${cmov-no}"
1915 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
1916 echo "EBX available ${ebx_available-no}"
1917 echo "EBP available ${ebp_available-no}"
e41e8342 1918fi
cc6a90dd 1919if test $arch = "armv4l"; then
0db2ce77
MR
1920 echo "ARMv5TE enabled ${armv5te-no}"
1921 echo "ARMv6 enabled ${armv6-no}"
f55b299a 1922 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 1923 echo "IWMMXT enabled ${iwmmxt-no}"
eba9ae3c 1924fi
e241ba14 1925if test $arch = "mips"; then
0db2ce77 1926 echo "MMI enabled ${mmi-no}"
e41e8342 1927fi
cc6a90dd 1928if test $arch = "powerpc"; then
0db2ce77
MR
1929 echo "AltiVec enabled ${altivec-no}"
1930 echo "dcbzl available ${dcbzl-no}"
e41e8342 1931fi
0db2ce77
MR
1932echo "gprof enabled ${gprof-no}"
1933echo "debug symbols ${debug-no}"
87a0fb62 1934echo "strip symbols ${stripping-no}"
8400d6b8 1935echo "optimizations ${optimizations-no}"
0db2ce77
MR
1936echo "static ${static-no}"
1937echo "shared ${shared-no}"
4a24ab64 1938echo "postprocessing support ${postproc-no}"
13ca50f3 1939echo "software scaler enabled ${swscale-no}"
f7679c54 1940echo "new filter support ${avfilter-no}"
81124ba0 1941echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 1942echo "video hooking ${vhook-no}"
90be59ef 1943if enabled vhook; then
0db2ce77
MR
1944 echo "Imlib2 support ${imlib2-no}"
1945 echo "FreeType support ${freetype2-no}"
68892110 1946fi
0db2ce77 1947echo "network support ${network-no}"
90be59ef 1948if enabled network; then
0db2ce77 1949 echo "IPv6 support ${ipv6-no}"
bfd5afd8 1950fi
0db2ce77
MR
1951echo "threading support ${thread_type-no}"
1952echo "SDL support ${sdl-no}"
90be59ef 1953if enabled sdl_too_old; then
bfd5afd8
DB
1954 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1955fi
0db2ce77
MR
1956echo "Sun medialib support ${mlib-no}"
1957echo "AVISynth enabled ${avisynth-no}"
1958echo "liba52 support ${liba52-no}"
1959echo "liba52 dlopened ${liba52bin-no}"
1960echo "libamr-nb support ${libamr_nb-no}"
1961echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 1962echo "libdc1394 support ${libdc1394-no}"
690bfceb 1963echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
1964echo "libfaac enabled ${libfaac-no}"
1965echo "libfaad enabled ${libfaad-no}"
7e0871a7 1966echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
1967echo "libgsm enabled ${libgsm-no}"
1968echo "libmp3lame enabled ${libmp3lame-no}"
1969echo "libnut enabled ${libnut-no}"
f7cd9eed 1970echo "libschroedinger enabled ${libschroedinger-no}"
0db2ce77
MR
1971echo "libtheora enabled ${libtheora-no}"
1972echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
1973echo "libx264 enabled ${libx264-no}"
1974echo "libxvid enabled ${libxvid-no}"
0db2ce77 1975echo "zlib enabled ${zlib-no}"
f402916e 1976echo "bzlib enabled ${bzlib-no}"
2c62e737 1977echo
de6d9b64 1978
f7679c54 1979for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 1980 echo "Enabled ${type}s:"
f65c9da1 1981 eval list=\$$(toupper $type)_LIST
8138b9db 1982 for part in $list; do
f65c9da1
MR
1983 enabled $part && echo ${part%_*}
1984 done | sort | pr -3 -t
1985 echo
8138b9db
RP
1986done
1987
ba321adb
JK
1988license="LGPL"
1989if enabled nonfree; then
1990 license="unredistributable"
1991elif enabled gpl; then
1992 license="GPL"
1993fi
1994
1995echo "License: $license"
ca5323af 1996
cf1392e9
DB
1997echo "Creating config.mak and config.h..."
1998
29799f8b
DB
1999echo "# Automatically generated by configure - do not modify!" > config.mak
2000echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2001echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2002echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2003echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
de6d9b64 2004
3e89171a 2005echo "PREFIX=$prefix" >> config.mak
22a324da
DB
2006echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2007echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2008echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2009echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2010echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
980fc7b8
FB
2011echo "CC=$cc" >> config.mak
2012echo "AR=$ar" >> config.mak
be7109c1 2013echo "RANLIB=$ranlib" >> config.mak
20369773 2014echo "LN_S=$ln_s" >> config.mak
87a0fb62 2015enabled stripping &&
3ae3b721 2016 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2017 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2018
a9b3f630 2019echo "OPTFLAGS=$CFLAGS" >> config.mak
2270b4b2 2020echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
0f3cb305 2021echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2022echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2023echo "SHFLAGS=$SHFLAGS" >> config.mak
408382a4 2024echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
fbb9d104 2025echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
80581e98 2026echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2027echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2028echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2029echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2030echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2031echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2032echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2033echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2034echo "SLIBSUF=$SLIBSUF" >> config.mak
2035echo "EXESUF=$EXESUF" >> config.mak
315c741d 2036echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
4dc62701 2037
90be59ef 2038if enabled bigendian; then
7483e694
DB
2039 echo "WORDS_BIGENDIAN=yes" >> config.mak
2040 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2041fi
44161118 2042
90be59ef 2043if enabled sdl; then
7483e694
DB
2044 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2045 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 2046fi
90be59ef 2047if enabled texi2html; then
7483e694 2048 echo "BUILD_DOC=yes" >> config.mak
146ea952 2049fi
5a872801 2050
719c8e00
MR
2051get_version(){
2052 name=$1
2053 file=$source_path/$2
147e7692
MR
2054 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2055 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2056 lcname=$(tolower $name)
2057 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2058 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2059}
2060
147e7692
MR
2061get_version LIBSWSCALE libswscale/swscale.h
2062get_version LIBPOSTPROC libpostproc/postprocess.h
2063get_version LIBAVCODEC libavcodec/avcodec.h
2064get_version LIBAVDEVICE libavdevice/avdevice.h
2065get_version LIBAVFORMAT libavformat/avformat.h
2066get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2067get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2068
5af4e0cc 2069if enabled shared; then
7483e694
DB
2070 echo "BUILD_SHARED=yes" >> config.mak
2071 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2072 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2073 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2074 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2075 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2076 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2077 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2078 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2079 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2080fi
d7e27559 2081echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2082echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2083
3d907e22
MR
2084print_config ARCH_ $TMPH config.mak $ARCH_LIST
2085print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694
DB
2086print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2087 $DECODER_LIST \
2088 $ENCODER_LIST \
2089 $PARSER_LIST \
2090 $BSF_LIST \
2091 $DEMUXER_LIST \
2092 $MUXER_LIST \
f7679c54 2093 $FILTER_LIST \
7483e694
DB
2094 $PROTOCOL_LIST \
2095 $INDEV_LIST \
2096 $OUTDEV_LIST \
8ac17293 2097
c13e1abd
FH
2098echo "#define restrict $_restrict" >> $TMPH
2099
bd2216e4 2100if enabled small; then
7483e694 2101 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2102fi
2103
997baf01
MR
2104echo "SRC_PATH=\"$source_path\"" >> config.mak
2105echo "SRC_PATH_BARE=$source_path" >> config.mak
2106echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 2107
8156056e 2108# Apparently it's not possible to portably echo a backslash.
3ae3b721 2109enabled asmalign_pot &&
7483e694
DB
2110 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2111 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2112
b4d96ba2 2113echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2114
9c05103f
DB
2115echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2116
b7860763 2117# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2118cmp -s $TMPH config.h &&
2119 echo "config.h is unchanged" ||
2120 mv -f $TMPH config.h
3d204385 2121
cea0ac52 2122rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
def4272a 2123
165af439 2124# build tree in object directory if source path is different from current one
90be59ef 2125if enabled source_path_used; then
165af439 2126 DIRS="\
7483e694
DB
2127 doc \
2128 libavcodec \
2129 libavcodec/alpha \
2130 libavcodec/armv4l \
2131 libavcodec/bfin \
2132 libavcodec/i386 \
2133 libavcodec/mlib \
2134 libavcodec/ppc \
2135 libavcodec/sh4 \
2136 libavcodec/sparc \
52a9cf34 2137 libavdevice \
f7679c54 2138 libavfilter \
7483e694
DB
2139 libavformat \
2140 libavutil \
2141 libpostproc \
2142 libswscale \
2143 tests \
2144 tools \
2145 vhook \
2146 "
165af439 2147 FILES="\
7483e694
DB
2148 Makefile \
2149 common.mak \
71c61f62 2150 subdir.mak \
7483e694
DB
2151 doc/texi2pod.pl \
2152 libavcodec/Makefile \
52a9cf34 2153 libavdevice/Makefile \
f7679c54 2154 libavfilter/Makefile \
7483e694
DB
2155 libavformat/Makefile \
2156 libavutil/Makefile \
2157 libpostproc/Makefile \
2158 libswscale/Makefile \
2159 "
165af439 2160 for dir in $DIRS ; do
7483e694 2161 mkdir -p $dir
165af439
MR
2162 done
2163 for f in $FILES ; do
20369773 2164 $ln_s "$source_path/$f" $f
165af439
MR
2165 done
2166fi
def4272a 2167
def4272a 2168
d0674868 2169# build pkg-config files
def4272a 2170
d0674868
DB
2171pkgconfig_generate(){
2172name=$1
e426941d 2173shortname=${name#lib}
d0674868
DB
2174comment=$2
2175version=$3
2176libs=$4
2177requires=$5
2270b4b2 2178cat <<EOF > $name.pc
3e89171a 2179prefix=$prefix
a94e666c 2180exec_prefix=\${prefix}
f2b7382c 2181libdir=$libdir
7622778e 2182includedir=$incdir
def4272a 2183
d0674868
DB
2184Name: $name
2185Description: $comment
2186Version: $version
5dcfe9f8
AH
2187Requires: $(disabled shared && echo $requires)
2188Requires.private: $(enabled shared && echo $requires)
def4272a 2189Conflicts:
12701f6e
AH
2190Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2191Libs.private: $(enabled shared && echo $libs)
76a448ed 2192Cflags: -I\${includedir}
def4272a 2193EOF
2270b4b2 2194cat <<EOF > $name-uninstalled.pc
def4272a
AJ
2195prefix=
2196exec_prefix=
d0674868 2197libdir=\${pcfiledir}/$name
7622778e 2198includedir=\${pcfiledir}
def4272a 2199
d0674868
DB
2200Name: $name
2201Description: $comment
2202Version: $version
2203Requires: $requires
def4272a 2204Conflicts:
12701f6e 2205Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2206Cflags: -I\${includedir}
2207EOF
d0674868 2208}
def4272a 2209
e426941d 2210pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
e426941d 2211pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
e426941d 2212pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
e426941d 2213pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
35a71f1d
DB
2214enabled avfilter && \
2215 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2216enabled postproc && \
e426941d 2217 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
13ca50f3 2218if enabled swscale; then
e426941d 2219 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
6c0d0413 2220else
f436a23e 2221 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
7483e694 2222 apply libswscale.pc sed s/^Libs:.*$/Libs:/
6c0d0413 2223fi