Statistics
| Branch: | Revision:

ffmpeg / configure @ 8b93ddc3

History | View | Annotate | Download (80.5 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
293
filter(){
294
    pat=$1
295
    shift
296
    for v; do
297
        case "$v" in $pat) echo "$v" ;; esac
298
    done
299
}
300

    
301
set_all(){
302
    value=$1
303
    shift
304
    for var in $*; do
305
        eval $var=$value
306
    done
307
}
308

    
309
set_weak(){
310
    value=$1
311
    shift
312
    for var; do
313
        eval : \${$var:=$value}
314
    done
315
}
316

    
317
pushvar(){
318
    for var in $*; do
319
        eval level=\${${var}_level:=0}
320
        eval ${var}_${level}="\$$var"
321
        eval ${var}_level=$(($level+1))
322
    done
323
}
324

    
325
popvar(){
326
    for var in $*; do
327
        eval level=\${${var}_level:-0}
328
        test $level = 0 && continue
329
        eval level=$(($level-1))
330
        eval $var="\${${var}_${level}}"
331
        eval ${var}_level=$level
332
        eval unset ${var}_${level}
333
    done
334
}
335

    
336
enable(){
337
    set_all yes $*
338
}
339

    
340
disable(){
341
    set_all no $*
342
}
343

    
344
enable_weak(){
345
    set_weak yes $*
346
}
347

    
348
disable_weak(){
349
    set_weak no $*
350
}
351

    
352
enable_safe(){
353
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
354
}
355

    
356
disable_safe(){
357
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
358
}
359

    
360
do_enable_deep(){
361
    for var; do
362
        enabled $var && continue
363
        eval sel="\$${var}_select"
364
        eval sgs="\$${var}_suggest"
365
        pushvar var sgs
366
        enable_deep $sel
367
        popvar sgs
368
        enable_deep_weak $sgs
369
        popvar var
370
    done
371
}
372

    
373
enable_deep(){
374
    do_enable_deep $*
375
    enable $*
376
}
377

    
378
enable_deep_weak(){
379
    do_enable_deep $*
380
    enable_weak $*
381
}
382

    
383
enabled(){
384
    test "${1#!}" = "$1" && op== || op=!=
385
    eval test "x\$${1#!}" $op "xyes"
386
}
387

    
388
disabled(){
389
    test "${1#!}" = "$1" && op== || op=!=
390
    eval test "x\$${1#!}" $op "xno"
391
}
392

    
393
enabled_all(){
394
    for opt; do
395
        enabled $opt || return 1
396
    done
397
}
398

    
399
disabled_all(){
400
    for opt; do
401
        disabled $opt || return 1
402
    done
403
}
404

    
405
enabled_any(){
406
    for opt; do
407
        enabled $opt && return 0
408
    done
409
}
410

    
411
disabled_any(){
412
    for opt; do
413
        disabled $opt && return 0
414
    done
415
    return 1
416
}
417

    
418
set_default(){
419
    for opt; do
420
        eval : \${$opt:=\$${opt}_default}
421
    done
422
}
423

    
424
is_in(){
425
    value=$1
426
    shift
427
    for var in $*; do
428
        [ $var = $value ] && return 0
429
    done
430
    return 1
431
}
432

    
433
check_deps(){
434
    for cfg; do
435
        cfg="${cfg#!}"
436
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
437
        disabled ${cfg}_checking && continue
438
        enable ${cfg}_checking
439

    
440
        eval dep_all="\$${cfg}_deps"
441
        eval dep_any="\$${cfg}_deps_any"
442
        eval dep_sel="\$${cfg}_select"
443
        eval dep_sgs="\$${cfg}_suggest"
444

    
445
        pushvar cfg dep_all dep_any dep_sel dep_sgs
446
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
447
        popvar cfg dep_all dep_any dep_sel dep_sgs
448

    
449
        enabled_all  $dep_all || disable $cfg
450
        enabled_any  $dep_any || disable $cfg
451
        disabled_any $dep_sel && disable $cfg
452

    
453
        if enabled $cfg; then
454
            eval dep_extralibs="\$${cfg}_extralibs"
455
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
456
            enable_deep $dep_sel
457
            enable_deep_weak $dep_sgs
458
        fi
459

    
460
        disable ${cfg}_checking
461
    done
462
}
463

    
464
print_config(){
465
    pfx=$1
466
    header=$2
467
    makefile=$3
468
    shift 3
469
    for cfg; do
470
        ucname="$(toupper $cfg)"
471
        if enabled $cfg; then
472
            echo "#define ${pfx}${ucname} 1" >> $header
473
            echo "${pfx}${ucname}=yes" >> $makefile
474
        else
475
            echo "#define ${pfx}${ucname} 0" >> $header
476
        fi
477
    done
478
}
479

    
480
flags_saved(){
481
    (: ${SAVE_CFLAGS?}) 2> /dev/null
482
}
483

    
484
save_flags(){
485
    flags_saved && return
486
    SAVE_CFLAGS="$CFLAGS"
487
    SAVE_LDFLAGS="$LDFLAGS"
488
    SAVE_extralibs="$extralibs"
489
}
490

    
491
restore_flags(){
492
    flags_saved || return
493
    CFLAGS="$SAVE_CFLAGS"
494
    LDFLAGS="$SAVE_LDFLAGS"
495
    extralibs="$SAVE_extralibs"
496
    unset SAVE_CFLAGS
497
    unset SAVE_LDFLAGS
498
    unset SAVE_extralibs
499
}
500

    
501
temp_cflags(){
502
    save_flags
503
    CFLAGS="$CFLAGS $*"
504
}
505

    
506
temp_ldflags(){
507
    save_flags
508
    LDFLAGS="$LDFLAGS $*"
509
}
510

    
511
temp_extralibs(){
512
    save_flags
513
    extralibs="$extralibs $*"
514
}
515

    
516
append(){
517
    var=$1
518
    shift
519
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
520
    eval "$var=\"\$$var $*\""
521
}
522

    
523
add_cppflags(){
524
    append CPPFLAGS $($filter_cppflags "$@")
525
}
526

    
527
add_cflags(){
528
    append CFLAGS $($filter_cflags "$@")
529
}
530

    
531
add_asflags(){
532
    append ASFLAGS $($filter_asflags "$@")
533
}
534

    
535
add_ldflags(){
536
    append LDFLAGS "$@"
537
}
538

    
539
add_extralibs(){
540
    append extralibs "$@"
541
}
542

    
543
check_cmd(){
544
    log "$@"
545
    "$@" >> $logfile 2>&1
546
}
547

    
548
check_cc(){
549
    log check_cc "$@"
550
    cat > $TMPC
551
    log_file $TMPC
552
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
553
}
554

    
555
check_cpp(){
556
    log check_cpp "$@"
557
    cat > $TMPC
558
    log_file $TMPC
559
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
560
}
561

    
562
check_as(){
563
    log check_as "$@"
564
    cat > $TMPC
565
    log_file $TMPC
566
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
567
}
568

    
569
check_asm(){
570
    log check_asm "$@"
571
    name="$1"
572
    asm="$2"
573
    shift 2
574
    check_as "$@" <<EOF && enable $name || disable $name
575
void foo(void){ __asm__ volatile($asm); }
576
EOF
577
}
578

    
579
check_yasm(){
580
    log check_yasm "$@"
581
    echo "$1" > $TMPS
582
    log_file $TMPS
583
    shift 1
584
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
585
}
586

    
587
check_ld(){
588
    log check_ld "$@"
589
    check_cc || return
590
    flags=''
591
    libs=''
592
    for f; do
593
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
594
    done
595
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
596
}
597

    
598
check_cppflags(){
599
    log check_cppflags "$@"
600
    set -- $($filter_cppflags "$@")
601
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
602
int x;
603
EOF
604
}
605

    
606
check_cflags(){
607
    log check_cflags "$@"
608
    set -- $($filter_cflags "$@")
609
    check_cc "$@" <<EOF && append CFLAGS "$@"
610
int x;
611
EOF
612
}
613

    
614
check_ldflags(){
615
    log check_ldflags "$@"
616
    check_ld "$@" <<EOF && add_ldflags "$@"
617
int main(void){ return 0; }
618
EOF
619
}
620

    
621
check_header(){
622
    log check_header "$@"
623
    header=$1
624
    shift
625
    disable_safe $header
626
    check_cpp "$@" <<EOF && enable_safe $header
627
#include <$header>
628
int x;
629
EOF
630
}
631

    
632
check_func(){
633
    log check_func "$@"
634
    func=$1
635
    shift
636
    disable $func
637
    check_ld "$@" <<EOF && enable $func
638
extern int $func();
639
int main(void){ $func(); }
640
EOF
641
}
642

    
643
check_func_headers(){
644
    log check_func_headers "$@"
645
    headers=$1
646
    func=$2
647
    shift 2
648
    disable $func
649
    incs=""
650
    for hdr in $headers; do
651
        incs="$incs
652
#include <$hdr>"
653
    done
654
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
655
$incs
656
int main(int argc, char **argv){
657
    return (long) $func;
658
}
659
EOF
660
}
661

    
662
check_cpp_condition(){
663
    log check_cpp_condition "$@"
664
    header=$1
665
    condition=$2
666
    check_cpp <<EOF
667
#include <$header>
668
#if !($condition)
669
#error "unsatisfied condition: $condition"
670
#endif
671
EOF
672
}
673

    
674
check_lib(){
675
    log check_lib "$@"
676
    header="$1"
677
    func="$2"
678
    shift 2
679
    temp_extralibs "$@"
680
    check_header $header && check_func $func && add_extralibs "$@"
681
    err=$?
682
    restore_flags
683
    return $err
684
}
685

    
686
check_lib2(){
687
    log check_lib2 "$@"
688
    headers="$1"
689
    func="$2"
690
    shift 2
691
    temp_extralibs "$@"
692
    check_func_headers "$headers" $func && add_extralibs "$@"
693
    err=$?
694
    restore_flags
695
    return $err
696
}
697

    
698
check_exec(){
699
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
700
}
701

    
702
check_exec_crash(){
703
    code=$(cat)
704

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

    
711
    (check_exec "$@") >> $logfile 2>&1 <<EOF
712
#include <signal.h>
713
static void sighandler(int sig){
714
    raise(SIGTERM);
715
}
716
int main(void){
717
    signal(SIGILL, sighandler);
718
    signal(SIGFPE, sighandler);
719
    signal(SIGSEGV, sighandler);
720
#ifdef SIGBUS
721
    signal(SIGBUS, sighandler);
722
#endif
723
    { $code }
724
}
725
EOF
726
}
727

    
728
check_type(){
729
    log check_type "$@"
730
    headers=$1
731
    type=$2
732
    shift 2
733
    disable $type
734
    incs=""
735
    for hdr in $headers; do
736
        incs="$incs
737
#include <$hdr>"
738
    done
739
    check_cc "$@" <<EOF && enable $type
740
$incs
741
$type v;
742
EOF
743
}
744

    
745
require(){
746
    name="$1"
747
    header="$2"
748
    func="$3"
749
    shift 3
750
    check_lib $header $func "$@" || die "ERROR: $name not found"
751
}
752

    
753
require2(){
754
    name="$1"
755
    headers="$2"
756
    func="$3"
757
    shift 3
758
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
759
}
760

    
761
check_foo_config(){
762
    cfg=$1
763
    pkg=$2
764
    header=$3
765
    func=$4
766
    shift 4
767
    disable $cfg
768
    check_cmd ${pkg}-config --version
769
    err=$?
770
    if test "$err" = 0; then
771
        temp_cflags $(${pkg}-config --cflags)
772
        temp_extralibs $(${pkg}-config --libs)
773
        check_lib "$@" $header $func && enable $cfg
774
    fi
775
    return $err
776
}
777

    
778
apply(){
779
    file=$1
780
    shift
781
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
782
}
783

    
784
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
785
# system-dependent things.
786

    
787
COMPONENT_LIST="
788
    bsfs
