Statistics
| Branch: | Revision:

ffmpeg / configure @ 2b2c2a81

History | View | Annotate | Download (79.2 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
523
add_asflags(){
524
    append ASFLAGS $($filter_asflags "$@")
525
}
526

    
527
add_ldflags(){
528
    append LDFLAGS "$@"
529
}
530

    
531
add_extralibs(){
532
    append extralibs "$@"
533
}
534

    
535
check_cmd(){
536
    log "$@"
537
    "$@" >> $logfile 2>&1
538
}
539

    
540
check_cc(){
541
    log check_cc "$@"
542
    cat > $TMPC
543
    log_file $TMPC
544
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
545
}
546

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

    
554
check_as(){
555
    log check_as "$@"
556
    cat > $TMPC
557
    log_file $TMPC
558
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
559
}
560

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

    
571
check_yasm(){
572
    log check_yasm "$@"
573
    echo "$1" > $TMPS
574
    log_file $TMPS
575
    shift 1
576
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
577
}
578

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

    
590
check_cppflags(){
591
    log check_cppflags "$@"
592
    set -- $($filter_cppflags "$@")
593
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
594
int x;
595
EOF
596
}
597

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

    
606
check_ldflags(){
607
    log check_ldflags "$@"
608
    check_ld "$@" <<EOF && add_ldflags "$@"
609
int main(void){ return 0; }
610
EOF
611
}
612

    
613
check_header(){
614
    log check_header "$@"
615
    header=$1
616
    shift
617
    disable_safe $header
618
    check_cpp "$@" <<EOF && enable_safe $header
619
#include <$header>
620
int x;
621
EOF
622
}
623

    
624
check_func(){
625
    log check_func "$@"
626
    func=$1
627
    shift
628
    disable $func
629
    check_ld "$@" <<EOF && enable $func
630
extern int $func();
631
int main(void){ $func(); }
632
EOF
633
}
634

    
635
check_func_headers(){
636
    log check_func_headers "$@"
637
    headers=$1
638
    func=$2
639
    shift 2
640
    disable $func
641
    incs=""
642
    for hdr in $headers; do
643
        incs="$incs
644
#include <$hdr>"
645
    done
646
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
647
$incs
648
int main(int argc, char **argv){
649
    return (long) $func;
650
}
651
EOF
652
}
653

    
654
check_cpp_condition(){
655
    log check_cpp_condition "$@"
656
    header=$1
657
    condition=$2
658
    check_cpp <<EOF
659
#include <$header>
660
#if !($condition)
661
#error "unsatisfied condition: $condition"
662
#endif
663
EOF
664
}
665

    
666
check_lib(){
667
    log check_lib "$@"
668
    header="$1"
669
    func="$2"
670
    shift 2
671
    temp_extralibs "$@"
672
    check_header $header && check_func $func && add_extralibs "$@"
673
    err=$?
674
    restore_flags
675
    return $err
676
}
677

    
678
check_lib2(){
679
    log check_lib2 "$@"
680
    headers="$1"
681
    func="$2"
682
    shift 2
683
    temp_extralibs "$@"
684
    check_func_headers "$headers" $func && add_extralibs "$@"
685
    err=$?
686
    restore_flags
687
    return $err
688
}
689

    
690
check_exec(){
691
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
692
}
693

    
694
check_exec_crash(){
695
    code=$(cat)
696

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

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

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

    
737
require(){
738
    name="$1"
739
    header="$2"
740
    func="$3"
741
    shift 3
742
    check_lib $header $func "$@" || die "ERROR: $name not found"
743
}
744

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

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

    
770
apply(){
771
    file=$1
772
    shift
773
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
774
}
775

    
776
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
777
# system-dependent things.
778

    
779
COMPONENT_LIST="
780
    bsfs
781
    decoders
782
    demuxers
783
    encoders
784
    filters
785
    hwaccels
786
    indevs
787
    muxers
788
    outdevs
789
    parsers
790
    protocols
791
"
792

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

    
850
THREADS_LIST='
851
    beosthreads
852
    os2threads
853
    pthreads
854
    w32threads
855
'
856

    
857
ARCH_LIST='
858
    alpha
859
    arm
860
    bfin
861
    ia64
862
    m68k
863
    mips
864
    mips64
865
    parisc
866
    ppc
867
    ppc64
868
    s390
869
    sh4
870
    sparc
871
    sparc64
872
    x86
873
    x86_32
874
    x86_64
875
'
876

    
877
ARCH_EXT_LIST='
878
    altivec
879
    amd3dnow
880
    amd3dnowext
881
    armv5te
882
    armv6
883
    armv6t2
884
    armvfp
885
    iwmmxt
886
    mmi
887
    mmx
888
    mmx2
889
    neon
890
    ppc4xx
891
    sse
892
    ssse3
893
    vis
894
'
895

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

    
966
# options emitted with CONFIG_ prefix but not available on command line
967
CONFIG_EXTRA="
968
    gplv3
969
    lgplv3
970
"
971

    
972
CMDLINE_SELECT="
973
    $ARCH_EXT_LIST
974
    $CONFIG_LIST
975
    $THREADS_LIST
976
    cross_compile
977
    debug
978
    extra_warnings
979
    logging
980
    optimizations
981
    stripping
982
    yasm
983
"
984

    
985
PATHS_LIST='
986
    bindir
987
    datadir
988
    incdir
989
    libdir
990
    mandir
991
    prefix
992
    shlibdir
993
'
994

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

    
1022
# code dependency declarations
1023

    
1024
# architecture extensions
1025
altivec_deps="ppc"
1026
amd3dnow_deps="mmx"
1027
amd3dnowext_deps="amd3dnow"
1028
armv5te_deps="arm"
1029
armv6_deps="arm"
1030
armv6t2_deps="arm"
1031
armvfp_deps="arm"
1032
iwmmxt_deps="arm"
1033
mmi_deps="mips"
1034
mmx_deps="x86"
1035
mmx2_deps="mmx"
1036
neon_deps="arm"
1037
ppc4xx_deps="ppc"
1038
sse_deps="mmx"
1039
ssse3_deps="sse"
1040
vis_deps="sparc"
1041

    
1042
need_memalign="altivec neon sse"
1043

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

    
1133
# parsers
1134
h264_parser_select="golomb"
1135

    
1136
# external libraries
1137
libdirac_decoder_deps="libdirac !libschroedinger"
1138
libdirac_encoder_deps="libdirac"
1139
libfaac_encoder_deps="libfaac"
1140
libfaad_decoder_deps="libfaad"
1141
libfaadbin_decoder_extralibs='$ldl'
1142
libgsm_decoder_deps="libgsm"
1143
libgsm_encoder_deps="libgsm"
1144
libgsm_ms_decoder_deps="libgsm"
1145
libgsm_ms_encoder_deps="libgsm"
1146
libmp3lame_encoder_deps="libmp3lame"
1147
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1148
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1149
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1150
libopenjpeg_decoder_deps="libopenjpeg"
1151
libschroedinger_decoder_deps="libschroedinger"
1152
libschroedinger_encoder_deps="libschroedinger"
1153
libspeex_decoder_deps="libspeex"
1154
libtheora_encoder_deps="libtheora"
1155
libvorbis_encoder_deps="libvorbis"
1156
libx264_encoder_deps="libx264"
1157
libxvid_encoder_deps="libxvid"
1158

    
1159
# demuxers / muxers
1160
ac3_demuxer_deps="ac3_parser"
1161
asf_stream_muxer_select="asf_muxer"
1162
avisynth_demuxer_deps="avisynth"
1163
dirac_demuxer_deps="dirac_parser"
1164
ipod_muxer_select="mov_muxer"
1165
libnut_demuxer_deps="libnut"
1166
libnut_muxer_deps="libnut"
1167
matroska_audio_muxer_select="matroska_muxer"
1168
matroska_demuxer_suggest="zlib bzlib"
1169
mov_demuxer_suggest="zlib"
1170
mp3_demuxer_deps="mpegaudio_parser"
1171
mp4_muxer_select="mov_muxer"
1172
mpegtsraw_demuxer_select="mpegts_demuxer"
1173
mxf_d10_muxer_select="mxf_muxer"
1174
psp_muxer_select="mov_muxer"
1175
redir_demuxer_deps="network"
1176
rtp_muxer_deps="network rtp_protocol"
1177
rtsp_demuxer_deps="sdp_demuxer"
1178
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1179
tg2_muxer_select="mov_muxer"
1180
tgp_muxer_select="mov_muxer"
1181

    
1182
# indevs / outdevs
1183
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1184
alsa_indev_extralibs="-lasound"
1185
alsa_outdev_deps="alsa_asoundlib_h"
1186
alsa_outdev_extralibs="-lasound"
1187
audio_beos_indev_deps="audio_beos"
1188
audio_beos_indev_extralibs="-lmedia -lbe"
1189
audio_beos_outdev_deps="audio_beos"
1190
audio_beos_outdev_extralibs="-lmedia -lbe"
1191
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1192
dv1394_indev_deps="dv1394 dv_demuxer"
1193
jack_indev_deps="jack_jack_h"
1194
jack_indev_extralibs="-ljack"
1195
libdc1394_indev_deps="libdc1394"
1196
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1197
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1198
v4l_indev_deps="linux_videodev_h"
1199
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1200
vfwcap_indev_deps="capCreateCaptureWindow"
1201
vfwcap_indev_extralibs="-lvfw32"
1202
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1203
x11_grab_device_indev_extralibs="-lX11 -lXext"
1204

    
1205
# protocols
1206
gopher_protocol_deps="network"
1207
http_protocol_deps="network"
1208
rtp_protocol_deps="udp_protocol"
1209
tcp_protocol_deps="network"
1210
udp_protocol_deps="network"
1211

    
1212
# filters
1213
movie_filter_deps="avfilter_lavf"
1214

    
1215
# programs
1216
ffplay_deps="sdl"
1217
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1218
ffserver_extralibs='$ldl'
1219

    
1220

    
1221
# default parameters
1222

    
1223
logfile="config.err"
1224

    
1225
# installation paths
1226
prefix_default="/usr/local"
1227
bindir_default='${prefix}/bin'
1228
datadir_default='${prefix}/share/ffmpeg'
1229
incdir_default='${prefix}/include'
1230
libdir_default='${prefix}/lib'
1231
mandir_default='${prefix}/share/man'
1232
shlibdir_default="$libdir_default"
1233

    
1234
# toolchain
1235
ar="ar"
1236
cc_default="gcc"
1237
host_cc_default="gcc"
1238
ln_s="ln -sf"
1239
nm_default="nm"
1240
objformat="elf"
1241
ranlib="ranlib"
1242
strip="strip"
1243
yasmexe="yasm"
1244

    
1245
# machine
1246
arch=$(uname -m)
1247
cpu="generic"
1248

    
1249
# OS
1250
target_os=$(tolower $(uname -s))
1251
host_os=$target_os
1252

    
1253
# configurable options
1254
enable debug
1255
enable fastdiv
1256
enable ffmpeg
1257
enable ffplay
1258
enable ffserver
1259
enable ipv6
1260
enable mpegaudio_hp
1261
enable network
1262
enable optimizations
1263
enable protocols
1264
enable static
1265
enable stripping
1266
enable swscale_alpha
1267

    
1268
# build settings
1269
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1270
FFSERVERLDFLAGS=-Wl,-E
1271
LIBPREF="lib"
1272
LIBSUF=".a"
1273
FULLNAME='$(NAME)$(BUILDSUF)'
1274
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1275
SLIBPREF="lib"
1276
SLIBSUF=".so"
1277
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1278
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1279
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1280
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1281

    
1282
CC_O='-o $@'
1283

    
1284
host_cflags='-O3 -g -Wall'
1285
host_libs='-lm'
1286

    
1287
target_path='.'
1288

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

    
1294
# find source path
1295
source_path="$(dirname "$0")"
1296
enable source_path_used
1297
if test -z "$source_path" -o "$source_path" = "." ; then
1298
    source_path="$(pwd)"
1299
    disable source_path_used
1300
else
1301
    source_path="$(cd "$source_path"; pwd)"
1302
    echo "$source_path" | grep -q '[[:blank:]]' &&
1303
        die "Out of tree builds are impossible with whitespace in source path."
1304
    test -e "$source_path/config.h" &&
1305
        die "Out of tree builds are impossible with config.h in source dir."
1306
fi
1307

    
1308
for v in "$@"; do
1309
    r=${v#*=}
1310
    l=${v%"$r"}
1311
    r=$(sh_quote "$r")
1312
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1313
done
1314

    
1315
find_things(){
1316
    thing=$1
1317
    pattern=$2
1318
    file=$source_path/$3
1319
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1320
}
1321

    
1322
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1323
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1324
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1325
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1326
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1327
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1328
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1329
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1330
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1331
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1332
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1333

    
1334
enable $ARCH_EXT_LIST \
1335
       $DECODER_LIST \
1336
       $ENCODER_LIST \
1337
       $HWACCEL_LIST \
1338
       $PARSER_LIST \
1339
       $BSF_LIST \
1340
       $DEMUXER_LIST \
1341
       $MUXER_LIST \
1342
       $FILTER_LIST \
1343
       $PROTOCOL_LIST \
1344
       $INDEV_LIST \
1345
       $OUTDEV_LIST \
1346

    
1347
die_unknown(){
1348
    echo "Unknown option \"$1\"."
1349
    echo "See $0 --help for available options."
1350
    exit 1
1351
}
1352

    
1353
show_list() {
1354
    suffix=_$1
1355
    shift
1356
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1357
    exit 0
1358
}
1359

    
1360
for opt do
1361
    optval="${opt#*=}"
1362
    case "$opt" in
1363
    --extra-ldflags=*) add_ldflags $optval
1364
    ;;
1365
    --extra-libs=*) add_extralibs $optval
1366
    ;;
1367
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1368
    ;;
1369
    --enable-debug=*) debuglevel="$optval"
