Statistics
| Branch: | Revision:

ffmpeg / configure @ e555e7b2

History | View | Annotate | Download (57.3 KB)

1 aeb29222 Måns Rullgård
#!/bin/sh
2 0f3cb305 Fabrice Bellard
#
3 f57620d5 Måns Rullgård
# 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
8 0f3cb305 Fabrice Bellard
#
9 cf9d24ad Dan Christiansen
10 cde2d79a Måns Rullgård
# make sure we are running under a compatible shell
11 c21d6325 Måns Rullgård
# try to make this part work with most shells
12
13
try_exec(){
14 0dbe81bb Måns Rullgård
    echo "Trying shell $1"
15 c21d6325 Måns Rullgård
    type "$1" >/dev/null 2>&1 && exec "$@"
16
}
17
18 5237ce67 Måns Rullgård
unset foo
19 0dbe81bb Måns Rullgård
(: ${foo%%bar}) 2>/dev/null
20
E1="$?"
21
22
(: ${foo?}) 2>/dev/null
23
E2="$?"
24
25
if test "$E1" != 0 || test "$E2" = 0; then
26
    echo "Broken shell detected.  Trying alternatives."
27 c21d6325 Måns Rullgård
    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" "$@"
39 cde2d79a Måns Rullgård
    fi
40
    echo "No compatible shell script interpreter found."
41 fc53da20 Diego Biurrun
    echo "This configure script requires a POSIX-compatible shell"
42 c21d6325 Måns Rullgård
    echo "such as bash or ksh."
43 505dfb09 Diego Biurrun
    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."
46 c21d6325 Måns Rullgård
    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
50 cde2d79a Måns Rullgård
    exit 1
51
fi
52
53 74c53c2d Måns Rullgård
show_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"
59 2ba042a7 Måns Rullgård
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60 2266e085 Diego Biurrun
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61 74c53c2d Måns Rullgård
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62 84c22efd Diego Biurrun
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63 74c53c2d Måns Rullgård
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
64
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
65
  echo "  --enable-static          build static libraries [default=yes]"
66
  echo "  --disable-static         do not build static libraries [default=no]"
67
  echo "  --enable-shared          build shared libraries [default=no]"
68
  echo "  --disable-shared         do not build shared libraries [default=yes]"
69 0a622b98 Måns Rullgård
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
70
  echo "                           and ffmpeg will be under GPL [default=no]"
71 dc922953 Diego Biurrun
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
72
  echo "  --enable-swscaler        software scaler support [default=no]"
73 e5f94c2b Ramiro Polla
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
74 74c53c2d Måns Rullgård
  echo "  --enable-pthreads        use pthreads [default=no]"
75 eb113804 Diego Biurrun
  echo "  --enable-w32threads      use Win32 threads [default=no]"
76 56a059ac Diego Biurrun
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
77 0a622b98 Måns Rullgård
  echo
78
  echo "External library support:"
79
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
80 74c53c2d Måns Rullgård
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
81
  echo "                           and libraw1394 [default=no]"
82 e2745046 Måns Rullgård
  echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
83
  echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
84 8ac17293 Steve L'Homme
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
85 f5a756ef Diego Biurrun
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
86
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
87 e2745046 Måns Rullgård
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
88
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
89 06f32b26 Diego Biurrun
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
90 dc922953 Diego Biurrun
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
91 e2745046 Måns Rullgård
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
92 31235134 Diego Biurrun
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
93
  echo "                           native demuxer exists [default=no]"
94 ba5fd8c5 Diego Biurrun
  echo "  --enable-libogg          enable Ogg muxing via libogg [default=no]"
95 71757822 Diego Biurrun
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
96 e2745046 Måns Rullgård
  echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
97 31235134 Diego Biurrun
  echo "                           native implementations exist [default=no]"
98 1cc60c47 Diego Biurrun
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
99
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
100 31235134 Diego Biurrun
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
101 74c53c2d Måns Rullgård
  echo ""
102
  echo "Advanced options (experts only):"
103
  echo "  --source-path=PATH       path to source code [$source_path]"
104
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
105 fac252f9 Måns Rullgård
  echo "  --cross-compile          assume a cross-compiler is used"
106 abcd6d60 Måns Rullgård
  echo "  --target-os=OS           compiler targets OS [$targetos]"
107 74c53c2d Måns Rullgård
  echo "  --cc=CC                  use C compiler CC [$cc]"
108
  echo "  --make=MAKE              use specified make [$make]"
109
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
110
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
111
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
112
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
113 cc6a90dd Guillaume Poirier
  echo "  --arch=ARCH              select architecture  [$arch]"
114 7c758d33 Diego Biurrun
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
115
  echo "                           instruction selection, may crash on older CPUs)"
116 2b4c3615 Måns Rullgård
  echo "  --enable-powerpc-perf    enable performance report on PPC"
117 74c53c2d Måns Rullgård
  echo "                           (requires enabling PMC)"
118
  echo "  --disable-mmx            disable MMX usage"
119 1839e854 Siarhei Siamashka
  echo "  --disable-armv5te        disable armv5te usage"
120 edab3048 Måns Rullgård
  echo "  --disable-armv6          disable armv6 usage"
121 74c53c2d Måns Rullgård
  echo "  --disable-iwmmxt         disable iwmmxt usage"
122
  echo "  --disable-altivec        disable AltiVec usage"
123
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
124
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
125
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
126
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
127
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
128
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
129
  echo "  --disable-network        disable network support [default=no]"
130 0c7bb0e5 Luca Barbato
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
131 74c53c2d Måns Rullgård
  echo "  --disable-zlib           disable zlib [default=no]"
132
  echo "  --disable-vhook          disable video hooking support"
133
  echo "  --disable-debug          disable debugging symbols"
134
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
135
  echo "                           MPEG audio decoding [default=no]"
136 cde9e780 Michael Niedermayer
  echo "  --enable-gray            enable full grayscale support (slower color)"
137 786b30af Diego Biurrun
  echo "  --disable-ffmpeg         disable ffmpeg build"
138 74c53c2d Måns Rullgård
  echo "  --disable-ffserver       disable ffserver build"
139
  echo "  --disable-ffplay         disable ffplay build"
140
  echo "  --enable-small           optimize for size instead of speed"
141
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
142
  echo "  --disable-encoder=NAME   disables encoder NAME"
143
  echo "  --enable-encoder=NAME    enables encoder NAME"
144
  echo "  --disable-decoder=NAME   disables decoder NAME"
145
  echo "  --enable-decoder=NAME    enables decoder NAME"
146
  echo "  --disable-encoders       disables all encoders"
147
  echo "  --disable-decoders       disables all decoders"
148 ff70e601 Måns Rullgård
  echo "  --disable-muxer=NAME     disables muxer NAME"
149
  echo "  --enable-muxer=NAME      enables muxer NAME"
150 74c53c2d Måns Rullgård
  echo "  --disable-muxers         disables all muxers"
151 ff70e601 Måns Rullgård
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
152
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
153 74c53c2d Måns Rullgård
  echo "  --disable-demuxers       disables all demuxers"
154 af9e7d18 Måns Rullgård
  echo "  --enable-parser=NAME     enables parser NAME"
155
  echo "  --disable-parser=NAME    disables parser NAME"
156
  echo "  --disable-parsers        disables all parsers"
157 cd61e407 Jason Millard
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
158
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
159
  echo "  --disable-bsfs           disables all bitstream filters"
160 c08fb000 Alex Beregszaszi
  echo "  --enable-protocol=NAME   enables protocol NAME"
161
  echo "  --disable-protocol=NAME  disables protocol NAME"
162
  echo "  --disable-protocols      disables all protocols"
163 794f8e97 Panagiotis Issaris
  echo "  --list-decoders          show all available decoders"
164
  echo "  --list-encoders          show all available encoders"
165
  echo "  --list-muxers            show all available muxers"
166
  echo "  --list-demuxers          show all available demuxers"
167
  echo "  --list-parsers           show all available parsers"
168
  echo "  --list-protocols         show all available protocols"
169
  echo "  --list-bsfs              show all available bitstream filters"
170 0a622b98 Måns Rullgård
  echo
171
  echo "Developer options (useful when working on FFmpeg itself):"
172
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
173
  echo "  --disable-opts           disable compiler optimizations"
174
  echo "  --enable-extra-warnings  enable more compiler warnings"
175
  echo "  --disable-strip          disable stripping of executables and shared libraries"
176 74c53c2d Måns Rullgård
  echo ""
177
  echo "NOTE: Object files are built at the place where configure is launched."
178
  exit 1
