configure 71.6 KB
Newer Older
1
#!/bin/sh
2
#
3
4
# FFmpeg configure script
#
Diego Biurrun's avatar
Diego Biurrun committed
5
6
7
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9

10
# Prevent locale nonsense from breaking basic text processing.
11
12
LC_ALL=C
export LC_ALL
13

14
# make sure we are running under a compatible shell
15
16
17
# try to make this part work with most shells

try_exec(){
18
    echo "Trying shell $1"
19
    type "$1" > /dev/null 2>&1 && exec "$@"
20
21
}

Måns Rullgård's avatar
Måns Rullgård committed
22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24
25
E1="$?"

26
(: ${foo?}) 2> /dev/null
27
28
29
30
E2="$?"

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
31
32
33
34
35
36
37
38
39
40
41
42
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43
44
    fi
    echo "No compatible shell script interpreter found."
Diego Biurrun's avatar
typo    
Diego Biurrun committed
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
Diego Biurrun's avatar
Diego Biurrun committed
47
48
49
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
50
51
52
53
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
54
55
56
    exit 1
fi

57
58
59
60
61
62
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
63
64
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71
72
73
74
  echo "  --enable-static          build static libraries [yes]"
  echo "  --disable-static         do not build static libraries [no]"
  echo "  --enable-shared          build shared libraries [no]"
  echo "  --disable-shared         do not build shared libraries [yes]"
75
76
77
78
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
  echo "                           and binaries will be under GPL [no]"
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
  echo "                           and binaries will be unredistributable [no]"
79
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
80
  echo "  --enable-swscale         enable GPLed software scaler support [no]"
81
  echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
82
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
83
  echo "  --disable-vhook          disable video hooking support"
84
85
86
  echo "  --enable-beosthreads     use BeOS threads [no]"
  echo "  --enable-os2threads      use OS/2 threads [no]"
  echo "  --enable-pthreads        use pthreads [no]"
87
  echo "  --enable-vdpau           enable VDPAU support [no]"
88
89
  echo "  --enable-w32threads      use Win32 threads [no]"
  echo "  --enable-x11grab         enable X11 grabbing [no]"
Diego Biurrun's avatar
Diego Biurrun committed
90
  echo "  --enable-xvmc            enable XvMC support [no]"
91
92
  echo
  echo "External library support:"
93
94
  echo "  --enable-mlib            enable Sun medialib [no]"
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
95
96
97
  echo "  --enable-bzlib           enable bzlib [autodetect]"
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
Ramiro Polla's avatar
Ramiro Polla committed
98
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
99
100
101
102
103
104
105
  echo "                           and libraw1394 [no]"
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
106
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
107
  echo "                           native (de)muxer exists [no]"
108
109
110
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
111
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
112
113
  echo "                           native implementation exists [no]"
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
114
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
115
  echo "                           native MPEG-4/Xvid encoder exists [no]"
116
  echo "  --enable-zlib            enable zlib [autodetect]"
117
118
119
120
  echo ""
  echo "Advanced options (experts only):"
  echo "  --source-path=PATH       path to source code [$source_path]"
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
121
  echo "  --enable-cross-compile   assume a cross-compiler is used"
122
  echo "  --target-os=OS           compiler targets OS [$target_os]"
123
124
  echo "  --target-exec=CMD        command to run executables on target"
  echo "  --target-path=DIR        path to view of build directory on target"
125
  echo "  --nm=NM                  use nm tool"
126
  echo "  --cc=CC                  use C compiler CC [$cc]"
127
128
129
130
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
131
132
133
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
134
  echo "  --extra-version=STRING   version string suffix []"
135
136
137
  echo "  --build-suffix=SUFFIX    library name suffix []"
  echo "  --arch=ARCH              select architecture [$arch]"
  echo "  --cpu=CPU                select the minimum required CPU (affects"
138
  echo "                           instruction selection, may crash on older CPUs)"
139
  echo "  --enable-powerpc-perf    enable performance report on PPC"
140
  echo "                           (requires enabling PMC)"
141
  echo "  --disable-altivec        disable AltiVec optimizations"
142
143
  echo "  --disable-mmx            disable MMX optimizations"
  echo "  --disable-mmx2           disable MMX2 optimizations"
144
  echo "  --disable-sse            disable SSE optimizations"
145
146
147
  echo "  --disable-ssse3          disable SSSE3 optimizations"
  echo "  --disable-armv5te        disable armv5te optimizations"
  echo "  --disable-armv6          disable armv6 optimizations"
148
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
Diego Biurrun's avatar
Diego Biurrun committed
149
  echo "  --disable-armvfp         disable ARM VFP optimizations"
