Statistics
| Branch: | Revision:

ffmpeg / configure @ 28b80940

History | View | Annotate | Download (77.2 KB)

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

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

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

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

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

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

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

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

    
234
log(){
235
    echo "$@" >> $logfile
236
}
237

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

    
244
echolog(){
245
    log "$@"
246
    echo "$@"
247
}
248

    
249
die(){
250
    echolog "$@"
251
    cat <<EOF
252

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

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

    
276
tolower(){
277
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
278
}
279

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

    
284
set_all(){
285
    value=$1
286
    shift
287
    for var in $*; do
288
        eval $var=$value
289
    done
290
}
291

    
292
set_weak(){
293
    value=$1
294
    shift
295
    for var; do
296
        eval : \${$var:=$value}
297
    done
298
}
299

    
300
pushvar(){
301
    for var in $*; do
302
        eval level=\${${var}_level:=0}
303
        eval ${var}_${level}="\$$var"
304
        eval ${var}_level=$(($level+1))
305
    done
306
}
307

    
308
popvar(){
309
    for var in $*; do
310
        eval level=\${${var}_level:-0}
311
        test $level = 0 && continue
312
        eval level=$(($level-1))
313
        eval $var="\${${var}_${level}}"
314
        eval ${var}_level=$level
315
        eval unset ${var}_${level}
316
    done
317
}
318

    
319
enable(){
320
    set_all yes $*
321
}
322

    
323
disable(){
324
    set_all no $*
325
}
326

    
327
enable_weak(){
328
    set_weak yes $*
329
}
330

    
331
disable_weak(){
332
    set_weak no $*
333
}
334

    
335
enable_safe(){
336
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
337
}
338

    
339
disable_safe(){
340
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
341
}
342

    
343
do_enable_deep(){
344
    for var; do
345
        enabled $var && continue
346
        eval sel="\$${var}_select"
347
        eval sgs="\$${var}_suggest"
348
        pushvar var sgs
349
        enable_deep $sel
350
        popvar sgs
351
        enable_deep_weak $sgs
352
        popvar var
353
    done
354
}
355

    
356
enable_deep(){
357
    do_enable_deep $*
358
    enable $*
359
}
360

    
361
enable_deep_weak(){
362
    do_enable_deep $*
363
    enable_weak $*
364
}
365

    
366
enabled(){
367
    test "${1#!}" = "$1" && op== || op=!=
368
    eval test "x\$${1#!}" $op "xyes"
369
}
370

    
371
disabled(){
372
    test "${1#!}" = "$1" && op== || op=!=
373
    eval test "x\$${1#!}" $op "xno"
374
}
375

    
376
enabled_all(){
377
    for opt; do
378
        enabled $opt || return 1
379
    done
380
}
381

    
382
disabled_all(){
383
    for opt; do
384
        disabled $opt || return 1
385
    done
386
}
387

    
388
enabled_any(){
389
    for opt; do
390
        enabled $opt && return 0
391
    done
392
}
393

    
394
disabled_any(){
395
    for opt; do
396
        disabled $opt && return 0
397
    done
398
    return 1
399
}
400

    
401
set_default(){
402
    for opt; do
403
        eval : \${$opt:=\$${opt}_default}
404
    done
405
}
406

    
407
is_in(){
408
    value=$1
409
    shift
410
    for var in $*; do
411
        [ $var = $value ] && return 0
412
    done
413
    return 1
414
}
415

    
416
check_deps(){
417
    for cfg; do
418
        cfg="${cfg#!}"
419
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
420
        disabled ${cfg}_checking && continue
421
        enable ${cfg}_checking
422

    
423
        eval dep_all="\$${cfg}_deps"
424
        eval dep_any="\$${cfg}_deps_any"
425
        eval dep_sel="\$${cfg}_select"
426
        eval dep_sgs="\$${cfg}_suggest"
427

    
428
        pushvar cfg dep_all dep_any dep_sel dep_sgs
429
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
430
        popvar cfg dep_all dep_any dep_sel dep_sgs
431

    
432
        enabled_all  $dep_all || disable $cfg
433
        enabled_any  $dep_any || disable $cfg
434
        disabled_any $dep_sel && disable $cfg
435

    
436
        if enabled $cfg; then
437
            eval dep_extralibs="\$${cfg}_extralibs"
438
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
439
            enable_deep $dep_sel
440
            enable_deep_weak $dep_sgs
441
        fi
442

    
443
        disable ${cfg}_checking
444
    done
445
}
446

    
447
print_config(){
448
    pfx=$1
449
    header=$2
450
    makefile=$3
451
    shift 3
452
    for cfg; do
453
        ucname="$(toupper $cfg)"
454
        if enabled $cfg; then
455
            echo "#define ${pfx}${ucname} 1" >> $header
456
            echo "${pfx}${ucname}=yes" >> $makefile
457
        else
458
            echo "#define ${pfx}${ucname} 0" >> $header
459
        fi
460
    done
461
}
462

    
463
flags_saved(){
464
    (: ${SAVE_CFLAGS?}) 2> /dev/null
465
}
466

    
467
save_flags(){
468
    flags_saved && return
469
    SAVE_CFLAGS="$CFLAGS"
470
    SAVE_LDFLAGS="$LDFLAGS"
471
    SAVE_extralibs="$extralibs"
472
}
473

    
474
restore_flags(){
475
    flags_saved || return
476
    CFLAGS="$SAVE_CFLAGS"
477
    LDFLAGS="$SAVE_LDFLAGS"
478
    extralibs="$SAVE_extralibs"
479
    unset SAVE_CFLAGS
480
    unset SAVE_LDFLAGS
481
    unset SAVE_extralibs
482
}
483

    
484
temp_cflags(){
485
    save_flags
486
    CFLAGS="$CFLAGS $*"
487
}
488

    
489
temp_ldflags(){
490
    save_flags
491
    LDFLAGS="$LDFLAGS $*"
492
}
493

    
494
temp_extralibs(){
495
    save_flags
496
    extralibs="$extralibs $*"
497
}
498

    
499
append(){
500
    var=$1
501
    shift
502
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
503
    eval "$var=\"\$$var $*\""
504
}
505

    
506
add_cflags(){
507
    append CFLAGS "$@"
508
}
509

    
510
add_ldflags(){
511
    append LDFLAGS "$@"
512
}
513

    
514
add_extralibs(){
515
    append extralibs "$@"
516
}
517

    
518
check_cmd(){
519
    log "$@"
520
    "$@" >> $logfile 2>&1
521
}
522

    
523
check_cc(){
524
    log check_cc "$@"
525
    cat > $TMPC
526
    log_file $TMPC
527
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
528
}
529

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

    
537
check_as(){
538
    log check_as "$@"
539
    cat > $TMPC
540
    log_file $TMPC
541
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
542
}
543

    
544
check_asm(){
545
    log check_asm "$@"
546
    name="$1"
547
    asm="$2"
548
    shift 2
549
    check_as "$@" <<EOF && enable $name || disable $name
550
void foo(void){ __asm__ volatile($asm); }
551
EOF
552
}
553

    
554
check_yasm(){
555
    log check_yasm "$@"
556
    echo "$1" > $TMPS
557
    log_file $TMPS
558
    shift 1
559
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
560
}
561

    
562
check_ld(){
563
    log check_ld "$@"
564
    check_cc || return
565
    flags=''
566
    libs=''
567
    for f; do
568
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
569
    done
570
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
571
}
572

    
573
check_cflags(){
574
    log check_cflags "$@"
575
    check_cc "$@" <<EOF && add_cflags "$@"
576
int x;
577
EOF
578
}
579

    
580
check_ldflags(){
581
    log check_ldflags "$@"
582
    check_ld "$@" <<EOF && add_ldflags "$@"
583
int main(void){ return 0; }
584
EOF
585
}
586

    
587
check_header(){
588
    log check_header "$@"
589
    header=$1
590
    shift
591
    disable_safe $header
592
    check_cpp "$@" <<EOF && enable_safe $header
593
#include <$header>
594
int x;
595
EOF
596
}
597

    
598
check_func(){
599
    log check_func "$@"
600
    func=$1
601
    shift
602
    disable $func
603
    check_ld "$@" <<EOF && enable $func
604
extern int $func();
605
int main(void){ $func(); }
606
EOF
607
}
608

    
609
check_func_headers(){
610
    log check_func_headers "$@"
611
    headers=$1
612
    func=$2
613
    shift 2
614
    disable $func
615
    incs=""
616
    for hdr in $headers; do
617
        incs="$incs
618
#include <$hdr>"
619
    done
620
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
621
$incs
622
int main(int argc, char **argv){
623
    (void) $func;
624
    return 0;
625
}
626
EOF
627
}
628

    
629
check_cpp_condition(){
630
    log check_cpp_condition "$@"
631
    header=$1
632
    condition=$2
633
    check_cpp <<EOF
634
#include <$header>
635
#if !($condition)
636
#error "unsatisfied condition: $condition"
637
#endif
638
EOF
639
}
640

    
641
check_lib(){
642
    log check_lib "$@"
643
    header="$1"
644
    func="$2"
645
    shift 2
646
    temp_extralibs "$@"
647
    check_header $header && check_func $func && add_extralibs "$@"
648
    err=$?
649
    restore_flags
650
    return $err
651
}
652

    
653
check_lib2(){
654
    log check_lib2 "$@"
655
    headers="$1"
656
    func="$2"
657
    shift 2
658
    temp_extralibs "$@"
659
    check_func_headers "$headers" $func && add_extralibs "$@"
660
    err=$?
661
    restore_flags
662
    return $err
663
}
664

    
665
check_exec(){
666
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
667
}
668

    
669
check_exec_crash(){
670
    code=$(cat)
671

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

    
678
    (check_exec "$@") >> $logfile 2>&1 <<EOF
679
#include <signal.h>
680
static void sighandler(int sig){
681
    raise(SIGTERM);
682
}
683
int main(void){
684
    signal(SIGILL, sighandler);
685
    signal(SIGFPE, sighandler);
686
    signal(SIGSEGV, sighandler);
687
#ifdef SIGBUS
688
    signal(SIGBUS, sighandler);
689
#endif
690
    { $code }
691
}
692
EOF
693
}
694

    
695
check_type(){
696
    log check_type "$@"
697
    headers=$1
698
    type=$2
699
    shift 2
700
    disable $type
701
    incs=""
702
    for hdr in $headers; do
703
        incs="$incs
704
#include <$hdr>"
705
    done
706
    check_cc "$@" <<EOF && enable $type
707
$incs
708
$type v;
709
EOF
710
}
711

    
712
require(){
713
    name="$1"
714
    header="$2"
715
    func="$3"
716
    shift 3
717
    check_lib $header $func "$@" || die "ERROR: $name not found"
718
}
719

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

    
728
check_foo_config(){
729
    cfg=$1
730
    pkg=$2
731
    header=$3
732
    func=$4
733
    shift 4
734
    disable $cfg
735
    check_cmd ${pkg}-config --version
736
    err=$?
737
    if test "$err" = 0; then
738
        temp_cflags $(${pkg}-config --cflags)
739
        temp_extralibs $(${pkg}-config --libs)
740
        check_lib "$@" $header $func && enable $cfg
741
    fi
742
    return $err
743
}
744

    
745
apply(){
746
    file=$1
747
    shift
748
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
749
}
750

    
751
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
752
# system-dependent things.
753

    
754
COMPONENT_LIST="
755
    bsfs
756
    decoders
757
    demuxers
758
    encoders
759
    filters
760
    hwaccels
761
    indevs
762
    muxers
763
    outdevs
764
    parsers
765
    protocols
766
"
767

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

    
825
THREADS_LIST='
826
    beosthreads
827
    os2threads
828
    pthreads
829
    w32threads
830
'
831

    
832
ARCH_LIST='
833
    alpha
834
    arm
835
    bfin
836
    ia64
837
    m68k
838
    mips
839
    mips64
840
    parisc
841
    ppc
842
    ppc64
843
    s390
844
    sh4
845
    sparc
846
    sparc64
847
    x86
848
    x86_32
849
    x86_64
850
'
851

    
852
ARCH_EXT_LIST='
853
    altivec
854
    amd3dnow
855
    amd3dnowext
856
    armv5te
857
    armv6
858
    armv6t2
859
    armvfp
860
    iwmmxt
861
    mmi
862
    mmx
863
    mmx2
864
    neon
865
    ppc4xx
866
    sse
867
    ssse3
868
    vis
869
'
870

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

    
940
# options emitted with CONFIG_ prefix but not available on command line
941
CONFIG_EXTRA="
942
    gplv3
943
    lgplv3
944
"
945

    
946
CMDLINE_SELECT="
947
    $ARCH_EXT_LIST
948
    $CONFIG_LIST
949
    $THREADS_LIST
950
    cross_compile
951
    debug
952
    extra_warnings
953
    logging
954
    optimizations
955
    stripping
956
    yasm
957
"
958

    
959
PATHS_LIST='
960
    bindir
961
    datadir
962
    incdir
963
    libdir
964
    mandir
965
    prefix
966
    shlibdir
967
'
968

    
969
CMDLINE_SET="
970
    $PATHS_LIST
971
    arch
972
    as
973
    build_suffix
974
    cc
975
    cpu
976
    cross_prefix
977
    extra_version
978
    host_cc
979
    host_cflags
980
    host_ldflags
981
    host_libs
982
    host_os
983
    logfile
984
    nm
985
    source_path
986
    sysinclude
987
    sysroot
988
    target_exec
989
    target_os
990
    target_path
991
"
992

    
993
# code dependency declarations
994

    
995
# architecture extensions
996
altivec_deps="ppc"
997
amd3dnow_deps="mmx"
998
amd3dnowext_deps="amd3dnow"
999
armv5te_deps="arm"
1000
armv6_deps="arm"
1001
armv6t2_deps="arm"
1002
armvfp_deps="arm"
1003
iwmmxt_deps="arm"
1004
mmi_deps="mips"
1005
mmx_deps="x86"
1006
mmx2_deps="mmx"
1007
neon_deps="arm"
1008
ppc4xx_deps="ppc"
1009
sse_deps="mmx"
1010
ssse3_deps="sse"
1011
vis_deps="sparc"
1012

    
1013
# decoders / encoders / hardware accelerators
1014
aac_decoder_select="fft mdct"
1015
ac3_decoder_select="fft mdct"
1016
atrac3_decoder_select="fft mdct"
1017
cavs_decoder_select="golomb"
1018
cook_decoder_select="fft mdct"
1019
cscd_decoder_suggest="zlib"
1020
dca_decoder_select="fft mdct"
1021
dnxhd_encoder_select="aandct"
1022
dxa_decoder_select="zlib"
1023
eac3_decoder_select="fft mdct"
1024
eatgq_decoder_select="aandct"
1025
eatqi_decoder_select="aandct"
1026
ffv1_decoder_select="golomb"
1027
flac_decoder_select="golomb"
1028
flac_encoder_select="golomb"
1029
flashsv_decoder_select="zlib"
1030
flashsv_encoder_select="zlib"
1031
flv_encoder_select="aandct"
1032
h261_encoder_select="aandct"
1033
h263_encoder_select="aandct"
1034
h263_vaapi_hwaccel_deps="va_va_h"
1035
h263p_encoder_select="aandct"
1036
h264_decoder_select="golomb"
1037
h264_vaapi_hwaccel_deps="va_va_h"
1038
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1039
imc_decoder_select="fft mdct"
1040
jpegls_decoder_select="golomb"
1041
jpegls_encoder_select="golomb"
1042
ljpeg_encoder_select="aandct"
1043
loco_decoder_select="golomb"
1044
mjpeg_encoder_select="aandct"
1045
mpeg1video_encoder_select="aandct"
1046
mpeg2video_encoder_select="aandct"
1047
mpeg4_encoder_select="aandct"
1048
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1049
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1050
mpeg2_vaapi_hwaccel_deps="va_va_h"
1051
mpeg4_vaapi_hwaccel_deps="va_va_h"
1052
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1053
msmpeg4v1_encoder_select="aandct"
1054
msmpeg4v2_encoder_select="aandct"
1055
msmpeg4v3_encoder_select="aandct"
1056
nellymoser_decoder_select="fft mdct"
1057
nellymoser_encoder_select="fft mdct"
1058
png_decoder_select="zlib"
1059
png_encoder_select="zlib"
1060
qdm2_decoder_select="fft mdct rdft"
1061
rv10_encoder_select="aandct"
1062
rv20_encoder_select="aandct"
1063
rv30_decoder_select="golomb"
1064
rv40_decoder_select="golomb"
1065
shorten_decoder_select="golomb"
1066
sonic_decoder_select="golomb"
1067
sonic_encoder_select="golomb"
1068
sonic_ls_encoder_select="golomb"
1069
svq3_decoder_select="golomb"
1070
svq3_decoder_suggest="zlib"
1071
tiff_decoder_suggest="zlib"
1072
tiff_encoder_suggest="zlib"
1073
tscc_decoder_select="zlib"
1074
vc1_vaapi_hwaccel_deps="va_va_h"
1075
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1076
vorbis_decoder_select="fft mdct"
1077
vorbis_encoder_select="fft mdct"
1078
wmav1_decoder_select="fft mdct"
1079
wmav1_encoder_select="fft mdct"
1080
wmav2_decoder_select="fft mdct"
1081
wmav2_encoder_select="fft mdct"
1082
wmv1_encoder_select="aandct"
1083
wmv2_encoder_select="aandct"
1084
wmv3_vaapi_hwaccel_deps="va_va_h"
1085
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1086
zlib_decoder_select="zlib"
1087
zlib_encoder_select="zlib"
1088
zmbv_decoder_select="zlib"
1089
zmbv_encoder_select="zlib"
1090

    
1091
# parsers
1092
h264_parser_select="golomb"
1093

    
1094
# external libraries
1095
libamr_nb_decoder_deps="libamr_nb"
1096
libamr_nb_encoder_deps="libamr_nb"
1097
libamr_wb_decoder_deps="libamr_wb"
1098
libamr_wb_encoder_deps="libamr_wb"
1099
libdirac_decoder_deps="libdirac !libschroedinger"
1100
libdirac_encoder_deps="libdirac"
1101
libfaac_encoder_deps="libfaac"
1102
libfaad_decoder_deps="libfaad"
1103
libfaadbin_decoder_extralibs='$ldl'
1104
libgsm_decoder_deps="libgsm"
1105
libgsm_encoder_deps="libgsm"
1106
libgsm_ms_decoder_deps="libgsm"
1107
libgsm_ms_encoder_deps="libgsm"
1108
libmp3lame_encoder_deps="libmp3lame"
1109
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1110
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1111
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1112
libopenjpeg_decoder_deps="libopenjpeg"
1113
libschroedinger_decoder_deps="libschroedinger"
1114
libschroedinger_encoder_deps="libschroedinger"
1115
libspeex_decoder_deps="libspeex"
1116
libtheora_encoder_deps="libtheora"
1117
libvorbis_encoder_deps="libvorbis"
1118
libx264_encoder_deps="libx264"
1119
libxvid_encoder_deps="libxvid"
1120

    
1121
# demuxers / muxers
1122
ac3_demuxer_deps="ac3_parser"
1123
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1124
alsa_demuxer_extralibs="-lasound"
1125
alsa_muxer_deps="alsa_asoundlib_h"
1126
alsa_muxer_extralibs="-lasound"
1127
audio_beos_demuxer_deps="audio_beos"
1128
audio_beos_demuxer_extralibs="-lmedia -lbe"
1129
audio_beos_muxer_deps="audio_beos"
1130
audio_beos_muxer_extralibs="-lmedia -lbe"
1131
avisynth_demuxer_deps="avisynth"
1132
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1133
dirac_demuxer_deps="dirac_parser"
1134
dv1394_demuxer_deps="dv1394 dv_demuxer"
1135
jack_demuxer_deps="jack_jack_h"
1136
jack_demuxer_extralibs="-ljack"
1137
libdc1394_demuxer_deps="libdc1394"
1138
libnut_demuxer_deps="libnut"
1139
libnut_muxer_deps="libnut"
1140
matroska_demuxer_suggest="zlib bzlib"
1141
mov_demuxer_suggest="zlib"
1142
mp3_demuxer_deps="mpegaudio_parser"
1143
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1144
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1145
redir_demuxer_deps="network"
1146
rtp_muxer_deps="network rtp_protocol"
1147
rtsp_demuxer_deps="sdp_demuxer"
1148
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1149
v4l_demuxer_deps="linux_videodev_h"
1150
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1151
vfwcap_demuxer_deps="capCreateCaptureWindow"
1152
vfwcap_demuxer_extralibs="-lvfw32"
1153
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1154
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1155

    
1156
# protocols
1157
gopher_protocol_deps="network"
1158
http_protocol_deps="network"
1159
rtp_protocol_deps="udp_protocol"
1160
tcp_protocol_deps="network"
1161
udp_protocol_deps="network"
1162

    
1163
# filters
1164
movie_filter_deps="avfilter_lavf"
1165

    
1166
# programs
1167
ffplay_deps="sdl"
1168
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1169
ffserver_extralibs='$ldl'
1170

    
1171

    
1172
# default parameters
1173

    
1174
logfile="config.err"
1175

    
1176
# installation paths
1177
prefix_default="/usr/local"
1178
bindir_default='${prefix}/bin'
1179
datadir_default='${prefix}/share/ffmpeg'
1180
incdir_default='${prefix}/include'
1181
libdir_default='${prefix}/lib'
1182
mandir_default='${prefix}/share/man'
1183
shlibdir_default="$libdir_default"
1184

    
1185
# toolchain
1186
ar="ar"
1187
cc_default="gcc"
1188
host_cc_default="gcc"
1189
ln_s="ln -sf"
1190
nm_default="nm"
1191
objformat="elf"
1192
ranlib="ranlib"
1193
strip="strip"
1194
yasmexe="yasm"
1195

    
1196
# machine
1197
arch=$(uname -m)
1198
cpu="generic"
1199

    
1200
# OS
1201
target_os=$(tolower $(uname -s))
1202
host_os=$target_os
1203

    
1204
# configurable options
1205
enable debug
1206
enable fastdiv
1207
enable ffmpeg
1208
enable ffplay
1209
enable ffserver
1210
enable ipv6
1211
enable mpegaudio_hp
1212
enable network
1213
enable optimizations
1214
enable protocols
1215
enable static
1216
enable stripping
1217
enable swscale_alpha
1218

    
1219
# build settings
1220
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1221
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1222
FFSERVERLDFLAGS=-Wl,-E
1223
LIBPREF="lib"
1224
LIBSUF=".a"
1225
FULLNAME='$(NAME)$(BUILDSUF)'
1226
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1227
SLIBPREF="lib"
1228
SLIBSUF=".so"
1229
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1230
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1231
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1232
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1233

    
1234
host_cflags='-O3 -g -Wall'
1235
host_libs='-lm'
1236

    
1237
target_path='.'
1238

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

    
1243
# find source path
1244
source_path="$(dirname "$0")"
1245
enable source_path_used
1246
if test -z "$source_path" -o "$source_path" = "." ; then
1247
    source_path="$(pwd)"
1248
    disable source_path_used
1249
else
1250
    source_path="$(cd "$source_path"; pwd)"
1251
    echo "$source_path" | grep -q '[[:blank:]]' &&
1252
        die "Out of tree builds are impossible with whitespace in source path."
1253
    test -e "$source_path/config.h" &&
1254
        die "Out of tree builds are impossible with config.h in source dir."
1255
fi
1256

    
1257
for v in "$@"; do
1258
    r="${v#*=}"
1259
    l="${v%$r}"
1260
    test "$r" = "${r#* }" || r="'$r'"
1261
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1262
done
1263

    
1264
find_things(){
1265
    thing=$1
1266
    pattern=$2
1267
    file=$source_path/$3
1268
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1269
}
1270

    
1271
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1272
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1273
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1274
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1275
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1276
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1277
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1278
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1279
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1280
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1281
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1282

    
1283
enable $ARCH_EXT_LIST \
1284
       $DECODER_LIST \
1285
       $ENCODER_LIST \
1286
       $HWACCEL_LIST \
1287
       $PARSER_LIST \
1288
       $BSF_LIST \
1289
       $DEMUXER_LIST \
1290
       $MUXER_LIST \
1291
       $FILTER_LIST \
1292
       $PROTOCOL_LIST \
1293
       $INDEV_LIST \
1294
       $OUTDEV_LIST \
1295

    
1296
die_unknown(){
1297
    echo "Unknown option \"$1\"."
1298
    echo "See $0 --help for available options."
1299
    exit 1
1300
}
1301

    
1302
show_list() {
1303
    suffix=_$1
1304
    shift
1305
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1306
    exit 0
1307
}
1308

    
1309
for opt do
1310
    optval="${opt#*=}"
1311
    case "$opt" in
1312
    --extra-cflags=*) add_cflags $optval
