Statistics
| Branch: | Revision:

ffmpeg / configure @ 28c9f069

History | View | Annotate | Download (77.8 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-indevs         disable input devices"
135
  echo "  --disable-outdevs        disable output devices"
136
  echo "  --disable-devices        disable all devices"
137
  echo "  --enable-filter=NAME     enable filter NAME"
138
  echo "  --disable-filter=NAME    disable filter NAME"
139
  echo "  --disable-filters        disable all filters"
140
  echo "  --list-decoders          show all available decoders"
141
  echo "  --list-encoders          show all available encoders"
142
  echo "  --list-hwaccels          show all available hardware accelerators"
143
  echo "  --list-muxers            show all available muxers"
144
  echo "  --list-demuxers          show all available demuxers"
145
  echo "  --list-parsers           show all available parsers"
146
  echo "  --list-protocols         show all available protocols"
147
  echo "  --list-bsfs              show all available bitstream filters"
148
  echo "  --list-indevs            show all available input devices"
149
  echo "  --list-outdevs           show all available output devices"
150
  echo "  --list-filters           show all available filters"
151
  echo
152
  echo "External library support:"
153
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
154
  echo "  --enable-bzlib           enable bzlib [autodetect]"
155
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
156
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
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 "  --host-cc=HOSTCC         use host C compiler HOSTCC"
194
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
195
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
196
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
197
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
198
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
199
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
200
  echo "  --extra-version=STRING   version string suffix []"
201
  echo "  --build-suffix=SUFFIX    library name suffix []"
202
  echo "  --arch=ARCH              select architecture [$arch]"
203
  echo "  --cpu=CPU                select the minimum required CPU (affects"
204
  echo "                           instruction selection, may crash on older CPUs)"
205
  echo "  --enable-powerpc-perf    enable performance report on PPC"
206
  echo "                           (requires enabling PMC)"
207
  echo "  --disable-altivec        disable AltiVec optimizations"
208
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
209
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
210
  echo "  --disable-mmx            disable MMX optimizations"
211
  echo "  --disable-mmx2           disable MMX2 optimizations"
212
  echo "  --disable-sse            disable SSE optimizations"
213
  echo "  --disable-ssse3          disable SSSE3 optimizations"
214
  echo "  --disable-armv5te        disable armv5te optimizations"
215
  echo "  --disable-armv6          disable armv6 optimizations"
216
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
217
  echo "  --disable-armvfp         disable ARM VFP optimizations"
218
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
219
  echo "  --disable-mmi            disable MMI optimizations"
220
  echo "  --disable-neon           disable neon optimizations"
221
  echo "  --disable-vis            disable VIS optimizations"
222
  echo "  --disable-yasm           disable use of yasm assembler"
223
  echo
224
  echo "Developer options (useful when working on FFmpeg itself):"
225
  echo "  --disable-debug          disable debugging symbols"
226
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
227
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
228
  echo "  --disable-optimizations  disable compiler optimizations"
229
  echo "  --enable-extra-warnings  enable more compiler warnings"
230
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
231
  echo ""
232
  echo "NOTE: Object files are built at the place where configure is launched."
233
  exit 0
234
}
235

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
514
add_cflags(){
515
    append CFLAGS "$@"
516
}
517

    
518
add_ldflags(){
519
    append LDFLAGS "$@"
520
}
521

    
522
add_extralibs(){
523
    append extralibs "$@"
524
}
525

    
526
check_cmd(){
527
    log "$@"
528
    "$@" >> $logfile 2>&1
529
}
530

    
531
check_cc(){
532
    log check_cc "$@"
533
    cat > $TMPC
534
    log_file $TMPC
535
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
536
}
537

    
538
check_cpp(){
539
    log check_cpp "$@"
540
    cat > $TMPC
541
    log_file $TMPC
542
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
543
}
544

    
545
check_as(){
546
    log check_as "$@"
547
    cat > $TMPC
548
    log_file $TMPC
549
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
550
}
551

    
552
check_asm(){
553
    log check_asm "$@"
554
    name="$1"
555
    asm="$2"
556
    shift 2
557
    check_as "$@" <<EOF && enable $name || disable $name
558
void foo(void){ __asm__ volatile($asm); }
559
EOF
560
}
561

    
562
check_yasm(){
563
    log check_yasm "$@"
564
    echo "$1" > $TMPS
565
    log_file $TMPS
566
    shift 1
567
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
568
}
569

    
570
check_ld(){
571
    log check_ld "$@"
572
    check_cc || return
573
    flags=''
574
    libs=''
575
    for f; do
576
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
577
    done
578
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
579
}
580

    
581
check_cflags(){
582
    log check_cflags "$@"
583
    check_cc "$@" <<EOF && add_cflags "$@"
584
int x;
585
EOF
586
}
587

    
588
check_ldflags(){
589
    log check_ldflags "$@"
590
    check_ld "$@" <<EOF && add_ldflags "$@"
591
int main(void){ return 0; }
592
EOF
593
}
594

    
595
check_header(){
596
    log check_header "$@"
597
    header=$1
598
    shift
599
    disable_safe $header
600
    check_cpp "$@" <<EOF && enable_safe $header
601
#include <$header>
602
int x;
603
EOF
604
}
605

    
606
check_func(){
607
    log check_func "$@"
608
    func=$1
609
    shift
610
    disable $func
611
    check_ld "$@" <<EOF && enable $func
612
extern int $func();
613
int main(void){ $func(); }
614
EOF
615
}
616

    
617
check_func_headers(){
618
    log check_func_headers "$@"
619
    headers=$1
620
    func=$2
621
    shift 2
622
    disable $func
623
    incs=""
624
    for hdr in $headers; do
625
        incs="$incs
626
#include <$hdr>"
627
    done
628
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
629
$incs
630
int main(int argc, char **argv){
631
    (void) $func;
632
    return 0;
633
}
634
EOF
635
}
636

    
637
check_cpp_condition(){
638
    log check_cpp_condition "$@"
639
    header=$1
640
    condition=$2
641
    check_cpp <<EOF
642
#include <$header>
643
#if !($condition)
644
#error "unsatisfied condition: $condition"
645
#endif
646
EOF
647
}
648

    
649
check_lib(){
650
    log check_lib "$@"
651
    header="$1"
652
    func="$2"
653
    shift 2
654
    temp_extralibs "$@"
655
    check_header $header && check_func $func && add_extralibs "$@"
656
    err=$?
657
    restore_flags
658
    return $err
659
}
660

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

    
673
check_exec(){
674
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
675
}
676

    
677
check_exec_crash(){
678
    code=$(cat)
679

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

    
686
    (check_exec "$@") >> $logfile 2>&1 <<EOF
687
#include <signal.h>
688
static void sighandler(int sig){
689
    raise(SIGTERM);
690
}
691
int main(void){
692
    signal(SIGILL, sighandler);
693
    signal(SIGFPE, sighandler);
694
    signal(SIGSEGV, sighandler);
695
#ifdef SIGBUS
696
    signal(SIGBUS, sighandler);
697
#endif
698
    { $code }
699
}
700
EOF
701
}
702

    
703
check_type(){
704
    log check_type "$@"
705
    headers=$1
706
    type=$2
707
    shift 2
708
    disable $type
709
    incs=""
710
    for hdr in $headers; do
711
        incs="$incs
712
#include <$hdr>"
713
    done
714
    check_cc "$@" <<EOF && enable $type
715
$incs
716
$type v;
717
EOF
718
}
719

    
720
require(){
721
    name="$1"
722
    header="$2"
723
    func="$3"
724
    shift 3
725
    check_lib $header $func "$@" || die "ERROR: $name not found"
726
}
727

    
728
require2(){
729
    name="$1"
730
    headers="$2"
731
    func="$3"
732
    shift 3
733
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
734
}
735

    
736
check_foo_config(){
737
    cfg=$1
738
    pkg=$2
739
    header=$3
740
    func=$4
741
    shift 4
742
    disable $cfg
743
    check_cmd ${pkg}-config --version
744
    err=$?
745
    if test "$err" = 0; then
746
        temp_cflags $(${pkg}-config --cflags)
747
        temp_extralibs $(${pkg}-config --libs)
748
        check_lib "$@" $header $func && enable $cfg
749
    fi
750
    return $err
751
}
752

    
753
apply(){
754
    file=$1
755
    shift
756
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
757
}
758

    
759
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
760
# system-dependent things.
761

    
762
COMPONENT_LIST="
763
    bsfs
