Statistics
| Branch: | Revision:

ffmpeg / configure @ 997f3ba4

History | View | Annotate | Download (78.1 KB)

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

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

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

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

    
22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24
E1="$?"
25

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

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

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

    
237
log(){
238
    echo "$@" >> $logfile
239
}
240

    
241
log_file(){
242
    log BEGIN $1
243
    pr -n -t $1 >> $logfile
244
    log END $1
245
}
246

    
247
echolog(){
248
    log "$@"
249
    echo "$@"
250
}
251

    
252
die(){
253
    echolog "$@"
254
    cat <<EOF
255

    
256
If you think configure made a mistake, make sure you are using the latest
257
version from SVN.  If the latest version fails, report the problem to the
258
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
259
EOF
260
    if disabled logging; then
261
        cat <<EOF
262
Rerun configure with logging enabled (do not use --disable-logging), and
263
include the log this produces with your report.
264
EOF
265
    else
266
cat <<EOF
267
Include the log file "$logfile" produced by configure as this will help
268
solving the problem.
269
EOF
270
    fi
271
    exit 1
272
}
273

    
274
# Avoid locale weirdness, besides we really just want to translate ASCII.
275
toupper(){
276
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
277
}
278

    
279
tolower(){
280
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
281
}
282

    
283
c_escape(){
284
    echo "$*" | sed 's/["\\]/\\\0/g'
285
}
286

    
287
sh_quote(){
288
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
289
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
290
    echo "$v"
291
}
292

    
293
set_all(){
294
    value=$1
295
    shift
296
    for var in $*; do
297
        eval $var=$value
298
    done
299
}
300

    
301
set_weak(){
302
    value=$1
303
    shift
304
    for var; do
305
        eval : \${$var:=$value}
306
    done
307
}
308

    
309
pushvar(){
310
    for var in $*; do
311
        eval level=\${${var}_level:=0}
312
        eval ${var}_${level}="\$$var"
313
        eval ${var}_level=$(($level+1))
314
    done
315
}
316

    
317
popvar(){
318
    for var in $*; do
319
        eval level=\${${var}_level:-0}
320
        test $level = 0 && continue
321
        eval level=$(($level-1))
322
        eval $var="\${${var}_${level}}"
323
        eval ${var}_level=$level
324
        eval unset ${var}_${level}
325
    done
326
}
327

    
328
enable(){
329
    set_all yes $*
330
}
331

    
332
disable(){
333
    set_all no $*
334
}
335

    
336
enable_weak(){
337
    set_weak yes $*
338
}
339

    
340
disable_weak(){
341
    set_weak no $*
342
}
343

    
344
enable_safe(){
345
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
346
}
347

    
348
disable_safe(){
349
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
350
}
351

    
352
do_enable_deep(){
353
    for var; do
354
        enabled $var && continue
355
        eval sel="\$${var}_select"
356
        eval sgs="\$${var}_suggest"
357
        pushvar var sgs
358
        enable_deep $sel
359
        popvar sgs
360
        enable_deep_weak $sgs
361
        popvar var
362
    done
363
}
364

    
365
enable_deep(){
366
    do_enable_deep $*
367
    enable $*
368
}
369

    
370
enable_deep_weak(){
371
    do_enable_deep $*
372
    enable_weak $*
373
}
374

    
375
enabled(){
376
    test "${1#!}" = "$1" && op== || op=!=
377
    eval test "x\$${1#!}" $op "xyes"
378
}
379

    
380
disabled(){
381
    test "${1#!}" = "$1" && op== || op=!=
382
    eval test "x\$${1#!}" $op "xno"
383
}
384

    
385
enabled_all(){
386
    for opt; do
387
        enabled $opt || return 1
388
    done
389
}
390

    
391
disabled_all(){
392
    for opt; do
393
        disabled $opt || return 1
394
    done
395
}
396

    
397
enabled_any(){
398
    for opt; do
399
        enabled $opt && return 0
400
    done
401
}
402

    
403
disabled_any(){
404
    for opt; do
405
        disabled $opt && return 0
406
    done
407
    return 1
408
}
409

    
410
set_default(){
411
    for opt; do
412
        eval : \${$opt:=\$${opt}_default}
413
    done
414
}
415

    
416
is_in(){
417
    value=$1
418
    shift
419
    for var in $*; do
420
        [ $var = $value ] && return 0
421
    done
422
    return 1
423
}
424

    
425
check_deps(){
426
    for cfg; do
427
        cfg="${cfg#!}"
428
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
429
        disabled ${cfg}_checking && continue
430
        enable ${cfg}_checking
431

    
432
        eval dep_all="\$${cfg}_deps"
433
        eval dep_any="\$${cfg}_deps_any"
434
        eval dep_sel="\$${cfg}_select"
435
        eval dep_sgs="\$${cfg}_suggest"
436

    
437
        pushvar cfg dep_all dep_any dep_sel dep_sgs
438
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
439
        popvar cfg dep_all dep_any dep_sel dep_sgs
440

    
441
        enabled_all  $dep_all || disable $cfg
442
        enabled_any  $dep_any || disable $cfg
443
        disabled_any $dep_sel && disable $cfg
444

    
445
        if enabled $cfg; then
446
            eval dep_extralibs="\$${cfg}_extralibs"
447
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
448
            enable_deep $dep_sel
449
            enable_deep_weak $dep_sgs
450
        fi
451

    
452
        disable ${cfg}_checking
453
    done
454
}
455

    
456
print_config(){
457
    pfx=$1
458
    header=$2
459
    makefile=$3
460
    shift 3
461
    for cfg; do
462
        ucname="$(toupper $cfg)"
463
        if enabled $cfg; then
464
            echo "#define ${pfx}${ucname} 1" >> $header
465
            echo "${pfx}${ucname}=yes" >> $makefile
466
        else
467
            echo "#define ${pfx}${ucname} 0" >> $header
468
        fi
469
    done
470
}
471

    
472
flags_saved(){
473
    (: ${SAVE_CFLAGS?}) 2> /dev/null
474
}
475

    
476
save_flags(){
477
    flags_saved && return
478
    SAVE_CFLAGS="$CFLAGS"
479
    SAVE_LDFLAGS="$LDFLAGS"
480
    SAVE_extralibs="$extralibs"
481
}
482

    
483
restore_flags(){
484
    flags_saved || return
485
    CFLAGS="$SAVE_CFLAGS"
486
    LDFLAGS="$SAVE_LDFLAGS"
487
    extralibs="$SAVE_extralibs"
488
    unset SAVE_CFLAGS
489
    unset SAVE_LDFLAGS
490
    unset SAVE_extralibs
491
}
492

    
493
temp_cflags(){
494
    save_flags
495
    CFLAGS="$CFLAGS $*"
496
}
497

    
498
temp_ldflags(){
499
    save_flags
500
    LDFLAGS="$LDFLAGS $*"
501
}
502

    
503
temp_extralibs(){
504
    save_flags
505
    extralibs="$extralibs $*"
506
}
507

    
508
append(){
509
    var=$1
510
    shift
511
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
512
    eval "$var=\"\$$var $*\""
513
}
514

    
515
add_cppflags(){
516
    append CPPFLAGS "$@"
517
}
518

    
519
add_cflags(){
520
    append CFLAGS "$@"
521
}
522

    
523
add_ldflags(){
524
    append LDFLAGS "$@"
525
}
526

    
527
add_extralibs(){
528
    append extralibs "$@"
529
}
530

    
531
check_cmd(){
532
    log "$@"
533
    "$@" >> $logfile 2>&1
534
}
535

    
536
check_cc(){
537
    log check_cc "$@"
538
    cat > $TMPC
539
    log_file $TMPC
540
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
541
}
542

    
543
check_cpp(){
544
    log check_cpp "$@"
545
    cat > $TMPC
546
    log_file $TMPC
547
    check_cmd $cc $CPPFLAGS "$@" -E -o $TMPO $TMPC
548
}
549

    
550
check_as(){
551
    log check_as "$@"
552
    cat > $TMPC
553
    log_file $TMPC
554
    check_cmd $as $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
555
}
556

    
557
check_asm(){
558
    log check_asm "$@"
559
    name="$1"
560
    asm="$2"
561
    shift 2
562
    check_as "$@" <<EOF && enable $name || disable $name
563
void foo(void){ __asm__ volatile($asm); }
564
EOF
565
}
566

    
567
check_yasm(){
568
    log check_yasm "$@"
569
    echo "$1" > $TMPS
570
    log_file $TMPS
571
    shift 1
572
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
573
}
574

    
575
check_ld(){
576
    log check_ld "$@"
577
    check_cc || return
578
    flags=''
579
    libs=''
580
    for f; do
581
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
582
    done
583
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
584
}
585

    
586
check_cppflags(){
587
    log check_cppflags "$@"
588
    check_cc "$@" <<EOF && add_cppflags "$@"
589
int x;
590
EOF
591
}
592

    
593
check_cflags(){
594
    log check_cflags "$@"
595
    check_cc "$@" <<EOF && add_cflags "$@"
596
int x;
597
EOF
598
}
599

    
600
check_ldflags(){
601
    log check_ldflags "$@"
602
    check_ld "$@" <<EOF && add_ldflags "$@"
603
int main(void){ return 0; }
604
EOF
605
}
606

    
607
check_header(){
608
    log check_header "$@"
609
    header=$1
610
    shift
611
    disable_safe $header
612
    check_cpp "$@" <<EOF && enable_safe $header
613
#include <$header>
614
int x;
615
EOF
616
}
617

    
618
check_func(){
619
    log check_func "$@"
620
    func=$1
621
    shift
622
    disable $func
623
    check_ld "$@" <<EOF && enable $func
624
extern int $func();
625
int main(void){ $func(); }
626
EOF
627
}
628

    
629
check_func_headers(){
630
    log check_func_headers "$@"
631
    headers=$1
632
    func=$2
633
    shift 2
634
    disable $func
635
    incs=""
636
    for hdr in $headers; do
637
        incs="$incs
638
#include <$hdr>"
639
    done
640
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
641
$incs
642
int main(int argc, char **argv){
643
    (void) $func;
644
    return 0;
645
}
646
EOF
647
}
648

    
649
check_cpp_condition(){
650
    log check_cpp_condition "$@"
651
    header=$1
652
    condition=$2
653
    check_cpp <<EOF
654
#include <$header>
655
#if !($condition)
656
#error "unsatisfied condition: $condition"
657
#endif
658
EOF
659
}
660

    
661
check_lib(){
662
    log check_lib "$@"
663
    header="$1"
664
    func="$2"
665
    shift 2
666
    temp_extralibs "$@"
667
    check_header $header && check_func $func && add_extralibs "$@"
668
    err=$?
669
    restore_flags
670
    return $err
671
}
672

    
673
check_lib2(){
674
    log check_lib2 "$@"
675
    headers="$1"
676
    func="$2"
677
    shift 2
678
    temp_extralibs "$@"
679
    check_func_headers "$headers" $func && add_extralibs "$@"
680
    err=$?
681
    restore_flags
682
    return $err
683
}
684

    
685
check_exec(){
686
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
687
}
688

    
689
check_exec_crash(){
690
    code=$(cat)
691

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

    
698
    (check_exec "$@") >> $logfile 2>&1 <<EOF
699
#include <signal.h>
700
static void sighandler(int sig){
701
    raise(SIGTERM);
702
}
703
int main(void){
704
    signal(SIGILL, sighandler);
705
    signal(SIGFPE, sighandler);
706
    signal(SIGSEGV, sighandler);
707
#ifdef SIGBUS
708
    signal(SIGBUS, sighandler);
709
#endif
710
    { $code }
711
}
712
EOF
713
}
714

    
715
check_type(){
716
    log check_type "$@"
717
    headers=$1
718
    type=$2
719
    shift 2
720
    disable $type
721
    incs=""
722
    for hdr in $headers; do
723
        incs="$incs
724
#include <$hdr>"
725
    done
726
    check_cc "$@" <<EOF && enable $type
727
$incs
728
$type v;
729
EOF
730
}
731

    
732
require(){
733
    name="$1"
734
    header="$2"
735
    func="$3"
736
    shift 3
737
    check_lib $header $func "$@" || die "ERROR: $name not found"
738
}
739

    
740
require2(){
741
    name="$1"
742
    headers="$2"
743
    func="$3"
744
    shift 3
745
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
746
}
747

    
748
check_foo_config(){
749
    cfg=$1
750
    pkg=$2
751
    header=$3
752
    func=$4
753
    shift 4
754
    disable $cfg
755
    check_cmd ${pkg}-config --version
756
    err=$?
757
    if test "$err" = 0; then
758
        temp_cflags $(${pkg}-config --cflags)
759
        temp_extralibs $(${pkg}-config --libs)
760
        check_lib "$@" $header $func && enable $cfg
761
    fi
762
    return $err
763
}
764

    
765
apply(){
766
    file=$1
767
    shift
768
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
769
}
770

    
771
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
772
# system-dependent things.
773

    
774
COMPONENT_LIST="
775
    bsfs
