Statistics
| Branch: | Revision:

ffmpeg / configure @ 7fc58b1e

History | View | Annotate | Download (79.8 KB)

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

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

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

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

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

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

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

    
57
show_help(){
58
cat <<EOF
59
Usage: configure [options]
60
Options: [defaults in brackets after descriptions]
61

    
62
Standard options:
63
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.err]
65
  --disable-logging        do not log configure debug information
66
  --prefix=PREFIX          install in PREFIX [$prefix]
67
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
68
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69
  --libdir=DIR             install libs in DIR [PREFIX/lib]
70
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71
  --incdir=DIR             install includes in DIR [PREFIX/include]
72
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
73

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffserver       disable ffserver build
86
  --enable-postproc        enable GPLed postprocessing support [no]
87
  --enable-avfilter        video filter support [no]
88
  --enable-avfilter-lavf   video filters dependent on avformat [no]
89
  --enable-beosthreads     use BeOS threads [no]
90
  --enable-os2threads      use OS/2 threads [no]
91
  --enable-pthreads        use pthreads [no]
92
  --enable-w32threads      use Win32 threads [no]
93
  --enable-x11grab         enable X11 grabbing [no]
94
  --disable-network        disable network support [no]
95
  --disable-ipv6           disable IPv6 support [no]
96
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
97
  --enable-gray            enable full grayscale support (slower color)
98
  --disable-swscale-alpha  disable alpha channel support in swscale
99
  --disable-fastdiv        disable table-based division
100
  --enable-small           optimize for size instead of speed
101
  --disable-aandct         disable AAN DCT code
102
  --disable-fft            disable FFT code
103
  --disable-golomb         disable Golomb code
104
  --disable-lpc            disable LPC code
105
  --disable-mdct           disable MDCT code
106
  --disable-rdft           disable RDFT code
107
  --disable-vaapi          disable VAAPI code
108
  --disable-vdpau          disable VDPAU code
109
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
110
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
111
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
112
  --enable-beos-netserver  enable BeOS netserver
113
  --disable-encoder=NAME   disable encoder NAME
114
  --enable-encoder=NAME    enable encoder NAME
115
  --disable-encoders       disable all encoders
116
  --disable-decoder=NAME   disable decoder NAME
117
  --enable-decoder=NAME    enable decoder NAME
118
  --disable-decoders       disable all decoders
119
  --disable-hwaccel=NAME   disable hwaccel NAME
120
  --enable-hwaccel=NAME    enable hwaccel NAME
121
  --disable-hwaccels       disable all hwaccels
122
  --disable-muxer=NAME     disable muxer NAME
123
  --enable-muxer=NAME      enable muxer NAME
124
  --disable-muxers         disable all muxers
125
  --disable-demuxer=NAME   disable demuxer NAME
126
  --enable-demuxer=NAME    enable demuxer NAME
127
  --disable-demuxers       disable all demuxers
128
  --enable-parser=NAME     enable parser NAME
129
  --disable-parser=NAME    disable parser NAME
130
  --disable-parsers        disable all parsers
131
  --enable-bsf=NAME        enable bitstream filter NAME
132
  --disable-bsf=NAME       disable bitstream filter NAME
133
  --disable-bsfs           disable all bitstream filters
134
  --enable-protocol=NAME   enable protocol NAME
135
  --disable-protocol=NAME  disable protocol NAME
136
  --disable-protocols      disable all protocols
137
  --disable-indev=NAME     disable input device NAME
138
  --disable-outdev=NAME    disable output device NAME
139
  --disable-indevs         disable input devices
140
  --disable-outdevs        disable output devices
141
  --disable-devices        disable all devices
142
  --enable-filter=NAME     enable filter NAME
143
  --disable-filter=NAME    disable filter NAME
144
  --disable-filters        disable all filters
145
  --list-decoders          show all available decoders
146
  --list-encoders          show all available encoders
147
  --list-hwaccels          show all available hardware accelerators
148
  --list-muxers            show all available muxers
149
  --list-demuxers          show all available demuxers
150
  --list-parsers           show all available parsers
151
  --list-protocols         show all available protocols
152
  --list-bsfs              show all available bitstream filters
153
  --list-indevs            show all available input devices
154
  --list-outdevs           show all available output devices
155
  --list-filters           show all available filters
156

    
157
External library support:
158
  --enable-avisynth        enable reading of AVISynth script files [no]
159
  --enable-bzlib           enable bzlib [autodetect]
160
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
161
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
162
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
163
                           and libraw1394 [no]
164
  --enable-libdirac        enable Dirac support via libdirac [no]
165
  --enable-libfaac         enable FAAC support via libfaac [no]
166
  --enable-libfaad         enable FAAD support via libfaad [no]
167
  --enable-libfaadbin      open libfaad.so.0 at runtime [no]
168
  --enable-libgsm          enable GSM support via libgsm [no]
169
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
170
  --enable-libnut          enable NUT (de)muxing via libnut,
171
                           native (de)muxer exists [no]
172
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
173
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
174
  --enable-libspeex        enable Speex decoding via libspeex [no]
175
  --enable-libtheora       enable Theora encoding via libtheora [no]
176
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
177
                           native implementation exists [no]
178
  --enable-libx264         enable H.264 encoding via x264 [no]
179
  --enable-libxvid         enable Xvid encoding via xvidcore,
180
                           native MPEG-4/Xvid encoder exists [no]
181
  --enable-mlib            enable Sun medialib [no]
182
  --enable-zlib            enable zlib [autodetect]
183

    
184
Advanced options (experts only):
185
  --source-path=PATH       path to source code [$source_path]
186
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
187
  --enable-cross-compile   assume a cross-compiler is used
188
  --sysroot=PATH           root of cross-build tree
189
  --sysinclude=PATH        location of cross-build system headers
190
  --target-os=OS           compiler targets OS [$target_os]
191
  --target-exec=CMD        command to run executables on target
192
  --target-path=DIR        path to view of build directory on target
193
  --nm=NM                  use nm tool
194
  --as=AS                  use assembler AS [$as_default]
195
  --cc=CC                  use C compiler CC [$cc_default]
196
  --ld=LD                  use linker LD
197
  --host-cc=HOSTCC         use host C compiler HOSTCC
198
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
199
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
200
  --host-libs=HLIBS        use libs HLIBS when linking for host
201
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
202
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
203
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
204
  --extra-version=STRING   version string suffix []
205
  --build-suffix=SUFFIX    library name suffix []
206
  --arch=ARCH              select architecture [$arch]
207
  --cpu=CPU                select the minimum required CPU (affects
208
                           instruction selection, may crash on older CPUs)
209
  --enable-powerpc-perf    enable performance report on PPC
210
                           (requires enabling PMC)
211
  --disable-altivec        disable AltiVec optimizations
212
  --disable-amd3dnow       disable 3DNow! optimizations
213
  --disable-amd3dnowext    disable 3DNow! extended optimizations
214
  --disable-mmx            disable MMX optimizations
215
  --disable-mmx2           disable MMX2 optimizations
216
  --disable-sse            disable SSE optimizations
217
  --disable-ssse3          disable SSSE3 optimizations
218
  --disable-armv5te        disable armv5te optimizations
219
  --disable-armv6          disable armv6 optimizations
220
  --disable-armv6t2        disable armv6t2 optimizations
221
  --disable-armvfp         disable ARM VFP optimizations
222
  --disable-iwmmxt         disable iwmmxt optimizations
223
  --disable-mmi            disable MMI optimizations
224
  --disable-neon           disable neon optimizations
225
  --disable-vis            disable VIS optimizations
226
  --disable-yasm           disable use of yasm assembler
227
  --enable-pic             build position-independent code
228

    
229
Developer options (useful when working on FFmpeg itself):
230
  --disable-debug          disable debugging symbols
231
  --enable-debug=LEVEL     set the debug level [$debuglevel]
232
  --enable-gprof           enable profiling with gprof [$gprof]
233
  --disable-optimizations  disable compiler optimizations
234
  --enable-extra-warnings  enable more compiler warnings
235
  --disable-stripping      disable stripping of executables and shared libraries
236

    
237
NOTE: Object files are built at the place where configure is launched.
238
EOF
239
  exit 0