1313
    ;;
1314
    --extra-ldflags=*) add_ldflags $optval
1315
    ;;
1316
    --extra-libs=*) add_extralibs $optval
1317
    ;;
1318
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1319
    ;;
1320
    --enable-debug=*) debuglevel="$optval"
1321
    ;;
1322
    --enable-*=*|--disable-*=*)
1323
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1324
    case "$thing" in
1325
        encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1326
        *) die_unknown "$opt" ;;
1327
    esac
1328
    ;;
1329
    --enable-?*|--disable-?*)
1330
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1331
    if is_in $option $COMPONENT_LIST; then
1332
        eval $action \$$(toupper ${option%s})_LIST
1333
    elif is_in $option $CMDLINE_SELECT; then
1334
        $action $option
1335
    else
1336
        die_unknown $opt
1337
    fi
1338
    ;;
1339
    --list-*)
1340
        NAME="${opt#--list-}"
1341
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1342
        NAME=${NAME%s}
1343
        eval show_list $NAME \$$(toupper $NAME)_LIST
1344
    ;;
1345
    --help|-h) show_help
1346
    ;;
1347
    *)
1348
    optname="${opt%%=*}"
1349
    optname="${optname#--}"
1350
    optname=$(echo "$optname" | sed 's/-/_/g')