179
}
180 cf9d24ad Dan Christiansen
181 57bd82d4 Måns Rullgård
log(){
182
    echo "$@" >>$logfile
183
}
184
185 720c69da Måns Rullgård
log_file(){
186 c8e9f801 Måns Rullgård
    log BEGIN $1
187
    cat -n $1 >>$logfile
188
    log END $1
189
}
190
191 2ba042a7 Måns Rullgård
echolog(){
192 c8e9f801 Måns Rullgård
    log "$@"
193 57bd82d4 Måns Rullgård
    echo "$@"
194 2ba042a7 Måns Rullgård
}
195
196
die(){
197
    echolog "$@"
198
    cat <<EOF
199
If you think configure made a mistake, make sure you are using the latest
200
version from SVN.  If the latest version fails, report the problem to the
201
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
202
EOF
203 720c69da Måns Rullgård
    if enabled logging; then
204 2ba042a7 Måns Rullgård
        cat <<EOF
205
Include the log file "$logfile" produced by configure as this will help
206
solving the problem.
207
EOF
208
    else
209
cat <<EOF
210
Rerun configure with logging enabled (do not use --log=no), and include the
211
log this produces with your report.
212
EOF
213
    fi
214 57bd82d4 Måns Rullgård
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
215
    exit 1
216
}
217
218 904e48f1 Måns Rullgård
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
219 44161118 Måns Rullgård
toupper(){
220
    echo "$@" | tr '[a-z]' '[A-Z]'
221
}
222
223 4a5444db Måns Rullgård
tolower(){
224
    echo "$@" | tr '[A-Z]' '[a-z]'
225
}
226
227 a8d04fba Måns Rullgård
set_all(){
228
    value=$1
229
    shift
230
    for var in $*; do
231
        eval $var=$value
232
    done
233
}
234
235 799c9e9b Måns Rullgård
pushvar(){
236
    for var in $*; do
237
        eval level=\${${var}_level:=0}
238
        eval ${var}_${level}="\$$var"
239
        eval ${var}_level=$(($level+1))
240
    done
241
}
242
243
popvar(){
244
    for var in $*; do
245
        eval level=\${${var}_level:-0}
246
        test $level = 0 && continue
247
        eval level=$(($level-1))
248
        eval $var="\${${var}_${level}}"
249
        eval ${var}_level=$level
250
        eval unset ${var}_${level}
251
    done
252
}
253
254 a8d04fba Måns Rullgård
enable(){
255
    set_all yes $*
256
}
257
258
disable(){
259
    set_all no $*
260
}
261
262 57bd82d4 Måns Rullgård
enabled(){
263 44161118 Måns Rullgård
    eval test "x\$$1" = "xyes"
264
}
265
266 37970ebf Ramiro Polla
disabled(){
267
    eval test "x\$$1" = "xno"
268
}
269
270 44161118 Måns Rullgård
enabled_all(){
271
    for opt; do
272
        enabled $opt || return 1
273
    done
274
}
275
276 85bca2c5 Diego Biurrun
disabled_all(){
277
    for opt; do
278
        disabled $opt || return 1
279
    done
280
}
281
282 44161118 Måns Rullgård
enabled_any(){
283
    for opt; do
284
        enabled $opt && return 0
285
    done
286
}
287
288 85bca2c5 Diego Biurrun
disabled_any(){
289
    for opt; do
290
        disabled $opt && return 0
291
    done
292
}
293
294 30fd06be Måns Rullgård
check_deps(){
295
    for cfg; do
296 799c9e9b Måns Rullgård
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
297
        disabled ${cfg}_checking && continue
298
        enable ${cfg}_checking
299
300 30fd06be Måns Rullgård
        eval dep_all="\$${cfg}_deps"
301
        eval dep_any="\$${cfg}_deps_any"
302 799c9e9b Måns Rullgård
303
        pushvar cfg dep_all dep_any
304
        check_deps $dep_all $dep_any
305
        popvar cfg dep_all dep_any
306
307 30fd06be Måns Rullgård
        enabled_all $dep_all || disable $cfg
308
        enabled_any $dep_any || disable $cfg
309 799c9e9b Måns Rullgård
310
        disable ${cfg}_checking
311 30fd06be Måns Rullgård
    done
312
}
313
314 44161118 Måns Rullgård
print_config(){
315
    pfx=$1
316
    header=$2
317
    makefile=$3
318
    shift 3
319
    for cfg; do
320 3d907e22 Måns Rullgård
        ucname="`toupper $cfg`"
321 44161118 Måns Rullgård
        if enabled $cfg; then
322 3d907e22 Måns Rullgård
            echo "#define ${pfx}${ucname} 1" >> $header
323
            echo "#define ENABLE_${ucname} 1" >> $header
324
            echo "${pfx}${ucname}=yes" >> $makefile
325
        else
326
            echo "#define ENABLE_${ucname} 0" >> $header
327 44161118 Måns Rullgård
        fi
328
    done
329 57bd82d4 Måns Rullgård
}
330
331
flags_saved(){
332
    (: ${SAVE_CFLAGS?}) 2>/dev/null
333
}
334
335 dcd479c0 Måns Rullgård
save_flags(){
336 57bd82d4 Måns Rullgård
    flags_saved && return
337 dcd479c0 Måns Rullgård
    SAVE_CFLAGS="$CFLAGS"
338
    SAVE_LDFLAGS="$LDFLAGS"
339
    SAVE_extralibs="$extralibs"
340
}
341
342
restore_flags(){
343 f5d28d10 Måns Rullgård
    flags_saved || return
344 dcd479c0 Måns Rullgård
    CFLAGS="$SAVE_CFLAGS"
345
    LDFLAGS="$SAVE_LDFLAGS"
346
    extralibs="$SAVE_extralibs"
347
    unset SAVE_CFLAGS
348
    unset SAVE_LDFLAGS
349
    unset SAVE_extralibs
350
}
351
352
temp_cflags(){
353
    save_flags
354
    CFLAGS="$CFLAGS $*"
355
}
356
357
temp_ldflags(){
358
    save_flags
359
    LDFLAGS="$LDFLAGS $*"
360
}
361
362
temp_extralibs(){
363
    save_flags
364
    extralibs="$extralibs $*"
365
}
366
367 57bd82d4 Måns Rullgård
append(){
368
    var=$1
369
    shift
370
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
371
    eval "$var=\"\$$var $*\""
372
}
373
374
add_cflags(){
375
    append CFLAGS "$@"
376
}
377
378
add_ldflags(){
379
    append LDFLAGS "$@"
380
}
381
382
add_extralibs(){
383
    append extralibs "$@"
384
}
385
386 b0cfb663 Måns Rullgård
check_cmd(){
387 b3cb5d51 Måns Rullgård
    log "$@"
388 9b4f605c Måns Rullgård
    "$@" >>$logfile 2>&1
389 b0cfb663 Måns Rullgård
}
390
391 dcd479c0 Måns Rullgård
check_cc(){
392 57bd82d4 Måns Rullgård
    log check_cc "$@"
393
    cat >$TMPC
394 720c69da Måns Rullgård
    log_file $TMPC
395 b0cfb663 Måns Rullgård
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
396 57bd82d4 Måns Rullgård
}
397
398
check_cpp(){
399
    log check_cpp "$@"
400 dcd479c0 Måns Rullgård
    cat >$TMPC
401 720c69da Måns Rullgård
    log_file $TMPC
402 b0cfb663 Måns Rullgård
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
403 dcd479c0 Måns Rullgård
}
404
405
check_ld(){
406 57bd82d4 Måns Rullgård
    log check_ld "$@"
407 0607887f Måns Rullgård
    check_cc || return
408 3155a644 Måns Rullgård
    flags=''
409
    libs=''
410
    for f; do
411
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
412
    done
413
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
414 dcd479c0 Måns Rullgård
}
415
416
check_cflags(){
417 57bd82d4 Måns Rullgård
    log check_cflags "$@"
418
    check_cc "$@" <<EOF && add_cflags "$@"
419 dcd479c0 Måns Rullgård
int x;
420
EOF
421
}
422
423
check_ldflags(){
424 57bd82d4 Måns Rullgård
    log check_ldflags "$@"
425
    check_ld "$@" <<EOF && add_ldflags "$@"
426
int main(){
427
    return 0;
428
}
429 dcd479c0 Måns Rullgård
EOF
430
}
431
432
check_header(){
433 57bd82d4 Måns Rullgård
    log check_header "$@"
434 dcd479c0 Måns Rullgård
    header=$1
435
    shift
436 d8bc5f06 Måns Rullgård
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
437
    disable $var
438
    check_cpp "$@" <<EOF && enable $var
439 dcd479c0 Måns Rullgård
#include <$header>
440
int x;
441
EOF
442
}
443
444
check_func(){
445 57bd82d4 Måns Rullgård
    log check_func "$@"
446 dcd479c0 Måns Rullgård
    func=$1
447
    shift
448 d8bc5f06 Måns Rullgård
    disable $func
449
    check_ld "$@" <<EOF && enable $func
450 dcd479c0 Måns Rullgård
extern int $func();
451
int main(){
452
    $func();
453
}
454
EOF
455
}
456
457 f8d7b072 Måns Rullgård
check_func2(){
458
    log check_func2 "$@"
459
    headers=$1
460
    func=$2
461
    shift 2
462
    disable $func
463
    incs=""
464
    for hdr in $headers; do
465
        incs="$incs
466
#include <$hdr>"
467
    done
468
    check_ld "$@" <<EOF && enable $func
469
$incs
470
int main(){
471
    (void) $func;
472
    return 0;
473
}
474
EOF
475
}
476
477 57bd82d4 Måns Rullgård
check_lib(){
478
    log check_lib "$@"
479
    header="$1"
480
    func="$2"
481
    shift 2
482 fcfcde17 Måns Rullgård
    temp_extralibs "$@"
483
    check_header $header && check_func $func && add_extralibs "$@"
484
    err=$?
485
    restore_flags
486
    return $err
487 57bd82d4 Måns Rullgård
}
488
489 f8d7b072 Måns Rullgård
check_lib2(){
490
    log check_lib2 "$@"
491
    headers="$1"
492
    func="$2"
493
    shift 2
494
    temp_extralibs "$@"
495
    check_func2 "$headers" $func && add_extralibs "$@"
496
    err=$?
497
    restore_flags
498
    return $err
499
}
500
501 dcd479c0 Måns Rullgård
check_exec(){
502 90be59ef Ramiro Polla
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
503 57bd82d4 Måns Rullgård
}
504
505 7dfef245 Måns Rullgård
check_exec_crash(){
506
    code=`cat`
507
508
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
509
    # are safe but may not be available everywhere.  Thus we use
510
    # raise(SIGTERM) instead.  The check is run in a subshell so we
511
    # can redirect the "Terminated" message from the shell.  SIGBUS
512
    # is not defined by standard C so it is used conditionally.
513
514
    (check_exec "$@") >>$logfile 2>&1 <<EOF
515
#include <signal.h>
516
static void sighandler(int sig){
517
    raise(SIGTERM);
518
}
519
int main(){
520
    signal(SIGILL, sighandler);
521
    signal(SIGFPE, sighandler);
522
    signal(SIGSEGV, sighandler);
523
#ifdef SIGBUS
524
    signal(SIGBUS, sighandler);
525
#endif
526
    { $code }
527
}
528
EOF
529
}
530
531 57bd82d4 Måns Rullgård
require(){
532
    name="$1"
533
    header="$2"
534
    func="$3"
535
    shift 3
536
    check_lib $header $func "$@" || die "ERROR: $name not found"
537 dcd479c0 Måns Rullgård
}
538
539 f8d7b072 Måns Rullgård
require2(){
540
    name="$1"
541
    headers="$2"
542
    func="$3"
543
    shift 3
544
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
545
}
546
547 eea50282 Måns Rullgård
check_foo_config(){
548
    cfg=$1
549
    pkg=$2
550
    header=$3
551
    func=$4
552
    shift 4
553
    disable $cfg
554
    check_cmd ${pkg}-config --version
555
    err=$?
556
    if test "$err" = 0; then
557
        temp_cflags `${pkg}-config --cflags`
558
        temp_extralibs `${pkg}-config --libs`
559
        check_lib "$@" $header $func && enable $cfg
560
    fi
561
    return $err
562
}
563
564 c505dd31 Måns Rullgård
apply(){
565
    file=$1
566
    shift
567
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
568
}
569
570 c88f5d72 Måns Rullgård
CONFIG_LIST='
571
    encoders
572
    decoders
573
    parsers
574 cd61e407 Jason Millard
    bsfs
575 c88f5d72 Måns Rullgård
    muxers
576
    demuxers
577
    audio_beos
578
    audio_oss
579
    avisynth
580
    beos_netserver
581
    bktr
582
    dc1394
583
    dv1394
584
    ffmpeg
585
    ffplay
586
    ffserver
587
    gpl
588 ecfc4f44 Måns Rullgård
    gprof
589 d8d0d0b2 Michael Niedermayer
    gray
590 c88f5d72 Måns Rullgård
    ipv6
591 7bc5f2a8 Diego Biurrun
    liba52
592 f8904fd9 Diego Biurrun
    liba52bin
593 f5a756ef Diego Biurrun
    libamr
594
    libamr_nb
595
    libamr_wb
596 2eed5a46 Diego Biurrun
    libfaac
597
    libfaad
598
    libfaadbin
599 c88f5d72 Måns Rullgård
    libgsm
600 6ebe07fb Diego Biurrun
    libmp3lame
601 c88f5d72 Måns Rullgård
    libnut
602
    libogg
603 150d2772 Diego Biurrun
    libtheora
604 c88f5d72 Måns Rullgård
    libvorbis
605 1cc60c47 Diego Biurrun
    libx264
606
    libxvid
607 c88f5d72 Måns Rullgård
    memalign_hack
608
    mpegaudio_hp
609
    network
610 2b4c3615 Måns Rullgård
    powerpc_perf
611 c88f5d72 Måns Rullgård
    pp
612
    protocols
613 bd2216e4 Måns Rullgård
    small
614 c88f5d72 Måns Rullgård
    swscaler
615
    vhook
616 afde41b4 Måns Rullgård
    v4l
617
    v4l2
618 56a059ac Diego Biurrun
    x11grab
619 c88f5d72 Måns Rullgård
    zlib
620
'
621
622 8eee7025 Diego Biurrun
THREADS_LIST='
623
    beosthreads
624
    pthreads
625
    w32threads
626
'
627
628 3f5b56e5 Måns Rullgård
ARCH_LIST='
629
    alpha
630
    armv4l
631
    bfin
632
    ia64
633
    m68k
634
    mips
635
    parisc
636
    powerpc
637
    s390
638
    sh4
639
    sparc
640
    sparc64
641
    x86
642
    x86_32
643
    x86_64
644
'
645
646
ARCH_EXT_LIST='
647 1ac9331a Måns Rullgård
    altivec