240
}
241

    
242
log(){
243
    echo "$@" >> $logfile
244
}
245

    
246
log_file(){
247
    log BEGIN $1
248
    pr -n -t $1 >> $logfile
249
    log END $1
250
}
251

    
252
echolog(){
253
    log "$@"
254
    echo "$@"
255
}
256

    
257
die(){
258
    echolog "$@"
259
    cat <<EOF
260

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

    
279
# Avoid locale weirdness, besides we really just want to translate ASCII.
280
toupper(){
281
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
282
}
283

    
284
tolower(){
285
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
286
}
287

    
288
c_escape(){
289
    echo "$*" | sed 's/["\\]/\\\0/g'
290
}
291

    
292
sh_quote(){
293
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
294
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
295
    echo "$v"
296
}
297

    
298
filter(){
299
    pat=$1
300
    shift
301
    for v; do
302
        eval "case $v in $pat) echo $v ;; esac"
303
    done
304
}
305

    
306
set_all(){
307
    value=$1
308
    shift
309
    for var in $*; do
310
        eval $var=$value
311
    done
312
}
313

    
314
set_weak(){
315
    value=$1
316
    shift
317
    for var; do
318
        eval : \${$var:=$value}
319
    done
320
}
321

    
322
pushvar(){
323
    for var in $*; do
324
        eval level=\${${var}_level:=0}
325
        eval ${var}_${level}="\$$var"
326
        eval ${var}_level=$(($level+1))
327
    done
328
}
329

    
330
popvar(){
331
    for var in $*; do
332
        eval level=\${${var}_level:-0}
333
        test $level = 0 && continue
334
        eval level=$(($level-1))
335
        eval $var="\${${var}_${level}}"
336
        eval ${var}_level=$level
337
        eval unset ${var}_${level}
338
    done
339
}
340

    
341
enable(){
342
    set_all yes $*
343
}
344

    
345
disable(){
346
    set_all no $*
347
}
348

    
349
enable_weak(){
350
    set_weak yes $*
351
}
352

    
353
disable_weak(){
354
    set_weak no $*
355
}
356

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

    
361
disable_safe(){
362
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
363
}
364

    
365
do_enable_deep(){
366
    for var; do
367
        enabled $var && continue
368
        eval sel="\$${var}_select"
369
        eval sgs="\$${var}_suggest"
370
        pushvar var sgs
371
        enable_deep $sel
372
        popvar sgs
373
        enable_deep_weak $sgs
374
        popvar var
375
    done
376
}
377

    
378
enable_deep(){
379
    do_enable_deep $*
380
    enable $*
381
}
382

    
383
enable_deep_weak(){
384
    do_enable_deep $*
385
    enable_weak $*
386
}
387

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

    
393
disabled(){
394
    test "${1#!}" = "$1" && op== || op=!=
395
    eval test "x\$${1#!}" $op "xno"
396
}
397

    
398
enabled_all(){
399
    for opt; do
400
        enabled $opt || return 1
401
    done
402
}
403

    
404
disabled_all(){
405
    for opt; do
406
        disabled $opt || return 1
407
    done
408
}
409

    
410
enabled_any(){
411
    for opt; do
412
        enabled $opt && return 0
413
    done
414
}
415

    
416
disabled_any(){
417
    for opt; do
418
        disabled $opt && return 0
419
    done
420
    return 1
421
}
422

    
423
set_default(){
424
    for opt; do
425
        eval : \${$opt:=\$${opt}_default}
426
    done
427
}
428

    
429
is_in(){
430
    value=$1
431
    shift
432
    for var in $*; do
433
        [ $var = $value ] && return 0
434
    done
435
    return 1
436
}
437

    
438
check_deps(){
439
    for cfg; do
440
        cfg="${cfg#!}"
441
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
442
        disabled ${cfg}_checking && continue
443
        enable ${cfg}_checking
444

    
445
        eval dep_all="\$${cfg}_deps"
446
        eval dep_any="\$${cfg}_deps_any"
447
        eval dep_sel="\$${cfg}_select"
448
        eval dep_sgs="\$${cfg}_suggest"
449

    
450
        pushvar cfg dep_all dep_any dep_sel dep_sgs
451
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
452
        popvar cfg dep_all dep_any dep_sel dep_sgs
453

    
454
        enabled_all  $dep_all || disable $cfg
455
        enabled_any  $dep_any || disable $cfg
456
        disabled_any $dep_sel && disable $cfg
457

    
458
        if enabled $cfg; then
459
            eval dep_extralibs="\$${cfg}_extralibs"
460
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
461
            enable_deep $dep_sel
462
            enable_deep_weak $dep_sgs
463
        fi
464

    
465
        disable ${cfg}_checking
466
    done
467
}
468

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

    
485
flags_saved(){
486
    (: ${SAVE_CFLAGS?}) 2> /dev/null
487
}
488

    
489
save_flags(){
490
    flags_saved && return
491
    SAVE_CFLAGS="$CFLAGS"
492
    SAVE_LDFLAGS="$LDFLAGS"
493
    SAVE_extralibs="$extralibs"
494
}
495

    
496
restore_flags(){
497
    flags_saved || return
498
    CFLAGS="$SAVE_CFLAGS"
499
    LDFLAGS="$SAVE_LDFLAGS"
500
    extralibs="$SAVE_extralibs"
501
    unset SAVE_CFLAGS
502
    unset SAVE_LDFLAGS
503
    unset SAVE_extralibs
504
}
505

    
506
temp_cflags(){
507
    save_flags
508
    CFLAGS="$CFLAGS $*"
509
}
510

    
511
temp_ldflags(){
512
    save_flags
513
    LDFLAGS="$LDFLAGS $*"
514
}
515

    
516
temp_extralibs(){
517
    save_flags
518
    extralibs="$extralibs $*"
519
}
520

    
521
append(){
522
    var=$1
523
    shift
524
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
525
    eval "$var=\"\$$var $*\""
526
}
527

    
528
add_cppflags(){
529
    append CPPFLAGS $($filter_cppflags "$@")
530
}
531

    
532
add_cflags(){
533
    append CFLAGS $($filter_cflags "$@")
534
}
535

    
536
add_asflags(){
537
    append ASFLAGS $($filter_asflags "$@")
538
}
539

    
540
add_ldflags(){
541
    append LDFLAGS "$@"
542
}
543

    
544
add_extralibs(){
545
    append extralibs "$@"
546
}
547

    
548
check_cmd(){
549
    log "$@"
550
    "$@" >> $logfile 2>&1
551
}
552

    
553
check_cc(){
554
    log check_cc "$@"
555
    cat > $TMPC
556
    log_file $TMPC
557
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
558
}
559

    
560
check_cpp(){
561
    log check_cpp "$@"
562
    cat > $TMPC
563
    log_file $TMPC
564
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
565
}
566

    
567
check_as(){
568
    log check_as "$@"
569
    cat > $TMPC
570
    log_file $TMPC
571
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
572
}
573

    
574
check_asm(){
575
    log check_asm "$@"
576
    name="$1"
577
    asm="$2"
578
    shift 2
579
    disable $name
580
    check_as "$@" <<EOF && enable $name
581
void foo(void){ __asm__ volatile($asm); }
582
EOF
583
}
584

    
585
check_yasm(){
586
    log check_yasm "$@"
587
    echo "$1" > $TMPS
588
    log_file $TMPS
589
    shift 1
590
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
591
}
592

    
593
check_ld(){
594
    log check_ld "$@"
595
    check_cc || return
596
    flags=''
597
    libs=''
598
    for f; do
599
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
600
    done
601
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
602
}
603

    
604
check_cppflags(){
605
    log check_cppflags "$@"
606
    set -- $($filter_cppflags "$@")
607
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
608
int x;
609
EOF
610
}
611

    
612
check_cflags(){
613
    log check_cflags "$@"
614
    set -- $($filter_cflags "$@")
615
    check_cc "$@" <<EOF && append CFLAGS "$@"
616
int x;
617
EOF
618
}
619

    
620
check_ldflags(){
621
    log check_ldflags "$@"
622
    check_ld "$@" <<EOF && add_ldflags "$@"
623
int main(void){ return 0; }
624
EOF
625
}
626

    
627
check_header(){
628
    log check_header "$@"
629
    header=$1
630
    shift
631
    disable_safe $header
632
    check_cpp "$@" <<EOF && enable_safe $header
633
#include <$header>
634
int x;
635
EOF
636
}
637

    
638
check_func(){
639
    log check_func "$@"
640
    func=$1
641
    shift
642
    disable $func
643
    check_ld "$@" <<EOF && enable $func
644
extern int $func();
645
int main(void){ $func(); }
646
EOF
647
}
648

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

    
668
check_cpp_condition(){
669
    log check_cpp_condition "$@"
670
    header=$1
671
    condition=$2
672
    check_cpp <<EOF
673
#include <$header>
674
#if !($condition)
675
#error "unsatisfied condition: $condition"
676
#endif
677
EOF
678
}
679

    
680
check_lib(){
681
    log check_lib "$@"
682
    header="$1"
683
    func="$2"
684
    shift 2
685
    temp_extralibs "$@"
686
    check_header $header && check_func $func && add_extralibs "$@"
687
    err=$?
688
    restore_flags
689
    return $err
690
}
691

    
692
check_lib2(){
693
    log check_lib2 "$@"
694
    headers="$1"
695
    func="$2"
696
    shift 2
697
    temp_extralibs "$@"
698
    check_func_headers "$headers" $func && add_extralibs "$@"
699
    err=$?
700
    restore_flags
701
    return $err
702
}
703

    
704
check_exec(){
705
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
706
}
707

    
708
check_exec_crash(){
709
    code=$(cat)
710

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

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

    
734
check_type(){
735
    log check_type "$@"
736
    headers=$1
737
    type=$2
738
    shift 2
739
    disable $type
740
    incs=""
741
    for hdr in $headers; do
742
        incs="$incs
743
#include <$hdr>"
744
    done
745
    check_cc "$@" <<EOF && enable $type
746
$incs
747
$type v;
748
EOF
749
}
750

    
751
require(){
752
    name="$1"
753
    header="$2"
754
    func="$3"
755
    shift 3
756
    check_lib $header $func "$@" || die "ERROR: $name not found"
757
}
758

    
759
require2(){
760
    name="$1"
761
    headers="$2"
762
    func="$3"
763
    shift 3
764
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
765
}
766

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

    
784
check_host_cc(){
785
    log check_host_cc "$@"
786
    cat > $TMPC
787
    log_file $TMPC
788
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
789
}
790

    
791
check_host_cflags(){
792
    log check_host_cflags "$@"
793
    check_host_cc "$@" <<EOF && append host_cflags "$@"
794
int x;
795
EOF
796
}
797

    
798
apply(){
799
    file=$1
800
    shift
801
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
802
}
803

    
804
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
805
# system-dependent things.
806

    
807
COMPONENT_LIST="
808
    bsfs
809
    decoders
810
    demuxers
811
    encoders
812
    filters
813
    hwaccels
814
    indevs
815
    muxers
816
    outdevs
817
    parsers
818
    protocols
819
"
820

    
821
CONFIG_LIST="
822
    $COMPONENT_LIST
823
    aandct
824
    avfilter
825
    avfilter_lavf
826
    avisynth
827
    beos_netserver
828
    bzlib
829
    doc
830
    fastdiv
831
    ffmpeg
832
    ffplay
833
    ffserver
834
    fft
835
    golomb
836
    gpl
837
    gprof
838
    gray
839
    hardcoded_tables
840
    ipv6
841
    libdc1394
842
    libdirac
843
    libfaac
844
    libfaad
845
    libfaadbin
846
    libgsm
847
    libmp3lame
848
    libnut
849
    libopencore_amrnb
850
    libopencore_amrwb
851
    libopenjpeg
852
    libschroedinger
853
    libspeex
854
    libtheora
855
    libvorbis
856
    libx264
857
    libxvid
858
    lpc
859
    mdct
860
    memalign_hack
861
    mlib
862
    mpegaudio_hp
863
    network
864
    nonfree
865
    pic
866
    postproc
867
    powerpc_perf
868
    rdft
869
    runtime_cpudetect
870
    shared
871
    small
872
    static
873
    swscale_alpha
874
    vaapi
875
    vdpau
876
    version3
877
    x11grab
878
    zlib
879
"
880

    
881
THREADS_LIST='
882
    beosthreads
883
    os2threads
884
    pthreads
885
    w32threads
886
'
887

    
888
ARCH_LIST='
889
    alpha
890
    arm
891
    avr32
892
    avr32_ap
893
    avr32_uc
894
    bfin
895
    ia64
896
    m68k
897
    mips
898
    mips64
899
    parisc
900
    ppc
901
    ppc64
902
    s390
903
    sh4
904
    sparc
905
    sparc64
906
    x86
907
    x86_32
908
    x86_64
909
'
910

    
911
ARCH_EXT_LIST='
912
    altivec
913
    amd3dnow
914
    amd3dnowext
915
    armv5te
916
    armv6
917
    armv6t2
918
    armvfp
919
    iwmmxt
920
    mmi
921
    mmx
922
    mmx2
923
    neon
924
    ppc4xx
925
    sse
926
    ssse3
927
    vis
928
'
929

    
930
HAVE_LIST="
931
    $ARCH_EXT_LIST
932
    $THREADS_LIST
933
    alsa_asoundlib_h
934
    altivec_h
935
    arpa_inet_h
936
    attribute_packed
937
    bigendian
938
    bswap
939
    closesocket
940
    cmov
941
    conio_h
942
    dcbzl
943
    dev_bktr_ioctl_bt848_h
944
    dev_bktr_ioctl_meteor_h
945
    dev_ic_bt8xx_h
946
    dev_video_meteor_ioctl_meteor_h
947
    dev_video_bktr_ioctl_bt848_h
948
    dlfcn_h
949
    dlopen
950
    dos_paths
951
    ebp_available
952
    ebx_available
953
    fast_64bit
954
    fast_cmov
955
    fast_unaligned
956
    fork
957
    gethrtime
958
    GetProcessTimes
959
    getrusage
960
    inet_aton
961
    inline_asm
962
    isatty
963
    ldbrx
964
    libdc1394_1
965
    libdc1394_2
966
    llrint
967
    log2
968
    loongson
969
    lrint
970
    lrintf
971
    lzo1x_999_compress
972
    machine_ioctl_bt848_h
973
    machine_ioctl_meteor_h
974
    malloc_h
975
    memalign
976
    mkstemp
977
    pld
978
    posix_memalign
979
    round
980
    roundf
981
    sdl
982
    sdl_video_size
983
    setmode
984
    socklen_t
985
    soundcard_h
986
    poll_h
987
    sys_mman_h
988
    sys_resource_h
989
    sys_select_h
990
    sys_soundcard_h
991
    sys_videoio_h
992
    ten_operands
993
    termios_h
994
    threads
995
    truncf
996
    vfp_args
997
    VirtualAlloc
998
    winsock2_h
999
    xform_asm
1000
    yasm
1001
"
1002

    
1003
# options emitted with CONFIG_ prefix but not available on command line
1004
CONFIG_EXTRA="
1005
    gplv3
1006
    lgplv3
1007
"
1008

    
1009
CMDLINE_SELECT="
1010
    $ARCH_EXT_LIST
1011
    $CONFIG_LIST
1012
    $THREADS_LIST
1013
    cross_compile
1014
    debug
1015
    extra_warnings
1016
    logging
1017
    optimizations
1018
    stripping
1019
    yasm
1020
"
1021

    
1022
PATHS_LIST='
1023
    bindir
1024
    datadir
1025
    incdir
1026
    libdir
1027
    mandir
1028
    prefix
1029
    shlibdir
1030
'
1031

    
1032
CMDLINE_SET="
1033
    $PATHS_LIST
1034
    arch
1035
    as
1036
    build_suffix
1037
    cc
1038
    cpu
1039
    cross_prefix
1040
    dep_cc
1041
    extra_version
1042
    host_cc
1043
    host_cflags
1044
    host_ldflags
1045
    host_libs
1046
    host_os
1047
    ld
1048
    logfile
1049
    nm
1050
    source_path
1051
    sysinclude
1052
    sysroot
1053
    target_exec
1054
    target_os
1055
    target_path
1056
"
1057

    
1058
CMDLINE_APPEND="
1059
    extra_cflags
1060
"
1061

    
1062
# code dependency declarations
1063

    
1064
# architecture extensions
1065
altivec_deps="ppc"
1066
amd3dnow_deps="mmx"
1067
amd3dnowext_deps="amd3dnow"
1068
armv5te_deps="arm"
1069
armv6_deps="arm"
1070
armv6t2_deps="arm"
1071
armvfp_deps="arm"
1072
iwmmxt_deps="arm"
1073
mmi_deps="mips"
1074
mmx_deps="x86"
1075
mmx2_deps="mmx"
1076
neon_deps="arm"
1077
ppc4xx_deps="ppc"
1078
sse_deps="mmx"
1079
ssse3_deps="sse"
1080
vis_deps="sparc"
1081

    
1082
need_memalign="altivec neon sse"
1083
inline_asm_deps="!tms470"
1084

    
1085
# decoders / encoders / hardware accelerators
1086
aac_decoder_select="fft mdct"
1087
aac_encoder_select="fft mdct"
1088
ac3_decoder_select="fft mdct"
1089
alac_encoder_select="lpc"
1090
atrac3_decoder_select="fft mdct"
1091
cavs_decoder_select="golomb"
1092
cook_decoder_select="fft mdct"
1093
cscd_decoder_suggest="zlib"
1094
dca_decoder_select="fft mdct"
1095
dnxhd_encoder_select="aandct"
1096
dxa_decoder_select="zlib"
1097
eac3_decoder_select="ac3_decoder"
1098
eamad_decoder_select="aandct"
1099
eatgq_decoder_select="aandct"
1100
eatqi_decoder_select="aandct"
1101
ffv1_decoder_select="golomb"
1102
flac_decoder_select="golomb"
1103
flac_encoder_select="golomb lpc"
1104
flashsv_decoder_select="zlib"
1105
flashsv_encoder_select="zlib"
1106
flv_encoder_select="h263_encoder"
1107
h261_encoder_select="aandct"
1108
h263_encoder_select="aandct"
1109
h263_vaapi_hwaccel_deps="va_va_h"
1110
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1111
h263p_encoder_select="h263_encoder"
1112
h264_decoder_select="golomb"
1113
h264_vaapi_hwaccel_deps="va_va_h"
1114
h264_vaapi_hwaccel_select="vaapi"
1115
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1116
h264_vdpau_decoder_select="vdpau h264_decoder"
1117
imc_decoder_select="fft mdct"
1118
jpegls_decoder_select="golomb"
1119
jpegls_encoder_select="golomb"
1120
ljpeg_encoder_select="aandct"
1121
loco_decoder_select="golomb"
1122
mjpeg_encoder_select="aandct"
1123
mpeg1video_encoder_select="aandct"
1124
mpeg2video_encoder_select="aandct"
1125
mpeg4_encoder_select="h263_encoder"
1126
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1127
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1128
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1129
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1130
mpeg2_vaapi_hwaccel_deps="va_va_h"
1131
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1132
mpeg4_vaapi_hwaccel_deps="va_va_h"
1133
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1134
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1135
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1136
msmpeg4v1_encoder_select="h263_encoder"
1137
msmpeg4v2_encoder_select="h263_encoder"
1138
msmpeg4v3_encoder_select="h263_encoder"
1139
nellymoser_decoder_select="fft mdct"
1140
nellymoser_encoder_select="fft mdct"
1141
png_decoder_select="zlib"
1142
png_encoder_select="zlib"
1143
qdm2_decoder_select="fft mdct rdft"
1144
rv10_encoder_select="h263_encoder"
1145
rv20_encoder_select="h263_encoder"
1146
rv30_decoder_select="golomb"
1147
rv40_decoder_select="golomb"
1148
shorten_decoder_select="golomb"
1149
sonic_decoder_select="golomb"
1150
sonic_encoder_select="golomb"
1151
sonic_ls_encoder_select="golomb"
1152
svq3_decoder_select="golomb"
1153
svq3_decoder_suggest="zlib"
1154
theora_decoder_select="vp3_decoder"
1155
tiff_decoder_suggest="zlib"
1156
tiff_encoder_suggest="zlib"
1157
tscc_decoder_select="zlib"
1158
vc1_vaapi_hwaccel_deps="va_va_h"
1159
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1160
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1161
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1162
vorbis_decoder_select="fft mdct"
1163
vorbis_encoder_select="fft mdct"
1164
vp6a_decoder_select="vp6_decoder"
1165
vp6f_decoder_select="vp6_decoder"
1166
wmav1_decoder_select="fft mdct"
1167
wmav1_encoder_select="fft mdct"
1168
wmav2_decoder_select="fft mdct"
1169
wmav2_encoder_select="fft mdct"
1170
wmv1_encoder_select="h263_encoder"
1171
wmv2_encoder_select="h263_encoder"
1172
wmv3_decoder_select="vc1_decoder"
1173
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1174
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1175
zlib_decoder_select="zlib"
1176
zlib_encoder_select="zlib"
1177
zmbv_decoder_select="zlib"
1178
zmbv_encoder_select="zlib"
1179

    
1180
# parsers
1181
h264_parser_select="golomb"
1182

    
1183
# external libraries
1184
libdirac_decoder_deps="libdirac !libschroedinger"
1185
libdirac_encoder_deps="libdirac"
1186
libfaac_encoder_deps="libfaac"
1187
libfaad_decoder_deps="libfaad"
1188
libfaadbin_decoder_extralibs='$ldl'
1189
libgsm_decoder_deps="libgsm"
1190
libgsm_encoder_deps="libgsm"
1191
libgsm_ms_decoder_deps="libgsm"
1192
libgsm_ms_encoder_deps="libgsm"
1193
libmp3lame_encoder_deps="libmp3lame"
1194
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1195
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1196
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1197
libopenjpeg_decoder_deps="libopenjpeg"
1198
libschroedinger_decoder_deps="libschroedinger"
1199
libschroedinger_encoder_deps="libschroedinger"
1200
libspeex_decoder_deps="libspeex"
1201
libtheora_encoder_deps="libtheora"
1202
libvorbis_encoder_deps="libvorbis"
1203
libx264_encoder_deps="libx264"
1204
libxvid_encoder_deps="libxvid"
1205

    
1206
# demuxers / muxers
1207
ac3_demuxer_deps="ac3_parser"
1208
asf_stream_muxer_select="asf_muxer"
1209
avisynth_demuxer_deps="avisynth"
1210
dirac_demuxer_deps="dirac_parser"
1211
ipod_muxer_select="mov_muxer"
1212
libnut_demuxer_deps="libnut"
1213
libnut_muxer_deps="libnut"
1214
matroska_audio_muxer_select="matroska_muxer"
1215
matroska_demuxer_suggest="zlib bzlib"
1216
mov_demuxer_suggest="zlib"
1217
mp3_demuxer_deps="mpegaudio_parser"
1218
mp4_muxer_select="mov_muxer"
1219
mpegtsraw_demuxer_select="mpegts_demuxer"
1220
mxf_d10_muxer_select="mxf_muxer"
1221
psp_muxer_select="mov_muxer"
1222
rtp_muxer_deps="network rtp_protocol"
1223
rtsp_demuxer_deps="sdp_demuxer"
1224
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1225
tg2_muxer_select="mov_muxer"
1226
tgp_muxer_select="mov_muxer"
1227
w64_demuxer_deps="wav_demuxer"
1228

    
1229
# indevs / outdevs
1230
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1231
alsa_indev_extralibs="-lasound"
1232
alsa_outdev_deps="alsa_asoundlib_h"
1233
alsa_outdev_extralibs="-lasound"
1234
audio_beos_indev_deps="audio_beos"
1235
audio_beos_indev_extralibs="-lmedia -lbe"
1236
audio_beos_outdev_deps="audio_beos"
1237
audio_beos_outdev_extralibs="-lmedia -lbe"
1238
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1239
dv1394_indev_deps="dv1394 dv_demuxer"
1240
jack_indev_deps="jack_jack_h"
1241
jack_indev_extralibs="-ljack"
1242
libdc1394_indev_deps="libdc1394"
1243
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1244
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1245
v4l_indev_deps="linux_videodev_h"
1246
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1247
vfwcap_indev_deps="capCreateCaptureWindow"
1248
vfwcap_indev_extralibs="-lvfw32"
1249
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1250
x11_grab_device_indev_extralibs="-lX11 -lXext"
1251

    
1252
# protocols
1253
gopher_protocol_deps="network"
1254
http_protocol_deps="network"
1255
rtmp_protocol_deps="tcp_protocol"
1256
rtp_protocol_deps="udp_protocol"
1257
tcp_protocol_deps="network"
1258
udp_protocol_deps="network"
1259

    
1260
# filters
1261
movie_filter_deps="avfilter_lavf"
1262

    
1263
# programs
1264
ffplay_deps="sdl"
1265
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1266
ffserver_extralibs='$ldl'
1267

    
1268
doc_deps="texi2html"
1269

    
1270
# default parameters
1271

    
1272
logfile="config.err"
1273

    
1274
# installation paths
1275
prefix_default="/usr/local"
1276
bindir_default='${prefix}/bin'
1277
datadir_default='${prefix}/share/ffmpeg'
1278
incdir_default='${prefix}/include'
1279
libdir_default='${prefix}/lib'
1280
mandir_default='${prefix}/share/man'
1281
shlibdir_default="$libdir_default"
1282

    
1283
# toolchain
1284
ar="ar"
1285
cc_default="gcc"
1286
cc_version=\"unknown\"
1287
host_cc_default="gcc"
1288
ln_s="ln -sf"
1289
nm_default="nm"
1290
objformat="elf"
1291
ranlib="ranlib"
1292
strip="strip"
1293
yasmexe="yasm"
1294

    
1295
# machine
1296
arch=$(uname -m)
1297
cpu="generic"
1298

    
1299
# OS
1300
target_os=$(tolower $(uname -s))
1301
host_os=$target_os
1302

    
1303
# configurable options
1304
enable debug
1305
enable doc
1306
enable fastdiv
1307
enable ffmpeg
1308
enable ffplay
1309
enable ffserver
1310
enable ipv6
1311
enable mpegaudio_hp
1312
enable network
1313
enable optimizations
1314
enable protocols
1315
enable static
1316
enable stripping
1317
enable swscale_alpha
1318

    
1319
# build settings
1320
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1321
FFSERVERLDFLAGS=-Wl,-E
1322
LIBPREF="lib"
1323
LIBSUF=".a"
1324
FULLNAME='$(NAME)$(BUILDSUF)'
1325
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1326
SLIBPREF="lib"
1327
SLIBSUF=".so"
1328
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1329
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1330
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1331
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1332

    
1333
CC_O='-o $@'
1334

    
1335
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1336
host_libs='-lm'
1337

    
1338
target_path='.'
1339

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

    
1345
# find source path
1346
source_path="$(dirname "$0")"
1347
enable source_path_used
1348
if test -f configure; then
1349
    source_path="$(pwd)"
1350
    disable source_path_used
1351
else
1352
    source_path="$(cd "$source_path"; pwd)"
1353
    echo "$source_path" | grep -q '[[:blank:]]' &&
1354
        die "Out of tree builds are impossible with whitespace in source path."
1355
    test -e "$source_path/config.h" &&
1356
        die "Out of tree builds are impossible with config.h in source dir."
1357
fi
1358

    
1359
for v in "$@"; do
1360
    r=${v#*=}
1361
    l=${v%"$r"}
1362
    r=$(sh_quote "$r")
1363
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1364
done
1365

    
1366
find_things(){
1367
    thing=$1
1368
    pattern=$2
1369
    file=$source_path/$3
1370
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1371
}
1372

    
1373
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1374
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1375
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1376
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1377
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1378
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1379
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1380
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1381
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1382
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1383
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1384

    
1385
enable $ARCH_EXT_LIST \
1386
       $DECODER_LIST \
1387
       $ENCODER_LIST \
1388
       $HWACCEL_LIST \
1389
       $PARSER_LIST \
1390
       $BSF_LIST \
1391
       $DEMUXER_LIST \
1392
       $MUXER_LIST \
1393
       $FILTER_LIST \
1394
       $PROTOCOL_LIST \
1395
       $INDEV_LIST \
1396
       $OUTDEV_LIST \
1397

    
1398
die_unknown(){
1399
    echo "Unknown option \"$1\"."
1400
    echo "See $0 --help for available options."
1401
    exit 1
1402
}
1403

    
1404
show_list() {
1405
    suffix=_$1
1406
    shift
1407
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1408
    exit 0
1409
}
1410

    
1411
for opt do
1412
    optval="${opt#*=}"
1413
    case "$opt" in
1414
    --extra-ldflags=*) add_ldflags $optval
1415
    ;;
1416
    --extra-libs=*) add_extralibs $optval
1417
    ;;
1418
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1419
    ;;
1420
    --enable-debug=*) debuglevel="$optval"