789
    decoders
790
    demuxers
791
    encoders
792
    filters
793
    hwaccels
794
    indevs
795
    muxers
796
    outdevs
797
    parsers
798
    protocols
799
"
800

    
801
CONFIG_LIST="
802
    $COMPONENT_LIST
803
    aandct
804
    avfilter
805
    avfilter_lavf
806
    avisynth
807
    beos_netserver
808
    bzlib
809
    fastdiv
810
    ffmpeg
811
    ffplay
812
    ffserver
813
    fft
814
    golomb
815
    gpl
816
    gprof
817
    gray
818
    hardcoded_tables
819
    ipv6
820
    libdc1394
821
    libdirac
822
    libfaac
823
    libfaad
824
    libfaadbin
825
    libgsm
826
    libmp3lame
827
    libnut
828
    libopencore_amrnb
829
    libopencore_amrwb
830
    libopenjpeg
831
    libschroedinger
832
    libspeex
833
    libtheora
834
    libvorbis
835
    libx264
836
    libxvid
837
    mdct
838
    memalign_hack
839
    mlib
840
    mpegaudio_hp
841
    network
842
    nonfree
843
    postproc
844
    powerpc_perf
845
    rdft
846
    runtime_cpudetect
847
    shared
848
    small
849
    static
850
    swscale_alpha
851
    vaapi
852
    vdpau
853
    version3
854
    x11grab
855
    zlib
856
"
857

    
858
THREADS_LIST='
859
    beosthreads
860
    os2threads
861
    pthreads
862
    w32threads
863
'
864

    
865
ARCH_LIST='
866
    alpha
867
    arm
868
    bfin
869
    ia64
870
    m68k
871
    mips
872
    mips64
873
    parisc
874
    ppc
875
    ppc64
876
    s390
877
    sh4
878
    sparc
879
    sparc64
880
    x86
881
    x86_32
882
    x86_64
883
'
884

    
885
ARCH_EXT_LIST='
886
    altivec
887
    amd3dnow
888
    amd3dnowext
889
    armv5te
890
    armv6
891
    armv6t2
892
    armvfp
893
    iwmmxt
894
    mmi
895
    mmx
896
    mmx2
897
    neon
898
    ppc4xx
899
    sse
900
    ssse3
901
    vis
902
'
903

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

    
977
# options emitted with CONFIG_ prefix but not available on command line
978
CONFIG_EXTRA="
979
    gplv3
980
    lgplv3
981
"
982

    
983
CMDLINE_SELECT="
984
    $ARCH_EXT_LIST
985
    $CONFIG_LIST
986
    $THREADS_LIST
987
    cross_compile
988
    debug
989
    extra_warnings
990
    logging
991
    optimizations
992
    stripping
993
    yasm
994
"
995

    
996
PATHS_LIST='
997
    bindir
998
    datadir
999
    incdir
1000
    libdir
1001
    mandir
1002
    prefix
1003
    shlibdir
1004
'
1005

    
1006
CMDLINE_SET="
1007
    $PATHS_LIST
1008
    arch
1009
    as
1010
    build_suffix
1011
    cc
1012
    cpu
1013
    cross_prefix
1014
    dep_cc
1015
    extra_version
1016
    host_cc
1017
    host_cflags
1018
    host_ldflags
1019
    host_libs
1020
    host_os
1021
    ld
1022
    logfile
1023
    nm
1024
    source_path
1025
    sysinclude
1026
    sysroot
1027
    target_exec
1028
    target_os
1029
    target_path
1030
"
1031

    
1032
CMDLINE_APPEND="
1033
    extra_cflags
