Statistics
| Branch: | Revision:

ffmpeg / configure @ 07dec06e

History | View | Annotate | Download (80.8 KB)

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

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

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

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

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

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

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

    
57
show_help(){
58
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72
  echo
73
  echo "Configuration options:"
74
  echo "  --disable-static         do not build static libraries [no]"
75
  echo "  --enable-shared          build shared libraries [no]"
76
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77
  echo "                           and binaries will be under GPL [no]"
78
  echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
80
  echo "                           and binaries will be unredistributable [no]"
81
  echo "  --disable-ffmpeg         disable ffmpeg build"
82
  echo "  --disable-ffplay         disable ffplay build"
83
  echo "  --disable-ffserver       disable ffserver build"
84
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
85
  echo "  --enable-avfilter        video filter support [no]"
86
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
87
  echo "  --enable-beosthreads     use BeOS threads [no]"
88
  echo "  --enable-os2threads      use OS/2 threads [no]"
89
  echo "  --enable-pthreads        use pthreads [no]"
90
  echo "  --enable-w32threads      use Win32 threads [no]"
91
  echo "  --enable-x11grab         enable X11 grabbing [no]"
92
  echo "  --disable-network        disable network support [no]"
93
  echo "  --disable-ipv6           disable IPv6 support [no]"
94
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
95
  echo "  --enable-gray            enable full grayscale support (slower color)"
96
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
97
  echo "  --disable-fastdiv        disable table-based division"
98
  echo "  --enable-small           optimize for size instead of speed"
99
  echo "  --disable-aandct         disable AAN DCT code"
100
  echo "  --disable-fft            disable FFT code"
101
  echo "  --disable-golomb         disable Golomb code"
102
  echo "  --disable-mdct           disable MDCT code"
103
  echo "  --disable-rdft           disable RDFT code"
104
  echo "  --disable-vaapi          disable VAAPI code"
105
  echo "  --disable-vdpau          disable VDPAU code"
106
  echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
107
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
108
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
109
  echo "  --enable-beos-netserver  enable BeOS netserver"
110
  echo "  --disable-encoder=NAME   disable encoder NAME"
111
  echo "  --enable-encoder=NAME    enable encoder NAME"
112
  echo "  --disable-encoders       disable all encoders"
113
  echo "  --disable-decoder=NAME   disable decoder NAME"
114
  echo "  --enable-decoder=NAME    enable decoder NAME"
115
  echo "  --disable-decoders       disable all decoders"
116
  echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
117
  echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
118
  echo "  --disable-hwaccels       disable all hwaccels"
119
  echo "  --disable-muxer=NAME     disable muxer NAME"
120
  echo "  --enable-muxer=NAME      enable muxer NAME"
121
  echo "  --disable-muxers         disable all muxers"
122
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
123
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
124
  echo "  --disable-demuxers       disable all demuxers"
125
  echo "  --enable-parser=NAME     enable parser NAME"
126
  echo "  --disable-parser=NAME    disable parser NAME"
127
  echo "  --disable-parsers        disable all parsers"
128
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
129
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
130
  echo "  --disable-bsfs           disable all bitstream filters"
131
  echo "  --enable-protocol=NAME   enable protocol NAME"
132
  echo "  --disable-protocol=NAME  disable protocol NAME"
133
  echo "  --disable-protocols      disable all protocols"
134
  echo "  --disable-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," > $(@:.o=.d)'
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
    CC_DEPFLAGS='-MMD'
1514
    AS_DEPFLAGS='-MMD'
1515
elif $cc --version 2>/dev/null | grep -q Intel; then
1516
    cc_type=icc
1517
    CC_DEPFLAGS='-MMD'
1518
    AS_DEPFLAGS='-MMD'
1519
elif $cc -v 2>&1 | grep -q xlc; then
1520
    cc_type=xlc
1521
elif $cc -V 2>/dev/null | grep -q Compaq; then
1522
    cc_type=ccc
1523
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1524
    debuglevel=3
1525
    add_ldflags -Wl,-z,now # calls to libots crash without this
1526
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1527
    test -d "$sysroot" || die "No valid sysroot specified."
1528
    cc_type=armcc
1529
    armcc_conf="$PWD/armcc.conf"
1530
    $cc --arm_linux_configure                 \
1531
        --arm_linux_config_file="$armcc_conf" \
1532
        --configure_sysroot="$sysroot"        \
1533
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1534
        die "Error creating armcc configuration file."
1535
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1536
    as_default="${cross_prefix}gcc"
1537
    CC_DEPFLAGS='-MMD'
1538
    AS_DEPFLAGS='-MMD'
1539
elif $cc -version 2>/dev/null | grep -q TMS470; then
1540
    cc_type=tms470
1541
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1542
    CC_O='-fr=$(@D)'
1543
    as_default="${cross_prefix}gcc"
1544
    ld_default="${cross_prefix}gcc"
1545
    TMPO=$(basename $TMPC .c).o
1546
    append TMPFILES $TMPO
1547
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1548
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1549
    AS_DEPFLAGS='-MMD'
1550
    filter_cflags=tms470_flags
1551
    tms470_flags(){
1552
        for flag; do
1553
            case $flag in
1554
                -march=*|-mcpu=*)
1555
                    case "${flag#*=}" in
1556
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1557
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1558
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1559
                        armv6*|arm11*)          echo -mv=6   ;;
