Statistics
| Branch: | Revision:

ffmpeg / configure @ f183cfeb

History | View | Annotate | Download (100 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.log]
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-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --disable-avfilter       disable video filter support [no]
93
  --disable-pthreads       disable pthreads [auto]
94
  --enable-w32threads      use Win32 threads [no]
95
  --enable-x11grab         enable X11 grabbing [no]
96
  --disable-network        disable network support [no]
97
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
98
  --enable-gray            enable full grayscale support (slower color)
99
  --disable-swscale-alpha  disable alpha channel support in swscale
100
  --disable-fastdiv        disable table-based division
101
  --enable-small           optimize for size instead of speed
102
  --disable-aandct         disable AAN DCT code
103
  --disable-dct            disable DCT code
104
  --disable-fft            disable FFT code
105
  --disable-golomb         disable Golomb code
106
  --disable-huffman        disable Huffman code
107
  --disable-lpc            disable LPC code
108
  --disable-mdct           disable MDCT code
109
  --disable-rdft           disable RDFT code
110
  --disable-vaapi          disable VAAPI code
111
  --disable-vdpau          disable VDPAU code
112
  --disable-dxva2          disable DXVA2 code
113
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
116
  --disable-everything     disable all components listed below
117
  --disable-encoder=NAME   disable encoder NAME
118
  --enable-encoder=NAME    enable encoder NAME
119
  --disable-encoders       disable all encoders
120
  --disable-decoder=NAME   disable decoder NAME
121
  --enable-decoder=NAME    enable decoder NAME
122
  --disable-decoders       disable all decoders
123
  --disable-hwaccel=NAME   disable hwaccel NAME
124
  --enable-hwaccel=NAME    enable hwaccel NAME
125
  --disable-hwaccels       disable all hwaccels
126
  --disable-muxer=NAME     disable muxer NAME
127
  --enable-muxer=NAME      enable muxer NAME
128
  --disable-muxers         disable all muxers
129
  --disable-demuxer=NAME   disable demuxer NAME
130
  --enable-demuxer=NAME    enable demuxer NAME
131
  --disable-demuxers       disable all demuxers
132
  --enable-parser=NAME     enable parser NAME
133
  --disable-parser=NAME    disable parser NAME
134
  --disable-parsers        disable all parsers
135
  --enable-bsf=NAME        enable bitstream filter NAME
136
  --disable-bsf=NAME       disable bitstream filter NAME
137
  --disable-bsfs           disable all bitstream filters
138
  --enable-protocol=NAME   enable protocol NAME
139
  --disable-protocol=NAME  disable protocol NAME
140
  --disable-protocols      disable all protocols
141
  --disable-indev=NAME     disable input device NAME
142
  --disable-outdev=NAME    disable output device NAME
143
  --disable-indevs         disable input devices
144
  --disable-outdevs        disable output devices
145
  --disable-devices        disable all devices
146
  --enable-filter=NAME     enable filter NAME
147
  --disable-filter=NAME    disable filter NAME
148
  --disable-filters        disable all filters
149
  --list-decoders          show all available decoders
150
  --list-encoders          show all available encoders
151
  --list-hwaccels          show all available hardware accelerators
152
  --list-muxers            show all available muxers
153
  --list-demuxers          show all available demuxers
154
  --list-parsers           show all available parsers
155
  --list-protocols         show all available protocols
156
  --list-bsfs              show all available bitstream filters
157
  --list-indevs            show all available input devices
158
  --list-outdevs           show all available output devices
159
  --list-filters           show all available filters
160

    
161
External library support:
162
  --enable-avisynth        enable reading of AVISynth script files [no]
163
  --enable-bzlib           enable bzlib [autodetect]
164
  --enable-frei0r          enable frei0r video filtering
165
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167
  --enable-libopencv       enable video filtering via libopencv [no]
168
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
169
                           and libraw1394 [no]
170
  --enable-libdirac        enable Dirac support via libdirac [no]
171
  --enable-libfaac         enable FAAC support via libfaac [no]
172
  --enable-libfreetype     enable libfreetype [no]
173
  --enable-libgsm          enable GSM support via libgsm [no]
174
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
175
  --enable-libnut          enable NUT (de)muxing via libnut,
176
                           native (de)muxer exists [no]
177
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
178
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
179
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
180
  --enable-libspeex        enable Speex decoding via libspeex [no]
181
  --enable-libtheora       enable Theora encoding via libtheora [no]
182
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
183
                           native implementation exists [no]
184
  --enable-libvpx          enable VP8 support via libvpx [no]
185
  --enable-libx264         enable H.264 encoding via x264 [no]
186
  --enable-libxavs         enable AVS encoding via xavs [no]
187
  --enable-libxvid         enable Xvid encoding via xvidcore,
188
                           native MPEG-4/Xvid encoder exists [no]
189
  --enable-mlib            enable Sun medialib [no]
190
  --enable-zlib            enable zlib [autodetect]
191

    
192
Advanced options (experts only):
193
  --source-path=PATH       path to source code [$source_path]
194
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
195
  --enable-cross-compile   assume a cross-compiler is used
196
  --sysroot=PATH           root of cross-build tree
197
  --sysinclude=PATH        location of cross-build system headers
198
  --target-os=OS           compiler targets OS [$target_os]
199
  --target-exec=CMD        command to run executables on target
200
  --target-path=DIR        path to view of build directory on target
201
  --nm=NM                  use nm tool
202
  --ar=AR                  use archive tool AR [$ar_default]
203
  --as=AS                  use assembler AS [$as_default]
204
  --cc=CC                  use C compiler CC [$cc_default]
205
  --ld=LD                  use linker LD
206
  --host-cc=HOSTCC         use host C compiler HOSTCC
207
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
208
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
209
  --host-libs=HLIBS        use libs HLIBS when linking for host
210
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
211
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
212
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
213
  --extra-version=STRING   version string suffix []
214
  --build-suffix=SUFFIX    library name suffix []
215
  --arch=ARCH              select architecture [$arch]
216
  --cpu=CPU                select the minimum required CPU (affects
217
                           instruction selection, may crash on older CPUs)
218
  --disable-asm            disable all assembler optimizations
219
  --disable-altivec        disable AltiVec optimizations
220
  --disable-amd3dnow       disable 3DNow! optimizations
221
  --disable-amd3dnowext    disable 3DNow! extended optimizations
222
  --disable-mmx            disable MMX optimizations
223
  --disable-mmx2           disable MMX2 optimizations
224
  --disable-sse            disable SSE optimizations
225
  --disable-ssse3          disable SSSE3 optimizations
226
  --disable-avx            disable AVX optimizations
227
  --disable-armv5te        disable armv5te optimizations
228
  --disable-armv6          disable armv6 optimizations
229
  --disable-armv6t2        disable armv6t2 optimizations
230
  --disable-armvfp         disable ARM VFP optimizations
231
  --disable-iwmmxt         disable iwmmxt optimizations
232
  --disable-mmi            disable MMI optimizations
233
  --disable-neon           disable neon optimizations
234
  --disable-vis            disable VIS optimizations
235
  --disable-yasm           disable use of yasm assembler
236
  --enable-pic             build position-independent code
237
  --malloc-prefix=PFX      prefix malloc and related names with PFX
238
  --enable-sram            allow use of on-chip SRAM
239
  --disable-symver         disable symbol versioning
240

    
241
Developer options (useful when working on FFmpeg itself):
242
  --disable-debug          disable debugging symbols
243
  --enable-debug=LEVEL     set the debug level [$debuglevel]
244
  --disable-optimizations  disable compiler optimizations
245
  --enable-extra-warnings  enable more compiler warnings
246
  --disable-stripping      disable stripping of executables and shared libraries
247
  --samples=PATH           location of test samples for FATE
248

    
249
NOTE: Object files are built at the place where configure is launched.
250
EOF
251
  exit 0