764
    decoders
765
    demuxers
766
    encoders
767
    filters
768
    hwaccels
769
    indevs
770
    muxers
771
    outdevs
772
    parsers
773
    protocols
774
"
775

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

    
835
THREADS_LIST='
836
    beosthreads
837
    os2threads
838
    pthreads
839
    w32threads
840
'
841

    
842
ARCH_LIST='
843
    alpha
844
    arm
845
    bfin
846
    ia64
847
    m68k
848
    mips
849
    mips64
850
    parisc
851
    ppc
852
    ppc64
853
    s390
854
    sh4
855
    sparc
856
    sparc64
857
    x86
858
    x86_32
859
    x86_64
860
'
861

    
862
ARCH_EXT_LIST='
863
    altivec
864
    amd3dnow
865
    amd3dnowext
866
    armv5te
867
    armv6
868
    armv6t2
869
    armvfp
870
    iwmmxt
871
    mmi
872
    mmx
873
    mmx2
874
    neon
875
    ppc4xx
876
    sse
877
    ssse3
878
    vis
879
'
880

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

    
950
# options emitted with CONFIG_ prefix but not available on command line
951
CONFIG_EXTRA="
952
    gplv3
953
    lgplv3
954
"
955

    
956
CMDLINE_SELECT="
957
    $ARCH_EXT_LIST
958
    $CONFIG_LIST
959
    $THREADS_LIST
960
    cross_compile
961
    debug
962
    extra_warnings
963
    logging
964
    optimizations
965
    stripping
966
    yasm
967
"
968

    
969
PATHS_LIST='
970
    bindir
971
    datadir
972
    incdir
973
    libdir
974
    mandir
975
    prefix
976
    shlibdir
977
'
978

    
979
CMDLINE_SET="
980
    $PATHS_LIST
981
    arch
982
    as
983
    build_suffix
984
    cc
985
    cpu
986
    cross_prefix
987
    extra_version
988
    host_cc
989
    host_cflags
990
    host_ldflags
991
    host_libs
992
    host_os
993
    logfile
994
    nm
995
    source_path
996
    sysinclude
997
    sysroot
998
    target_exec
999
    target_os
1000
    target_path