150
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
151
152
153
  echo "  --disable-mmi            disable MMI optimizations"
  echo "  --disable-neon           disable neon optimizations"
  echo "  --disable-vis            disable VIS optimizations"
154
  echo "  --disable-network        disable network support [no]"
155
  echo "  --disable-ipv6           disable IPv6 support [no]"
156
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
157
  echo "                           MPEG audio decoding [no]"
158
  echo "  --disable-aandct         disable AAN DCT code"
159
160
161
  echo "  --disable-fft            disable FFT code"
  echo "  --disable-golomb         disable Golomb code"
  echo "  --disable-mdct           disable MDCT code"
162
  echo "  --enable-gray            enable full grayscale support (slower color)"
163
  echo "  --disable-ffmpeg         disable ffmpeg build"
164
  echo "  --disable-ffplay         disable ffplay build"
165
  echo "  --disable-ffserver       disable ffserver build"
166
  echo "  --enable-small           optimize for size instead of speed"
Aurelien Jacobs's avatar
Aurelien Jacobs committed
167
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
168
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
169
  echo "  --enable-beos-netserver  enable BeOS netserver"
170
171
  echo "  --disable-encoder=NAME   disable encoder NAME"
  echo "  --enable-encoder=NAME    enable encoder NAME"
172
  echo "  --disable-encoders       disable all encoders"
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
  echo "  --disable-decoder=NAME   disable decoder NAME"
  echo "  --enable-decoder=NAME    enable decoder NAME"
  echo "  --disable-decoders       disable all decoders"
  echo "  --disable-muxer=NAME     disable muxer NAME"
  echo "  --enable-muxer=NAME      enable muxer NAME"
  echo "  --disable-muxers         disable all muxers"
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
  echo "  --disable-demuxers       disable all demuxers"
  echo "  --enable-parser=NAME     enable parser NAME"
  echo "  --disable-parser=NAME    disable parser NAME"
  echo "  --disable-parsers        disable all parsers"
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
  echo "  --disable-bsfs           disable all bitstream filters"
  echo "  --enable-protocol=NAME   enable protocol NAME"
  echo "  --disable-protocol=NAME  disable protocol NAME"
  echo "  --disable-protocols      disable all protocols"
191
192
  echo "  --disable-indevs         disable input devices"
  echo "  --disable-outdevs        disable output devices"
193
194
195
196
  echo "  --disable-devices        disable all devices"
  echo "  --enable-filter=NAME     enable filter NAME"
  echo "  --disable-filter=NAME    disable filter NAME"
  echo "  --disable-filters        disable all filters"
197
198
199
200
201
202
203
  echo "  --list-decoders          show all available decoders"
  echo "  --list-encoders          show all available encoders"
  echo "  --list-muxers            show all available muxers"
  echo "  --list-demuxers          show all available demuxers"
  echo "  --list-parsers           show all available parsers"
  echo "  --list-protocols         show all available protocols"
  echo "  --list-bsfs              show all available bitstream filters"
204
205
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
206
  echo "  --list-filters           show all available filters"
207
208
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
209
  echo "  --disable-debug          disable debugging symbols"
210
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
211
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
212
  echo "  --disable-optimizations  disable compiler optimizations"
213
  echo "  --enable-extra-warnings  enable more compiler warnings"
214
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
215
216
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
217
  exit 0
218
}
219

220
log(){
221
    echo "$@" >> $logfile
222
223
}

224
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
225
    log BEGIN $1
226
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
227
228
229
    log END $1
}

230
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
231
    log "$@"
232
    echo "$@"
233
234
235
236
237
238
239
}

die(){
    echolog "$@"
    cat <<EOF
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
240
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
241
EOF
242
    if disabled logging; then
243
        cat <<EOF
244
245
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
246
247
248
EOF
    else
cat <<EOF
249
250
Include the log file "$logfile" produced by configure as this will help
solving the problem.
251
252
EOF
    fi
253
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
254
255
256
    exit 1
}

257
# Avoid locale weirdness, besides we really just want to translate ASCII.
258
toupper(){
259
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
260
261
}

Måns Rullgård's avatar
Måns Rullgård committed
262
tolower(){
263
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
Måns Rullgård's avatar
Måns Rullgård committed
264
265
}

266
267
268
269
270
271
272
273
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

274
275
276
277
278
279
280
281
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
pushvar(){
    for var in $*; do
        eval level=\${${var}_level:=0}
        eval ${var}_${level}="\$$var"
        eval ${var}_level=$(($level+1))
    done
}