252
}
253

    
254
quotes='""'
255

    
256
log(){
257
    echo "$@" >> $logfile
258
}
259

    
260
log_file(){
261
    log BEGIN $1
262
    pr -n -t $1 >> $logfile
263
    log END $1
264
}
265

    
266
echolog(){
267
    log "$@"
268
    echo "$@"
269
}
270

    
271
warn(){
272
    log "WARNING: $*"
273
    WARNINGS="${WARNINGS}WARNING: $*\n"
274
}
275

    
276
die(){
277
    echolog "$@"
278
    cat <<EOF
279

    
280
If you think configure made a mistake, make sure you are using the latest
281
version from Git.  If the latest version fails, report the problem to the
282
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
283
EOF
284
    if disabled logging; then
285
        cat <<EOF
286
Rerun configure with logging enabled (do not use --disable-logging), and
287
include the log this produces with your report.
288
EOF
289
    else
290
cat <<EOF
291
Include the log file "$logfile" produced by configure as this will help
292
solving the problem.
293
EOF
294
    fi
295
    exit 1
296
}
297

    
298
# Avoid locale weirdness, besides we really just want to translate ASCII.
299
toupper(){
300
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
301
}
302

    
303
tolower(){
304
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
305
}
306

    
307
c_escape(){
308
    echo "$*" | sed 's/["\\]/\\\0/g'
309
}
310

    
311
sh_quote(){
312
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
313
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
314
    echo "$v"
315
}
316

    
317
cleanws(){
318
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
319
}
320

    
321
filter(){
322
    pat=$1
323
    shift
324
    for v; do
325
        eval "case $v in $pat) echo $v ;; esac"
326
    done
327
}
328

    
329
filter_out(){
330
    pat=$1
331
    shift
332
    for v; do
333
        eval "case $v in $pat) ;; *) echo $v ;; esac"
334
    done
335
}
336

    
337
map(){
338
    m=$1
339
    shift
340
    for v; do eval $m; done
341
}
342

    
343
set_all(){
344
    value=$1
345
    shift
346
    for var in $*; do
347
        eval $var=$value
348
    done
349
}
350

    
351
set_weak(){
352
    value=$1
353
    shift
354
    for var; do
355
        eval : \${$var:=$value}
356
    done
357
}
358

    
359
pushvar(){
360
    for var in $*; do
361
        eval level=\${${var}_level:=0}
362
        eval ${var}_${level}="\$$var"
363
        eval ${var}_level=$(($level+1))
364
    done
365
}
366

    
367
popvar(){
368
    for var in $*; do
369
        eval level=\${${var}_level:-0}
370
        test $level = 0 && continue
371
        eval level=$(($level-1))
372
        eval $var="\${${var}_${level}}"
373
        eval ${var}_level=$level
374
        eval unset ${var}_${level}
375
    done
376
}
377

    
378
enable(){
379
    set_all yes $*
380
}
381

    
382
disable(){
383
    set_all no $*
384
}
385

    
386
enable_weak(){
387
    set_weak yes $*
388
}
389

    
390
disable_weak(){
391
    set_weak no $*
392
}
393

    
394
enable_safe(){
395
    for var; do
396
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
397
    done
398
}
399

    
400
disable_safe(){
401
    for var; do
402
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
403
    done
404
}
405

    
406
do_enable_deep(){
407
    for var; do
408
        enabled $var && continue
409
        eval sel="\$${var}_select"
410
        eval sgs="\$${var}_suggest"
411
        pushvar var sgs
412
        enable_deep $sel
413
        popvar sgs
414
        enable_deep_weak $sgs
415
        popvar var
416
    done
417
}
418

    
419
enable_deep(){
420
    do_enable_deep $*
421
    enable $*
422
}
423

    
424
enable_deep_weak(){
425
    do_enable_deep $*
426
    enable_weak $*
427
}
428

    
429
enabled(){
430
    test "${1#!}" = "$1" && op== || op=!=
431
    eval test "x\$${1#!}" $op "xyes"
432
}
433

    
434
disabled(){
435
    test "${1#!}" = "$1" && op== || op=!=
436
    eval test "x\$${1#!}" $op "xno"
437
}
438

    
439
enabled_all(){
440
    for opt; do
441
        enabled $opt || return 1
442
    done
443
}
444

    
445
disabled_all(){
446
    for opt; do
447
        disabled $opt || return 1
448
    done
449
}
450

    
451
enabled_any(){
452
    for opt; do
453
        enabled $opt && return 0
454
    done
455
}
456

    
457
disabled_any(){
458
    for opt; do
459
        disabled $opt && return 0
460
    done
461
    return 1
462
}
463

    
464
set_default(){
465
    for opt; do
466
        eval : \${$opt:=\$${opt}_default}
467
    done
468
}
469

    
470
is_in(){
471
    value=$1
472
    shift
473
    for var in $*; do
474
        [ $var = $value ] && return 0
475
    done
476
    return 1
477
}
478

    
479
check_deps(){
480
    for cfg; do
481
        cfg="${cfg#!}"
482
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
483
        disabled ${cfg}_checking && continue
484
        enable ${cfg}_checking
485

    
486
        eval dep_all="\$${cfg}_deps"
487
        eval dep_any="\$${cfg}_deps_any"
488
        eval dep_sel="\$${cfg}_select"
489
        eval dep_sgs="\$${cfg}_suggest"
490
        eval dep_ifa="\$${cfg}_if"
491
        eval dep_ifn="\$${cfg}_if_any"
492

    
493
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
494
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
495
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
496

    
497
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
498
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
499
        enabled_all  $dep_all || disable $cfg
500
        enabled_any  $dep_any || disable $cfg
501
        disabled_any $dep_sel && disable $cfg
502

    
503
        if enabled $cfg; then
504
            eval dep_extralibs="\$${cfg}_extralibs"
505
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
506
            enable_deep $dep_sel
507
            enable_deep_weak $dep_sgs
508
        fi
509

    
510
        disable ${cfg}_checking
511
    done
512
}
513

    
514
print_config_h(){
515
    enabled $1 && v=1 || v=0
516
    echo "#define $2 $v"
517
}
518

    
519
print_config_mak(){
520
    enabled $1 && v= || v=!
521
    echo "$v$2=yes"
522
}
523

    
524
print_config_asm(){
525
    enabled $1 && echo "%define $2"
526
}
527

    
528
print_config(){
529
    pfx=$1
530
    files=$2
531
    shift 2
532
    for cfg; do
533
        ucname="$(toupper $cfg)"
534
        for f in $files; do
535
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
536
        done
537
    done
538
}
539

    
540
print_enabled(){
541
    test "$1" = -n && end=" " && shift || end="\n"
542
    suf=$1
543
    shift
544
    for v; do
545
        enabled $v && printf "%s$end" ${v%$suf};
546
    done
547
}
548

    
549
append(){
550
    var=$1
551
    shift
552
    eval "$var=\"\$$var $*\""
553
}
554

    
555
prepend(){
556
    var=$1
557
    shift
558
    eval "$var=\"$* \$$var\""
559
}
560

    
561
add_cppflags(){
562
    append CPPFLAGS $($filter_cppflags "$@")
563
}
564

    
565
add_cflags(){
566
    append CFLAGS $($filter_cflags "$@")
567
}
568

    
569
add_asflags(){
570
    append ASFLAGS $($filter_asflags "$@")
571
}
572

    
573
add_ldflags(){
574
    append LDFLAGS "$@"
575
}
576

    
577
add_extralibs(){
578
    prepend extralibs "$@"
579
}
580

    
581
check_cmd(){
582
    log "$@"
583
    "$@" >> $logfile 2>&1
584
}
585

    
586
check_cc(){
587
    log check_cc "$@"
588
    cat > $TMPC
589
    log_file $TMPC
590
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
591
}
592

    
593
check_cpp(){
594
    log check_cpp "$@"
595
    cat > $TMPC
596
    log_file $TMPC
597
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
598
}
599

    
600
check_as(){
601
    log check_as "$@"
602
    cat > $TMPC
603
    log_file $TMPC
604
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
605
}
606

    
607
check_asm(){
608
    log check_asm "$@"
609
    name="$1"
610
    code="$2"
611
    shift 2
612
    disable $name
613
    check_as "$@" <<EOF && enable $name
614
void foo(void){ __asm__ volatile($code); }
615
EOF
616
}
617

    
618
check_yasm(){
619
    log check_yasm "$@"
620
    echo "$1" > $TMPS
621
    log_file $TMPS
622
    shift 1
623
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
624
}
625

    
626
check_ld(){
627
    log check_ld "$@"
628
    flags=''
629
    libs=''
630
    for f; do
631
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
632
    done
633
    check_cc $($filter_cflags $flags) || return
634
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
635
}
636

    
637
check_cppflags(){
638
    log check_cppflags "$@"
639
    set -- $($filter_cppflags "$@")
640
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
641
int x;
642
EOF
643
}
644

    
645
check_cflags(){
646
    log check_cflags "$@"
647
    set -- $($filter_cflags "$@")
648
    check_cc "$@" <<EOF && append CFLAGS "$@"
649
int x;
650
EOF
651
}
652

    
653
test_ldflags(){
654
    log test_ldflags "$@"
655
    check_ld "$@" <<EOF
656
int main(void){ return 0; }
657
EOF
658
}
659

    
660
check_ldflags(){
661
    log check_ldflags "$@"
662
    test_ldflags "$@" && add_ldflags "$@"
663
}
664

    
665
check_header(){
666
    log check_header "$@"
667
    header=$1
668
    shift
669
    disable_safe $header
670
    check_cpp "$@" <<EOF && enable_safe $header
671
#include <$header>
672
int x;
673
EOF
674
}
675

    
676
check_func(){
677
    log check_func "$@"
678
    func=$1
679
    shift
680
    disable $func
681
    check_ld "$@" <<EOF && enable $func
682
extern int $func();
683
int main(void){ $func(); }
684
EOF
685
}
686

    
687
check_mathfunc(){
688
    log check_mathfunc "$@"
689
    func=$1
690
    shift
691
    disable $func
692
    check_ld "$@" <<EOF && enable $func
693
#include <math.h>
694
float foo(float f) { return $func(f); }
695
int main(void){ return 0; }
696
EOF
697
}
698

    
699
check_func_headers(){
700
    log check_func_headers "$@"
701
    headers=$1
702
    func=$2
703
    shift 2
704
    disable $func
705
    incs=""
706
    for hdr in $headers; do
707
        incs="$incs
708
#include <$hdr>"
709
    done
710
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
711
$incs
712
int main(int argc, char **argv){
713
    return (long) $func;
714
}
715
EOF
716
}
717

    
718
check_cpp_condition(){
719
    log check_cpp_condition "$@"
720
    header=$1
721
    condition=$2
722
    shift 2
723
    check_cpp $($filter_cppflags "$@") <<EOF
724
#include <$header>
725
#if !($condition)
726
#error "unsatisfied condition: $condition"
727
#endif
728
EOF
729
}
730

    
731
check_lib(){
732
    log check_lib "$@"
733
    header="$1"
734
    func="$2"
735
    shift 2
736
    check_header $header && check_func $func "$@" && add_extralibs "$@"
737
}
738

    
739
check_lib2(){
740
    log check_lib2 "$@"
741
    headers="$1"
742
    func="$2"
743
    shift 2
744
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
745
}
746

    
747
check_exec(){
748
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
749
}
750

    
751
check_exec_crash(){
752
    code=$(cat)
753

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

    
760
    (check_exec "$@") >> $logfile 2>&1 <<EOF
761
#include <signal.h>
762
static void sighandler(int sig){
763
    raise(SIGTERM);
764
}
765
int main(void){
766
    signal(SIGILL, sighandler);
767
    signal(SIGFPE, sighandler);
768
    signal(SIGSEGV, sighandler);
769
#ifdef SIGBUS
770
    signal(SIGBUS, sighandler);
771
#endif
772
    { $code }
773
}
774
EOF
775
}
776

    
777
check_type(){
778
    log check_type "$@"
779
    headers=$1
780
    type=$2
781
    shift 2
782
    disable_safe "$type"
783
    incs=""
784
    for hdr in $headers; do
785
        incs="$incs
786
#include <$hdr>"
787
    done
788
    check_cc "$@" <<EOF && enable_safe "$type"
789
$incs
790
$type v;
791
EOF
792
}
793

    
794
check_struct(){
795
    log check_type "$@"
796
    headers=$1
797
    struct=$2
798
    member=$3
799
    shift 3
800
    disable_safe "${struct}_${member}"
801
    incs=""
802
    for hdr in $headers; do
803
        incs="$incs
804
#include <$hdr>"
805
    done
806
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
807
$incs
808
const void *p = &(($struct *)0)->$member;
809
EOF
810
}
811

    
812
require(){
813
    name="$1"
814
    header="$2"
815
    func="$3"
816
    shift 3
817
    check_lib $header $func "$@" || die "ERROR: $name not found"
818
}
819

    
820
require2(){
821
    name="$1"
822
    headers="$2"
823
    func="$3"
824
    shift 3
825
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
826
}
827

    
828
check_host_cc(){
829
    log check_host_cc "$@"
830
    cat > $TMPC
831
    log_file $TMPC
832
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
833
}
834

    
835
check_host_cflags(){
836
    log check_host_cflags "$@"
837
    check_host_cc "$@" <<EOF && append host_cflags "$@"
838
int x;
839
EOF
840
}
841

    
842
apply(){
843
    file=$1
844
    shift
845
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
846
}
847

    
848
cp_if_changed(){
849
    cmp -s "$1" "$2" &&
850
        echo "$2 is unchanged" ||
851
        cp -f "$1" "$2"
852
}
853

    
854
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
855
# system-dependent things.
856

    
857
COMPONENT_LIST="
858
    bsfs
859
    decoders
860
    demuxers
861
    encoders
862
    filters
863
    hwaccels
864
    indevs
865
    muxers
866
    outdevs
867
    parsers
868
    protocols
869
"
870

    
871
CONFIG_LIST="
872
    $COMPONENT_LIST
873
    aandct
874
    avcodec
875
    avdevice
876
    avfilter
877
    avformat
878
    avisynth
879
    bzlib
880
    dct
881
    doc
882
    dwt
883
    dxva2
884
    fastdiv
885
    ffmpeg
886
    ffplay
887
    ffprobe
888
    ffserver
889
    fft
890
    frei0r
891
    golomb
892
    gpl
893
    gray
894
    h264dsp
895
    h264pred
896
    hardcoded_tables
897
    huffman
898
    libdc1394
899
    libdirac
900
    libfaac
901
    libfreetype
902
    libgsm
903
    libmp3lame
904
    libnut
905
    libopencore_amrnb
906
    libopencore_amrwb
907
    libopencv
908
    libopenjpeg
909
    librtmp
910
    libschroedinger
911
    libspeex
912
    libtheora
913
    libvorbis
914
    libvpx
915
    libx264
916
    libxavs
917
    libxvid
918
    lpc
919
    lsp
920
    mdct
921
    memalign_hack
922
    mlib
923
    mpegaudio_hp
924
    network
925
    nonfree
926
    pic
927
    postproc
928
    rdft
929
    rtpdec
930
    runtime_cpudetect
931
    shared
932
    small
933
    sram
934
    static
935
    swscale
936
    swscale_alpha
937
    vaapi
938
    vdpau
939
    version3
940
    x11grab
941
    zlib
942
"
943

    
944
THREADS_LIST='
945
    pthreads
946
    w32threads
947
'
948

    
949
ARCH_LIST='
950
    alpha
951
    arm
952
    avr32
953
    avr32_ap
954
    avr32_uc
955
    bfin
956
    ia64
957
    m68k
958
    mips
959
    mips64
960
    parisc
961
    ppc
962
    ppc64
963
    s390
964
    sh4
965
    sparc
966
    sparc64
967
    tomi
968
    x86
969
    x86_32
970
    x86_64
971
'
972

    
973
ARCH_EXT_LIST='
974
    altivec
975
    amd3dnow
976
    amd3dnowext
977
    armv5te
978
    armv6
979
    armv6t2
980
    armvfp
981
    avx
982
    iwmmxt
983
    mmi
984
    mmx
985
    mmx2
986
    neon
987
    ppc4xx
988
    sse
989
    ssse3
990
    vis
991
'
992

    
993
HAVE_LIST_PUB='
994
    bigendian
995
    fast_unaligned
996
'
997

    
998
HAVE_LIST="
999
    $ARCH_EXT_LIST
1000
    $HAVE_LIST_PUB
1001
    $THREADS_LIST
1002
    aligned_stack
1003
    alsa_asoundlib_h
1004
    altivec_h
1005
    arpa_inet_h
1006
    attribute_may_alias
1007
    attribute_packed
1008
    bswap
1009
    closesocket
1010
    cmov
1011
    conio_h
1012
    dcbzl
1013
    dev_bktr_ioctl_bt848_h
1014
    dev_bktr_ioctl_meteor_h
1015
    dev_ic_bt8xx_h
1016
    dev_video_meteor_ioctl_meteor_h
1017
    dev_video_bktr_ioctl_bt848_h
1018
    dlfcn_h
1019
    dlopen
1020
    dos_paths
1021
    ebp_available
1022
    ebx_available
1023
    exp2
1024
    exp2f
1025
    fast_64bit
1026
    fast_clz
1027
    fast_cmov
1028
    fcntl
1029
    fork
1030
    getaddrinfo
1031
    gethrtime
1032
    GetProcessMemoryInfo
1033
    GetProcessTimes
1034
    getrusage
1035
    gnu_as
1036
    struct_rusage_ru_maxrss
1037
    ibm_asm
1038
    inet_aton
1039
    inline_asm
1040
    isatty
1041
    ldbrx
1042
    libdc1394_1
1043
    libdc1394_2
1044
    llrint
1045
    llrintf
1046
    local_aligned_16
1047
    local_aligned_8
1048
    localtime_r
1049
    log2
1050
    log2f
1051
    loongson
1052
    lrint
1053
    lrintf
1054
    lzo1x_999_compress
1055
    machine_ioctl_bt848_h