1351
    is_in $optname $CMDLINE_SET || die_unknown $opt
1352
    eval $optname='$optval'
1353
    ;;
1354
    esac
1355
done
1356

    
1357
disabled logging && logfile=/dev/null
1358

    
1359
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1360
set >> $logfile
1361

    
1362
test -n "$cross_prefix" && enable cross_compile
1363

    
1364
ar="${cross_prefix}${ar}"
1365
cc_default="${cross_prefix}${cc_default}"
1366
nm_default="${cross_prefix}${nm_default}"
1367
ranlib="${cross_prefix}${ranlib}"
1368
strip="${cross_prefix}${strip}"
1369

    
1370
sysinclude_default="${sysroot}/usr/include"
1371

    
1372
set_default cc nm sysinclude
1373
as_default=$cc
1374
enabled cross_compile || host_cc_default=$cc
1375
set_default host_cc
1376

    
1377
exesuf() {
1378
    case $1 in
1379
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1380
    esac
1381
}
1382

    
1383
EXESUF=$(exesuf $target_os)
1384
HOSTEXESUF=$(exesuf $host_os)
1385

    
1386
# set temporary file name
1387
: ${TMPDIR:=$TEMPDIR}
1388
: ${TMPDIR:=$TMP}
1389
: ${TMPDIR:=/tmp}
1390

    
1391
if ! check_cmd type mktemp; then
1392
    # simple replacement for missing mktemp