popvar(){
    for var in $*; do
        eval level=\${${var}_level:-0}
        test $level = 0 && continue
        eval level=$(($level-1))
        eval $var="\${${var}_${level}}"
        eval ${var}_level=$level
        eval unset ${var}_${level}
    done
}

301
302
303
304
305
306
307
308
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

309
310
311
312
313
314
315
316
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

317
318
319
320
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
321
322
        eval sgs="\$${var}_suggest"
        pushvar var sgs
323
        enable_deep $sel
324
325
        popvar sgs
        enable_deep_weak $sgs
326
327
328
329
330
331
332
333
334
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

335
336
337
338
339
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

340
enabled(){
341
342
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
343
344
}

345
disabled(){
346
347
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
348
349
}

350
351
352
353
354
355
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

356
357
358
359
360
361
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

362
363
364
365
366
367
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

368
369
370
371
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
372
    return 1
373
374
}

375
376
set_default(){
    for opt; do
377
        eval : \${$opt:=\$${opt}_default}
378
379
380
    done
}

381
382
383
384
385
386
387
388
389
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

390
391
check_deps(){
    for cfg; do
392
        cfg="${cfg#!}"
393
394
395
396
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

397
398
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
399
        eval dep_sel="\$${cfg}_select"
400
        eval dep_sgs="\$${cfg}_suggest"
401

402
403
404
        pushvar cfg dep_all dep_any dep_sel dep_sgs
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
        popvar cfg dep_all dep_any dep_sel dep_sgs
405

Måns Rullgård's avatar
Måns Rullgård committed
406
407
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
408
        disabled_any $dep_sel && disable $cfg
409

410
411
412
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
413
            enable_deep $dep_sel
414
            enable_deep_weak $dep_sgs
415
416
        fi

417
        disable ${cfg}_checking
418
419
420
    done
}

421
422
423
424
425
426
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
427
        ucname="`toupper $cfg`"
428
        if enabled $cfg; then
429
430
431
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
432
            echo "#define ${pfx}${ucname} 0" >> $header
433
434
        fi
    done
435
436
437
}

flags_saved(){
438
    (: ${SAVE_CFLAGS?}) 2> /dev/null
439
440
}

441
save_flags(){
442
    flags_saved && return
443
444
445
446
447
448
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
449
    flags_saved || return
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
    extralibs="$SAVE_extralibs"
    unset SAVE_CFLAGS
    unset SAVE_LDFLAGS
    unset SAVE_extralibs
}

temp_cflags(){
    save_flags
    CFLAGS="$CFLAGS $*"
}

temp_ldflags(){
    save_flags
    LDFLAGS="$LDFLAGS $*"
}

temp_extralibs(){
    save_flags
    extralibs="$extralibs $*"
}

473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
append(){
    var=$1
    shift
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
    eval "$var=\"\$$var $*\""
}

add_cflags(){
    append CFLAGS "$@"
}

add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
    append extralibs "$@"
}

492
check_cmd(){
Måns Rullgård's avatar
Måns Rullgård committed
493
    log "$@"
494
    "$@" >> $logfile 2>&1
495
496
}

497
check_cc(){
498
    log check_cc "$@"
499
    cat > $TMPC
500
    log_file $TMPC
501
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
502
503
504
505
}

check_cpp(){
    log check_cpp "$@"
506
    cat > $TMPC
507
    log_file $TMPC
508
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
509
510
}

511
512
513
514
515
516
check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
    check_cc "$@" <<EOF && enable $name || disable $name
517
void foo(void){ __asm__ volatile($asm); }
518
519
520
EOF
}

Loren Merritt's avatar
Loren Merritt committed
521
522
523
524
525
526
527
528
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

529
check_ld(){
530
    log check_ld "$@"
531
    check_cc || return
532
533
534
535
536
537
    flags=''
    libs=''
    for f; do
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
    done
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
538
539
540
}

check_cflags(){
541
542
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
543
544
545
546
547
int x;
EOF
}

check_ldflags(){
548
549
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
550
int main(void){ return 0; }
551
552
553
554
EOF
}

check_header(){
555
    log check_header "$@"
556
557
    header=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
558
559
560
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
    disable $var
    check_cpp "$@" <<EOF && enable $var
561
562
563
564
565
566
#include <$header>
int x;
EOF
}

check_func(){
567
    log check_func "$@"
568
569
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
570
571
    disable $func
    check_ld "$@" <<EOF && enable $func
572
extern int $func();
573
int main(void){ $func(); }
574
575
576
EOF
}