776
    decoders
777
    demuxers
778
    encoders
779
    filters
780
    hwaccels
781
    indevs
782
    muxers
783
    outdevs
784
    parsers
785
    protocols
786
"
787

    
788
CONFIG_LIST="
789
    $COMPONENT_LIST
790
    aandct
791
    avfilter
792
    avfilter_lavf
793
    avisynth
794
    beos_netserver
795
    bzlib
796
    fastdiv
797
    ffmpeg
798
    ffplay
799
    ffserver
800
    fft
801
    golomb
802
    gpl
803
    gprof
804
    gray
805
    hardcoded_tables
806
    ipv6
807
    libdc1394
808
    libdirac
809
    libfaac
810
    libfaad
811
    libfaadbin
812
    libgsm
813
    libmp3lame
814
    libnut
815
    libopencore_amrnb
816
    libopencore_amrwb
817
    libopenjpeg
818
    libschroedinger
819
    libspeex
820
    libtheora
821
    libvorbis
822
    libx264
823
    libxvid
824
    mdct
825
    memalign_hack
826
    mlib
827
    mpegaudio_hp
828
    network
829
    nonfree
830
    postproc
831
    powerpc_perf
832
    rdft
833
    runtime_cpudetect
834
    shared
835
    small
836
    static
837
    swscale_alpha
838
    vaapi
839
    vdpau
840
    version3
841
    x11grab
842
    zlib
843
"
844

    
845
THREADS_LIST='
846
    beosthreads
847
    os2threads
848
    pthreads
849
    w32threads
850
'
851

    
852
ARCH_LIST='
853
    alpha
854
    arm
855
    bfin
856
    ia64
857
    m68k
858
    mips
859
    mips64
860
    parisc
861
    ppc
862
    ppc64
863
    s390
864
    sh4
865
    sparc
866
    sparc64
867
    x86
868
    x86_32
869
    x86_64
870
'
871

    
872
ARCH_EXT_LIST='
873
    altivec
874
    amd3dnow
875
    amd3dnowext
876
    armv5te
877
    armv6
878
    armv6t2
879
    armvfp
880
    iwmmxt
881
    mmi
882
    mmx
883
    mmx2
884
    neon
885
    ppc4xx
886
    sse
887
    ssse3
888
    vis
889
'
890

    
891
HAVE_LIST="
892
    $ARCH_EXT_LIST
893
    $THREADS_LIST
894
    alsa_asoundlib_h
895
    altivec_h
896
    arpa_inet_h
897
    bigendian
898
    bswap
899
    closesocket
900
    cmov
901
    conio_h
902
    dcbzl
903
    dev_bktr_ioctl_bt848_h
904
    dev_bktr_ioctl_meteor_h
905
    dev_ic_bt8xx_h
906
    dev_video_meteor_ioctl_meteor_h
907
    dev_video_bktr_ioctl_bt848_h
908
    dlfcn_h
909
    dlopen
910
    dos_paths
911
    ebp_available
912
    ebx_available
913
    fast_64bit
914
    fast_cmov
915
    fast_unaligned
916
    fork
917
    gethrtime
918
    GetProcessTimes
919
    getrusage
920
    inet_aton
921
    inline_asm
922
    ldbrx
923
    libdc1394_1
924
    libdc1394_2
925
    llrint
926
    log2
927
    loongson
928
    lrint
929
    lrintf
930
    lzo1x_999_compress
931
    machine_ioctl_bt848_h
932
    machine_ioctl_meteor_h
933
    malloc_h
934
    memalign
935
    mkstemp
936
    pld
937
    posix_memalign
938
    round
939
    roundf
940
    sdl
941
    sdl_video_size
942
    setmode
943
    socklen_t
944
    soundcard_h
945
    poll_h
946
    sys_mman_h
947
    sys_resource_h
948
    sys_select_h
949
    sys_soundcard_h
950
    sys_videoio_h
951
    ten_operands
952
    termios_h
953
    threads
954
    truncf
955
    VirtualAlloc
956
    winsock2_h
957
    xform_asm
958
    yasm
959
"
960

    
961
# options emitted with CONFIG_ prefix but not available on command line
962
CONFIG_EXTRA="
963
    gplv3
964
    lgplv3
965
"
966

    
967
CMDLINE_SELECT="
968
    $ARCH_EXT_LIST
969
    $CONFIG_LIST
970
    $THREADS_LIST
971
    cross_compile
972
    debug
973
    extra_warnings
974
    logging
975
    optimizations
976
    stripping
977
    yasm
978
"
979

    
980
PATHS_LIST='
981
    bindir
982
    datadir
983
    incdir
984
    libdir
985
    mandir
986
    prefix
987
    shlibdir
988
'
989

    
990
CMDLINE_SET="
991
    $PATHS_LIST
992
    arch
993
    as
994
    build_suffix
995
    cc
996
    cpu
997
    cross_prefix
998
    dep_cc
999
    extra_version
1000
    host_cc
1001
    host_cflags
1002
    host_ldflags
1003
    host_libs
1004
    host_os
1005
    ld
1006
    logfile
1007
    nm
1008
    source_path
1009
    sysinclude
1010
    sysroot
1011
    target_exec
1012
    target_os
1013
    target_path