1370
    ;;
1371
    --enable-*=*|--disable-*=*)
1372
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1373
    case "$thing" in
1374
        encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1375
        *) die_unknown "$opt" ;;
1376
    esac
1377
    ;;
1378
    --enable-?*|--disable-?*)
1379
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1380
    if is_in $option $COMPONENT_LIST; then
1381
        test $action = disable && action=unset
1382
        eval $action \$$(toupper ${option%s})_LIST
1383
    elif is_in $option $CMDLINE_SELECT; then
1384
        $action $option
1385
    else
1386
        die_unknown $opt
1387
    fi
1388
    ;;
1389
    --list-*)
1390
        NAME="${opt#--list-}"
1391
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1392
        NAME=${NAME%s}
1393
        eval show_list $NAME \$$(toupper $NAME)_LIST
1394
    ;;
1395
    --help|-h) show_help
1396
    ;;
1397
    *)
1398
    optname="${opt%%=*}"
1399
    optname="${optname#--}"
1400
    optname=$(echo "$optname" | sed 's/-/_/g')
1401
    is_in $optname $CMDLINE_SET || die_unknown $opt
1402
    eval $optname='$optval'
1403
    ;;
1404
    esac
1405
done
1406

    
1407
disabled logging && logfile=/dev/null
1408

    
1409
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1410
set >> $logfile
1411

    
1412
test -n "$cross_prefix" && enable cross_compile
1413

    
1414
ar="${cross_prefix}${ar}"
1415
cc_default="${cross_prefix}${cc_default}"
1416
nm_default="${cross_prefix}${nm_default}"
1417
ranlib="${cross_prefix}${ranlib}"
1418
strip="${cross_prefix}${strip}"
1419

    
1420
sysinclude_default="${sysroot}/usr/include"
1421

    
1422
set_default cc nm sysinclude
1423
enabled cross_compile || host_cc_default=$cc
1424
set_default host_cc
1425

    
1426
exesuf() {
1427
    case $1 in
1428
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1429
    esac
1430
}
1431

    
1432
EXESUF=$(exesuf $target_os)
1433
HOSTEXESUF=$(exesuf $host_os)
1434

    
1435
# set temporary file name
1436
: ${TMPDIR:=$TEMPDIR}
1437
: ${TMPDIR:=$TMP}
1438
: ${TMPDIR:=/tmp}
1439

    
1440
if ! check_cmd type mktemp; then
1441
    # simple replacement for missing mktemp