1421
    ;;
1422
    --enable-*=*|--disable-*=*)
1423
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1424
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1425
    eval list=\$$(toupper $thing)_LIST
1426
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1427
    $action $(filter "$name" $list)
1428
    ;;
1429
    --enable-?*|--disable-?*)
1430
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1431
    if is_in $option $COMPONENT_LIST; then
1432
        test $action = disable && action=unset
1433
        eval $action \$$(toupper ${option%s})_LIST
1434
    elif is_in $option $CMDLINE_SELECT; then
1435
        $action $option
1436
    else
1437
        die_unknown $opt
1438
    fi
1439
    ;;
1440
    --list-*)
1441
        NAME="${opt#--list-}"
1442
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1443
        NAME=${NAME%s}
1444
        eval show_list $NAME \$$(toupper $NAME)_LIST
1445
    ;;
1446
    --help|-h) show_help
1447
    ;;
1448
    *)
1449
    optname="${opt%%=*}"
1450
    optname="${optname#--}"
1451
    optname=$(echo "$optname" | sed 's/-/_/g')
1452
    if is_in $optname $CMDLINE_SET; then
1453
        eval $optname='$optval'
1454
    elif is_in $optname $CMDLINE_APPEND; then
1455
        append $optname "$optval"
1456
    else
1457
         die_unknown $opt