1001
"
1002

    
1003
# code dependency declarations
1004

    
1005
# architecture extensions
1006
altivec_deps="ppc"
1007
amd3dnow_deps="mmx"
1008
amd3dnowext_deps="amd3dnow"
1009
armv5te_deps="arm"
1010
armv6_deps="arm"
1011
armv6t2_deps="arm"
1012
armvfp_deps="arm"
1013
iwmmxt_deps="arm"
1014
mmi_deps="mips"
1015
mmx_deps="x86"
1016
mmx2_deps="mmx"
1017
neon_deps="arm"
1018
ppc4xx_deps="ppc"
1019
sse_deps="mmx"
1020
ssse3_deps="sse"
1021
vis_deps="sparc"
1022

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

    
1112
# parsers
1113
h264_parser_select="golomb"
1114

    
1115
# external libraries
1116
libamr_nb_decoder_deps="libamr_nb"
1117
libamr_nb_encoder_deps="libamr_nb"
1118
libamr_wb_decoder_deps="libamr_wb"
1119
libamr_wb_encoder_deps="libamr_wb"
1120
libdirac_decoder_deps="libdirac !libschroedinger"
1121
libdirac_encoder_deps="libdirac"
1122
libfaac_encoder_deps="libfaac"
1123
libfaad_decoder_deps="libfaad"
1124
libfaadbin_decoder_extralibs='$ldl'
1125
libgsm_decoder_deps="libgsm"
1126
libgsm_encoder_deps="libgsm"
1127
libgsm_ms_decoder_deps="libgsm"
1128
libgsm_ms_encoder_deps="libgsm"
1129
libmp3lame_encoder_deps="libmp3lame"
1130
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1131
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1132
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1133
libopenjpeg_decoder_deps="libopenjpeg"
1134
libschroedinger_decoder_deps="libschroedinger"
1135
libschroedinger_encoder_deps="libschroedinger"
1136
libspeex_decoder_deps="libspeex"
1137
libtheora_encoder_deps="libtheora"
1138
libvorbis_encoder_deps="libvorbis"
1139
libx264_encoder_deps="libx264"
1140
libxvid_encoder_deps="libxvid"
1141

    
1142
# demuxers / muxers
1143
ac3_demuxer_deps="ac3_parser"
1144
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1145
alsa_demuxer_extralibs="-lasound"
1146
alsa_muxer_deps="alsa_asoundlib_h"
1147
alsa_muxer_extralibs="-lasound"
1148
audio_beos_demuxer_deps="audio_beos"
1149
audio_beos_demuxer_extralibs="-lmedia -lbe"
1150
audio_beos_muxer_deps="audio_beos"
1151
audio_beos_muxer_extralibs="-lmedia -lbe"
1152
avisynth_demuxer_deps="avisynth"
1153
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1154
dirac_demuxer_deps="dirac_parser"
1155
dv1394_demuxer_deps="dv1394 dv_demuxer"
1156
jack_demuxer_deps="jack_jack_h"
1157
jack_demuxer_extralibs="-ljack"
1158
libdc1394_demuxer_deps="libdc1394"
1159
libnut_demuxer_deps="libnut"
1160
libnut_muxer_deps="libnut"
1161
matroska_demuxer_suggest="zlib bzlib"
1162
mov_demuxer_suggest="zlib"
1163
mp3_demuxer_deps="mpegaudio_parser"
1164
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1165
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1166
redir_demuxer_deps="network"
1167
rtp_muxer_deps="network rtp_protocol"
1168
rtsp_demuxer_deps="sdp_demuxer"
1169
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1170
v4l_demuxer_deps="linux_videodev_h"
1171
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1172
vfwcap_demuxer_deps="capCreateCaptureWindow"
1173
vfwcap_demuxer_extralibs="-lvfw32"
1174
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1175
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1176

    
1177
# protocols
1178
gopher_protocol_deps="network"
1179
http_protocol_deps="network"
1180
rtp_protocol_deps="udp_protocol"
1181
tcp_protocol_deps="network"
1182
udp_protocol_deps="network"
1183

    
1184
# filters
1185
movie_filter_deps="avfilter_lavf"
1186

    
1187
# programs
1188
ffplay_deps="sdl"
1189
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1190
ffserver_extralibs='$ldl'
1191

    
1192

    
1193
# default parameters
1194

    
1195
logfile="config.err"
1196

    
1197
# installation paths
1198
prefix_default="/usr/local"
1199
bindir_default='${prefix}/bin'
1200
datadir_default='${prefix}/share/ffmpeg'
1201
incdir_default='${prefix}/include'
1202
libdir_default='${prefix}/lib'
1203
mandir_default='${prefix}/share/man'
1204
shlibdir_default="$libdir_default"
1205

    
1206
# toolchain
1207
ar="ar"
1208
cc_default="gcc"
1209
host_cc_default="gcc"
1210
ln_s="ln -sf"
1211
nm_default="nm"
1212
objformat="elf"
1213
ranlib="ranlib"
1214
strip="strip"
1215
yasmexe="yasm"
1216

    
1217
# machine
1218
arch=$(uname -m)
1219
cpu="generic"
1220

    
1221
# OS
1222
target_os=$(tolower $(uname -s))
1223
host_os=$target_os
1224

    
1225
# configurable options
1226
enable debug
1227
enable fastdiv
1228
enable ffmpeg
1229
enable ffplay
1230
enable ffserver
1231
enable ipv6
1232
enable mpegaudio_hp
1233
enable network
1234
enable optimizations
1235
enable protocols
1236
enable static
1237
enable stripping
1238
enable swscale_alpha
1239

    
1240
# build settings
1241
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1242
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1243
FFSERVERLDFLAGS=-Wl,-E
1244
LIBPREF="lib"
1245
LIBSUF=".a"
1246
FULLNAME='$(NAME)$(BUILDSUF)'
1247
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1248
SLIBPREF="lib"
1249
SLIBSUF=".so"
1250
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1251
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1252
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1253
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1254

    
1255
host_cflags='-O3 -g -Wall'
1256
host_libs='-lm'
1257

    
1258
target_path='.'
1259

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

    
1264
# find source path
1265
source_path="$(dirname "$0")"
1266
enable source_path_used
1267
if test -z "$source_path" -o "$source_path" = "." ; then
1268
    source_path="$(pwd)"
1269
    disable source_path_used
1270
else
1271
    source_path="$(cd "$source_path"; pwd)"
1272
    echo "$source_path" | grep -q '[[:blank:]]' &&
1273
        die "Out of tree builds are impossible with whitespace in source path."
1274
    test -e "$source_path/config.h" &&
1275
        die "Out of tree builds are impossible with config.h in source dir."
1276
fi
1277

    
1278
for v in "$@"; do
1279
    r=${v#*=}
1280
    l=${v%"$r"}
1281
    r=$(sh_quote "$r")
1282
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1283
done
1284

    
1285
find_things(){
1286
    thing=$1
1287
    pattern=$2
1288
    file=$source_path/$3
1289
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1290
}
1291

    
1292
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1293
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1294
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1295
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1296
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1297
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1298
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1299
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1300
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1301
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1302
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1303

    
1304
enable $ARCH_EXT_LIST \
1305
       $DECODER_LIST \
1306
       $ENCODER_LIST \
1307
       $HWACCEL_LIST \
1308
       $PARSER_LIST \
1309
       $BSF_LIST \
1310
       $DEMUXER_LIST \
1311
       $MUXER_LIST \
1312
       $FILTER_LIST \
1313
       $PROTOCOL_LIST \
1314
       $INDEV_LIST \
1315
       $OUTDEV_LIST \
1316

    
1317
die_unknown(){
1318
    echo "Unknown option \"$1\"."
1319
    echo "See $0 --help for available options."
1320
    exit 1
1321
}
1322

    
1323
show_list() {
1324
    suffix=_$1
1325
    shift
1326
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1327
    exit 0
1328
}
1329

    
1330
for opt do
1331
    optval="${opt#*=}"
1332
    case "$opt" in
1333
    --extra-cflags=*) add_cflags $optval