1442
    # NOT SAFE FOR GENERAL USE
1443
    mktemp(){
1444
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1445
    }
1446
fi
1447

    
1448
tmpfile(){
1449
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1450
        (set -C; exec > $tmp) 2>/dev/null ||
1451
        die "Unable to create temoporary file in $TMPDIR."
1452
    append TMPFILES $tmp
1453
    eval $1=$tmp
1454
}
1455

    
1456
trap 'rm -f -- $TMPFILES' EXIT
1457
trap exit HUP INT TERM
1458

    
1459
tmpfile TMPC  .c
1460
tmpfile TMPE  $EXESUF
1461
tmpfile TMPH  .h
1462
tmpfile TMPO  .o
1463
tmpfile TMPS  .S
1464
tmpfile TMPSH .sh
1465

    
1466
unset -f mktemp
1467

    
1468
# make sure we can execute files in $TMPDIR
1469
cat > $TMPSH 2>> $logfile <<EOF
1470
#! /bin/sh
1471
EOF
1472
chmod +x $TMPSH >> $logfile 2>&1
1473
if ! $TMPSH >> $logfile 2>&1; then
1474
    cat <<EOF
1475
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1476
variable to another directory and make sure that it is not mounted noexec.
1477
EOF
1478
    die "Sanity test failed."
1479
fi
1480

    
1481
filter_cflags=echo
1482
filter_cppflags=echo
1483
filter_asflags=echo
1484

    
1485
if   $cc --version 2>/dev/null | grep -qi gcc; then
1486
    cc_type=gcc
1487
elif $cc --version 2>/dev/null | grep -q Intel; then
1488
    cc_type=icc
1489
elif $cc -v 2>&1 | grep -q xlc; then
1490
    cc_type=xlc
1491
elif $cc -V 2>/dev/null | grep -q Compaq; then
1492
    cc_type=ccc
1493
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1494
    debuglevel=3
1495
    add_ldflags -Wl,-z,now # calls to libots crash without this
1496
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1497
    test -d "$sysroot" || die "No valid sysroot specified."
1498
    cc_type=armcc
1499
    armcc_conf="$PWD/armcc.conf"
1500
    $cc --arm_linux_configure                 \
1501
        --arm_linux_config_file="$armcc_conf" \
1502
        --configure_sysroot="$sysroot"        \
1503
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1504
        die "Error creating armcc configuration file."
1505
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1506
    as_default="${cross_prefix}gcc"
1507
fi
1508

    
1509
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1510

    
1511
: ${as_default:=$cc}
1512
: ${dep_cc_default:=$cc}
1513
: ${ld_default:=$cc}
1514
set_default as dep_cc ld
1515

    
1516
add_cflags $extra_cflags
1517
add_asflags $extra_cflags
1518

    
1519
if test -n "$sysroot"; then
1520
    case "$cc_type" in