1034
"
1035

    
1036
# code dependency declarations
1037

    
1038
# architecture extensions
1039
altivec_deps="ppc"
1040
amd3dnow_deps="mmx"
1041
amd3dnowext_deps="amd3dnow"
1042
armv5te_deps="arm"
1043
armv6_deps="arm"
1044
armv6t2_deps="arm"
1045
armvfp_deps="arm"
1046
iwmmxt_deps="arm"
1047
mmi_deps="mips"
1048
mmx_deps="x86"
1049
mmx2_deps="mmx"
1050
neon_deps="arm"
1051
ppc4xx_deps="ppc"
1052
sse_deps="mmx"
1053
ssse3_deps="sse"
1054
vis_deps="sparc"
1055

    
1056
need_memalign="altivec neon sse"
1057
inline_asm_deps="!tms470"
1058

    
1059
# decoders / encoders / hardware accelerators
1060
aac_decoder_select="fft mdct"
1061
aac_encoder_select="fft mdct"
1062
ac3_decoder_select="fft mdct"
1063
atrac3_decoder_select="fft mdct"
1064
cavs_decoder_select="golomb"
1065
cook_decoder_select="fft mdct"
1066
cscd_decoder_suggest="zlib"
1067
dca_decoder_select="fft mdct"
1068
dnxhd_encoder_select="aandct"
1069
dxa_decoder_select="zlib"
1070
eac3_decoder_select="ac3_decoder"
1071
eamad_decoder_select="aandct"
1072
eatgq_decoder_select="aandct"
1073
eatqi_decoder_select="aandct"
1074
ffv1_decoder_select="golomb"
1075
flac_decoder_select="golomb"
1076
flac_encoder_select="golomb"
1077
flashsv_decoder_select="zlib"
1078
flashsv_encoder_select="zlib"
1079
flv_encoder_select="h263_encoder"
1080
h261_encoder_select="aandct"
1081
h263_encoder_select="aandct"
1082
h263_vaapi_hwaccel_deps="va_va_h"
1083
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1084
h263p_encoder_select="h263_encoder"
1085
h264_decoder_select="golomb"
1086
h264_vaapi_hwaccel_deps="va_va_h"
1087
h264_vaapi_hwaccel_select="vaapi"
1088
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1089
h264_vdpau_decoder_select="vdpau h264_decoder"
1090
imc_decoder_select="fft mdct"
1091
jpegls_decoder_select="golomb"
1092
jpegls_encoder_select="golomb"
1093
ljpeg_encoder_select="aandct"
1094
loco_decoder_select="golomb"
1095
mjpeg_encoder_select="aandct"
1096
mpeg1video_encoder_select="aandct"
1097
mpeg2video_encoder_select="aandct"
1098
mpeg4_encoder_select="h263_encoder"
1099
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1100
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1101
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1102
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1103
mpeg2_vaapi_hwaccel_deps="va_va_h"
1104
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1105
mpeg4_vaapi_hwaccel_deps="va_va_h"
1106
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1107
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1108
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1109
msmpeg4v1_encoder_select="h263_encoder"
1110
msmpeg4v2_encoder_select="h263_encoder"
1111
msmpeg4v3_encoder_select="h263_encoder"
1112
nellymoser_decoder_select="fft mdct"
1113
nellymoser_encoder_select="fft mdct"
1114
png_decoder_select="zlib"
1115
png_encoder_select="zlib"
1116
qdm2_decoder_select="fft mdct rdft"
1117
rv10_encoder_select="h263_encoder"
1118
rv20_encoder_select="h263_encoder"
1119
rv30_decoder_select="golomb"
1120
rv40_decoder_select="golomb"
1121
shorten_decoder_select="golomb"
1122
sonic_decoder_select="golomb"
1123
sonic_encoder_select="golomb"
1124
sonic_ls_encoder_select="golomb"
1125
svq3_decoder_select="golomb"
1126
svq3_decoder_suggest="zlib"
1127
theora_decoder_select="vp3_decoder"
1128
tiff_decoder_suggest="zlib"
1129
tiff_encoder_suggest="zlib"
1130
tscc_decoder_select="zlib"
1131
vc1_vaapi_hwaccel_deps="va_va_h"
1132
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1133
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1134
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1135
vorbis_decoder_select="fft mdct"
1136
vorbis_encoder_select="fft mdct"
1137
vp6a_decoder_select="vp6_decoder"
1138
vp6f_decoder_select="vp6_decoder"
1139
wmav1_decoder_select="fft mdct"
1140
wmav1_encoder_select="fft mdct"
1141
wmav2_decoder_select="fft mdct"
1142
wmav2_encoder_select="fft mdct"
1143
wmv1_encoder_select="h263_encoder"
1144
wmv2_encoder_select="h263_encoder"
1145
wmv3_decoder_select="vc1_decoder"
1146
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1147
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1148
zlib_decoder_select="zlib"
1149
zlib_encoder_select="zlib"
1150
zmbv_decoder_select="zlib"
1151
zmbv_encoder_select="zlib"
1152

    
1153
# parsers
1154
h264_parser_select="golomb"
1155

    
1156
# external libraries
1157
libdirac_decoder_deps="libdirac !libschroedinger"
1158
libdirac_encoder_deps="libdirac"
1159
libfaac_encoder_deps="libfaac"
1160
libfaad_decoder_deps="libfaad"
1161
libfaadbin_decoder_extralibs='$ldl'
1162
libgsm_decoder_deps="libgsm"
1163
libgsm_encoder_deps="libgsm"
1164
libgsm_ms_decoder_deps="libgsm"
1165
libgsm_ms_encoder_deps="libgsm"
1166
libmp3lame_encoder_deps="libmp3lame"
1167
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1168
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1169
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1170
libopenjpeg_decoder_deps="libopenjpeg"
1171
libschroedinger_decoder_deps="libschroedinger"
1172
libschroedinger_encoder_deps="libschroedinger"
1173
libspeex_decoder_deps="libspeex"
1174
libtheora_encoder_deps="libtheora"
1175
libvorbis_encoder_deps="libvorbis"
1176
libx264_encoder_deps="libx264"
1177
libxvid_encoder_deps="libxvid"
1178

    
1179
# demuxers / muxers
1180
ac3_demuxer_deps="ac3_parser"
1181
asf_stream_muxer_select="asf_muxer"
1182
avisynth_demuxer_deps="avisynth"
1183
dirac_demuxer_deps="dirac_parser"
1184
ipod_muxer_select="mov_muxer"
1185
libnut_demuxer_deps="libnut"
1186
libnut_muxer_deps="libnut"
1187
matroska_audio_muxer_select="matroska_muxer"
1188
matroska_demuxer_suggest="zlib bzlib"
1189
mov_demuxer_suggest="zlib"
1190
mp3_demuxer_deps="mpegaudio_parser"
1191
mp4_muxer_select="mov_muxer"
1192
mpegtsraw_demuxer_select="mpegts_demuxer"
1193
mxf_d10_muxer_select="mxf_muxer"
1194
psp_muxer_select="mov_muxer"
1195
redir_demuxer_deps="network"
1196
rtp_muxer_deps="network rtp_protocol"
1197
rtsp_demuxer_deps="sdp_demuxer"
1198
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1199
tg2_muxer_select="mov_muxer"
1200
tgp_muxer_select="mov_muxer"
1201

    
1202
# indevs / outdevs
1203
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1204
alsa_indev_extralibs="-lasound"
1205
alsa_outdev_deps="alsa_asoundlib_h"
1206
alsa_outdev_extralibs="-lasound"
1207
audio_beos_indev_deps="audio_beos"
1208
audio_beos_indev_extralibs="-lmedia -lbe"
1209
audio_beos_outdev_deps="audio_beos"
1210
audio_beos_outdev_extralibs="-lmedia -lbe"
1211
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1212
dv1394_indev_deps="dv1394 dv_demuxer"
1213
jack_indev_deps="jack_jack_h"
1214
jack_indev_extralibs="-ljack"
1215
libdc1394_indev_deps="libdc1394"
1216
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1217
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1218
v4l_indev_deps="linux_videodev_h"
1219
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1220
vfwcap_indev_deps="capCreateCaptureWindow"
1221
vfwcap_indev_extralibs="-lvfw32"
1222
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1223
x11_grab_device_indev_extralibs="-lX11 -lXext"
1224

    
1225
# protocols
1226
gopher_protocol_deps="network"
1227
http_protocol_deps="network"
1228
rtmp_protocol_deps="tcp_protocol"
1229
rtp_protocol_deps="udp_protocol"
1230
tcp_protocol_deps="network"
1231
udp_protocol_deps="network"
1232

    
1233
# filters
1234
movie_filter_deps="avfilter_lavf"
1235

    
1236
# programs
1237
ffplay_deps="sdl"
1238
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1239
ffserver_extralibs='$ldl'
1240

    
1241

    
1242
# default parameters
1243

    
1244
logfile="config.err"
1245

    
1246
# installation paths
1247
prefix_default="/usr/local"
1248
bindir_default='${prefix}/bin'
1249
datadir_default='${prefix}/share/ffmpeg'
1250
incdir_default='${prefix}/include'
1251
libdir_default='${prefix}/lib'
1252
mandir_default='${prefix}/share/man'
1253
shlibdir_default="$libdir_default"
1254

    
1255
# toolchain
1256
ar="ar"
1257
cc_default="gcc"
1258
host_cc_default="gcc"
1259
ln_s="ln -sf"
1260
nm_default="nm"
1261
objformat="elf"
1262
ranlib="ranlib"
1263
strip="strip"
1264
yasmexe="yasm"
1265

    
1266
# machine
1267
arch=$(uname -m)
1268
cpu="generic"
1269

    
1270
# OS
1271
target_os=$(tolower $(uname -s))
1272
host_os=$target_os
1273

    
1274
# configurable options
1275
enable debug
1276
enable fastdiv
1277
enable ffmpeg
1278
enable ffplay
1279
enable ffserver
1280
enable ipv6
1281
enable mpegaudio_hp
1282
enable network
1283
enable optimizations
1284
enable protocols
1285
enable static
1286
enable stripping
1287
enable swscale_alpha
1288

    
1289
# build settings
1290
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1291
FFSERVERLDFLAGS=-Wl,-E
1292
LIBPREF="lib"
1293
LIBSUF=".a"
1294
FULLNAME='$(NAME)$(BUILDSUF)'
1295
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1296
SLIBPREF="lib"
1297
SLIBSUF=".so"
1298
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1299
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1300
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1301
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1302

    
1303
CC_O='-o $@'
1304

    
1305
host_cflags='-O3 -g -Wall'
1306
host_libs='-lm'
1307

    
1308
target_path='.'
1309

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

    
1315
# find source path
1316
source_path="$(dirname "$0")"
1317
enable source_path_used
1318
if test -f configure; then
1319
    source_path="$(pwd)"
1320
    disable source_path_used
1321
else
1322
    source_path="$(cd "$source_path"; pwd)"
1323
    echo "$source_path" | grep -q '[[:blank:]]' &&
1324
        die "Out of tree builds are impossible with whitespace in source path."
1325
    test -e "$source_path/config.h" &&
1326
        die "Out of tree builds are impossible with config.h in source dir."
1327
fi
1328

    
1329
for v in "$@"; do
1330
    r=${v#*=}
1331
    l=${v%"$r"}
1332
    r=$(sh_quote "$r")
1333
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1334
done
1335

    
1336
find_things(){
1337
    thing=$1
1338
    pattern=$2
1339
    file=$source_path/$3
1340
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1341
}
1342

    
1343
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1344
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1345
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1346
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1347
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1348
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1349
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1350
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1351
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1352
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1353
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1354

    
1355
enable $ARCH_EXT_LIST \
1356
       $DECODER_LIST \
1357
       $ENCODER_LIST \
1358
       $HWACCEL_LIST \
1359
       $PARSER_LIST \
1360
       $BSF_LIST \
1361
       $DEMUXER_LIST \
1362
       $MUXER_LIST \
1363
       $FILTER_LIST \
1364
       $PROTOCOL_LIST \
1365
       $INDEV_LIST \
1366
       $OUTDEV_LIST \
1367

    
1368
die_unknown(){
1369
    echo "Unknown option \"$1\"."
1370
    echo "See $0 --help for available options."
1371
    exit 1
1372
}
1373

    
1374
show_list() {
1375
    suffix=_$1
1376
    shift
1377
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1378
    exit 0
1379
}
1380

    
1381
for opt do
1382
    optval="${opt#*=}"
1383
    case "$opt" in
1384
    --extra-ldflags=*) add_ldflags $optval