1014
"
1015

    
1016
# code dependency declarations
1017

    
1018
# architecture extensions
1019
altivec_deps="ppc"
1020
amd3dnow_deps="mmx"
1021
amd3dnowext_deps="amd3dnow"
1022
armv5te_deps="arm"
1023
armv6_deps="arm"
1024
armv6t2_deps="arm"
1025
armvfp_deps="arm"
1026
iwmmxt_deps="arm"
1027
mmi_deps="mips"
1028
mmx_deps="x86"
1029
mmx2_deps="mmx"
1030
neon_deps="arm"
1031
ppc4xx_deps="ppc"
1032
sse_deps="mmx"
1033
ssse3_deps="sse"
1034
vis_deps="sparc"
1035

    
1036
# decoders / encoders / hardware accelerators
1037
aac_decoder_select="fft mdct"
1038
ac3_decoder_select="fft mdct"
1039
atrac3_decoder_select="fft mdct"
1040
cavs_decoder_select="golomb"
1041
cook_decoder_select="fft mdct"
1042
cscd_decoder_suggest="zlib"
1043
dca_decoder_select="fft mdct"
1044
dnxhd_encoder_select="aandct"
1045
dxa_decoder_select="zlib"
1046
eac3_decoder_select="fft mdct"
1047
eatgq_decoder_select="aandct"
1048
eatqi_decoder_select="aandct"
1049
ffv1_decoder_select="golomb"
1050
flac_decoder_select="golomb"
1051
flac_encoder_select="golomb"
1052
flashsv_decoder_select="zlib"
1053
flashsv_encoder_select="zlib"
1054
flv_encoder_select="aandct"
1055
h261_encoder_select="aandct"
1056
h263_encoder_select="aandct"
1057
h263_vaapi_hwaccel_deps="va_va_h"
1058
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1059
h263p_encoder_select="aandct"
1060
h264_decoder_select="golomb"
1061
h264_vaapi_hwaccel_deps="va_va_h"
1062
h264_vaapi_hwaccel_select="vaapi"
1063
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1064
h264_vdpau_decoder_select="vdpau h264_decoder"
1065
imc_decoder_select="fft mdct"
1066
jpegls_decoder_select="golomb"
1067
jpegls_encoder_select="golomb"
1068
ljpeg_encoder_select="aandct"
1069
loco_decoder_select="golomb"
1070
mjpeg_encoder_select="aandct"
1071
mpeg1video_encoder_select="aandct"
1072
mpeg2video_encoder_select="aandct"
1073
mpeg4_encoder_select="aandct"
1074
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1075
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1076
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1077
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1078
mpeg2_vaapi_hwaccel_deps="va_va_h"
1079
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1080
mpeg4_vaapi_hwaccel_deps="va_va_h"
1081
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1082
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1083
msmpeg4v1_encoder_select="aandct"
1084
msmpeg4v2_encoder_select="aandct"
1085
msmpeg4v3_encoder_select="aandct"
1086
nellymoser_decoder_select="fft mdct"
1087
nellymoser_encoder_select="fft mdct"
1088
png_decoder_select="zlib"
1089
png_encoder_select="zlib"
1090
qdm2_decoder_select="fft mdct rdft"
1091
rv10_encoder_select="aandct"
1092
rv20_encoder_select="aandct"
1093
rv30_decoder_select="golomb"
1094
rv40_decoder_select="golomb"
1095
shorten_decoder_select="golomb"
1096
sonic_decoder_select="golomb"
1097
sonic_encoder_select="golomb"
1098
sonic_ls_encoder_select="golomb"
1099
svq3_decoder_select="golomb"
1100
svq3_decoder_suggest="zlib"
1101
tiff_decoder_suggest="zlib"
1102
tiff_encoder_suggest="zlib"
1103
tscc_decoder_select="zlib"
1104
vc1_vaapi_hwaccel_deps="va_va_h"
1105
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1106
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1107
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1108
vorbis_decoder_select="fft mdct"
1109
vorbis_encoder_select="fft mdct"
1110
wmav1_decoder_select="fft mdct"
1111
wmav1_encoder_select="fft mdct"
1112
wmav2_decoder_select="fft mdct"
1113
wmav2_encoder_select="fft mdct"
1114
wmv1_encoder_select="aandct"
1115
wmv2_encoder_select="aandct"
1116
wmv3_vaapi_hwaccel_deps="va_va_h"
1117
wmv3_vaapi_hwaccel_select="vaapi wmv3_decoder"
1118
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1119
wmv3_vdpau_decoder_select="vdpau wmv3_decoder"
1120
zlib_decoder_select="zlib"
1121
zlib_encoder_select="zlib"
1122
zmbv_decoder_select="zlib"
1123
zmbv_encoder_select="zlib"
1124

    
1125
# parsers
1126
h264_parser_select="golomb"
1127

    
1128
# external libraries
1129
libdirac_decoder_deps="libdirac !libschroedinger"
1130
libdirac_encoder_deps="libdirac"
1131
libfaac_encoder_deps="libfaac"
1132
libfaad_decoder_deps="libfaad"
1133
libfaadbin_decoder_extralibs='$ldl'
1134
libgsm_decoder_deps="libgsm"
1135
libgsm_encoder_deps="libgsm"
1136
libgsm_ms_decoder_deps="libgsm"
1137
libgsm_ms_encoder_deps="libgsm"
1138
libmp3lame_encoder_deps="libmp3lame"
1139
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1140
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1141
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1142
libopenjpeg_decoder_deps="libopenjpeg"
1143
libschroedinger_decoder_deps="libschroedinger"
1144
libschroedinger_encoder_deps="libschroedinger"
1145
libspeex_decoder_deps="libspeex"
1146
libtheora_encoder_deps="libtheora"
1147
libvorbis_encoder_deps="libvorbis"
1148
libx264_encoder_deps="libx264"
1149
libxvid_encoder_deps="libxvid"
1150

    
1151
# demuxers / muxers
1152
ac3_demuxer_deps="ac3_parser"
1153
avisynth_demuxer_deps="avisynth"
1154
dirac_demuxer_deps="dirac_parser"
1155
libnut_demuxer_deps="libnut"
1156
libnut_muxer_deps="libnut"
1157
matroska_demuxer_suggest="zlib bzlib"
1158
mov_demuxer_suggest="zlib"
1159
mp3_demuxer_deps="mpegaudio_parser"
1160
redir_demuxer_deps="network"
1161
rtp_muxer_deps="network rtp_protocol"
1162
rtsp_demuxer_deps="sdp_demuxer"
1163
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1164

    
1165
# indevs / outdevs
1166
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1167
alsa_indev_extralibs="-lasound"
1168
alsa_outdev_deps="alsa_asoundlib_h"
1169
alsa_outdev_extralibs="-lasound"
1170
audio_beos_indev_deps="audio_beos"
1171
audio_beos_indev_extralibs="-lmedia -lbe"
1172
audio_beos_outdev_deps="audio_beos"
1173
audio_beos_outdev_extralibs="-lmedia -lbe"
1174
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1175
dv1394_indev_deps="dv1394 dv_demuxer"
1176
jack_indev_deps="jack_jack_h"
1177
jack_indev_extralibs="-ljack"
1178
libdc1394_indev_deps="libdc1394"
1179
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1180
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1181
v4l_indev_deps="linux_videodev_h"
1182
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1183
vfwcap_indev_deps="capCreateCaptureWindow"
1184
vfwcap_indev_extralibs="-lvfw32"
1185
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1186
x11_grab_device_indev_extralibs="-lX11 -lXext"
1187

    
1188
# protocols
1189
gopher_protocol_deps="network"
1190
http_protocol_deps="network"
1191
rtp_protocol_deps="udp_protocol"
1192
tcp_protocol_deps="network"
1193
udp_protocol_deps="network"
1194

    
1195
# filters
1196
movie_filter_deps="avfilter_lavf"
1197

    
1198
# programs
1199
ffplay_deps="sdl"
1200
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1201
ffserver_extralibs='$ldl'
1202

    
1203

    
1204
# default parameters
1205

    
1206
logfile="config.err"
1207

    
1208
# installation paths
1209
prefix_default="/usr/local"
1210
bindir_default='${prefix}/bin'
1211
datadir_default='${prefix}/share/ffmpeg'
1212
incdir_default='${prefix}/include'
1213
libdir_default='${prefix}/lib'
1214
mandir_default='${prefix}/share/man'
1215
shlibdir_default="$libdir_default"
1216

    
1217
# toolchain
1218
ar="ar"
1219
cc_default="gcc"
1220
host_cc_default="gcc"
1221
ln_s="ln -sf"
1222
nm_default="nm"
1223
objformat="elf"
1224
ranlib="ranlib"
1225
strip="strip"
1226
yasmexe="yasm"
1227

    
1228
# machine
1229
arch=$(uname -m)
1230
cpu="generic"
1231

    
1232
# OS
1233
target_os=$(tolower $(uname -s))
1234
host_os=$target_os
1235

    
1236
# configurable options
1237
enable debug
1238
enable fastdiv
1239
enable ffmpeg
1240
enable ffplay
1241
enable ffserver
1242
enable ipv6
1243
enable mpegaudio_hp
1244
enable network
1245
enable optimizations
1246
enable protocols
1247
enable static
1248
enable stripping
1249
enable swscale_alpha
1250

    
1251
# build settings
1252
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1253
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1254
FFSERVERLDFLAGS=-Wl,-E
1255
LIBPREF="lib"
1256
LIBSUF=".a"
1257
FULLNAME='$(NAME)$(BUILDSUF)'
1258
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1259
SLIBPREF="lib"
1260
SLIBSUF=".so"
1261
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1262
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1263
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1264
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1265

    
1266
CC_O='-o $@'
1267

    
1268
host_cflags='-O3 -g -Wall'
1269
host_libs='-lm'
1270

    
1271
target_path='.'
1272

    
1273
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1274
# full relative path for objects in subdirectories for non-recursive Make.
1275
DEPEND_CMD='$(DEPCC) $(CPPFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1276

    
1277
# find source path
1278
source_path="$(dirname "$0")"
1279
enable source_path_used
1280
if test -z "$source_path" -o "$source_path" = "." ; then
1281
    source_path="$(pwd)"