1521
        gcc)
1522
            add_cppflags --sysroot="$sysroot"
1523
            add_ldflags --sysroot="$sysroot"
1524
        ;;
1525
    esac
1526
fi
1527

    
1528
# compiler sanity check
1529
check_exec <<EOF
1530
int main(void){ return 0; }
1531
EOF
1532
if test "$?" != 0; then
1533
    echo "$cc is unable to create an executable file."
1534
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1535
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1536
        echo "Only do this if you know what cross compiling means."
1537
    fi
1538
    die "C compiler test failed."
1539
fi
1540

    
1541
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1542
check_cflags -std=c99
1543
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1544
#include <stdlib.h>
1545
EOF
1546
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1547
#include <stdlib.h>
1548
EOF
1549

    
1550
case "$arch" in
1551
    alpha)
1552
        arch="alpha"
1553
        enable fast_64bit
1554
        check_cflags -mieee
1555
    ;;
1556
    arm|armv[4567]*l)
1557
        arch="arm"
1558
    ;;
1559
    avr32)
1560
    ;;
1561
    bfin)
1562
        arch="bfin"
1563
    ;;
1564
    ia64)
1565
        arch="ia64"
1566
        enable fast_64bit
1567
    ;;
1568
    m68k)
1569
        arch="m68k"
1570
    ;;
1571
    mips|mipsel|IP*)
1572
        arch="mips"
1573
    ;;
1574
    mips64)
1575
        arch="mips"
1576
        subarch="mips64"
1577
        enable fast_64bit
1578
    ;;
1579
    parisc|hppa)
1580
        arch="parisc"
1581
    ;;
1582
    parisc64|hppa64)
1583
        arch="parisc"
1584
        enable fast_64bit
1585
    ;;
1586
    "Power Macintosh"|ppc|powerpc)
1587
        arch="ppc"
1588
        enable fast_unaligned
1589
    ;;
1590
    ppc64)
1591
        arch="ppc"
1592
        subarch="ppc64"
1593
        enable fast_64bit
1594
        enable fast_unaligned
1595
    ;;
1596
    s390|s390x)
1597
        arch="s390"
1598
    ;;
1599
    sh4|sh)
1600
        arch="sh4"
1601
    ;;
1602
    sparc)
1603
        arch="sparc"
1604
    ;;
1605
    sun4u|sparc64)
1606
        arch="sparc"
1607
        subarch="sparc64"
1608
        enable fast_64bit
1609
    ;;
1610
    i386|i486|i586|i686|i86pc|BePC)
1611
        arch="x86"
1612
        subarch="x86_32"
1613
        enable fast_unaligned
1614
    ;;
1615
    x86_64|amd64)
1616
        arch="x86"
1617
        subarch="x86_32"
1618
        enable cmov
1619
        enable fast_cmov
1620
        enable fast_unaligned
1621
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1622
        int test[sizeof(char*) - 7];
1623
EOF
1624
    ;;
1625
    *)
1626
        arch="unknown"
1627
    ;;
1628
esac
1629

    
1630
enable $arch $subarch
1631

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

    
1784
    *)
1785
        die "Unknown OS '$target_os'."
1786
        ;;
1787
esac
1788

    
1789
set_default $PATHS_LIST
1790

    
1791
add_extralibs $osextralibs
1792

    
1793
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1794
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1795

    
1796
# we need to build at least one lib type
1797
if ! enabled_any static shared; then
1798
    cat <<EOF
1799
At least one library type must be built.
1800
Specify --enable-static to build the static libraries or --enable-shared to
1801
build the shared libraries as well. To only build the shared libraries specify
1802
--disable-static in addition to --enable-shared.
1803
EOF
1804
    exit 1;
1805
fi
1806

    
1807
disabled static && LIBNAME=""
1808

    
1809
if enabled_any libfaad libfaadbin ; then
1810
    if check_header faad.h; then
1811
        check_cc <<EOF
1812
#include <faad.h>
1813
#ifndef FAAD2_VERSION
1814
ok faad1
1815
#endif
1816
int main(void) { return 0; }
1817
EOF
1818
        test $? = 0 && enable libfaad2
1819
    else
1820
        die "FAAD test failed."
1821
    fi
1822
fi
1823

    
1824

    
1825
die_license_disabled() {
1826
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1827
}
1828

    
1829
die_license_disabled gpl libfaad2
1830
die_license_disabled gpl libx264
1831
die_license_disabled gpl libxvid
1832
die_license_disabled gpl postproc
1833
die_license_disabled gpl x11grab
1834

    
1835
die_license_disabled nonfree libfaac
1836

    
1837
die_license_disabled version3 libopencore_amrnb
1838
die_license_disabled version3 libopencore_amrwb
1839

    
1840
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1841

    
1842
check_deps $ARCH_EXT_LIST
1843

    
1844
#Darwin CC versions
1845
if test $target_os = darwin; then
1846
    if enabled xlc; then
1847
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1848
    else
1849
        add_cflags -pipe
1850
        check_cflags -force_cpusubtype_ALL
1851
        check_cflags -Wno-sign-compare
1852
        enabled shared || check_cflags -mdynamic-no-pic
1853
    fi
1854
fi
1855

    
1856
disabled optimizations || check_cflags -fomit-frame-pointer
1857

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

    
1946
add_cflags $cpuflags
1947
add_asflags $cpuflags
1948

    
1949
check_cc <<EOF || die "Symbol mangling check failed."
1950
int ff_extern;
1951
EOF
1952
sym=$($nm -P -g $TMPO | grep ff_extern)
1953
extern_prefix=${sym%%ff_extern*}
1954

    
1955
check_cc <<EOF && enable inline_asm
1956
void foo(void) { __asm__ volatile ("" ::); }
1957
EOF
1958

    
1959
if enabled x86; then
1960
    # check whether EBP is available on x86
1961
    # As 'i' is stored on the stack, this program will crash
1962
    # if the base pointer is used to access it because the
1963
    # base pointer is cleared in the inline assembly code.
1964
    check_exec_crash <<EOF && enable ebp_available
1965
    volatile int i=0;
1966
    __asm__ volatile (
1967
        "xorl %%ebp, %%ebp"
1968
    ::: "%ebp");
1969
    return i;
1970
EOF
1971

    
1972
    # check wether EBX is available on x86