648
    armv5te
649 edab3048 Måns Rullgård
    armv6
650 3f5b56e5 Måns Rullgård
    iwmmxt
651
    mmi
652
    mmx
653 9eeed841 Måns Rullgård
    ssse3
654 3f5b56e5 Måns Rullgård
'
655
656
HAVE_LIST="
657
    $ARCH_EXT_LIST
658
    $THREADS_LIST
659
    altivec_h
660 c9fdab0d François Revol
    arpa_inet_h
661 c88f5d72 Måns Rullgård
    byteswap_h
662 1ac9331a Måns Rullgård
    cmov
663 e16e49ac Ramiro Polla
    conio_h
664 c88f5d72 Måns Rullgård
    dcbzl
665 f8aa696f Diego Biurrun
    dev_bktr_ioctl_bt848_h
666
    dev_bktr_ioctl_meteor_h
667
    dev_ic_bt8xx_h
668
    dev_video_meteor_ioctl_meteor_h
669
    dev_video_bktr_ioctl_bt848_h
670 18b67ae5 Måns Rullgård
    dlfcn_h
671 c88f5d72 Måns Rullgård
    dlopen
672 245626d0 Diego Biurrun
    ebp_available
673
    ebx_available
674 c2a29455 Aurelien Jacobs
    fast_64bit
675 7073e9fc Måns Rullgård
    fast_cmov
676 7b829d2a Ramiro Polla
    fast_unaligned
677 9d99cc5a Måns Rullgård
    fork
678 c88f5d72 Måns Rullgård
    freetype2
679 7495c306 Ramiro Polla
    GetProcessTimes
680 66be5b45 Ramiro Polla
    getrusage
681 c88f5d72 Måns Rullgård
    imlib2
682 2e1913b1 Måns Rullgård
    inet_aton
683 c88f5d72 Måns Rullgård
    lrintf
684 f8aa696f Diego Biurrun
    machine_ioctl_bt848_h
685
    machine_ioctl_meteor_h
686 c88f5d72 Måns Rullgård
    malloc_h
687
    memalign
688 6ffa87d3 Ramiro Polla
    mkstemp
689 c88f5d72 Måns Rullgård
    mlib
690 9cafbd6c Måns Rullgård
    ppc64
691 c88f5d72 Måns Rullgård
    sdl
692
    sdl_video_size
693 deb29777 Måns Rullgård
    soundcard_h
694 b0c858d8 François Revol
    sys_poll_h
695 deb29777 Måns Rullgård
    sys_soundcard_h
696 e16e49ac Ramiro Polla
    termios_h
697 b265431e Måns Rullgård
    threads
698 0cb78cef Diego Biurrun
"
699 44161118 Måns Rullgård
700 520cc7f1 Måns Rullgård
CMDLINE_SELECT="
701 3f5b56e5 Måns Rullgård
    $ARCH_EXT_LIST
702 520cc7f1 Måns Rullgård
    $CONFIG_LIST
703 8eee7025 Diego Biurrun
    $THREADS_LIST
704 520cc7f1 Måns Rullgård
    debug
705
    extra_warnings
706
    shared
707
    static
708
"
709
710 912f3148 Diego Biurrun
# code dependency declarations
711
712 9eeed841 Måns Rullgård
# architecture extensions
713
altivec_deps="powerpc"
714
armv5te_deps="armv4l"
715
armv6_deps="armv4l"
716
iwmmxt_deps="armv4l"
717
mmi_deps="mips"
718
mmx_deps="x86"
719
ssse3_deps="x86"
720
721 912f3148 Diego Biurrun
# decoders / encoders
722 33a0dd37 Kostya Shishkov
dxa_decoder_deps="zlib"
723 30fd06be Måns Rullgård
flashsv_decoder_deps="zlib"
724 773be23a Aurelien Jacobs
flashsv_encoder_deps="zlib"
725 4a815a7f Diego Biurrun
flv_decoder_deps="h263_decoder"
726 df495dbd Aurelien Jacobs
h263_decoder_deps="h263_parser mpeg4video_parser"
727 4a815a7f Diego Biurrun
h263i_decoder_deps="h263_decoder"
728 26b4fe82 Aurelien Jacobs
h264_decoder_deps="h264_parser"
729 30fd06be Måns Rullgård
mpeg_xvmc_decoder_deps="xvmc"
730 4a815a7f Diego Biurrun
mpeg4_decoder_deps="h263_decoder"
731
msmpeg4v1_decoder_deps="h263_decoder"
732
msmpeg4v2_decoder_deps="h263_decoder"
733
msmpeg4v3_decoder_deps="h263_decoder"
734 30fd06be Måns Rullgård
png_decoder_deps="zlib"
735
png_encoder_deps="zlib"
736 e2525c6f Aurelien Jacobs
svq3_decoder_deps="h264_parser"
737 4a815a7f Diego Biurrun
vc1_decoder_deps="h263_decoder"
738
wmv1_decoder_deps="h263_decoder"
739
wmv2_decoder_deps="h263_decoder"
740
wmv3_decoder_deps="h263_decoder"
741 30fd06be Måns Rullgård
zmbv_decoder_deps="zlib"
742
zmbv_encoder_deps="zlib"
743
744 912f3148 Diego Biurrun
# external libraries
745 30fd06be Måns Rullgård
mpeg4aac_decoder_deps="libfaad"
746 7bc5f2a8 Diego Biurrun
liba52_decoder_deps="liba52"
747 f5a756ef Diego Biurrun
libamr_nb_decoder_deps="libamr_nb"
748
libamr_nb_encoder_deps="libamr_nb"
749
libamr_wb_decoder_deps="libamr_wb"
750
libamr_wb_encoder_deps="libamr_wb"
751 c9171a83 Diego Biurrun
libfaac_encoder_deps="libfaac"
752 69ddbd1d Diego Biurrun
libfaad_decoder_deps="libfaad"
753 299c77d5 Måns Rullgård
libgsm_decoder_deps="libgsm"
754
libgsm_encoder_deps="libgsm"
755 8ffed8d8 Måns Rullgård
libgsm_ms_decoder_deps="libgsm"
756
libgsm_ms_encoder_deps="libgsm"
757 1cc60c47 Diego Biurrun
libmp3lame_encoder_deps="libmp3lame"
758 150d2772 Diego Biurrun
libtheora_encoder_deps="libtheora"
759 b0caf888 Diego Biurrun
libvorbis_decoder_deps="libvorbis"
760
libvorbis_encoder_deps="libvorbis"
761 1cc60c47 Diego Biurrun
libx264_encoder_deps="libx264"
762
libxvid_encoder_deps="libxvid"
763 30fd06be Måns Rullgård
764 912f3148 Diego Biurrun
# demuxers / muxers
765 03a76ba9 Diego Biurrun
ac3_demuxer_deps="ac3_parser"
766 30fd06be Måns Rullgård
audio_demuxer_deps_any="audio_oss audio_beos"
767
audio_muxer_deps_any="audio_oss audio_beos"
768
dc1394_demuxer_deps="dc1394"
769
dv1394_demuxer_deps="dv1394"
770 d7c59247 Diego Biurrun
libnut_demuxer_deps="libnut"
771
libnut_muxer_deps="libnut"
772 4bd8e17c Aurelien Jacobs
mp3_demuxer_deps="mpegaudio_parser"
773 30fd06be Måns Rullgård
ogg_muxer_deps="libogg"
774
redir_demuxer_deps="network"
775 47b515bf Alex Beregszaszi
rtp_muxer_deps="network mpegts_demuxer"
776 c08fb000 Alex Beregszaszi
rtsp_demuxer_deps="rtp_protocol rtp_muxer"
777
sdp_demuxer_deps="rtsp_demuxer"
778 afde41b4 Måns Rullgård
v4l2_demuxer_deps="v4l2"
779 3af6d5cf Diego Biurrun
video_grab_bktr_demuxer_deps="bktr"
780
video_grab_v4l_demuxer_deps="v4l"
781 30fd06be Måns Rullgård
x11_grab_device_demuxer_deps="x11grab"
782
783 912f3148 Diego Biurrun
# protocols
784 c08fb000 Alex Beregszaszi
http_protocol_deps="network"
785
rtp_protocol_deps="udp_protocol"
786
tcp_protocol_deps="network"
787
udp_protocol_deps="network"
788
789 912f3148 Diego Biurrun
# programs
790 fa859b4d Måns Rullgård
ffplay_deps="sdl"
791 c08fb000 Alex Beregszaszi
ffserver_deps="muxers rtp_protocol"
792 a2830dca Måns Rullgård
793 912f3148 Diego Biurrun
794 0f3cb305 Fabrice Bellard
# set temporary file name
795 57514323 Zdenek Kabelac
if test ! -z "$TMPDIR" ; then
796 0f3cb305 Fabrice Bellard
    TMPDIR1="${TMPDIR}"
797 57514323 Zdenek Kabelac
elif test ! -z "$TEMPDIR" ; then
798 0f3cb305 Fabrice Bellard
    TMPDIR1="${TEMPDIR}"
799 3d204385 Nick Kurshev
else
800 0f3cb305 Fabrice Bellard
    TMPDIR1="/tmp"
801 3d204385 Nick Kurshev
fi
802
803 0f3cb305 Fabrice Bellard
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
804
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
805 f3ec2d46 Slavik Gnatenko
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
806 0f3cb305 Fabrice Bellard
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
807
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
808
809 de6d9b64 Fabrice Bellard
# default parameters
810 8a608357 Måns Rullgård
811 720c69da Måns Rullgård
logging="yes"
812 2ba042a7 Måns Rullgård
logfile="config.err"
813 8a608357 Måns Rullgård
814
# installation paths
815 2266e085 Diego Biurrun
PREFIX="/usr/local"
816 c75560ae Diego Biurrun
libdir='$(PREFIX)/lib'
817 84c22efd Diego Biurrun
shlibdir="$libdir"
818 c75560ae Diego Biurrun
incdir='$(PREFIX)/include/ffmpeg'
819
mandir='$(PREFIX)/man'
820
bindir='$(PREFIX)/bin'
821 8a608357 Måns Rullgård
822
# toolchain
823 de6d9b64 Fabrice Bellard
cc="gcc"
824
ar="ar"
825 be7109c1 Michael Niedermayer
ranlib="ranlib"
826 4a908fbc Alex Beregszaszi
make="make"
827 0f3cb305 Fabrice Bellard
strip="strip"
828 8a608357 Måns Rullgård
asmalign_pot="unknown"
829
830
# machine
831 cc6a90dd Guillaume Poirier
arch=`uname -m`
832 38d0a8aa Guillaume Poirier
cpu="generic"
833 8a608357 Måns Rullgård
834
# OS
835 b9663405 Diego Biurrun
targetos=$(tolower $(uname -s))
836 8a608357 Måns Rullgård
837
# non-library system interfaces
838
audio_oss="yes"
839 3eac5c63 Måns Rullgård
bktr="yes"
840 8aa3ee32 Max Krasnyansky
dv1394="yes"
841 afde41b4 Måns Rullgård
v4l2="yes"
842
v4l="yes"
843 8a608357 Måns Rullgård
844
# libraries
845
zlib="yes"
846
847
# configurable options
848 cddf3f45 Glenn Maynard
debug="yes"
849 65d1bea2 Michel Bardiaux
dostrip="yes"
850 8a608357 Måns Rullgård
ffmpeg="yes"
851
ffplay="yes"
852
ffserver="yes"
853
ipv6="yes"
854 5af4e0cc Måns Rullgård
static="yes"
855 1eb2212e Fabrice Bellard
mpegaudio_hp="yes"
856 8a608357 Måns Rullgård
network="yes"
857
optimize="yes"
858
protocols="yes"
859
vhook="default"
860
861
# build settings
862 baa3a937 Måns Rullgård
SHFLAGS='-shared -Wl,-soname,$@'
863 cab3ef82 Diego Biurrun
VHOOKSHFLAGS='$(SHFLAGS)'
864 e240ee67 Luca Barbato
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
865 c536cb09 Diego Biurrun
FFSERVERLDFLAGS=-Wl,-E
866 f39e56a8 Jacob Meuser
LDCONFIG="ldconfig"
867 f3ec2d46 Slavik Gnatenko
LIBPREF="lib"
868
LIBSUF=".a"
869 4bdd05e7 Diego Biurrun
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
870 f3ec2d46 Slavik Gnatenko
SLIBPREF="lib"
871
SLIBSUF=".so"
872 4bdd05e7 Diego Biurrun
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
873 b29bddab Diego Biurrun
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
874
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
875 21d0a823 Diego Biurrun
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIB)"'
876 ef0bc4c9 François Revol
877 c597172e Måns Rullgård
# find source path
878
source_path="`dirname \"$0\"`"
879
source_path_used="yes"
880
if test -z "$source_path" -o "$source_path" = "." ; then
881
    source_path="`pwd`"