1393
    # NOT SAFE FOR GENERAL USE
1394
    mktemp(){
1395
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1396
    }
1397
fi
1398

    
1399
tmpfile(){
1400
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1401
        (set -C; exec > $tmp) 2>/dev/null ||
1402
        die "Unable to create temoporary file in $TMPDIR."
1403
    append TMPFILES $tmp
1404
    eval $1=$tmp
1405
}
1406

    
1407
trap 'rm -f -- $TMPFILES' EXIT
1408
trap exit HUP INT TERM
1409

    
1410
tmpfile TMPC  .c
1411
tmpfile TMPE  $EXESUF
1412
tmpfile TMPH  .h
1413
tmpfile TMPO  .o
1414
tmpfile TMPS  .S
1415
tmpfile TMPSH .sh
1416

    
1417
unset -f mktemp
1418

    
1419
# make sure we can execute files in $TMPDIR
1420
cat > $TMPSH 2>> $logfile <<EOF
1421
#! /bin/sh
1422
EOF
1423
chmod +x $TMPSH >> $logfile 2>&1
1424
if ! $TMPSH >> $logfile 2>&1; then
1425
    cat <<EOF
1426
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1427
variable to another directory and make sure that it is not mounted noexec.
1428
EOF
1429
    die "Sanity test failed."