1973
    check_asm ebx_available '"":::"%ebx"'
1974

    
1975
    # check whether more than 10 operands are supported
1976
    check_cc <<EOF && enable ten_operands
1977
int main(void) {
1978
    int x=0;
1979
    __asm__ volatile(
1980
        ""
1981
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1982
    );
1983
    return 0;
1984
}
1985
EOF
1986

    
1987
    # check whether binutils is new enough to compile SSSE3/MMX2
1988
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1989
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1990

    
1991
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1992

    
1993
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1994
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1995
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1996
    case "$objformat" in
1997
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1998
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1999
        *)                    append YASMFLAGS "-DPREFIX"  ;;
2000
    esac
2001
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2002
fi
2003

    
2004
# check for assembler specific support
2005

    
2006
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
2007

    
2008
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
2009
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
2010
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2011

    
2012
# check for SIMD availability
2013

    
2014
# AltiVec flags: The FSF version of GCC differs from the Apple version
2015
if enabled altivec; then
2016
    check_cflags -maltivec -mabi=altivec &&
2017
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2018
        check_cflags -faltivec
2019

    
2020
    # check if our compiler supports Motorola AltiVec C API
2021
    check_cc <<EOF || disable altivec
2022
$inc_altivec_h
2023
int main(void) {
2024
    vector signed int v1, v2, v3;
2025
    v1 = vec_add(v2,v3);
2026
    return 0;
2027
}
2028
EOF
2029

    
2030
    # check if our compiler supports braces for vector declarations
2031
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2032
$inc_altivec_h
2033
int main (void) { (vector int) {1}; return 0; }
2034
EOF
2035
fi
2036

    
2037
# We have to check if pld is a nop and disable it.
2038
enabled arm     && check_asm pld     '"pld [r0]"'
2039
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2040
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2041
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2042
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2043
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2044
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2045
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2046
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2047

    
2048
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2049

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

    
2057
# ---
2058
# check availability of some header files
2059

    
2060
if check_func dlopen; then
2061
    ldl=
2062
elif check_func dlopen -ldl; then
2063
    ldl=-ldl
2064
fi
2065

    
2066
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2067
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2068

    
2069
check_func  fork
2070
check_func  gethrtime
2071
check_func  getrusage
2072
check_func  inet_aton $network_extralibs
2073
check_func  memalign
2074
check_func  mkstemp
2075
check_func  posix_memalign
2076
check_func_headers io.h setmode
2077
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2078
check_func_headers windows.h GetProcessTimes
2079
check_func_headers windows.h VirtualAlloc
2080

    
2081
check_header conio.h
2082
check_header dlfcn.h
2083
check_header malloc.h
2084
check_header poll.h
2085
check_header sys/mman.h
2086
check_header sys/resource.h
2087
check_header sys/select.h
2088
check_header termios.h
2089
check_header vdpau/vdpau.h
2090
check_header vdpau/vdpau_x11.h
2091
check_header X11/extensions/XvMClib.h
2092

    
2093
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2094
     enabled_any $need_memalign ; then
2095
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2096
fi
2097

    
2098
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2099
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2100

    
2101
# check for some common methods of building with pthread support
2102
# do this before the optional library checks as some of them require pthreads
2103
if enabled pthreads; then
2104
    if check_func pthread_create; then
2105
        :
2106
    elif check_func pthread_create -pthread; then
2107
        add_cflags -pthread
2108
        add_extralibs -pthread
2109
    elif check_func pthread_create -pthreads; then
2110
        add_cflags -pthreads
2111
        add_extralibs -pthreads
2112
    elif check_func pthread_create -lpthreadGC2; then
2113
        add_extralibs -lpthreadGC2
2114
    elif ! check_lib pthread.h pthread_create -lpthread; then
2115
        die "ERROR: can't find pthreads library"
2116
    fi
2117
fi
2118

    
2119
for thread in $THREADS_LIST; do
2120
    if enabled $thread; then
2121
        test -n "$thread_type" &&
2122
            die "ERROR: Only one thread type must be selected." ||
2123
            thread_type="$thread"
2124
    fi
2125
done
2126

    
2127
check_lib math.h sin -lm
2128
check_lib va/va.h vaInitialize -lva
2129

    
2130
check_func llrint
2131
check_func log2
2132
check_func lrint
2133
check_func lrintf
2134
check_func round
2135
check_func roundf
2136
check_func truncf
2137

    
2138
# these are off by default, so fail if requested and not available
2139
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2140
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2141
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2142
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2143
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2144
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2145
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2146
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2147
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2148
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2149
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2150
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2151
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2152
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2153
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2154
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2155
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2156
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2157
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2158
                        die "ERROR: libx264 version must be >= 0.65."; }
2159
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2160
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2161

    
2162
# libdc1394 check
2163
if enabled libdc1394; then
2164
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2165
        enable libdc1394_2; } ||
2166
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2167
        enable libdc1394_1; } ||
2168
    die "ERROR: No version of libdc1394 found "
2169
fi
2170

    
2171

    
2172
_restrict=
2173
for restrict_keyword in restrict __restrict__ __restrict; do
2174
    check_cc <<EOF && _restrict=$restrict_keyword && break
2175
void foo(char * $restrict_keyword p);
2176
EOF
2177
done
2178

    
2179
##########################################
2180
# SDL check
2181

    
2182
disable sdl_too_old
2183
disable sdl
2184
SDL_CONFIG="${cross_prefix}sdl-config"
2185
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2186
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2187
    temp_cflags $sdl_cflags
2188
    temp_extralibs $("${SDL_CONFIG}" --libs)
2189
    if check_lib2 SDL.h SDL_Init; then
2190
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2191
        if test "$_sdlversion" -lt 121 ; then
2192
            enable sdl_too_old
2193
        else
2194
            enable sdl
2195
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2196
#include <SDL.h>
2197
int main(int argc, char **argv){
2198
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2199
    int w = vi->current_w;
2200
    return 0;
2201
}
2202
EOF
2203
        fi
2204
    fi
2205
    restore_flags
2206
fi
2207

    
2208
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2209

    
2210
##########################################
2211
# Network check
2212

    
2213
if enabled network; then
2214
    check_type "sys/types.h sys/socket.h" socklen_t
2215
    # Prefer arpa/inet.h over winsock2
2216
    if check_header arpa/inet.h ; then
2217
        check_func closesocket
2218
    elif check_header winsock2.h ; then
2219
        check_func_headers winsock2.h closesocket -lws2 && \