1560
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1561
                                                echo -mv=5e  ;;
1562
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1563
                    esac
1564
                    ;;
1565
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1566
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1567
                -mfpu=softvfp)  echo --float_support=vfplib       ;;
1568
                -Os)            echo -O3 -mf=2                    ;;
1569
                -O[0-3])        echo $flag -mf=5                  ;;
1570
                -g)             echo -g -mn                       ;;
1571
            esac
1572
        done
1573
    }
1574
fi
1575

    
1576
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1577

    
1578
: ${as_default:=$cc}
1579
: ${dep_cc_default:=$cc}
1580
: ${ld_default:=$cc}
1581
set_default as dep_cc ld
1582

    
1583
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1584
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1585

    
1586
add_cflags $extra_cflags
1587
add_asflags $extra_cflags
1588

    
1589
if test -n "$sysroot"; then
1590
    case "$cc_type" in
1591
        gcc)
1592
            add_cppflags --sysroot="$sysroot"
1593
            add_ldflags --sysroot="$sysroot"
1594
        ;;
1595
        tms470)
1596
            add_cppflags -I"$sysinclude"
1597
            add_ldflags  --sysroot="$sysroot"
1598
        ;;
1599
    esac
1600
fi
1601

    
1602
if test "$cpu" = host; then
1603
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1604

    
1605
    case "$cc_type" in
1606
        gcc)
1607
            check_native(){
1608
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1609
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1610
            }
1611
            cpu=$(check_native -march || check_native -mcpu)
1612
        ;;
1613
    esac
1614

    
1615
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1616
fi
1617

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

    
1695
add_cflags $cpuflags
1696
add_asflags $cpuflags
1697

    
1698
# compiler sanity check
1699
check_exec <<EOF
1700
int main(void){ return 0; }
1701
EOF
1702
if test "$?" != 0; then
1703
    echo "$cc is unable to create an executable file."
1704
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1705
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1706
        echo "Only do this if you know what cross compiling means."
1707
    fi
1708
    die "C compiler test failed."
1709
fi
1710

    
1711
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1712
check_cflags -std=c99
1713
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1714
#include <stdlib.h>
1715
EOF
1716
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1717
#include <stdlib.h>
1718
EOF
1719

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

    
1808
enable $arch $subarch
1809

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

    
1967
    *)
1968
        die "Unknown OS '$target_os'."
1969
        ;;
1970
esac
1971

    
1972
set_default $PATHS_LIST
1973

    
1974
add_extralibs $osextralibs
1975

    
1976
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1977
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1978

    
1979
# we need to build at least one lib type
1980
if ! enabled_any static shared; then
1981
    cat <<EOF
