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