1385
    ;;
1386
    --extra-libs=*) add_extralibs $optval
1387
    ;;
1388
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1389
    ;;
1390
    --enable-debug=*) debuglevel="$optval"
1391
    ;;
1392
    --enable-*=*|--disable-*=*)
1393
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1394
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1395
    eval list=\$$(toupper $thing)_LIST
1396
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1397
    $action $(filter "$name" $list)
1398
    ;;
1399
    --enable-?*|--disable-?*)
1400
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1401
    if is_in $option $COMPONENT_LIST; then
1402
        test $action = disable && action=unset
1403
        eval $action \$$(toupper ${option%s})_LIST
1404
    elif is_in $option $CMDLINE_SELECT; then
1405
        $action $option
1406
    else
1407
        die_unknown $opt
1408
    fi
1409
    ;;
1410
    --list-*)
1411
        NAME="${opt#--list-}"
1412
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1413
        NAME=${NAME%s}
1414
        eval show_list $NAME \$$(toupper $NAME)_LIST
1415
    ;;
1416
    --help|-h) show_help
1417
    ;;
1418
    *)
1419
    optname="${opt%%=*}"
1420
    optname="${optname#--}"
1421
    optname=$(echo "$optname" | sed 's/-/_/g')
1422
    if is_in $optname $CMDLINE_SET; then
1423
        eval $optname='$optval'
1424
    elif is_in $optname $CMDLINE_APPEND; then
1425
        append $optname "$optval"
1426
    else
1427
         die_unknown $opt
1428
    fi
1429
    ;;
1430
    esac
1431
done
1432

    
1433
disabled logging && logfile=/dev/null
1434

    
1435
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1436
set >> $logfile
1437

    
1438
test -n "$cross_prefix" && enable cross_compile
1439

    
1440
ar="${cross_prefix}${ar}"
1441
cc_default="${cross_prefix}${cc_default}"
1442
nm_default="${cross_prefix}${nm_default}"
1443
ranlib="${cross_prefix}${ranlib}"
1444
strip="${cross_prefix}${strip}"
1445

    
1446
sysinclude_default="${sysroot}/usr/include"
1447

    
1448
set_default cc nm sysinclude
1449
enabled cross_compile || host_cc_default=$cc
1450
set_default host_cc
1451

    
1452
exesuf() {
1453
    case $1 in
1454
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1455
    esac
1456
}
1457

    
1458
EXESUF=$(exesuf $target_os)
1459
HOSTEXESUF=$(exesuf $host_os)
1460

    
1461
# set temporary file name
1462
: ${TMPDIR:=$TEMPDIR}
1463
: ${TMPDIR:=$TMP}
1464
: ${TMPDIR:=/tmp}
1465

    
1466
if ! check_cmd type mktemp; then
1467
    # simple replacement for missing mktemp
1468
    # NOT SAFE FOR GENERAL USE
1469
    mktemp(){
1470
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1471
    }
1472
fi
1473

    
1474
tmpfile(){
1475
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1476
        (set -C; exec > $tmp) 2>/dev/null ||
1477
        die "Unable to create temoporary file in $TMPDIR."
1478
    append TMPFILES $tmp
1479
    eval $1=$tmp
1480
}
1481

    
1482
trap 'rm -f -- $TMPFILES' EXIT
1483
trap exit HUP INT TERM
1484

    
1485
tmpfile TMPC  .c
1486
tmpfile TMPE  $EXESUF
1487
tmpfile TMPH  .h
1488
tmpfile TMPO  .o
1489
tmpfile TMPS  .S
1490
tmpfile TMPSH .sh
1491

    
1492
unset -f mktemp
1493

    
1494
# make sure we can execute files in $TMPDIR
1495
cat > $TMPSH 2>> $logfile <<EOF
1496
#! /bin/sh
1497
EOF
1498
chmod +x $TMPSH >> $logfile 2>&1
1499
if ! $TMPSH >> $logfile 2>&1; then
1500
    cat <<EOF
1501
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1502
variable to another directory and make sure that it is not mounted noexec.
1503
EOF
1504
    die "Sanity test failed."
1505
fi
1506

    
1507
filter_cflags=echo
1508
filter_cppflags=echo
1509
filter_asflags=echo
1510

    
1511
if   $cc --version 2>/dev/null | grep -qi gcc; then
1512
    cc_type=gcc
1513
elif $cc --version 2>/dev/null | grep -q Intel; then
1514
    cc_type=icc
1515
elif $cc -v 2>&1 | grep -q xlc; then
1516
    cc_type=xlc
1517
elif $cc -V 2>/dev/null | grep -q Compaq; then
1518
    cc_type=ccc
1519
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1520
    debuglevel=3
1521
    add_ldflags -Wl,-z,now # calls to libots crash without this
1522
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1523
    test -d "$sysroot" || die "No valid sysroot specified."
1524
    cc_type=armcc
1525
    armcc_conf="$PWD/armcc.conf"
1526
    $cc --arm_linux_configure                 \
1527
        --arm_linux_config_file="$armcc_conf" \
1528
        --configure_sysroot="$sysroot"        \
1529
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1530
        die "Error creating armcc configuration file."
1531
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1532
    as_default="${cross_prefix}gcc"
1533
elif $cc -version 2>/dev/null | grep -q TMS470; then
1534
    cc_type=tms470
1535
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1536
    CC_O='-fr=$(@D)'
1537
    as_default="${cross_prefix}gcc"
1538
    ld_default="${cross_prefix}gcc"
1539
    dep_cc_default="${cross_prefix}gcc"
1540
    TMPO=$(basename $TMPC .c).o
1541
    append TMPFILES $TMPO
1542
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1543
    DEPFLAGS='$(CPPFLAGS) -MM'
1544
    filter_cflags=tms470_flags
1545
    tms470_flags(){
1546
        for flag; do
1547
            case $flag in
1548
                -march=*|-mcpu=*)
1549
                    case "${flag#*=}" in
1550
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1551
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1552
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1553
                        armv6*|arm11*)          echo -mv=6   ;;
1554
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1555
                                                echo -mv=5e  ;;
1556
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1557
                    esac
1558
                    ;;
1559
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1560
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1561
                -mfpu=softvfp)  echo --float_support=vfplib       ;;
1562
                -Os)            echo -O3 -mf=2                    ;;
1563
                -O[0-3])        echo $flag -mf=5                  ;;
1564
                -g)             echo -g -mn                       ;;
1565
            esac
1566
        done
1567
    }
1568
fi
1569

    
1570
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1571

    
1572
: ${as_default:=$cc}
1573
: ${dep_cc_default:=$cc}
1574
: ${ld_default:=$cc}
1575
set_default as dep_cc ld
1576

    
1577
add_cflags $extra_cflags
1578
add_asflags $extra_cflags
1579

    
1580
if test -n "$sysroot"; then
1581
    case "$cc_type" in
1582
        gcc)
1583
            add_cppflags --sysroot="$sysroot"
1584
            add_ldflags --sysroot="$sysroot"
1585
        ;;
1586
        tms470)
1587
            add_cppflags -I"$sysinclude"
1588
            add_ldflags  --sysroot="$sysroot"
1589
        ;;
1590
    esac
1591
fi
1592

    
1593
if test "$cpu" = host; then
1594
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1595

    
1596
    case "$cc_type" in
1597
        gcc)
1598
            check_native(){
1599
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1600
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1601
            }
1602
            cpu=$(check_native -march || check_native -mcpu)
1603
        ;;
1604
    esac
1605

    
1606
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1607
fi
1608

    
1609
# Add processor-specific flags
1610
case $cpu in
1611
    601|ppc601|PowerPC601)
1612
        cpuflags="-mcpu=601"
1613
    ;;
1614
    603*|ppc603*|PowerPC603*)
1615
        cpuflags="-mcpu=603"
1616
    ;;
1617
    604*|ppc604*|PowerPC604*)
1618
        cpuflags="-mcpu=604"
1619
    ;;
1620
    G3|g3|75*|ppc75*|PowerPC75*)
1621
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1622
    ;;
1623
    G4|g4|745*|ppc745*|PowerPC745*)
1624
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1625
    ;;
1626
    74*|ppc74*|PowerPC74*)
1627
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1628
    ;;
1629
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1630
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1631
    ;;
1632
    Cell|CELL|cell)
1633
        cpuflags="-mcpu=cell"
1634
        enable ldbrx
1635
    ;;
1636
    # targets that do NOT support conditional mov (cmov)
1637
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1638
        cpuflags="-march=$cpu"
1639
        disable cmov
1640
    ;;
1641
    # targets that do support conditional mov (cmov)
1642
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1643
        cpuflags="-march=$cpu"
1644
        enable cmov
1645
        enable fast_cmov
1646
    ;;