882
    source_path_used="no"
883
else
884
    source_path="`cd \"$source_path\"; pwd`"
885
    echo "$source_path" | grep -q '[[:blank:]]' &&
886
      die "Out of tree builds are impossible with whitespace in source path."
887
fi
888
889
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
890
    show_help
891
fi
892
893
FFMPEG_CONFIGURATION="$@"
894
895 facbea95 Aurelien Jacobs
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
896
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
897
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
898
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
899
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
900
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
901
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
902 c597172e Måns Rullgård
903 cd61e407 Jason Millard
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
904 d3ea5692 Måns Rullgård
enable $ARCH_EXT_LIST
905 c597172e Måns Rullgård
906
die_unknown(){
907
    echo "Unknown option \"$1\"."
908
    echo "See $0 --help for available options."
909
    exit 1
910
}
911
912 794f8e97 Panagiotis Issaris
show_list() {
913
    for part in $*; do
914
        echo $part | sed 's/_[^_]*$//'
915
    done | sort
916
    exit 0
917
}
918
919 c597172e Måns Rullgård
for opt do
920
  optval="${opt#*=}"
921
  case "$opt" in
922
  --log)
923
  ;;
924
  --log=*) logging="$optval"
925
  ;;
926
  --prefix=*) PREFIX="$optval"
927
  ;;
928
  --libdir=*) libdir="$optval"
929
  ;;
930
  --shlibdir=*) shlibdir="$optval"
931
  ;;
932
  --incdir=*) incdir="$optval"
933
  ;;
934
  --mandir=*) mandir="$optval"
935
  ;;
936
  --source-path=*) source_path="$optval"
937
  ;;
938
  --cross-prefix=*) cross_prefix="$optval"
939
  ;;
940
  --cross-compile) cross_compile="yes"
941
  ;;
942
  --target-os=*) targetos="$optval"
943
  ;;
944
  --cc=*) cc="$optval"
945
  ;;
946
  --make=*) make="$optval"
947
  ;;
948
  --extra-cflags=*) add_cflags "$optval"
949
  ;;
950
  --extra-ldflags=*) add_ldflags "$optval"
951
  ;;
952
  --extra-libs=*) add_extralibs "$optval"
953
  ;;
954
  --build-suffix=*) BUILDSUF="$optval"
955
  ;;
956
  --arch=*) arch="$optval"
957
  ;;
958
  --cpu=*) cpu="$optval"
959
  ;;
960
  --disable-opts) optimize="no"
961
  ;;
962
  --enable-sunmlib) mlib="yes"
963
  ;;
964
  --disable-strip) dostrip="no"
965
  ;;
966
  --disable-encoders) disable $ENCODER_LIST
967
  ;;
968
  --disable-decoders) disable $DECODER_LIST
969
  ;;
970
  --disable-muxers) disable $MUXER_LIST
971
  ;;
972
  --disable-demuxers) disable $DEMUXER_LIST
973
  ;;
974
  --disable-parsers) disable $PARSER_LIST
975
  ;;
976 cd61e407 Jason Millard
  --disable-bsfs) disable $BSF_LIST
977
  ;;
978 c08fb000 Alex Beregszaszi
  --disable-protocols) disable $PROTOCOL_LIST
979
  ;;
980 c597172e Måns Rullgård
  --enable-*=*|--disable-*=*)
981
  eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
982
  case "$thing" in
983 cd61e407 Jason Millard
      encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
984 c597172e Måns Rullgård
      *) die_unknown "$opt" ;;
985
  esac
986
  ;;
987
  --enable-?*|--disable-?*)
988
  eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
989
  echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
990
  $action $option
991
  ;;
992 794f8e97 Panagiotis Issaris
  --list-*)
993
    NAME="${opt#--list-}"
994
    NAME=$(toupper ${NAME%s})
995
    eval show_list \$${NAME}_LIST
996
  ;;
997 c597172e Måns Rullgård
  --help) show_help
998
  ;;
999
  *)
1000
  die_unknown $opt
1001
  ;;
1002
  esac
1003
done
1004
1005 270739bb Måns Rullgård
case "$arch" in
1006
  i386|i486|i586|i686|i86pc|BePC)
1007
    arch="x86_32"
1008 7b829d2a Ramiro Polla
    enable fast_unaligned
1009 270739bb Måns Rullgård
  ;;
1010
  x86_64|amd64)
1011
    arch="x86_32"
1012 7b829d2a Ramiro Polla
    enable fast_unaligned
1013 270739bb Måns Rullgård
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1014
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1015
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1016
        arch="x86_64"
1017 c2a29455 Aurelien Jacobs
        enable fast_64bit
1018 270739bb Måns Rullgård
      fi
1019
    fi
1020
  ;;
1021
  # armv4l is a subset of armv[567]*l
1022
  arm|armv[4567]*l)
1023
    arch="armv4l"
1024
  ;;
1025
  alpha)
1026
    arch="alpha"
1027 c2a29455 Aurelien Jacobs
    enable fast_64bit
1028 270739bb Måns Rullgård
  ;;
1029 c2a29455 Aurelien Jacobs
  "Power Macintosh"|ppc|powerpc)
1030 270739bb Måns Rullgård
    arch="powerpc"
1031
  ;;
1032 c2a29455 Aurelien Jacobs
  ppc64)
1033
    arch="powerpc"
1034
    enable fast_64bit
1035
  ;;
1036 270739bb Måns Rullgård
  mips|mipsel|IP*)
1037
    arch="mips"
1038
  ;;
1039
  sun4u|sparc64)
1040
    arch="sparc64"
1041 c2a29455 Aurelien Jacobs
    enable fast_64bit
1042 270739bb Måns Rullgård
  ;;
1043
  sparc)
1044
    arch="sparc"
1045
  ;;
1046
  sh4)
1047
    arch="sh4"
1048
  ;;
1049 c2a29455 Aurelien Jacobs
  parisc)
1050
    arch="parisc"
1051
  ;;
1052
  parisc64)
1053 270739bb Måns Rullgård
    arch="parisc"
1054 c2a29455 Aurelien Jacobs
    enable fast_64bit
1055 270739bb Måns Rullgård
  ;;
1056
  s390|s390x)
1057
    arch="s390"
1058
  ;;
1059
  m68k)
1060
    arch="m68k"
1061
  ;;
1062
  ia64)
1063
    arch="ia64"
1064 c2a29455 Aurelien Jacobs
    enable fast_64bit
1065 270739bb Måns Rullgård
  ;;
1066
  bfin)
1067
    arch="bfin"
1068
  ;;
1069
  *)
1070
    arch="unknown"
1071
  ;;
1072
esac
1073
1074 9eeed841 Måns Rullgård
enable $arch
1075
enabled_any x86_32 x86_64 && enable x86
1076
enabled     sparc64       && enable sparc
1077
1078 ef0bc4c9 François Revol
# OS specific
1079 c597172e Måns Rullgård
osextralibs="-lm"
1080 ced75d92 Diego Biurrun
case $targetos in
1081 4a5444db Måns Rullgård
  beos|haiku|zeta)
1082 74cec57d François Revol
    PREFIX="$HOME/config"
1083 d474299a Måns Rullgård
    # helps building libavcodec
1084
    add_cflags "-DPIC -fomit-frame-pointer"
1085
    # 3 gcc releases known for BeOS, each with ugly bugs
1086
    gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1087
    case "$gcc_version" in
1088
      2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1089
        mmx="no"
1090
        ;;
1091
      *20010315*) echo "BeBits gcc"
1092
        add_cflags "-fno-expensive-optimizations"
1093
        ;;
1094
    esac
1095 74cec57d François Revol
    LDCONFIG="echo ignoring ldconfig"
1096 d474299a Måns Rullgård
    SHFLAGS=-nostart
1097
    # disable Linux things
1098
    dv1394="no"
1099
    # enable BeOS things
1100 c597172e Måns Rullgård
    disabled audio_beos || enable_audio_beos
1101 d474299a Måns Rullgård
    # no need for libm, but the inet stuff
1102
    # Check for BONE
1103 74cec57d François Revol
    # XXX: actually should check for NOT net_server
1104 d474299a Måns Rullgård
    if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1105 c597172e Måns Rullgård
        osextralibs="-lbind -lsocket"
1106 d474299a Måns Rullgård
    else
1107
        beos_netserver="yes"
1108 c597172e Måns Rullgård
        osextralibs="-lnet"
1109 d474299a Måns Rullgård
    fi ;;
1110 4a5444db Måns Rullgård
  sunos)
1111 d474299a Måns Rullgård
    dv1394="no"
1112
    FFSERVERLDFLAGS=""
1113
    SHFLAGS="-shared -Wl,-h,\$@"
1114
    add_extralibs "-lsocket -lnsl"
1115
    ;;
1116 4a5444db Måns Rullgård
  netbsd)
1117 d474299a Måns Rullgård
    dv1394="no"
1118
    add_extralibs "-lossaudio"
1119
    ;;
1120 4a5444db Måns Rullgård
  openbsd)
1121 d474299a Måns Rullgård
    dv1394="no"
1122
    need_memalign="no"
1123
    LIBOBJFLAGS="\$(PIC)"
1124 21d0a823 Diego Biurrun
    LDCONFIG="ldconfig -m \$(SHLIBDIR)"
1125 d474299a Måns Rullgård
    SHFLAGS='-shared'
1126
    SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
1127
    SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1128
    SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1129
    add_extralibs "-lossaudio"
1130
    ;;
1131 4a5444db Måns Rullgård
  freebsd)
1132 d474299a Måns Rullgård
    dv1394="no"
1133
    need_memalign="no"
1134
    add_cflags "-pthread"
1135
    ;;
1136 4a5444db Måns Rullgård
  gnu/kfreebsd)
1137 d474299a Måns Rullgård
    dv1394="no"
1138
    add_cflags "-pthread"
1139
    ;;
1140 4a5444db Måns Rullgård
  bsd/os)
1141 d474299a Måns Rullgård
    dv1394="no"
1142 c597172e Måns Rullgård
    osextralibs="-lpoll -lgnugetopt -lm"
1143 d474299a Måns Rullgård
    strip="strip -d"
1144
    ;;
1145 4a5444db Måns Rullgård
  darwin)
1146 d474299a Måns Rullgård
    dv1394="no"
1147
    need_memalign="no"
1148 21d0a823 Diego Biurrun
    SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(SHLIBDIR)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1149
    VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1150 c597172e Måns Rullgård
    osextralibs=""
1151 d474299a Måns Rullgård
    strip="strip -x"
1152
    FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1153
    SLIBSUF=".dylib"