1334
    ;;
1335
    --extra-ldflags=*) add_ldflags $optval
1336
    ;;
1337
    --extra-libs=*) add_extralibs $optval
1338
    ;;
1339
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1340
    ;;
1341
    --enable-debug=*) debuglevel="$optval"
1342
    ;;
1343
    --enable-*=*|--disable-*=*)
1344
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1345
    case "$thing" in
1346
        encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1347
        *) die_unknown "$opt" ;;
1348
    esac
1349
    ;;
1350
    --enable-?*|--disable-?*)
1351
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1352
    if is_in $option $COMPONENT_LIST; then
1353
        eval $action \$$(toupper ${option%s})_LIST
1354
    elif is_in $option $CMDLINE_SELECT; then
1355
        $action $option
1356
    else
1357
        die_unknown $opt
1358
    fi
1359
    ;;
1360
    --list-*)
1361
        NAME="${opt#--list-}"
1362
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1363
        NAME=${NAME%s}
1364
        eval show_list $NAME \$$(toupper $NAME)_LIST
1365
    ;;
1366
    --help|-h) show_help
1367
    ;;
1368
    *)
1369
    optname="${opt%%=*}"
1370
    optname="${optname#--}"
1371
    optname=$(echo "$optname" | sed 's/-/_/g')
1372
    is_in $optname $CMDLINE_SET || die_unknown $opt
1373
    eval $optname='$optval'
1374
    ;;
1375
    esac
1376
done
1377

    
1378
disabled logging && logfile=/dev/null
1379

    
1380
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1381
set >> $logfile
1382

    
1383
test -n "$cross_prefix" && enable cross_compile
1384

    
1385
ar="${cross_prefix}${ar}"
1386
cc_default="${cross_prefix}${cc_default}"
1387
nm_default="${cross_prefix}${nm_default}"
1388
ranlib="${cross_prefix}${ranlib}"
1389
strip="${cross_prefix}${strip}"
1390

    
1391
sysinclude_default="${sysroot}/usr/include"
1392

    
1393
set_default cc nm sysinclude
1394
as_default=$cc
1395
enabled cross_compile || host_cc_default=$cc
1396
set_default host_cc
1397

    
1398
exesuf() {
1399
    case $1 in
1400
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1401
    esac
1402
}
1403

    
1404
EXESUF=$(exesuf $target_os)
1405
HOSTEXESUF=$(exesuf $host_os)
1406

    
1407
# set temporary file name
1408
: ${TMPDIR:=$TEMPDIR}
1409
: ${TMPDIR:=$TMP}
1410
: ${TMPDIR:=/tmp}
1411

    
1412
if ! check_cmd type mktemp; then
1413
    # simple replacement for missing mktemp
1414
    # NOT SAFE FOR GENERAL USE
1415
    mktemp(){
1416
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1417
    }
1418
fi
1419

    
1420
tmpfile(){
1421
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1422
        (set -C; exec > $tmp) 2>/dev/null ||
1423
        die "Unable to create temoporary file in $TMPDIR."
1424
    append TMPFILES $tmp
1425
    eval $1=$tmp
1426
}
1427

    
1428
trap 'rm -f -- $TMPFILES' EXIT
1429
trap exit HUP INT TERM
1430

    
1431
tmpfile TMPC  .c
1432
tmpfile TMPE  $EXESUF
1433
tmpfile TMPH  .h
1434
tmpfile TMPO  .o
1435
tmpfile TMPS  .S
1436
tmpfile TMPSH .sh
1437

    
1438
unset -f mktemp
1439

    
1440
# make sure we can execute files in $TMPDIR
1441
cat > $TMPSH 2>> $logfile <<EOF
1442
#! /bin/sh
1443
EOF
1444
chmod +x $TMPSH >> $logfile 2>&1
1445
if ! $TMPSH >> $logfile 2>&1; then
1446
    cat <<EOF
1447
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1448
variable to another directory and make sure that it is not mounted noexec.
1449
EOF
1450
    die "Sanity test failed."
1451
fi
1452

    
1453
if   $cc --version 2>/dev/null | grep -qi gcc; then
1454
    cc_type=gcc
1455
elif $cc --version 2>/dev/null | grep -q Intel; then
1456
    cc_type=icc
1457
elif $cc -v 2>&1 | grep -q xlc; then
1458
    cc_type=xlc
1459
elif $cc -V 2>/dev/null | grep -q Compaq; then
1460
    cc_type=ccc
1461
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1462
    debuglevel=3
1463
    add_ldflags -Wl,-z,now # calls to libots crash without this
1464
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1465
    test -d "$sysroot" || die "No valid sysroot specified."
1466
    cc_type=armcc
1467
    armcc_conf="$PWD/armcc.conf"
1468
    $cc --arm_linux_configure                 \
1469
        --arm_linux_config_file="$armcc_conf" \
1470
        --configure_sysroot="$sysroot"        \
1471
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1472
        die "Error creating armcc configuration file."
1473
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1474
    as_default="${cross_prefix}gcc"
1475
fi
1476

    
1477
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1478

    
1479
set_default as
1480

    
1481
if test -n "$sysroot"; then
1482
    case "$cc_type" in
1483
        gcc)
1484
            add_cflags  --sysroot="$sysroot"
1485
            add_ldflags --sysroot="$sysroot"
1486
        ;;
1487
    esac
1488
fi
1489

    
1490
# compiler sanity check
1491
check_exec <<EOF
1492
int main(void){ return 0; }
1493
EOF
1494
if test "$?" != 0; then
1495
    echo "$cc is unable to create an executable file."
1496
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1497
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1498
        echo "Only do this if you know what cross compiling means."
1499
    fi
1500
    die "C compiler test failed."
1501
fi
1502

    
1503
check_cflags -std=c99
1504
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1505
#include <stdlib.h>
1506
EOF
1507
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1508
#include <stdlib.h>
1509
EOF
1510

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

    
1591
enable $arch $subarch
1592

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

    
1740
    *)