1458
    fi
1459
    ;;
1460
    esac
1461
done
1462

    
1463
disabled logging && logfile=/dev/null
1464

    
1465
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1466
set >> $logfile
1467

    
1468
test -n "$cross_prefix" && enable cross_compile
1469

    
1470
ar="${cross_prefix}${ar}"
1471
cc_default="${cross_prefix}${cc_default}"
1472
nm_default="${cross_prefix}${nm_default}"
1473
ranlib="${cross_prefix}${ranlib}"
1474
strip="${cross_prefix}${strip}"
1475

    
1476
sysinclude_default="${sysroot}/usr/include"
1477

    
1478
set_default cc nm sysinclude
1479
enabled cross_compile || host_cc_default=$cc
1480
set_default host_cc
1481

    
1482
exesuf() {
1483
    case $1 in
1484
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1485
    esac
1486
}
1487

    
1488
EXESUF=$(exesuf $target_os)
1489
HOSTEXESUF=$(exesuf $host_os)
1490

    
1491
# set temporary file name
1492
: ${TMPDIR:=$TEMPDIR}
1493
: ${TMPDIR:=$TMP}
1494
: ${TMPDIR:=/tmp}
1495

    
1496
if ! check_cmd type mktemp; then
1497
    # simple replacement for missing mktemp
1498
    # NOT SAFE FOR GENERAL USE
1499
    mktemp(){
1500
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1501
    }
1502
fi
1503

    
1504
tmpfile(){
1505
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1506
        (set -C; exec > $tmp) 2>/dev/null ||
1507
        die "Unable to create temporary file in $TMPDIR."
1508
    append TMPFILES $tmp
1509
    eval $1=$tmp
1510
}
1511

    
1512
trap 'rm -f -- $TMPFILES' EXIT
1513
trap exit HUP INT TERM
1514

    
1515
tmpfile TMPC  .c
1516
tmpfile TMPE  $EXESUF
1517
tmpfile TMPH  .h
1518
tmpfile TMPO  .o
1519
tmpfile TMPS  .S
1520
tmpfile TMPSH .sh
1521

    
1522
unset -f mktemp
1523

    
1524
# make sure we can execute files in $TMPDIR
1525
cat > $TMPSH 2>> $logfile <<EOF
1526
#! /bin/sh
1527
EOF
1528
chmod +x $TMPSH >> $logfile 2>&1
1529
if ! $TMPSH >> $logfile 2>&1; then
1530
    cat <<EOF
1531
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1532
variable to another directory and make sure that it is not mounted noexec.
1533
EOF
1534
    die "Sanity test failed."
1535
fi
1536

    
1537
filter_cflags=echo
1538
filter_cppflags=echo
1539
filter_asflags=echo
1540

    
1541
if   $cc -v 2>&1 | grep -qi ^gcc; then
1542
    cc_type=gcc
1543
    cc_version=__VERSION__
1544
    if ! $cc -dumpversion | grep -q '^2\.'; then
1545
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1546
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1547
    fi
1548
elif $cc --version 2>/dev/null | grep -q Intel; then
1549
    cc_type=icc
1550
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1551
    CC_DEPFLAGS='-MMD'
1552
    AS_DEPFLAGS='-MMD'
1553
elif $cc -v 2>&1 | grep -q xlc; then
1554
    cc_type=xlc
1555
    cc_version="AV_STRINGIFY(__IBMC__)"
1556
elif $cc -V 2>/dev/null | grep -q Compaq; then
1557
    cc_type=ccc
1558
    cc_version="AV_STRINGIFY(__DECC_VER)"