1154
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1155
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1156
    FFSERVERLDFLAGS=-Wl,-bind_at_load
1157
    ;;
1158 4a5444db Måns Rullgård
  mingw32*)
1159 91c5172d Diego Biurrun
    targetos=mingw32
1160 5880d5b5 Ramiro Polla
    shlibdir="$bindir"
1161 4ec9ec81 Måns Rullgård
    dv1394="no"
1162 1bdf0fe7 Ramiro Polla
    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
1163
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1164 4ec9ec81 Måns Rullgård
    ffserver="no"
1165
    network="no"
1166
    SLIBPREF=""
1167
    SLIBSUF=".dll"
1168
    EXESUF=".exe"
1169
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1170
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1171
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1172 21d0a823 Diego Biurrun
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(SHLIBDIR)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1173 d205abe9 Zuxy Meng
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base"
1174 124bed6f Alex Beregszaszi
    enabled network && add_extralibs -lws2_32
1175 d474299a Måns Rullgård
    ;;
1176 4a5444db Måns Rullgård
  cygwin*)
1177 ced75d92 Diego Biurrun
    targetos=cygwin
1178 d474299a Måns Rullgård
    shlibdir="$bindir"
1179
    dv1394="no"
1180 41d5a86a Víctor Paesa
    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1181
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1182
    if enabled swscaler; then
1183
        VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1184
        VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1185
    fi
1186 c597172e Måns Rullgård
    osextralibs=""
1187 d474299a Måns Rullgård
    EXESUF=".exe"
1188
    SLIBPREF="cyg"
1189
    SLIBSUF=".dll"
1190
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1191
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1192 d205abe9 Zuxy Meng
    SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a -Wl,--enable-auto-image-base'
1193 d474299a Måns Rullgård
    ;;
1194 4a5444db Måns Rullgård
  linux)
1195 d474299a Måns Rullgård
    LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1196
    ;;
1197 4a5444db Måns Rullgård
  irix*)
1198 ced75d92 Diego Biurrun
    targetos=irix
1199 d474299a Måns Rullgård
    ranlib="echo ignoring ranlib"
1200
    ;;
1201
  *)
1202
    targetos="${targetos}-UNKNOWN"
1203
    ;;
1204 ef0bc4c9 François Revol
esac
1205 de6d9b64 Fabrice Bellard
1206 c597172e Måns Rullgård
add_extralibs $osextralibs
1207 de6d9b64 Fabrice Bellard
1208 e3c00e34 Diego Biurrun
if ! disabled logging ; then
1209 90be59ef Ramiro Polla
    enabled logging || logfile="$logging"
1210 57bd82d4 Måns Rullgård
    echo "# $0 $@" >$logfile
1211
    set >>$logfile
1212 2ba042a7 Måns Rullgård
else
1213
    logfile=/dev/null
1214 57bd82d4 Måns Rullgård
fi
1215 e89b8b0a Diego Biurrun
1216 28d8e661 Diego Biurrun
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1217
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1218 e89b8b0a Diego Biurrun
1219 fac252f9 Måns Rullgård
test -n "$cross_prefix" && cross_compile=yes
1220 1ea46bed Måns Rullgård
cc="${cross_prefix}${cc}"
1221
ar="${cross_prefix}${ar}"
1222
ranlib="${cross_prefix}${ranlib}"
1223
strip="${cross_prefix}${strip}"
1224
1225 320d060a Diego Biurrun
# we need to build at least one lib type
1226 5af4e0cc Måns Rullgård
if disabled_all static shared; then
1227 320d060a Diego Biurrun
    cat <<EOF
1228
At least one library type must be built.
1229
Specify --enable-static to build the static libraries or --enable-shared to
1230
build the shared libraries as well. To only build the shared libraries specify
1231
--disable-static in addition to --enable-shared.
1232
EOF
1233
    exit 1;
1234
fi
1235
1236 ddf50e4c Ramiro Polla
if disabled libogg; then
1237
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1238
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1239 5c5dea3f Nilesh Bansal
fi
1240
1241 a2234ceb Ramiro Polla
if enabled_any libfaad libfaadbin ; then
1242
    if check_header faad.h; then
1243
        check_cc << EOF
1244
#include <faad.h>
1245
#ifndef FAAD2_VERSION
1246
ok faad1
1247
#endif
1248
int main( void ) { return 0; }
1249
EOF
1250
        test $? = 0 && enable libfaad2
1251
    else
1252 ff3dac65 Diego Biurrun
        die "FAAD test failed."
1253 a2234ceb Ramiro Polla
    fi
1254
fi
1255
1256
1257 47f9cc15 Diego Biurrun
if disabled gpl ; then
1258 54118497 Ramiro Polla
    die_gpl_disabled(){
1259
        name=$1
1260
        shift
1261
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1262
    }
1263
    die_gpl_disabled "The Postprocessing code" pp
1264 7bc5f2a8 Diego Biurrun
    die_gpl_disabled "liba52"                  liba52
1265 1cc60c47 Diego Biurrun
    die_gpl_disabled "libx264"                 libx264
1266
    die_gpl_disabled "libxvidcore"             libxvid
1267 54118497 Ramiro Polla
    die_gpl_disabled "FAAD2"                   libfaad2
1268
    die_gpl_disabled "The X11 grabber"         x11grab
1269
    die_gpl_disabled "The software scaler"     swscaler
1270 ebb810d9 Ramiro Polla
fi
1271 b2e3c528 Michael Niedermayer
1272 9eeed841 Måns Rullgård
check_deps $ARCH_EXT_LIST
1273 0f3cb305 Fabrice Bellard
1274 5d323602 Måns Rullgård
test -z "$need_memalign" && need_memalign="$mmx"
1275
1276 cf9d24ad Dan Christiansen
#Darwin CC versions
1277 75388c74 Michael Niedermayer
needmdynamicnopic="no"
1278 ced75d92 Diego Biurrun
if test $targetos = darwin; then
1279 b2924696 Roman Shaposhnik
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1280 30a3e5d4 Nigel Pearson
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1281 cf9d24ad Dan Christiansen
    else
1282 26c1b3be Diego Biurrun
        add_cflags "-no-cpp-precomp -pipe"
1283
        check_cflags "-force_cpusubtype_ALL"
1284
        check_cflags "-Wno-sign-compare"
1285
        disabled shared && needmdynamicnopic="yes"
1286 cf9d24ad Dan Christiansen
    fi
1287 2a1a6b64 Michael Niedermayer
fi
1288 074a9d2b Alexander Strange
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1289 2a1a6b64 Michael Niedermayer
1290 703afd07 Måns Rullgård
disabled optimize || add_cflags -fomit-frame-pointer
1291 cf9d24ad Dan Christiansen
1292 a4adb608 Michael Niedermayer
# Add processor-specific flags
1293 38d0a8aa Guillaume Poirier
if test $cpu != "generic"; then
1294 bc8ec47b Måns Rullgård
    warn_altivec(){
1295
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1296 1658bc4f Diego Biurrun
    }
1297 38d0a8aa Guillaume Poirier
    case $cpu in
1298 bb270c08 Diego Biurrun
        601|ppc601|PowerPC601)
1299 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=601"
1300 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC601
1301 bb270c08 Diego Biurrun
        ;;
1302
        603*|ppc603*|PowerPC603*)
1303 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=603"
1304 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC603
1305 bb270c08 Diego Biurrun
        ;;
1306
        604*|ppc604*|PowerPC604*)
1307 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=604"
1308 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC604
1309 bb270c08 Diego Biurrun
        ;;
1310
        G3|g3|75*|ppc75*|PowerPC75*)
1311 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1312 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC75x
1313 bb270c08 Diego Biurrun
        ;;
1314
        G4|g4|745*|ppc745*|PowerPC745*)
1315 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1316 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC745x
1317 bb270c08 Diego Biurrun
        ;;
1318
        74*|ppc74*|PowerPC74*)
1319 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1320 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC74xx
1321 bb270c08 Diego Biurrun
        ;;
1322
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1323 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1324 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC970
1325 9cafbd6c Måns Rullgård
            enable ppc64
1326 bb270c08 Diego Biurrun
        ;;
1327 e07e357d Luca Barbato
        Cell|CELL|cell)
1328
            add_cflags "-mcpu=cell"
1329
            warn_altivec disabled Cell
1330 9cafbd6c Måns Rullgård
            enable ppc64
1331 e07e357d Luca Barbato
        ;;
1332 e7768fc5 Guillaume Poirier
        # targets that do NOT support conditional mov (cmov)
1333
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1334 38d0a8aa Guillaume Poirier
            add_cflags "-march=$cpu"
1335 e7768fc5 Guillaume Poirier
            cmov="no"
1336
        ;;
1337
        # targets that do support conditional mov (cmov)
1338 416519dd Måns Rullgård
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1339 e7768fc5 Guillaume Poirier
            add_cflags "-march=$cpu"
1340 4c8d81fa Guillaume Poirier
            cmov="yes"
1341 7073e9fc Måns Rullgård
            fast_cmov="yes"
1342 94e4c3a3 Guillaume Poirier
        ;;
1343
        # targets that do support conditional mov but on which it's slow
1344
        pentium4|prescott|nocona)
1345
            add_cflags "-march=$cpu"
1346
            cmov="yes"
1347 7073e9fc Måns Rullgård
            fast_cmov="no"
1348 bb270c08 Diego Biurrun
        ;;
1349 d7b34d08 Diego Biurrun
        sparc64)
1350 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=v9"
1351 d7b34d08 Diego Biurrun
        ;;
1352 8684704b Marc Hoffman
        bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1353
            add_cflags "-mfdpic"
1354 846dffeb Diego Biurrun
            add_ldflags "-mfdpic"
1355 8684704b Marc Hoffman
        ;;
1356 bb270c08 Diego Biurrun
        *)
1357 38d0a8aa Guillaume Poirier
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1358 bb270c08 Diego Biurrun
        ;;
1359 a4adb608 Michael Niedermayer
    esac
1360
fi
1361
1362 412c1562 Måns Rullgård
gnu_make(){
1363
    $1 --version 2>&1 | grep -q GNU
1364
}
1365
1366
if ! gnu_make $make; then
1367
    gnu_make gmake && make=gmake || die "GNU make not found."
1368
fi
1369
1370 be0d52ab Måns Rullgård
# make sure we can execute files in $TMPDIR
1371
cat >$TMPE 2>>$logfile <<EOF
1372
#! /bin/sh
1373
EOF
1374
chmod +x $TMPE >>$logfile 2>&1
1375
if ! $TMPE >>$logfile 2>&1; then
1376
    cat <<EOF
1377
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1378 68300911 Diego Biurrun
variable to another directory and make sure that $TMPDIR1 is not mounted
1379
noexec.
1380 be0d52ab Måns Rullgård
EOF
1381
    die "Sanity test failed."
1382
fi
1383 0244f743 Måns Rullgård
rm $TMPE
1384 be0d52ab Måns Rullgård
1385 1a268acc Måns Rullgård
# compiler sanity check
1386
check_exec <<EOF
1387
int main(){
1388
    return 0;
1389
}
1390
EOF
1391
if test "$?" != 0; then
1392
    echo "$cc is unable to create an executable file."
1393 d6ceace3 Diego Biurrun
    if test -z "$cross_prefix" && disabled cross_compile ; then
1394 1a268acc Måns Rullgård
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1395 c7ae6345 Måns Rullgård
        echo "Only do this if you know what cross compiling means."
1396 1a268acc Måns Rullgård
    fi
1397
    die "C compiler test failed."
1398
fi
1399
1400 9eeed841 Måns Rullgård
if enabled x86; then
1401 44965991 Panagiotis Issaris
    # check whether EBP is available on x86