1282
    disable source_path_used
1283
else
1284
    source_path="$(cd "$source_path"; pwd)"
1285
    echo "$source_path" | grep -q '[[:blank:]]' &&
1286
        die "Out of tree builds are impossible with whitespace in source path."
1287
    test -e "$source_path/config.h" &&
1288
        die "Out of tree builds are impossible with config.h in source dir."
1289
fi
1290

    
1291
for v in "$@"; do
1292
    r=${v#*=}
1293
    l=${v%"$r"}
1294
    r=$(sh_quote "$r")
1295
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1296
done
1297

    
1298
find_things(){
1299
    thing=$1
1300
    pattern=$2
1301
    file=$source_path/$3
1302
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1303
}
1304

    
1305
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1306
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1307
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1308
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1309
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1310
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1311
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1312
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1313
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1314
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1315
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1316

    
1317
enable $ARCH_EXT_LIST \
1318
       $DECODER_LIST \
1319
       $ENCODER_LIST \
1320
       $HWACCEL_LIST \
1321
       $PARSER_LIST \
1322
       $BSF_LIST \
1323
       $DEMUXER_LIST \
1324
       $MUXER_LIST \
1325
       $FILTER_LIST \
1326
       $PROTOCOL_LIST \
1327
       $INDEV_LIST \
1328
       $OUTDEV_LIST \
1329

    
1330
die_unknown(){
1331
    echo "Unknown option \"$1\"."
1332
    echo "See $0 --help for available options."
1333
    exit 1
1334
}
1335

    
1336
show_list() {
1337
    suffix=_$1
1338
    shift
1339
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1340
    exit 0
1341
}
1342

    
1343
for opt do
1344
    optval="${opt#*=}"
1345
    case "$opt" in
1346
    --extra-cflags=*) add_cflags $optval
1347
    ;;
1348
    --extra-ldflags=*) add_ldflags $optval
1349
    ;;
1350
    --extra-libs=*) add_extralibs $optval
1351
    ;;
1352
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1353
    ;;
1354
    --enable-debug=*) debuglevel="$optval"
1355
    ;;
1356
    --enable-*=*|--disable-*=*)
1357
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1358
    case "$thing" in
1359
        encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1360
        *) die_unknown "$opt" ;;
1361
    esac
1362
    ;;
1363
    --enable-?*|--disable-?*)
1364
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1365
    if is_in $option $COMPONENT_LIST; then
1366
        test $action = disable && action=unset
1367
        eval $action \$$(toupper ${option%s})_LIST
1368
    elif is_in $option $CMDLINE_SELECT; then
1369
        $action $option
1370
    else
1371
        die_unknown $opt
1372
    fi
1373
    ;;
1374
    --list-*)
1375
        NAME="${opt#--list-}"
1376
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1377
        NAME=${NAME%s}
1378
        eval show_list $NAME \$$(toupper $NAME)_LIST
1379
    ;;
1380
    --help|-h) show_help
1381
    ;;
1382
    *)
1383
    optname="${opt%%=*}"
1384
    optname="${optname#--}"
1385
    optname=$(echo "$optname" | sed 's/-/_/g')
1386
    is_in $optname $CMDLINE_SET || die_unknown $opt
1387
    eval $optname='$optval'
1388
    ;;
1389
    esac
1390
done
1391

    
1392
disabled logging && logfile=/dev/null
1393

    
1394
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1395
set >> $logfile
1396

    
1397
test -n "$cross_prefix" && enable cross_compile
1398

    
1399
ar="${cross_prefix}${ar}"
1400
cc_default="${cross_prefix}${cc_default}"
1401
nm_default="${cross_prefix}${nm_default}"
1402
ranlib="${cross_prefix}${ranlib}"
1403
strip="${cross_prefix}${strip}"
1404

    
1405
sysinclude_default="${sysroot}/usr/include"
1406

    
1407
set_default cc nm sysinclude
1408
as_default=$cc
1409
enabled cross_compile || host_cc_default=$cc
1410
set_default host_cc
1411

    
1412
exesuf() {
1413
    case $1 in
1414
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1415
    esac
1416
}
1417

    
1418
EXESUF=$(exesuf $target_os)
1419
HOSTEXESUF=$(exesuf $host_os)
1420

    
1421
# set temporary file name
1422
: ${TMPDIR:=$TEMPDIR}
1423
: ${TMPDIR:=$TMP}
1424
: ${TMPDIR:=/tmp}
1425

    
1426
if ! check_cmd type mktemp; then
1427
    # simple replacement for missing mktemp
1428
    # NOT SAFE FOR GENERAL USE
1429
    mktemp(){
1430
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1431
    }
1432
fi
1433

    
1434
tmpfile(){
1435
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1436
        (set -C; exec > $tmp) 2>/dev/null ||
1437
        die "Unable to create temoporary file in $TMPDIR."
1438
    append TMPFILES $tmp
1439
    eval $1=$tmp
1440
}
1441

    
1442
trap 'rm -f -- $TMPFILES' EXIT
1443
trap exit HUP INT TERM
1444

    
1445
tmpfile TMPC  .c
1446
tmpfile TMPE  $EXESUF
1447
tmpfile TMPH  .h
1448
tmpfile TMPO  .o
1449
tmpfile TMPS  .S
1450
tmpfile TMPSH .sh
1451

    
1452
unset -f mktemp
1453

    
1454
# make sure we can execute files in $TMPDIR
1455
cat > $TMPSH 2>> $logfile <<EOF
1456
#! /bin/sh
1457
EOF
1458
chmod +x $TMPSH >> $logfile 2>&1
1459
if ! $TMPSH >> $logfile 2>&1; then
1460
    cat <<EOF
1461
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1462
variable to another directory and make sure that it is not mounted noexec.
1463
EOF
1464
    die "Sanity test failed."
1465
fi
1466

    
1467
if   $cc --version 2>/dev/null | grep -qi gcc; then
1468
    cc_type=gcc
1469
elif $cc --version 2>/dev/null | grep -q Intel; then
1470
    cc_type=icc
1471
elif $cc -v 2>&1 | grep -q xlc; then
1472
    cc_type=xlc
1473
elif $cc -V 2>/dev/null | grep -q Compaq; then
1474
    cc_type=ccc
1475
    DEPEND_CMD='$(CC) $(CPPFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1476
    debuglevel=3
1477
    add_ldflags -Wl,-z,now # calls to libots crash without this
1478
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1479
    test -d "$sysroot" || die "No valid sysroot specified."
1480
    cc_type=armcc
1481
    armcc_conf="$PWD/armcc.conf"
1482
    $cc --arm_linux_configure                 \
1483
        --arm_linux_config_file="$armcc_conf" \
1484
        --configure_sysroot="$sysroot"        \
1485
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1486
        die "Error creating armcc configuration file."
1487
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1488
    as_default="${cross_prefix}gcc"
1489
fi
1490

    
1491
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1492

    
1493
: ${dep_cc_default:=$cc}
1494
: ${ld_default:=$cc}
1495
set_default as dep_cc ld
1496

    
1497
if test -n "$sysroot"; then
1498
    case "$cc_type" in
1499
        gcc)
1500
            add_cppflags --sysroot="$sysroot"
1501
            add_ldflags --sysroot="$sysroot"
1502
        ;;
1503
    esac
1504
fi
1505

    
1506
# compiler sanity check
1507
check_exec <<EOF
1508
int main(void){ return 0; }
1509
EOF
1510
if test "$?" != 0; then
1511
    echo "$cc is unable to create an executable file."
1512
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1513
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1514
        echo "Only do this if you know what cross compiling means."
1515
    fi
1516
    die "C compiler test failed."
1517
fi
1518

    
1519
check_cflags -std=c99
1520
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1521
#include <stdlib.h>
1522
EOF
1523
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1524
#include <stdlib.h>
1525
EOF
1526

    
1527
case "$arch" in
1528
    alpha)
1529
        arch="alpha"
1530
        enable fast_64bit
1531
        check_cflags -mieee
1532
    ;;
1533
    arm|armv[4567]*l)
1534
        arch="arm"
1535
    ;;
1536
    avr32)
1537
    ;;
1538
    bfin)
1539
        arch="bfin"
1540
    ;;
1541
    ia64)
1542
        arch="ia64"
1543
        enable fast_64bit
1544
    ;;
1545
    m68k)
1546
        arch="m68k"
1547
    ;;
1548
    mips|mipsel|IP*)
1549
        arch="mips"
1550
    ;;
1551
    mips64)
1552
        arch="mips"
1553
        subarch="mips64"
1554
        enable fast_64bit
1555
    ;;
1556
    parisc|hppa)
1557
        arch="parisc"
1558
    ;;
1559
    parisc64|hppa64)