1559
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1560
    debuglevel=3
1561
    add_ldflags -Wl,-z,now # calls to libots crash without this
1562
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1563
    test -d "$sysroot" || die "No valid sysroot specified."
1564
    cc_type=armcc
1565
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1566
    armcc_conf="$PWD/armcc.conf"
1567
    $cc --arm_linux_configure                 \
1568
        --arm_linux_config_file="$armcc_conf" \
1569
        --configure_sysroot="$sysroot"        \
1570
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1571
        die "Error creating armcc configuration file."
1572
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1573
    as_default="${cross_prefix}gcc"
1574
    CC_DEPFLAGS='-MMD'
1575
    AS_DEPFLAGS='-MMD'
1576
elif $cc -version 2>/dev/null | grep -q TMS470; then
1577
    cc_type=tms470
1578
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1579
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1580
    CC_O='-fr=$(@D)'
1581
    as_default="${cross_prefix}gcc"
1582
    ld_default="${cross_prefix}gcc"
1583
    TMPO=$(basename $TMPC .c).o
1584
    append TMPFILES $TMPO
1585
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1586
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1587
    AS_DEPFLAGS='-MMD'
1588
    filter_cflags=tms470_flags
1589
    tms470_flags(){
1590
        for flag; do
1591
            case $flag in
1592
                -march=*|-mcpu=*)
1593
                    case "${flag#*=}" in
1594
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1595
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1596
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1597
                        armv6*|arm11*)          echo -mv=6   ;;
1598
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1599
                                                echo -mv=5e  ;;
1600
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1601
                    esac
1602
                    ;;
1603
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1604
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1605
                -msoft-float)   echo --float_support=vfplib       ;;
1606
                -Os)            echo -O3 -mf=2                    ;;
1607
                -O[0-3])        echo $flag -mf=5                  ;;
1608
                -g)             echo -g -mn                       ;;
1609
            esac
1610
        done
1611
    }
1612
elif $cc -v 2>&1 | grep -q clang; then
1613
    cc_type=clang
1614
    cc_version=__VERSION__
1615
    CC_DEPFLAGS='-MMD'
1616
    AS_DEPFLAGS='-MMD'
1617
elif $cc -V 2>&1 | grep -q Sun; then
1618
    cc_type=suncc
1619
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1620
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1621
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1622
fi
1623

    
1624
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1625

    
1626
: ${as_default:=$cc}
1627
: ${dep_cc_default:=$cc}
1628
: ${ld_default:=$cc}
1629
set_default as dep_cc ld
1630

    
1631
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1632
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1633

    
1634
add_cflags $extra_cflags
1635
add_asflags $extra_cflags
1636

    
1637
if test -n "$sysroot"; then
1638
    case "$cc_type" in
1639
        gcc)
1640
            add_cppflags --sysroot="$sysroot"
1641
            add_ldflags --sysroot="$sysroot"
1642
        ;;
1643
        tms470)
1644
            add_cppflags -I"$sysinclude"
1645
            add_ldflags  --sysroot="$sysroot"
1646
        ;;
1647
        clang)
1648
            add_cppflags -isysroot="$sysroot"
1649
            add_ldflags -isysroot="$sysroot"
1650
        ;;
1651
    esac
1652
fi
1653

    
1654
if test "$cpu" = host; then
1655
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1656

    
1657
    case "$cc_type" in
1658
        gcc)
1659
            check_native(){
1660
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1661
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1662
            }
1663
            cpu=$(check_native -march || check_native -mcpu)
1664
        ;;
1665
    esac
1666

    
1667
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1668
fi
1669

    
1670
# Add processor-specific flags
1671
case $cpu in
1672
    601|ppc601|PowerPC601)
1673
        cpuflags="-mcpu=601"
1674
    ;;
1675
    603*|ppc603*|PowerPC603*)
1676
        cpuflags="-mcpu=603"
1677
    ;;
1678
    604*|ppc604*|PowerPC604*)
1679
        cpuflags="-mcpu=604"
1680
    ;;
1681
    G3|g3|75*|ppc75*|PowerPC75*)
1682
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1683
    ;;
1684
    G4|g4|745*|ppc745*|PowerPC745*)
1685
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1686
    ;;
1687
    74*|ppc74*|PowerPC74*)
1688
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1689
    ;;
1690
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1691
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1692
    ;;
1693
    Cell|CELL|cell)
1694
        cpuflags="-mcpu=cell"
1695
        enable ldbrx
1696
    ;;
1697
    # targets that do NOT support conditional mov (cmov)
1698
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1699
        cpuflags="-march=$cpu"
1700
        disable cmov
1701
    ;;
1702
    # targets that do support conditional mov (cmov)
1703
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1704
        cpuflags="-march=$cpu"
1705
        enable cmov
1706
        enable fast_cmov
1707
    ;;
1708
    # targets that do support conditional mov but on which it's slow
1709
    pentium4|pentium4m|prescott|nocona)
1710
        cpuflags="-march=$cpu"
1711
        enable cmov
1712
        disable fast_cmov
1713
    ;;
1714
    sparc64)
1715
        cpuflags="-mcpu=v9"
1716
    ;;
1717
    arm11*|cortex*)
1718
        cpuflags="-mcpu=$cpu"
1719
        enable fast_unaligned
1720
    ;;
1721
    armv[67]*)
1722
        cpuflags="-march=$cpu"
1723
        enable fast_unaligned
1724
    ;;
1725
    armv*)
1726
        cpuflags="-march=$cpu"
1727
    ;;
1728
    arm*)
1729
        cpuflags="-mcpu=$cpu"
1730
    ;;
1731
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1732
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1733
    ;;
1734
    bf*)
1735
        cpuflags="-mcpu=$cpu"
1736
    ;;
1737
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1738
        cpuflags="-march=$cpu"
1739
    ;;
1740
    ap7[02]0[0-2])
1741
        subarch="avr32_ap"
1742
        cpuflags="-mpart=$cpu"
1743
    ;;
1744
    ap)
1745
        subarch="avr32_ap"
1746
        cpuflags="-march=$cpu"
1747
    ;;
1748
    uc3[ab]*)
1749
        subarch="avr32_uc"
1750
        cpuflags="-mcpu=$cpu"
1751
    ;;
1752
    uc)
1753
        subarch="avr32_uc"
1754
        cpuflags="-march=$cpu"
1755
    ;;
1756
    generic)
1757
    ;;
1758
    *)
1759
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1760
    ;;
1761
esac
1762

    
1763
add_cflags $cpuflags
1764
add_asflags $cpuflags
1765

    
1766
# compiler sanity check
1767
check_exec <<EOF
1768
int main(void){ return 0; }
1769
EOF
1770
if test "$?" != 0; then
1771
    echo "$cc is unable to create an executable file."
1772
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1773
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1774
        echo "Only do this if you know what cross compiling means."
1775
    fi
1776
    die "C compiler test failed."
1777
fi
1778

    
1779
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1780
check_cflags -std=c99
1781
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1782
#include <stdlib.h>
1783
EOF
1784
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1785
#include <stdlib.h>
1786
EOF
1787

    
1788
check_host_cflags -std=c99
1789

    
1790
case "$arch" in
1791
    alpha)
1792
        arch="alpha"
1793
        enable fast_64bit
1794
        check_cflags -mieee
1795
        spic=$shared
1796
    ;;
1797
    arm|armv[4567]*l)
1798
        arch="arm"
1799
    ;;
1800
    avr32)
1801
    ;;
1802
    bfin)
1803
        arch="bfin"
1804
    ;;
1805
    ia64)
1806
        arch="ia64"
1807
        enable fast_64bit
1808
        spic=$shared
1809
        # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1810
        enabled shared && enable_weak hardcoded_tables
1811
    ;;
1812
    m68k)
1813
        arch="m68k"
1814
    ;;
1815
    mips|mipsel|IP*)
1816
        arch="mips"
1817
        spic=$shared
1818
    ;;
1819
    mips64)
1820
        arch="mips"
1821
        subarch="mips64"
1822
        enable fast_64bit
1823
        spic=$shared
1824
    ;;
1825
    parisc|hppa)
1826
        arch="parisc"
1827
        spic=$shared
1828
    ;;
1829
    parisc64|hppa64)
1830
        arch="parisc"
1831
        enable fast_64bit
1832
        spic=$shared
1833
    ;;
1834
    "Power Macintosh"|ppc|powerpc)
1835
        arch="ppc"
1836
        enable fast_unaligned
1837
    ;;
1838
    ppc64)
1839
        arch="ppc"
1840
        subarch="ppc64"
1841
        enable fast_64bit
1842
        enable fast_unaligned
1843
    ;;
1844
    s390|s390x)
1845
        arch="s390"
1846
    ;;
1847
    sh4|sh)
1848
        arch="sh4"
1849
    ;;
1850
    sparc)
1851
        arch="sparc"
1852
        spic=$shared
1853
    ;;
1854
    sun4u|sparc64)
1855
        arch="sparc"
1856
        subarch="sparc64"
1857
        enable fast_64bit
1858
        spic=$shared
1859
    ;;
1860
    i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1861
        arch="x86"
1862
        subarch="x86_32"
1863
        enable fast_unaligned
1864
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1865
        int test[(int)sizeof(char*) - 7];
1866
EOF
1867
        if test "$subarch" = "x86_64"; then
1868
            enable cmov
1869
            enable fast_cmov
1870
        fi
1871
    ;;
1872
    *)
1873
        arch="unknown"
1874
    ;;
1875
esac
1876

    
1877
enable $arch $subarch
1878
enabled spic && enable pic
1879
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1880

    
1881
# OS specific
1882
case $target_os in
1883
    beos|haiku|zeta)
1884
        prefix_default="$HOME/config"
1885
        # 3 gcc releases known for BeOS, each with ugly bugs
1886
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1887
        case "$gcc_version" in
1888
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1889
            disable mmx
1890
            ;;
1891
          *20010315*) echo "BeBits gcc"
1892
            add_cflags -fno-expensive-optimizations
1893
            ;;
1894
        esac
1895
        SHFLAGS=-nostart
1896
        # enable BeOS things
1897
        enable audio_beos
1898
        # no need for libm, but the inet stuff
1899
        # Check for BONE
1900
        # XXX: actually should check for NOT net_server
1901
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1902
            network_extralibs="-lbind -lsocket"
1903
        else
1904
            enable beos_netserver
1905
            network_extralibs="-lnet"
1906
        fi ;;
1907
    sunos)
1908
        FFSERVERLDFLAGS=""
1909
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1910
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1911
        network_extralibs="-lsocket -lnsl"