1402
    # As 'i' is stored on the stack, this program will crash
1403
    # if the base pointer is used to access it because the
1404
    # base pointer is cleared in the inline assembly code.
1405 7dfef245 Måns Rullgård
    check_exec_crash <<EOF && enable ebp_available
1406 44965991 Panagiotis Issaris
    volatile int i=0;
1407
    asm volatile (
1408
        "xorl %%ebp, %%ebp"
1409
    ::: "%ebp");
1410
    return i;
1411
EOF
1412
1413
    # check wether EBX is available on x86
1414
    check_cc <<EOF && enable ebx_available
1415
int main(){
1416
    asm volatile ("":::"%ebx");
1417
}
1418
EOF
1419 8e380710 Loren Merritt
1420
    # check whether binutils is new enough to compile SSSE3
1421 9eeed841 Måns Rullgård
    enabled ssse3 && check_cc <<EOF || disable ssse3
1422 8e380710 Loren Merritt
int main(){
1423
    asm volatile ("pabsw %xmm0, %xmm0");
1424
}
1425
EOF
1426 44965991 Panagiotis Issaris
fi
1427
1428 87ea51e0 Luca Barbato
# check for assembler specific support
1429
1430 cc6a90dd Guillaume Poirier
if test $arch = "powerpc"; then
1431 87ea51e0 Luca Barbato
check_cc <<EOF && dcbzl=yes
1432
int main(void) {
1433
    register long zero = 0;
1434
    char data[1024];
1435
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1436
return 0;
1437
}
1438
EOF
1439
fi
1440
1441 57bd82d4 Måns Rullgård
# check for SIMD availability
1442
1443 115329f1 Diego Biurrun
# AltiVec flags: The FSF version of GCC differs from the Apple version
1444 9eeed841 Måns Rullgård
if enabled altivec; then
1445 0182fee8 Måns Rullgård
    if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1446
        add_cflags "-faltivec"
1447
    else
1448
        add_cflags "-maltivec -mabi=altivec"
1449
    fi
1450 b6e52719 Magnus Damm
1451 0182fee8 Måns Rullgård
    check_header altivec.h
1452 a9a07762 Michael Niedermayer
1453 0182fee8 Måns Rullgård
    # check if our compiler supports Motorola AltiVec C API
1454 90be59ef Ramiro Polla
    if enabled altivec_h; then
1455 f25fc9b1 Måns Rullgård
        inc_altivec_h="#include <altivec.h>"
1456
    else
1457
        inc_altivec_h=
1458
    fi
1459
    check_cc <<EOF || altivec=no
1460 dcd479c0 Måns Rullgård
$inc_altivec_h
1461 a9a07762 Michael Niedermayer
int main(void) {
1462
    vector signed int v1, v2, v3;
1463
    v1 = vec_add(v2,v3);
1464
    return 0;
1465
}
1466
EOF
1467
fi
1468 ab6c65f6 Brian Foley
1469 854fdb51 Måns Rullgård
# check armv5te instructions support
1470 9eeed841 Måns Rullgård
enabled armv5te && check_cc <<EOF || disable armv5te
1471 0182fee8 Måns Rullgård
int main(void) {
1472
    __asm__ __volatile__ ("qadd r0, r0, r0");
1473
}
1474 854fdb51 Måns Rullgård
EOF
1475
1476 9eeed841 Måns Rullgård
enabled armv6 && check_cc <<EOF || disable armv6
1477 edab3048 Måns Rullgård
int main(void) {
1478
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1479
}
1480
EOF
1481
1482 854fdb51 Måns Rullgård
# check iwmmxt support
1483 9eeed841 Måns Rullgård
enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1484 0182fee8 Måns Rullgård
int main(void) {
1485
    __asm__ __volatile__ ("wunpckelub wr6, wr4");
1486
}
1487 854fdb51 Måns Rullgård
EOF
1488 d46aba26 Leon van Stuivenberg
1489 29799f8b Diego Biurrun
# check if our compiler supports mmi
1490 57bd82d4 Måns Rullgård
enabled mmi && check_cc <<EOF || mmi="no"
1491 d46aba26 Leon van Stuivenberg
int main(void) {
1492
    __asm__ ("lq \$2, 0(\$2)");
1493
    return 0;
1494
}
1495
EOF
1496 57bd82d4 Måns Rullgård
1497
# ---
1498
# big/little-endian test
1499 37970ebf Ramiro Polla
if disabled cross_compile; then
1500 57bd82d4 Måns Rullgård
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1501 a3999908 Michael Niedermayer
#include <inttypes.h>
1502
int main(int argc, char ** argv){
1503 bb270c08 Diego Biurrun
        volatile uint32_t i=0x01234567;
1504
        return (*((uint8_t*)(&i))) == 0x67;
1505 a3999908 Michael Niedermayer
}
1506
EOF
1507 487a54d7 Fabrice Bellard
else
1508 f25fc9b1 Måns Rullgård
    # programs cannot be launched if cross compiling, so make a static guess
1509 cc6a90dd Guillaume Poirier
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1510 f25fc9b1 Måns Rullgård
        bigendian="yes"
1511
    fi
1512 487a54d7 Fabrice Bellard
fi
1513
1514 a3999908 Michael Niedermayer
# ---
1515 3d204385 Nick Kurshev
# check availability of some header files
1516
1517 0701ca7f Måns Rullgård
check_header malloc.h
1518
check_func memalign
1519 3d204385 Nick Kurshev
1520 797ee6a6 Diego Biurrun
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1521 57bd82d4 Måns Rullgård
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1522 8bf5d58f Michael Niedermayer
fi
1523
1524 0701ca7f Måns Rullgård
check_header byteswap.h
1525 47d23bbf Måns Rullgård
1526 6ffa87d3 Ramiro Polla
check_func mkstemp
1527
1528 e16e49ac Ramiro Polla
check_header termios.h
1529
check_header conio.h
1530
1531 c9fdab0d François Revol
check_header arpa/inet.h
1532
1533 0701ca7f Måns Rullgård
check_func inet_aton
1534 57bd82d4 Måns Rullgård
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1535
1536 b0c858d8 François Revol
# ffserver uses poll(),
1537
# if it's not found we can emulate it using select().
1538
if enabled ffserver; then
1539
    check_header sys/poll.h
1540
fi
1541
1542 57bd82d4 Måns Rullgård
# check for some common methods of building with pthread support
1543
# do this before the optional library checks as some of them require pthreads
1544
if enabled pthreads; then
1545 9e7fd101 Måns Rullgård
    if check_func pthread_create; then
1546
        :
1547
    elif check_func pthread_create -pthread; then
1548
        add_cflags -pthread
1549
        add_ldflags -pthread
1550
    elif check_func pthread_create -pthreads; then
1551
        add_cflags -pthreads
1552
        add_ldflags -pthreads
1553
    elif ! check_lib pthread.h pthread_create -lpthread; then
1554
        die "ERROR: can't find pthreads library"
1555
    fi
1556 57bd82d4 Måns Rullgård
fi
1557
1558 8eee7025 Diego Biurrun
for thread in $THREADS_LIST; do
1559 e5f94c2b Ramiro Polla
    if enabled $thread; then
1560 aa45201d Måns Rullgård
        if test -n "$thread_type"; then
1561 e5f94c2b Ramiro Polla
            die "ERROR: Only one thread type must be selected."
1562
        else
1563
            thread_type="$thread"
1564
        fi
1565
    fi
1566
done
1567
1568 f32adb22 Måns Rullgård
# test for lrintf in math.h
1569
check_exec <<EOF && lrintf=yes || lrintf=no
1570
#define _ISOC9X_SOURCE  1
1571
#include <math.h>
1572
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1573
EOF
1574
1575 f5a756ef Diego Biurrun
enabled_any libamr_nb libamr_wb && enable libamr
1576 12b61a74 Måns Rullgård
1577 57bd82d4 Måns Rullgård
# these are off by default, so fail if requested and not available
1578 7bc5f2a8 Diego Biurrun
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1579 f5a756ef Diego Biurrun
enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1580
enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1581 910c62e1 Diego Biurrun
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1582 6ebe07fb Diego Biurrun
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1583 910c62e1 Diego Biurrun
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1584
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1585
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1586
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1587 1cc60c47 Diego Biurrun
enabled libx264    && require x264 x264.h x264_encoder_open -lx264
1588
enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
1589 910c62e1 Diego Biurrun
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1590
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1591 f8d7b072 Måns Rullgård
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1592
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1593
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1594 8ac17293 Steve L'Homme
1595 c13e1abd Falk Hüffner
_restrict=
1596
for restrict_keyword in restrict __restrict__ __restrict; do
1597 57bd82d4 Måns Rullgård
    check_cc <<EOF && _restrict=$restrict_keyword && break
1598 dcd479c0 Måns Rullgård
void foo(char * $restrict_keyword p);
1599
EOF
1600 c13e1abd Falk Hüffner
done
1601
1602 a8721c09 Fabrice Bellard
# dlopen/dlfcn.h probing
1603
1604 0701ca7f Måns Rullgård
check_header dlfcn.h
1605 a8721c09 Fabrice Bellard
1606 dcd479c0 Måns Rullgård
if check_func dlopen; then
1607
    ldl=
1608 0701ca7f Måns Rullgård
elif check_func dlopen -ldl; then
1609
    ldl=-ldl
1610 a8721c09 Fabrice Bellard
fi
1611
1612 66be5b45 Ramiro Polla
check_func getrusage
1613 7495c306 Ramiro Polla
check_func2 windows.h GetProcessTimes
1614 66be5b45 Ramiro Polla
1615 4f3da985 Ramiro Polla
check_func fork
1616
1617 703afd07 Måns Rullgård
test "$vhook" = "default" && vhook="$dlopen"
1618 a8721c09 Fabrice Bellard
1619 81a409c8 François Revol
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1620 bfd2edeb Michael Niedermayer
1621 b0268cc0 Ramiro Polla
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1622 fbb9d104 Víctor Paesa
    vhook="no"
1623
    echo
1624 b0268cc0 Ramiro Polla
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1625 fbb9d104 Víctor Paesa
    echo "Patches welcome."
1626
    echo
1627
fi
1628
1629 8d923001 Måns Rullgård
if enabled vhook; then
1630
    check_ldflags -rdynamic
1631
    check_ldflags -export-dynamic
1632
fi
1633 bfd2edeb Michael Niedermayer
1634 703afd07 Måns Rullgård
enabled audio_beos && add_extralibs "-lmedia -lbe"
1635 9464f2b8 Diego Biurrun
1636 eea50282 Måns Rullgård
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1637
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1638 04511d53 Philip Gladstone
1639 a86b921c Fabrice Bellard
##########################################
1640 29799f8b Diego Biurrun
# SDL check
1641 a86b921c Fabrice Bellard
1642
sdl_too_old=no
1643
sdl=no
1644 6a1a892f Frantisek Dvorak
SDL_CONFIG="${cross_prefix}sdl-config"
1645 225e21ef Måns Rullgård
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1646
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1647
    temp_cflags $sdl_cflags
1648 dcd479c0 Måns Rullgård
    temp_extralibs `"${SDL_CONFIG}" --libs`
1649 225e21ef Måns Rullgård
    if check_lib SDL.h SDL_Init; then
1650 dcd479c0 Måns Rullgård
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1651 29f3b38a Måns Rullgård
        if test "$_sdlversion" -lt 121 ; then
1652 dcd479c0 Måns Rullgård
            sdl_too_old=yes
1653
        else
1654
            sdl=yes
1655 225e21ef Måns Rullgård
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1656 29f3b38a Måns Rullgård
#include <SDL.h>
1657
int main(void){
1658
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1659
    int w = vi->current_w;
1660
    return 0;
1661
}
1662
EOF
1663 dcd479c0 Måns Rullgård
        fi