1560
        arch="parisc"
1561
        enable fast_64bit
1562
    ;;
1563
    "Power Macintosh"|ppc|powerpc)
1564
        arch="ppc"
1565
        enable fast_unaligned
1566
    ;;
1567
    ppc64)
1568
        arch="ppc"
1569
        subarch="ppc64"
1570
        enable fast_64bit
1571
        enable fast_unaligned
1572
    ;;
1573
    s390|s390x)
1574
        arch="s390"
1575
    ;;
1576
    sh4|sh)
1577
        arch="sh4"
1578
    ;;
1579
    sparc)
1580
        arch="sparc"
1581
    ;;
1582
    sun4u|sparc64)
1583
        arch="sparc"
1584
        subarch="sparc64"
1585
        enable fast_64bit
1586
    ;;
1587
    i386|i486|i586|i686|i86pc|BePC)
1588
        arch="x86"
1589
        subarch="x86_32"
1590
        enable fast_unaligned
1591
    ;;
1592
    x86_64|amd64)
1593
        arch="x86"
1594
        subarch="x86_32"
1595
        enable cmov
1596
        enable fast_cmov
1597
        enable fast_unaligned
1598
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1599
        int test[sizeof(char*) - 7];
1600
EOF
1601
    ;;
1602
    *)
1603
        arch="unknown"
1604
    ;;
1605
esac
1606

    
1607
enable $arch $subarch
1608

    
1609
# OS specific
1610
case $target_os in
1611
    beos|haiku|zeta)
1612
        prefix_default="$HOME/config"
1613
        # helps building libavcodec
1614
        add_cppflags -DPIC
1615
        add_cflags -fomit-frame-pointer
1616
        # 3 gcc releases known for BeOS, each with ugly bugs
1617
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1618
        case "$gcc_version" in
1619
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1620
            disable mmx
1621
            ;;
1622
          *20010315*) echo "BeBits gcc"
1623
            add_cflags -fno-expensive-optimizations
1624
            ;;
1625
        esac
1626
        SHFLAGS=-nostart
1627
        # enable BeOS things
1628
        enable audio_beos
1629
        # no need for libm, but the inet stuff
1630
        # Check for BONE
1631
        # XXX: actually should check for NOT net_server
1632
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1633
            network_extralibs="-lbind -lsocket"
1634
        else
1635
            enable beos_netserver
1636
            network_extralibs="-lnet"
1637
        fi ;;
1638
    sunos)
1639
        FFSERVERLDFLAGS=""
1640
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1641
        network_extralibs="-lsocket -lnsl"
1642
        add_cppflags -D__EXTENSIONS__
1643
        ;;
1644
    netbsd)
1645
        oss_indev_extralibs="-lossaudio"
1646
        oss_outdev_extralibs="-lossaudio"
1647
        ;;
1648
    openbsd)
1649
        disable need_memalign
1650
        LIBOBJFLAGS='$(PIC)'
1651
        SHFLAGS='-shared'
1652
        oss_indev_extralibs="-lossaudio"
1653
        oss_outdev_extralibs="-lossaudio"
1654
        ;;
1655
    freebsd|dragonfly)
1656
        disable need_memalign
1657
        ;;
1658
    bsd/os)
1659
        osextralibs="-lpoll -lgnugetopt"
1660
        strip="strip -d"
1661
        ;;
1662
    darwin)
1663
        disable need_memalign
1664
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1665
        strip="strip -x"
1666
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1667
        SLIBSUF=".dylib"
1668
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1669
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1670
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1671
        objformat="macho"
1672
        enabled x86_64 && objformat="macho64"
1673
        ;;
1674
    mingw32*)
1675
        target_os=mingw32
1676
        LIBTARGET=i386
1677
        if enabled x86_64; then
1678
            disable need_memalign
1679
            LIBTARGET=x64
1680
        fi
1681
        shlibdir_default="$bindir_default"
1682
        disable ffserver
1683
        SLIBPREF=""
1684
        SLIBSUF=".dll"
1685
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1686
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1687
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1688
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1689
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1690
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1691
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1692
        objformat="win32"
1693
        enable dos_paths
1694
        check_cflags -fno-common
1695
        if ! enabled x86_64; then
1696
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1697
                die "ERROR: MinGW runtime version must be >= 3.15."
1698
            enabled_any avisynth vfwcap_demuxer &&
1699
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1700
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1701
            fi
1702
        ;;
1703
    cygwin*)
1704
        target_os=cygwin
1705
        shlibdir_default="$bindir_default"
1706
        SLIBPREF="cyg"
1707
        SLIBSUF=".dll"
1708
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1709
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1710
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1711
        objformat="win32"
1712
        enable dos_paths
1713
        check_cflags -fno-common
1714
        ;;
1715
    *-dos|freedos|opendos)
1716
        disable ffplay ffserver
1717
        disable $INDEV_LIST $OUTDEV_LIST
1718
        network_extralibs="-lsocket"
1719
        objformat="coff"
1720
        enable dos_paths
1721
        ;;
1722
    linux)
1723
        enable dv1394
1724
        ;;
1725
    irix*)
1726
        target_os=irix
1727
        ranlib="echo ignoring ranlib"
1728
        ;;
1729
    os/2*)
1730
        strip="lxlite"
1731
        ln_s="cp -f"
1732
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1733
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1734
        FFSERVERLDFLAGS=""
1735
        LIBSUF="_s.a"
1736
        SLIBPREF=""
1737
        SLIBSUF=".dll"
1738
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1739
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1740
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1741
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1742
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1743
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1744
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1745
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1746
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1747
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1748
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1749
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1750
        enable dos_paths
1751
        ;;
1752
    gnu/kfreebsd)
1753
        ;;
1754
    gnu)
1755
        ;;
1756

    
1757
    *)
1758
        die "Unknown OS '$target_os'."
1759
        ;;
1760
esac
1761

    
1762
set_default $PATHS_LIST
1763

    
1764
add_extralibs $osextralibs
1765

    
1766
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1767
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1768

    
1769
# we need to build at least one lib type
1770
if ! enabled_any static shared; then
1771
    cat <<EOF
1772
At least one library type must be built.
1773
Specify --enable-static to build the static libraries or --enable-shared to
1774
build the shared libraries as well. To only build the shared libraries specify
1775
--disable-static in addition to --enable-shared.
1776
EOF
1777
    exit 1;
1778
fi
1779

    
1780
disabled static && LIBNAME=""
1781

    
1782
if enabled_any libfaad libfaadbin ; then
1783
    if check_header faad.h; then
1784
        check_cc <<EOF
1785
#include <faad.h>
1786
#ifndef FAAD2_VERSION
1787
ok faad1
1788
#endif
1789
int main(void) { return 0; }
1790
EOF
1791
        test $? = 0 && enable libfaad2
1792
    else
1793
        die "FAAD test failed."
1794
    fi
1795
fi
1796

    
1797

    
1798
die_license_disabled() {
1799
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1800
}
1801

    
1802
die_license_disabled gpl libfaad2
1803
die_license_disabled gpl libx264
1804
die_license_disabled gpl libxvid
1805
die_license_disabled gpl postproc
1806
die_license_disabled gpl x11grab
1807

    
1808
die_license_disabled nonfree libfaac
1809

    
1810
die_license_disabled version3 libopencore_amrnb
1811
die_license_disabled version3 libopencore_amrwb
1812

    
1813
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1814

    
1815
check_deps $ARCH_EXT_LIST
1816

    
1817
test -z "$need_memalign" && need_memalign="$mmx"
1818

    
1819
#Darwin CC versions
1820
if test $target_os = darwin; then
1821
    if enabled xlc; then
1822
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1823
    else
1824
        add_cflags -pipe
1825
        check_cflags -force_cpusubtype_ALL
1826
        check_cflags -Wno-sign-compare
1827
        enabled shared || check_cflags -mdynamic-no-pic
1828
    fi
1829
fi
1830

    
1831
disabled optimizations || check_cflags -fomit-frame-pointer
1832

    
1833
# Add processor-specific flags
1834
if test $cpu != "generic"; then
1835
    warn_altivec(){
1836
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1837
    }
1838
    case $cpu in
1839
        601|ppc601|PowerPC601)
1840
            cpuflags="-mcpu=601"
1841
            warn_altivec enabled PPC601
1842
        ;;
1843
        603*|ppc603*|PowerPC603*)
1844
            cpuflags="-mcpu=603"
1845
            warn_altivec enabled PPC603
1846
        ;;
1847
        604*|ppc604*|PowerPC604*)
1848
            cpuflags="-mcpu=604"
1849
            warn_altivec enabled PPC604
1850
        ;;
1851
        G3|g3|75*|ppc75*|PowerPC75*)
1852
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1853
            warn_altivec enabled PPC75x
1854
        ;;
1855
        G4|g4|745*|ppc745*|PowerPC745*)
1856
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1857
            warn_altivec disabled PPC745x
1858
        ;;
1859
        74*|ppc74*|PowerPC74*)
1860
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1861
            warn_altivec disabled PPC74xx
1862
        ;;
1863
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1864
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1865
            warn_altivec disabled PPC970
1866
        ;;
1867
        Cell|CELL|cell)
1868
            cpuflags="-mcpu=cell"
1869
            warn_altivec disabled Cell
1870
            enable ldbrx