1912
        add_cppflags -D__EXTENSIONS__
1913
        ;;
1914
    netbsd)
1915
        oss_indev_extralibs="-lossaudio"
1916
        oss_outdev_extralibs="-lossaudio"
1917
        ;;
1918
    openbsd)
1919
        enable malloc_aligned
1920
        # On OpenBSD 4.5. the compiler does not use PIC unless
1921
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
1922
        # however the generated executable will not do anything
1923
        # (simply quits with exit-code 1, no crash, no output).
1924
        # Thus explicitly enable PIC here.
1925
        enable pic
1926
        SHFLAGS='-shared'
1927
        oss_indev_extralibs="-lossaudio"
1928
        oss_outdev_extralibs="-lossaudio"
1929
        ;;
1930
    freebsd|dragonfly)
1931
        enable malloc_aligned
1932
        ;;
1933
    bsd/os)
1934
        osextralibs="-lpoll -lgnugetopt"
1935
        strip="strip -d"
1936
        ;;
1937
    darwin)
1938
        enable malloc_aligned
1939
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1940
        strip="strip -x"
1941
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1942
        SLIBSUF=".dylib"
1943
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1944
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1945
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1946
        objformat="macho"
1947
        enabled x86_64 && objformat="macho64"
1948
        enabled_any pic shared ||
1949
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1950
        ;;
1951
    mingw32*)
1952
        if test $target_os = "mingw32ce"; then
1953
            disable network
1954
        else
1955
            target_os=mingw32
1956
        fi
1957
        LIBTARGET=i386
1958
        if enabled x86_64; then
1959
            enable malloc_aligned
1960
            LIBTARGET=x64
1961
        elif enabled arm; then
1962
            LIBTARGET=arm
1963
        fi
1964
        shlibdir_default="$bindir_default"
1965
        disable ffserver
1966
        SLIBPREF=""
1967
        SLIBSUF=".dll"
1968
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1969
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1970
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1971
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1972
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1973
            install -d "$(LIBDIR)"; \
1974
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1975
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1976
        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'
1977
        objformat="win32"
1978
        enable dos_paths
1979
        check_cflags -fno-common
1980
        if ! enabled x86_64; then
1981
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1982
                die "ERROR: MinGW runtime version must be >= 3.15."
1983
            enabled_any avisynth vfwcap_indev &&
1984
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1985
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1986
            fi
1987
        ;;
1988
    cygwin*)
1989
        target_os=cygwin
1990
        shlibdir_default="$bindir_default"
1991
        SLIBPREF="cyg"
1992
        SLIBSUF=".dll"
1993
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1994
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1995
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1996
        objformat="win32"
1997
        enable dos_paths
1998
        check_cflags -fno-common
1999
        ;;
2000
    *-dos|freedos|opendos)
2001
        disable ffplay ffserver
2002
        disable $INDEV_LIST $OUTDEV_LIST
2003
        network_extralibs="-lsocket"
2004
        objformat="coff"
2005
        enable dos_paths
2006
        ;;
2007
    linux)
2008
        enable dv1394
2009
        ;;
2010
    irix*)
2011
        target_os=irix
2012
        ranlib="echo ignoring ranlib"
2013
        ;;
2014
    os/2*)
2015
        strip="lxlite"
2016
        ln_s="cp -f"
2017
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2018
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2019
        FFSERVERLDFLAGS=""
2020
        LIBSUF="_s.a"
2021
        SLIBPREF=""
2022
        SLIBSUF=".dll"
2023
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2024
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2025
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2026
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2027
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2028
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2029
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2030
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2031
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2032
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2033
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2034
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2035
        enable dos_paths
2036
        ;;
2037
    gnu/kfreebsd)
2038
        ;;
2039
    gnu)
2040
        ;;
2041

    
2042
    *)
2043
        die "Unknown OS '$target_os'."
2044
        ;;
2045
esac
2046

    
2047
set_default $PATHS_LIST
2048

    
2049
add_extralibs $osextralibs
2050

    
2051
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2052
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2053

    
2054
# we need to build at least one lib type
2055
if ! enabled_any static shared; then
2056
    cat <<EOF
2057
At least one library type must be built.
2058
Specify --enable-static to build the static libraries or --enable-shared to
2059
build the shared libraries as well. To only build the shared libraries specify
2060
--disable-static in addition to --enable-shared.
2061
EOF
2062
    exit 1;
2063
fi
2064

    
2065
disabled static && LIBNAME=""
2066

    
2067
if enabled_any libfaad libfaadbin ; then
2068
    if check_header faad.h; then
2069
        check_cc <<EOF
2070
#include <faad.h>
2071
#ifndef FAAD2_VERSION
2072
ok faad1
2073
#endif
2074
int main(void) { return 0; }
2075
EOF
2076
        test $? = 0 && enable libfaad2
2077
    else
2078
        die "FAAD test failed."
2079
    fi
2080
fi
2081

    
2082

    
2083
die_license_disabled() {
2084
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2085
}
2086

    
2087
die_license_disabled gpl libfaad2
2088
die_license_disabled gpl libx264
2089
die_license_disabled gpl libxvid
2090
die_license_disabled gpl postproc
2091
die_license_disabled gpl x11grab
2092

    
2093
die_license_disabled nonfree libfaac
2094

    
2095
die_license_disabled version3 libopencore_amrnb
2096
die_license_disabled version3 libopencore_amrwb
2097

    
2098
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2099

    
2100
check_deps $ARCH_EXT_LIST
2101

    
2102
disabled optimizations || check_cflags -fomit-frame-pointer
2103

    
2104
enable_pic() {
2105
    enable pic
2106
    add_cppflags -DPIC
2107
    add_cflags   -fPIC
2108
    add_asflags  -fPIC
2109
}
2110

    
2111
enabled pic && enable_pic
2112

    
2113
check_cc <<EOF || die "Symbol mangling check failed."
2114
int ff_extern;
2115
EOF
2116
sym=$($nm -P -g $TMPO | grep ff_extern)
2117
extern_prefix=${sym%%ff_extern*}
2118

    
2119
check_cc <<EOF && enable inline_asm
2120
void foo(void) { __asm__ volatile ("" ::); }
2121
EOF
2122

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

    
2130
check_cc <<EOF && enable attribute_packed
2131
struct { int x; } __attribute__((packed)) x;
2132
EOF
2133

    
2134
check_cc <<EOF || die "endian test failed"
2135
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2136
EOF
2137
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2138

    
2139
if enabled arm; then
2140

    
2141
    check_cflags -marm
2142

    
2143
    check_ld <<EOF && enable vfp_args
2144
__asm__ (".eabi_attribute 28, 1");
2145
int main(void) { return 0; }
2146
EOF
2147

    
2148
    # We have to check if pld is a nop and disable it.
2149
    check_asm pld '"pld [r0]"'
2150

    
2151
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2152
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2153
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2154
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2155
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2156
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2157

    
2158
    enabled_all armv6t2 shared !pic && enable_pic
2159

    
2160
elif enabled mips; then
2161

    
2162
    check_asm loongson '"dmult.g $1, $2, $3"'
2163
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2164

    
2165
elif enabled ppc; then
2166

    
2167
    check_asm dcbzl     '"dcbzl 0, 1"'
2168
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2169
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2170

    
2171
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2172
    if enabled altivec; then
2173
        check_cflags -maltivec -mabi=altivec &&
2174
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2175
        check_cflags -faltivec
2176

    
2177
        # check if our compiler supports Motorola AltiVec C API
2178
        check_cc <<EOF || disable altivec
2179
$inc_altivec_h
2180
int main(void) {
2181
    vector signed int v1, v2, v3;
2182
    v1 = vec_add(v2,v3);
2183
    return 0;
2184
}
2185
EOF
2186

    
2187
        # check if our compiler supports braces for vector declarations
2188
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2189
$inc_altivec_h
2190
int main (void) { (vector int) {1}; return 0; }
2191
EOF
2192
    fi
2193

    
2194
elif enabled sparc; then
2195

    
2196
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2197
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2198

    
2199
elif enabled x86; then
2200

    
2201
    # check whether EBP is available on x86
2202
    # As 'i' is stored on the stack, this program will crash
2203
    # if the base pointer is used to access it because the
2204
    # base pointer is cleared in the inline assembly code.
2205
    check_exec_crash <<EOF && enable ebp_available
2206
    volatile int i=0;
2207
    __asm__ volatile (
2208
        "xorl %%ebp, %%ebp"
2209
    ::: "%ebp");
2210
    return i;
2211
EOF
2212

    
2213
    # check whether EBX is available on x86
2214
    check_asm ebx_available '""::"b"(0)' &&
2215
        check_asm ebx_available '"":::"%ebx"'
2216

    
2217
    # check whether more than 10 operands are supported
2218
    check_cc <<EOF && enable ten_operands
2219
int main(void) {
2220
    int x=0;
2221
    __asm__ volatile(
2222
        ""
2223
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2224
    );
2225
    return 0;
2226
}
2227
EOF
2228

    
2229
    # check whether binutils is new enough to compile SSSE3/MMX2
2230
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2231
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2232

    
2233
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2234

    
2235
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2236
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2237
    enabled     pic           && append YASMFLAGS "-DPIC"
2238
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2239
    case "$objformat" in
2240
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2241
    esac
2242
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2243

    
2244
fi
2245

    
2246
if check_func dlopen; then
2247
    ldl=
2248
elif check_func dlopen -ldl; then
2249
    ldl=-ldl
2250
fi
2251

    
2252
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2253
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2254

    
2255
check_func  fork
2256
check_func  gethrtime
2257
check_func  getrusage
2258
check_func  inet_aton $network_extralibs
2259
check_func  isatty
2260
check_func  memalign
2261
check_func  mkstemp
2262
check_func  posix_memalign
2263
check_func_headers io.h setmode
2264
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2265
check_func_headers windows.h GetProcessTimes
2266
check_func_headers windows.h VirtualAlloc
2267

    
2268
check_header conio.h
2269
check_header dlfcn.h
2270
check_header malloc.h
2271
check_header poll.h
2272
check_header sys/mman.h
2273
check_header sys/resource.h
2274
check_header sys/select.h
2275
check_header termios.h
2276
check_header vdpau/vdpau.h
2277
check_header vdpau/vdpau_x11.h
2278
check_header X11/extensions/XvMClib.h
2279

    
2280
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2281
     enabled_any $need_memalign ; then
2282
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2283
fi
2284

    
2285
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2286
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2287

    
2288
# check for some common methods of building with pthread support
2289
# do this before the optional library checks as some of them require pthreads
2290
if enabled pthreads; then
2291
    if check_func pthread_create; then