1982
At least one library type must be built.
1983
Specify --enable-static to build the static libraries or --enable-shared to
1984
build the shared libraries as well. To only build the shared libraries specify
1985
--disable-static in addition to --enable-shared.
1986
EOF
1987
    exit 1;
1988
fi
1989

    
1990
disabled static && LIBNAME=""
1991

    
1992
if enabled_any libfaad libfaadbin ; then
1993
    if check_header faad.h; then
1994
        check_cc <<EOF
1995
#include <faad.h>
1996
#ifndef FAAD2_VERSION
1997
ok faad1
1998
#endif
1999
int main(void) { return 0; }
2000
EOF
2001
        test $? = 0 && enable libfaad2
2002
    else
2003
        die "FAAD test failed."
2004
    fi
2005
fi
2006

    
2007

    
2008
die_license_disabled() {
2009
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2010
}
2011

    
2012
die_license_disabled gpl libfaad2
2013
die_license_disabled gpl libx264
2014
die_license_disabled gpl libxvid
2015
die_license_disabled gpl postproc
2016
die_license_disabled gpl x11grab
2017

    
2018
die_license_disabled nonfree libfaac
2019

    
2020
die_license_disabled version3 libopencore_amrnb
2021
die_license_disabled version3 libopencore_amrwb
2022

    
2023
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2024

    
2025
check_deps $ARCH_EXT_LIST
2026

    
2027
disabled optimizations || check_cflags -fomit-frame-pointer
2028

    
2029
check_cc <<EOF || die "Symbol mangling check failed."
2030
int ff_extern;
2031
EOF
2032
sym=$($nm -P -g $TMPO | grep ff_extern)
2033
extern_prefix=${sym%%ff_extern*}
2034

    
2035
check_cc <<EOF && enable inline_asm
2036
void foo(void) { __asm__ volatile ("" ::); }
2037
EOF
2038

    
2039
_restrict=
2040
for restrict_keyword in restrict __restrict__ __restrict; do
2041
    check_cc <<EOF && _restrict=$restrict_keyword && break
2042
void foo(char * $restrict_keyword p);
2043
EOF
2044
done
2045

    
2046
check_cc <<EOF && enable attribute_packed
2047
struct { int x; } __attribute__((packed)) x;
2048
EOF
2049

    
2050
check_cc <<EOF || die "endian test failed"
2051
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2052
EOF
2053
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2054

    
2055
if enabled arm; then
2056

    
2057
    check_ld <<EOF && enable vfp_args
2058
__asm__ (".eabi_attribute 28, 1");
2059
int main(void) { return 0; }
2060
EOF
2061

    
2062
    # We have to check if pld is a nop and disable it.
2063
    check_asm pld '"pld [r0]"'
2064

    
2065
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2066
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2067
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2068
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2069
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2070
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2071

    
2072
elif enabled mips; then
2073

    
2074
    check_asm loongson '"dmult.g $1, $2, $3"'
2075
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2076

    
2077
elif enabled ppc; then
2078

    
2079
    check_asm dcbzl     '"dcbzl 0, 1"'
2080
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2081
    check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2082

    
2083
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2084
    if enabled altivec; then
2085
        check_cflags -maltivec -mabi=altivec &&
2086
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2087
        check_cflags -faltivec
2088

    
2089
        # check if our compiler supports Motorola AltiVec C API
2090
        check_cc <<EOF || disable altivec
2091
$inc_altivec_h
2092
int main(void) {
2093
    vector signed int v1, v2, v3;
2094
    v1 = vec_add(v2,v3);
2095
    return 0;
2096
}
2097
EOF
2098

    
2099
        # check if our compiler supports braces for vector declarations
2100
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2101
$inc_altivec_h
2102
int main (void) { (vector int) {1}; return 0; }
2103
EOF
2104
    fi
2105

    
2106
elif enabled sparc; then
2107

    
2108
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2109
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2110

    
2111
elif enabled x86; then
2112

    
2113
    # check whether EBP is available on x86
2114
    # As 'i' is stored on the stack, this program will crash
2115
    # if the base pointer is used to access it because the