1056
    machine_ioctl_meteor_h
1057
    malloc_h
1058
    MapViewOfFile
1059
    memalign
1060
    mkstemp
1061
    mmap
1062
    pld
1063
    posix_memalign
1064
    round
1065
    roundf
1066
    sdl
1067
    sdl_video_size
1068
    setmode
1069
    socklen_t
1070
    soundcard_h
1071
    poll_h
1072
    setrlimit
1073
    strerror_r
1074
    strtok_r
1075
    struct_addrinfo
1076
    struct_ipv6_mreq
1077
    struct_sockaddr_in6
1078
    struct_sockaddr_sa_len
1079
    struct_sockaddr_storage
1080
    symver
1081
    symver_gnu_asm
1082
    symver_asm_label
1083
    sys_mman_h
1084
    sys_resource_h
1085
    sys_select_h
1086
    sys_soundcard_h
1087
    sys_videoio_h
1088
    ten_operands
1089
    termios_h
1090
    threads
1091
    truncf
1092
    vfp_args
1093
    VirtualAlloc
1094
    winsock2_h
1095
    xform_asm
1096
    xmm_clobbers
1097
    yasm
1098
"
1099

    
1100
# options emitted with CONFIG_ prefix but not available on command line
1101
CONFIG_EXTRA="
1102
    avutil
1103
    gplv3
1104
    lgplv3
1105
"
1106

    
1107
CMDLINE_SELECT="
1108
    $ARCH_EXT_LIST
1109
    $CONFIG_LIST
1110
    $THREADS_LIST
1111
    asm
1112
    cross_compile
1113
    debug
1114
    extra_warnings
1115
    logging
1116
    optimizations
1117
    stripping
1118
    symver
1119
    yasm
1120
"
1121

    
1122
PATHS_LIST='
1123
    bindir
1124
    datadir
1125
    incdir
1126
    libdir
1127
    mandir
1128
    prefix
1129
    shlibdir
1130
'
1131

    
1132
CMDLINE_SET="
1133
    $PATHS_LIST
1134
    ar
1135
    arch
1136
    as
1137
    build_suffix
1138
    cc
1139
    cpu
1140
    cross_prefix
1141
    dep_cc
1142
    extra_version
1143
    host_cc
1144
    host_cflags
1145
    host_ldflags
1146
    host_libs
1147
    host_os
1148
    ld
1149
    logfile
1150
    malloc_prefix
1151
    nm
1152
    samples
1153
    source_path
1154
    strip
1155
    sysinclude
1156
    sysroot
1157
    target_exec
1158
    target_os
1159
    target_path
1160
"
1161

    
1162
CMDLINE_APPEND="
1163
    extra_cflags
1164
"
1165

    
1166
# code dependency declarations
1167

    
1168
# architecture extensions
1169

    
1170
armv5te_deps="arm"
1171
armv6_deps="arm"
1172
armv6t2_deps="arm"
1173
armvfp_deps="arm"
1174
iwmmxt_deps="arm"
1175
neon_deps="arm"
1176

    
1177
mmi_deps="mips"
1178

    
1179
altivec_deps="ppc"
1180
ppc4xx_deps="ppc"
1181

    
1182
vis_deps="sparc"
1183

    
1184
x86_64_suggest="cmov fast_cmov"
1185
amd3dnow_deps="mmx"
1186
amd3dnowext_deps="amd3dnow"
1187
mmx_deps="x86"
1188
mmx2_deps="mmx"
1189
sse_deps="mmx"
1190
ssse3_deps="sse"
1191
avx_deps="ssse3"
1192

    
1193
aligned_stack_if_any="ppc x86"
1194
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1195
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1196
fast_unaligned_if_any="armv6 ppc x86"
1197

    
1198
need_memalign="altivec neon sse"
1199
inline_asm_deps="!tms470"
1200

    
1201
symver_if_any="symver_asm_label symver_gnu_asm"
1202

    
1203
# subsystems
1204
dct_select="rdft"
1205
mdct_select="fft"
1206
rdft_select="fft"
1207

    
1208
# decoders / encoders / hardware accelerators
1209
aac_decoder_select="mdct rdft"
1210
aac_encoder_select="mdct"
1211
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1212
ac3_decoder_select="mdct ac3_parser"
1213
ac3_encoder_select="mdct"
1214
alac_encoder_select="lpc"
1215
amrnb_decoder_select="lsp"
1216
amrwb_decoder_select="lsp"
1217
atrac1_decoder_select="mdct"
1218
atrac3_decoder_select="mdct"
1219
binkaudio_dct_decoder_select="mdct rdft dct"
1220
binkaudio_rdft_decoder_select="mdct rdft"
1221
cavs_decoder_select="golomb"
1222
cook_decoder_select="mdct"
1223
cscd_decoder_suggest="zlib"
1224
dca_decoder_select="mdct"
1225
dnxhd_encoder_select="aandct"
1226
dxa_decoder_select="zlib"
1227
eac3_decoder_select="ac3_decoder"
1228
eamad_decoder_select="aandct"
1229
eatgq_decoder_select="aandct"
1230
eatqi_decoder_select="aandct"
1231
ffv1_decoder_select="golomb"
1232
flac_decoder_select="golomb"
1233
flac_encoder_select="golomb lpc"
1234
flashsv_decoder_select="zlib"
1235
flashsv_encoder_select="zlib"
1236
flv_decoder_select="h263_decoder"
1237
flv_encoder_select="h263_encoder"
1238
fraps_decoder_select="huffman"
1239
h261_encoder_select="aandct"
1240
h263_decoder_select="h263_parser"
1241
h263_encoder_select="aandct"
1242
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1243
h263i_decoder_select="h263_decoder"
1244
h263p_encoder_select="h263_encoder"
1245
h264_decoder_select="golomb h264dsp h264pred"
1246
h264_dxva2_hwaccel_deps="dxva2api_h"
1247
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1248
h264_vaapi_hwaccel_select="vaapi"
1249
h264_vdpau_decoder_select="vdpau h264_decoder"
1250
imc_decoder_select="fft mdct"
1251
jpegls_decoder_select="golomb"
1252
jpegls_encoder_select="golomb"
1253
ljpeg_encoder_select="aandct"
1254
loco_decoder_select="golomb"
1255
mjpeg_encoder_select="aandct"
1256
mlp_decoder_select="mlp_parser"
1257
mp1float_decoder_select="dct"
1258
mp2float_decoder_select="dct"
1259
mp3adufloat_decoder_select="dct"
1260
mp3float_decoder_select="dct"
1261
mp3on4float_decoder_select="dct"
1262
mpeg1video_encoder_select="aandct"
1263
mpeg2video_encoder_select="aandct"
1264
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1265
mpeg4_encoder_select="h263_encoder"
1266
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1267
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1268
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1269
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1270
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1271
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1272
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1273
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1274
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1275
msmpeg4v1_decoder_select="h263_decoder"
1276
msmpeg4v1_encoder_select="h263_encoder"
1277
msmpeg4v2_decoder_select="h263_decoder"
1278
msmpeg4v2_encoder_select="h263_encoder"
1279
msmpeg4v3_decoder_select="h263_decoder"
1280
msmpeg4v3_encoder_select="h263_encoder"
1281
nellymoser_decoder_select="mdct"
1282
nellymoser_encoder_select="mdct"
1283
png_decoder_select="zlib"
1284
png_encoder_select="zlib"
1285
qcelp_decoder_select="lsp"
1286
qdm2_decoder_select="mdct rdft"
1287
ra_144_encoder_select="lpc"
1288
rv10_decoder_select="h263_decoder"
1289
rv10_encoder_select="h263_encoder"
1290
rv20_decoder_select="h263_decoder"
1291
rv20_encoder_select="h263_encoder"
1292
rv30_decoder_select="golomb h264pred"
1293
rv40_decoder_select="golomb h264pred"
1294
shorten_decoder_select="golomb"
1295
sipr_decoder_select="lsp"
1296
snow_decoder_select="dwt"
1297
snow_encoder_select="aandct dwt"
1298
sonic_decoder_select="golomb"
1299
sonic_encoder_select="golomb"
1300
sonic_ls_encoder_select="golomb"
1301
svq1_encoder_select="aandct"
1302
svq3_decoder_select="golomb h264dsp h264pred"
1303
svq3_decoder_suggest="zlib"
1304
theora_decoder_select="vp3_decoder"
1305
tiff_decoder_suggest="zlib"
1306
tiff_encoder_suggest="zlib"
1307
truehd_decoder_select="mlp_decoder"
1308
tscc_decoder_select="zlib"
1309
twinvq_decoder_select="mdct lsp"
1310
vc1_decoder_select="h263_decoder"
1311
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1312
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1313
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1314
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1315
vorbis_decoder_select="mdct"
1316
vorbis_encoder_select="mdct"
1317
vp6_decoder_select="huffman"
1318
vp6a_decoder_select="vp6_decoder"
1319
vp6f_decoder_select="vp6_decoder"
1320
vp8_decoder_select="h264pred"
1321
wmapro_decoder_select="mdct"
1322
wmav1_decoder_select="mdct"
1323
wmav1_encoder_select="mdct"
1324
wmav2_decoder_select="mdct"
1325
wmav2_encoder_select="mdct"
1326
wmavoice_decoder_select="lsp rdft dct mdct"
1327
wmv1_decoder_select="h263_decoder"
1328
wmv1_encoder_select="h263_encoder"
1329
wmv2_decoder_select="h263_decoder"
1330
wmv2_encoder_select="h263_encoder"
1331
wmv3_decoder_select="vc1_decoder"
1332
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1333
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1334
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1335
zlib_decoder_select="zlib"
1336
zlib_encoder_select="zlib"
1337
zmbv_decoder_select="zlib"
1338
zmbv_encoder_select="zlib"
1339

    
1340
vaapi_deps="va_va_h"
1341
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1342

    
1343
# parsers
1344
h264_parser_select="golomb h264dsp h264pred"
1345

    
1346
# external libraries
1347
libdirac_decoder_deps="libdirac !libschroedinger"
1348
libdirac_encoder_deps="libdirac"
1349
libfaac_encoder_deps="libfaac"
1350
libgsm_decoder_deps="libgsm"
1351
libgsm_encoder_deps="libgsm"
1352
libgsm_ms_decoder_deps="libgsm"
1353
libgsm_ms_encoder_deps="libgsm"
1354
libmp3lame_encoder_deps="libmp3lame"
1355
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1356
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1357
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1358
libopenjpeg_decoder_deps="libopenjpeg"
1359
libschroedinger_decoder_deps="libschroedinger"
1360
libschroedinger_encoder_deps="libschroedinger"
1361
libspeex_decoder_deps="libspeex"
1362
libtheora_encoder_deps="libtheora"
1363
libvorbis_encoder_deps="libvorbis"
1364
libvpx_decoder_deps="libvpx"
1365
libvpx_encoder_deps="libvpx"
1366
libx264_encoder_deps="libx264"
1367
libxavs_encoder_deps="libxavs"
1368
libxvid_encoder_deps="libxvid"
1369

    
1370
# demuxers / muxers
1371
ac3_demuxer_select="ac3_parser"
1372
asf_stream_muxer_select="asf_muxer"
1373
avisynth_demuxer_deps="avisynth"
1374
dirac_demuxer_select="dirac_parser"
1375
eac3_demuxer_select="ac3_parser"
1376
flac_demuxer_select="flac_parser"
1377
ipod_muxer_select="mov_muxer"
1378
libnut_demuxer_deps="libnut"
1379
libnut_muxer_deps="libnut"
1380
matroska_audio_muxer_select="matroska_muxer"
1381
matroska_demuxer_suggest="zlib bzlib"
1382
mov_demuxer_suggest="zlib"
1383
mp3_demuxer_select="mpegaudio_parser"
1384
mp4_muxer_select="mov_muxer"
1385
mpegtsraw_demuxer_select="mpegts_demuxer"
1386
mxf_d10_muxer_select="mxf_muxer"
1387
ogg_demuxer_select="golomb"
1388
psp_muxer_select="mov_muxer"
1389
rtp_demuxer_select="sdp_demuxer"
1390
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1391
rtsp_demuxer_select="http_protocol rtpdec"
1392
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1393
sap_demuxer_select="sdp_demuxer"
1394
sap_muxer_select="rtp_muxer rtp_protocol"
1395
sdp_demuxer_select="rtpdec"
1396
spdif_muxer_select="aac_parser"
1397
tg2_muxer_select="mov_muxer"
1398
tgp_muxer_select="mov_muxer"
1399
w64_demuxer_deps="wav_demuxer"
1400

    
1401
# indevs / outdevs
1402
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1403
alsa_outdev_deps="alsa_asoundlib_h"
1404
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1405
dv1394_indev_deps="dv1394 dv_demuxer"
1406
jack_indev_deps="jack_jack_h"
1407
libdc1394_indev_deps="libdc1394"
1408
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1409
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1410
v4l_indev_deps="linux_videodev_h"
1411
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1412
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1413
vfwcap_indev_extralibs="-lavicap32"
1414
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1415
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1416

    
1417
# protocols
1418
gopher_protocol_deps="network"
1419
http_protocol_deps="network"
1420
http_protocol_select="tcp_protocol"
1421
mmsh_protocol_select="http_protocol"
1422
mmst_protocol_deps="network"
1423
rtmp_protocol_select="tcp_protocol"
1424
rtp_protocol_select="udp_protocol"
1425
tcp_protocol_deps="network"
1426
udp_protocol_deps="network"
1427

    
1428
# filters
1429
blackframe_filter_deps="gpl"
1430
cropdetect_filter_deps="gpl"
1431
drawtext_filter_deps="libfreetype"
1432
frei0r_filter_deps="frei0r dlopen strtok_r"
1433
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1434
hqdn3d_filter_deps="gpl"
1435
mp_filter_deps="gpl"
1436
scale_filter_deps="swscale"
1437
ocv_filter_deps="libopencv"
1438
yadif_filter_deps="gpl"
1439

    
1440
# libraries
1441
avdevice_deps="avcodec avformat"
1442
avformat_deps="avcodec"
1443

    
1444
# programs
1445
ffmpeg_deps="avcodec avformat swscale"
1446
ffmpeg_select="buffer_filter"
1447
ffplay_deps="avcodec avformat swscale sdl"
1448
ffplay_select="rdft"
1449
ffprobe_deps="avcodec avformat"
1450
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1451
ffserver_extralibs='$ldl'
1452

    
1453
doc_deps="texi2html"
1454

    
1455
# tests
1456

    
1457
test_deps(){
1458
    suf1=$1
1459
    suf2=$2
1460
    shift 2
1461
    for v; do
1462
        dep=${v%=*}
1463
        tests=${v#*=}
1464
        for name in ${tests}; do
1465
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1466
        done
1467
    done
1468
}
1469

    
1470
set_ne_test_deps(){
1471
    eval ${1}_be_test_deps="bigendian"
1472
    eval ${1}_le_test_deps="!bigendian"
1473
}
1474

    
1475
test_deps _encoder _decoder                                             \
1476
    adpcm_g726=g726                                                     \
1477
    adpcm_ima_qt                                                        \
1478
    adpcm_ima_wav                                                       \
1479
    adpcm_ms                                                            \
1480
    adpcm_swf                                                           \
1481
    adpcm_yamaha=adpcm_yam                                              \
1482
    alac                                                                \
1483
    asv1                                                                \
1484
    asv2                                                                \
1485
    bmp                                                                 \
1486
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1487
    dvvideo="dv dv50"                                                   \
1488
    ffv1                                                                \
1489
    flac                                                                \
1490
    flashsv                                                             \
1491
    flv                                                                 \
1492
    gif                                                                 \
1493
    h261                                                                \
1494
    h263="h263 h263p"                                                   \
1495
    huffyuv                                                             \
1496
    jpegls                                                              \
1497
    mjpeg="jpg mjpeg ljpeg"                                             \
1498
    mp2                                                                 \
1499
    mpeg1video="mpeg mpeg1b"                                            \
1500
    mpeg2video="mpeg2 mpeg2thread"                                      \
1501
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1502
    msmpeg4v3=msmpeg4                                                   \
1503
    msmpeg4v2                                                           \
1504
    pbm=pbmpipe                                                         \
1505
    pcx                                                                 \
1506
    pgm="pgm pgmpipe"                                                   \
1507
    png                                                                 \
1508
    ppm="ppm ppmpipe"                                                   \
1509
    rawvideo="rgb yuv"                                                  \
1510
    roq                                                                 \
1511
    rv10                                                                \
1512
    rv20                                                                \
1513
    sgi                                                                 \
1514
    snow="snow snowll"                                                  \
1515
    svq1                                                                \
1516
    targa=tga                                                           \
1517
    tiff                                                                \
1518
    wmav1                                                               \
1519
    wmav2                                                               \
1520
    wmv1                                                                \
1521
    wmv2                                                                \
1522

    
1523
test_deps _muxer _demuxer                                               \
1524
    aiff                                                                \
1525
    pcm_alaw=alaw                                                       \
1526
    asf                                                                 \
1527
    au                                                                  \
1528
    avi                                                                 \
1529
    dv=dv_fmt                                                           \
1530
    ffm                                                                 \
1531
    flv=flv_fmt                                                         \
1532
    gxf                                                                 \
1533
    matroska=mkv                                                        \
1534
    mmf                                                                 \
1535
    mov                                                                 \
1536
    pcm_mulaw=mulaw                                                     \
1537
    mxf                                                                 \
1538
    nut                                                                 \
1539
    ogg                                                                 \
1540
    rawvideo=pixfmt                                                     \
1541
    rm                                                                  \
1542
    swf                                                                 \
1543
    mpegts=ts                                                           \
1544
    voc                                                                 \
1545
    wav                                                                 \
1546
    yuv4mpegpipe=yuv4mpeg                                               \
1547

    
1548
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1549
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1550

    
1551
set_ne_test_deps pixdesc
1552
set_ne_test_deps pixfmts_copy
1553
set_ne_test_deps pixfmts_crop
1554
set_ne_test_deps pixfmts_hflip
1555
set_ne_test_deps pixfmts_null
1556
set_ne_test_deps pixfmts_pad
1557
set_ne_test_deps pixfmts_scale
1558
set_ne_test_deps pixfmts_vflip
1559

    
1560
# default parameters
1561

    
1562
logfile="config.log"
1563

    
1564
# installation paths
1565
prefix_default="/usr/local"
1566
bindir_default='${prefix}/bin'
1567
datadir_default='${prefix}/share/ffmpeg'
1568
incdir_default='${prefix}/include'
1569
libdir_default='${prefix}/lib'
1570
mandir_default='${prefix}/share/man'
1571
shlibdir_default="$libdir_default"
1572

    
1573
# toolchain
1574
ar_default="ar"
1575
cc_default="gcc"
1576
cc_version=\"unknown\"
1577
host_cc_default="gcc"
1578
ln_s="ln -sf"
1579
nm_default="nm"
1580
objformat="elf"
1581
ranlib="ranlib"
1582
strip_default="strip"
1583
yasmexe="yasm"
1584
nogas=":"
1585

    
1586
nm_opts='-g'
1587

    
1588
# machine
1589
arch_default=$(uname -m)
1590
cpu="generic"
1591

    
1592
# OS
1593
target_os_default=$(tolower $(uname -s))
1594
host_os=$target_os_default
1595

    
1596
# configurable options
1597
enable avcodec
1598
enable avdevice
1599
enable avfilter
1600
enable avformat
1601
enable avutil
1602
enable asm
1603
enable debug
1604
enable doc
1605
enable fastdiv
1606
enable ffmpeg
1607
enable ffplay
1608
enable ffprobe
1609
enable ffserver
1610
enable mpegaudio_hp
1611
enable network
1612
enable optimizations
1613
enable protocols
1614
enable static
1615
enable stripping
1616
enable swscale
1617
enable swscale_alpha
1618

    
1619
# build settings
1620
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1621
FFSERVERLDFLAGS=-Wl,-E
1622
LIBPREF="lib"
1623
LIBSUF=".a"
1624
FULLNAME='$(NAME)$(BUILDSUF)'
1625
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1626
SLIBPREF="lib"
1627
SLIBSUF=".so"
1628
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1629
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1630
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1631
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1632

    
1633
CC_O='-o $@'
1634

    
1635
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1636
host_libs='-lm'
1637

    
1638
target_path='$(CURDIR)'
1639

    
1640
# since the object filename is not given with the -MM flag, the compiler
1641
# is only able to print the basename, and we must add the path ourselves
1642
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1643
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1644

    
1645
# find source path
1646
source_path="$(dirname "$0")"
1647
enable source_path_used
1648
if test -f configure; then
1649
    source_path="$(pwd)"
1650
    disable source_path_used
1651
else
1652
    source_path="$(cd "$source_path"; pwd)"
1653
    echo "$source_path" | grep -q '[[:blank:]]' &&
1654
        die "Out of tree builds are impossible with whitespace in source path."
1655
    test -e "$source_path/config.h" &&
1656
        die "Out of tree builds are impossible with config.h in source dir."
1657
fi
1658

    
1659
for v in "$@"; do
1660
    r=${v#*=}
1661
    l=${v%"$r"}
1662
    r=$(sh_quote "$r")
1663
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1664
done
1665

    
1666
find_things(){
1667
    thing=$1
1668
    pattern=$2
1669
    file=$source_path/$3
1670
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1671
}
1672

    
1673
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1674
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1675
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1676
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1677
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1678
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1679
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1680
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1681
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1682
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1683
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1684

    
1685
find_tests(){
1686
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1687
}
1688

    
1689
ACODEC_TESTS=$(find_tests acodec)
1690
VCODEC_TESTS=$(find_tests vsynth1)
1691
LAVF_TESTS=$(find_tests lavf)
1692
LAVFI_TESTS=$(find_tests lavfi)
1693
SEEK_TESTS=$(find_tests seek seek_)
1694

    
1695
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1696

    
1697
for n in $COMPONENT_LIST; do
1698
    v=$(toupper ${n%s})_LIST
1699
    eval enable \$$v
1700
    eval ${n}_if_any="\$$v"
1701
done
1702

    
1703
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1704

    
1705
die_unknown(){
1706
    echo "Unknown option \"$1\"."
1707
    echo "See $0 --help for available options."
1708
    exit 1
1709
}
1710

    
1711
show_list() {
1712
    suffix=_$1
1713
    shift
1714
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1715
    exit 0
1716
}
1717

    
1718
for opt do
1719
    optval="${opt#*=}"
1720
    case "$opt" in
1721
    --extra-ldflags=*) add_ldflags $optval
1722
    ;;
1723
    --extra-libs=*) add_extralibs $optval