2292
        :
2293
    elif check_func pthread_create -pthread; then
2294
        add_cflags -pthread
2295
        add_extralibs -pthread
2296
    elif check_func pthread_create -pthreads; then
2297
        add_cflags -pthreads
2298
        add_extralibs -pthreads
2299
    elif check_func pthread_create -lpthreadGC2; then
2300
        add_extralibs -lpthreadGC2
2301
    elif ! check_lib pthread.h pthread_create -lpthread; then
2302
        die "ERROR: can't find pthreads library"
2303
    fi
2304
fi
2305

    
2306
for thread in $THREADS_LIST; do
2307
    if enabled $thread; then
2308
        test -n "$thread_type" &&
2309
            die "ERROR: Only one thread type must be selected." ||
2310
            thread_type="$thread"
2311
    fi
2312
done
2313

    
2314
check_lib math.h sin -lm
2315
check_lib va/va.h vaInitialize -lva
2316

    
2317
check_func llrint
2318
check_func log2
2319
check_func lrint
2320
check_func lrintf
2321
check_func round
2322
check_func roundf
2323
check_func truncf
2324

    
2325
# these are off by default, so fail if requested and not available
2326
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2327
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2328
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2329
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2330
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2331
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2332
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2333
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2334
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2335
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2336
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2337
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2338
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2339
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2340
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2341
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2342
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2343
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2344
                      { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2345
                        die "ERROR: libx264 version must be >= 0.78."; }
2346
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2347
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2348

    
2349
# libdc1394 check
2350
if enabled libdc1394; then
2351
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2352
        enable libdc1394_2; } ||
2353
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2354
        enable libdc1394_1; } ||
2355
    die "ERROR: No version of libdc1394 found "
2356
fi
2357

    
2358
disable sdl_too_old
2359
disable sdl
2360
SDL_CONFIG="${cross_prefix}sdl-config"
2361
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2362
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2363
    sdl_libs=$("${SDL_CONFIG}" --libs)
2364
    temp_cflags $sdl_cflags
2365
    temp_extralibs $sdl_libs
2366
    if check_lib2 SDL.h SDL_Init; then
2367
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2368
        if test "$_sdlversion" -lt 121 ; then
2369
            enable sdl_too_old
2370
        else
2371
            enable sdl
2372
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2373
#include <SDL.h>
2374
int main(int argc, char **argv){
2375
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2376
    int w = vi->current_w;
2377
    return 0;
2378
}
2379
EOF
2380
        fi
2381
    fi
2382
    restore_flags
2383
fi
2384

    
2385
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2386

    
2387
if enabled network; then
2388
    check_type "sys/types.h sys/socket.h" socklen_t
2389
    # Prefer arpa/inet.h over winsock2
2390
    if check_header arpa/inet.h ; then
2391
        check_func closesocket
2392
    elif check_header winsock2.h ; then
2393
        check_func_headers winsock2.h closesocket -lws2 && \
2394
            network_extralibs="-lws2" || \
2395
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2396
            network_extralibs="-lws2_32"; }
2397
        check_type ws2tcpip.h socklen_t
2398
    else
2399
        disable network
2400
    fi
2401
fi
2402

    
2403
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2404
#include <sys/types.h>
2405
#include <sys/socket.h>
2406
#include <netinet/in.h>
2407
#include <netdb.h>
2408
int main(void) {
2409
    struct sockaddr_storage saddr;
2410
    struct ipv6_mreq mreq6;
2411
    getaddrinfo(0,0,0,0);
2412
    getnameinfo(0,0,0,0,0,0,0);
2413
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2414
}
2415
EOF
2416

    
2417
check_header linux/videodev.h
2418
check_header linux/videodev2.h
2419
check_header sys/videoio.h
2420

    
2421
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2422

    
2423
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2424
{ check_header dev/bktr/ioctl_meteor.h &&
2425
  check_header dev/bktr/ioctl_bt848.h; } ||
2426
{ check_header machine/ioctl_meteor.h &&
2427
  check_header machine/ioctl_bt848.h; } ||