1871
        ;;
1872
        # targets that do NOT support conditional mov (cmov)
1873
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1874
            cpuflags="-march=$cpu"
1875
            disable cmov
1876
        ;;
1877
        # targets that do support conditional mov (cmov)
1878
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1879
            cpuflags="-march=$cpu"
1880
            enable cmov
1881
            enable fast_cmov
1882
        ;;
1883
        # targets that do support conditional mov but on which it's slow
1884
        pentium4|pentium4m|prescott|nocona)
1885
            cpuflags="-march=$cpu"
1886
            enable cmov
1887
            disable fast_cmov
1888
        ;;
1889
        sparc64)
1890
            cpuflags="-mcpu=v9"
1891
        ;;
1892
        arm11*|cortex*)
1893
            cpuflags="-mcpu=$cpu"
1894
            enable fast_unaligned
1895
        ;;
1896
        armv[67]*)
1897
            cpuflags="-march=$cpu"
1898
            enable fast_unaligned
1899
        ;;
1900
        armv*)
1901
            cpuflags="-march=$cpu"
1902
        ;;
1903
        arm*)
1904
            cpuflags="-mcpu=$cpu"
1905
        ;;
1906
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1907
            enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1908
        ;;
1909
        bf*)
1910
            cpuflags="-mcpu=$cpu"
1911
        ;;
1912
        mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1913
            cpuflags="-march=$cpu"
1914
        ;;
1915
        *)
1916
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1917
        ;;
1918
    esac
1919
fi
1920

    
1921
add_cflags $cpuflags
1922

    
1923
check_cc <<EOF || die "Symbol mangling check failed."
1924
int ff_extern;
1925
EOF
1926
sym=$($nm -P -g $TMPO | grep ff_extern)
1927
extern_prefix=${sym%%ff_extern*}
1928

    
1929
check_cc <<EOF && enable inline_asm
1930
void foo(void) { __asm__ volatile ("" ::); }
1931
EOF
1932

    
1933
if enabled x86; then
1934
    # check whether EBP is available on x86
1935
    # As 'i' is stored on the stack, this program will crash
1936
    # if the base pointer is used to access it because the
1937
    # base pointer is cleared in the inline assembly code.
1938
    check_exec_crash <<EOF && enable ebp_available
1939
    volatile int i=0;
1940
    __asm__ volatile (
1941
        "xorl %%ebp, %%ebp"
1942
    ::: "%ebp");
1943
    return i;
1944
EOF
1945

    
1946
    # check wether EBX is available on x86
1947
    check_asm ebx_available '"":::"%ebx"'
1948

    
1949
    # check whether more than 10 operands are supported
1950
    check_cc <<EOF && enable ten_operands
1951
int main(void) {
1952
    int x=0;
1953
    __asm__ volatile(
1954
        ""
1955
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1956
    );
1957
    return 0;
1958
}
1959
EOF
1960

    
1961
    # check whether binutils is new enough to compile SSSE3/MMX2
1962
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1963
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1964

    
1965
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1966

    
1967
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1968
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1969
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1970
    case "$objformat" in
1971
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1972
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1973
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1974
    esac
1975
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1976
fi
1977

    
1978
# check for assembler specific support
1979

    
1980
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1981

    
1982
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1983
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1984
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1985

    
1986
# check for SIMD availability
1987

    
1988
# AltiVec flags: The FSF version of GCC differs from the Apple version
1989
if enabled altivec; then
1990
    check_cflags -maltivec -mabi=altivec &&
1991
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1992
        check_cflags -faltivec
1993

    
1994
    # check if our compiler supports Motorola AltiVec C API
1995
    check_cc <<EOF || disable altivec
1996
$inc_altivec_h
1997
int main(void) {
1998
    vector signed int v1, v2, v3;
1999
    v1 = vec_add(v2,v3);
2000
    return 0;
2001
}
2002
EOF
2003

    
2004
    # check if our compiler supports braces for vector declarations
2005
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2006
$inc_altivec_h
2007
int main (void) { (vector int) {1}; return 0; }
2008
EOF
2009
fi
2010

    
2011
# We have to check if pld is a nop and disable it.
2012
enabled arm     && check_asm pld     '"pld [r0]"'
2013
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2014
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2015
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2016
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2017
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2018
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2019
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2020
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2021

    
2022
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2023

    
2024
# ---
2025
# big/little-endian test
2026
check_cc <<EOF || die "endian test failed"
2027
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2028
EOF
2029
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2030

    
2031
# ---
2032
# check availability of some header files
2033

    
2034
if check_func dlopen; then
2035
    ldl=
2036
elif check_func dlopen -ldl; then
2037
    ldl=-ldl
2038
fi
2039

    
2040
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2041
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2042

    
2043
check_func  fork
2044
check_func  gethrtime
2045
check_func  getrusage
2046
check_func  inet_aton $network_extralibs
2047
check_func  memalign
2048
check_func  mkstemp
2049
check_func  posix_memalign
2050
check_func_headers io.h setmode
2051
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2052
check_func_headers windows.h GetProcessTimes
2053
check_func_headers windows.h VirtualAlloc
2054

    
2055
check_header conio.h
2056
check_header dlfcn.h
2057
check_header malloc.h
2058
check_header poll.h
2059
check_header sys/mman.h
2060
check_header sys/resource.h
2061
check_header sys/select.h
2062
check_header termios.h
2063
check_header vdpau/vdpau.h
2064
check_header vdpau/vdpau_x11.h
2065
check_header X11/extensions/XvMClib.h
2066

    
2067
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2068
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2069
fi
2070

    
2071
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2072
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2073

    
2074
# check for some common methods of building with pthread support
2075
# do this before the optional library checks as some of them require pthreads
2076
if enabled pthreads; then
2077
    if check_func pthread_create; then
2078
        :
2079
    elif check_func pthread_create -pthread; then
2080
        add_cflags -pthread
2081
        add_extralibs -pthread
2082
    elif check_func pthread_create -pthreads; then
2083
        add_cflags -pthreads
2084
        add_extralibs -pthreads
2085
    elif check_func pthread_create -lpthreadGC2; then
2086
        add_extralibs -lpthreadGC2
2087
    elif ! check_lib pthread.h pthread_create -lpthread; then
2088
        die "ERROR: can't find pthreads library"
2089
    fi
2090
fi
2091

    
2092
for thread in $THREADS_LIST; do
2093
    if enabled $thread; then
2094
        test -n "$thread_type" &&
2095
            die "ERROR: Only one thread type must be selected." ||
2096
            thread_type="$thread"
2097
    fi
2098
done
2099

    
2100
check_lib math.h sin -lm
2101
check_lib va/va.h vaInitialize -lva
2102

    
2103
# test for C99 functions in math.h
2104
for func in llrint log2 lrint lrintf round roundf truncf; do
2105
    check_exec <<EOF && enable $func || disable $func
2106
#include <math.h>
2107
int main(void) { return ($func(3.999f) > 0)?0:1; }
2108
EOF
2109
done
2110

    
2111
# these are off by default, so fail if requested and not available
2112
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2113
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2114
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2115
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2116
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2117
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2118
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2119
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2120
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2121
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2122
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2123
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2124
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2125
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2126
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2127
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2128
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2129
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2130
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2131
                        die "ERROR: libx264 version must be >= 0.65."; }
2132
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2133
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2134

    
2135
# libdc1394 check
2136
if enabled libdc1394; then
2137
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2138
        enable libdc1394_2; } ||
2139
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2140
        enable libdc1394_1; } ||
2141
    die "ERROR: No version of libdc1394 found "
2142
fi
2143

    
2144

    
2145
_restrict=
2146
for restrict_keyword in restrict __restrict__ __restrict; do
2147
    check_cc <<EOF && _restrict=$restrict_keyword && break
2148
void foo(char * $restrict_keyword p);
2149
EOF
2150
done
2151

    
2152
##########################################
2153
# SDL check
2154

    
2155
disable sdl_too_old
2156
disable sdl
2157
SDL_CONFIG="${cross_prefix}sdl-config"
2158
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2159
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2160
    temp_cflags $sdl_cflags
2161
    temp_extralibs $("${SDL_CONFIG}" --libs)
2162
    if check_lib2 SDL.h SDL_Init; then
2163
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2164
        if test "$_sdlversion" -lt 121 ; then
2165
            enable sdl_too_old
2166
        else
2167
            enable sdl
2168
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2169
#include <SDL.h>
2170
int main(int argc, char **argv){
2171
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2172
    int w = vi->current_w;
2173
    return 0;
2174
}
2175
EOF
2176
        fi
2177
    fi
2178
    restore_flags
2179
fi
2180

    
2181
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2182

    
2183
##########################################
2184
# Network check
2185

    
2186
if enabled network; then
2187
    check_type "sys/types.h sys/socket.h" socklen_t
2188
    # Prefer arpa/inet.h over winsock2
2189
    if check_header arpa/inet.h ; then
2190
        check_func closesocket
2191
    elif check_header winsock2.h ; then
2192
        network_extralibs="-lws2_32"
2193
        check_type ws2tcpip.h socklen_t
2194
        check_func_headers winsock2.h closesocket
2195
    else
2196
        disable network
2197
    fi