1724
    ;;
1725
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1726
    ;;
1727
    --enable-debug=*) debuglevel="$optval"
1728
    ;;
1729
    --disable-everything)
1730
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1731
    ;;
1732
    --enable-*=*|--disable-*=*)
1733
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1734
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1735
    eval list=\$$(toupper $thing)_LIST
1736
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1737
    $action $(filter "$name" $list)
1738
    ;;
1739
    --enable-?*|--disable-?*)
1740
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1741
    if is_in $option $COMPONENT_LIST; then
1742
        test $action = disable && action=unset
1743
        eval $action \$$(toupper ${option%s})_LIST
1744
    elif is_in $option $CMDLINE_SELECT; then
1745
        $action $option
1746
    else
1747
        die_unknown $opt
1748
    fi
1749
    ;;
1750
    --list-*)
1751
        NAME="${opt#--list-}"
1752
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1753
        NAME=${NAME%s}
1754
        eval show_list $NAME \$$(toupper $NAME)_LIST
1755
    ;;
1756
    --help|-h) show_help
1757
    ;;
1758
    *)
1759
    optname="${opt%%=*}"
1760
    optname="${optname#--}"
1761
    optname=$(echo "$optname" | sed 's/-/_/g')
1762
    if is_in $optname $CMDLINE_SET; then
1763
        eval $optname='$optval'
1764
    elif is_in $optname $CMDLINE_APPEND; then
1765
        append $optname "$optval"
1766
    else
1767
         die_unknown $opt
1768
    fi
1769
    ;;
1770
    esac
1771
done
1772

    
1773
disabled logging && logfile=/dev/null
1774

    
1775
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1776
set >> $logfile
1777

    
1778
test -n "$cross_prefix" && enable cross_compile
1779

    
1780
if enabled cross_compile; then
1781
    test -n "$arch" && test -n "$target_os" ||
1782
        die "Must specify target arch and OS when cross-compiling"
1783
fi
1784

    
1785
set_default arch target_os
1786

    
1787
ar_default="${cross_prefix}${ar_default}"
1788
cc_default="${cross_prefix}${cc_default}"
1789
nm_default="${cross_prefix}${nm_default}"
1790
ranlib="${cross_prefix}${ranlib}"
1791
strip_default="${cross_prefix}${strip_default}"
1792

    
1793
sysinclude_default="${sysroot}/usr/include"
1794

    
1795
set_default cc nm strip sysinclude
1796
enabled cross_compile || host_cc_default=$cc
1797
set_default host_cc
1798

    
1799
exesuf() {
1800
    case $1 in
1801
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1802
    esac
1803
}
1804

    
1805
EXESUF=$(exesuf $target_os)
1806
HOSTEXESUF=$(exesuf $host_os)
1807

    
1808
# set temporary file name
1809
: ${TMPDIR:=$TEMPDIR}
1810
: ${TMPDIR:=$TMP}
1811
: ${TMPDIR:=/tmp}
1812

    
1813
if ! check_cmd mktemp -u XXXXXX; then
1814
    # simple replacement for missing mktemp
1815
    # NOT SAFE FOR GENERAL USE
1816
    mktemp(){
1817
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1818
    }