1741
        die "Unknown OS '$target_os'."
1742
        ;;
1743
esac
1744

    
1745
set_default $PATHS_LIST
1746

    
1747
add_extralibs $osextralibs
1748

    
1749
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1750
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1751

    
1752
# we need to build at least one lib type
1753
if ! enabled_any static shared; then
1754
    cat <<EOF
1755
At least one library type must be built.
1756
Specify --enable-static to build the static libraries or --enable-shared to
1757
build the shared libraries as well. To only build the shared libraries specify
1758
--disable-static in addition to --enable-shared.
1759
EOF
1760
    exit 1;
1761
fi
1762

    
1763
disabled static && LIBNAME=""
1764

    
1765
if enabled_any libfaad libfaadbin ; then
1766
    if check_header faad.h; then
1767
        check_cc <<EOF
1768
#include <faad.h>
1769
#ifndef FAAD2_VERSION
1770
ok faad1
1771
#endif
1772
int main(void) { return 0; }
1773
EOF
1774
        test $? = 0 && enable libfaad2
1775
    else
1776
        die "FAAD test failed."
1777
    fi
1778
fi
1779

    
1780

    
1781
die_license_disabled() {
1782
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1783
}
1784

    
1785
die_license_disabled gpl libfaad2
1786
die_license_disabled gpl libx264
1787
die_license_disabled gpl libxvid
1788
die_license_disabled gpl postproc
1789
die_license_disabled gpl x11grab
1790

    
1791
die_license_disabled nonfree libamr_nb
1792
die_license_disabled nonfree libamr_wb
1793
die_license_disabled nonfree libfaac
1794

    
1795
die_license_disabled version3 libopencore_amrnb
1796
die_license_disabled version3 libopencore_amrwb
1797

    
1798
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1799

    
1800
check_deps $ARCH_EXT_LIST
1801

    
1802
test -z "$need_memalign" && need_memalign="$mmx"
1803

    
1804
#Darwin CC versions
1805
if test $target_os = darwin; then
1806
    if enabled xlc; then
1807
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1808
    else
1809
        add_cflags -pipe
1810
        check_cflags -force_cpusubtype_ALL
1811
        check_cflags -Wno-sign-compare
1812
        enabled shared || check_cflags -mdynamic-no-pic
1813
    fi
1814
fi
1815

    
1816
disabled optimizations || check_cflags -fomit-frame-pointer
1817

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

    
1902
check_cc <<EOF || die "Symbol mangling check failed."
1903
int ff_extern;
1904
EOF
1905
sym=$($nm -P -g $TMPO | grep ff_extern)
1906
extern_prefix=${sym%%ff_extern*}
1907

    
1908
check_cc <<EOF && enable inline_asm
1909
void foo(void) { __asm__ volatile ("" ::); }
1910
EOF
1911

    
1912
if enabled x86; then
1913
    # check whether EBP is available on x86
1914
    # As 'i' is stored on the stack, this program will crash
1915
    # if the base pointer is used to access it because the
1916
    # base pointer is cleared in the inline assembly code.
1917
    check_exec_crash <<EOF && enable ebp_available
1918
    volatile int i=0;
1919
    __asm__ volatile (
1920
        "xorl %%ebp, %%ebp"
1921
    ::: "%ebp");
1922
    return i;
1923
EOF
1924

    
1925
    # check wether EBX is available on x86
1926
    check_asm ebx_available '"":::"%ebx"'
1927

    
1928
    # check whether more than 10 operands are supported
1929
    check_cc <<EOF && enable ten_operands
1930
int main(void) {
1931
    int x=0;
1932
    __asm__ volatile(
1933
        ""
1934
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1935
    );
1936
    return 0;
1937
}
1938
EOF
1939

    
1940
    # check whether binutils is new enough to compile SSSE3/MMX2
1941
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1942
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1943

    
1944
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1945

    
1946
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1947
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1948
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1949
    case "$objformat" in
1950
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1951
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1952
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1953
    esac
1954
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1955
fi
1956

    
1957
# check for assembler specific support
1958

    
1959
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1960

    
1961
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1962
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1963
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1964

    
1965
# check for SIMD availability
1966

    
1967
# AltiVec flags: The FSF version of GCC differs from the Apple version
1968
if enabled altivec; then
1969
    check_cflags -maltivec -mabi=altivec &&
1970
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1971
        check_cflags -faltivec
1972

    
1973
    # check if our compiler supports Motorola AltiVec C API
1974
    check_cc <<EOF || disable altivec
1975
$inc_altivec_h
1976
int main(void) {
1977
    vector signed int v1, v2, v3;
1978
    v1 = vec_add(v2,v3);
1979
    return 0;
1980
}
1981
EOF
1982

    
1983
    # check if our compiler supports braces for vector declarations
1984
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1985
$inc_altivec_h
1986
int main (void) { (vector int) {1}; return 0; }
1987
EOF
1988
fi
1989

    
1990
# We have to check if pld is a nop and disable it.
1991
enabled arm     && check_asm pld     '"pld [r0]"'
1992
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1993
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1994
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1995
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1996
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1997
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1998
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1999
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2000

    
2001
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2002

    
2003
# ---
2004
# big/little-endian test
2005
check_cc <<EOF || die "endian test failed"
2006
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2007
EOF
2008
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2009

    
2010
# ---
2011
# check availability of some header files
2012

    
2013
if check_func dlopen; then
2014
    ldl=
2015
elif check_func dlopen -ldl; then
2016
    ldl=-ldl
2017
fi
2018

    
2019
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2020
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2021

    
2022
check_func  fork
2023
check_func  gethrtime
2024
check_func  getrusage
2025
check_func  inet_aton $network_extralibs
2026
check_func  memalign
2027
check_func  mkstemp
2028
check_func  posix_memalign
2029
check_func_headers io.h setmode
2030
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2031
check_func_headers windows.h GetProcessTimes
2032
check_func_headers windows.h VirtualAlloc
2033

    
2034
check_header conio.h
2035
check_header dlfcn.h
2036
check_header malloc.h
2037
check_header poll.h
2038
check_header sys/mman.h
2039
check_header sys/resource.h
2040
check_header sys/select.h
2041
check_header termios.h
2042
check_header vdpau/vdpau.h
2043
check_header vdpau/vdpau_x11.h
2044
check_header X11/extensions/XvMClib.h
2045

    
2046
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2047
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2048
fi
2049

    
2050
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2051
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2052

    
2053
# check for some common methods of building with pthread support
2054
# do this before the optional library checks as some of them require pthreads
2055
if enabled pthreads; then
2056
    if check_func pthread_create; then