2428
{ check_header dev/video/meteor/ioctl_meteor.h &&
2429
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2430
check_header dev/ic/bt8xx.h
2431

    
2432
check_header sys/soundcard.h
2433
check_header soundcard.h
2434

    
2435
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2436

    
2437
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2438

    
2439
enabled x11grab                         &&
2440
check_header X11/Xlib.h                 &&
2441
check_header X11/extensions/XShm.h      &&
2442
check_func XOpenDisplay -lX11           &&
2443
check_func XShmCreateImage -lX11 -lXext
2444

    
2445
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2446

    
2447
# add some useful compiler flags if supported
2448
check_cflags -Wdeclaration-after-statement
2449
check_cflags -Wall
2450
check_cflags -Wno-switch
2451
check_cflags -Wdisabled-optimization
2452
check_cflags -Wpointer-arith
2453
check_cflags -Wredundant-decls
2454
check_cflags -Wno-pointer-sign
2455
check_cflags -Wcast-qual
2456
check_cflags -Wwrite-strings
2457
check_cflags -Wtype-limits
2458
check_cflags -Wundef
2459
enabled extra_warnings && check_cflags -Winline
2460

    
2461
# add some linker flags
2462
check_ldflags -Wl,--warn-common
2463
check_ldflags -Wl,--as-needed
2464
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'
2465
check_ldflags -Wl,-Bsymbolic
2466

    
2467
if enabled small; then
2468
    check_cflags -Os            # not all compilers support -Os
2469
    optimizations="small"
2470
elif enabled optimizations; then
2471
    if enabled xlc; then
2472
        add_cflags  -O5
2473
        add_ldflags -O5
2474
    elif enabled ccc; then
2475
        add_cflags -fast
2476
    else
2477
        add_cflags -O3
2478
    fi
2479
fi
2480
check_cflags -fno-math-errno
2481
check_cflags -fno-signed-zeros
2482

    
2483
if enabled icc; then
2484
    # Just warnings, no remarks
2485
    check_cflags -w1
2486
    # -wd: Disable following warnings
2487
    # 144, 167, 556: -Wno-pointer-sign
2488
    # 10006: ignoring unknown option -fno-signed-zeros
2489
    # 10156: ignoring option '-W'; no argument required
2490
    check_cflags -wd144,167,556,10006,10156
2491
    # 11030: Warning unknown option --as-needed
2492
    # 10156: ignoring option '-export'; no argument required
2493
    check_ldflags -wd10156,11030
2494
    # Allow to compile with optimizations
2495
    check_ldflags -march=$cpu
2496
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2497
    enable ebp_available
2498
elif enabled ccc; then
2499
    # disable some annoying warnings
2500
    add_cflags -msg_disable cvtu32to64
2501
    add_cflags -msg_disable embedcomment
2502
    add_cflags -msg_disable needconstext
2503
    add_cflags -msg_disable nomainieee
2504
    add_cflags -msg_disable ptrmismatch1
2505
    add_cflags -msg_disable unreachcode
2506
elif enabled gcc; then
2507
    check_cflags -fno-tree-vectorize
2508
elif enabled clang; then
2509
    check_cflags -Qunused-arguments
2510
fi
2511

    
2512
if enabled gprof; then
2513
    add_cflags  -p
2514
    add_ldflags -p
2515
fi
2516

    
2517
# Find out if the .align argument is a power of two or not.
2518
check_asm asmalign_pot '".align 3"'
2519

    
2520
enabled_any $DECODER_LIST      && enable decoders
2521
enabled_any $ENCODER_LIST      && enable encoders
2522
enabled_any $HWACCEL_LIST      && enable hwaccels
2523
enabled_any $BSF_LIST          && enable bsfs
2524
enabled_any $DEMUXER_LIST      && enable demuxers
2525
enabled_any $MUXER_LIST        && enable muxers
2526
enabled_any $FILTER_LIST       && enable filters
2527
enabled_any $INDEV_LIST        && enable indevs
2528
enabled_any $OUTDEV_LIST       && enable outdevs
2529
enabled_any $PROTOCOL_LIST     && enable protocols
2530

    
2531
enabled_any $THREADS_LIST      && enable threads
2532

    
2533
check_deps $CONFIG_LIST       \
2534
           $CONFIG_EXTRA      \
2535
           $HAVE_LIST         \
2536
           $DECODER_LIST      \
2537
           $ENCODER_LIST      \
2538
           $HWACCEL_LIST      \
2539
           $PARSER_LIST       \
2540
           $BSF_LIST          \
2541
           $DEMUXER_LIST      \
2542
           $MUXER_LIST        \
2543
           $FILTER_LIST       \
2544
           $INDEV_LIST        \
2545
           $OUTDEV_LIST       \
2546
           $PROTOCOL_LIST     \
2547

    
2548
echo "install prefix            $prefix"
2549
echo "source path               $source_path"
2550
echo "C compiler                $cc"
2551
echo ".align is power-of-two    $asmalign_pot"
2552
echo "ARCH                      $arch ($cpu)"
2553
if test "$build_suffix" != ""; then
2554
    echo "build suffix              $build_suffix"
2555
fi
2556
if test "$extra_version" != ""; then
2557
    echo "version string suffix     $extra_version"
2558
fi
2559
echo "big-endian                ${bigendian-no}"
2560
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2561
if enabled x86; then
2562
    echo "yasm                      ${yasm-no}"
2563
    echo "MMX enabled               ${mmx-no}"
2564
    echo "MMX2 enabled              ${mmx2-no}"
2565
    echo "3DNow! enabled            ${amd3dnow-no}"
2566
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2567
    echo "SSE enabled               ${sse-no}"
2568
    echo "SSSE3 enabled             ${ssse3-no}"
2569
    echo "CMOV enabled              ${cmov-no}"
2570
    echo "CMOV is fast              ${fast_cmov-no}"
2571
    echo "EBX available             ${ebx_available-no}"
2572
    echo "EBP available             ${ebp_available-no}"
2573
    echo "10 operands supported     ${ten_operands-no}"
2574
fi
2575
if enabled arm; then
2576
    echo "ARMv5TE enabled           ${armv5te-no}"
2577
    echo "ARMv6 enabled             ${armv6-no}"
2578
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2579
    echo "ARM VFP enabled           ${armvfp-no}"
2580
    echo "IWMMXT enabled            ${iwmmxt-no}"
2581
    echo "NEON enabled              ${neon-no}"
2582
fi
2583
if enabled mips; then
2584
    echo "MMI enabled               ${mmi-no}"
2585
fi
2586
if enabled ppc; then
2587
    echo "AltiVec enabled           ${altivec-no}"
2588
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2589
    echo "dcbzl available           ${dcbzl-no}"
2590
    echo "performance report        ${powerpc_perf-no}"
2591
fi
2592
if enabled sparc; then
2593
    echo "VIS enabled               ${vis-no}"
2594
fi
2595
echo "gprof enabled             ${gprof-no}"
2596
echo "debug symbols             ${debug-no}"
2597
echo "strip symbols             ${stripping-no}"
2598
echo "optimizations             ${optimizations-no}"
2599
echo "static                    ${static-no}"
2600
echo "shared                    ${shared-no}"
2601
echo "postprocessing support    ${postproc-no}"
2602
echo "new filter support        ${avfilter-no}"
2603
echo "filters using lavformat   ${avfilter_lavf-no}"
2604
echo "network support           ${network-no}"
2605
if enabled network; then
2606
    echo "IPv6 support              ${ipv6-no}"
2607
fi
2608
echo "threading support         ${thread_type-no}"
2609
echo "SDL support               ${sdl-no}"
2610
if enabled sdl_too_old; then
2611
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2612
fi
2613
echo "Sun medialib support      ${mlib-no}"
2614
echo "AVISynth enabled          ${avisynth-no}"
2615
echo "libdc1394 support         ${libdc1394-no}"
2616
echo "libdirac enabled          ${libdirac-no}"
2617
echo "libfaac enabled           ${libfaac-no}"
2618
echo "libfaad enabled           ${libfaad-no}"
2619
echo "libfaad dlopened          ${libfaadbin-no}"
2620
echo "libgsm enabled            ${libgsm-no}"
2621
echo "libmp3lame enabled        ${libmp3lame-no}"
2622
echo "libnut enabled            ${libnut-no}"
2623
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2624
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2625
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2626
echo "libschroedinger enabled   ${libschroedinger-no}"
2627
echo "libspeex enabled          ${libspeex-no}"
2628
echo "libtheora enabled         ${libtheora-no}"
2629
echo "libvorbis enabled         ${libvorbis-no}"
2630
echo "libx264 enabled           ${libx264-no}"
2631
echo "libxvid enabled           ${libxvid-no}"
2632
echo "zlib enabled              ${zlib-no}"
2633
echo "bzlib enabled             ${bzlib-no}"
2634
echo
2635

    
2636
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2637
    echo "Enabled ${type}s:"
2638
    eval list=\$$(toupper $type)_LIST
2639
    for part in $list; do
2640
        enabled $part && echo ${part%_*}
2641
    done | sort | pr -3 -t
2642
    echo
2643
done
2644

    
2645
license="LGPL version 2.1 or later"
2646
if enabled nonfree; then
2647
    license="nonfree and unredistributable"
2648
elif enabled gplv3; then
2649
    license="GPL version 3 or later"
2650
elif enabled lgplv3; then
2651
    license="LGPL version 3 or later"
2652
elif enabled gpl; then
2653
    license="GPL version 2 or later"
2654
fi
2655

    
2656
echo "License: $license"
2657

    
2658
echo "Creating config.mak and config.h..."
2659

    
2660
enabled stripping || strip="echo skipping strip"
2661

    
2662
cat > config.mak <<EOF
2663
# Automatically generated by configure - do not modify!
2664
ifndef FFMPEG_CONFIG_MAK
2665
FFMPEG_CONFIG_MAK=1
2666
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2667
prefix=$prefix
2668
LIBDIR=\$(DESTDIR)$libdir
2669
SHLIBDIR=\$(DESTDIR)$shlibdir
2670
INCDIR=\$(DESTDIR)$incdir
2671
BINDIR=\$(DESTDIR)$bindir
2672
DATADIR=\$(DESTDIR)$datadir
2673
MANDIR=\$(DESTDIR)$mandir
2674
SRC_PATH="$source_path"
2675
SRC_PATH_BARE=$source_path
2676
BUILD_ROOT="$PWD"
2677
ARCH=$arch
2678
CC=$cc
2679
AS=$as
2680
LD=$ld
2681
DEPCC=$dep_cc
2682
YASM=$yasmexe
2683
AR=$ar
2684
RANLIB=$ranlib
2685
LN_S=$ln_s
2686
STRIP=$strip
2687
CPPFLAGS=$CPPFLAGS
2688
CFLAGS=$CFLAGS
2689
ASFLAGS=$ASFLAGS
2690
CC_O=$CC_O
2691
LDFLAGS=$LDFLAGS
2692
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2693
SHFLAGS=$SHFLAGS
2694
YASMFLAGS=$YASMFLAGS
2695
BUILDSUF=$build_suffix
2696
FULLNAME=$FULLNAME
2697
LIBPREF=$LIBPREF
2698
LIBSUF=$LIBSUF
2699
LIBNAME=$LIBNAME
2700
SLIBPREF=$SLIBPREF
2701
SLIBSUF=$SLIBSUF
2702
EXESUF=$EXESUF
2703
EXTRA_VERSION=$extra_version
2704
DEPFLAGS=$DEPFLAGS
2705
CCDEP=$CCDEP
2706
ASDEP=$ASDEP
2707
CC_DEPFLAGS=$CC_DEPFLAGS
2708
AS_DEPFLAGS=$AS_DEPFLAGS
2709
HOSTCC=$host_cc
2710
HOSTCFLAGS=$host_cflags
2711
HOSTEXESUF=$HOSTEXESUF
2712
HOSTLDFLAGS=$host_ldflags
2713
HOSTLIBS=$host_libs
2714
TARGET_EXEC=$target_exec
2715
TARGET_PATH=$target_path
2716
SDL_LIBS=$sdl_libs
2717
SDL_CFLAGS=$sdl_cflags
2718
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2719
EXTRALIBS=$extralibs
2720
EOF
2721

    
2722
get_version(){
2723
    name=$1
2724
    file=$source_path/$2
2725
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2726
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2727
    lcname=$(tolower $name)
2728
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2729
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2730
}
2731

    
2732
get_version LIBSWSCALE  libswscale/swscale.h
2733
get_version LIBPOSTPROC libpostproc/postprocess.h
2734
get_version LIBAVCODEC  libavcodec/avcodec.h
2735
get_version LIBAVDEVICE libavdevice/avdevice.h
2736
get_version LIBAVFORMAT libavformat/avformat.h
2737
get_version LIBAVUTIL   libavutil/avutil.h
2738
get_version LIBAVFILTER libavfilter/avfilter.h
2739

    
2740
enabled shared && cat >> config.mak <<EOF
2741
LIBTARGET=${LIBTARGET}
2742
SLIBNAME=${SLIBNAME}
2743
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2744
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2745
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2746
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2747
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2748
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2749
EOF
2750

    
2751
enabled asmalign_pot || align_shift="1 <<"
2752

    
2753
cat > $TMPH <<EOF
2754
/* Automatically generated by configure - do not modify! */
2755
#ifndef FFMPEG_CONFIG_H
2756
#define FFMPEG_CONFIG_H
2757
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2758
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2759
#define CC_TYPE "$cc_type"
2760
#define CC_VERSION $cc_version
2761
#define restrict $_restrict
2762
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2763
#define EXTERN_PREFIX "${extern_prefix}"
2764
#define EXTERN_ASM ${extern_prefix}
2765
EOF
2766

    
2767
if enabled small || disabled optimizations; then
2768
    echo "#define av_always_inline"  >> $TMPH
2769
fi
2770

    
2771
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2772
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2773
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2774
                                      $CONFIG_EXTRA      \
2775
                                      $DECODER_LIST      \
2776
                                      $ENCODER_LIST      \
2777
                                      $HWACCEL_LIST      \
2778
                                      $PARSER_LIST       \
2779
                                      $BSF_LIST          \
2780
                                      $DEMUXER_LIST      \
2781
                                      $MUXER_LIST        \
2782
                                      $FILTER_LIST       \
2783
                                      $PROTOCOL_LIST     \
2784
                                      $INDEV_LIST        \
2785
                                      $OUTDEV_LIST       \
2786

    
2787
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2788
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2789

    
2790
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2791
cmp -s $TMPH config.h &&
2792
    echo "config.h is unchanged" ||
2793
    mv -f $TMPH config.h
2794

    
2795
# build tree in object directory if source path is different from current one
2796
if enabled source_path_used; then
2797
    DIRS="
2798
        doc
2799
        libavcodec
2800
        libavcodec/$arch
2801
        libavdevice
2802
        libavfilter
2803
        libavformat
2804
        libavutil
2805
        libavutil/$arch
2806
        libpostproc
2807
        libswscale
2808
        libswscale/$arch
2809
        tests
2810
        tools
2811
    "
2812
    FILES="
2813
        Makefile
2814
        common.mak
2815
        subdir.mak
2816
        doc/texi2pod.pl
2817
        libavcodec/Makefile
2818
        libavdevice/Makefile
2819
        libavfilter/Makefile
2820
        libavformat/Makefile
2821
        libavutil/Makefile
2822
        libpostproc/Makefile
2823
        libswscale/Makefile
2824
    "
2825
    for dir in $DIRS ; do
2826
        mkdir -p $dir
2827
    done
2828
    for f in $FILES ; do
2829
        $ln_s "$source_path/$f" $f
2830
    done
2831
fi
2832

    
2833

    
2834
# build pkg-config files
2835

    
2836
pkgconfig_generate(){
2837
name=$1
2838
shortname=${name#lib}${build_suffix}
2839
comment=$2
2840
version=$3
2841
libs=$4
2842
requires=$5
2843
cat <<EOF > $name/$name.pc
2844
prefix=$prefix
2845
exec_prefix=\${prefix}
2846
libdir=$libdir
2847
includedir=$incdir
2848

    
2849
Name: $name
2850
Description: $comment
2851
Version: $version
2852
Requires: $(enabled shared || echo $requires)
2853
Requires.private: $(enabled shared && echo $requires)
2854
Conflicts:
2855
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2856
Libs.private: $(enabled shared && echo $libs)
2857
Cflags: -I\${includedir}
2858
EOF
2859
cat <<EOF > $name/$name-uninstalled.pc
2860
prefix=
2861
exec_prefix=
2862
libdir=\${pcfiledir}
2863
includedir=${source_path}
2864

    
2865
Name: $name
2866
Description: $comment
2867
Version: $version
2868
Requires: $requires
2869
Conflicts:
2870
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2871
Cflags: -I\${includedir}
2872
EOF
2873
}
2874

    
2875
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2876
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2877
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2878
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2879
enabled avfilter &&
2880
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2881
enabled postproc &&
2882
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2883
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"