577
578
check_func_headers(){
    log check_func_headers "$@"
579
580
581
582
583
584
585
586
587
588
589
    headers=$1
    func=$2
    shift 2
    disable $func
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_ld "$@" <<EOF && enable $func
$incs
590
int main(int argc, char **argv){
591
592
593
594
595
596
    (void) $func;
    return 0;
}
EOF
}

597
598
599
600
601
602
603
604
605
606
607
608
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
    check_cpp <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

609
610
611
612
613
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
614
615
616
617
618
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
619
620
}

621
622
623
624
625
626
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
627
    check_func_headers "$headers" $func && add_extralibs "$@"
628
629
630
631
632
    err=$?
    restore_flags
    return $err
}

633
check_exec(){
634
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
635
636
}

637
638
639
640
641
642
643
644
645
check_exec_crash(){
    code=`cat`

    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
    # are safe but may not be available everywhere.  Thus we use
    # raise(SIGTERM) instead.  The check is run in a subshell so we
    # can redirect the "Terminated" message from the shell.  SIGBUS
    # is not defined by standard C so it is used conditionally.

646
    (check_exec "$@") >> $logfile 2>&1 <<EOF
647
648
649
650
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
Diego Biurrun's avatar
Diego Biurrun committed
651
int main(void){
652
653
654
655
656
657
658
659
660
661
662
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
    disable $type
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_cc "$@" <<EOF && enable $type
$incs
$type v;
EOF
}

680
681
682
683
684
685
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
686
687
}

688
689
690
691
692
693
694
695
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
check_foo_config(){
    cfg=$1
    pkg=$2
    header=$3
    func=$4
    shift 4
    disable $cfg
    check_cmd ${pkg}-config --version
    err=$?
    if test "$err" = 0; then
        temp_cflags `${pkg}-config --cflags`
        temp_extralibs `${pkg}-config --libs`
        check_lib "$@" $header $func && enable $cfg
    fi
    return $err
}

713
714
715
716
717
718
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

719
720
721
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

722
723
724
725
726
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
727
    filters
728
    indevs
729
    muxers
730
    outdevs
731
732
733
734
735
736
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
737
    aandct
738
739
    avfilter
    avfilter_lavf
740
741
    avisynth
    beos_netserver
742
    bzlib
743
    fastdiv
744
745
746
    ffmpeg
    ffplay
    ffserver
747
    fft
748
    golomb
749
    gpl
750
    gprof
751
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
752
    hardcoded_tables
753
    ipv6
754
755
    libamr_nb
    libamr_wb
Ramiro Polla's avatar
Ramiro Polla committed
756
    libdc1394
757
    libdirac
758
759
760
    libfaac
    libfaad
    libfaadbin
761
    libgsm
762
    libmp3lame
763
    libnut
764
    libschroedinger
David Conrad's avatar
David Conrad committed
765
    libspeex
Diego Biurrun's avatar
Diego Biurrun committed
766
    libtheora
767
    libvorbis
768
769
    libx264
    libxvid
770
    mdct
771
    memalign_hack
772
    mlib
773
774
    mpegaudio_hp
    network
775
    nonfree
776
    postproc
777
    powerpc_perf
778
    shared
779
    small
780
    static
781
    swscale
782
    vdpau
783
    vhook
784
    x11grab
Diego Biurrun's avatar
Diego Biurrun committed
785
    xvmc
786
    zlib
787
"
788

789
790
THREADS_LIST='
    beosthreads
791
    os2threads
792
793
794
795
    pthreads
    w32threads
'

796
797
ARCH_LIST='
    alpha
798
    arm
799
800
801
802
803
    bfin
    ia64
    m68k
    mips
    parisc
804
    ppc
805
806
807
808
809
810
811
812
813
814
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
815
816
    altivec
    armv5te
817
    armv6
818
    armv6t2
Måns Rullgård's avatar
Måns Rullgård committed
819
    armvfp
820
821
822
    iwmmxt
    mmi
    mmx
823
    mmx2
824
    neon
825
    sse
826
    ssse3
827
    vis
828
829
830
831
832
833
'

HAVE_LIST="
    $ARCH_EXT_LIST
    $THREADS_LIST
    altivec_h
834
    arpa_inet_h
835
    bswap
Alex Beregszaszi's avatar
Alex Beregszaszi committed
836
    closesocket
837
    cmov
838
    conio_h
839
    dcbzl
840
841
842
843
844
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_meteor_ioctl_meteor_h
    dev_video_bktr_ioctl_bt848_h
845
    dlfcn_h
846
    dlopen
847
    dos_paths
848
849
    ebp_available
    ebx_available
850
    fast_64bit
851
    fast_cmov
852
    fast_unaligned
Måns Rullgård's avatar
Måns Rullgård committed
853
    fork
