Statistics
| Branch: | Revision:

ffmpeg / configure @ 291fd18a

History | View | Annotate | Download (77.5 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
833
THREADS_LIST='
834
    beosthreads
835
    os2threads
836
    pthreads
837
    w32threads
838
'
839

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

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

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

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

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

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

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

    
1002
# code dependency declarations
1003

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

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

    
1111
# parsers
1112
h264_parser_select="golomb"
1113

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

    
1137
# demuxers / muxers
1138
ac3_demuxer_deps="ac3_parser"
1139
avisynth_demuxer_deps="avisynth"
1140
dirac_demuxer_deps="dirac_parser"
1141
libnut_demuxer_deps="libnut"
1142
libnut_muxer_deps="libnut"
1143
matroska_demuxer_suggest="zlib bzlib"
1144
mov_demuxer_suggest="zlib"
1145
mp3_demuxer_deps="mpegaudio_parser"
1146
redir_demuxer_deps="network"
1147
rtp_muxer_deps="network rtp_protocol"
1148
rtsp_demuxer_deps="sdp_demuxer"
1149
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1150

    
1151
# indevs / outdevs
1152
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1153
alsa_indev_extralibs="-lasound"
1154
alsa_outdev_deps="alsa_asoundlib_h"
1155
alsa_outdev_extralibs="-lasound"
1156
audio_beos_indev_deps="audio_beos"
1157
audio_beos_indev_extralibs="-lmedia -lbe"
1158
audio_beos_outdev_deps="audio_beos"
1159
audio_beos_outdev_extralibs="-lmedia -lbe"
1160
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1161
dv1394_indev_deps="dv1394 dv_demuxer"
1162
jack_indev_deps="jack_jack_h"
1163
jack_indev_extralibs="-ljack"
1164
libdc1394_indev_deps="libdc1394"
1165
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1166
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1167
v4l_indev_deps="linux_videodev_h"
1168
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1169
vfwcap_indev_deps="capCreateCaptureWindow"
1170
vfwcap_indev_extralibs="-lvfw32"
1171
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1172
x11_grab_device_indev_extralibs="-lX11 -lXext"
1173

    
1174
# protocols
1175
gopher_protocol_deps="network"
1176
http_protocol_deps="network"
1177
rtp_protocol_deps="udp_protocol"
1178
tcp_protocol_deps="network"
1179
udp_protocol_deps="network"
1180

    
1181
# filters
1182
movie_filter_deps="avfilter_lavf"
1183

    
1184
# programs
1185
ffplay_deps="sdl"
1186
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1187
ffserver_extralibs='$ldl'
1188

    
1189

    
1190
# default parameters
1191

    
1192
logfile="config.err"
1193

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

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

    
1214
# machine
1215
arch=$(uname -m)
1216
cpu="generic"
1217

    
1218
# OS
1219
target_os=$(tolower $(uname -s))
1220
host_os=$target_os
1221

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

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

    
1252
host_cflags='-O3 -g -Wall'
1253
host_libs='-lm'
1254

    
1255
target_path='.'
1256

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

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

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

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

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

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

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

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

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

    
1375
disabled logging && logfile=/dev/null
1376

    
1377
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1378
set >> $logfile
1379

    
1380
test -n "$cross_prefix" && enable cross_compile
1381

    
1382
ar="${cross_prefix}${ar}"
1383
cc_default="${cross_prefix}${cc_default}"
1384
nm_default="${cross_prefix}${nm_default}"
1385
ranlib="${cross_prefix}${ranlib}"
1386
strip="${cross_prefix}${strip}"
1387

    
1388
sysinclude_default="${sysroot}/usr/include"
1389

    
1390
set_default cc nm sysinclude
1391
as_default=$cc
1392
enabled cross_compile || host_cc_default=$cc
1393
set_default host_cc
1394

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

    
1401
EXESUF=$(exesuf $target_os)
1402
HOSTEXESUF=$(exesuf $host_os)
1403

    
1404
# set temporary file name
1405
: ${TMPDIR:=$TEMPDIR}
1406
: ${TMPDIR:=$TMP}
1407
: ${TMPDIR:=/tmp}
1408

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

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

    
1425
trap 'rm -f -- $TMPFILES' EXIT
1426
trap exit HUP INT TERM
1427

    
1428
tmpfile TMPC  .c
1429
tmpfile TMPE  $EXESUF
1430
tmpfile TMPH  .h
1431
tmpfile TMPO  .o
1432
tmpfile TMPS  .S
1433
tmpfile TMPSH .sh
1434

    
1435
unset -f mktemp
1436

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

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

    
1474
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1475

    
1476
set_default as
1477

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

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

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

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

    
1588
enable $arch $subarch
1589

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

    
1737
    *)
1738
        die "Unknown OS '$target_os'."
1739
        ;;
