cosmetics: Split all path variables into their own list.
[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"
426be5dc
DB
786
787PATHS_LIST='
d156bede 788 bindir
26759c44
MR
789 incdir
790 libdir
26759c44
MR
791 mandir
792 prefix
793 shlibdir
426be5dc
DB
794'
795
796CMDLINE_SET="
797 $PATHS_LIST
798 arch
799 build_suffix
800 cc
801 cpu
802 cross_prefix
803 logfile
26759c44
MR
804 source_path
805 target_os
426be5dc 806"
520cc7f1 807
912f3148
DB
808# code dependency declarations
809
9eeed841
MR
810# architecture extensions
811altivec_deps="powerpc"
812armv5te_deps="armv4l"
813armv6_deps="armv4l"
f55b299a 814armvfp_deps="armv4l"
9eeed841 815iwmmxt_deps="armv4l"
e241ba14 816mmi_deps="mips"
9eeed841 817mmx_deps="x86"
fbef871d 818mmx2_deps="x86 mmx"
9eeed841 819ssse3_deps="x86"
bd9d34a0 820vis_deps="sparc"
9eeed841 821
912f3148 822# decoders / encoders
6ea67bbb 823ac3_decoder_deps="gpl"
33a0dd37 824dxa_decoder_deps="zlib"
30fd06be 825flashsv_decoder_deps="zlib"
773be23a 826flashsv_encoder_deps="zlib"
30fd06be
MR
827mpeg_xvmc_decoder_deps="xvmc"
828png_decoder_deps="zlib"
829png_encoder_deps="zlib"
30fd06be
MR
830zmbv_decoder_deps="zlib"
831zmbv_encoder_deps="zlib"
832
912f3148 833# external libraries
7bc5f2a8 834liba52_decoder_deps="liba52"
4ec45764 835liba52bin_decoder_extralibs='$ldl'
f5a756ef
DB
836libamr_nb_decoder_deps="libamr_nb"
837libamr_nb_encoder_deps="libamr_nb"
838libamr_wb_decoder_deps="libamr_wb"
839libamr_wb_encoder_deps="libamr_wb"
690bfceb
AS
840libdirac_decoder_deps="libdirac"
841libdirac_encoder_deps="libdirac"
c9171a83 842libfaac_encoder_deps="libfaac"
69ddbd1d 843libfaad_decoder_deps="libfaad"
4ec45764 844libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
845libgsm_decoder_deps="libgsm"
846libgsm_encoder_deps="libgsm"
8ffed8d8
MR
847libgsm_ms_decoder_deps="libgsm"
848libgsm_ms_encoder_deps="libgsm"
1cc60c47 849libmp3lame_encoder_deps="libmp3lame"
f7cd9eed
AS
850libschroedinger_decoder_deps="libschroedinger"
851libschroedinger_encoder_deps="libschroedinger"
150d2772 852libtheora_encoder_deps="libtheora"
b0caf888 853libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
854libx264_encoder_deps="libx264"
855libxvid_encoder_deps="libxvid"
13566c31 856mpeg4aac_decoder_deps="libfaad"
30fd06be 857
912f3148 858# demuxers / muxers
03a76ba9 859ac3_demuxer_deps="ac3_parser"
50383e88 860audio_beos_demuxer_deps="audio_beos"
4ec45764 861audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 862audio_beos_muxer_deps="audio_beos"
4ec45764 863audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 864avisynth_demuxer_deps="avisynth"
73483024 865bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 866dirac_demuxer_deps="dirac_parser"
fe9bb347 867dv1394_demuxer_deps="dv1394 dv_demuxer"
f7b8bffe 868libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
869libnut_demuxer_deps="libnut"
870libnut_muxer_deps="libnut"
4bd8e17c 871mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
872oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
873oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 874redir_demuxer_deps="network"
8eb793c4 875rtp_muxer_deps="network rtp_protocol"
95c21842
LA
876rtsp_demuxer_deps="sdp_demuxer"
877sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 878v4l_demuxer_deps="linux_videodev_h"
530dc538 879v4l2_demuxer_deps="linux_videodev2_h"
c2345207
RP
880vfwcap_demuxer_deps="capCreateCaptureWindow"
881vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 882x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 883x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 884
912f3148 885# protocols
c08fb000
AB
886http_protocol_deps="network"
887rtp_protocol_deps="udp_protocol"
888tcp_protocol_deps="network"
889udp_protocol_deps="network"
890
f7679c54 891# filters
81124ba0 892movie_filter_deps="avfilter_lavf"
f7679c54 893
912f3148 894# programs
fa859b4d 895ffplay_deps="sdl"
6ad42348 896ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764
RP
897ffserver_extralibs='$ldl'
898vhook_extralibs='$ldl'
a2830dca 899
912f3148 900
de6d9b64 901# default parameters
8a608357 902
2ba042a7 903logfile="config.err"
8a608357
MR
904
905# installation paths
3e89171a 906prefix="/usr/local"
c75560ae 907libdir='$(PREFIX)/lib'
84c22efd 908shlibdir="$libdir"
76a448ed 909incdir='$(PREFIX)/include'
4ca5ece5 910mandir='$(PREFIX)/share/man'
c75560ae 911bindir='$(PREFIX)/bin'
8a608357
MR
912
913# toolchain
de6d9b64
FB
914cc="gcc"
915ar="ar"
503d5b58 916nm="nm"
be7109c1 917ranlib="ranlib"
0f3cb305 918strip="strip"
8a608357 919asmalign_pot="unknown"
20369773 920ln_s="ln -sf"
8a608357
MR
921
922# machine
cc6a90dd 923arch=`uname -m`
38d0a8aa 924cpu="generic"
8a608357 925
8a608357 926# OS
4f854758 927target_os=$(tolower $(uname -s))
8a608357 928
8a608357 929# libraries
f402916e 930enable bzlib
497237c7 931enable zlib
8a608357
MR
932
933# configurable options
497237c7 934enable debug
497237c7
RP
935enable ffmpeg
936enable ffplay
937enable ffserver
938enable ipv6
497237c7
RP
939enable mpegaudio_hp
940enable network
8400d6b8 941enable optimizations
497237c7 942enable protocols
530dc538 943enable static
87a0fb62 944enable stripping
8a608357
MR
945vhook="default"
946
8a608357 947# build settings
9987769a 948SHFLAGS='-shared -Wl,-soname,$$(@F)'
cab3ef82 949VHOOKSHFLAGS='$(SHFLAGS)'
e240ee67 950LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c536cb09 951FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
952LIBPREF="lib"
953LIBSUF=".a"
c5f14466
RP
954FULLNAME='$(NAME)$(BUILDSUF)'
955LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
956SLIBPREF="lib"
957SLIBSUF=".so"
c5f14466 958SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
959SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
960SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 961LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 962
315c741d 963# gcc stupidly only outputs the basename of targets with -MM
1489db82 964DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/,"'
315c741d 965
c597172e
MR
966# find source path
967source_path="`dirname \"$0\"`"
497237c7 968enable source_path_used
c597172e
MR
969if test -z "$source_path" -o "$source_path" = "." ; then
970 source_path="`pwd`"
497237c7 971 disable source_path_used
c597172e
MR
972else
973 source_path="`cd \"$source_path\"; pwd`"
974 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 975 die "Out of tree builds are impossible with whitespace in source path."
c597172e
MR
976fi
977
c597172e
MR
978FFMPEG_CONFIGURATION="$@"
979
73ef8980
MR
980find_things(){
981 thing=$1
982 pattern=$2
983 file=$source_path/$3
932ccf39 984 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
985}
986
987ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
988DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
989PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
990BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
991MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
992DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
993OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
994INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
995PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 996FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 997
7483e694
DB
998enable $ARCH_EXT_LIST \
999 $DECODER_LIST \
1000 $ENCODER_LIST \
1001 $PARSER_LIST \
1002 $BSF_LIST \
1003 $DEMUXER_LIST \
1004 $MUXER_LIST \
f7679c54 1005 $FILTER_LIST \
7483e694
DB
1006 $PROTOCOL_LIST \
1007 $INDEV_LIST \
1008 $OUTDEV_LIST \
c597172e
MR
1009
1010die_unknown(){
1011 echo "Unknown option \"$1\"."
1012 echo "See $0 --help for available options."
1013 exit 1
1014}
1015
794f8e97 1016show_list() {
bf0c4afa
RP
1017 suffix=_$1
1018 shift
1019 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1020 exit 0
1021}
1022
c597172e 1023for opt do
7483e694
DB
1024 optval="${opt#*=}"
1025 case "$opt" in
7483e694
DB
1026 --extra-cflags=*) add_cflags "$optval"
1027 ;;
1028 --extra-ldflags=*) add_ldflags "$optval"
1029 ;;
1030 --extra-libs=*) add_extralibs "$optval"
1031 ;;
8fb1cb58 1032 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1033 ;;
40bcf4c7
BL
1034 --enable-debug=*) debuglevel="$optval"
1035 ;;
7483e694
DB
1036 --enable-*=*|--disable-*=*)
1037 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1038 case "$thing" in
81124ba0 1039 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1040 *) die_unknown "$opt" ;;
1041 esac
1042 ;;
1043 --enable-?*|--disable-?*)
1044 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
e3773a55
MR
1045 if is_in $option $COMPONENT_LIST; then
1046 eval $action \$$(toupper ${option%s})_LIST
1047 elif is_in $option $CMDLINE_SELECT; then
1048 $action $option
1049 else
1050 die_unknown $opt
1051 fi
7483e694
DB
1052 ;;
1053 --list-*)
1054 NAME="${opt#--list-}"
1055 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1056 NAME=${NAME%s}
1057 eval show_list $NAME \$$(toupper $NAME)_LIST
1058 ;;
1059 --help|-h) show_help
1060 ;;
1061 *)
26759c44
MR
1062 optname="${opt%=*}"
1063 optname="${optname#--}"
1064 optname=$(echo "$optname" | sed 's/-/_/g')
1065 is_in $optname $CMDLINE_SET || die_unknown $opt
1066 eval $optname='$optval'
7483e694
DB
1067 ;;
1068 esac
c597172e
MR
1069done
1070
bcea99bb
MR
1071disabled logging && logfile=/dev/null
1072
1073echo "# $0 $@" > $logfile
1074set >> $logfile
1075
adb2b908
RP
1076cc="${cross_prefix}${cc}"
1077ar="${cross_prefix}${ar}"
1078nm="${cross_prefix}${nm}"
1079ranlib="${cross_prefix}${ranlib}"
1080strip="${cross_prefix}${strip}"
1081
e4e69e0b
MR
1082# set temporary file name
1083if test ! -z "$TMPDIR" ; then
1084 TMPDIR1="${TMPDIR}"
1085elif test ! -z "$TEMPDIR" ; then
1086 TMPDIR1="${TEMPDIR}"
1087else
1088 TMPDIR1="/tmp"
1089fi
1090
1091TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1092TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1093TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1094TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1095TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1096TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1097
b24dbcbd
RP
1098case "$arch" in
1099 i386|i486|i586|i686|i86pc|BePC)
1100 arch="x86_32"
1101 enable fast_unaligned
1102 ;;
1103 x86_64|amd64)
1104 arch="x86_32"
1105 enable fast_unaligned
1106 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1107 int test[sizeof(char*) - 7];
1108EOF
1109 ;;
1110 # armv4l is a subset of armv[567]*l
1111 arm|armv[4567]*l)
1112 arch="armv4l"
1113 ;;
1114 alpha)
1115 arch="alpha"
1116 enable fast_64bit
1117 ;;
1118 "Power Macintosh"|ppc|powerpc)
1119 arch="powerpc"
1120 ;;
1121 ppc64)
1122 arch="powerpc"
1123 enable fast_64bit
1124 ;;
1125 mips|mipsel|IP*)
1126 arch="mips"
1127 ;;
1128 sun4u|sparc64)
1129 arch="sparc64"
1130 enable fast_64bit
1131 ;;
1132 sparc)
1133 arch="sparc"
1134 ;;
1135 sh4)
1136 arch="sh4"
1137 ;;
1138 parisc)
1139 arch="parisc"
1140 ;;
1141 parisc64)
1142 arch="parisc"
1143 enable fast_64bit
1144 ;;
1145 s390|s390x)
1146 arch="s390"
1147 ;;
1148 m68k)
1149 arch="m68k"
1150 ;;
1151 ia64)
1152 arch="ia64"
1153 enable fast_64bit
1154 ;;
1155 bfin)
1156 arch="bfin"
1157 ;;
1158 *)
1159 arch="unknown"
1160 ;;
1161esac
1162
1163enable $arch
1164enabled_any x86_32 x86_64 && enable x86
1165enabled sparc64 && enable sparc
1166
7483e694 1167# OS specific
4f854758 1168case $target_os in
7483e694 1169 beos|haiku|zeta)
3e89171a 1170 prefix="$HOME/config"
7483e694
DB
1171 # helps building libavcodec
1172 add_cflags "-DPIC -fomit-frame-pointer"
1173 # 3 gcc releases known for BeOS, each with ugly bugs
1174 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1175 case "$gcc_version" in
1176 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1177 disable mmx
1178 ;;
1179 *20010315*) echo "BeBits gcc"
1180 add_cflags "-fno-expensive-optimizations"
1181 ;;
1182 esac
7483e694
DB
1183 SHFLAGS=-nostart
1184 # enable BeOS things
1185 enable audio_beos
1186 # no need for libm, but the inet stuff
1187 # Check for BONE
1188 # XXX: actually should check for NOT net_server
78fe7631 1189 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1190 network_extralibs="-lbind -lsocket"
1191 else
1192 enable beos_netserver
1193 network_extralibs="-lnet"
1194 fi ;;
1195 sunos)
1196 FFSERVERLDFLAGS=""
9987769a 1197 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694
DB
1198 network_extralibs="-lsocket -lnsl"
1199 ;;
1200 netbsd)
1201 oss_demuxer_extralibs="-lossaudio"
1202 oss_muxer_extralibs="-lossaudio"
1203 ;;
1204 openbsd)
1205 disable need_memalign
1206 LIBOBJFLAGS='$(PIC)'
7483e694
DB
1207 SHFLAGS='-shared'
1208 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1209 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1210 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1211 oss_demuxer_extralibs="-lossaudio"
1212 oss_muxer_extralibs="-lossaudio"
1213 ;;
1214 freebsd)
1215 disable need_memalign
1216 ;;
1217 bsd/os)
1218 osextralibs="-lpoll -lgnugetopt"
1219 strip="strip -d"
1220 ;;
1221 darwin)
1222 disable need_memalign
0138c54e 1223 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
9987769a 1224 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
7483e694
DB
1225 strip="strip -x"
1226 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1227 SLIBSUF=".dylib"
1228 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1229 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1230 FFSERVERLDFLAGS=-Wl,-bind_at_load
1231 ;;
1232 mingw32*)
4f854758 1233 target_os=mingw32
dcc01c06
RP
1234 LIBTARGET=i386
1235 if test $arch = x86_64; then
1236 disable need_memalign
1237 LIBTARGET=x64
1238 fi
7483e694
DB
1239 shlibdir="$bindir"
1240 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1241 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
13ca50f3 1242 if enabled swscale; then
7483e694
DB
1243 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1244 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1245 fi
1246 disable ffserver
1247 SLIBPREF=""
1248 SLIBSUF=".dll"
1249 EXESUF=".exe"
1250 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1251 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
dcc01c06 1252 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1253 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1254 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1255 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
71c61f62 1256 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
7483e694
DB
1257 ;;
1258 cygwin*)
4f854758 1259 target_os=cygwin
7483e694
DB
1260 shlibdir="$bindir"
1261 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1262 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
13ca50f3 1263 if enabled swscale; then
7483e694
DB
1264 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1265 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1266 fi
1267 EXESUF=".exe"
1268 SLIBPREF="cyg"
1269 SLIBSUF=".dll"
1270 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1271 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1272 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1273 ;;
4f365f37 1274 *-dos|freedos|opendos)
4f365f37
MK
1275 disable ffplay ffserver vhook
1276 disable $INDEV_LIST $OUTDEV_LIST
1277 network_extralibs="-lsocket"
1278 EXESUF=".exe"
1279 ;;
7483e694
DB
1280 linux)
1281 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1282 enable dv1394
1283 ;;
1284 irix*)
4f854758 1285 target_os=irix
7483e694
DB
1286 ranlib="echo ignoring ranlib"
1287 ;;
d22e8442 1288 os/2*)
d22e8442
DY
1289 strip="lxlite"
1290 ln_s="cp -f"
d22e8442
DY
1291 EXESUF=".exe"
1292 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1293 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1294 FFSERVERLDFLAGS=""
287d3b13 1295 LIBSUF="_s.a"
d22e8442
DY
1296 SLIBPREF=""
1297 SLIBSUF=".dll"
1298 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1299 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1300 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1301 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1302 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1303 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1304 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1305 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1306 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1307 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1308 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1309 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
c6eed369 1310 disable vhook
d22e8442 1311 ;;
269820f1
PR
1312 interix)
1313 disable vhook
1314 ;;
d22e8442 1315
7483e694 1316 *)
4f854758 1317 target_os="${target_os}-UNKNOWN"
7483e694
DB
1318 ;;
1319esac
1320
c597172e 1321add_extralibs $osextralibs
de6d9b64 1322
28d8e661
DB
1323# Combine FFLDFLAGS and the LDFLAGS environment variable.
1324LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1325
497237c7 1326test -n "$cross_prefix" && enable cross_compile
1ea46bed 1327
320d060a 1328# we need to build at least one lib type
93b3c083 1329if ! enabled_any static shared; then
320d060a
DB
1330 cat <<EOF
1331At least one library type must be built.
1332Specify --enable-static to build the static libraries or --enable-shared to
1333build the shared libraries as well. To only build the shared libraries specify
1334--disable-static in addition to --enable-shared.
1335EOF
1336 exit 1;
1337fi
1338
abc4e572 1339disabled static && LIBNAME=""
2a320695 1340
a2234ceb
RP
1341if enabled_any libfaad libfaadbin ; then
1342 if check_header faad.h; then
1343 check_cc << EOF
1344#include <faad.h>
1345#ifndef FAAD2_VERSION
1346ok faad1
1347#endif
db817cf3 1348int main(void) { return 0; }
a2234ceb
RP
1349EOF
1350 test $? = 0 && enable libfaad2
1351 else
ff3dac65 1352 die "FAAD test failed."
a2234ceb
RP
1353 fi
1354fi
1355
1356
93b3c083 1357if ! enabled gpl; then
54118497
RP
1358 die_gpl_disabled(){
1359 name=$1
1360 shift
1361 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1362 }
4a24ab64 1363 die_gpl_disabled "The Postprocessing code" postproc
7bc5f2a8 1364 die_gpl_disabled "liba52" liba52
1cc60c47
DB
1365 die_gpl_disabled "libx264" libx264
1366 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1367 die_gpl_disabled "FAAD2" libfaad2
1368 die_gpl_disabled "The X11 grabber" x11grab
13ca50f3 1369 die_gpl_disabled "The software scaler" swscale
ebb810d9 1370fi
b2e3c528 1371
3fe142e2
DB
1372if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1373 die "libamr is nonfree and --enable-nonfree is not specified."
1374fi
1375
9eeed841 1376check_deps $ARCH_EXT_LIST
0f3cb305 1377
5d323602
MR
1378test -z "$need_memalign" && need_memalign="$mmx"
1379
cf9d24ad 1380#Darwin CC versions
4f854758 1381if test $target_os = darwin; then
3dddba4b 1382 if $cc -v 2>&1 | grep -q xlc; then
30a3e5d4 1383 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
cf9d24ad 1384 else
8541cc27 1385 add_cflags "-pipe"
26c1b3be
DB
1386 check_cflags "-force_cpusubtype_ALL"
1387 check_cflags "-Wno-sign-compare"
f946a9a4 1388 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1389 fi
2a1a6b64
MN
1390fi
1391
8400d6b8 1392disabled optimizations || add_cflags -fomit-frame-pointer
cf9d24ad 1393
a4adb608 1394# Add processor-specific flags
38d0a8aa 1395if test $cpu != "generic"; then
bc8ec47b
MR
1396 warn_altivec(){
1397 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1398 }
38d0a8aa 1399 case $cpu in
bb270c08 1400 601|ppc601|PowerPC601)
1c5d830c 1401 add_cflags "-mcpu=601"
bc8ec47b 1402 warn_altivec enabled PPC601
bb270c08
DB
1403 ;;
1404 603*|ppc603*|PowerPC603*)
1c5d830c 1405 add_cflags "-mcpu=603"
bc8ec47b 1406 warn_altivec enabled PPC603
bb270c08
DB
1407 ;;
1408 604*|ppc604*|PowerPC604*)
1c5d830c 1409 add_cflags "-mcpu=604"
bc8ec47b 1410 warn_altivec enabled PPC604
bb270c08
DB
1411 ;;
1412 G3|g3|75*|ppc75*|PowerPC75*)
1c5d830c 1413 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
bc8ec47b 1414 warn_altivec enabled PPC75x
bb270c08
DB
1415 ;;
1416 G4|g4|745*|ppc745*|PowerPC745*)
1c5d830c 1417 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
bc8ec47b 1418 warn_altivec disabled PPC745x
bb270c08
DB
1419 ;;
1420 74*|ppc74*|PowerPC74*)
1c5d830c 1421 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
bc8ec47b 1422 warn_altivec disabled PPC74xx
bb270c08
DB
1423 ;;
1424 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1c5d830c 1425 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
bc8ec47b 1426 warn_altivec disabled PPC970
9cafbd6c 1427 enable ppc64
bb270c08 1428 ;;
e07e357d
LB
1429 Cell|CELL|cell)
1430 add_cflags "-mcpu=cell"
1431 warn_altivec disabled Cell
9cafbd6c 1432 enable ppc64
e07e357d 1433 ;;
e7768fc5
GP
1434 # targets that do NOT support conditional mov (cmov)
1435 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
38d0a8aa 1436 add_cflags "-march=$cpu"
497237c7 1437 disable cmov
e7768fc5
GP
1438 ;;
1439 # targets that do support conditional mov (cmov)
416519dd 1440 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
e7768fc5 1441 add_cflags "-march=$cpu"
497237c7
RP
1442 enable cmov
1443 enable fast_cmov
94e4c3a3
GP
1444 ;;
1445 # targets that do support conditional mov but on which it's slow
800a5a19 1446 pentium4|pentium4m|prescott|nocona)
94e4c3a3 1447 add_cflags "-march=$cpu"
497237c7
RP
1448 enable cmov
1449 disable fast_cmov
bb270c08 1450 ;;
d7b34d08 1451 sparc64)
1c5d830c 1452 add_cflags "-mcpu=v9"
d7b34d08 1453 ;;
6b19786b
MR
1454 arm*)
1455 add_cflags "-mcpu=$cpu"
1456 ;;
bb270c08 1457 *)
7483e694 1458 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1459 ;;
a4adb608
MN
1460 esac
1461fi
1462
be0d52ab 1463# make sure we can execute files in $TMPDIR
2270b4b2 1464cat > $TMPSH 2>> $logfile <<EOF
be0d52ab
MR
1465#! /bin/sh
1466EOF
2270b4b2
DB
1467chmod +x $TMPSH >> $logfile 2>&1
1468if ! $TMPSH >> $logfile 2>&1; then
be0d52ab
MR
1469 cat <<EOF
1470Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
68300911
DB
1471variable to another directory and make sure that $TMPDIR1 is not mounted
1472noexec.
be0d52ab
MR
1473EOF
1474 die "Sanity test failed."
1475fi
edd08265 1476rm $TMPSH
be0d52ab 1477
1a268acc
MR
1478# compiler sanity check
1479check_exec <<EOF
c23a0ac8 1480int main(void){ return 0; }
1a268acc
MR
1481EOF
1482if test "$?" != 0; then
1483 echo "$cc is unable to create an executable file."
93b3c083 1484 if test -z "$cross_prefix" && ! enabled cross_compile ; then
db6107b6 1485 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
c7ae6345 1486 echo "Only do this if you know what cross compiling means."
1a268acc
MR
1487 fi
1488 die "C compiler test failed."
1489fi
1490
b4d96ba2
MR
1491check_cc <<EOF || die "Symbol mangling check failed."
1492int ff_extern;
1493EOF
2f05d9c1 1494sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1495extern_prefix=${sym%%ff_extern*}
1496
61d251db
MR
1497check_asm inline_asm '""'
1498
9eeed841 1499if enabled x86; then
44965991
PI
1500 # check whether EBP is available on x86
1501 # As 'i' is stored on the stack, this program will crash
1502 # if the base pointer is used to access it because the
1503 # base pointer is cleared in the inline assembly code.
7dfef245 1504 check_exec_crash <<EOF && enable ebp_available
44965991
PI
1505 volatile int i=0;
1506 asm volatile (
1507 "xorl %%ebp, %%ebp"
1508 ::: "%ebp");
1509 return i;
44965991
PI
1510EOF
1511
1512 # check wether EBX is available on x86
940f335a 1513 check_asm ebx_available '"":::"%ebx"'
8e380710 1514
d7f0920b 1515 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1516 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
d7f0920b 1517 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
6bd859d6
MR
1518
1519 check_asm bswap '"bswap %%eax" ::: "%eax"'
44965991
PI
1520fi
1521
87ea51e0
LB
1522# check for assembler specific support
1523
cc6a90dd 1524if test $arch = "powerpc"; then
497237c7 1525check_cc <<EOF && enable dcbzl
87ea51e0
LB
1526int main(void) {
1527 register long zero = 0;
1528 char data[1024];
1529 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1530return 0;
1531}
1532EOF
1533fi
1534
57bd82d4
MR
1535# check for SIMD availability
1536
115329f1 1537# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1538if enabled altivec; then
3ed1a2ee
DB
1539 check_cflags -maltivec -mabi=altivec &&
1540 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1541 check_cflags -faltivec
b6e52719 1542
0182fee8 1543 # check if our compiler supports Motorola AltiVec C API
497237c7 1544 check_cc <<EOF || disable altivec
dcd479c0 1545$inc_altivec_h
a9a07762
MN
1546int main(void) {
1547 vector signed int v1, v2, v3;
1548 v1 = vec_add(v2,v3);
1549 return 0;
1550}
1551EOF
b006b26c
DB
1552
1553 # check if our compiler supports braces for vector declarations
1554 check_cc <<EOF && enable altivec_vector_braces
1555$inc_altivec_h
1556#define AVV(x...) {x}
1557int main (void) { (vector int) AVV(1); return 0; }
1558EOF
a9a07762 1559fi
ab6c65f6 1560
b4e806b2
MC
1561# We have to check if pld is a nop and disable it.
1562enabled armv4l && check_asm pld '"pld [r0]"'
940f335a
MR
1563enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1564enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
f55b299a 1565enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1566enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1567enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1568enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1569
8b03def6
DB
1570enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1571
57bd82d4
MR
1572# ---
1573# big/little-endian test
9eebe687
MR
1574check_cc <<EOF || die "endian test failed"
1575unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1576EOF
d04d9e16 1577od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1578
a3999908 1579# ---
3d204385
NK
1580# check availability of some header files
1581
a98bb16d
RP
1582if check_func dlopen; then
1583 ldl=
1584elif check_func dlopen -ldl; then
1585 ldl=-ldl
8bf5d58f
MN
1586fi
1587
7483e694
DB
1588check_func fork
1589check_func gethrtime
1590check_func getrusage
094c09bb 1591check_func inet_aton $network_extralibs
7483e694
DB
1592check_func memalign
1593check_func mkstemp
a98bb16d 1594check_func2 windows.h GetProcessTimes
6ffa87d3 1595
a98bb16d 1596check_header byteswap.h
e16e49ac 1597check_header conio.h
a98bb16d
RP
1598check_header dlfcn.h
1599check_header malloc.h
b58412f1 1600check_header sys/mman.h
b091aa44 1601check_header sys/resource.h
a98bb16d
RP
1602check_header termios.h
1603
1604if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1605 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1606fi
e16e49ac 1607
e8214e0e 1608enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
f402916e 1609enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4 1610
b0c858d8
FR
1611# ffserver uses poll(),
1612# if it's not found we can emulate it using select().
1613if enabled ffserver; then
f8cda19e 1614 check_header poll.h
81644c2e 1615 check_header sys/select.h
b0c858d8
FR
1616fi
1617
57bd82d4
MR
1618# check for some common methods of building with pthread support
1619# do this before the optional library checks as some of them require pthreads
1620if enabled pthreads; then
9e7fd101
MR
1621 if check_func pthread_create; then
1622 :
1623 elif check_func pthread_create -pthread; then
1624 add_cflags -pthread
afc9aee2 1625 add_extralibs -pthread
9e7fd101
MR
1626 elif check_func pthread_create -pthreads; then
1627 add_cflags -pthreads
afc9aee2 1628 add_extralibs -pthreads
8d94f606
GT
1629 elif check_func pthread_create -lpthreadGC2; then
1630 add_extralibs -lpthreadGC2
9e7fd101
MR
1631 elif ! check_lib pthread.h pthread_create -lpthread; then
1632 die "ERROR: can't find pthreads library"
1633 fi
57bd82d4
MR
1634fi
1635
8eee7025 1636for thread in $THREADS_LIST; do
e5f94c2b 1637 if enabled $thread; then
3ae3b721
RP
1638 test -n "$thread_type" &&
1639 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 1640 thread_type="$thread"
e5f94c2b
RP
1641 fi
1642done
1643
fdf88598
MR
1644check_lib math.h sin -lm
1645
a33cab3a
MK
1646# test for C99 functions in math.h
1647for func in llrint lrint lrintf round roundf; do
1648 check_exec <<EOF && enable $func || disable $func
f32adb22
MR
1649#define _ISOC9X_SOURCE 1
1650#include <math.h>
a33cab3a 1651int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 1652EOF
a33cab3a 1653done
f32adb22 1654
57bd82d4 1655# these are off by default, so fail if requested and not available
79fda097 1656enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
1657enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
1658enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1659enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
690bfceb
AS
1660enabled libdirac && add_cflags "$(pkg-config --cflags dirac)" \
1661 && require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1662 && require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
1663enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1664enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694
DB
1665enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1666enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1667enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
f7cd9eed 1668enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
0eeb52f9 1669 && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
7483e694
DB
1670enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1671enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
18ee626c 1672enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lm
7483e694
DB
1673enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1674enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 1675
6ea67bbb
JR
1676# disable the native AC-3 decoder if liba52 is enabled
1677enabled liba52 && disable ac3_decoder
1678
3f89d9c0
AS
1679# disable the slower libdirac decoder if libschroedinger is enabled
1680enabled libschroedinger && enabled libdirac && disable libdirac_decoder
1681
0b4a1821
AS
1682# libdc1394 check
1683if enabled libdc1394; then
1684 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1685 enable libdc1394_2; } ||
1686 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1687 enable libdc1394_1; } ||
1688 die "ERROR: No version of libdc1394 found "
1689fi
1690
1691
c13e1abd
FH
1692_restrict=
1693for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 1694 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
1695void foo(char * $restrict_keyword p);
1696EOF
c13e1abd
FH
1697done
1698
703afd07 1699test "$vhook" = "default" && vhook="$dlopen"
a8721c09 1700
4f854758 1701if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
497237c7 1702 disable vhook
fbb9d104 1703 echo
b0268cc0 1704 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
fbb9d104
VP
1705 echo "Patches welcome."
1706 echo
1707fi
1708
8d923001
MR
1709if enabled vhook; then
1710 check_ldflags -rdynamic
1711 check_ldflags -export-dynamic
1712fi
bfd2edeb 1713
eea50282
MR
1714check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1715check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
04511d53 1716
a86b921c 1717##########################################
29799f8b 1718# SDL check
a86b921c 1719
497237c7
RP
1720disable sdl_too_old
1721disable sdl
6a1a892f 1722SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 1723if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
225e21ef
MR
1724 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1725 temp_cflags $sdl_cflags
dcd479c0 1726 temp_extralibs `"${SDL_CONFIG}" --libs`
1ca5d97f 1727 if check_lib2 SDL.h SDL_Init; then
dcd479c0 1728 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 1729 if test "$_sdlversion" -lt 121 ; then
497237c7 1730 enable sdl_too_old
dcd479c0 1731 else
497237c7 1732 enable sdl
225e21ef 1733 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 1734#include <SDL.h>
d6773f56 1735int main(int argc, char **argv){
29f3b38a
MR
1736 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1737 int w = vi->current_w;
1738 return 0;
1739}
1740EOF
dcd479c0
MR
1741 fi
1742 fi
29f3b38a 1743 restore_flags
c3f6b472 1744fi
57bd82d4 1745
2270b4b2 1746texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 1747
72be9e73
DY
1748check_type sys/socket.h socklen_t
1749
7a91333f 1750##########################################
73b46a95
RP
1751# Network check
1752
1753if enabled network; then
1754 # Prefer arpa/inet.h over winsock2
1755 if check_header arpa/inet.h ; then
1756 check_func closesocket
1757 elif check_header winsock2.h ; then
ea10ddde 1758 network_extralibs="-lws2_32"
72be9e73 1759 check_type ws2tcpip.h socklen_t
73b46a95
RP
1760 check_func2 winsock2.h closesocket
1761 fi
1762fi
1763
1764##########################################
29799f8b 1765# IPv6 check
7a91333f 1766
497237c7 1767enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
1768#include <sys/types.h>
1769#include <sys/socket.h>
1770#include <netinet/in.h>
1771#include <netdb.h>
db817cf3 1772int main(void) {
7483e694
DB
1773 struct sockaddr_storage saddr;
1774 struct ipv6_mreq mreq6;
1775 getaddrinfo(0,0,0,0);
1776 getnameinfo(0,0,0,0,0,0,0);
1777 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
1778}
1779EOF
1780
06e31011
RP
1781check_header linux/videodev.h
1782check_header linux/videodev2.h
47f38850 1783
c2345207
RP
1784check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1785
f8aa696f 1786# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
1787{ check_header dev/bktr/ioctl_meteor.h &&
1788 check_header dev/bktr/ioctl_bt848.h; } ||
1789{ check_header machine/ioctl_meteor.h &&
1790 check_header machine/ioctl_bt848.h; } ||
1791{ check_header dev/video/meteor/ioctl_meteor.h &&
1792 check_header dev/video/bktr/ioctl_bt848.h; } ||
1793check_header dev/ic/bt8xx.h
f8aa696f 1794
c7682de0
RP
1795check_header sys/soundcard.h
1796check_header soundcard.h
deb29777 1797
7483e694 1798# deal with the X11 frame grabber
56a059ac 1799enabled x11grab &&
f58f4ce1
GP
1800check_header X11/Xlib.h &&
1801check_header X11/extensions/XShm.h &&
1802check_func XOpenDisplay -lX11 &&
06eab4ba 1803check_func XShmCreateImage -lX11 -lXext
f58f4ce1 1804
40bcf4c7 1805enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
1806
1807# add some useful compiler flags if supported
1808check_cflags -Wdeclaration-after-statement
dcd479c0
MR
1809check_cflags -Wall
1810check_cflags -Wno-switch
c07bd6a9
MN
1811check_cflags -Wdisabled-optimization
1812check_cflags -Wpointer-arith
1813check_cflags -Wredundant-decls
cc1fb623 1814check_cflags -Wno-pointer-sign
f4929996 1815check_cflags -Wcast-qual
9aceb3cf 1816check_cflags -Wwrite-strings
652a5bf6 1817check_cflags -Wtype-limits
5af4e0cc 1818enabled extra_warnings && check_cflags -Winline
cf9d24ad 1819
57bd82d4 1820# add some linker flags
5c0e9479 1821check_ldflags -Wl,--warn-common
e240ee67 1822check_ldflags $LDLATEFLAGS
c2fd6530 1823check_ldflags -Wl,-Bsymbolic
94a3401e 1824
bd2216e4
MR
1825if enabled small; then
1826 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
1827 optimizations="small"
1828elif enabled optimizations; then
3dddba4b 1829 if $cc -v 2>&1 | grep -q xlc; then
30a3e5d4
NP
1830 add_cflags "-O5"
1831 add_ldflags "-O5"
cf9d24ad 1832 else
30a3e5d4 1833 add_cflags "-O3"
cf9d24ad 1834 fi
cddf3f45 1835fi
11fdbc44 1836check_cflags -fno-math-errno
b2eb2ff0 1837check_cflags -fno-signed-zeros
cddf3f45 1838
504a64b9
CEH
1839# add some flags for Intel C Compiler
1840if $cc --version | grep -q Intel; then
1841 # Just warnings, no remarks
1842 check_cflags -w1
1843 # -wd: Disable following warnings
1844 # 144, 167, 556: -Wno-pointer-sign
1845 # 10006: ignoring unknown option -fno-signed-zeros
1846 # 10156: ignoring option '-W'; no argument required
1847 check_cflags -wd144,167,556,10006,10156
1848 # 11030: Warning unknown option --as-needed
1849 # 10156: ignoring option '-export'; no argument required
1850 check_ldflags -wd10156,11030
907eb3b5
CEH
1851 # Allow to compile with optimizations
1852 check_ldflags -march=$cpu
504a64b9
CEH
1853fi
1854
80581e98 1855# PIC flags for shared library objects where they are needed
5af4e0cc 1856if enabled shared; then
569cb218
MR
1857 # LIBOBJFLAGS may have already been set in the OS configuration
1858 if test -z "$LIBOBJFLAGS" ; then
1859 case "$arch" in
1860 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1861 esac
1862 fi
80581e98
MN
1863fi
1864
90be59ef 1865if enabled gprof; then
30a3e5d4
NP
1866 add_cflags "-p"
1867 add_ldflags "-p"
1db54e20
DB
1868fi
1869
3b26ee47 1870VHOOKCFLAGS="-fPIC"
18451f7d 1871
7f3c02fc 1872# Find out if the .align argument is a power of two or not.
4454dc1b 1873if test $asmalign_pot = "unknown"; then
497237c7
RP
1874 disable asmalign_pot
1875 echo 'asm (".align 3");' | check_cc && enable asmalign_pot
4454dc1b
JD
1876fi
1877
7483e694
DB
1878enabled_any $DECODER_LIST && enable decoders
1879enabled_any $ENCODER_LIST && enable encoders
1880enabled_any $BSF_LIST && enable bsfs
1881enabled_any $DEMUXER_LIST && enable demuxers
1882enabled_any $MUXER_LIST && enable muxers
f7679c54 1883enabled_any $FILTER_LIST && enable filters
7483e694
DB
1884enabled_any $INDEV_LIST && enable demuxers
1885enabled_any $OUTDEV_LIST && enable muxers
1886enabled_any $PROTOCOL_LIST && enable protocols
1887
1888enabled_any $THREADS_LIST && enable threads
1889
1890check_deps $CONFIG_LIST \
1891 $HAVE_LIST \
1892 $DECODER_LIST \
1893 $ENCODER_LIST \
1894 $PARSER_LIST \
1895 $BSF_LIST \
1896 $DEMUXER_LIST \
1897 $MUXER_LIST \
f7679c54 1898 $FILTER_LIST \
7483e694
DB
1899 $INDEV_LIST \
1900 $OUTDEV_LIST \
1901 $PROTOCOL_LIST \
f70f03f6 1902
f7b8bffe 1903enabled libdc1394 && append pkg_requires "libraw1394"
690bfceb 1904enabled libdirac && append pkg_requires "dirac"
fb2ce7d9 1905enabled libtheora && append pkg_requires "theora"
f9def9cc 1906enabled libvorbis && append pkg_requires "vorbisenc"
fb2ce7d9 1907
3e89171a 1908echo "install prefix $prefix"
f36958f8
DB
1909echo "source path $source_path"
1910echo "C compiler $cc"
bfd5afd8 1911echo ".align is power-of-two $asmalign_pot"
f36958f8 1912echo "ARCH $arch ($cpu)"
ce8871c2
MR
1913if test "$build_suffix" != ""; then
1914 echo "build suffix $build_suffix"
eb94aca9 1915fi
0db2ce77 1916echo "big-endian ${bigendian-no}"
419b8784 1917if test $arch = "x86_32" -o $arch = "x86_64"; then
0db2ce77
MR
1918 echo "MMX enabled ${mmx-no}"
1919 echo "CMOV enabled ${cmov-no}"
1920 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
1921 echo "EBX available ${ebx_available-no}"
1922 echo "EBP available ${ebp_available-no}"
e41e8342 1923fi
cc6a90dd 1924if test $arch = "armv4l"; then
0db2ce77
MR
1925 echo "ARMv5TE enabled ${armv5te-no}"
1926 echo "ARMv6 enabled ${armv6-no}"
f55b299a 1927 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 1928 echo "IWMMXT enabled ${iwmmxt-no}"
eba9ae3c 1929fi
e241ba14 1930if test $arch = "mips"; then
0db2ce77 1931 echo "MMI enabled ${mmi-no}"
e41e8342 1932fi
cc6a90dd 1933if test $arch = "powerpc"; then
0db2ce77
MR
1934 echo "AltiVec enabled ${altivec-no}"
1935 echo "dcbzl available ${dcbzl-no}"
e41e8342 1936fi
0db2ce77
MR
1937echo "gprof enabled ${gprof-no}"
1938echo "debug symbols ${debug-no}"
87a0fb62 1939echo "strip symbols ${stripping-no}"
8400d6b8 1940echo "optimizations ${optimizations-no}"
0db2ce77
MR
1941echo "static ${static-no}"
1942echo "shared ${shared-no}"
4a24ab64 1943echo "postprocessing support ${postproc-no}"
13ca50f3 1944echo "software scaler enabled ${swscale-no}"
f7679c54 1945echo "new filter support ${avfilter-no}"
81124ba0 1946echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 1947echo "video hooking ${vhook-no}"
90be59ef 1948if enabled vhook; then
0db2ce77
MR
1949 echo "Imlib2 support ${imlib2-no}"
1950 echo "FreeType support ${freetype2-no}"
68892110 1951fi
0db2ce77 1952echo "network support ${network-no}"
90be59ef 1953if enabled network; then
0db2ce77 1954 echo "IPv6 support ${ipv6-no}"
bfd5afd8 1955fi
0db2ce77
MR
1956echo "threading support ${thread_type-no}"
1957echo "SDL support ${sdl-no}"
90be59ef 1958if enabled sdl_too_old; then
bfd5afd8
DB
1959 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1960fi
0db2ce77
MR
1961echo "Sun medialib support ${mlib-no}"
1962echo "AVISynth enabled ${avisynth-no}"
1963echo "liba52 support ${liba52-no}"
1964echo "liba52 dlopened ${liba52bin-no}"
1965echo "libamr-nb support ${libamr_nb-no}"
1966echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 1967echo "libdc1394 support ${libdc1394-no}"
690bfceb 1968echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
1969echo "libfaac enabled ${libfaac-no}"
1970echo "libfaad enabled ${libfaad-no}"
7e0871a7 1971echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
1972echo "libgsm enabled ${libgsm-no}"
1973echo "libmp3lame enabled ${libmp3lame-no}"
1974echo "libnut enabled ${libnut-no}"
f7cd9eed 1975echo "libschroedinger enabled ${libschroedinger-no}"
0db2ce77
MR
1976echo "libtheora enabled ${libtheora-no}"
1977echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
1978echo "libx264 enabled ${libx264-no}"
1979echo "libxvid enabled ${libxvid-no}"
0db2ce77 1980echo "zlib enabled ${zlib-no}"
f402916e 1981echo "bzlib enabled ${bzlib-no}"
2c62e737 1982echo
de6d9b64 1983
f7679c54 1984for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 1985 echo "Enabled ${type}s:"
f65c9da1 1986 eval list=\$$(toupper $type)_LIST
8138b9db 1987 for part in $list; do
f65c9da1
MR
1988 enabled $part && echo ${part%_*}
1989 done | sort | pr -3 -t
1990 echo
8138b9db
RP
1991done
1992
ba321adb
JK
1993license="LGPL"
1994if enabled nonfree; then
1995 license="unredistributable"
1996elif enabled gpl; then
1997 license="GPL"
1998fi
1999
2000echo "License: $license"
ca5323af 2001
cf1392e9
DB
2002echo "Creating config.mak and config.h..."
2003
29799f8b
DB
2004echo "# Automatically generated by configure - do not modify!" > config.mak
2005echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2006echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2007echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2008echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
de6d9b64 2009
3e89171a 2010echo "PREFIX=$prefix" >> config.mak
22a324da
DB
2011echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2012echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2013echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2014echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2015echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
980fc7b8
FB
2016echo "CC=$cc" >> config.mak
2017echo "AR=$ar" >> config.mak
be7109c1 2018echo "RANLIB=$ranlib" >> config.mak
20369773 2019echo "LN_S=$ln_s" >> config.mak
87a0fb62 2020enabled stripping &&
3ae3b721 2021 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2022 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2023
a9b3f630 2024echo "OPTFLAGS=$CFLAGS" >> config.mak
2270b4b2 2025echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
0f3cb305 2026echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2027echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2028echo "SHFLAGS=$SHFLAGS" >> config.mak
408382a4 2029echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
fbb9d104 2030echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
80581e98 2031echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2032echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2033echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2034echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2035echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2036echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2037echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2038echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2039echo "SLIBSUF=$SLIBSUF" >> config.mak
2040echo "EXESUF=$EXESUF" >> config.mak
315c741d 2041echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
4dc62701 2042
90be59ef 2043if enabled bigendian; then
7483e694
DB
2044 echo "WORDS_BIGENDIAN=yes" >> config.mak
2045 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2046fi
44161118 2047
90be59ef 2048if enabled sdl; then
7483e694
DB
2049 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2050 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 2051fi
90be59ef 2052if enabled texi2html; then
7483e694 2053 echo "BUILD_DOC=yes" >> config.mak
146ea952 2054fi
5a872801 2055
719c8e00
MR
2056get_version(){
2057 name=$1
2058 file=$source_path/$2
147e7692
MR
2059 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2060 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2061 lcname=$(tolower $name)
2062 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2063 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2064}
2065
147e7692
MR
2066get_version LIBSWSCALE libswscale/swscale.h
2067get_version LIBPOSTPROC libpostproc/postprocess.h
2068get_version LIBAVCODEC libavcodec/avcodec.h
2069get_version LIBAVDEVICE libavdevice/avdevice.h
2070get_version LIBAVFORMAT libavformat/avformat.h
2071get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2072get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2073
5af4e0cc 2074if enabled shared; then
7483e694
DB
2075 echo "BUILD_SHARED=yes" >> config.mak
2076 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2077 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2078 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2079 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2080 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2081 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2082 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2083 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2084 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2085fi
d7e27559 2086echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2087echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2088
3d907e22
MR
2089print_config ARCH_ $TMPH config.mak $ARCH_LIST
2090print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694
DB
2091print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2092 $DECODER_LIST \
2093 $ENCODER_LIST \
2094 $PARSER_LIST \
2095 $BSF_LIST \
2096 $DEMUXER_LIST \
2097 $MUXER_LIST \
f7679c54 2098 $FILTER_LIST \
7483e694
DB
2099 $PROTOCOL_LIST \
2100 $INDEV_LIST \
2101 $OUTDEV_LIST \
8ac17293 2102
c13e1abd
FH
2103echo "#define restrict $_restrict" >> $TMPH
2104
bd2216e4 2105if enabled small; then
7483e694 2106 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2107fi
2108
997baf01
MR
2109echo "SRC_PATH=\"$source_path\"" >> config.mak
2110echo "SRC_PATH_BARE=$source_path" >> config.mak
2111echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 2112
8156056e 2113# Apparently it's not possible to portably echo a backslash.
3ae3b721 2114enabled asmalign_pot &&
7483e694
DB
2115 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2116 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2117
b4d96ba2 2118echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2119
9c05103f
DB
2120echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2121
b7860763 2122# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2123cmp -s $TMPH config.h &&
2124 echo "config.h is unchanged" ||
2125 mv -f $TMPH config.h
3d204385 2126
cea0ac52 2127rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
def4272a 2128
165af439 2129# build tree in object directory if source path is different from current one
90be59ef 2130if enabled source_path_used; then
165af439 2131 DIRS="\
7483e694
DB
2132 doc \
2133 libavcodec \
2134 libavcodec/alpha \
2135 libavcodec/armv4l \
2136 libavcodec/bfin \
2137 libavcodec/i386 \
2138 libavcodec/mlib \
2139 libavcodec/ppc \
2140 libavcodec/sh4 \
2141 libavcodec/sparc \
52a9cf34 2142 libavdevice \
f7679c54 2143 libavfilter \
7483e694
DB
2144 libavformat \
2145 libavutil \
2146 libpostproc \
2147 libswscale \
2148 tests \
2149 tools \
2150 vhook \
2151 "
165af439 2152 FILES="\
7483e694
DB
2153 Makefile \
2154 common.mak \
71c61f62 2155 subdir.mak \
7483e694
DB
2156 doc/texi2pod.pl \
2157 libavcodec/Makefile \
52a9cf34 2158 libavdevice/Makefile \
f7679c54 2159 libavfilter/Makefile \
7483e694
DB
2160 libavformat/Makefile \
2161 libavutil/Makefile \
2162 libpostproc/Makefile \
2163 libswscale/Makefile \
2164 "
165af439 2165 for dir in $DIRS ; do
7483e694 2166 mkdir -p $dir
165af439
MR
2167 done
2168 for f in $FILES ; do
20369773 2169 $ln_s "$source_path/$f" $f
165af439
MR
2170 done
2171fi
def4272a 2172
def4272a 2173
d0674868 2174# build pkg-config files
def4272a 2175
d0674868
DB
2176pkgconfig_generate(){
2177name=$1
e426941d 2178shortname=${name#lib}
d0674868
DB
2179comment=$2
2180version=$3
2181libs=$4
2182requires=$5
2270b4b2 2183cat <<EOF > $name.pc
3e89171a 2184prefix=$prefix
a94e666c 2185exec_prefix=\${prefix}
f2b7382c 2186libdir=$libdir
7622778e 2187includedir=$incdir
def4272a 2188
d0674868
DB
2189Name: $name
2190Description: $comment
2191Version: $version
5dcfe9f8
AH
2192Requires: $(disabled shared && echo $requires)
2193Requires.private: $(enabled shared && echo $requires)
def4272a 2194Conflicts:
12701f6e
AH
2195Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2196Libs.private: $(enabled shared && echo $libs)
76a448ed 2197Cflags: -I\${includedir}
def4272a 2198EOF
2270b4b2 2199cat <<EOF > $name-uninstalled.pc
def4272a
AJ
2200prefix=
2201exec_prefix=
d0674868 2202libdir=\${pcfiledir}/$name
7622778e 2203includedir=\${pcfiledir}
def4272a 2204
d0674868
DB
2205Name: $name
2206Description: $comment
2207Version: $version
2208Requires: $requires
def4272a 2209Conflicts:
12701f6e 2210Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2211Cflags: -I\${includedir}
2212EOF
d0674868 2213}
def4272a 2214
e426941d 2215pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
e426941d 2216pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
e426941d 2217pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
e426941d 2218pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2219enabled avfilter &&
35a71f1d 2220 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2221enabled postproc &&
e426941d 2222 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
13ca50f3 2223if enabled swscale; then
e426941d 2224 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
6c0d0413 2225else
f436a23e 2226 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
7483e694 2227 apply libswscale.pc sed s/^Libs:.*$/Libs:/
6c0d0413 2228fi