1430
fi
1431

    
1432
if   $cc --version 2>/dev/null | grep -qi gcc; then
1433
    cc_type=gcc
1434
elif $cc --version 2>/dev/null | grep -q Intel; then
1435
    cc_type=icc
1436
elif $cc -v 2>&1 | grep -q xlc; then
1437
    cc_type=xlc
1438
elif $cc -V 2>/dev/null | grep -q Compaq; then
1439
    cc_type=ccc
1440
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1441
    debuglevel=3
1442
    add_ldflags -Wl,-z,now # calls to libots crash without this
1443
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1444
    test -d "$sysroot" || die "No valid sysroot specified."
1445
    cc_type=armcc
1446
    armcc_conf="$PWD/armcc.conf"
1447
    $cc --arm_linux_configure                 \
1448
        --arm_linux_config_file="$armcc_conf" \
1449
        --configure_sysroot="$sysroot"        \
1450
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1451
        die "Error creating armcc configuration file."
1452
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1453
    as_default="${cross_prefix}gcc"
1454
fi
1455

    
1456
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1457

    
1458
set_default as
1459

    
1460
if test -n "$sysroot"; then
1461
    case "$cc_type" in
1462
        gcc)
1463
            add_cflags  --sysroot="$sysroot"
1464
            add_ldflags --sysroot="$sysroot"
1465
        ;;
1466
    esac
1467
fi
1468

    
1469
# compiler sanity check
1470
check_exec <<EOF
1471
int main(void){ return 0; }
1472
EOF
1473
if test "$?" != 0; then
1474
    echo "$cc is unable to create an executable file."
1475
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1476
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1477
        echo "Only do this if you know what cross compiling means."
1478
    fi
1479
    die "C compiler test failed."
1480
fi
1481

    
1482
check_cflags -std=c99
1483
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1484
#include <stdlib.h>
1485
EOF
1486
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1487
#include <stdlib.h>
1488
EOF
1489

    
1490
case "$arch" in
1491
    alpha)
1492
        arch="alpha"
1493
        enable fast_64bit
1494
        check_cflags -mieee
1495
    ;;
1496
    arm|armv[4567]*l)
1497
        arch="arm"
1498
    ;;
1499
    avr32)
1500
    ;;
1501
    bfin)
1502
        arch="bfin"
1503
    ;;
1504
    ia64)
1505
        arch="ia64"
1506
        enable fast_64bit
1507
    ;;
1508
    m68k)
1509
        arch="m68k"
1510
    ;;
1511
    mips|mipsel|IP*)
1512
        arch="mips"
1513
    ;;
1514
    mips64)
1515
        arch="mips"
1516
        subarch="mips64"
1517
        enable fast_64bit
1518
    ;;
1519
    parisc|hppa)
1520
        arch="parisc"
1521
    ;;
1522
    parisc64|hppa64)
1523
        arch="parisc"
1524
        enable fast_64bit
1525
    ;;
1526
    "Power Macintosh"|ppc|powerpc)
1527
        arch="ppc"
1528
        enable fast_unaligned
1529
    ;;
1530
    ppc64)
1531
        arch="ppc"
1532
        subarch="ppc64"
1533
        enable fast_64bit
1534
        enable fast_unaligned
1535
    ;;
1536
    s390|s390x)
1537
        arch="s390"
1538
    ;;
1539
    sh4|sh)
1540
        arch="sh4"
1541
    ;;
1542
    sparc)
1543
        arch="sparc"
1544
    ;;
1545
    sun4u|sparc64)
1546
        arch="sparc"
1547
        subarch="sparc64"
1548
        enable fast_64bit
1549
    ;;
1550
    i386|i486|i586|i686|i86pc|BePC)
1551
        arch="x86"
1552
        subarch="x86_32"
1553
        enable fast_unaligned
1554
    ;;
1555
    x86_64|amd64)
1556
        arch="x86"
1557
        subarch="x86_32"
1558
        enable cmov
1559
        enable fast_cmov
1560
        enable fast_unaligned
1561
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1562
        int test[sizeof(char*) - 7];
1563
EOF
1564
    ;;
1565
    *)
1566
        arch="unknown"
1567
    ;;
1568
esac
1569

    
1570
enable $arch $subarch
1571

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

    
1719
    *)
1720
        die "Unknown OS '$target_os'."
1721
        ;;
1722
esac
1723

    
1724
set_default $PATHS_LIST
1725

    
1726
add_extralibs $osextralibs
1727

    
1728
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1729
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1730

    
1731
# we need to build at least one lib type
1732
if ! enabled_any static shared; then
1733
    cat <<EOF
1734
At least one library type must be built.
1735
Specify --enable-static to build the static libraries or --enable-shared to
1736
build the shared libraries as well. To only build the shared libraries specify
1737
--disable-static in addition to --enable-shared.
1738
EOF
1739
    exit 1;
1740
fi
1741

    
1742
disabled static && LIBNAME=""
1743

    
1744
if enabled_any libfaad libfaadbin ; then
1745
    if check_header faad.h; then
1746
        check_cc <<EOF
1747
#include <faad.h>
1748
#ifndef FAAD2_VERSION
1749
ok faad1
1750
#endif
1751
int main(void) { return 0; }
1752
EOF
1753
        test $? = 0 && enable libfaad2
1754
    else
1755
        die "FAAD test failed."
1756
    fi
1757
fi
1758

    
1759

    
1760
die_license_disabled() {
1761
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1762
}
1763

    
1764
die_license_disabled gpl libfaad2
1765
die_license_disabled gpl libx264
1766
die_license_disabled gpl libxvid
1767
die_license_disabled gpl postproc
1768
die_license_disabled gpl x11grab
1769

    
1770
die_license_disabled nonfree libamr_nb
1771
die_license_disabled nonfree libamr_wb
1772
die_license_disabled nonfree libfaac
1773

    
1774
die_license_disabled version3 libopencore_amrnb
1775
die_license_disabled version3 libopencore_amrwb
1776

    
1777
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1778

    
1779
check_deps $ARCH_EXT_LIST
1780

    
1781
test -z "$need_memalign" && need_memalign="$mmx"
1782

    
1783
#Darwin CC versions
1784
if test $target_os = darwin; then
1785
    if enabled xlc; then
1786
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1787
    else
1788
        add_cflags -pipe
1789
        check_cflags -force_cpusubtype_ALL
1790
        check_cflags -Wno-sign-compare
1791
        enabled shared || check_cflags -mdynamic-no-pic
1792
    fi
1793
fi
1794

    
1795
disabled optimizations || check_cflags -fomit-frame-pointer
1796

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

    
1881
check_cc <<EOF || die "Symbol mangling check failed."
1882
int ff_extern;
1883
EOF
1884
sym=$($nm -P -g $TMPO | grep ff_extern)
1885
extern_prefix=${sym%%ff_extern*}
1886

    
1887
check_cc <<EOF && enable inline_asm
1888
void foo(void) { __asm__ volatile ("" ::); }
1889
EOF
1890

    
1891
if enabled x86; then
1892
    # check whether EBP is available on x86