1647
    # targets that do support conditional mov but on which it's slow
1648
    pentium4|pentium4m|prescott|nocona)
1649
        cpuflags="-march=$cpu"
1650
        enable cmov
1651
        disable fast_cmov
1652
    ;;
1653
    sparc64)
1654
        cpuflags="-mcpu=v9"
1655
    ;;
1656
    arm11*|cortex*)
1657
        cpuflags="-mcpu=$cpu"
1658
        enable fast_unaligned
1659
    ;;
1660
    armv[67]*)
1661
        cpuflags="-march=$cpu"
1662
        enable fast_unaligned
1663
    ;;
1664
    armv*)
1665
        cpuflags="-march=$cpu"
1666
    ;;
1667
    arm*)
1668
        cpuflags="-mcpu=$cpu"
1669
    ;;
1670
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1671
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1672
    ;;
1673
    bf*)
1674
        cpuflags="-mcpu=$cpu"
1675
    ;;
1676
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1677
        cpuflags="-march=$cpu"
1678
    ;;
1679
    generic)
1680
    ;;
1681
    *)
1682
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1683
    ;;
1684
esac
1685

    
1686
add_cflags $cpuflags
1687
add_asflags $cpuflags
1688

    
1689
# compiler sanity check
1690
check_exec <<EOF
1691
int main(void){ return 0; }
1692
EOF
1693
if test "$?" != 0; then
1694
    echo "$cc is unable to create an executable file."
1695
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1696
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1697
        echo "Only do this if you know what cross compiling means."
1698
    fi
1699
    die "C compiler test failed."
1700
fi
1701

    
1702
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1703
check_cflags -std=c99
1704
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1705
#include <stdlib.h>
1706
EOF
1707
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1708
#include <stdlib.h>
1709
EOF
1710

    
1711
case "$arch" in
1712
    alpha)
1713
        arch="alpha"
1714
        enable fast_64bit
1715
        check_cflags -mieee
1716
        pic=$shared
1717
    ;;
1718
    arm|armv[4567]*l)
1719
        arch="arm"
1720
    ;;
1721
    avr32)
1722
    ;;
1723
    bfin)
1724
        arch="bfin"
1725
    ;;
1726
    ia64)
1727
        arch="ia64"
1728
        enable fast_64bit
1729
        pic=$shared
1730
    ;;
1731
    m68k)
1732
        arch="m68k"
1733
    ;;
1734
    mips|mipsel|IP*)
1735
        arch="mips"
1736
        pic=$shared
1737
    ;;
1738
    mips64)
1739
        arch="mips"
1740
        subarch="mips64"
1741
        enable fast_64bit
1742
        pic=$shared
1743
    ;;
1744
    parisc|hppa)
1745
        arch="parisc"
1746
        pic=$shared
1747
    ;;
1748
    parisc64|hppa64)
1749
        arch="parisc"
1750
        enable fast_64bit
1751
        pic=$shared
1752
    ;;
1753
    "Power Macintosh"|ppc|powerpc)
1754
        arch="ppc"
1755
        enable fast_unaligned
1756
    ;;
1757
    ppc64)
1758
        arch="ppc"
1759
        subarch="ppc64"
1760
        enable fast_64bit
1761
        enable fast_unaligned
1762
    ;;
1763
    s390|s390x)
1764
        arch="s390"
1765
    ;;
1766
    sh4|sh)
1767
        arch="sh4"
1768
    ;;
1769
    sparc)
1770
        arch="sparc"
1771
        pic=$shared
1772
    ;;
1773
    sun4u|sparc64)
1774
        arch="sparc"
1775
        subarch="sparc64"
1776
        enable fast_64bit
1777
        pic=$shared
1778
    ;;
1779
    i386|i486|i586|i686|i86pc|BePC)
1780
        arch="x86"
1781
        subarch="x86_32"
1782
        enable fast_unaligned
1783
    ;;
1784
    x86_64|amd64)
1785
        arch="x86"
1786
        subarch="x86_32"
1787
        enable cmov
1788
        enable fast_cmov
1789
        enable fast_unaligned
1790
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && pic=$shared
1791
        int test[sizeof(char*) - 7];
1792
EOF
1793
    ;;
1794
    *)
1795
        arch="unknown"
1796
    ;;
1797
esac
1798

    
1799
enable $arch $subarch
1800

    
1801
# OS specific
1802
case $target_os in
1803
    beos|haiku|zeta)
1804
        prefix_default="$HOME/config"
1805
        # helps building libavcodec
1806
        add_cppflags -DPIC
1807
        add_cflags -fomit-frame-pointer
1808
        # 3 gcc releases known for BeOS, each with ugly bugs
1809
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1810
        case "$gcc_version" in
1811
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1812
            disable mmx
1813
            ;;
1814
          *20010315*) echo "BeBits gcc"
1815
            add_cflags -fno-expensive-optimizations
1816
            ;;
1817
        esac
1818
        SHFLAGS=-nostart
1819
        # enable BeOS things
1820
        enable audio_beos
1821
        # no need for libm, but the inet stuff
1822
        # Check for BONE
1823
        # XXX: actually should check for NOT net_server
1824
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1825
            network_extralibs="-lbind -lsocket"
1826
        else
1827
            enable beos_netserver
1828
            network_extralibs="-lnet"
1829
        fi ;;
1830
    sunos)
1831
        FFSERVERLDFLAGS=""
1832
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1833
        network_extralibs="-lsocket -lnsl"
1834
        add_cppflags -D__EXTENSIONS__
1835
        ;;
1836
    netbsd)
1837
        oss_indev_extralibs="-lossaudio"
1838
        oss_outdev_extralibs="-lossaudio"
1839
        ;;
1840
    openbsd)
1841
        enable malloc_aligned
1842
        enable pic
1843
        SHFLAGS='-shared'
1844
        oss_indev_extralibs="-lossaudio"
1845
        oss_outdev_extralibs="-lossaudio"
1846
        ;;
1847
    freebsd|dragonfly)
1848
        enable malloc_aligned
1849
        ;;
1850
    bsd/os)
1851
        osextralibs="-lpoll -lgnugetopt"
1852
        strip="strip -d"
1853
        ;;
1854
    darwin)
1855
        enable malloc_aligned
1856
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1857
        strip="strip -x"
1858
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1859
        SLIBSUF=".dylib"
1860
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1861
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1862
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1863
        objformat="macho"
1864
        enabled x86_64 && objformat="macho64"
1865
        enabled shared || check_cflags -mdynamic-no-pic
1866
        ;;
1867
    mingw32*)
1868
        if test $target_os = "mingw32ce"; then
1869
            disable network
1870
        else
1871
            target_os=mingw32
1872
        fi
1873
        LIBTARGET=i386
1874
        if enabled x86_64; then
1875
            enable malloc_aligned
1876
            LIBTARGET=x64
1877
        elif enabled arm; then
1878
            LIBTARGET=arm
1879
        fi
1880
        shlibdir_default="$bindir_default"
1881
        disable ffserver
1882
        SLIBPREF=""
1883
        SLIBSUF=".dll"
1884
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1885
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1886
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1887
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1888
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1889
            install -d "$(LIBDIR)"; \
1890
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1891
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1892
        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'
1893
        objformat="win32"
1894
        enable dos_paths
1895
        check_cflags -fno-common
1896
        if ! enabled x86_64; then
1897
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1898
                die "ERROR: MinGW runtime version must be >= 3.15."
1899
            enabled_any avisynth vfwcap_indev &&
1900
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1901
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1902
            fi
1903
        ;;
1904
    cygwin*)
1905
        target_os=cygwin
1906
        shlibdir_default="$bindir_default"
1907
        SLIBPREF="cyg"
1908
        SLIBSUF=".dll"
1909
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1910
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1911
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1912
        objformat="win32"
1913
        enable dos_paths
1914
        check_cflags -fno-common
1915
        ;;
1916
    *-dos|freedos|opendos)
1917
        disable ffplay ffserver
1918
        disable $INDEV_LIST $OUTDEV_LIST
1919
        network_extralibs="-lsocket"
1920
        objformat="coff"
1921
        enable dos_paths
1922
        ;;
1923
    linux)
1924
        enable dv1394
1925
        ;;
1926
    irix*)
1927
        target_os=irix
1928
        ranlib="echo ignoring ranlib"
1929
        ;;
1930
    os/2*)
1931
        strip="lxlite"
1932
        ln_s="cp -f"
1933
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1934
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1935
        FFSERVERLDFLAGS=""
1936
        LIBSUF="_s.a"
1937
        SLIBPREF=""
1938
        SLIBSUF=".dll"
1939
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1940
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1941
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1942
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1943
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1944
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1945
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1946
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1947
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1948
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1949
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1950
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1951
        enable dos_paths
1952
        ;;
1953
    gnu/kfreebsd)
1954
        ;;
1955
    gnu)
1956
        ;;
1957

    
1958
    *)
1959
        die "Unknown OS '$target_os'."
1960
        ;;
1961
esac
1962

    
1963
set_default $PATHS_LIST
1964

    
1965
add_extralibs $osextralibs
1966

    
1967
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1968
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1969

    
1970
# we need to build at least one lib type
1971
if ! enabled_any static shared; then
1972
    cat <<EOF