2116
    # base pointer is cleared in the inline assembly code.
2117
    check_exec_crash <<EOF && enable ebp_available
2118
    volatile int i=0;
2119
    __asm__ volatile (
2120
        "xorl %%ebp, %%ebp"
2121
    ::: "%ebp");
2122
    return i;
2123
EOF
2124

    
2125
    # check wether EBX is available on x86
2126
    check_asm ebx_available '"":::"%ebx"'
2127

    
2128
    # check whether more than 10 operands are supported
2129
    check_cc <<EOF && enable ten_operands
2130
int main(void) {
2131
    int x=0;
2132
    __asm__ volatile(
2133
        ""
2134
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2135
    );
2136
    return 0;
2137
}
2138
EOF
2139

    
2140
    # check whether binutils is new enough to compile SSSE3/MMX2
2141
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2142
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2143

    
2144
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2145

    
2146
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2147
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2148
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2149
    case "$objformat" in
2150
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2151
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2152
        *)                    append YASMFLAGS "-DPREFIX"  ;;
2153
    esac
2154
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2155

    
2156
fi
2157

    
2158
if check_func dlopen; then
2159
    ldl=
2160
elif check_func dlopen -ldl; then
2161
    ldl=-ldl
2162
fi
2163

    
2164
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2165
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2166

    
2167
check_func  fork
2168
check_func  gethrtime
2169
check_func  getrusage
2170
check_func  inet_aton $network_extralibs
2171
check_func  isatty
2172
check_func  memalign
2173
check_func  mkstemp
2174
check_func  posix_memalign
2175
check_func_headers io.h setmode
2176
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2177
check_func_headers windows.h GetProcessTimes
2178
check_func_headers windows.h VirtualAlloc
2179

    
2180
check_header conio.h
2181
check_header dlfcn.h
2182
check_header malloc.h
2183
check_header poll.h
2184
check_header sys/mman.h
2185
check_header sys/resource.h
2186
check_header sys/select.h
2187
check_header termios.h
2188
check_header vdpau/vdpau.h
2189
check_header vdpau/vdpau_x11.h
2190
check_header X11/extensions/XvMClib.h
2191

    
2192
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2193
     enabled_any $need_memalign ; then
2194
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2195
fi
2196

    
2197
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2198
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2199

    
2200
# check for some common methods of building with pthread support
2201
# do this before the optional library checks as some of them require pthreads
2202
if enabled pthreads; then
2203
    if check_func pthread_create; then
2204
        :
2205
    elif check_func pthread_create -pthread; then
2206
        add_cflags -pthread
2207
        add_extralibs -pthread
2208
    elif check_func pthread_create -pthreads; then
2209
        add_cflags -pthreads
2210
        add_extralibs -pthreads
2211
    elif check_func pthread_create -lpthreadGC2; then
2212
        add_extralibs -lpthreadGC2
2213
    elif ! check_lib pthread.h pthread_create -lpthread; then
2214
        die "ERROR: can't find pthreads library"
2215
    fi
2216
fi
2217

    
2218
for thread in $THREADS_LIST; do
2219
    if enabled $thread; then
2220
        test -n "$thread_type" &&
2221
            die "ERROR: Only one thread type must be selected." ||
2222
            thread_type="$thread"
2223
    fi
2224
done
2225

    
2226
check_lib math.h sin -lm
2227
check_lib va/va.h vaInitialize -lva
2228

    
2229
check_func llrint
2230
check_func log2
2231
check_func lrint
2232
check_func lrintf
2233
check_func round
2234
check_func roundf
2235
check_func truncf
2236

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

    
2261
# libdc1394 check
2262
if enabled libdc1394; then
2263
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2264
        enable libdc1394_2; } ||
2265
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2266
        enable libdc1394_1; } ||
2267
    die "ERROR: No version of libdc1394 found "
2268
fi
2269

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

    
2296
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2297

    
2298
if enabled network; then
2299
    check_type "sys/types.h sys/socket.h" socklen_t
2300
    # Prefer arpa/inet.h over winsock2
2301
    if check_header arpa/inet.h ; then