1893
    # As 'i' is stored on the stack, this program will crash
1894
    # if the base pointer is used to access it because the
1895
    # base pointer is cleared in the inline assembly code.
1896
    check_exec_crash <<EOF && enable ebp_available
1897
    volatile int i=0;
1898
    __asm__ volatile (
1899
        "xorl %%ebp, %%ebp"
1900
    ::: "%ebp");
1901
    return i;
1902
EOF
1903

    
1904
    # check wether EBX is available on x86
1905
    check_asm ebx_available '"":::"%ebx"'
1906

    
1907
    # check whether more than 10 operands are supported
1908
    check_cc <<EOF && enable ten_operands
1909
int main(void) {
1910
    int x=0;
1911
    __asm__ volatile(
1912
        ""
1913
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1914
    );
1915
    return 0;
1916
}
1917
EOF
1918

    
1919
    # check whether binutils is new enough to compile SSSE3/MMX2
1920
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1921
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1922

    
1923
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1924

    
1925
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1926
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1927
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1928
    case "$objformat" in
1929
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1930
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1931
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1932
    esac
1933
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1934
fi
1935

    
1936
# check for assembler specific support
1937

    
1938
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1939

    
1940
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1941
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1942
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1943

    
1944
# check for SIMD availability
1945

    
1946
# AltiVec flags: The FSF version of GCC differs from the Apple version
1947
if enabled altivec; then
1948
    check_cflags -maltivec -mabi=altivec &&
1949
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1950
        check_cflags -faltivec
1951

    
1952
    # check if our compiler supports Motorola AltiVec C API
1953
    check_cc <<EOF || disable altivec
1954
$inc_altivec_h
1955
int main(void) {
1956
    vector signed int v1, v2, v3;
1957
    v1 = vec_add(v2,v3);
1958
    return 0;
1959
}
1960
EOF
1961

    
1962
    # check if our compiler supports braces for vector declarations
1963
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1964
$inc_altivec_h
1965
int main (void) { (vector int) {1}; return 0; }
1966
EOF
1967
fi
1968

    
1969
# We have to check if pld is a nop and disable it.
1970
enabled arm     && check_asm pld     '"pld [r0]"'
1971
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1972
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1973
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1974
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1975
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1976
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1977
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1978
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1979

    
1980
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1981

    
1982
# ---
1983
# big/little-endian test
1984
check_cc <<EOF || die "endian test failed"
1985
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1986
EOF
1987
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1988

    
1989
# ---
1990
# check availability of some header files
1991

    
1992
if check_func dlopen; then
1993
    ldl=
1994
elif check_func dlopen -ldl; then
1995
    ldl=-ldl
1996
fi
1997

    
1998
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1999
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2000

    
2001
check_func  fork
2002
check_func  gethrtime
2003
check_func  getrusage
2004
check_func  inet_aton $network_extralibs
2005
check_func  memalign
2006
check_func  mkstemp
2007
check_func  posix_memalign
2008
check_func_headers io.h setmode
2009
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2010
check_func_headers windows.h GetProcessTimes
2011
check_func_headers windows.h VirtualAlloc
2012

    
2013
check_header conio.h
2014
check_header dlfcn.h
2015
check_header malloc.h
2016
check_header poll.h
2017
check_header sys/mman.h
2018
check_header sys/resource.h
2019
check_header sys/select.h
2020
check_header termios.h
2021
check_header vdpau/vdpau.h
2022
check_header vdpau/vdpau_x11.h
2023
check_header X11/extensions/XvMClib.h
2024

    
2025
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2026
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2027
fi
2028

    
2029
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2030
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2031

    
2032
# check for some common methods of building with pthread support
2033
# do this before the optional library checks as some of them require pthreads
2034
if enabled pthreads; then
2035
    if check_func pthread_create; then
2036
        :
2037
    elif check_func pthread_create -pthread; then
2038
        add_cflags -pthread
2039
        add_extralibs -pthread
2040
    elif check_func pthread_create -pthreads; then
2041
        add_cflags -pthreads
2042
        add_extralibs -pthreads
2043
    elif check_func pthread_create -lpthreadGC2; then
2044
        add_extralibs -lpthreadGC2
2045
    elif ! check_lib pthread.h pthread_create -lpthread; then
2046
        die "ERROR: can't find pthreads library"
2047
    fi
2048
fi
2049

    
2050
for thread in $THREADS_LIST; do
2051
    if enabled $thread; then
2052
        test -n "$thread_type" &&
2053
            die "ERROR: Only one thread type must be selected." ||
2054
            thread_type="$thread"
2055
    fi
2056
done
2057

    
2058
check_lib math.h sin -lm
2059
check_lib va/va.h vaInitialize -lva
2060

    
2061
# test for C99 functions in math.h
2062
for func in llrint lrint lrintf round roundf truncf; do
2063
    check_exec <<EOF && enable $func || disable $func
2064
#include <math.h>
2065
int main(void) { return ($func(3.999f) > 0)?0:1; }
2066
EOF
2067
done
2068

    
2069
# these are off by default, so fail if requested and not available
2070
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2071
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2072
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2073
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2074
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2075
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2076
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2077
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2078
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2079
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2080
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2081
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2082
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2083
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2084
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2085
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2086
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2087
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2088
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2089
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2090
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2091
                        die "ERROR: libx264 version must be >= 0.65."; }
2092
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2093
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2094

    
2095
# libdc1394 check
2096
if enabled libdc1394; then
2097
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2098
        enable libdc1394_2; } ||
2099
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2100
        enable libdc1394_1; } ||
2101
    die "ERROR: No version of libdc1394 found "
2102
fi
2103

    
2104

    
2105
_restrict=
2106
for restrict_keyword in restrict __restrict__ __restrict; do
2107
    check_cc <<EOF && _restrict=$restrict_keyword && break
2108
void foo(char * $restrict_keyword p);
2109
EOF
2110
done
2111

    
2112
##########################################
2113
# SDL check
2114

    
2115
disable sdl_too_old
2116
disable sdl
2117
SDL_CONFIG="${cross_prefix}sdl-config"
2118
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2119
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2120
    temp_cflags $sdl_cflags
2121
    temp_extralibs $("${SDL_CONFIG}" --libs)
2122
    if check_lib2 SDL.h SDL_Init; then
2123
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2124
        if test "$_sdlversion" -lt 121 ; then
2125
            enable sdl_too_old
2126
        else
2127
            enable sdl
2128
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2129
#include <SDL.h>
2130
int main(int argc, char **argv){
2131
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2132
    int w = vi->current_w;
2133
    return 0;
2134
}
2135
EOF
2136
        fi
2137
    fi
2138
    restore_flags
2139
fi
2140

    
2141
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2142

    
2143
##########################################
2144
# Network check
2145

    
2146
if enabled network; then
2147
    check_type "sys/types.h sys/socket.h" socklen_t
2148
    # Prefer arpa/inet.h over winsock2
2149
    if check_header arpa/inet.h ; then
2150
        check_func closesocket
2151
    elif check_header winsock2.h ; then
2152
        network_extralibs="-lws2_32"
2153
        check_type ws2tcpip.h socklen_t
2154
        check_func_headers winsock2.h closesocket
