Statistics
| Branch: | Revision:

ffmpeg / configure @ 7483e694

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