1740
esac
1741

    
1742
set_default $PATHS_LIST
1743

    
1744
add_extralibs $osextralibs
1745

    
1746
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1747
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1748

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

    
1760
disabled static && LIBNAME=""
1761

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

    
1777

    
1778
die_license_disabled() {
1779
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1780
}
1781

    
1782
die_license_disabled gpl libfaad2
1783
die_license_disabled gpl libx264
1784
die_license_disabled gpl libxvid
1785
die_license_disabled gpl postproc
1786
die_license_disabled gpl x11grab
1787

    
1788
die_license_disabled nonfree libfaac
1789

    
1790
die_license_disabled version3 libopencore_amrnb
1791
die_license_disabled version3 libopencore_amrwb
1792

    
1793
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1794

    
1795
check_deps $ARCH_EXT_LIST
1796

    
1797
test -z "$need_memalign" && need_memalign="$mmx"
1798

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

    
1811
disabled optimizations || check_cflags -fomit-frame-pointer
1812

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

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

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

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

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

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

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

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

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

    
1956
# check for assembler specific support
1957

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

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

    
1964
# check for SIMD availability
1965

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2122

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

    
2130
##########################################
2131
# SDL check
2132

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

    
2159
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2160

    
2161
##########################################
2162
# Network check
2163

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

    
2178
##########################################
2179
# IPv6 check
2180

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

    
2195
check_header linux/videodev.h
2196
check_header linux/videodev2.h
2197
check_header sys/videoio.h
2198

    
2199
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2200

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

    
2210
check_header sys/soundcard.h
2211
check_header soundcard.h
2212

    
2213
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2214

    
2215
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2216

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

    
2224
enabled debug && add_cflags -g"$debuglevel"
2225

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

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

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

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

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

    
2298
if enabled gprof; then
2299
    add_cflags  -p
2300
    add_ldflags -p
2301
fi
2302

    
2303
# Find out if the .align argument is a power of two or not.
2304
check_asm asmalign_pot '".align 3"'
2305

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

    
2317
enabled_any $THREADS_LIST      && enable threads
2318

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

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

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

    
2431
license="LGPL version 2.1 or later"
2432
if enabled nonfree; then
2433
    license="nonfree and unredistributable"
2434
elif enabled gplv3; then
2435
    license="GPL version 3 or later"
2436
elif enabled lgplv3; then
2437
    license="LGPL version 3 or later"
2438
elif enabled gpl; then
2439
    license="GPL version 2 or later"
2440
fi
2441

    
2442
echo "License: $license"
2443

    
2444
echo "Creating config.mak and config.h..."
2445

    
2446
echo "# Automatically generated by configure - do not modify!" > config.mak
2447
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2448
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2449
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2450
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2451
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2452

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

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

    
2499
if enabled bigendian; then
2500
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2501
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2502
fi
2503

    
2504
if enabled sdl; then
2505
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2506
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2507
fi
2508
if enabled texi2html; then
2509
    echo "BUILD_DOC=yes" >> config.mak
2510
fi
2511

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

    
2522
get_version LIBSWSCALE  libswscale/swscale.h
2523
get_version LIBPOSTPROC libpostproc/postprocess.h
2524
get_version LIBAVCODEC  libavcodec/avcodec.h
2525
get_version LIBAVDEVICE libavdevice/avdevice.h
2526
get_version LIBAVFORMAT libavformat/avformat.h
2527
get_version LIBAVUTIL   libavutil/avutil.h
2528
get_version LIBAVFILTER libavfilter/avfilter.h
2529

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

    
2545
echo "ARCH=$arch" >> config.mak
2546

    
2547
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2548
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2549
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2550
                                      $CONFIG_EXTRA      \
2551
                                      $DECODER_LIST      \
2552
                                      $ENCODER_LIST      \
2553
                                      $HWACCEL_LIST      \
2554
                                      $PARSER_LIST       \
2555
                                      $BSF_LIST          \
2556
                                      $DEMUXER_LIST      \
2557
                                      $MUXER_LIST        \
2558
                                      $FILTER_LIST       \
2559
                                      $PROTOCOL_LIST     \
2560
                                      $INDEV_LIST        \
2561
                                      $OUTDEV_LIST       \
2562

    
2563
echo "#define restrict $_restrict" >> $TMPH
2564

    
2565
if enabled small; then
2566
    echo "#define av_always_inline"  >> $TMPH
2567
fi
2568

    
2569

    
2570
# Apparently it's not possible to portably echo a backslash.
2571
enabled asmalign_pot &&
2572
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2573
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2574

    
2575
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2576

    
2577
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2578

    
2579
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2580
cmp -s $TMPH config.h &&
2581
    echo "config.h is unchanged" ||
2582
    mv -f $TMPH config.h
2583

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

    
2632

    
2633
# build pkg-config files
2634

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

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

    
2664
Name: $name
2665
Description: $comment
2666
Version: $version
2667
Requires: $requires
2668
Conflicts:
2669
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2670
Cflags: -I\${includedir}
2671
EOF
2672
}
2673

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