2155
    fi
2156
fi
2157

    
2158
##########################################
2159
# IPv6 check
2160

    
2161
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2162
#include <sys/types.h>
2163
#include <sys/socket.h>
2164
#include <netinet/in.h>
2165
#include <netdb.h>
2166
int main(void) {
2167
    struct sockaddr_storage saddr;
2168
    struct ipv6_mreq mreq6;
2169
    getaddrinfo(0,0,0,0);
2170
    getnameinfo(0,0,0,0,0,0,0);
2171
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2172
}
2173
EOF
2174

    
2175
check_header linux/videodev.h
2176
check_header linux/videodev2.h
2177
check_header sys/videoio.h
2178

    
2179
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2180

    
2181
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2182
{ check_header dev/bktr/ioctl_meteor.h &&
2183
  check_header dev/bktr/ioctl_bt848.h; } ||
2184
{ check_header machine/ioctl_meteor.h &&
2185
  check_header machine/ioctl_bt848.h; } ||
2186
{ check_header dev/video/meteor/ioctl_meteor.h &&
2187
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2188
check_header dev/ic/bt8xx.h
2189

    
2190
check_header sys/soundcard.h
2191
check_header soundcard.h
2192

    
2193
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2194

    
2195
check_lib2 jack/jack.h jack_client_open -ljack
2196

    
2197
# deal with the X11 frame grabber
2198
enabled x11grab                         &&
2199
check_header X11/Xlib.h                 &&
2200
check_header X11/extensions/XShm.h      &&
2201
check_func XOpenDisplay -lX11           &&
2202
check_func XShmCreateImage -lX11 -lXext
2203

    
2204
enabled debug && add_cflags -g"$debuglevel"
2205

    
2206
# add some useful compiler flags if supported
2207
check_cflags -Wdeclaration-after-statement
2208
check_cflags -Wall
2209
check_cflags -Wno-switch
2210
check_cflags -Wdisabled-optimization
2211
check_cflags -Wpointer-arith
2212
check_cflags -Wredundant-decls
2213
check_cflags -Wno-pointer-sign
2214
check_cflags -Wcast-qual
2215
check_cflags -Wwrite-strings
2216
check_cflags -Wtype-limits
2217
check_cflags -Wundef
2218
enabled extra_warnings && check_cflags -Winline
2219

    
2220
# add some linker flags
2221
check_ldflags -Wl,--warn-common
2222
check_ldflags -Wl,--as-needed
2223
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'
2224
check_ldflags -Wl,-Bsymbolic
2225

    
2226
if enabled small; then
2227
    check_cflags -Os            # not all compilers support -Os
2228
    optimizations="small"
2229
elif enabled optimizations; then
2230
    if enabled xlc; then
2231
        add_cflags  -O5
2232
        add_ldflags -O5
2233
    elif enabled ccc; then
2234
        add_cflags -fast
2235
    else
2236
        add_cflags -O3
2237
    fi
2238
fi
2239
check_cflags -fno-math-errno
2240
check_cflags -fno-signed-zeros
2241

    
2242
# add some flags for Intel C Compiler
2243
if enabled icc; then
2244
    # Just warnings, no remarks
2245
    check_cflags -w1
2246
    # -wd: Disable following warnings
2247
    # 144, 167, 556: -Wno-pointer-sign
2248
    # 10006: ignoring unknown option -fno-signed-zeros
2249
    # 10156: ignoring option '-W'; no argument required
2250
    check_cflags -wd144,167,556,10006,10156
2251
    # 11030: Warning unknown option --as-needed
2252
    # 10156: ignoring option '-export'; no argument required
2253
    check_ldflags -wd10156,11030
2254
    # Allow to compile with optimizations
2255
    check_ldflags -march=$cpu
2256
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2257
    enable ebp_available
2258
elif enabled ccc; then
2259
    # disable some annoying warnings
2260
    add_cflags -msg_disable cvtu32to64
2261
    add_cflags -msg_disable embedcomment
2262
    add_cflags -msg_disable needconstext
2263
    add_cflags -msg_disable nomainieee
2264
    add_cflags -msg_disable ptrmismatch1
2265
    add_cflags -msg_disable unreachcode
2266
fi
2267

    
2268
# PIC flags for shared library objects where they are needed
2269
if enabled shared; then
2270
    # LIBOBJFLAGS may have already been set in the OS configuration
2271
    if test -z "$LIBOBJFLAGS" ; then
2272
        case "${subarch-$arch}" in
2273
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2274
        esac
2275
    fi
2276
fi
2277

    
2278
if enabled gprof; then
2279
    add_cflags  -p
2280
    add_ldflags -p
2281
fi
2282

    
2283
# Find out if the .align argument is a power of two or not.
2284
check_asm asmalign_pot '".align 3"'
2285

    
2286
enabled_any $DECODER_LIST      && enable decoders
2287
enabled_any $ENCODER_LIST      && enable encoders
2288
enabled_any $HWACCEL_LIST      && enable hwaccels
2289
enabled_any $BSF_LIST          && enable bsfs
2290
enabled_any $DEMUXER_LIST      && enable demuxers
2291
enabled_any $MUXER_LIST        && enable muxers
2292
enabled_any $FILTER_LIST       && enable filters
2293
enabled_any $INDEV_LIST        && enable demuxers
2294
enabled_any $OUTDEV_LIST       && enable muxers
2295
enabled_any $PROTOCOL_LIST     && enable protocols
2296

    
2297
enabled_any $THREADS_LIST      && enable threads
2298

    
2299
check_deps $CONFIG_LIST       \
2300
           $CONFIG_EXTRA      \
2301
           $HAVE_LIST         \
2302
           $DECODER_LIST      \
2303
           $ENCODER_LIST      \
2304
           $HWACCEL_LIST      \
2305
           $PARSER_LIST       \
2306
           $BSF_LIST          \
2307
           $DEMUXER_LIST      \
2308
           $MUXER_LIST        \
2309
           $FILTER_LIST       \
2310
           $INDEV_LIST        \
2311
           $OUTDEV_LIST       \
2312
           $PROTOCOL_LIST     \
2313

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

    
2404
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2405
    echo "Enabled ${type}s:"
2406
    eval list=\$$(toupper $type)_LIST
2407
    for part in $list; do
2408
        enabled $part && echo ${part%_*}
2409
    done | sort | pr -3 -t
2410
    echo
2411
done
2412

    
2413
license="LGPL version 2.1 or later"
2414
if enabled nonfree; then
2415
    license="nonfree and unredistributable"
2416
elif enabled gplv3; then
2417
    license="GPL version 3 or later"
2418
elif enabled lgplv3; then
2419
    license="LGPL version 3 or later"
2420
elif enabled gpl; then
2421
    license="GPL version 2 or later"
2422
fi
2423

    
2424
echo "License: $license"
2425

    
2426
echo "Creating config.mak and config.h..."
2427

    
2428
echo "# Automatically generated by configure - do not modify!" > config.mak
2429
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2430
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2431
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2432
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2433
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2434

    
2435
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2436
echo "prefix=$prefix" >> config.mak
2437
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2438
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2439
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2440
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2441
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2442
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2443
echo "SRC_PATH=\"$source_path\"" >> config.mak
2444
echo "SRC_PATH_BARE=$source_path" >> config.mak
2445
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2446
echo "CC=$cc" >> config.mak
2447
echo "AS=$as" >> config.mak
2448
echo "YASM=$yasmexe" >> config.mak
2449
echo "AR=$ar" >> config.mak
2450
echo "RANLIB=$ranlib" >> config.mak
2451
echo "LN_S=$ln_s" >> config.mak
2452
enabled stripping &&
2453
    echo "STRIP=$strip" >> config.mak ||
2454
    echo "STRIP=echo ignoring strip" >> config.mak
2455

    
2456
echo "OPTFLAGS=$CFLAGS" >> config.mak
2457
echo "LDFLAGS=$LDFLAGS" >> config.mak
2458
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2459
echo "SHFLAGS=$SHFLAGS" >> config.mak
2460
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2461
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2462
echo "BUILD_STATIC=$static" >> config.mak
2463
echo "BUILDSUF=$build_suffix" >> config.mak
2464
echo "FULLNAME=$FULLNAME" >> config.mak
2465
echo "LIBPREF=$LIBPREF" >> config.mak
2466
echo "LIBSUF=$LIBSUF" >> config.mak
2467
echo "LIBNAME=$LIBNAME" >> config.mak
2468
echo "SLIBPREF=$SLIBPREF" >> config.mak
2469
echo "SLIBSUF=$SLIBSUF" >> config.mak
2470
echo "EXESUF=$EXESUF" >> config.mak
2471
echo "EXTRA_VERSION=$extra_version" >> config.mak
2472
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2473
echo "HOSTCC=$host_cc" >> config.mak
2474
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2475
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2476
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2477
echo "HOSTLIBS=$host_libs" >> config.mak
2478
echo "TARGET_EXEC=$target_exec" >> config.mak
2479
echo "TARGET_PATH=$target_path" >> config.mak
2480

    
2481
if enabled bigendian; then
2482
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2483
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2484
fi
2485

    
2486
if enabled sdl; then
2487
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2488
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2489
fi
2490
if enabled texi2html; then
2491
    echo "BUILD_DOC=yes" >> config.mak
2492
fi
2493

    
2494
get_version(){
2495
    name=$1
2496
    file=$source_path/$2
2497
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2498
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2499
    lcname=$(tolower $name)
2500
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2501
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2502
}
2503

    
2504
get_version LIBSWSCALE  libswscale/swscale.h
2505
get_version LIBPOSTPROC libpostproc/postprocess.h
2506
get_version LIBAVCODEC  libavcodec/avcodec.h
2507
get_version LIBAVDEVICE libavdevice/avdevice.h
2508
get_version LIBAVFORMAT libavformat/avformat.h
2509
get_version LIBAVUTIL   libavutil/avutil.h
2510
get_version LIBAVFILTER libavfilter/avfilter.h
2511

    
2512
if enabled shared; then
2513
    echo "BUILD_SHARED=yes" >> config.mak
2514
    echo "PIC=-fPIC -DPIC" >> config.mak
2515
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2516
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2517
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2518
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2519
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2520
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2521
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2522
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2523
fi
2524
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2525
echo "EXTRALIBS=$extralibs" >> config.mak
2526

    
2527
echo "ARCH=$arch" >> config.mak
2528

    
2529
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2530
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2531
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2532
                                      $CONFIG_EXTRA      \
2533
                                      $DECODER_LIST      \
2534
                                      $ENCODER_LIST      \
2535
                                      $HWACCEL_LIST      \
2536
                                      $PARSER_LIST       \
2537
                                      $BSF_LIST          \
2538
                                      $DEMUXER_LIST      \
2539
                                      $MUXER_LIST        \
2540
                                      $FILTER_LIST       \
2541
                                      $PROTOCOL_LIST     \
2542
                                      $INDEV_LIST        \
2543
                                      $OUTDEV_LIST       \
2544

    
2545
echo "#define restrict $_restrict" >> $TMPH
2546

    
2547
if enabled small; then
2548
    echo "#define av_always_inline"  >> $TMPH
2549
fi
2550

    
2551

    
2552
# Apparently it's not possible to portably echo a backslash.
2553
enabled asmalign_pot &&
2554
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2555
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2556

    
2557
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2558

    
2559
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2560

    
2561
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2562
cmp -s $TMPH config.h &&
2563
    echo "config.h is unchanged" ||
2564
    mv -f $TMPH config.h
2565

    
2566
# build tree in object directory if source path is different from current one
2567
if enabled source_path_used; then
2568
    DIRS="\
2569
        doc               \
2570
        libavcodec        \
2571
        libavcodec/alpha  \
2572
        libavcodec/arm    \
2573
        libavcodec/bfin   \
2574
        libavcodec/mlib   \
2575
        libavcodec/ppc    \
2576
        libavcodec/sh4    \
2577
        libavcodec/sparc  \
2578
        libavcodec/x86    \
2579
        libavdevice       \
2580
        libavfilter       \
2581
        libavformat       \
2582
        libavutil         \
2583
        libpostproc       \
2584
        libswscale        \
2585
        libswscale/bfin   \
2586
        libswscale/mlib   \
2587
        libswscale/ppc    \
2588
        libswscale/sparc  \
2589
        libswscale/x86    \
2590
        tests             \
2591
        tools             \
2592
        "
2593
    FILES="\
2594
        Makefile             \
2595
        common.mak           \
2596
        subdir.mak           \
2597
        doc/texi2pod.pl      \
2598
        libavcodec/Makefile  \
2599
        libavdevice/Makefile \
2600
        libavfilter/Makefile \
2601
        libavformat/Makefile \
2602
        libavutil/Makefile   \
2603
        libpostproc/Makefile \
2604
        libswscale/Makefile  \
2605
        "
2606
    for dir in $DIRS ; do
2607
        mkdir -p $dir
2608
    done
2609
    for f in $FILES ; do
2610
        $ln_s "$source_path/$f" $f
2611
    done
2612
fi
2613

    
2614

    
2615
# build pkg-config files
2616

    
2617
pkgconfig_generate(){
2618
name=$1
2619
shortname=${name#lib}${build_suffix}
2620
comment=$2
2621
version=$3
2622
libs=$4
2623
requires=$5
2624
cat <<EOF > $name/$name.pc
2625
prefix=$prefix
2626
exec_prefix=\${prefix}
2627
libdir=$libdir
2628
includedir=$incdir
2629

    
2630
Name: $name
2631
Description: $comment
2632
Version: $version
2633
Requires: $(disabled shared && echo $requires)
2634
Requires.private: $(enabled shared && echo $requires)
2635
Conflicts:
2636
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2637
Libs.private: $(enabled shared && echo $libs)
2638
Cflags: -I\${includedir}
2639
EOF
2640
cat <<EOF > $name/$name-uninstalled.pc
2641
prefix=
2642
exec_prefix=
2643
libdir=\${pcfiledir}
2644
includedir=${source_path}
2645

    
2646
Name: $name
2647
Description: $comment
2648
Version: $version
2649
Requires: $requires
2650
Conflicts:
2651
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2652
Cflags: -I\${includedir}
2653
EOF
2654
}
2655

    
2656
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2657
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2658
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2659
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2660
enabled avfilter &&
2661
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2662
enabled postproc &&
2663
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2664
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"