2198
fi
2199

    
2200
##########################################
2201
# IPv6 check
2202

    
2203
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2204
#include <sys/types.h>
2205
#include <sys/socket.h>
2206
#include <netinet/in.h>
2207
#include <netdb.h>
2208
int main(void) {
2209
    struct sockaddr_storage saddr;
2210
    struct ipv6_mreq mreq6;
2211
    getaddrinfo(0,0,0,0);
2212
    getnameinfo(0,0,0,0,0,0,0);
2213
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2214
}
2215
EOF
2216

    
2217
check_header linux/videodev.h
2218
check_header linux/videodev2.h
2219
check_header sys/videoio.h
2220

    
2221
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2222

    
2223
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2224
{ check_header dev/bktr/ioctl_meteor.h &&
2225
  check_header dev/bktr/ioctl_bt848.h; } ||
2226
{ check_header machine/ioctl_meteor.h &&
2227
  check_header machine/ioctl_bt848.h; } ||
2228
{ check_header dev/video/meteor/ioctl_meteor.h &&
2229
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2230
check_header dev/ic/bt8xx.h
2231

    
2232
check_header sys/soundcard.h
2233
check_header soundcard.h
2234

    
2235
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2236

    
2237
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2238

    
2239
# deal with the X11 frame grabber
2240
enabled x11grab                         &&
2241
check_header X11/Xlib.h                 &&
2242
check_header X11/extensions/XShm.h      &&
2243
check_func XOpenDisplay -lX11           &&
2244
check_func XShmCreateImage -lX11 -lXext
2245

    
2246
enabled debug && add_cflags -g"$debuglevel"
2247

    
2248
# add some useful compiler flags if supported
2249
check_cflags -Wdeclaration-after-statement
2250
check_cflags -Wall
2251
check_cflags -Wno-switch
2252
check_cflags -Wdisabled-optimization
2253
check_cflags -Wpointer-arith
2254
check_cflags -Wredundant-decls
2255
check_cflags -Wno-pointer-sign
2256
check_cflags -Wcast-qual
2257
check_cflags -Wwrite-strings
2258
check_cflags -Wtype-limits
2259
check_cflags -Wundef
2260
enabled extra_warnings && check_cflags -Winline
2261

    
2262
# add some linker flags
2263
check_ldflags -Wl,--warn-common
2264
check_ldflags -Wl,--as-needed
2265
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2266
check_ldflags -Wl,-Bsymbolic
2267

    
2268
if enabled small; then
2269
    check_cflags -Os            # not all compilers support -Os
2270
    optimizations="small"
2271
elif enabled optimizations; then
2272
    if enabled xlc; then
2273
        add_cflags  -O5
2274
        add_ldflags -O5
2275
    elif enabled ccc; then
2276
        add_cflags -fast
2277
    else
2278
        add_cflags -O3
2279
    fi
2280
fi
2281
check_cflags -fno-math-errno
2282
check_cflags -fno-signed-zeros
2283

    
2284
# add some flags for Intel C Compiler
2285
if enabled icc; then
2286
    # Just warnings, no remarks
2287
    check_cflags -w1
2288
    # -wd: Disable following warnings
2289
    # 144, 167, 556: -Wno-pointer-sign
2290
    # 10006: ignoring unknown option -fno-signed-zeros
2291
    # 10156: ignoring option '-W'; no argument required
2292
    check_cflags -wd144,167,556,10006,10156
2293
    # 11030: Warning unknown option --as-needed
2294
    # 10156: ignoring option '-export'; no argument required
2295
    check_ldflags -wd10156,11030
2296
    # Allow to compile with optimizations
2297
    check_ldflags -march=$cpu
2298
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2299
    enable ebp_available
2300
elif enabled ccc; then
2301
    # disable some annoying warnings
2302
    add_cflags -msg_disable cvtu32to64
2303
    add_cflags -msg_disable embedcomment
2304
    add_cflags -msg_disable needconstext
2305
    add_cflags -msg_disable nomainieee
2306
    add_cflags -msg_disable ptrmismatch1
2307
    add_cflags -msg_disable unreachcode
2308
fi
2309

    
2310
# PIC flags for shared library objects where they are needed
2311
if enabled shared; then
2312
    # LIBOBJFLAGS may have already been set in the OS configuration
2313
    if test -z "$LIBOBJFLAGS" ; then
2314
        case "${subarch-$arch}" in
2315
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2316
        esac
2317
    fi
2318
fi
2319

    
2320
if enabled gprof; then
2321
    add_cflags  -p
2322
    add_ldflags -p
2323
fi
2324

    
2325
# Find out if the .align argument is a power of two or not.
2326
check_asm asmalign_pot '".align 3"'
2327

    
2328
enabled_any $DECODER_LIST      && enable decoders
2329
enabled_any $ENCODER_LIST      && enable encoders
2330
enabled_any $HWACCEL_LIST      && enable hwaccels
2331
enabled_any $BSF_LIST          && enable bsfs
2332
enabled_any $DEMUXER_LIST      && enable demuxers
2333
enabled_any $MUXER_LIST        && enable muxers
2334
enabled_any $FILTER_LIST       && enable filters
2335
enabled_any $INDEV_LIST        && enable demuxers
2336
enabled_any $OUTDEV_LIST       && enable muxers
2337
enabled_any $PROTOCOL_LIST     && enable protocols
2338

    
2339
enabled_any $THREADS_LIST      && enable threads
2340

    
2341
check_deps $CONFIG_LIST       \
2342
           $CONFIG_EXTRA      \
2343
           $HAVE_LIST         \
2344
           $DECODER_LIST      \
2345
           $ENCODER_LIST      \
2346
           $HWACCEL_LIST      \
2347
           $PARSER_LIST       \
2348
           $BSF_LIST          \
2349
           $DEMUXER_LIST      \
2350
           $MUXER_LIST        \
2351
           $FILTER_LIST       \
2352
           $INDEV_LIST        \
2353
           $OUTDEV_LIST       \
2354
           $PROTOCOL_LIST     \
2355

    
2356
echo "install prefix            $prefix"
2357
echo "source path               $source_path"
2358
echo "C compiler                $cc"
2359
echo ".align is power-of-two    $asmalign_pot"
2360
echo "ARCH                      $arch ($cpu)"
2361
if test "$build_suffix" != ""; then
2362
    echo "build suffix              $build_suffix"
2363
fi
2364
if test "$extra_version" != ""; then
2365
    echo "version string suffix     $extra_version"
2366
fi
2367
echo "big-endian                ${bigendian-no}"
2368
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2369
if enabled x86; then
2370
    echo "yasm                      ${yasm-no}"
2371
    echo "MMX enabled               ${mmx-no}"
2372
    echo "MMX2 enabled              ${mmx2-no}"
2373
    echo "3DNow! enabled            ${amd3dnow-no}"
2374
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2375
    echo "SSE enabled               ${sse-no}"
2376
    echo "SSSE3 enabled             ${ssse3-no}"
2377
    echo "CMOV enabled              ${cmov-no}"
2378
    echo "CMOV is fast              ${fast_cmov-no}"
2379
    echo "EBX available             ${ebx_available-no}"
2380
    echo "EBP available             ${ebp_available-no}"
2381
    echo "10 operands supported     ${ten_operands-no}"
2382
fi
2383
if enabled arm; then
2384
    echo "ARMv5TE enabled           ${armv5te-no}"
2385
    echo "ARMv6 enabled             ${armv6-no}"
2386
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2387
    echo "ARM VFP enabled           ${armvfp-no}"
2388
    echo "IWMMXT enabled            ${iwmmxt-no}"
2389
    echo "NEON enabled              ${neon-no}"
2390
fi
2391
if enabled mips; then
2392
    echo "MMI enabled               ${mmi-no}"
2393
fi
2394
if enabled ppc; then
2395
    echo "AltiVec enabled           ${altivec-no}"
2396
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2397
    echo "dcbzl available           ${dcbzl-no}"
2398
    echo "performance report        ${powerpc_perf-no}"
2399
fi
2400
if enabled sparc; then
2401
    echo "VIS enabled               ${vis-no}"
2402
fi
2403
echo "gprof enabled             ${gprof-no}"
2404
echo "debug symbols             ${debug-no}"
2405
echo "strip symbols             ${stripping-no}"
2406
echo "optimizations             ${optimizations-no}"
2407
echo "static                    ${static-no}"
2408
echo "shared                    ${shared-no}"
2409
echo "postprocessing support    ${postproc-no}"
2410
echo "new filter support        ${avfilter-no}"
2411
echo "filters using lavformat   ${avfilter_lavf-no}"
2412
echo "network support           ${network-no}"
2413
if enabled network; then
2414
    echo "IPv6 support              ${ipv6-no}"
2415
fi
2416
echo "threading support         ${thread_type-no}"
2417
echo "SDL support               ${sdl-no}"
2418
if enabled sdl_too_old; then
2419
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2420
fi
2421
echo "Sun medialib support      ${mlib-no}"
2422
echo "AVISynth enabled          ${avisynth-no}"
2423
echo "libdc1394 support         ${libdc1394-no}"
2424
echo "libdirac enabled          ${libdirac-no}"
2425
echo "libfaac enabled           ${libfaac-no}"
2426
echo "libfaad enabled           ${libfaad-no}"
2427
echo "libfaad dlopened          ${libfaadbin-no}"
2428
echo "libgsm enabled            ${libgsm-no}"
2429
echo "libmp3lame enabled        ${libmp3lame-no}"
2430
echo "libnut enabled            ${libnut-no}"
2431
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2432
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2433
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2434
echo "libschroedinger enabled   ${libschroedinger-no}"
2435
echo "libspeex enabled          ${libspeex-no}"
2436
echo "libtheora enabled         ${libtheora-no}"
2437
echo "libvorbis enabled         ${libvorbis-no}"
2438
echo "libx264 enabled           ${libx264-no}"
2439
echo "libxvid enabled           ${libxvid-no}"
2440
echo "zlib enabled              ${zlib-no}"
2441
echo "bzlib enabled             ${bzlib-no}"
2442
echo
2443

    
2444
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2445
    echo "Enabled ${type}s:"
2446
    eval list=\$$(toupper $type)_LIST
2447
    for part in $list; do
2448
        enabled $part && echo ${part%_*}
2449
    done | sort | pr -3 -t
2450
    echo
2451
done
2452

    
2453
license="LGPL version 2.1 or later"
2454
if enabled nonfree; then
2455
    license="nonfree and unredistributable"
2456
elif enabled gplv3; then
2457
    license="GPL version 3 or later"
2458
elif enabled lgplv3; then
2459
    license="LGPL version 3 or later"
2460
elif enabled gpl; then
2461
    license="GPL version 2 or later"
2462
fi
2463

    
2464
echo "License: $license"
2465

    
2466
echo "Creating config.mak and config.h..."
2467

    
2468
echo "# Automatically generated by configure - do not modify!" > config.mak
2469
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2470
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2471
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2472
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2473
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2474

    
2475
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2476
echo "prefix=$prefix" >> config.mak
2477
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2478
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2479
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2480
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2481
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2482
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2483
echo "SRC_PATH=\"$source_path\"" >> config.mak
2484
echo "SRC_PATH_BARE=$source_path" >> config.mak
2485
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2486
echo "CC=$cc" >> config.mak
2487
echo "AS=$as" >> config.mak
2488
echo "LD=$ld" >> config.mak
2489
echo "DEPCC=$dep_cc" >> config.mak
2490
echo "YASM=$yasmexe" >> config.mak
2491
echo "AR=$ar" >> config.mak
2492
echo "RANLIB=$ranlib" >> config.mak
2493
echo "LN_S=$ln_s" >> config.mak
2494
enabled stripping &&
2495
    echo "STRIP=$strip" >> config.mak ||
2496
    echo "STRIP=echo ignoring strip" >> config.mak
2497

    
2498
echo "CPPFLAGS?=$CPPFLAGS" >> config.mak
2499
echo "CFLAGS=$CFLAGS" >> config.mak
2500
echo "CC_O=$CC_O" >> config.mak
2501
echo "LDFLAGS=$LDFLAGS" >> config.mak
2502
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2503
echo "SHFLAGS=$SHFLAGS" >> config.mak
2504
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2505
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2506
echo "BUILD_STATIC=$static" >> config.mak
2507
echo "BUILDSUF=$build_suffix" >> config.mak
2508
echo "FULLNAME=$FULLNAME" >> config.mak
2509
echo "LIBPREF=$LIBPREF" >> config.mak
2510
echo "LIBSUF=$LIBSUF" >> config.mak
2511
echo "LIBNAME=$LIBNAME" >> config.mak
2512
echo "SLIBPREF=$SLIBPREF" >> config.mak
2513
echo "SLIBSUF=$SLIBSUF" >> config.mak
2514
echo "EXESUF=$EXESUF" >> config.mak
2515
echo "EXTRA_VERSION=$extra_version" >> config.mak
2516
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2517
echo "HOSTCC=$host_cc" >> config.mak
2518
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2519
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2520
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2521
echo "HOSTLIBS=$host_libs" >> config.mak
2522
echo "TARGET_EXEC=$target_exec" >> config.mak
2523
echo "TARGET_PATH=$target_path" >> config.mak
2524

    
2525
if enabled bigendian; then
2526
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2527
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2528
fi
2529

    
2530
if enabled sdl; then
2531
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2532
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2533
fi
2534
if enabled texi2html; then
2535
    echo "BUILD_DOC=yes" >> config.mak
2536
fi
2537

    
2538
get_version(){
2539
    name=$1
2540
    file=$source_path/$2
2541
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2542
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2543
    lcname=$(tolower $name)
2544
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2545
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2546
}
2547

    
2548
get_version LIBSWSCALE  libswscale/swscale.h
2549
get_version LIBPOSTPROC libpostproc/postprocess.h
2550
get_version LIBAVCODEC  libavcodec/avcodec.h
2551
get_version LIBAVDEVICE libavdevice/avdevice.h
2552
get_version LIBAVFORMAT libavformat/avformat.h
2553
get_version LIBAVUTIL   libavutil/avutil.h
2554
get_version LIBAVFILTER libavfilter/avfilter.h
2555

    
2556
if enabled shared; then
2557
    echo "BUILD_SHARED=yes" >> config.mak
2558
    echo "PIC=-fPIC -DPIC" >> config.mak
2559
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2560
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2561
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2562
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2563
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2564
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2565
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2566
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2567
fi
2568
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2569
echo "EXTRALIBS=$extralibs" >> config.mak
2570

    
2571
echo "ARCH=$arch" >> config.mak
2572

    
2573
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2574
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2575
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2576
                                      $CONFIG_EXTRA      \
2577
                                      $DECODER_LIST      \
2578
                                      $ENCODER_LIST      \
2579
                                      $HWACCEL_LIST      \
2580
                                      $PARSER_LIST       \
2581
                                      $BSF_LIST          \
2582
                                      $DEMUXER_LIST      \
2583
                                      $MUXER_LIST        \
2584
                                      $FILTER_LIST       \
2585
                                      $PROTOCOL_LIST     \
2586
                                      $INDEV_LIST        \
2587
                                      $OUTDEV_LIST       \
2588

    
2589
echo "#define restrict $_restrict" >> $TMPH
2590

    
2591
if enabled small; then
2592
    echo "#define av_always_inline"  >> $TMPH
2593
fi
2594

    
2595

    
2596
# Apparently it's not possible to portably echo a backslash.
2597
enabled asmalign_pot &&
2598
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2599
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2600

    
2601
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2602

    
2603
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2604

    
2605
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2606
cmp -s $TMPH config.h &&
2607
    echo "config.h is unchanged" ||
2608
    mv -f $TMPH config.h
2609

    
2610
# build tree in object directory if source path is different from current one
2611
if enabled source_path_used; then
2612
    DIRS="\
2613
        doc               \
2614
        libavcodec        \
2615
        libavcodec/alpha  \
2616
        libavcodec/arm    \
2617
        libavcodec/bfin   \
2618
        libavcodec/mlib   \
2619
        libavcodec/ppc    \
2620
        libavcodec/sh4    \
2621
        libavcodec/sparc  \
2622
        libavcodec/x86    \
2623
        libavdevice       \
2624
        libavfilter       \
2625
        libavformat       \
2626
        libavutil         \
2627
        libpostproc       \
2628
        libswscale        \
2629
        libswscale/bfin   \
2630
        libswscale/mlib   \
2631
        libswscale/ppc    \
2632
        libswscale/sparc  \
2633
        libswscale/x86    \
2634
        tests             \
2635
        tools             \
2636
        "
2637
    FILES="\
2638
        Makefile             \
2639
        common.mak           \
2640
        subdir.mak           \
2641
        doc/texi2pod.pl      \
2642
        libavcodec/Makefile  \
2643
        libavdevice/Makefile \
2644
        libavfilter/Makefile \
2645
        libavformat/Makefile \
2646
        libavutil/Makefile   \
2647
        libpostproc/Makefile \
2648
        libswscale/Makefile  \
2649
        "
2650
    for dir in $DIRS ; do
2651
        mkdir -p $dir
2652
    done
2653
    for f in $FILES ; do
2654
        $ln_s "$source_path/$f" $f
2655
    done
2656
fi
2657

    
2658

    
2659
# build pkg-config files
2660

    
2661
pkgconfig_generate(){
2662
name=$1
2663
shortname=${name#lib}${build_suffix}
2664
comment=$2
2665
version=$3
2666
libs=$4
2667
requires=$5
2668
cat <<EOF > $name/$name.pc
2669
prefix=$prefix
2670
exec_prefix=\${prefix}
2671
libdir=$libdir
2672
includedir=$incdir
2673

    
2674
Name: $name
2675
Description: $comment
2676
Version: $version
2677
Requires: $(disabled shared && echo $requires)
2678
Requires.private: $(enabled shared && echo $requires)
2679
Conflicts:
2680
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2681
Libs.private: $(enabled shared && echo $libs)
2682
Cflags: -I\${includedir}
2683
EOF
2684
cat <<EOF > $name/$name-uninstalled.pc
2685
prefix=
2686
exec_prefix=
2687
libdir=\${pcfiledir}
2688
includedir=${source_path}
2689

    
2690
Name: $name
2691
Description: $comment
2692
Version: $version
2693
Requires: $requires
2694
Conflicts:
2695
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2696
Cflags: -I\${includedir}
2697
EOF
2698
}
2699

    
2700
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2701
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2702
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2703
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2704
enabled avfilter &&
2705
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2706
enabled postproc &&
2707
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2708
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"