1973
At least one library type must be built.
1974
Specify --enable-static to build the static libraries or --enable-shared to
1975
build the shared libraries as well. To only build the shared libraries specify
1976
--disable-static in addition to --enable-shared.
1977
EOF
1978
    exit 1;
1979
fi
1980

    
1981
disabled static && LIBNAME=""
1982

    
1983
if enabled_any libfaad libfaadbin ; then
1984
    if check_header faad.h; then
1985
        check_cc <<EOF
1986
#include <faad.h>
1987
#ifndef FAAD2_VERSION
1988
ok faad1
1989
#endif
1990
int main(void) { return 0; }
1991
EOF
1992
        test $? = 0 && enable libfaad2
1993
    else
1994
        die "FAAD test failed."
1995
    fi
1996
fi
1997

    
1998

    
1999
die_license_disabled() {
2000
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2001
}
2002

    
2003
die_license_disabled gpl libfaad2
2004
die_license_disabled gpl libx264
2005
die_license_disabled gpl libxvid
2006
die_license_disabled gpl postproc
2007
die_license_disabled gpl x11grab
2008

    
2009
die_license_disabled nonfree libfaac
2010

    
2011
die_license_disabled version3 libopencore_amrnb
2012
die_license_disabled version3 libopencore_amrwb
2013

    
2014
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2015

    
2016
check_deps $ARCH_EXT_LIST
2017

    
2018
disabled optimizations || check_cflags -fomit-frame-pointer
2019

    
2020
check_cc <<EOF || die "Symbol mangling check failed."
2021
int ff_extern;
2022
EOF
2023
sym=$($nm -P -g $TMPO | grep ff_extern)
2024
extern_prefix=${sym%%ff_extern*}
2025

    
2026
check_cc <<EOF && enable inline_asm
2027
void foo(void) { __asm__ volatile ("" ::); }
2028
EOF
2029

    
2030
_restrict=
2031
for restrict_keyword in restrict __restrict__ __restrict; do
2032
    check_cc <<EOF && _restrict=$restrict_keyword && break
2033
void foo(char * $restrict_keyword p);
2034
EOF
2035
done
2036

    
2037
check_cc <<EOF && enable attribute_packed
2038
struct { int x; } __attribute__((packed)) x;
2039
EOF
2040

    
2041
check_cc <<EOF || die "endian test failed"
2042
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2043
EOF
2044
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2045

    
2046
if enabled arm; then
2047

    
2048
    check_ld <<EOF && enable vfp_args
2049
__asm__ (".eabi_attribute 28, 1");
2050
int main(void) { return 0; }
2051
EOF
2052

    
2053
    # We have to check if pld is a nop and disable it.
2054
    check_asm pld '"pld [r0]"'
2055

    
2056
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2057
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2058
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2059
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2060
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2061
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2062

    
2063
elif enabled mips; then
2064

    
2065
    check_asm loongson '"dmult.g $1, $2, $3"'
2066
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2067

    
2068
elif enabled ppc; then
2069

    
2070
    check_asm dcbzl     '"dcbzl 0, 1"'
2071
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2072
    check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2073

    
2074
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2075
    if enabled altivec; then
2076
        check_cflags -maltivec -mabi=altivec &&
2077
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2078
        check_cflags -faltivec
2079

    
2080
        # check if our compiler supports Motorola AltiVec C API
2081
        check_cc <<EOF || disable altivec
2082
$inc_altivec_h
2083
int main(void) {
2084
    vector signed int v1, v2, v3;
2085
    v1 = vec_add(v2,v3);
2086
    return 0;
2087
}
2088
EOF
2089

    
2090
        # check if our compiler supports braces for vector declarations
2091
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2092
$inc_altivec_h
2093
int main (void) { (vector int) {1}; return 0; }
2094
EOF
2095
    fi
2096

    
2097
elif enabled sparc; then
2098

    
2099
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2100
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2101

    
2102
elif enabled x86; then
2103

    
2104
    # check whether EBP is available on x86
2105
    # As 'i' is stored on the stack, this program will crash
2106
    # if the base pointer is used to access it because the
2107
    # base pointer is cleared in the inline assembly code.
2108
    check_exec_crash <<EOF && enable ebp_available
2109
    volatile int i=0;
2110
    __asm__ volatile (
2111
        "xorl %%ebp, %%ebp"
2112
    ::: "%ebp");
2113
    return i;
2114
EOF
2115

    
2116
    # check wether EBX is available on x86
2117
    check_asm ebx_available '"":::"%ebx"'
2118

    
2119
    # check whether more than 10 operands are supported
2120
    check_cc <<EOF && enable ten_operands
2121
int main(void) {
2122
    int x=0;
2123
    __asm__ volatile(
2124
        ""
2125
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2126
    );
2127
    return 0;
2128
}
2129
EOF
2130

    
2131
    # check whether binutils is new enough to compile SSSE3/MMX2
2132
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2133
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2134

    
2135
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2136

    
2137
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2138
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2139
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2140
    case "$objformat" in
2141
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2142
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2143
        *)                    append YASMFLAGS "-DPREFIX"  ;;
2144
    esac
2145
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2146

    
2147
fi
2148

    
2149
if check_func dlopen; then
2150
    ldl=
2151
elif check_func dlopen -ldl; then
2152
    ldl=-ldl
2153
fi
2154

    
2155
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2156
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2157

    
2158
check_func  fork
2159
check_func  gethrtime
2160
check_func  getrusage
2161
check_func  inet_aton $network_extralibs
2162
check_func  isatty
2163
check_func  memalign
2164
check_func  mkstemp
2165
check_func  posix_memalign
2166
check_func_headers io.h setmode
2167
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2168
check_func_headers windows.h GetProcessTimes
2169
check_func_headers windows.h VirtualAlloc
2170

    
2171
check_header conio.h
2172
check_header dlfcn.h
2173
check_header malloc.h
2174
check_header poll.h
2175
check_header sys/mman.h
2176
check_header sys/resource.h
2177
check_header sys/select.h
2178
check_header termios.h
2179
check_header vdpau/vdpau.h
2180
check_header vdpau/vdpau_x11.h
2181
check_header X11/extensions/XvMClib.h
2182

    
2183
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2184
     enabled_any $need_memalign ; then
2185
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2186
fi
2187

    
2188
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2189
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2190

    
2191
# check for some common methods of building with pthread support
2192
# do this before the optional library checks as some of them require pthreads
2193
if enabled pthreads; then
2194
    if check_func pthread_create; then
2195
        :
2196
    elif check_func pthread_create -pthread; then
2197
        add_cflags -pthread
2198
        add_extralibs -pthread
2199
    elif check_func pthread_create -pthreads; then
2200
        add_cflags -pthreads
2201
        add_extralibs -pthreads
2202
    elif check_func pthread_create -lpthreadGC2; then
2203
        add_extralibs -lpthreadGC2
2204
    elif ! check_lib pthread.h pthread_create -lpthread; then
2205
        die "ERROR: can't find pthreads library"
2206
    fi
2207
fi
2208

    
2209
for thread in $THREADS_LIST; do
2210
    if enabled $thread; then
2211
        test -n "$thread_type" &&
2212
            die "ERROR: Only one thread type must be selected." ||
2213
            thread_type="$thread"
2214
    fi
2215
done
2216

    
2217
check_lib math.h sin -lm
2218
check_lib va/va.h vaInitialize -lva
2219

    
2220
check_func llrint
2221
check_func log2
2222
check_func lrint
2223
check_func lrintf
2224
check_func round
2225
check_func roundf
2226
check_func truncf
2227

    
2228
# these are off by default, so fail if requested and not available
2229
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2230
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2231
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2232
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2233
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2234
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2235
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2236
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2237
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2238
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2239
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2240
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2241
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2242
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2243
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2244
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2245
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2246
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2247
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2248
                        die "ERROR: libx264 version must be >= 0.65."; }
2249
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2250
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2251

    
2252
# libdc1394 check
2253
if enabled libdc1394; then
2254
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2255
        enable libdc1394_2; } ||
2256
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2257
        enable libdc1394_1; } ||
2258
    die "ERROR: No version of libdc1394 found "
2259
fi
2260

    
2261
disable sdl_too_old
2262
disable sdl
2263
SDL_CONFIG="${cross_prefix}sdl-config"
2264
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2265
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2266
    temp_cflags $sdl_cflags
2267
    temp_extralibs $("${SDL_CONFIG}" --libs)
2268
    if check_lib2 SDL.h SDL_Init; then
2269
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2270
        if test "$_sdlversion" -lt 121 ; then
2271
            enable sdl_too_old
2272
        else
2273
            enable sdl
2274
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2275
#include <SDL.h>
2276
int main(int argc, char **argv){
2277
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2278
    int w = vi->current_w;
2279
    return 0;
2280
}
2281
EOF
2282
        fi
2283
    fi
2284
    restore_flags
2285
fi
2286

    
2287
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2288

    
2289
if enabled network; then
2290
    check_type "sys/types.h sys/socket.h" socklen_t
2291
    # Prefer arpa/inet.h over winsock2
2292
    if check_header arpa/inet.h ; then
2293
        check_func closesocket
2294
    elif check_header winsock2.h ; then
2295
        check_func_headers winsock2.h closesocket -lws2 && \