2057
        :
2058
    elif check_func pthread_create -pthread; then
2059
        add_cflags -pthread
2060
        add_extralibs -pthread
2061
    elif check_func pthread_create -pthreads; then
2062
        add_cflags -pthreads
2063
        add_extralibs -pthreads
2064
    elif check_func pthread_create -lpthreadGC2; then
2065
        add_extralibs -lpthreadGC2
2066
    elif ! check_lib pthread.h pthread_create -lpthread; then
2067
        die "ERROR: can't find pthreads library"
2068
    fi
2069
fi
2070

    
2071
for thread in $THREADS_LIST; do
2072
    if enabled $thread; then
2073
        test -n "$thread_type" &&
2074
            die "ERROR: Only one thread type must be selected." ||
2075
            thread_type="$thread"
2076
    fi
2077
done
2078

    
2079
check_lib math.h sin -lm
2080
check_lib va/va.h vaInitialize -lva
2081

    
2082
# test for C99 functions in math.h
2083
for func in llrint lrint lrintf round roundf truncf; do
2084
    check_exec <<EOF && enable $func || disable $func
2085
#include <math.h>
2086
int main(void) { return ($func(3.999f) > 0)?0:1; }
2087
EOF
2088
done
2089

    
2090
# these are off by default, so fail if requested and not available
2091
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2092
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2093
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2094
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2095
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2096
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2097
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2098
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2099
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2100
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2101
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2102
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2103
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2104
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2105
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2106
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2107
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2108
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2109
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2110
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2111
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2112
                        die "ERROR: libx264 version must be >= 0.65."; }
2113
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2114
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2115

    
2116
# libdc1394 check
2117
if enabled libdc1394; then
2118
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2119
        enable libdc1394_2; } ||
2120
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2121
        enable libdc1394_1; } ||
2122
    die "ERROR: No version of libdc1394 found "
2123
fi
2124

    
2125

    
2126
_restrict=
2127
for restrict_keyword in restrict __restrict__ __restrict; do
2128
    check_cc <<EOF && _restrict=$restrict_keyword && break
2129
void foo(char * $restrict_keyword p);
2130
EOF
2131
done
2132

    
2133
##########################################
2134
# SDL check
2135

    
2136
disable sdl_too_old
2137
disable sdl
2138
SDL_CONFIG="${cross_prefix}sdl-config"
2139
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2140
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2141
    temp_cflags $sdl_cflags
2142
    temp_extralibs $("${SDL_CONFIG}" --libs)
2143
    if check_lib2 SDL.h SDL_Init; then
2144
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2145
        if test "$_sdlversion" -lt 121 ; then
2146
            enable sdl_too_old
2147
        else
2148
            enable sdl
2149
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2150
#include <SDL.h>
2151
int main(int argc, char **argv){
2152
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2153
    int w = vi->current_w;
2154
    return 0;
2155
}
2156
EOF
2157
        fi
2158
    fi
2159
    restore_flags
2160
fi
2161

    
2162
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2163

    
2164
##########################################
2165
# Network check
2166

    
2167
if enabled network; then
2168
    check_type "sys/types.h sys/socket.h" socklen_t
2169
    # Prefer arpa/inet.h over winsock2
2170
    if check_header arpa/inet.h ; then
2171
        check_func closesocket
2172
    elif check_header winsock2.h ; then
2173
        network_extralibs="-lws2_32"
2174
        check_type ws2tcpip.h socklen_t
2175
        check_func_headers winsock2.h closesocket
2176
    else
2177
        disable network
2178
    fi
2179
fi
2180

    
2181
##########################################
2182
# IPv6 check
2183

    
2184
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2185
#include <sys/types.h>
2186
#include <sys/socket.h>
2187
#include <netinet/in.h>
2188
#include <netdb.h>
2189
int main(void) {
2190
    struct sockaddr_storage saddr;
2191
    struct ipv6_mreq mreq6;
2192
    getaddrinfo(0,0,0,0);
2193
    getnameinfo(0,0,0,0,0,0,0);
2194
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2195
}
2196
EOF
2197

    
2198
check_header linux/videodev.h
2199
check_header linux/videodev2.h
2200
check_header sys/videoio.h
2201

    
2202
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2203

    
2204
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2205
{ check_header dev/bktr/ioctl_meteor.h &&
2206
  check_header dev/bktr/ioctl_bt848.h; } ||
2207
{ check_header machine/ioctl_meteor.h &&
2208
  check_header machine/ioctl_bt848.h; } ||