2302
        check_func closesocket
2303
    elif check_header winsock2.h ; then
2304
        check_func_headers winsock2.h closesocket -lws2 && \
2305
            network_extralibs="-lws2" || \
2306
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2307
            network_extralibs="-lws2_32"; }
2308
        check_type ws2tcpip.h socklen_t
2309
    else
2310
        disable network
2311
    fi
2312
fi
2313

    
2314
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2315
#include <sys/types.h>
2316
#include <sys/socket.h>
2317
#include <netinet/in.h>
2318
#include <netdb.h>
2319
int main(void) {
2320
    struct sockaddr_storage saddr;
2321
    struct ipv6_mreq mreq6;
2322
    getaddrinfo(0,0,0,0);
2323
    getnameinfo(0,0,0,0,0,0,0);
2324
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2325
}
2326
EOF
2327

    
2328
check_header linux/videodev.h
2329
check_header linux/videodev2.h
2330
check_header sys/videoio.h
2331

    
2332
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2333

    
2334
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2335
{ check_header dev/bktr/ioctl_meteor.h &&
2336
  check_header dev/bktr/ioctl_bt848.h; } ||
2337
{ check_header machine/ioctl_meteor.h &&
2338
  check_header machine/ioctl_bt848.h; } ||
2339
{ check_header dev/video/meteor/ioctl_meteor.h &&
2340
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2341
check_header dev/ic/bt8xx.h
2342

    
2343
check_header sys/soundcard.h
2344
check_header soundcard.h
2345

    
2346
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2347

    
2348
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2349

    
2350
enabled x11grab                         &&
2351
check_header X11/Xlib.h                 &&
2352
check_header X11/extensions/XShm.h      &&
2353
check_func XOpenDisplay -lX11           &&
2354
check_func XShmCreateImage -lX11 -lXext
2355

    
2356
enabled debug && add_cflags -g"$debuglevel"
2357

    
2358
# add some useful compiler flags if supported
2359
check_cflags -Wdeclaration-after-statement
2360
check_cflags -Wall
2361
check_cflags -Wno-switch
2362
check_cflags -Wdisabled-optimization
2363
check_cflags -Wpointer-arith
2364
check_cflags -Wredundant-decls
2365
check_cflags -Wno-pointer-sign
2366
check_cflags -Wcast-qual
2367
check_cflags -Wwrite-strings
2368
check_cflags -Wtype-limits
2369
check_cflags -Wundef
2370
enabled extra_warnings && check_cflags -Winline
2371

    
2372
# add some linker flags
2373
check_ldflags -Wl,--warn-common
2374
check_ldflags -Wl,--as-needed
2375
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'
2376
check_ldflags -Wl,-Bsymbolic
2377

    
2378
if enabled small; then
2379
    check_cflags -Os            # not all compilers support -Os
2380
    optimizations="small"
2381
elif enabled optimizations; then
2382
    if enabled xlc; then
2383
        add_cflags  -O5
2384
        add_ldflags -O5
2385
    elif enabled ccc; then
2386
        add_cflags -fast
2387
    else
2388
        add_cflags -O3
2389
    fi
2390
fi
2391
check_cflags -fno-math-errno
2392
check_cflags -fno-signed-zeros
2393

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

    
2421
enabled pic && LIBOBJFLAGS='$(PIC)'
2422

    
2423
if enabled gprof; then
2424
    add_cflags  -p
2425
    add_ldflags -p
2426
fi
2427

    
2428
# Find out if the .align argument is a power of two or not.
2429
check_asm asmalign_pot '".align 3"'
2430

    
2431
enabled_any $DECODER_LIST      && enable decoders
2432
enabled_any $ENCODER_LIST      && enable encoders
2433
enabled_any $HWACCEL_LIST      && enable hwaccels
2434
enabled_any $BSF_LIST          && enable bsfs
2435
enabled_any $DEMUXER_LIST      && enable demuxers
2436
enabled_any $MUXER_LIST        && enable muxers
2437
enabled_any $FILTER_LIST       && enable filters
2438
enabled_any $INDEV_LIST        && enable indevs
2439
enabled_any $OUTDEV_LIST       && enable outdevs
2440
enabled_any $PROTOCOL_LIST     && enable protocols
2441

    
2442
enabled_any $THREADS_LIST      && enable threads
2443

    
2444
check_deps $CONFIG_LIST       \
2445
           $CONFIG_EXTRA      \
2446
           $HAVE_LIST         \
2447
           $DECODER_LIST      \
2448
           $ENCODER_LIST      \
2449
           $HWACCEL_LIST      \
2450
           $PARSER_LIST       \
2451
           $BSF_LIST          \
2452
           $DEMUXER_LIST      \
2453
           $MUXER_LIST        \
2454
           $FILTER_LIST       \
2455
           $INDEV_LIST        \
2456
           $OUTDEV_LIST       \
2457
           $PROTOCOL_LIST     \
2458

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

    
2547
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2548
    echo "Enabled ${type}s:"
2549
    eval list=\$$(toupper $type)_LIST
2550
    for part in $list; do
2551
        enabled $part && echo ${part%_*}
2552
    done | sort | pr -3 -t
2553
    echo
2554
done
2555

    
2556
license="LGPL version 2.1 or later"
2557
if enabled nonfree; then
2558
    license="nonfree and unredistributable"
2559
elif enabled gplv3; then
2560
    license="GPL version 3 or later"
2561
elif enabled lgplv3; then
2562
    license="LGPL version 3 or later"
2563
elif enabled gpl; then
2564
    license="GPL version 2 or later"
2565
fi
2566

    
2567
echo "License: $license"
2568

    
2569
echo "Creating config.mak and config.h..."
2570

    
2571
echo "# Automatically generated by configure - do not modify!" > config.mak
2572
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2573
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2574
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2575
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2576
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2577

    
2578
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2579
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2580

    
2581
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2582
echo "prefix=$prefix" >> config.mak
2583
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2584
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2585
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2586
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2587
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2588
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2589
echo "SRC_PATH=\"$source_path\"" >> config.mak
2590
echo "SRC_PATH_BARE=$source_path" >> config.mak
2591
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2592
echo "CC=$cc" >> config.mak
2593
echo "AS=$as" >> config.mak
2594
echo "LD=$ld" >> config.mak
2595
echo "DEPCC=$dep_cc" >> config.mak
2596
echo "YASM=$yasmexe" >> config.mak
2597
echo "AR=$ar" >> config.mak
2598
echo "RANLIB=$ranlib" >> config.mak
2599
echo "LN_S=$ln_s" >> config.mak
2600
enabled stripping &&
2601
    echo "STRIP=$strip" >> config.mak ||
2602
    echo "STRIP=echo ignoring strip" >> config.mak
2603

    
2604
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2605
echo "CFLAGS=$CFLAGS" >> config.mak
2606
echo "ASFLAGS=$ASFLAGS" >> config.mak
2607
echo "CC_O=$CC_O" >> config.mak
2608
echo "LDFLAGS=$LDFLAGS" >> config.mak
2609
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2610
echo "SHFLAGS=$SHFLAGS" >> config.mak
2611
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2612
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2613
echo "PIC=-fPIC -DPIC" >> config.mak
2614
echo "BUILDSUF=$build_suffix" >> config.mak
2615
echo "FULLNAME=$FULLNAME" >> config.mak
2616
echo "LIBPREF=$LIBPREF" >> config.mak
2617
echo "LIBSUF=$LIBSUF" >> config.mak
2618
echo "LIBNAME=$LIBNAME" >> config.mak
2619
echo "SLIBPREF=$SLIBPREF" >> config.mak
2620
echo "SLIBSUF=$SLIBSUF" >> config.mak
2621
echo "EXESUF=$EXESUF" >> config.mak
2622
echo "EXTRA_VERSION=$extra_version" >> config.mak
2623
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2624
echo "CCDEP=$CCDEP" >> config.mak
2625
echo "ASDEP=$ASDEP" >> config.mak
2626
echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2627
echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2628
echo "HOSTCC=$host_cc" >> config.mak
2629
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2630
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2631
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2632
echo "HOSTLIBS=$host_libs" >> config.mak
2633
echo "TARGET_EXEC=$target_exec" >> config.mak
2634
echo "TARGET_PATH=$target_path" >> config.mak
2635

    
2636
if enabled sdl; then
2637
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2638
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2639
fi
2640
if enabled texi2html; then
2641
    echo "BUILD_DOC=yes" >> config.mak
2642
fi
2643

    
2644
get_version(){
2645
    name=$1
2646
    file=$source_path/$2
2647
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2648
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2649
    lcname=$(tolower $name)
2650
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2651
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2652
}
2653

    
2654
get_version LIBSWSCALE  libswscale/swscale.h
2655
get_version LIBPOSTPROC libpostproc/postprocess.h
2656
get_version LIBAVCODEC  libavcodec/avcodec.h
2657
get_version LIBAVDEVICE libavdevice/avdevice.h
2658
get_version LIBAVFORMAT libavformat/avformat.h
2659
get_version LIBAVUTIL   libavutil/avutil.h
2660
get_version LIBAVFILTER libavfilter/avfilter.h
2661

    
2662
if enabled shared; then
2663
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2664
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2665
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2666
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2667
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2668
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2669
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2670
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2671
fi
2672
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2673
echo "EXTRALIBS=$extralibs" >> config.mak
2674

    
2675
echo "ARCH=$arch" >> config.mak
2676

    
2677
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2678
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2679
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2680
                                      $CONFIG_EXTRA      \
2681
                                      $DECODER_LIST      \
2682
                                      $ENCODER_LIST      \
2683
                                      $HWACCEL_LIST      \
2684
                                      $PARSER_LIST       \
2685
                                      $BSF_LIST          \
2686
                                      $DEMUXER_LIST      \
2687
                                      $MUXER_LIST        \
2688
                                      $FILTER_LIST       \
2689
                                      $PROTOCOL_LIST     \
2690
                                      $INDEV_LIST        \
2691
                                      $OUTDEV_LIST       \
2692

    
2693
echo "#define restrict $_restrict" >> $TMPH
2694

    
2695
if enabled small || disabled optimizations; then
2696
    echo "#define av_always_inline"  >> $TMPH
2697
fi
2698

    
2699

    
2700
# Apparently it's not possible to portably echo a backslash.
2701
enabled asmalign_pot &&
2702
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2703
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2704

    
2705
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2706

    
2707
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2708
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2709

    
2710
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2711
cmp -s $TMPH config.h &&
2712
    echo "config.h is unchanged" ||
2713
    mv -f $TMPH config.h
2714

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

    
2763

    
2764
# build pkg-config files
2765

    
2766
pkgconfig_generate(){
2767
name=$1
2768
shortname=${name#lib}${build_suffix}
2769
comment=$2
2770
version=$3
2771
libs=$4
2772
requires=$5
2773
cat <<EOF > $name/$name.pc
2774
prefix=$prefix
2775
exec_prefix=\${prefix}
2776
libdir=$libdir
2777
includedir=$incdir
2778

    
2779
Name: $name
2780
Description: $comment
2781
Version: $version
2782
Requires: $(disabled shared && echo $requires)
2783
Requires.private: $(enabled shared && echo $requires)
2784
Conflicts:
2785
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2786
Libs.private: $(enabled shared && echo $libs)
2787
Cflags: -I\${includedir}
2788
EOF
2789
cat <<EOF > $name/$name-uninstalled.pc
2790
prefix=
2791
exec_prefix=
2792
libdir=\${pcfiledir}
2793
includedir=${source_path}
2794

    
2795
Name: $name
2796
Description: $comment
2797
Version: $version
2798
Requires: $requires
2799
Conflicts:
2800
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2801
Cflags: -I\${includedir}
2802
EOF
2803
}
2804

    
2805
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2806
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2807
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2808
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2809
enabled avfilter &&
2810
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2811
enabled postproc &&
2812
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2813
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"