1819
fi
1820

    
1821
tmpfile(){
1822
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1823
        (set -C; exec > $tmp) 2>/dev/null ||
1824
        die "Unable to create temporary file in $TMPDIR."
1825
    append TMPFILES $tmp
1826
    eval $1=$tmp
1827
}
1828

    
1829
trap 'rm -f -- $TMPFILES' EXIT
1830

    
1831
tmpfile TMPC  .c
1832
tmpfile TMPE  $EXESUF
1833
tmpfile TMPH  .h
1834
tmpfile TMPO  .o
1835
tmpfile TMPS  .S
1836
tmpfile TMPV  .ver
1837
tmpfile TMPSH .sh
1838
tmpfile TMPASM .asm
1839

    
1840
unset -f mktemp
1841

    
1842
chmod +x $TMPE
1843

    
1844
# make sure we can execute files in $TMPDIR
1845
cat > $TMPSH 2>> $logfile <<EOF
1846
#! /bin/sh
1847
EOF
1848
chmod +x $TMPSH >> $logfile 2>&1
1849
if ! $TMPSH >> $logfile 2>&1; then
1850
    cat <<EOF
1851
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1852
variable to another directory and make sure that it is not mounted noexec.
1853
EOF
1854
    die "Sanity test failed."
1855
fi
1856

    
1857
filter_cflags=echo
1858
filter_cppflags=echo
1859
filter_asflags=echo
1860

    
1861
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1862
    cc_type=llvm_gcc
1863
    cc_version=__VERSION__
1864
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1865
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1866
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1867
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1868
    speed_cflags='-O3'
1869
    size_cflags='-Os'
1870
elif $cc -v 2>&1 | grep -qi ^gcc; then
1871
    cc_type=gcc
1872
    cc_version=__VERSION__
1873
    gcc_version=$($cc --version | head -n1)
1874
    gcc_basever=$($cc -dumpversion)
1875
    gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
1876
    gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1877
    cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
1878
    if ! $cc -dumpversion | grep -q '^2\.'; then
1879
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1880
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1881
    fi
1882
    speed_cflags='-O3'
1883
    size_cflags='-Os'
1884
elif $cc --version 2>/dev/null | grep -q Intel; then
1885
    cc_type=icc
1886
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1887
    cc_ident=$($cc --version | head -n1)
1888
    icc_version=$($cc -dumpversion)
1889
    CC_DEPFLAGS='-MMD'
1890
    AS_DEPFLAGS='-MMD'
1891
    speed_cflags='-O3'
1892
    size_cflags='-Os'
1893
    noopt_cflags='-O1'
1894
elif $cc -v 2>&1 | grep -q xlc; then
1895
    cc_type=xlc
1896
    cc_version="AV_STRINGIFY(__IBMC__)"
1897
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1898
    speed_cflags='-O5'
1899
    size_cflags='-O5 -qcompact'
1900
elif $cc -V 2>/dev/null | grep -q Compaq; then
1901
    cc_type=ccc
1902
    cc_version="AV_STRINGIFY(__DECC_VER)"
1903
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1904
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1905
    debuglevel=3
1906
    add_ldflags -Wl,-z,now # calls to libots crash without this
1907
    speed_cflags='-fast'
1908
    size_cflags='-O1'
1909
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1910
    test -d "$sysroot" || die "No valid sysroot specified."
1911
    cc_type=armcc
1912
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1913
    cc_ident=$($cc --vsn | head -n1)
1914
    armcc_conf="$PWD/armcc.conf"
1915
    $cc --arm_linux_configure                 \
1916
        --arm_linux_config_file="$armcc_conf" \
1917
        --configure_sysroot="$sysroot"        \
1918
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1919
        die "Error creating armcc configuration file."
1920
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1921
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1922
    as_default="${cross_prefix}gcc"
1923
    CC_DEPFLAGS='-MMD'
1924
    AS_DEPFLAGS='-MMD'
1925
    speed_cflags='-O3'
1926
    size_cflags='-Os'
1927
    filter_asflags="filter_out -W${armcc_opt}*"
1928
elif $cc -version 2>/dev/null | grep -q TMS470; then
1929
    cc_type=tms470
1930
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1931
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1932
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1933
    CC_O='-fr=$(@D)'
1934
    as_default="${cross_prefix}gcc"
1935
    ld_default="${cross_prefix}gcc"
1936
    TMPO=$(basename $TMPC .c).o
1937
    append TMPFILES $TMPO
1938
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1939
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1940
    AS_DEPFLAGS='-MMD'
1941
    speed_cflags='-O3 -mf=5'
1942
    size_cflags='-O3 -mf=2'
1943
    filter_cflags=tms470_flags
1944
    tms470_flags(){
1945
        for flag; do
1946
            case $flag in
1947
                -march=*|-mcpu=*)
1948
                    case "${flag#*=}" in
1949
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1950
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1951
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1952
                        armv6*|arm11*)          echo -mv=6   ;;
1953
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1954
                                                echo -mv=5e  ;;
1955
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1956
                    esac
1957
                    ;;
1958
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1959
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1960
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1961
                -msoft-float)   echo --float_support=vfplib       ;;
1962
                -O[0-3]|-mf=*)  echo $flag                        ;;
1963
                -g)             echo -g -mn                       ;;
1964
                -pds=*)         echo $flag                        ;;
1965
            esac
1966
        done
1967
    }
1968
elif $cc -v 2>&1 | grep -q clang; then
1969
    cc_type=clang
1970
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
1971
        cc_version=__clang_version__ || cc_version=__VERSION__
1972
    cc_ident=$($cc --version | head -n1)
1973
    CC_DEPFLAGS='-MMD'
1974
    AS_DEPFLAGS='-MMD'
1975
    speed_cflags='-O3'
1976
    size_cflags='-Os'
1977
elif $cc -V 2>&1 | grep -q Sun; then
1978
    cc_type=suncc
1979
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1980
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1981
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1982
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1983
    speed_cflags='-O5'
1984
    size_cflags='-O5 -xspace'
1985
    filter_cflags=suncc_flags
1986
    suncc_flags(){
1987
        for flag; do
1988
            case $flag in
1989
                -march=*|-mcpu=*)
1990
                    case "${flag#*=}" in
1991
                        native)                   echo -xtarget=native       ;;
1992
                        v9|niagara)               echo -xarch=sparc          ;;
1993
                        ultrasparc)               echo -xarch=sparcvis       ;;
1994
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1995
                        i586|pentium)             echo -xchip=pentium        ;;
1996
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1997
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1998
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1999
                        pentium4*)          echo -xtarget=pentium4           ;;
2000
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2001
                        *-sse3)             echo -xarch=sse3                 ;;
2002
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
2003
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2004
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2005
                        k8|opteron|athlon64|athlon-fx)
2006
                                                  echo -xarch=sse2a          ;;
2007
                        athlon*)                  echo -xarch=pentium_proa   ;;
2008
                    esac
2009
                    ;;
2010
                -std=c99)             echo -xc99              ;;
2011
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
2012
                -fPIC)                echo -KPIC -xcode=pic32 ;;
2013
                -W*,*)                echo $flag              ;;
2014
                -f*-*|-W*)                                    ;;
2015
                *)                    echo $flag              ;;
2016
            esac
2017
        done
2018
    }
2019
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2020
    cc_type=pathscale
2021
    cc_version=__PATHSCALE__
2022
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2023
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2024
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2025
    speed_cflags='-O2'
2026
    size_cflags='-Os'
2027
elif $cc -v 2>&1 | grep -q Open64; then
2028
    cc_type=open64
2029
    cc_version=__OPEN64__
2030
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2031
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2032
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2033
    speed_cflags='-O2'
2034
    size_cflags='-Os'
2035
fi
2036

    
2037
test -n "$cc_type" && enable $cc_type ||
2038
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2039

    
2040
: ${as_default:=$cc}
2041
: ${dep_cc_default:=$cc}
2042
: ${ld_default:=$cc}
2043
set_default ar as dep_cc ld
2044

    
2045
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2046
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2047

    
2048
add_cflags $extra_cflags
2049
add_asflags $extra_cflags
2050

    
2051
if test -n "$sysroot"; then
2052
    case "$cc_type" in
2053
        gcc|llvm_gcc)
2054
            add_cppflags --sysroot="$sysroot"
2055
            add_ldflags --sysroot="$sysroot"
2056
        ;;
2057
        tms470)
2058
            add_cppflags -I"$sysinclude"
2059
            add_ldflags  --sysroot="$sysroot"
2060
        ;;
2061
        clang)
2062
            add_cppflags -isysroot "$sysroot"
2063
            add_ldflags -isysroot "$sysroot"
2064
        ;;
2065
    esac
2066
fi
2067

    
2068
if test "$cpu" = host; then
2069
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2070

    
2071
    case "$cc_type" in
2072
        gcc|llvm_gcc)
2073
            check_native(){
2074
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2075
                sed -n "/$1=/{
2076
                            s/.*$1=\\([^ ]*\\).*/\\1/
2077
                            p
2078
                            q
2079
                        }" $TMPE
2080
            }
2081
            cpu=$(check_native -march || check_native -mcpu)
2082
        ;;
2083
    esac
2084

    
2085
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2086
fi
2087

    
2088
# Deal with common $arch aliases
2089
case "$arch" in
2090
    arm*)
2091
        arch="arm"
2092
    ;;
2093
    mips|mipsel|IP*)
2094
        arch="mips"
2095
    ;;
2096
    mips64*)
2097
        arch="mips"
2098
        subarch="mips64"
2099
    ;;
2100
    parisc|hppa)
2101
        arch="parisc"
2102
    ;;
2103
    parisc64|hppa64)
2104
        arch="parisc"
2105
        subarch="parisc64"
2106
    ;;
2107
    "Power Macintosh"|ppc|powerpc)
2108
        arch="ppc"
2109
    ;;
2110
    ppc64|powerpc64)
2111
        arch="ppc"
2112
        subarch="ppc64"
2113
    ;;
2114
    s390|s390x)
2115
        arch="s390"
2116
    ;;
2117
    sh4|sh)
2118
        arch="sh4"
2119
    ;;
2120
    sun4u|sparc64)
2121
        arch="sparc"
2122
        subarch="sparc64"
2123
    ;;
2124
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2125
        arch="x86"
2126
    ;;
2127
esac
2128

    
2129
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2130
enable $arch
2131

    
2132
# Add processor-specific flags
2133
if test "$cpu" = generic; then
2134
    : do nothing
2135
elif enabled ppc; then
2136

    
2137
    case $(tolower $cpu) in
2138
        601|ppc601|powerpc601)
2139
            cpuflags="-mcpu=601"
2140
            disable altivec
2141
        ;;
2142
        603*|ppc603*|powerpc603*)
2143
            cpuflags="-mcpu=603"
2144
            disable altivec
2145
        ;;
2146
        604*|ppc604*|powerpc604*)
2147
            cpuflags="-mcpu=604"
2148
            disable altivec
2149
        ;;
2150
        g3|75*|ppc75*|powerpc75*)
2151
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2152
            disable altivec
2153
        ;;
2154
        g4|745*|ppc745*|powerpc745*)
2155
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2156
        ;;
2157
        74*|ppc74*|powerpc74*)
2158
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2159
        ;;
2160
        g5|970|ppc970|powerpc970|power4*)
2161
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2162
        ;;
2163
        cell)
2164
            cpuflags="-mcpu=cell"
2165
            enable ldbrx
2166
        ;;
2167
        e500v2)
2168
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2169
            disable altivec
2170
        ;;
2171
        e500)
2172
            cpuflags="-mcpu=8540 -mhard-float"
2173
            disable altivec
2174
        ;;
2175
    esac
2176

    
2177
elif enabled x86; then
2178

    
2179
    case $cpu in
2180
        i[345]86|pentium)
2181
            cpuflags="-march=$cpu"
2182
            disable mmx
2183
        ;;
2184
        # targets that do NOT support conditional mov (cmov)
2185
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2186
            cpuflags="-march=$cpu"
2187
            disable cmov
2188
        ;;
2189
        # targets that do support conditional mov (cmov)
2190
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2191
            cpuflags="-march=$cpu"
2192
            enable cmov
2193
            enable fast_cmov
2194
        ;;
2195
        # targets that do support conditional mov but on which it's slow
2196
        pentium4|pentium4m|prescott|nocona)
2197
            cpuflags="-march=$cpu"
2198
            enable cmov
2199
            disable fast_cmov
2200
        ;;
2201
    esac
2202

    
2203
elif enabled sparc; then
2204

    
2205
    case $cpu in
2206
        niagara)
2207
            cpuflags="-mcpu=$cpu"
2208
            disable vis
2209
        ;;
2210
        sparc64)
2211
            cpuflags="-mcpu=v9"
2212
        ;;
2213
    esac
2214

    
2215
elif enabled arm; then
2216

    
2217
    case $cpu in
2218
        armv*)
2219
            cpuflags="-march=$cpu"
2220
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2221
        ;;