2296
            network_extralibs="-lws2" || \
2297
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2298
            network_extralibs="-lws2_32"; }
2299
        check_type ws2tcpip.h socklen_t
2300
    else
2301
        disable network
2302
    fi
2303
fi
2304

    
2305
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2306
#include <sys/types.h>
2307
#include <sys/socket.h>
2308
#include <netinet/in.h>
2309
#include <netdb.h>
2310
int main(void) {
2311
    struct sockaddr_storage saddr;
2312
    struct ipv6_mreq mreq6;
2313
    getaddrinfo(0,0,0,0);
2314
    getnameinfo(0,0,0,0,0,0,0);
2315
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2316
}
2317
EOF
2318

    
2319
check_header linux/videodev.h
2320
check_header linux/videodev2.h
2321
check_header sys/videoio.h
2322

    
2323
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2324

    
2325
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2326
{ check_header dev/bktr/ioctl_meteor.h &&
2327
  check_header dev/bktr/ioctl_bt848.h; } ||
2328
{ check_header machine/ioctl_meteor.h &&
2329
  check_header machine/ioctl_bt848.h; } ||
2330
{ check_header dev/video/meteor/ioctl_meteor.h &&
2331
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2332
check_header dev/ic/bt8xx.h
2333

    
2334
check_header sys/soundcard.h
2335
check_header soundcard.h
2336

    
2337
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2338

    
2339
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2340

    
2341
enabled x11grab                         &&
2342
check_header X11/Xlib.h                 &&
2343
check_header X11/extensions/XShm.h      &&
2344
check_func XOpenDisplay -lX11           &&
2345
check_func XShmCreateImage -lX11 -lXext
2346

    
2347
enabled debug && add_cflags -g"$debuglevel"
2348

    
2349
# add some useful compiler flags if supported
2350
check_cflags -Wdeclaration-after-statement
2351
check_cflags -Wall
2352
check_cflags -Wno-switch
2353
check_cflags -Wdisabled-optimization
2354
check_cflags -Wpointer-arith
2355
check_cflags -Wredundant-decls
2356
check_cflags -Wno-pointer-sign
2357
check_cflags -Wcast-qual
2358
check_cflags -Wwrite-strings
2359
check_cflags -Wtype-limits
2360
check_cflags -Wundef
2361
enabled extra_warnings && check_cflags -Winline
2362

    
2363
# add some linker flags
2364
check_ldflags -Wl,--warn-common
2365
check_ldflags -Wl,--as-needed
2366
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'
2367
check_ldflags -Wl,-Bsymbolic
2368

    
2369
if enabled small; then
2370
    check_cflags -Os            # not all compilers support -Os
2371
    optimizations="small"
2372
elif enabled optimizations; then
2373
    if enabled xlc; then
2374
        add_cflags  -O5
2375
        add_ldflags -O5
2376
    elif enabled ccc; then
2377
        add_cflags -fast
2378
    else
2379
        add_cflags -O3
2380
    fi
2381
fi
2382
check_cflags -fno-math-errno
2383
check_cflags -fno-signed-zeros
2384

    
2385
if enabled icc; then
2386
    # Just warnings, no remarks
2387
    check_cflags -w1
2388
    # -wd: Disable following warnings
2389
    # 144, 167, 556: -Wno-pointer-sign
2390
    # 10006: ignoring unknown option -fno-signed-zeros
2391
    # 10156: ignoring option '-W'; no argument required
2392
    check_cflags -wd144,167,556,10006,10156
2393
    # 11030: Warning unknown option --as-needed
2394
    # 10156: ignoring option '-export'; no argument required
2395
    check_ldflags -wd10156,11030
2396
    # Allow to compile with optimizations
2397
    check_ldflags -march=$cpu
2398
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2399
    enable ebp_available
2400
elif enabled ccc; then
2401
    # disable some annoying warnings
2402
    add_cflags -msg_disable cvtu32to64
2403
    add_cflags -msg_disable embedcomment
2404
    add_cflags -msg_disable needconstext
2405
    add_cflags -msg_disable nomainieee
2406
    add_cflags -msg_disable ptrmismatch1
2407
    add_cflags -msg_disable unreachcode
2408
elif enabled gcc; then
2409
    check_cflags -fno-tree-vectorize
2410
fi
2411

    
2412
enabled pic && LIBOBJFLAGS='$(PIC)'
2413

    
2414
if enabled gprof; then
2415
    add_cflags  -p
2416
    add_ldflags -p
2417
fi
2418

    
2419
# Find out if the .align argument is a power of two or not.
2420
check_asm asmalign_pot '".align 3"'
2421

    
2422
enabled_any $DECODER_LIST      && enable decoders
2423
enabled_any $ENCODER_LIST      && enable encoders
2424
enabled_any $HWACCEL_LIST      && enable hwaccels
2425
enabled_any $BSF_LIST          && enable bsfs
2426
enabled_any $DEMUXER_LIST      && enable demuxers
2427
enabled_any $MUXER_LIST        && enable muxers
2428
enabled_any $FILTER_LIST       && enable filters
2429
enabled_any $INDEV_LIST        && enable indevs
2430
enabled_any $OUTDEV_LIST       && enable outdevs
2431
enabled_any $PROTOCOL_LIST     && enable protocols
2432

    
2433
enabled_any $THREADS_LIST      && enable threads
2434

    
2435
check_deps $CONFIG_LIST       \
2436
           $CONFIG_EXTRA      \
2437
           $HAVE_LIST         \
2438
           $DECODER_LIST      \
2439
           $ENCODER_LIST      \
2440
           $HWACCEL_LIST      \
2441
           $PARSER_LIST       \
2442
           $BSF_LIST          \
2443
           $DEMUXER_LIST      \
2444
           $MUXER_LIST        \
2445
           $FILTER_LIST       \
2446
           $INDEV_LIST        \
2447
           $OUTDEV_LIST       \
2448
           $PROTOCOL_LIST     \
2449

    
2450
echo "install prefix            $prefix"
2451
echo "source path               $source_path"
2452
echo "C compiler                $cc"
2453
echo ".align is power-of-two    $asmalign_pot"
2454
echo "ARCH                      $arch ($cpu)"
2455
if test "$build_suffix" != ""; then
2456
    echo "build suffix              $build_suffix"
2457
fi
2458
if test "$extra_version" != ""; then
2459
    echo "version string suffix     $extra_version"
2460
fi
2461
echo "big-endian                ${bigendian-no}"
2462
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2463
if enabled x86; then
2464
    echo "yasm                      ${yasm-no}"
2465
    echo "MMX enabled               ${mmx-no}"
2466
    echo "MMX2 enabled              ${mmx2-no}"
2467
    echo "3DNow! enabled            ${amd3dnow-no}"
2468
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2469
    echo "SSE enabled               ${sse-no}"
2470
    echo "SSSE3 enabled             ${ssse3-no}"
2471
    echo "CMOV enabled              ${cmov-no}"
2472
    echo "CMOV is fast              ${fast_cmov-no}"
2473
    echo "EBX available             ${ebx_available-no}"
2474
    echo "EBP available             ${ebp_available-no}"
2475
    echo "10 operands supported     ${ten_operands-no}"
2476
fi
2477
if enabled arm; then
2478
    echo "ARMv5TE enabled           ${armv5te-no}"
2479
    echo "ARMv6 enabled             ${armv6-no}"
2480
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2481
    echo "ARM VFP enabled           ${armvfp-no}"
2482
    echo "IWMMXT enabled            ${iwmmxt-no}"
2483
    echo "NEON enabled              ${neon-no}"
2484
fi
2485
if enabled mips; then
2486
    echo "MMI enabled               ${mmi-no}"
2487
fi
2488
if enabled ppc; then
2489
    echo "AltiVec enabled           ${altivec-no}"
2490
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2491
    echo "dcbzl available           ${dcbzl-no}"
2492
    echo "performance report        ${powerpc_perf-no}"
2493
fi
2494
if enabled sparc; then
2495
    echo "VIS enabled               ${vis-no}"
2496
fi
2497
echo "gprof enabled             ${gprof-no}"
2498
echo "debug symbols             ${debug-no}"
2499
echo "strip symbols             ${stripping-no}"
2500
echo "optimizations             ${optimizations-no}"
2501
echo "static                    ${static-no}"
2502
echo "shared                    ${shared-no}"
2503
echo "postprocessing support    ${postproc-no}"
2504
echo "new filter support        ${avfilter-no}"
2505
echo "filters using lavformat   ${avfilter_lavf-no}"
2506
echo "network support           ${network-no}"
2507
if enabled network; then
2508
    echo "IPv6 support              ${ipv6-no}"
2509
fi
2510
echo "threading support         ${thread_type-no}"
2511
echo "SDL support               ${sdl-no}"
2512
if enabled sdl_too_old; then
2513
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2514
fi
2515
echo "Sun medialib support      ${mlib-no}"
2516
echo "AVISynth enabled          ${avisynth-no}"
2517
echo "libdc1394 support         ${libdc1394-no}"
2518
echo "libdirac enabled          ${libdirac-no}"
2519
echo "libfaac enabled           ${libfaac-no}"
2520
echo "libfaad enabled           ${libfaad-no}"
2521
echo "libfaad dlopened          ${libfaadbin-no}"
2522
echo "libgsm enabled            ${libgsm-no}"
2523
echo "libmp3lame enabled        ${libmp3lame-no}"
2524
echo "libnut enabled            ${libnut-no}"
2525
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2526
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2527
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2528
echo "libschroedinger enabled   ${libschroedinger-no}"
2529
echo "libspeex enabled          ${libspeex-no}"
2530
echo "libtheora enabled         ${libtheora-no}"
2531
echo "libvorbis enabled         ${libvorbis-no}"
2532
echo "libx264 enabled           ${libx264-no}"
2533
echo "libxvid enabled           ${libxvid-no}"
2534
echo "zlib enabled              ${zlib-no}"
2535
echo "bzlib enabled             ${bzlib-no}"
2536
echo
2537

    
2538
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2539
    echo "Enabled ${type}s:"
2540
    eval list=\$$(toupper $type)_LIST
2541
    for part in $list; do
2542
        enabled $part && echo ${part%_*}
2543
    done | sort | pr -3 -t
2544
    echo
2545
done
2546

    
2547
license="LGPL version 2.1 or later"
2548
if enabled nonfree; then
2549
    license="nonfree and unredistributable"
2550
elif enabled gplv3; then
2551
    license="GPL version 3 or later"
2552
elif enabled lgplv3; then
2553
    license="LGPL version 3 or later"
2554
elif enabled gpl; then
2555
    license="GPL version 2 or later"
2556
fi
2557

    
2558
echo "License: $license"
2559

    
2560
echo "Creating config.mak and config.h..."
2561

    
2562
echo "# Automatically generated by configure - do not modify!" > config.mak
2563
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2564
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2565
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2566
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2567
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2568

    
2569
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2570
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2571

    
2572
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2573
echo "prefix=$prefix" >> config.mak
2574
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2575
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2576
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2577
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2578
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2579
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2580
echo "SRC_PATH=\"$source_path\"" >> config.mak
2581
echo "SRC_PATH_BARE=$source_path" >> config.mak
2582
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2583
echo "CC=$cc" >> config.mak
2584
echo "AS=$as" >> config.mak
2585
echo "LD=$ld" >> config.mak
2586
echo "DEPCC=$dep_cc" >> config.mak
2587
echo "YASM=$yasmexe" >> config.mak
2588
echo "AR=$ar" >> config.mak
2589
echo "RANLIB=$ranlib" >> config.mak
2590
echo "LN_S=$ln_s" >> config.mak
2591
enabled stripping &&
2592
    echo "STRIP=$strip" >> config.mak ||
2593
    echo "STRIP=echo ignoring strip" >> config.mak
2594

    
2595
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2596
echo "CFLAGS=$CFLAGS" >> config.mak
2597
echo "ASFLAGS=$ASFLAGS" >> config.mak
2598
echo "CC_O=$CC_O" >> config.mak
2599
echo "LDFLAGS=$LDFLAGS" >> config.mak
2600
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2601
echo "SHFLAGS=$SHFLAGS" >> config.mak
2602
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2603
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2604
echo "PIC=-fPIC -DPIC" >> config.mak
2605
echo "BUILDSUF=$build_suffix" >> config.mak
2606
echo "FULLNAME=$FULLNAME" >> config.mak
2607
echo "LIBPREF=$LIBPREF" >> config.mak
2608
echo "LIBSUF=$LIBSUF" >> config.mak
2609
echo "LIBNAME=$LIBNAME" >> config.mak
2610
echo "SLIBPREF=$SLIBPREF" >> config.mak
2611
echo "SLIBSUF=$SLIBSUF" >> config.mak
2612
echo "EXESUF=$EXESUF" >> config.mak
2613
echo "EXTRA_VERSION=$extra_version" >> config.mak
2614
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2615
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2616
echo "HOSTCC=$host_cc" >> config.mak
2617
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2618
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2619
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2620
echo "HOSTLIBS=$host_libs" >> config.mak
2621
echo "TARGET_EXEC=$target_exec" >> config.mak
2622
echo "TARGET_PATH=$target_path" >> config.mak
2623

    
2624
if enabled sdl; then
2625
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2626
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2627
fi
2628
if enabled texi2html; then
2629
    echo "BUILD_DOC=yes" >> config.mak
2630
fi
2631

    
2632
get_version(){
2633
    name=$1
2634
    file=$source_path/$2
2635
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2636
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2637
    lcname=$(tolower $name)
2638
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2639
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2640
}
2641

    
2642
get_version LIBSWSCALE  libswscale/swscale.h
2643
get_version LIBPOSTPROC libpostproc/postprocess.h
2644
get_version LIBAVCODEC  libavcodec/avcodec.h
2645
get_version LIBAVDEVICE libavdevice/avdevice.h
2646
get_version LIBAVFORMAT libavformat/avformat.h
2647
get_version LIBAVUTIL   libavutil/avutil.h
2648
get_version LIBAVFILTER libavfilter/avfilter.h
2649

    
2650
if enabled shared; then
2651
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2652
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2653
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2654
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2655
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2656
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2657
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2658
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2659
fi
2660
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2661
echo "EXTRALIBS=$extralibs" >> config.mak
2662

    
2663
echo "ARCH=$arch" >> config.mak
2664

    
2665
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2666
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2667
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2668
                                      $CONFIG_EXTRA      \
2669
                                      $DECODER_LIST      \
2670
                                      $ENCODER_LIST      \
2671
                                      $HWACCEL_LIST      \
2672
                                      $PARSER_LIST       \
2673
                                      $BSF_LIST          \
2674
                                      $DEMUXER_LIST      \
2675
                                      $MUXER_LIST        \
2676
                                      $FILTER_LIST       \
2677
                                      $PROTOCOL_LIST     \
2678
                                      $INDEV_LIST        \
2679
                                      $OUTDEV_LIST       \
2680

    
2681
echo "#define restrict $_restrict" >> $TMPH
2682

    
2683
if enabled small || disabled optimizations; then
2684
    echo "#define av_always_inline"  >> $TMPH
2685
fi
2686

    
2687

    
2688
# Apparently it's not possible to portably echo a backslash.
2689
enabled asmalign_pot &&
2690
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2691
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2692

    
2693
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2694

    
2695
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2696
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2697

    
2698
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2699
cmp -s $TMPH config.h &&
2700
    echo "config.h is unchanged" ||
2701
    mv -f $TMPH config.h
2702

    
2703
# build tree in object directory if source path is different from current one
2704
if enabled source_path_used; then
2705
    DIRS="\
2706
        doc               \
2707
        libavcodec        \
2708
        libavcodec/alpha  \
2709
        libavcodec/arm    \
2710
        libavcodec/bfin   \
2711
        libavcodec/mlib   \
2712
        libavcodec/ppc    \
2713
        libavcodec/sh4    \
2714
        libavcodec/sparc  \
2715
        libavcodec/x86    \
2716
        libavdevice       \
2717
        libavfilter       \
2718
        libavformat       \
2719
        libavutil         \
2720
        libpostproc       \
2721
        libswscale        \
2722
        libswscale/bfin   \
2723
        libswscale/mlib   \
2724
        libswscale/ppc    \
2725
        libswscale/sparc  \
2726
        libswscale/x86    \
2727
        tests             \
2728
        tools             \
2729
        "
2730
    FILES="\
2731
        Makefile             \
2732
        common.mak           \
2733
        subdir.mak           \
2734
        doc/texi2pod.pl      \
2735
        libavcodec/Makefile  \
2736
        libavdevice/Makefile \
2737
        libavfilter/Makefile \
2738
        libavformat/Makefile \
2739
        libavutil/Makefile   \
2740
        libpostproc/Makefile \
2741
        libswscale/Makefile  \
2742
        "
2743
    for dir in $DIRS ; do
2744
        mkdir -p $dir
2745
    done
2746
    for f in $FILES ; do
2747
        $ln_s "$source_path/$f" $f
2748
    done
2749
fi
2750

    
2751

    
2752
# build pkg-config files
2753

    
2754
pkgconfig_generate(){
2755
name=$1
2756
shortname=${name#lib}${build_suffix}
2757
comment=$2
2758
version=$3
2759
libs=$4
2760
requires=$5
2761
cat <<EOF > $name/$name.pc
2762
prefix=$prefix
2763
exec_prefix=\${prefix}
2764
libdir=$libdir
2765
includedir=$incdir
2766

    
2767
Name: $name
2768
Description: $comment
2769
Version: $version
2770
Requires: $(disabled shared && echo $requires)
2771
Requires.private: $(enabled shared && echo $requires)
2772
Conflicts:
2773
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2774
Libs.private: $(enabled shared && echo $libs)
2775
Cflags: -I\${includedir}
2776
EOF
2777
cat <<EOF > $name/$name-uninstalled.pc
2778
prefix=
2779
exec_prefix=
2780
libdir=\${pcfiledir}
2781
includedir=${source_path}
2782

    
2783
Name: $name
2784
Description: $comment
2785
Version: $version
2786
Requires: $requires
2787
Conflicts:
2788
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2789
Cflags: -I\${includedir}
2790
EOF
2791
}
2792

    
2793
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2794
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2795
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2796
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2797
enabled avfilter &&
2798
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2799
enabled postproc &&
2800
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2801
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"