1664
    fi
1665 29f3b38a Måns Rullgård
    restore_flags
1666 c3f6b472 Michael Niedermayer
fi
1667 57bd82d4 Måns Rullgård
1668 d5697779 Måns Rullgård
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1669 146ea952 Nicolas Boos
1670 7a91333f Hans Zandbelt
##########################################
1671 29799f8b Diego Biurrun
# IPv6 check
1672 7a91333f Hans Zandbelt
1673 0c7bb0e5 Luca Barbato
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1674 7a91333f Hans Zandbelt
#include <sys/types.h>
1675
#include <sys/socket.h>
1676
#include <netinet/in.h>
1677
#include <netdb.h>
1678
int main( void ) {
1679
  struct sockaddr_storage saddr;
1680
  struct ipv6_mreq mreq6;
1681
  getaddrinfo(0,0,0,0);
1682
  getnameinfo(0,0,0,0,0,0,0);
1683 12fe88b4 Dan Villiom Podlaski Christiansen
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1684 7a91333f Hans Zandbelt
}
1685
EOF
1686
1687 afde41b4 Måns Rullgård
enabled v4l  && check_header linux/videodev.h  || disable v4l
1688
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1689 47f38850 Luca Abeni
1690 f8aa696f Diego Biurrun
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1691
if enabled bktr; then
1692 3eac5c63 Måns Rullgård
    { check_header dev/bktr/ioctl_meteor.h &&
1693
      check_header dev/bktr/ioctl_bt848.h; } ||
1694
    { check_header machine/ioctl_meteor.h &&
1695
      check_header machine/ioctl_bt848.h; } ||