2209
{ check_header dev/video/meteor/ioctl_meteor.h &&
2210
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2211
check_header dev/ic/bt8xx.h
2212

    
2213
check_header sys/soundcard.h
2214
check_header soundcard.h
2215

    
2216
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2217

    
2218
check_lib2 jack/jack.h jack_client_open -ljack
2219

    
2220
# deal with the X11 frame grabber
2221
enabled x11grab                         &&
2222
check_header X11/Xlib.h                 &&
2223
check_header X11/extensions/XShm.h      &&
2224
check_func XOpenDisplay -lX11           &&
2225
check_func XShmCreateImage -lX11 -lXext
2226

    
2227
enabled debug && add_cflags -g"$debuglevel"
2228

    
2229
# add some useful compiler flags if supported
2230
check_cflags -Wdeclaration-after-statement
2231
check_cflags -Wall
2232
check_cflags -Wno-switch
2233
check_cflags -Wdisabled-optimization
2234
check_cflags -Wpointer-arith
2235
check_cflags -Wredundant-decls
2236
check_cflags -Wno-pointer-sign
2237
check_cflags -Wcast-qual
2238
check_cflags -Wwrite-strings
2239
check_cflags -Wtype-limits
2240
check_cflags -Wundef
2241
enabled extra_warnings && check_cflags -Winline
2242

    
2243
# add some linker flags
2244
check_ldflags -Wl,--warn-common
2245
check_ldflags -Wl,--as-needed
2246
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'
2247
check_ldflags -Wl,-Bsymbolic
2248

    
2249
if enabled small; then
2250
    check_cflags -Os            # not all compilers support -Os
2251
    optimizations="small"
2252
elif enabled optimizations; then
2253
    if enabled xlc; then
2254
        add_cflags  -O5
2255
        add_ldflags -O5
2256
    elif enabled ccc; then
2257
        add_cflags -fast
2258
    else
2259
        add_cflags -O3
2260
    fi
2261
fi
2262
check_cflags -fno-math-errno
2263
check_cflags -fno-signed-zeros
2264

    
2265
# add some flags for Intel C Compiler
2266
if enabled icc; then
2267
    # Just warnings, no remarks
2268
    check_cflags -w1
2269
    # -wd: Disable following warnings
2270
    # 144, 167, 556: -Wno-pointer-sign
2271
    # 10006: ignoring unknown option -fno-signed-zeros
2272
    # 10156: ignoring option '-W'; no argument required
2273
    check_cflags -wd144,167,556,10006,10156
2274
    # 11030: Warning unknown option --as-needed
2275
    # 10156: ignoring option '-export'; no argument required
2276
    check_ldflags -wd10156,11030
2277
    # Allow to compile with optimizations
2278
    check_ldflags -march=$cpu
2279
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2280
    enable ebp_available
2281
elif enabled ccc; then
2282
    # disable some annoying warnings
2283
    add_cflags -msg_disable cvtu32to64
2284
    add_cflags -msg_disable embedcomment
2285
    add_cflags -msg_disable needconstext
2286
    add_cflags -msg_disable nomainieee
2287
    add_cflags -msg_disable ptrmismatch1
2288
    add_cflags -msg_disable unreachcode
2289
fi
2290

    
2291
# PIC flags for shared library objects where they are needed
2292
if enabled shared; then
2293
    # LIBOBJFLAGS may have already been set in the OS configuration
2294
    if test -z "$LIBOBJFLAGS" ; then
2295
        case "${subarch-$arch}" in
2296
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2297
        esac
2298
    fi
2299
fi
2300

    
2301
if enabled gprof; then
2302
    add_cflags  -p
2303
    add_ldflags -p
2304
fi
2305

    
2306
# Find out if the .align argument is a power of two or not.
2307
check_asm asmalign_pot '".align 3"'
2308

    
2309
enabled_any $DECODER_LIST      && enable decoders
2310
enabled_any $ENCODER_LIST      && enable encoders
2311
enabled_any $HWACCEL_LIST      && enable hwaccels
2312
enabled_any $BSF_LIST          && enable bsfs
2313
enabled_any $DEMUXER_LIST      && enable demuxers
2314
enabled_any $MUXER_LIST        && enable muxers
2315
enabled_any $FILTER_LIST       && enable filters
2316
enabled_any $INDEV_LIST        && enable demuxers
2317
enabled_any $OUTDEV_LIST       && enable muxers
2318
enabled_any $PROTOCOL_LIST     && enable protocols
2319

    
2320
enabled_any $THREADS_LIST      && enable threads
2321

    
2322
check_deps $CONFIG_LIST       \
2323
           $CONFIG_EXTRA      \
2324
           $HAVE_LIST         \
2325
           $DECODER_LIST      \
2326
           $ENCODER_LIST      \
2327
           $HWACCEL_LIST      \
2328
           $PARSER_LIST       \
2329
           $BSF_LIST          \
2330
           $DEMUXER_LIST      \
2331
           $MUXER_LIST        \
2332
           $FILTER_LIST       \
2333
           $INDEV_LIST        \
2334
           $OUTDEV_LIST       \
2335
           $PROTOCOL_LIST     \
2336

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

    
2427
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2428
    echo "Enabled ${type}s:"
2429
    eval list=\$$(toupper $type)_LIST
2430
    for part in $list; do
2431
        enabled $part && echo ${part%_*}
2432
    done | sort | pr -3 -t
2433
    echo
2434
done
2435

    
2436
license="LGPL version 2.1 or later"
2437
if enabled nonfree; then
2438
    license="nonfree and unredistributable"
2439
elif enabled gplv3; then
2440
    license="GPL version 3 or later"
2441
elif enabled lgplv3; then
2442
    license="LGPL version 3 or later"
2443
elif enabled gpl; then
2444
    license="GPL version 2 or later"
2445
fi
2446

    
2447
echo "License: $license"
2448

    
2449
echo "Creating config.mak and config.h..."
2450

    
2451
echo "# Automatically generated by configure - do not modify!" > config.mak
2452
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2453
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2454
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2455
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2456
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2457

    
2458
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2459
echo "prefix=$prefix" >> config.mak
2460
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2461
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2462
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2463
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2464
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2465
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2466
echo "SRC_PATH=\"$source_path\"" >> config.mak
2467
echo "SRC_PATH_BARE=$source_path" >> config.mak
2468
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2469
echo "CC=$cc" >> config.mak
2470
echo "AS=$as" >> config.mak
2471
echo "YASM=$yasmexe" >> config.mak
2472
echo "AR=$ar" >> config.mak
2473
echo "RANLIB=$ranlib" >> config.mak
2474
echo "LN_S=$ln_s" >> config.mak
2475
enabled stripping &&
2476
    echo "STRIP=$strip" >> config.mak ||
2477
    echo "STRIP=echo ignoring strip" >> config.mak
2478

    
2479
echo "OPTFLAGS=$CFLAGS" >> config.mak
2480
echo "LDFLAGS=$LDFLAGS" >> config.mak
2481
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2482
echo "SHFLAGS=$SHFLAGS" >> config.mak
2483
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2484
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2485
echo "BUILD_STATIC=$static" >> config.mak
2486
echo "BUILDSUF=$build_suffix" >> config.mak
2487
echo "FULLNAME=$FULLNAME" >> config.mak
2488
echo "LIBPREF=$LIBPREF" >> config.mak
2489
echo "LIBSUF=$LIBSUF" >> config.mak
2490
echo "LIBNAME=$LIBNAME" >> config.mak
2491
echo "SLIBPREF=$SLIBPREF" >> config.mak
2492
echo "SLIBSUF=$SLIBSUF" >> config.mak
2493
echo "EXESUF=$EXESUF" >> config.mak
2494
echo "EXTRA_VERSION=$extra_version" >> config.mak
2495
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2496
echo "HOSTCC=$host_cc" >> config.mak
2497
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2498
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2499
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2500
echo "HOSTLIBS=$host_libs" >> config.mak
2501
echo "TARGET_EXEC=$target_exec" >> config.mak
2502
echo "TARGET_PATH=$target_path" >> config.mak
2503

    
2504
if enabled bigendian; then
2505
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2506
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2507
fi
2508

    
2509
if enabled sdl; then
2510
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2511
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2512
fi
2513
if enabled texi2html; then
2514
    echo "BUILD_DOC=yes" >> config.mak
2515
fi
2516

    
2517
get_version(){
2518
    name=$1
2519
    file=$source_path/$2
2520
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2521
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2522
    lcname=$(tolower $name)
2523
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2524
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2525
}
2526

    
2527
get_version LIBSWSCALE  libswscale/swscale.h
2528
get_version LIBPOSTPROC libpostproc/postprocess.h
2529
get_version LIBAVCODEC  libavcodec/avcodec.h
2530
get_version LIBAVDEVICE libavdevice/avdevice.h
2531
get_version LIBAVFORMAT libavformat/avformat.h
2532
get_version LIBAVUTIL   libavutil/avutil.h
2533
get_version LIBAVFILTER libavfilter/avfilter.h
2534

    
2535
if enabled shared; then
2536
    echo "BUILD_SHARED=yes" >> config.mak
2537
    echo "PIC=-fPIC -DPIC" >> config.mak
2538
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2539
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2540
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2541
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2542
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2543
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2544
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2545
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2546
fi
2547
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2548
echo "EXTRALIBS=$extralibs" >> config.mak
2549

    
2550
echo "ARCH=$arch" >> config.mak
2551

    
2552
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2553
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2554
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2555
                                      $CONFIG_EXTRA      \
2556
                                      $DECODER_LIST      \
2557
                                      $ENCODER_LIST      \
2558
                                      $HWACCEL_LIST      \
2559
                                      $PARSER_LIST       \
2560
                                      $BSF_LIST          \
2561
                                      $DEMUXER_LIST      \
2562
                                      $MUXER_LIST        \
2563
                                      $FILTER_LIST       \
2564
                                      $PROTOCOL_LIST     \
2565
                                      $INDEV_LIST        \
2566
                                      $OUTDEV_LIST       \
2567

    
2568
echo "#define restrict $_restrict" >> $TMPH
2569

    
2570
if enabled small; then
2571
    echo "#define av_always_inline"  >> $TMPH
2572
fi
2573

    
2574

    
2575
# Apparently it's not possible to portably echo a backslash.
2576
enabled asmalign_pot &&
2577
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2578
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2579

    
2580
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2581

    
2582
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2583

    
2584
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2585
cmp -s $TMPH config.h &&
2586
    echo "config.h is unchanged" ||
2587
    mv -f $TMPH config.h
2588

    
2589
# build tree in object directory if source path is different from current one
2590
if enabled source_path_used; then
2591
    DIRS="\
2592
        doc               \
2593
        libavcodec        \
2594
        libavcodec/alpha  \
2595
        libavcodec/arm    \
2596
        libavcodec/bfin   \
2597
        libavcodec/mlib   \
2598
        libavcodec/ppc    \
2599
        libavcodec/sh4    \
2600
        libavcodec/sparc  \
2601
        libavcodec/x86    \
2602
        libavdevice       \
2603
        libavfilter       \
2604
        libavformat       \
2605
        libavutil         \
2606
        libpostproc       \
2607
        libswscale        \
2608
        libswscale/bfin   \
2609
        libswscale/mlib   \
2610
        libswscale/ppc    \
2611
        libswscale/sparc  \
2612
        libswscale/x86    \
2613
        tests             \
2614
        tools             \
2615
        "
2616
    FILES="\
2617
        Makefile             \
2618
        common.mak           \
2619
        subdir.mak           \
2620
        doc/texi2pod.pl      \
2621
        libavcodec/Makefile  \
2622
        libavdevice/Makefile \
2623
        libavfilter/Makefile \
2624
        libavformat/Makefile \
2625
        libavutil/Makefile   \
2626
        libpostproc/Makefile \
2627
        libswscale/Makefile  \
2628
        "
2629
    for dir in $DIRS ; do
2630
        mkdir -p $dir
2631
    done
2632
    for f in $FILES ; do
2633
        $ln_s "$source_path/$f" $f
2634
    done
2635
fi
2636

    
2637

    
2638
# build pkg-config files
2639

    
2640
pkgconfig_generate(){
2641
name=$1
2642
shortname=${name#lib}${build_suffix}
2643
comment=$2
2644
version=$3
2645
libs=$4
2646
requires=$5
2647
cat <<EOF > $name/$name.pc
2648
prefix=$prefix
2649
exec_prefix=\${prefix}
2650
libdir=$libdir
2651
includedir=$incdir
2652

    
2653
Name: $name
2654
Description: $comment
2655
Version: $version
2656
Requires: $(disabled shared && echo $requires)
2657
Requires.private: $(enabled shared && echo $requires)
2658
Conflicts:
2659
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2660
Libs.private: $(enabled shared && echo $libs)
2661
Cflags: -I\${includedir}
2662
EOF
2663
cat <<EOF > $name/$name-uninstalled.pc
2664
prefix=
2665
exec_prefix=
2666
libdir=\${pcfiledir}
2667
includedir=${source_path}
2668

    
2669
Name: $name
2670
Description: $comment
2671
Version: $version
2672
Requires: $requires
2673
Conflicts:
2674
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2675
Cflags: -I\${includedir}
2676
EOF
2677
}
2678

    
2679
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2680
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2681
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2682
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2683
enabled avfilter &&
2684
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2685
enabled postproc &&
2686
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2687
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"