854
    freetype2
855
    gethrtime
856
    GetProcessTimes
Ramiro Polla's avatar
Ramiro Polla committed
857
    getrusage
858
    imlib2
859
    inet_aton
Måns Rullgård's avatar
Måns Rullgård committed
860
    inline_asm
861
862
    libdc1394_1
    libdc1394_2
863
864
    llrint
    lrint
865
    lrintf
866
867
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
868
869
    malloc_h
    memalign
Ramiro Polla's avatar
Ramiro Polla committed
870
    mkstemp
871
    pld
872
    posix_memalign
Måns Rullgård's avatar
Måns Rullgård committed
873
    ppc64
874
875
    round
    roundf
876
877
    sdl
    sdl_video_size
878
    setmode
879
    socklen_t
Måns Rullgård's avatar
Måns Rullgård committed
880
    soundcard_h
881
    poll_h
882
    sys_mman_h
883
    sys_resource_h
884
    sys_select_h
Måns Rullgård's avatar
Måns Rullgård committed
885
    sys_soundcard_h
886
    sys_videoio_h
887
    termios_h
888
    threads
889
    truncf
890
    winsock2_h
Loren Merritt's avatar
Loren Merritt committed
891
    yasm
892
"
893

894
895
896
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
    fft_mmx
897
    oldscaler
898
899
"

900
CMDLINE_SELECT="
901
    $ARCH_EXT_LIST
902
    $CONFIG_LIST
903
    $THREADS_LIST
904
    cross_compile
905
906
    debug
    extra_warnings
907
    logging
908
    optimizations
909
    stripping
910
"
911
912

PATHS_LIST='
913
    bindir
914
915
916
917
918
    incdir
    libdir
    mandir
    prefix
    shlibdir
919
920
921
922
923
924
925
926
927
'

CMDLINE_SET="
    $PATHS_LIST
    arch
    build_suffix
    cc
    cpu
    cross_prefix
928
    extra_version
929
930
931
932
    host_cc
    host_cflags
    host_ldflags
    host_libs
933
    logfile
934
    nm
935
    source_path
936
    target_exec
937
    target_os
938
    target_path
939
"
940

941
942
# code dependency declarations

943
# architecture extensions
944
altivec_deps="ppc"
945
946
armv5te_deps="arm"
armv6_deps="arm"
947
armv6t2_deps="arm"
948
949
armvfp_deps="arm"
iwmmxt_deps="arm"
950
mmi_deps="mips"
951
mmx_deps="x86"
Diego Biurrun's avatar
Diego Biurrun committed
952
mmx2_deps="x86 mmx"
953
neon_deps="arm"
954
955
sse_deps="mmx"
ssse3_deps="x86 sse"
956
vis_deps="sparc"
957

958
959
960
# common features
fft_suggest="fft_mmx"
fft_mmx_deps="mmx yasm"
961
oldscaler_deps="!swscale"
962

963
# decoders / encoders
964
aac_decoder_select="fft mdct"
965
ac3_decoder_deps="gpl"
966
967
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
968
cavs_decoder_select="golomb"
969
cook_decoder_select="fft mdct"
970
cscd_decoder_suggest="zlib"
971
dca_decoder_select="fft mdct"
972
dnxhd_encoder_select="aandct"
973
dxa_decoder_select="zlib"
974
eac3_decoder_deps="gpl"
975
eac3_decoder_select="fft mdct"
976
eatgq_decoder_select="aandct"
977
978
979
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb"
980
981
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
982
983
984
985
flv_encoder_select="aandct"
h261_encoder_select="aandct"
h263_encoder_select="aandct"
h263p_encoder_select="aandct"
986
h264_decoder_select="golomb"
987
h264_vdpau_decoder_deps="vdpau"
988
imc_decoder_select="fft mdct"
989
990
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
991
ljpeg_encoder_select="aandct"
992
loco_decoder_select="golomb"
993
994
995
996
mjpeg_encoder_select="aandct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
mpeg4_encoder_select="aandct"
997
mpeg_vdpau_decoder_deps="vdpau"
Carl Eugen Hoyos's avatar
Carl Eugen Hoyos committed
998
mpeg1_vdpau_decoder_deps="vdpau"
Diego Biurrun's avatar
Diego Biurrun committed
999
mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
1000
1001
1002
msmpeg4v1_encoder_select="aandct"
msmpeg4v2_encoder_select="aandct"
msmpeg4v3_encoder_select="aandct"
1003
1004
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
1005
1006
png_decoder_select="zlib"
png_encoder_select="zlib"
1007
qdm2_decoder_select="fft mdct"