2222
        *)
2223
            cpuflags="-mcpu=$cpu"
2224
            case $cpu in
2225
                cortex-a*)                               subarch=armv7a  ;;
2226
                cortex-r*)                               subarch=armv7r  ;;
2227
                cortex-m*)                               subarch=armv7m  ;;
2228
                arm11*)                                  subarch=armv6   ;;
2229
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2230
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2231
            esac
2232
        ;;
2233
    esac
2234

    
2235
elif enabled alpha; then
2236

    
2237
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2238

    
2239
elif enabled bfin; then
2240

    
2241
    cpuflags="-mcpu=$cpu"
2242

    
2243
elif enabled mips; then
2244

    
2245
    cpuflags="-march=$cpu"
2246

    
2247
elif enabled avr32; then
2248

    
2249
    case $cpu in
2250
        ap7[02]0[0-2])
2251
            subarch="avr32_ap"
2252
            cpuflags="-mpart=$cpu"
2253
        ;;
2254
        ap)
2255
            subarch="avr32_ap"
2256
            cpuflags="-march=$cpu"
2257
        ;;
2258
        uc3[ab]*)
2259
            subarch="avr32_uc"
2260
            cpuflags="-mcpu=$cpu"
2261
        ;;
2262
        uc)
2263
            subarch="avr32_uc"
2264
            cpuflags="-march=$cpu"
2265
        ;;
2266
    esac
2267

    
2268
fi
2269

    
2270
add_cflags $cpuflags
2271
add_asflags $cpuflags
2272

    
2273
# compiler sanity check
2274
check_exec <<EOF
2275
int main(void){ return 0; }
2276
EOF
2277
if test "$?" != 0; then
2278
    echo "$cc is unable to create an executable file."
2279
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2280
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2281
        echo "Only do this if you know what cross compiling means."
2282
    fi
2283
    die "C compiler test failed."
2284
fi
2285

    
2286
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2287
check_cflags -std=c99
2288
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2289
#include <stdlib.h>
2290
EOF
2291
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2292
#include <stdlib.h>
2293
EOF
2294

    
2295
check_host_cflags -std=c99
2296

    
2297
case "$arch" in
2298
    alpha|ia64|mips|parisc|sparc)
2299
        spic=$shared
2300
    ;;
2301
    x86)
2302
        subarch="x86_32"
2303
        check_cc <<EOF && subarch="x86_64"
2304
        int test[(int)sizeof(char*) - 7];
2305
EOF
2306
        if test "$subarch" = "x86_64"; then
2307
            spic=$shared
2308
        fi
2309
    ;;
2310
esac
2311

    
2312
enable $subarch
2313
enabled spic && enable pic
2314

    
2315
# OS specific
2316
case $target_os in
2317
    haiku)
2318
        prefix_default="/boot/common"
2319
        network_extralibs="-lnetwork"
2320
        host_libs=
2321
        ;;
2322
    sunos)
2323
        FFSERVERLDFLAGS=""
2324
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2325
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2326
        network_extralibs="-lsocket -lnsl"
2327
        add_cppflags -D__EXTENSIONS__
2328
        nm_opts='-P -g'
2329
        ;;
2330
    netbsd)
2331
        disable symver
2332
        oss_indev_extralibs="-lossaudio"
2333
        oss_outdev_extralibs="-lossaudio"
2334
        add_cppflags -D_XOPEN_SOURCE=600
2335
        ;;
2336
    openbsd)
2337
        enable malloc_aligned
2338
        # On OpenBSD 4.5. the compiler does not use PIC unless
2339
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2340
        # however the generated executable will not do anything
2341
        # (simply quits with exit-code 1, no crash, no output).
2342
        # Thus explicitly enable PIC here.
2343
        enable pic
2344
        disable symver
2345
        SHFLAGS='-shared'
2346
        oss_indev_extralibs="-lossaudio"
2347
        oss_outdev_extralibs="-lossaudio"
2348
        ;;
2349
    dragonfly)
2350
        enable malloc_aligned
2351
        disable symver
2352
        ;;
2353
    freebsd)
2354
        enable malloc_aligned
2355
        ;;
2356
    bsd/os)
2357
        add_extralibs -lpoll -lgnugetopt
2358
        strip="strip -d"
2359
        ;;
2360
    darwin)
2361
        enable malloc_aligned
2362
        gas="gas-preprocessor.pl $cc"
2363
        enabled ppc && add_asflags -force_cpusubtype_ALL
2364
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2365
        strip="${strip} -x"
2366
        add_ldflags -Wl,-dynamic,-search_paths_first
2367
        SLIBSUF=".dylib"
2368
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2369
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2370
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2371
        objformat="macho"
2372
        enabled x86_64 && objformat="macho64"
2373
        enabled_any pic shared ||
2374
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2375
        ;;
2376
    mingw32*)
2377
        if test $target_os = "mingw32ce"; then
2378
            disable network
2379
        else
2380
            target_os=mingw32
2381
        fi
2382
        LIBTARGET=i386
2383
        if enabled x86_64; then
2384
            enable malloc_aligned
2385
            LIBTARGET=x64
2386
        elif enabled arm; then
2387
            LIBTARGET=arm
2388
        fi
2389
        shlibdir_default="$bindir_default"
2390
        disable ffserver
2391
        SLIBPREF=""
2392
        SLIBSUF=".dll"
2393
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2394
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2395
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2396
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2397
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2398
            install -d "$(LIBDIR)"; \
2399
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2400
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2401
        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'
2402
        objformat="win32"
2403
        enable dos_paths
2404
        check_cflags -fno-common
2405
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2406
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2407
                die "ERROR: MinGW runtime version must be >= 3.15."
2408
        ;;
2409
    cygwin*)
2410
        target_os=cygwin
2411
        shlibdir_default="$bindir_default"
2412
        SLIBPREF="cyg"
2413
        SLIBSUF=".dll"
2414
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2415
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2416
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2417
        objformat="win32"
2418
        enable dos_paths
2419
        check_cflags -fno-common
2420
        ;;
2421
    *-dos|freedos|opendos)
2422
        disable ffplay ffserver
2423
        disable $INDEV_LIST $OUTDEV_LIST
2424
        network_extralibs="-lsocket"
2425
        objformat="coff"
2426
        enable dos_paths
2427
        ;;
2428
    linux)
2429
        enable dv1394
2430
        ;;
2431
    irix*)
2432
        target_os=irix
2433
        ranlib="echo ignoring ranlib"
2434
        ;;
2435
    os/2*)
2436
        strip="lxlite -CS"
2437
        ln_s="cp -f"
2438
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2439
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2440
        FFSERVERLDFLAGS=""
2441
        LIBSUF="_s.a"
2442
        SLIBPREF=""
2443
        SLIBSUF=".dll"
2444
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2445
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2446
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2447
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2448
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2449
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2450
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2451
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2452
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2453
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2454
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2455
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2456
        enable dos_paths
2457
        ;;
2458
    gnu/kfreebsd)
2459
        ;;
2460
    gnu)
2461
        ;;
2462
    qnx)
2463
        add_cppflags -D_QNX_SOURCE
2464
        network_extralibs="-lsocket"
2465
        ;;
2466
    none)
2467
        ;;
2468
    *)
2469
        die "Unknown OS '$target_os'."
2470
        ;;
2471
esac
2472

    
2473
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2474

    
2475
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2476

    
2477
set_default $PATHS_LIST
2478

    
2479
# we need to build at least one lib type
2480
if ! enabled_any static shared; then
2481
    cat <<EOF
2482
At least one library type must be built.
2483
Specify --enable-static to build the static libraries or --enable-shared to
2484
build the shared libraries as well. To only build the shared libraries specify
2485
--disable-static in addition to --enable-shared.
2486
EOF
2487
    exit 1;
2488
fi
2489

    
2490
disabled static && LIBNAME=""
2491

    
2492
die_license_disabled() {
2493
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2494
}
2495

    
2496
die_license_disabled gpl libx264
2497
die_license_disabled gpl libxavs
2498
die_license_disabled gpl libxvid
2499
die_license_disabled gpl postproc
2500
die_license_disabled gpl x11grab
2501

    
2502
die_license_disabled nonfree libfaac
2503

    
2504
die_license_disabled version3 libopencore_amrnb
2505
die_license_disabled version3 libopencore_amrwb
2506

    
2507
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2508

    
2509
disabled optimizations || check_cflags -fomit-frame-pointer
2510

    
2511
enable_pic() {
2512
    enable pic
2513
    add_cppflags -DPIC
2514
    add_cflags   -fPIC
2515
    add_asflags  -fPIC
2516
}
2517

    
2518
enabled pic && enable_pic
2519

    
2520
check_cc <<EOF || die "Symbol mangling check failed."
2521
int ff_extern;
2522
EOF
2523
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2524
extern_prefix=${sym%%ff_extern*}
2525

    
2526
check_cc <<EOF && enable inline_asm
2527
void foo(void) { __asm__ volatile ("" ::); }
2528
EOF
2529

    
2530
_restrict=
2531
for restrict_keyword in restrict __restrict__ __restrict; do
2532
    check_cc <<EOF && _restrict=$restrict_keyword && break
2533
void foo(char * $restrict_keyword p);
2534
EOF
2535
done
2536

    
2537
check_cc <<EOF && enable attribute_packed
2538
struct { int x; } __attribute__((packed)) x;
2539
EOF
2540

    
2541
check_cc <<EOF && enable attribute_may_alias
2542
union { int x; } __attribute__((may_alias)) x;
2543
EOF
2544

    
2545
check_cc <<EOF || die "endian test failed"
2546
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2547
EOF
2548
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2549

    
2550
if enabled alpha; then
2551

    
2552
    check_cflags -mieee
2553

    
2554
elif enabled arm; then
2555

    
2556
    check_cflags -marm
2557
    nogas=die
2558

    
2559
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2560
        enable vfp_args
2561
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2562
        case "${cross_prefix:-$cc}" in
2563
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2564
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2565
__asm__ (".eabi_attribute 28, 1");
2566
int main(void) { return 0; }
2567
EOF
2568
        esac
2569
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2570
    fi
2571

    
2572
    # We have to check if pld is a nop and disable it.
2573
    check_asm pld '"pld [r0]"'
2574

    
2575
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2576
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2577
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2578
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2579
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2580
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2581

    
2582
    enabled_all armv6t2 shared !pic && enable_pic
2583

    
2584
elif enabled mips; then
2585

    
2586
    check_asm loongson '"dmult.g $1, $2, $3"'
2587
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2588

    
2589
elif enabled ppc; then
2590

    
2591
    enable local_aligned_8 local_aligned_16
2592

    
2593
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2594
    check_asm ibm_asm   '"add 0, 0, 0"'
2595
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2596
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2597

    
2598
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2599
    if enabled altivec; then
2600
        nogas=warn
2601
        check_cflags -maltivec -mabi=altivec &&
2602
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2603
        check_cflags -faltivec
2604

    
2605
        # check if our compiler supports Motorola AltiVec C API
2606
        check_cc <<EOF || disable altivec
2607
$inc_altivec_h
2608
int main(void) {
2609
    vector signed int v1, v2, v3;
2610
    v1 = vec_add(v2,v3);
2611
    return 0;
2612
}
2613
EOF
2614

    
2615
        # check if our compiler supports braces for vector declarations
2616
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2617
$inc_altivec_h
2618
int main (void) { (vector int) {1}; return 0; }
2619
EOF
2620
    fi
2621

    
2622
elif enabled sparc; then
2623

    
2624
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2625
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2626

    
2627
elif enabled x86; then
2628

    
2629
    enable local_aligned_8 local_aligned_16
2630

    
2631
    # check whether EBP is available on x86
2632
    # As 'i' is stored on the stack, this program will crash
2633
    # if the base pointer is used to access it because the
2634
    # base pointer is cleared in the inline assembly code.
2635
    check_exec_crash <<EOF && enable ebp_available
2636
    volatile int i=0;
2637
    __asm__ volatile (
2638
        "xorl %%ebp, %%ebp"
2639
    ::: "%ebp");
2640
    return i;
2641
EOF
2642

    
2643
    # check whether EBX is available on x86
2644
    check_asm ebx_available '""::"b"(0)' &&
2645
        check_asm ebx_available '"":::"%ebx"'
2646

    
2647
    # check whether xmm clobbers are supported
2648
    check_asm xmm_clobbers '"":::"%xmm0"'
2649

    
2650
    # check whether more than 10 operands are supported
2651
    check_cc <<EOF && enable ten_operands
2652
int main(void) {
2653
    int x=0;
2654
    __asm__ volatile(
2655
        ""
2656
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2657
    );
2658
    return 0;
2659
}
2660
EOF
2661

    
2662
    # check whether binutils is new enough to compile SSSE3/MMX2
2663
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2664
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2665

    
2666
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2667

    
2668
    if ! disabled_any asm mmx yasm; then
2669
        if check_cmd $yasmexe --version; then
2670
            enabled x86_64 && yasm_extra="-m amd64"