1696
    { check_header dev/video/meteor/ioctl_meteor.h &&
1697
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1698
    check_header dev/ic/bt8xx.h ||
1699
    disable bktr
1700 f8aa696f Diego Biurrun
fi
1701
1702 deb29777 Måns Rullgård
enabled audio_oss &&
1703
    check_header sys/soundcard.h ||
1704
    check_header soundcard.h ||
1705
    disable audio_oss
1706
1707 f58f4ce1 Guillaume Poirier
# Deal with the x11 frame grabber
1708 56a059ac Diego Biurrun
enabled x11grab                         &&
1709 f58f4ce1 Guillaume Poirier
enabled gpl                             &&
1710
enabled x11_grab_device_demuxer         &&
1711
check_header X11/Xlib.h                 &&
1712
check_header X11/extensions/XShm.h      &&
1713
check_func XOpenDisplay -lX11           &&
1714
check_func XShmCreateImage -lX11 -lXext &&
1715
add_extralibs -lX11 -lXext              ||
1716
disable x11_grab_device_demuxer
1717
1718 57bd82d4 Måns Rullgård
enabled debug && add_cflags -g
1719
1720
# add some useful compiler flags if supported
1721
check_cflags -Wdeclaration-after-statement
1722 dcd479c0 Måns Rullgård
check_cflags -Wall
1723
check_cflags -Wno-switch
1724 c07bd6a9 Michael Niedermayer
check_cflags -Wdisabled-optimization
1725
check_cflags -Wpointer-arith
1726
check_cflags -Wredundant-decls
1727 cc1fb623 Måns Rullgård
check_cflags -Wno-pointer-sign
1728 5af4e0cc Måns Rullgård
enabled extra_warnings && check_cflags -Winline
1729 cf9d24ad Dan Christiansen
1730 57bd82d4 Måns Rullgård
# add some linker flags
1731 5c0e9479 Måns Rullgård
check_ldflags -Wl,--warn-common
1732 e240ee67 Luca Barbato
check_ldflags $LDLATEFLAGS
1733 94a3401e Fabrice Bellard
1734 bd2216e4 Måns Rullgård
if enabled small; then
1735
    check_cflags -Os            # not all compilers support -Os
1736
    optimize="small"
1737
elif enabled optimize; then
1738 b2924696 Roman Shaposhnik
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1739 30a3e5d4 Nigel Pearson
        add_cflags  "-O5"
1740
        add_ldflags "-O5"
1741 cf9d24ad Dan Christiansen
    else
1742 30a3e5d4 Nigel Pearson
        add_cflags "-O3"
1743 cf9d24ad Dan Christiansen
    fi
1744 cddf3f45 Glenn Maynard
fi
1745
1746 80581e98 Michael Niedermayer
# PIC flags for shared library objects where they are needed
1747 5af4e0cc Måns Rullgård
if enabled shared; then
1748 f25fc9b1 Måns Rullgård
    # LIBOBJFLAGS may have already been set in the OS configuration
1749
    if test -z "$LIBOBJFLAGS" ; then
1750 cc6a90dd Guillaume Poirier
        case "$arch" in
1751 f824ba7b Luca Barbato
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1752 813457e5 Måns Rullgård
        esac
1753 80581e98 Michael Niedermayer
    fi
1754
fi
1755
1756 90be59ef Ramiro Polla
if enabled gprof; then
1757 30a3e5d4 Nigel Pearson
    add_cflags  "-p"
1758
    add_ldflags "-p"
1759 1db54e20 Diego Biurrun
fi
1760
1761 3b26ee47 Måns Rullgård
VHOOKCFLAGS="-fPIC"
1762 18451f7d Måns Rullgård
1763 4454dc1b John Dalgliesh
# find if .align arg is power-of-two or not
1764
if test $asmalign_pot = "unknown"; then
1765
    asmalign_pot="no"
1766
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1767
fi
1768
1769 660db1d6 Diego Biurrun
enabled_any $ENCODER_LIST  && enable encoders
1770
enabled_any $DECODER_LIST  && enable decoders
1771
enabled_any $MUXER_LIST    && enable muxers
1772
enabled_any $DEMUXER_LIST  && enable demuxers
1773 c08fb000 Alex Beregszaszi
enabled_any $PROTOCOL_LIST && enable protocols
1774 cd61e407 Jason Millard
enabled_any $BSF_LIST      && enable bsfs
1775 f70f03f6 Måns Rullgård
1776 660db1d6 Diego Biurrun
enabled_any $THREADS_LIST  && enable threads
1777 f70f03f6 Måns Rullgård
1778
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1779 cd61e407 Jason Millard
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1780 f70f03f6 Måns Rullgård
1781 fb2ce7d9 Måns Rullgård
enabled libogg    && append pkg_requires "ogg >= 1.1"
1782
enabled libtheora && append pkg_requires "theora"
1783
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1784
enabled dc1394    && append pkg_requires "libraw1394"
1785
1786 f36958f8 Diego Biurrun
echo "install prefix            $PREFIX"
1787
echo "source path               $source_path"
1788
echo "C compiler                $cc"
1789
echo "make                      $make"
1790 bfd5afd8 Diego Biurrun
echo ".align is power-of-two    $asmalign_pot"
1791 f36958f8 Diego Biurrun
echo "ARCH                      $arch ($cpu)"
1792 eb94aca9 Charles Yates
if test "$BUILDSUF" != ""; then
1793 f36958f8 Diego Biurrun
    echo "build suffix              $BUILDSUF"
1794 eb94aca9 Charles Yates
fi
1795 0db2ce77 Måns Rullgård
echo "big-endian                ${bigendian-no}"
1796 419b8784 Diego Biurrun
if test $arch = "x86_32" -o $arch = "x86_64"; then
1797 0db2ce77 Måns Rullgård
    echo "MMX enabled               ${mmx-no}"
1798
    echo "CMOV enabled              ${cmov-no}"
1799
    echo "CMOV is fast              ${fast_cmov-no}"
1800 e41e8342 Fabrice Bellard
fi
1801 cc6a90dd Guillaume Poirier
if test $arch = "armv4l"; then
1802 0db2ce77 Måns Rullgård
    echo "ARMv5TE enabled           ${armv5te-no}"
1803
    echo "ARMv6 enabled             ${armv6-no}"
1804
    echo "IWMMXT enabled            ${iwmmxt-no}"
1805 eba9ae3c Gildas Bazin
fi
1806 cc6a90dd Guillaume Poirier
if test $arch = "mips"; then
1807 0db2ce77 Måns Rullgård
    echo "MMI enabled               ${mmi-no}"
1808 e41e8342 Fabrice Bellard
fi
1809 cc6a90dd Guillaume Poirier
if test $arch = "powerpc"; then
1810 0db2ce77 Måns Rullgård
    echo "AltiVec enabled           ${altivec-no}"
1811
    echo "dcbzl available           ${dcbzl-no}"
1812 e41e8342 Fabrice Bellard
fi
1813 0db2ce77 Måns Rullgård
echo "gprof enabled             ${gprof-no}"
1814
echo "debug symbols             ${debug-no}"
1815
echo "strip symbols             ${dostrip-no}"
1816
echo "optimize                  ${optimize-no}"
1817
echo "static                    ${static-no}"
1818
echo "shared                    ${shared-no}"
1819
echo "postprocessing support    ${pp-no}"
1820
echo "software scaler enabled   ${swscaler-no}"
1821
echo "video hooking             ${vhook-no}"
1822 90be59ef Ramiro Polla
if enabled vhook; then
1823 0db2ce77 Måns Rullgård
    echo "Imlib2 support            ${imlib2-no}"
1824
    echo "FreeType support          ${freetype2-no}"
1825 68892110 Philip Gladstone
fi
1826 0db2ce77 Måns Rullgård
echo "network support           ${network-no}"
1827 90be59ef Ramiro Polla
if enabled network; then
1828 0db2ce77 Måns Rullgård
    echo "IPv6 support              ${ipv6-no}"
1829 bfd5afd8 Diego Biurrun
fi
1830 0db2ce77 Måns Rullgård
echo "threading support         ${thread_type-no}"
1831
echo "SDL support               ${sdl-no}"
1832 90be59ef Ramiro Polla
if enabled sdl_too_old; then
1833 bfd5afd8 Diego Biurrun
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1834
fi
1835 0db2ce77 Måns Rullgård
echo "Sun medialib support      ${mlib-no}"
1836
echo "AVISynth enabled          ${avisynth-no}"
1837
echo "liba52 support            ${liba52-no}"
1838
echo "liba52 dlopened           ${liba52bin-no}"
1839
echo "libamr-nb support         ${libamr_nb-no}"
1840
echo "libamr-wb support         ${libamr_wb-no}"
1841
echo "libfaac enabled           ${libfaac-no}"
1842
echo "libfaad enabled           ${libfaad-no}"
1843 7e0871a7 Diego Biurrun
echo "libfaad dlopened          ${libfaadbin-no}"
1844 0db2ce77 Måns Rullgård
echo "libgsm enabled            ${libgsm-no}"
1845
echo "libmp3lame enabled        ${libmp3lame-no}"
1846
echo "libnut enabled            ${libnut-no}"
1847
echo "libogg enabled            ${libogg-no}"
1848
echo "libtheora enabled         ${libtheora-no}"
1849
echo "libvorbis enabled         ${libvorbis-no}"
1850
echo "x264 enabled              ${libx264-no}"
1851
echo "XviD enabled              ${libxvid-no}"
1852
echo "zlib enabled              ${zlib-no}"
1853 37970ebf Ramiro Polla
if disabled gpl; then
1854 f25fc9b1 Måns Rullgård
    echo "License: LGPL"
1855 b2e3c528 Michael Niedermayer
else
1856 f25fc9b1 Måns Rullgård
    echo "License: GPL"
1857 b2e3c528 Michael Niedermayer
fi
1858 de6d9b64 Fabrice Bellard
1859 29799f8b Diego Biurrun
echo "Creating config.mak and config.h..."
1860 de6d9b64 Fabrice Bellard
1861 29799f8b Diego Biurrun
echo "# Automatically generated by configure - do not modify!" > config.mak
1862
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1863 0fd12426 Diego Biurrun
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1864 de6d9b64 Fabrice Bellard
1865 2266e085 Diego Biurrun
echo "PREFIX=$PREFIX" >> config.mak
1866 c75560ae Diego Biurrun
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1867 22a324da Diego Biurrun
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1868
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1869
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1870
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1871
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1872 4a908fbc Alex Beregszaszi
echo "MAKE=$make" >> config.mak
1873 980fc7b8 Fabrice Bellard
echo "CC=$cc" >> config.mak
1874
echo "AR=$ar" >> config.mak
1875 be7109c1 Michael Niedermayer
echo "RANLIB=$ranlib" >> config.mak
1876 90be59ef Ramiro Polla
if enabled dostrip; then
1877 f25fc9b1 Måns Rullgård
    echo "STRIP=$strip" >> config.mak
1878 65d1bea2 Michel Bardiaux
else
1879 f25fc9b1 Måns Rullgård
    echo "STRIP=echo ignoring strip" >> config.mak
1880 65d1bea2 Michel Bardiaux
fi
1881 75388c74 Michael Niedermayer
1882 a9b3f630 Nick Kurshev
echo "OPTFLAGS=$CFLAGS" >> config.mak
1883 408382a4 Diego Biurrun
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1884 0f3cb305 Fabrice Bellard
echo "LDFLAGS=$LDFLAGS" >> config.mak
1885 f39e56a8 Jacob Meuser
echo "LDCONFIG=$LDCONFIG" >> config.mak
1886 c536cb09 Diego Biurrun
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1887 e1707f52 Michael Niedermayer
echo "SHFLAGS=$SHFLAGS" >> config.mak
1888 408382a4 Diego Biurrun
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1889 fbb9d104 Víctor Paesa
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1890 80581e98 Michael Niedermayer
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1891 5af4e0cc Måns Rullgård
echo "BUILD_STATIC=$static" >> config.mak
1892 eb94aca9 Charles Yates
echo "BUILDSUF=$BUILDSUF" >> config.mak
1893 f3ec2d46 Slavik Gnatenko
echo "LIBPREF=$LIBPREF" >> config.mak
1894 eb94aca9 Charles Yates
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1895 5af4e0cc Måns Rullgård
if enabled static; then
1896 320d060a Diego Biurrun
  echo "LIB=$LIB" >> config.mak
1897 1a44a8b6 Alexander Strasser
else # Some Make complain if this variable does not exist.
1898
  echo "LIB=" >> config.mak
1899 320d060a Diego Biurrun
fi
1900 f3ec2d46 Slavik Gnatenko
echo "SLIBPREF=$SLIBPREF" >> config.mak
1901 eb94aca9 Charles Yates
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1902
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1903 4dc62701 Måns Rullgård
1904 90be59ef Ramiro Polla
if enabled bigendian; then
1905 0f3cb305 Fabrice Bellard
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1906
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1907 91d1f1a4 Nick Kurshev
fi
1908 90be59ef Ramiro Polla
if enabled mmx; then
1909 e82c5a8c Michael Niedermayer
  echo "#define __CPU__ 586" >> $TMPH
1910 de6d9b64 Fabrice Bellard
fi
1911 44161118 Måns Rullgård
1912 90be59ef Ramiro Polla
if enabled sdl; then
1913 6a1a892f Frantisek Dvorak
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1914
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1915 a86b921c Fabrice Bellard
fi
1916 90be59ef Ramiro Polla
if enabled texi2html; then
1917 146ea952 Nicolas Boos
  echo "BUILD_DOC=yes" >> config.mak
1918
fi
1919 5a872801 Luca Barbato
1920 790c9ca7 Luca Abeni
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1921 6d9a2421 Diego Biurrun
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1922 5a872801 Luca Barbato
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1923
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1924
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1925
1926
1927
1928 5af4e0cc Måns Rullgård
if enabled shared; then
1929 0319c531 Nick Kurshev
  echo "BUILD_SHARED=yes" >> config.mak
1930 97006039 Jacob Meuser
  echo "PIC=-fPIC -DPIC" >> config.mak
1931 7e303556 Diego Biurrun
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1932
  echo "SPPVERSION=$pp_version" >> config.mak
1933 39503a27 Diego Biurrun
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1934 5a872801 Luca Barbato
  echo "LAVCVERSION=$lavc_version" >> config.mak
1935 39503a27 Diego Biurrun
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1936 5a872801 Luca Barbato
  echo "LAVFVERSION=$lavf_version" >> config.mak
1937 39503a27 Diego Biurrun
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1938 5a872801 Luca Barbato
  echo "LAVUVERSION=$lavu_version" >> config.mak
1939 790c9ca7 Luca Abeni
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1940
  echo "SWSVERSION=$sws_version" >> config.mak
1941 4bdd05e7 Diego Biurrun
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1942 f3b60109 Diego Biurrun
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1943
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1944 5cb854e1 Diego Biurrun
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1945 8fbec4f4 Ramiro Polla
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1946 0319c531 Nick Kurshev
fi
1947 d7e27559 Diego Biurrun
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1948 ef0bc4c9 François Revol
echo "EXTRALIBS=$extralibs" >> config.mak
1949 d2845d68 Diego Biurrun
1950 3d907e22 Måns Rullgård
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1951
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1952
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1953
                                      $DECODER_LIST  \
1954
                                      $ENCODER_LIST  \
1955
                                      $PARSER_LIST   \
1956
                                      $BSF_LIST      \
1957
                                      $DEMUXER_LIST  \
1958
                                      $MUXER_LIST    \
1959
                                      $PROTOCOL_LIST \
1960 8ac17293 Steve L'Homme
1961 ced75d92 Diego Biurrun
if test "$targetos" = darwin; then
1962 90cee0c3 Michael Niedermayer
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1963
fi
1964
1965 c13e1abd Falk Hüffner
echo "#define restrict $_restrict" >> $TMPH
1966
1967 bd2216e4 Måns Rullgård
if enabled small; then
1968 bb801c97 Michael Niedermayer
  echo "#define always_inline"  >> $TMPH
1969
fi
1970
1971 997baf01 Måns Rullgård
echo "SRC_PATH=\"$source_path\"" >> config.mak
1972
echo "SRC_PATH_BARE=$source_path" >> config.mak
1973
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1974 0f3cb305 Fabrice Bellard
1975 8156056e John Dalgliesh
# Apparently it's not possible to portably echo a backslash.
1976 90be59ef Ramiro Polla
if enabled asmalign_pot; then
1977 8156056e John Dalgliesh
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1978 4454dc1b John Dalgliesh
else
1979 8156056e John Dalgliesh
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1980 4454dc1b John Dalgliesh
fi
1981
1982 bc634f6f Zdenek Kabelac
1983 9cb2cf10 Diego Biurrun
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1984 c683a5d1 Måns Rullgård
if ! cmp -s $TMPH config.h; then
1985 9cb2cf10 Diego Biurrun
        mv -f $TMPH config.h
1986
else
1987
        echo "config.h is unchanged"
1988
fi
1989 3d204385 Nick Kurshev
1990 f3ec2d46 Slavik Gnatenko
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1991 def4272a Aurelien Jacobs
1992 165af439 Måns Rullgård
# build tree in object directory if source path is different from current one
1993 90be59ef Ramiro Polla
if enabled source_path_used; then
1994 165af439 Måns Rullgård
    DIRS="\
1995
         doc \
1996
         libavformat \
1997
         libavcodec \
1998
         libavcodec/alpha \
1999
         libavcodec/armv4l \
2000
         libavcodec/bfin \
2001
         libavcodec/i386 \
2002
         libavcodec/sparc \
2003
         libavcodec/mlib \
2004
         libavcodec/ppc \
2005
         libpostproc \
2006
         libavutil \
2007
         libswscale \
2008
         tests \
2009 c07ed8c8 Måns Rullgård
         tools \
2010 165af439 Måns Rullgård
         vhook \
2011
         "
2012
    FILES="\
2013
          Makefile \
2014
          common.mak \
2015
          libavformat/Makefile \
2016
          libavcodec/Makefile \
2017
          libpostproc/Makefile \
2018
          libavutil/Makefile \
2019
          libswscale/Makefile \
2020
          doc/texi2pod.pl \
2021
          "
2022
    for dir in $DIRS ; do
2023
            mkdir -p $dir
2024
    done
2025
    for f in $FILES ; do
2026
        ln -sf "$source_path/$f" $f
2027
    done
2028
fi
2029 def4272a Aurelien Jacobs
2030
2031 d0674868 Diego Biurrun
# build pkg-config files
2032 77aee36c Diego Biurrun
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2033 def4272a Aurelien Jacobs
2034 d0674868 Diego Biurrun
pkgconfig_generate(){
2035
name=$1
2036
comment=$2
2037
version=$3
2038
libs=$4
2039
requires=$5
2040
include=$6
2041
cat <<EOF >$name.pc
2042 2266e085 Diego Biurrun
prefix=$PREFIX
2043 a94e666c Diego Biurrun
exec_prefix=\${prefix}
2044 def4272a Aurelien Jacobs
libdir=\${exec_prefix}/lib
2045 a94e666c Diego Biurrun
includedir=\${prefix}/include
2046 def4272a Aurelien Jacobs
2047 d0674868 Diego Biurrun
Name: $name
2048
Description: $comment
2049
Version: $version
2050
Requires: $requires
2051 def4272a Aurelien Jacobs
Conflicts:
2052 d0674868 Diego Biurrun
Libs: -L\${libdir} $libs
2053
Cflags: -I\${includedir} -I\${includedir}/$include
2054 def4272a Aurelien Jacobs
EOF
2055 d0674868 Diego Biurrun
}
2056 def4272a Aurelien Jacobs
2057 d0674868 Diego Biurrun
pkgconfig_generate_uninstalled(){
2058
name=$1
2059 9c476fd6 Måns Rullgård
shortname=${name#lib}
2060 d0674868 Diego Biurrun
comment=$2
2061
version=$3
2062
libs=$4
2063
requires=$5
2064
cat <<EOF >$name-uninstalled.pc
2065 def4272a Aurelien Jacobs
prefix=
2066
exec_prefix=
2067 d0674868 Diego Biurrun
libdir=\${pcfiledir}/$name
2068
includedir=\${pcfiledir}/$name
2069 def4272a Aurelien Jacobs
2070 d0674868 Diego Biurrun
Name: $name
2071
Description: $comment
2072
Version: $version
2073
Requires: $requires
2074 def4272a Aurelien Jacobs
Conflicts:
2075 d0674868 Diego Biurrun
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2076 def4272a Aurelien Jacobs
Cflags: -I\${includedir}
2077
EOF
2078 d0674868 Diego Biurrun
}
2079 def4272a Aurelien Jacobs
2080 9d824ad1 Måns Rullgård
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2081 d0674868 Diego Biurrun
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2082 def4272a Aurelien Jacobs
2083 d0674868 Diego Biurrun
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2084
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2085 def4272a Aurelien Jacobs
2086 d0674868 Diego Biurrun
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2087
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2088 def4272a Aurelien Jacobs
2089 90be59ef Ramiro Polla
if enabled pp; then
2090 2e3bcd38 Diego Biurrun
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2091
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2092
fi
2093 790c9ca7 Luca Abeni
2094 c839db53 Ramiro Polla
if enabled swscaler; then
2095 3d3361e5 Diego Biurrun
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2096 20c516c6 Dominik Mierzejewski
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2097 6c0d0413 j@v2v.cc
else
2098 3d3361e5 Diego Biurrun
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2099 d0674868 Diego Biurrun
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2100 c505dd31 Måns Rullgård
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2101
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2102 6c0d0413 j@v2v.cc
fi