2220
            network_extralibs="-lws2" || \
2221
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2222
            network_extralibs="-lws2_32"; }
2223
        check_type ws2tcpip.h socklen_t
2224
    else
2225
        disable network
2226
    fi
2227
fi
2228

    
2229
##########################################
2230
# IPv6 check
2231

    
2232
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2233
#include <sys/types.h>
2234
#include <sys/socket.h>
2235
#include <netinet/in.h>
2236
#include <netdb.h>
2237
int main(void) {
2238
    struct sockaddr_storage saddr;
2239
    struct ipv6_mreq mreq6;
2240
    getaddrinfo(0,0,0,0);
2241
    getnameinfo(0,0,0,0,0,0,0);
2242
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2243
}
2244
EOF
2245

    
2246
check_header linux/videodev.h
2247
check_header linux/videodev2.h
2248
check_header sys/videoio.h
2249

    
2250
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2251

    
2252
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2253
{ check_header dev/bktr/ioctl_meteor.h &&
2254
  check_header dev/bktr/ioctl_bt848.h; } ||
2255
{ check_header machine/ioctl_meteor.h &&
2256
  check_header machine/ioctl_bt848.h; } ||
2257
{ check_header dev/video/meteor/ioctl_meteor.h &&
2258
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2259
check_header dev/ic/bt8xx.h
2260

    
2261
check_header sys/soundcard.h
2262
check_header soundcard.h
2263

    
2264
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2265

    
2266
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2267

    
2268
# deal with the X11 frame grabber
2269
enabled x11grab                         &&
2270
check_header X11/Xlib.h                 &&
2271
check_header X11/extensions/XShm.h      &&
2272
check_func XOpenDisplay -lX11           &&
2273
check_func XShmCreateImage -lX11 -lXext
2274

    
2275
enabled debug && add_cflags -g"$debuglevel"
2276

    
2277
# add some useful compiler flags if supported
2278
check_cflags -Wdeclaration-after-statement
2279
check_cflags -Wall
2280
check_cflags -Wno-switch
2281
check_cflags -Wdisabled-optimization
2282
check_cflags -Wpointer-arith
2283
check_cflags -Wredundant-decls
2284
check_cflags -Wno-pointer-sign
2285
check_cflags -Wcast-qual
2286
check_cflags -Wwrite-strings
2287
check_cflags -Wtype-limits
2288
check_cflags -Wundef
2289
enabled extra_warnings && check_cflags -Winline
2290

    
2291
# add some linker flags
2292
check_ldflags -Wl,--warn-common
2293
check_ldflags -Wl,--as-needed
2294
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'
2295
check_ldflags -Wl,-Bsymbolic
2296

    
2297
if enabled small; then
2298
    check_cflags -Os            # not all compilers support -Os
2299
    optimizations="small"
2300
elif enabled optimizations; then
2301
    if enabled xlc; then
2302
        add_cflags  -O5
2303
        add_ldflags -O5
2304
    elif enabled ccc; then
2305
        add_cflags -fast
2306
    else
2307
        add_cflags -O3
2308
    fi
2309
fi
2310
check_cflags -fno-math-errno
2311
check_cflags -fno-signed-zeros
2312

    
2313
# add some flags for Intel C Compiler
2314
if enabled icc; then
2315
    # Just warnings, no remarks
2316
    check_cflags -w1
2317
    # -wd: Disable following warnings
2318
    # 144, 167, 556: -Wno-pointer-sign
2319
    # 10006: ignoring unknown option -fno-signed-zeros
2320
    # 10156: ignoring option '-W'; no argument required
2321
    check_cflags -wd144,167,556,10006,10156
2322
    # 11030: Warning unknown option --as-needed
2323
    # 10156: ignoring option '-export'; no argument required
2324
    check_ldflags -wd10156,11030
2325
    # Allow to compile with optimizations
2326
    check_ldflags -march=$cpu
2327
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2328
    enable ebp_available
2329
elif enabled ccc; then
2330
    # disable some annoying warnings
2331
    add_cflags -msg_disable cvtu32to64
2332
    add_cflags -msg_disable embedcomment
2333
    add_cflags -msg_disable needconstext
2334
    add_cflags -msg_disable nomainieee
2335
    add_cflags -msg_disable ptrmismatch1
2336
    add_cflags -msg_disable unreachcode
2337
elif enabled gcc; then
2338
    check_cflags -fno-tree-vectorize
2339
fi
2340

    
2341
# PIC flags for shared library objects where they are needed
2342
if enabled shared; then
2343
    # LIBOBJFLAGS may have already been set in the OS configuration
2344
    if test -z "$LIBOBJFLAGS" ; then
2345
        case "${subarch-$arch}" in
2346
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2347
        esac
2348
    fi
2349
fi
2350

    
2351
if enabled gprof; then
2352
    add_cflags  -p
2353
    add_ldflags -p
2354
fi
2355

    
2356
# Find out if the .align argument is a power of two or not.
2357
check_asm asmalign_pot '".align 3"'
2358

    
2359
enabled_any $DECODER_LIST      && enable decoders
2360
enabled_any $ENCODER_LIST      && enable encoders
2361
enabled_any $HWACCEL_LIST      && enable hwaccels
2362
enabled_any $BSF_LIST          && enable bsfs
2363
enabled_any $DEMUXER_LIST      && enable demuxers
2364
enabled_any $MUXER_LIST        && enable muxers
2365
enabled_any $FILTER_LIST       && enable filters
2366
enabled_any $INDEV_LIST        && enable demuxers
2367
enabled_any $OUTDEV_LIST       && enable muxers
2368
enabled_any $PROTOCOL_LIST     && enable protocols
2369

    
2370
enabled_any $THREADS_LIST      && enable threads
2371

    
2372
check_deps $CONFIG_LIST       \
2373
           $CONFIG_EXTRA      \
2374
           $HAVE_LIST         \
2375
           $DECODER_LIST      \
2376
           $ENCODER_LIST      \
2377
           $HWACCEL_LIST      \
2378
           $PARSER_LIST       \
2379
           $BSF_LIST          \
2380
           $DEMUXER_LIST      \
2381
           $MUXER_LIST        \
2382
           $FILTER_LIST       \
2383
           $INDEV_LIST        \
2384
           $OUTDEV_LIST       \
2385
           $PROTOCOL_LIST     \
2386

    
2387
echo "install prefix            $prefix"
2388
echo "source path               $source_path"
2389
echo "C compiler                $cc"
2390
echo ".align is power-of-two    $asmalign_pot"
2391
echo "ARCH                      $arch ($cpu)"
2392
if test "$build_suffix" != ""; then
2393
    echo "build suffix              $build_suffix"
2394
fi
2395
if test "$extra_version" != ""; then
2396
    echo "version string suffix     $extra_version"
2397
fi
2398
echo "big-endian                ${bigendian-no}"
2399
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2400
if enabled x86; then
2401
    echo "yasm                      ${yasm-no}"
2402
    echo "MMX enabled               ${mmx-no}"
2403
    echo "MMX2 enabled              ${mmx2-no}"
2404
    echo "3DNow! enabled            ${amd3dnow-no}"
2405
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2406
    echo "SSE enabled               ${sse-no}"
2407
    echo "SSSE3 enabled             ${ssse3-no}"
2408
    echo "CMOV enabled              ${cmov-no}"
2409
    echo "CMOV is fast              ${fast_cmov-no}"
2410
    echo "EBX available             ${ebx_available-no}"
2411
    echo "EBP available             ${ebp_available-no}"
2412
    echo "10 operands supported     ${ten_operands-no}"
2413
fi
2414
if enabled arm; then
2415
    echo "ARMv5TE enabled           ${armv5te-no}"
2416
    echo "ARMv6 enabled             ${armv6-no}"
2417
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2418
    echo "ARM VFP enabled           ${armvfp-no}"
2419
    echo "IWMMXT enabled            ${iwmmxt-no}"
2420
    echo "NEON enabled              ${neon-no}"
2421
fi
2422
if enabled mips; then
2423
    echo "MMI enabled               ${mmi-no}"
2424
fi
2425
if enabled ppc; then
2426
    echo "AltiVec enabled           ${altivec-no}"
2427
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2428
    echo "dcbzl available           ${dcbzl-no}"
2429
    echo "performance report        ${powerpc_perf-no}"
2430
fi
2431
if enabled sparc; then
2432
    echo "VIS enabled               ${vis-no}"
2433
fi
2434
echo "gprof enabled             ${gprof-no}"
2435
echo "debug symbols             ${debug-no}"
2436
echo "strip symbols             ${stripping-no}"
2437
echo "optimizations             ${optimizations-no}"
2438
echo "static                    ${static-no}"
2439
echo "shared                    ${shared-no}"
2440
echo "postprocessing support    ${postproc-no}"
2441
echo "new filter support        ${avfilter-no}"
2442
echo "filters using lavformat   ${avfilter_lavf-no}"
2443
echo "network support           ${network-no}"
2444
if enabled network; then
2445
    echo "IPv6 support              ${ipv6-no}"
2446
fi
2447
echo "threading support         ${thread_type-no}"
2448
echo "SDL support               ${sdl-no}"
2449
if enabled sdl_too_old; then
2450
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2451
fi
2452
echo "Sun medialib support      ${mlib-no}"
2453
echo "AVISynth enabled          ${avisynth-no}"
2454
echo "libdc1394 support         ${libdc1394-no}"
2455
echo "libdirac enabled          ${libdirac-no}"
2456
echo "libfaac enabled           ${libfaac-no}"
2457
echo "libfaad enabled           ${libfaad-no}"
2458
echo "libfaad dlopened          ${libfaadbin-no}"
2459
echo "libgsm enabled            ${libgsm-no}"
2460
echo "libmp3lame enabled        ${libmp3lame-no}"
2461
echo "libnut enabled            ${libnut-no}"
2462
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2463
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2464
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2465
echo "libschroedinger enabled   ${libschroedinger-no}"
2466
echo "libspeex enabled          ${libspeex-no}"
2467
echo "libtheora enabled         ${libtheora-no}"
2468
echo "libvorbis enabled         ${libvorbis-no}"
2469
echo "libx264 enabled           ${libx264-no}"
2470
echo "libxvid enabled           ${libxvid-no}"
2471
echo "zlib enabled              ${zlib-no}"
2472
echo "bzlib enabled             ${bzlib-no}"
2473
echo
2474

    
2475
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2476
    echo "Enabled ${type}s:"
2477
    eval list=\$$(toupper $type)_LIST
2478
    for part in $list; do
2479
        enabled $part && echo ${part%_*}
2480
    done | sort | pr -3 -t
2481
    echo
2482
done
2483

    
2484
license="LGPL version 2.1 or later"
2485
if enabled nonfree; then
2486
    license="nonfree and unredistributable"
2487
elif enabled gplv3; then
2488
    license="GPL version 3 or later"
2489
elif enabled lgplv3; then
2490
    license="LGPL version 3 or later"
2491
elif enabled gpl; then
2492
    license="GPL version 2 or later"
2493
fi
2494

    
2495
echo "License: $license"
2496

    
2497
echo "Creating config.mak and config.h..."
2498

    
2499
echo "# Automatically generated by configure - do not modify!" > config.mak
2500
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2501
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2502
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2503
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2504
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2505

    
2506
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2507
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2508

    
2509
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2510
echo "prefix=$prefix" >> config.mak
2511
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2512
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2513
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2514
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2515
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2516
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2517
echo "SRC_PATH=\"$source_path\"" >> config.mak
2518
echo "SRC_PATH_BARE=$source_path" >> config.mak
2519
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2520
echo "CC=$cc" >> config.mak
2521
echo "AS=$as" >> config.mak
2522
echo "LD=$ld" >> config.mak
2523
echo "DEPCC=$dep_cc" >> config.mak
2524
echo "YASM=$yasmexe" >> config.mak
2525
echo "AR=$ar" >> config.mak
2526
echo "RANLIB=$ranlib" >> config.mak
2527
echo "LN_S=$ln_s" >> config.mak
2528
enabled stripping &&
2529
    echo "STRIP=$strip" >> config.mak ||
2530
    echo "STRIP=echo ignoring strip" >> config.mak
2531

    
2532
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2533
echo "CFLAGS=$CFLAGS" >> config.mak
2534
echo "ASFLAGS=$ASFLAGS" >> config.mak
2535
echo "CC_O=$CC_O" >> config.mak
2536
echo "LDFLAGS=$LDFLAGS" >> config.mak
2537
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2538
echo "SHFLAGS=$SHFLAGS" >> config.mak
2539
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2540
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2541
echo "BUILD_STATIC=$static" >> config.mak
2542
echo "BUILDSUF=$build_suffix" >> config.mak
2543
echo "FULLNAME=$FULLNAME" >> config.mak
2544
echo "LIBPREF=$LIBPREF" >> config.mak
2545
echo "LIBSUF=$LIBSUF" >> config.mak
2546
echo "LIBNAME=$LIBNAME" >> config.mak
2547
echo "SLIBPREF=$SLIBPREF" >> config.mak
2548
echo "SLIBSUF=$SLIBSUF" >> config.mak
2549
echo "EXESUF=$EXESUF" >> config.mak
2550
echo "EXTRA_VERSION=$extra_version" >> config.mak
2551
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2552
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2553
echo "HOSTCC=$host_cc" >> config.mak
2554
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2555
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2556
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2557
echo "HOSTLIBS=$host_libs" >> config.mak
2558
echo "TARGET_EXEC=$target_exec" >> config.mak
2559
echo "TARGET_PATH=$target_path" >> config.mak
2560

    
2561
if enabled bigendian; then
2562
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2563
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2564
fi
2565

    
2566
if enabled sdl; then
2567
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2568
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2569
fi
2570
if enabled texi2html; then
2571
    echo "BUILD_DOC=yes" >> config.mak
2572
fi
2573

    
2574
get_version(){
2575
    name=$1
2576
    file=$source_path/$2
2577
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2578
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2579
    lcname=$(tolower $name)
2580
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2581
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2582
}
2583

    
2584
get_version LIBSWSCALE  libswscale/swscale.h
2585
get_version LIBPOSTPROC libpostproc/postprocess.h
2586
get_version LIBAVCODEC  libavcodec/avcodec.h
2587
get_version LIBAVDEVICE libavdevice/avdevice.h
2588
get_version LIBAVFORMAT libavformat/avformat.h
2589
get_version LIBAVUTIL   libavutil/avutil.h
2590
get_version LIBAVFILTER libavfilter/avfilter.h
2591

    
2592
if enabled shared; then
2593
    echo "BUILD_SHARED=yes" >> config.mak
2594
    echo "PIC=-fPIC -DPIC" >> config.mak
2595
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2596
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2597
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2598
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2599
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2600
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2601
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2602
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2603
fi
2604
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2605
echo "EXTRALIBS=$extralibs" >> config.mak
2606

    
2607
echo "ARCH=$arch" >> config.mak
2608

    
2609
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2610
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2611
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2612
                                      $CONFIG_EXTRA      \
2613
                                      $DECODER_LIST      \
2614
                                      $ENCODER_LIST      \
2615
                                      $HWACCEL_LIST      \
2616
                                      $PARSER_LIST       \
2617
                                      $BSF_LIST          \
2618
                                      $DEMUXER_LIST      \
2619
                                      $MUXER_LIST        \
2620
                                      $FILTER_LIST       \
2621
                                      $PROTOCOL_LIST     \
2622
                                      $INDEV_LIST        \
2623
                                      $OUTDEV_LIST       \
2624

    
2625
echo "#define restrict $_restrict" >> $TMPH
2626

    
2627
if enabled small; then
2628
    echo "#define av_always_inline"  >> $TMPH
2629
fi
2630

    
2631

    
2632
# Apparently it's not possible to portably echo a backslash.
2633
enabled asmalign_pot &&
2634
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2635
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2636

    
2637
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2638

    
2639
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2640
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2641

    
2642
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2643
cmp -s $TMPH config.h &&
2644
    echo "config.h is unchanged" ||
2645
    mv -f $TMPH config.h
2646

    
2647
# build tree in object directory if source path is different from current one
2648
if enabled source_path_used; then
2649
    DIRS="\
2650
        doc               \
2651
        libavcodec        \
2652
        libavcodec/alpha  \
2653
        libavcodec/arm    \
2654
        libavcodec/bfin   \
2655
        libavcodec/mlib   \
2656
        libavcodec/ppc    \
2657
        libavcodec/sh4    \
2658
        libavcodec/sparc  \
2659
        libavcodec/x86    \
2660
        libavdevice       \
2661
        libavfilter       \
2662
        libavformat       \
2663
        libavutil         \
2664
        libpostproc       \
2665
        libswscale        \
2666
        libswscale/bfin   \
2667
        libswscale/mlib   \
2668
        libswscale/ppc    \
2669
        libswscale/sparc  \
2670
        libswscale/x86    \
2671
        tests             \
2672
        tools             \
2673
        "
2674
    FILES="\
2675
        Makefile             \
2676
        common.mak           \
2677
        subdir.mak           \
2678
        doc/texi2pod.pl      \
2679
        libavcodec/Makefile  \
2680
        libavdevice/Makefile \
2681
        libavfilter/Makefile \
2682
        libavformat/Makefile \
2683
        libavutil/Makefile   \
2684
        libpostproc/Makefile \
2685
        libswscale/Makefile  \
2686
        "
2687
    for dir in $DIRS ; do
2688
        mkdir -p $dir
2689
    done
2690
    for f in $FILES ; do
2691
        $ln_s "$source_path/$f" $f
2692
    done
2693
fi
2694

    
2695

    
2696
# build pkg-config files
2697

    
2698
pkgconfig_generate(){
2699
name=$1
2700
shortname=${name#lib}${build_suffix}
2701
comment=$2
2702
version=$3
2703
libs=$4
2704
requires=$5
2705
cat <<EOF > $name/$name.pc
2706
prefix=$prefix
2707
exec_prefix=\${prefix}
2708
libdir=$libdir
2709
includedir=$incdir
2710

    
2711
Name: $name
2712
Description: $comment
2713
Version: $version
2714
Requires: $(disabled shared && echo $requires)
2715
Requires.private: $(enabled shared && echo $requires)
2716
Conflicts:
2717
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2718
Libs.private: $(enabled shared && echo $libs)
2719
Cflags: -I\${includedir}
2720
EOF
2721
cat <<EOF > $name/$name-uninstalled.pc
2722
prefix=
2723
exec_prefix=
2724
libdir=\${pcfiledir}
2725
includedir=${source_path}
2726

    
2727
Name: $name
2728
Description: $comment
2729
Version: $version
2730
Requires: $requires
2731
Conflicts:
2732
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2733
Cflags: -I\${includedir}
2734
EOF
2735
}
2736

    
2737
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2738
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2739
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2740
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2741
enabled avfilter &&
2742
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2743
enabled postproc &&
2744
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2745
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"