2671
            yasm_debug="-g dwarf2"
2672
        elif check_cmd nasm -v; then
2673
            yasmexe=nasm
2674
            yasm_debug="-g -F dwarf"
2675
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2676
        fi
2677

    
2678
        YASMFLAGS="-f $objformat $yasm_extra"
2679
        enabled pic               && append YASMFLAGS "-DPIC"
2680
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2681
        case "$objformat" in
2682
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2683
        esac
2684

    
2685
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2686
            die "yasm not found, use --disable-yasm for a crippled build"
2687
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2688
    fi
2689

    
2690
    case "$cpu" in
2691
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2692
            disable fast_clz
2693
        ;;
2694
    esac
2695

    
2696
fi
2697

    
2698
if enabled asm; then
2699
    as=${gas:=$as}
2700
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2701
        $nogas "GNU assembler not found, install gas-preprocessor"
2702
fi
2703

    
2704
if check_func dlopen; then
2705
    ldl=
2706
elif check_func dlopen -ldl; then
2707
    ldl=-ldl
2708
fi
2709

    
2710
if enabled network; then
2711
    check_type "sys/types.h sys/socket.h" socklen_t
2712
    check_type netdb.h "struct addrinfo"
2713
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2714
    check_type netinet/in.h "struct sockaddr_in6"
2715
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2716
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2717
    # Prefer arpa/inet.h over winsock2
2718
    if check_header arpa/inet.h ; then
2719
        check_func closesocket
2720
    elif check_header winsock2.h ; then
2721
        check_func_headers winsock2.h closesocket -lws2 && \
2722
            network_extralibs="-lws2" || \
2723
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2724
            network_extralibs="-lws2_32"; }
2725
        check_type ws2tcpip.h socklen_t
2726
        check_type ws2tcpip.h "struct addrinfo"
2727
        check_type ws2tcpip.h "struct ipv6_mreq"
2728
        check_type ws2tcpip.h "struct sockaddr_in6"
2729
        check_type ws2tcpip.h "struct sockaddr_storage"
2730
        check_struct winsock2.h "struct sockaddr" sa_len
2731
    else
2732
        disable network
2733
    fi
2734
fi
2735

    
2736
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2737
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2738

    
2739
check_func  fcntl
2740
check_func  fork
2741
check_func  getaddrinfo $network_extralibs
2742
check_func  gethrtime
2743
check_func  getrusage
2744
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2745
check_func  inet_aton $network_extralibs
2746
check_func  isatty
2747
check_func  localtime_r
2748
check_func  ${malloc_prefix}memalign            && enable memalign
2749
check_func  mkstemp
2750
check_func  mmap
2751
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2752
check_func  setrlimit
2753
check_func  strerror_r
2754
check_func  strtok_r
2755
check_func_headers io.h setmode
2756
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2757
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2758
check_func_headers windows.h GetProcessTimes
2759
check_func_headers windows.h MapViewOfFile
2760
check_func_headers windows.h VirtualAlloc
2761

    
2762
check_header conio.h
2763
check_header dlfcn.h
2764
check_header dxva2api.h
2765
check_header malloc.h
2766
check_header poll.h
2767
check_header sys/mman.h
2768
check_header sys/resource.h
2769
check_header sys/select.h
2770
check_header termios.h
2771
check_header vdpau/vdpau.h
2772
check_header vdpau/vdpau_x11.h
2773
check_header X11/extensions/XvMClib.h
2774

    
2775
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2776

    
2777
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2778
     enabled_any $need_memalign ; then
2779
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2780
fi
2781

    
2782
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2783
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2784

    
2785
# check for some common methods of building with pthread support
2786
# do this before the optional library checks as some of them require pthreads
2787
if ! disabled pthreads && ! enabled w32threads; then
2788
    enable pthreads
2789
    if check_func pthread_create; then
2790
        :
2791
    elif check_func pthread_create -pthread; then
2792
        add_cflags -pthread
2793
        add_extralibs -pthread
2794
    elif check_func pthread_create -pthreads; then
2795
        add_cflags -pthreads
2796
        add_extralibs -pthreads
2797
    elif check_func pthread_create -lpthreadGC2; then
2798
        add_extralibs -lpthreadGC2
2799
    elif ! check_lib pthread.h pthread_create -lpthread; then
2800
        disable pthreads
2801
    fi
2802
fi
2803

    
2804
for thread in $THREADS_LIST; do
2805
    if enabled $thread; then
2806
        test -n "$thread_type" &&
2807
            die "ERROR: Only one thread type must be selected." ||
2808
            thread_type="$thread"
2809
    fi
2810
done
2811

    
2812
check_lib math.h sin -lm
2813
disabled vaapi || check_lib va/va.h vaInitialize -lva
2814

    
2815
check_mathfunc exp2
2816
check_mathfunc exp2f
2817
check_mathfunc llrint
2818
check_mathfunc llrintf
2819
check_mathfunc log2
2820
check_mathfunc log2f
2821
check_mathfunc lrint
2822
check_mathfunc lrintf
2823
check_mathfunc round
2824
check_mathfunc roundf
2825
check_mathfunc truncf
2826

    
2827
# these are off by default, so fail if requested and not available
2828
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2829
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2830
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2831
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2832
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2833
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2834
enabled libfreetype && add_cflags $(pkg-config --cflags freetype2) && require libfreetype ft2build.h FT_Init_FreeType -lfreetype
2835
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2836
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2837
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2838
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2839
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2840
enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2841
                        die "ERROR: libopencv not found"; }
2842
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2843
enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2844
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2845
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2846
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2847
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2848
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2849
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2850
enabled libvpx     && {
2851
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2852
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2853
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2854
                                die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2855
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2856
                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2857
                        die "ERROR: libx264 version must be >= 0.99."; }
2858
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2859
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2860
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2861

    
2862
# libdc1394 check
2863
if enabled libdc1394; then
2864
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2865
        enable libdc1394_2; } ||
2866
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2867
        enable libdc1394_1; } ||
2868
    die "ERROR: No version of libdc1394 found "
2869
fi
2870

    
2871
SDL_CONFIG="${cross_prefix}sdl-config"
2872
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2873
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2874
    sdl_libs=$("${SDL_CONFIG}" --libs)
2875
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2876
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2877
    enable sdl &&
2878
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2879
fi
2880

    
2881
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2882

    
2883
check_header linux/videodev.h
2884
check_header linux/videodev2.h
2885
check_header sys/videoio.h
2886

    
2887
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2888
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2889
# w32api 3.12 had it defined wrong
2890
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2891

    
2892
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2893
{ check_header dev/bktr/ioctl_meteor.h &&
2894
  check_header dev/bktr/ioctl_bt848.h; } ||
2895
{ check_header machine/ioctl_meteor.h &&
2896
  check_header machine/ioctl_bt848.h; } ||
2897
{ check_header dev/video/meteor/ioctl_meteor.h &&
2898
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2899
check_header dev/ic/bt8xx.h
2900

    
2901
check_header sys/soundcard.h
2902
check_header soundcard.h
2903

    
2904
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2905

    
2906
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2907

    
2908
enabled x11grab                         &&
2909
check_header X11/Xlib.h                 &&
2910
check_header X11/extensions/XShm.h      &&
2911
check_header X11/extensions/Xfixes.h    &&
2912
check_func XOpenDisplay -lX11           &&
2913
check_func XShmCreateImage -lX11 -lXext &&
2914
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2915

    
2916
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2917
check_cpp_condition \
2918
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2919
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2920
      disable vdpau; }
2921
fi
2922

    
2923
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2924

    
2925
# add some useful compiler flags if supported
2926
check_cflags -Wdeclaration-after-statement
2927
check_cflags -Wall
2928
check_cflags -Wno-parentheses
2929
check_cflags -Wno-switch
2930
check_cflags -Wdisabled-optimization
2931
check_cflags -Wpointer-arith
2932
check_cflags -Wredundant-decls
2933
check_cflags -Wno-pointer-sign
2934
check_cflags -Wcast-qual
2935
check_cflags -Wwrite-strings
2936
check_cflags -Wtype-limits
2937
check_cflags -Wundef
2938
check_cflags -Wmissing-prototypes
2939
enabled extra_warnings && check_cflags -Winline
2940

    
2941
# add some linker flags
2942
check_ldflags -Wl,--warn-common
2943
check_ldflags -Wl,--as-needed
2944
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'
2945
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2946

    
2947
echo "X{};" > $TMPV
2948
if test_ldflags -Wl,--version-script,$TMPV; then
2949
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2950
    check_cc <<EOF && enable symver_asm_label
2951
void ff_foo(void) __asm__ ("av_foo@VERSION");
2952
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2953
EOF
2954
    check_cc <<EOF && enable symver_gnu_asm
2955
__asm__(".symver ff_foo,av_foo@VERSION");
2956
void ff_foo(void) {}
2957
EOF
2958
fi
2959

    
2960
if enabled small; then
2961
    add_cflags $size_cflags
2962
    optimizations="small"
2963
elif enabled optimizations; then
2964
    add_cflags $speed_cflags
2965
else
2966
    add_cflags $noopt_cflags
2967
fi
2968
check_cflags -fno-math-errno
2969
check_cflags -fno-signed-zeros
2970

    
2971
if enabled icc; then
2972
    # Just warnings, no remarks
2973
    check_cflags -w1
2974
    # -wd: Disable following warnings
2975
    # 144, 167, 556: -Wno-pointer-sign
2976
    # 10006: ignoring unknown option -fno-signed-zeros
2977
    # 10148: ignoring unknown option -Wno-parentheses
2978
    # 10156: ignoring option '-W'; no argument required
2979
    check_cflags -wd144,167,556,10006,10148,10156
2980
    # 11030: Warning unknown option --as-needed
2981
    # 10156: ignoring option '-export'; no argument required
2982
    check_ldflags -wd10156,11030
2983
    # Allow to compile with optimizations
2984
    check_ldflags -march=$cpu
2985
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2986
    enable ebp_available
2987
    if enabled x86_32; then
2988
        test ${icc_version%%.*} -ge 11 && \
2989
            check_cflags -falign-stack=maintain-16-byte || \
2990
            disable aligned_stack
2991
    fi
2992
elif enabled ccc; then
2993
    # disable some annoying warnings
2994
    add_cflags -msg_disable cvtu32to64
2995
    add_cflags -msg_disable embedcomment
2996
    add_cflags -msg_disable needconstext
2997
    add_cflags -msg_disable nomainieee
2998
    add_cflags -msg_disable ptrmismatch1
2999
    add_cflags -msg_disable unreachcode
3000
elif enabled gcc; then
3001
    check_cflags -fno-tree-vectorize
3002
    check_cflags -Werror=implicit-function-declaration
3003
    check_cflags -Werror=missing-prototypes
3004
elif enabled llvm_gcc; then
3005
    check_cflags -mllvm -stack-alignment=16
3006
elif enabled clang; then
3007
    check_cflags -mllvm -stack-alignment=16
3008
    check_cflags -Qunused-arguments
3009
elif enabled armcc; then
3010
    # 2523: use of inline assembler is deprecated
3011
    add_cflags -W${armcc_opt},--diag_suppress=2523
3012
    add_cflags -W${armcc_opt},--diag_suppress=1207
3013
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3014
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3015
elif enabled tms470; then
3016
    add_cflags -pds=824 -pds=837
3017
elif enabled pathscale; then
3018
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3019
fi
3020

    
3021
enabled_any $THREADS_LIST      && enable threads
3022

    
3023
check_deps $CONFIG_LIST       \
3024
           $CONFIG_EXTRA      \
3025
           $HAVE_LIST         \
3026
           $DECODER_LIST      \
3027
           $ENCODER_LIST      \
3028
           $HWACCEL_LIST      \
3029
           $PARSER_LIST       \
3030
           $BSF_LIST          \
3031
           $DEMUXER_LIST      \
3032
           $MUXER_LIST        \
3033
           $FILTER_LIST       \
3034
           $INDEV_LIST        \
3035
           $OUTDEV_LIST       \
3036
           $PROTOCOL_LIST     \
3037
           $ACODEC_TESTS      \
3038
           $VCODEC_TESTS      \
3039
           $LAVF_TESTS        \
3040
           $LAVFI_TESTS       \
3041
           $SEEK_TESTS        \
3042

    
3043
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3044

    
3045
echo "install prefix            $prefix"
3046
echo "source path               $source_path"
3047
echo "C compiler                $cc"
3048
echo "ARCH                      $arch ($cpu)"
3049
if test "$build_suffix" != ""; then
3050
    echo "build suffix              $build_suffix"
3051
fi
3052
if test "$extra_version" != ""; then
3053
    echo "version string suffix     $extra_version"
3054
fi
3055
echo "big-endian                ${bigendian-no}"
3056
echo "runtime cpu detection     ${runtime_cpudetect-no}"
3057
if enabled x86; then
3058
    echo "yasm                      ${yasm-no}"
3059
    echo "MMX enabled               ${mmx-no}"
3060
    echo "MMX2 enabled              ${mmx2-no}"
3061
    echo "3DNow! enabled            ${amd3dnow-no}"
3062
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
3063
    echo "SSE enabled               ${sse-no}"
3064
    echo "SSSE3 enabled             ${ssse3-no}"
3065
    echo "CMOV enabled              ${cmov-no}"
3066
    echo "CMOV is fast              ${fast_cmov-no}"
3067
    echo "EBX available             ${ebx_available-no}"
3068
    echo "EBP available             ${ebp_available-no}"
3069
    echo "10 operands supported     ${ten_operands-no}"
3070
fi
3071
if enabled arm; then
3072
    echo "ARMv5TE enabled           ${armv5te-no}"
3073
    echo "ARMv6 enabled             ${armv6-no}"
3074
    echo "ARMv6T2 enabled           ${armv6t2-no}"
3075
    echo "ARM VFP enabled           ${armvfp-no}"
3076
    echo "IWMMXT enabled            ${iwmmxt-no}"
3077
    echo "NEON enabled              ${neon-no}"
3078
fi
3079
if enabled mips; then
3080
    echo "MMI enabled               ${mmi-no}"
3081
fi
3082
if enabled ppc; then
3083
    echo "AltiVec enabled           ${altivec-no}"
3084
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
3085
    echo "dcbzl available           ${dcbzl-no}"
3086
fi
3087
if enabled sparc; then
3088
    echo "VIS enabled               ${vis-no}"
3089
fi
3090
echo "debug symbols             ${debug-no}"
3091
echo "strip symbols             ${stripping-no}"
3092
echo "optimizations             ${optimizations-no}"
3093
echo "static                    ${static-no}"
3094
echo "shared                    ${shared-no}"
3095
echo "postprocessing support    ${postproc-no}"
3096
echo "new filter support        ${avfilter-no}"
3097
echo "network support           ${network-no}"
3098
echo "threading support         ${thread_type-no}"
3099
echo "SDL support               ${sdl-no}"
3100
echo "Sun medialib support      ${mlib-no}"
3101
echo "AVISynth enabled          ${avisynth-no}"
3102
echo "frei0r enabled            ${frei0r-no}"
3103
echo "libdc1394 support         ${libdc1394-no}"
3104
echo "libdirac enabled          ${libdirac-no}"
3105
echo "libfaac enabled           ${libfaac-no}"
3106
echo "libgsm enabled            ${libgsm-no}"
3107
echo "libmp3lame enabled        ${libmp3lame-no}"
3108
echo "libnut enabled            ${libnut-no}"
3109
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3110
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3111
echo "libopencv support         ${libopencv-no}"
3112
echo "libopenjpeg enabled       ${libopenjpeg-no}"
3113
echo "librtmp enabled           ${librtmp-no}"
3114
echo "libschroedinger enabled   ${libschroedinger-no}"
3115
echo "libspeex enabled          ${libspeex-no}"
3116
echo "libtheora enabled         ${libtheora-no}"
3117
echo "libvorbis enabled         ${libvorbis-no}"
3118
echo "libvpx enabled            ${libvpx-no}"
3119
echo "libx264 enabled           ${libx264-no}"
3120
echo "libxavs enabled           ${libxavs-no}"
3121
echo "libxvid enabled           ${libxvid-no}"
3122
echo "zlib enabled              ${zlib-no}"
3123
echo "bzlib enabled             ${bzlib-no}"
3124
echo
3125

    
3126
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3127
    echo "Enabled ${type}s:"
3128
    eval list=\$$(toupper $type)_LIST
3129
    print_enabled '_*' $list | sort | pr -3 -t
3130
    echo
3131
done
3132

    
3133
license="LGPL version 2.1 or later"
3134
if enabled nonfree; then
3135
    license="nonfree and unredistributable"
3136
elif enabled gplv3; then
3137
    license="GPL version 3 or later"
3138
elif enabled lgplv3; then
3139
    license="LGPL version 3 or later"
3140
elif enabled gpl; then
3141
    license="GPL version 2 or later"
3142
fi
3143

    
3144
echo "License: $license"
3145

    
3146
echo "Creating config.mak and config.h..."
3147

    
3148
# build tree in object directory if source path is different from current one
3149
if enabled source_path_used; then
3150
    DIRS="
3151
        doc
3152
        libavcodec
3153
        libavcodec/$arch
3154
        libavdevice
3155
        libavfilter
3156
        libavfilter/$arch
3157
        libavfilter/libmpcodecs
3158
        libavfilter/libmpcodecs/libvo
3159
        libavformat
3160
        libavutil
3161
        libavutil/$arch
3162
        libpostproc
3163
        libswscale
3164
        libswscale/$arch
3165
        tests
3166
        tools
3167
    "
3168
    FILES="
3169
        Makefile
3170
        common.mak
3171
        subdir.mak
3172
        doc/texi2pod.pl
3173
        libavcodec/Makefile
3174
        libavcodec/${arch}/Makefile
3175
        libavdevice/Makefile
3176
        libavfilter/Makefile
3177
        libavfilter/${arch}/Makefile
3178
        libavformat/Makefile
3179
        libavutil/Makefile
3180
        libpostproc/Makefile
3181
        libswscale/Makefile
3182
    "
3183
    map 'mkdir -p $v' $DIRS;
3184
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3185
fi
3186

    
3187
enabled stripping || strip="echo skipping strip"
3188

    
3189
config_files="$TMPH config.mak"
3190

    
3191
cat > config.mak <<EOF
3192
# Automatically generated by configure - do not modify!
3193
ifndef FFMPEG_CONFIG_MAK
3194
FFMPEG_CONFIG_MAK=1
3195
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3196
prefix=$prefix
3197
LIBDIR=\$(DESTDIR)$libdir
3198
SHLIBDIR=\$(DESTDIR)$shlibdir
3199
INCDIR=\$(DESTDIR)$incdir
3200
BINDIR=\$(DESTDIR)$bindir
3201
DATADIR=\$(DESTDIR)$datadir
3202
MANDIR=\$(DESTDIR)$mandir
3203
SRC_PATH="$source_path"
3204
SRC_PATH_BARE=$source_path
3205
BUILD_ROOT="$PWD"
3206
CC_IDENT=$cc_ident
3207
ARCH=$arch
3208
CC=$cc
3209
AS=$as
3210
LD=$ld
3211
DEPCC=$dep_cc
3212
YASM=$yasmexe
3213
YASMDEP=$yasmexe
3214
AR=$ar
3215
RANLIB=$ranlib
3216
CP=cp -p
3217
LN_S=$ln_s
3218
STRIP=$strip
3219
CPPFLAGS=$CPPFLAGS
3220
CFLAGS=$CFLAGS
3221
ASFLAGS=$ASFLAGS
3222
CC_O=$CC_O
3223
LDFLAGS=$LDFLAGS
3224
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3225
SHFLAGS=$SHFLAGS
3226
YASMFLAGS=$YASMFLAGS
3227
BUILDSUF=$build_suffix
3228
FULLNAME=$FULLNAME
3229
LIBPREF=$LIBPREF
3230
LIBSUF=$LIBSUF
3231
LIBNAME=$LIBNAME
3232
SLIBPREF=$SLIBPREF
3233
SLIBSUF=$SLIBSUF
3234
EXESUF=$EXESUF
3235
EXTRA_VERSION=$extra_version
3236
DEPFLAGS=$DEPFLAGS
3237
CCDEP=$CCDEP
3238
ASDEP=$ASDEP
3239
CC_DEPFLAGS=$CC_DEPFLAGS
3240
AS_DEPFLAGS=$AS_DEPFLAGS
3241
HOSTCC=$host_cc
3242
HOSTCFLAGS=$host_cflags
3243
HOSTEXESUF=$HOSTEXESUF
3244
HOSTLDFLAGS=$host_ldflags
3245
HOSTLIBS=$host_libs
3246
TARGET_EXEC=$target_exec
3247
TARGET_PATH=$target_path
3248
SDL_LIBS=$sdl_libs
3249
SDL_CFLAGS=$sdl_cflags
3250
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3251
EXTRALIBS=$extralibs
3252
INSTALL=install
3253
LIBTARGET=${LIBTARGET}
3254
SLIBNAME=${SLIBNAME}
3255
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3256
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3257
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3258
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3259
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3260
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3261
SAMPLES=$samples
3262
EOF
3263

    
3264
get_version(){
3265
    name=$1
3266
    file=$source_path/$2
3267
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3268
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3269
    lcname=$(tolower $name)
3270
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3271
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3272
}
3273

    
3274
get_version LIBSWSCALE  libswscale/swscale.h
3275
get_version LIBPOSTPROC libpostproc/postprocess.h
3276
get_version LIBAVCODEC  libavcodec/avcodec.h
3277
get_version LIBAVDEVICE libavdevice/avdevice.h
3278
get_version LIBAVFORMAT libavformat/version.h
3279
get_version LIBAVUTIL   libavutil/avutil.h
3280
get_version LIBAVFILTER libavfilter/avfilter.h
3281

    
3282
cat > $TMPH <<EOF
3283
/* Automatically generated by configure - do not modify! */
3284
#ifndef FFMPEG_CONFIG_H
3285
#define FFMPEG_CONFIG_H
3286
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3287
#define FFMPEG_LICENSE "$(c_escape $license)"
3288
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3289
#define CC_TYPE "$cc_type"
3290
#define CC_VERSION $cc_version
3291
#define restrict $_restrict
3292
#define EXTERN_PREFIX "${extern_prefix}"
3293
#define EXTERN_ASM ${extern_prefix}
3294
#define SLIBSUF "$SLIBSUF"
3295
EOF
3296

    
3297
test -n "$malloc_prefix" &&
3298
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3299

    
3300
if enabled small || disabled optimizations; then
3301
    echo "#undef  av_always_inline"  >> $TMPH
3302
    if enabled small; then
3303
        echo "#define av_always_inline inline"  >> $TMPH
3304
    else
3305
        echo "#define av_always_inline av_unused"  >> $TMPH
3306
    fi
3307
fi
3308

    
3309
if enabled yasm; then
3310
    append config_files $TMPASM
3311
    printf '' >$TMPASM
3312
fi
3313

    
3314
print_config ARCH_   "$config_files" $ARCH_LIST
3315
print_config HAVE_   "$config_files" $HAVE_LIST
3316
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3317
                                     $CONFIG_EXTRA      \
3318
                                     $DECODER_LIST      \
3319
                                     $ENCODER_LIST      \
3320
                                     $HWACCEL_LIST      \
3321
                                     $PARSER_LIST       \
3322
                                     $BSF_LIST          \
3323
                                     $DEMUXER_LIST      \
3324
                                     $MUXER_LIST        \
3325
                                     $FILTER_LIST       \
3326
                                     $PROTOCOL_LIST     \
3327
                                     $INDEV_LIST        \
3328
                                     $OUTDEV_LIST       \
3329

    
3330
cat >>config.mak <<EOF
3331
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3332
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3333
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3334
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3335
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3336
EOF
3337

    
3338
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3339
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3340

    
3341
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3342
cp_if_changed $TMPH config.h
3343
touch .config
3344

    
3345
enabled yasm && cp_if_changed $TMPASM config.asm
3346

    
3347
cat > $TMPH <<EOF
3348
/* Generated by ffconf */
3349
#ifndef AVUTIL_AVCONFIG_H
3350
#define AVUTIL_AVCONFIG_H
3351
EOF
3352

    
3353
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3354

    
3355
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3356

    
3357
cp_if_changed $TMPH libavutil/avconfig.h
3358

    
3359
test -n "$WARNINGS" && printf "\n$WARNINGS"
3360

    
3361
# build pkg-config files
3362

    
3363
pkgconfig_generate(){
3364
name=$1
3365
shortname=${name#lib}${build_suffix}
3366
comment=$2
3367
version=$3
3368
libs=$4
3369
requires=$5
3370
enabled ${name#lib} || return 0
3371
cat <<EOF > $name/$name.pc
3372
prefix=$prefix
3373
exec_prefix=\${prefix}
3374
libdir=$libdir
3375
includedir=$incdir
3376

    
3377
Name: $name
3378
Description: $comment
3379
Version: $version
3380
Requires: $(enabled shared || echo $requires)
3381
Requires.private: $(enabled shared && echo $requires)
3382
Conflicts:
3383
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3384
Libs.private: $(enabled shared && echo $libs)
3385
Cflags: -I\${includedir}
3386
EOF
3387
cat <<EOF > $name/$name-uninstalled.pc
3388
prefix=
3389
exec_prefix=
3390
libdir=\${pcfiledir}
3391
includedir=${source_path}
3392

    
3393
Name: $name
3394
Description: $comment
3395
Version: $version
3396
Requires: $requires
3397
Conflicts:
3398
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3399
Cflags: -I\${includedir}
3400
EOF
3401
}
3402

    
3403
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3404
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs"
3405
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3406
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3407
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3408
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3409
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"