Statistics
| Branch: | Revision:

ffmpeg / configure @ cc4e9d2a

History | View | Annotate | Download (99.7 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-libgsm          enable GSM support via libgsm [no]
173
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
174
  --enable-libnut          enable NUT (de)muxing via libnut,
175
                           native (de)muxer exists [no]
176
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
177
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
178
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
179
  --enable-libspeex        enable Speex decoding via libspeex [no]
180
  --enable-libtheora       enable Theora encoding via libtheora [no]
181
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
182
                           native implementation exists [no]
183
  --enable-libvpx          enable VP8 support via libvpx [no]
184
  --enable-libx264         enable H.264 encoding via x264 [no]
185
  --enable-libxavs         enable AVS encoding via xavs [no]
186
  --enable-libxvid         enable Xvid encoding via xvidcore,
187
                           native MPEG-4/Xvid encoder exists [no]
188
  --enable-mlib            enable Sun medialib [no]
189
  --enable-zlib            enable zlib [autodetect]
190

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

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

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

    
253
quotes='""'
254

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
942
THREADS_LIST='
943
    pthreads
944
    w32threads
945
'
946

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

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

    
991
HAVE_LIST_PUB='
992
    bigendian
993
    fast_unaligned
994
'
995

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

    
1097
# options emitted with CONFIG_ prefix but not available on command line
1098
CONFIG_EXTRA="
1099
    avutil
1100
    gplv3
1101
    lgplv3
1102
"
1103

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

    
1119
PATHS_LIST='
1120
    bindir
1121
    datadir
1122
    incdir
1123
    libdir
1124
    mandir
1125
    prefix
1126
    shlibdir
1127
'
1128

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

    
1159
CMDLINE_APPEND="
1160
    extra_cflags
1161
"
1162

    
1163
# code dependency declarations
1164

    
1165
# architecture extensions
1166

    
1167
armv5te_deps="arm"
1168
armv6_deps="arm"
1169
armv6t2_deps="arm"
1170
armvfp_deps="arm"
1171
iwmmxt_deps="arm"
1172
neon_deps="arm"
1173

    
1174
mmi_deps="mips"
1175

    
1176
altivec_deps="ppc"
1177
ppc4xx_deps="ppc"
1178

    
1179
vis_deps="sparc"
1180

    
1181
x86_64_suggest="cmov fast_cmov"
1182
amd3dnow_deps="mmx"
1183
amd3dnowext_deps="amd3dnow"
1184
mmx_deps="x86"
1185
mmx2_deps="mmx"
1186
sse_deps="mmx"
1187
ssse3_deps="sse"
1188
avx_deps="ssse3"
1189

    
1190
aligned_stack_if_any="ppc x86"
1191
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1192
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1193
fast_unaligned_if_any="armv6 ppc x86"
1194

    
1195
need_memalign="altivec neon sse"
1196
inline_asm_deps="!tms470"
1197

    
1198
symver_if_any="symver_asm_label symver_gnu_asm"
1199

    
1200
# subsystems
1201
dct_select="rdft"
1202
mdct_select="fft"
1203
rdft_select="fft"
1204

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

    
1337
vaapi_deps="va_va_h"
1338
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1339

    
1340
# parsers
1341
h264_parser_select="golomb h264dsp h264pred"
1342

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

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

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

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

    
1425
# filters
1426
blackframe_filter_deps="gpl"
1427
cropdetect_filter_deps="gpl"
1428
frei0r_filter_deps="frei0r dlopen strtok_r"
1429
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1430
hqdn3d_filter_deps="gpl"
1431
scale_filter_deps="swscale"
1432
ocv_filter_deps="libopencv"
1433
yadif_filter_deps="gpl"
1434

    
1435
# libraries
1436
avdevice_deps="avcodec avformat"
1437
avformat_deps="avcodec"
1438

    
1439
# programs
1440
ffmpeg_deps="avcodec avformat swscale"
1441
ffmpeg_select="buffer_filter"
1442
ffplay_deps="avcodec avformat swscale sdl"
1443
ffplay_select="rdft"
1444
ffprobe_deps="avcodec avformat"
1445
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1446
ffserver_extralibs='$ldl'
1447

    
1448
doc_deps="texi2html"
1449

    
1450
# tests
1451

    
1452
test_deps(){
1453
    suf1=$1
1454
    suf2=$2
1455
    shift 2
1456
    for v; do
1457
        dep=${v%=*}
1458
        tests=${v#*=}
1459
        for name in ${tests}; do
1460
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1461
        done
1462
    done
1463
}
1464

    
1465
set_ne_test_deps(){
1466
    eval ${1}_be_test_deps="bigendian"
1467
    eval ${1}_le_test_deps="!bigendian"
1468
}
1469

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

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

    
1543
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1544
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1545

    
1546
set_ne_test_deps pixdesc
1547
set_ne_test_deps pixfmts_copy
1548
set_ne_test_deps pixfmts_crop
1549
set_ne_test_deps pixfmts_hflip
1550
set_ne_test_deps pixfmts_null
1551
set_ne_test_deps pixfmts_pad
1552
set_ne_test_deps pixfmts_scale
1553
set_ne_test_deps pixfmts_vflip
1554

    
1555
# default parameters
1556

    
1557
logfile="config.log"
1558

    
1559
# installation paths
1560
prefix_default="/usr/local"
1561
bindir_default='${prefix}/bin'
1562
datadir_default='${prefix}/share/ffmpeg'
1563
incdir_default='${prefix}/include'
1564
libdir_default='${prefix}/lib'
1565
mandir_default='${prefix}/share/man'
1566
shlibdir_default="$libdir_default"
1567

    
1568
# toolchain
1569
ar_default="ar"
1570
cc_default="gcc"
1571
cc_version=\"unknown\"
1572
host_cc_default="gcc"
1573
ln_s="ln -sf"
1574
nm_default="nm"
1575
objformat="elf"
1576
ranlib="ranlib"
1577
strip_default="strip"
1578
yasmexe="yasm"
1579
nogas=":"
1580

    
1581
nm_opts='-g'
1582

    
1583
# machine
1584
arch_default=$(uname -m)
1585
cpu="generic"
1586

    
1587
# OS
1588
target_os_default=$(tolower $(uname -s))
1589
host_os=$target_os_default
1590

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

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

    
1628
CC_O='-o $@'
1629

    
1630
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1631
host_libs='-lm'
1632

    
1633
target_path='$(CURDIR)'
1634

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

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

    
1654
for v in "$@"; do
1655
    r=${v#*=}
1656
    l=${v%"$r"}
1657
    r=$(sh_quote "$r")
1658
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1659
done
1660

    
1661
find_things(){
1662
    thing=$1
1663
    pattern=$2
1664
    file=$source_path/$3
1665
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1666
}
1667

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

    
1680
find_tests(){
1681
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1682
}
1683

    
1684
ACODEC_TESTS=$(find_tests acodec)
1685
VCODEC_TESTS=$(find_tests vsynth1)
1686
LAVF_TESTS=$(find_tests lavf)
1687
LAVFI_TESTS=$(find_tests lavfi)
1688
SEEK_TESTS=$(find_tests seek seek_)
1689

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

    
1692
for n in $COMPONENT_LIST; do
1693
    v=$(toupper ${n%s})_LIST
1694
    eval enable \$$v
1695
    eval ${n}_if_any="\$$v"
1696
done
1697

    
1698
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1699

    
1700
die_unknown(){
1701
    echo "Unknown option \"$1\"."
1702
    echo "See $0 --help for available options."
1703
    exit 1
1704
}
1705

    
1706
show_list() {
1707
    suffix=_$1
1708
    shift
1709
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1710
    exit 0
1711
}
1712

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

    
1768
disabled logging && logfile=/dev/null
1769

    
1770
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1771
set >> $logfile
1772

    
1773
test -n "$cross_prefix" && enable cross_compile
1774

    
1775
if enabled cross_compile; then
1776
    test -n "$arch" && test -n "$target_os" ||
1777
        die "Must specify target arch and OS when cross-compiling"
1778
fi
1779

    
1780
set_default arch target_os
1781

    
1782
ar_default="${cross_prefix}${ar_default}"
1783
cc_default="${cross_prefix}${cc_default}"
1784
nm_default="${cross_prefix}${nm_default}"
1785
ranlib="${cross_prefix}${ranlib}"
1786
strip_default="${cross_prefix}${strip_default}"
1787

    
1788
sysinclude_default="${sysroot}/usr/include"
1789

    
1790
set_default cc nm strip sysinclude
1791
enabled cross_compile || host_cc_default=$cc
1792
set_default host_cc
1793

    
1794
exesuf() {
1795
    case $1 in
1796
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1797
    esac
1798
}
1799

    
1800
EXESUF=$(exesuf $target_os)
1801
HOSTEXESUF=$(exesuf $host_os)
1802

    
1803
# set temporary file name
1804
: ${TMPDIR:=$TEMPDIR}
1805
: ${TMPDIR:=$TMP}
1806
: ${TMPDIR:=/tmp}
1807

    
1808
if ! check_cmd mktemp -u XXXXXX; then
1809
    # simple replacement for missing mktemp
1810
    # NOT SAFE FOR GENERAL USE
1811
    mktemp(){
1812
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1813
    }
1814
fi
1815

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

    
1824
trap 'rm -f -- $TMPFILES' EXIT
1825

    
1826
tmpfile TMPC  .c
1827
tmpfile TMPE  $EXESUF
1828
tmpfile TMPH  .h
1829
tmpfile TMPO  .o
1830
tmpfile TMPS  .S
1831
tmpfile TMPV  .ver
1832
tmpfile TMPSH .sh
1833
tmpfile TMPASM .asm
1834

    
1835
unset -f mktemp
1836

    
1837
chmod +x $TMPE
1838

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

    
1852
filter_cflags=echo
1853
filter_cppflags=echo
1854
filter_asflags=echo
1855

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

    
2032
test -n "$cc_type" && enable $cc_type ||
2033
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2034

    
2035
: ${as_default:=$cc}
2036
: ${dep_cc_default:=$cc}
2037
: ${ld_default:=$cc}
2038
set_default ar as dep_cc ld
2039

    
2040
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2041
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2042

    
2043
add_cflags $extra_cflags
2044
add_asflags $extra_cflags
2045

    
2046
if test -n "$sysroot"; then
2047
    case "$cc_type" in
2048
        gcc|llvm_gcc)
2049
            add_cppflags --sysroot="$sysroot"
2050
            add_ldflags --sysroot="$sysroot"
2051
        ;;
2052
        tms470)
2053
            add_cppflags -I"$sysinclude"
2054
            add_ldflags  --sysroot="$sysroot"
2055
        ;;
2056
        clang)
2057
            add_cppflags -isysroot "$sysroot"
2058
            add_ldflags -isysroot "$sysroot"
2059
        ;;
2060
    esac
2061
fi
2062

    
2063
if test "$cpu" = host; then
2064
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2065

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

    
2080
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2081
fi
2082

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

    
2124
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2125
enable $arch
2126

    
2127
# Add processor-specific flags
2128
if test "$cpu" = generic; then
2129
    : do nothing
2130
elif enabled ppc; then
2131

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

    
2172
elif enabled x86; then
2173

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

    
2198
elif enabled sparc; then
2199

    
2200
    case $cpu in
2201
        niagara)
2202
            cpuflags="-mcpu=$cpu"
2203
            disable vis
2204
        ;;
2205
        sparc64)
2206
            cpuflags="-mcpu=v9"
2207
        ;;
2208
    esac
2209

    
2210
elif enabled arm; then
2211

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

    
2230
elif enabled alpha; then
2231

    
2232
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2233

    
2234
elif enabled bfin; then
2235

    
2236
    cpuflags="-mcpu=$cpu"
2237

    
2238
elif enabled mips; then
2239

    
2240
    cpuflags="-march=$cpu"
2241

    
2242
elif enabled avr32; then
2243

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

    
2263
fi
2264

    
2265
add_cflags $cpuflags
2266
add_asflags $cpuflags
2267

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

    
2281
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2282
check_cflags -std=c99
2283
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2284
#include <stdlib.h>
2285
EOF
2286
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2287
#include <stdlib.h>
2288
EOF
2289

    
2290
check_host_cflags -std=c99
2291

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

    
2307
enable $subarch
2308
enabled spic && enable pic
2309

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

    
2468
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2469

    
2470
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2471

    
2472
set_default $PATHS_LIST
2473

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

    
2485
disabled static && LIBNAME=""
2486

    
2487
die_license_disabled() {
2488
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2489
}
2490

    
2491
die_license_disabled gpl libx264
2492
die_license_disabled gpl libxavs
2493
die_license_disabled gpl libxvid
2494
die_license_disabled gpl postproc
2495
die_license_disabled gpl x11grab
2496

    
2497
die_license_disabled nonfree libfaac
2498

    
2499
die_license_disabled version3 libopencore_amrnb
2500
die_license_disabled version3 libopencore_amrwb
2501

    
2502
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2503

    
2504
disabled optimizations || check_cflags -fomit-frame-pointer
2505

    
2506
enable_pic() {
2507
    enable pic
2508
    add_cppflags -DPIC
2509
    add_cflags   -fPIC
2510
    add_asflags  -fPIC
2511
}
2512

    
2513
enabled pic && enable_pic
2514

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

    
2521
check_cc <<EOF && enable inline_asm
2522
void foo(void) { __asm__ volatile ("" ::); }
2523
EOF
2524

    
2525
_restrict=
2526
for restrict_keyword in restrict __restrict__ __restrict; do
2527
    check_cc <<EOF && _restrict=$restrict_keyword && break
2528
void foo(char * $restrict_keyword p);
2529
EOF
2530
done
2531

    
2532
check_cc <<EOF && enable attribute_packed
2533
struct { int x; } __attribute__((packed)) x;
2534
EOF
2535

    
2536
check_cc <<EOF && enable attribute_may_alias
2537
union { int x; } __attribute__((may_alias)) x;
2538
EOF
2539

    
2540
check_cc <<EOF || die "endian test failed"
2541
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2542
EOF
2543
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2544

    
2545
if enabled alpha; then
2546

    
2547
    check_cflags -mieee
2548

    
2549
elif enabled arm; then
2550

    
2551
    check_cflags -marm
2552
    nogas=die
2553

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

    
2567
    # We have to check if pld is a nop and disable it.
2568
    check_asm pld '"pld [r0]"'
2569

    
2570
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2571
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2572
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2573
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2574
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2575
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2576

    
2577
    enabled_all armv6t2 shared !pic && enable_pic
2578

    
2579
elif enabled mips; then
2580

    
2581
    check_asm loongson '"dmult.g $1, $2, $3"'
2582
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2583

    
2584
elif enabled ppc; then
2585

    
2586
    enable local_aligned_8 local_aligned_16
2587

    
2588
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2589
    check_asm ibm_asm   '"add 0, 0, 0"'
2590
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2591
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2592

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

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

    
2610
        # check if our compiler supports braces for vector declarations
2611
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2612
$inc_altivec_h
2613
int main (void) { (vector int) {1}; return 0; }
2614
EOF
2615
    fi
2616

    
2617
elif enabled sparc; then
2618

    
2619
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2620
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2621

    
2622
elif enabled x86; then
2623

    
2624
    enable local_aligned_8 local_aligned_16
2625

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

    
2638
    # check whether EBX is available on x86
2639
    check_asm ebx_available '""::"b"(0)' &&
2640
        check_asm ebx_available '"":::"%ebx"'
2641

    
2642
    # check whether xmm clobbers are supported
2643
    check_asm xmm_clobbers '"":::"%xmm0"'
2644

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

    
2657
    # check whether binutils is new enough to compile SSSE3/MMX2
2658
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2659
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2660

    
2661
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2662

    
2663
    if ! disabled_any asm mmx yasm; then
2664
        if check_cmd $yasmexe --version; then
2665
            enabled x86_64 && yasm_extra="-m amd64"
2666
            yasm_debug="-g dwarf2"
2667
        elif check_cmd nasm -v; then
2668
            yasmexe=nasm
2669
            yasm_debug="-g -F dwarf"
2670
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2671
        fi
2672

    
2673
        YASMFLAGS="-f $objformat $yasm_extra"
2674
        enabled pic               && append YASMFLAGS "-DPIC"
2675
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2676
        case "$objformat" in
2677
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2678
        esac
2679

    
2680
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2681
            die "yasm not found, use --disable-yasm for a crippled build"
2682
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2683
    fi
2684

    
2685
    case "$cpu" in
2686
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2687
            disable fast_clz
2688
        ;;
2689
    esac
2690

    
2691
fi
2692

    
2693
if enabled asm; then
2694
    as=${gas:=$as}
2695
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2696
        $nogas "GNU assembler not found, install gas-preprocessor"
2697
fi
2698

    
2699
if check_func dlopen; then
2700
    ldl=
2701
elif check_func dlopen -ldl; then
2702
    ldl=-ldl
2703
fi
2704

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

    
2731
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2732
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2733

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

    
2756
check_header conio.h
2757
check_header dlfcn.h
2758
check_header dxva2api.h
2759
check_header malloc.h
2760
check_header poll.h
2761
check_header sys/mman.h
2762
check_header sys/resource.h
2763
check_header sys/select.h
2764
check_header termios.h
2765
check_header vdpau/vdpau.h
2766
check_header vdpau/vdpau_x11.h
2767
check_header X11/extensions/XvMClib.h
2768

    
2769
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2770

    
2771
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2772
     enabled_any $need_memalign ; then
2773
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2774
fi
2775

    
2776
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2777
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2778

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

    
2798
for thread in $THREADS_LIST; do
2799
    if enabled $thread; then
2800
        test -n "$thread_type" &&
2801
            die "ERROR: Only one thread type must be selected." ||
2802
            thread_type="$thread"
2803
    fi
2804
done
2805

    
2806
check_lib math.h sin -lm
2807
disabled vaapi || check_lib va/va.h vaInitialize -lva
2808

    
2809
check_mathfunc exp2
2810
check_mathfunc exp2f
2811
check_mathfunc llrint
2812
check_mathfunc llrintf
2813
check_mathfunc log2
2814
check_mathfunc log2f
2815
check_mathfunc lrint
2816
check_mathfunc lrintf
2817
check_mathfunc round
2818
check_mathfunc roundf
2819
check_mathfunc truncf
2820

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

    
2855
# libdc1394 check
2856
if enabled libdc1394; then
2857
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2858
        enable libdc1394_2; } ||
2859
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2860
        enable libdc1394_1; } ||
2861
    die "ERROR: No version of libdc1394 found "
2862
fi
2863

    
2864
SDL_CONFIG="${cross_prefix}sdl-config"
2865
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2866
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2867
    sdl_libs=$("${SDL_CONFIG}" --libs)
2868
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2869
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2870
    enable sdl &&
2871
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2872
fi
2873

    
2874
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2875

    
2876
check_header linux/videodev.h
2877
check_header linux/videodev2.h
2878
check_header sys/videoio.h
2879

    
2880
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2881
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2882
# w32api 3.12 had it defined wrong
2883
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2884

    
2885
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2886
{ check_header dev/bktr/ioctl_meteor.h &&
2887
  check_header dev/bktr/ioctl_bt848.h; } ||
2888
{ check_header machine/ioctl_meteor.h &&
2889
  check_header machine/ioctl_bt848.h; } ||
2890
{ check_header dev/video/meteor/ioctl_meteor.h &&
2891
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2892
check_header dev/ic/bt8xx.h
2893

    
2894
check_header sys/soundcard.h
2895
check_header soundcard.h
2896

    
2897
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2898

    
2899
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2900

    
2901
enabled x11grab                         &&
2902
check_header X11/Xlib.h                 &&
2903
check_header X11/extensions/XShm.h      &&
2904
check_header X11/extensions/Xfixes.h    &&
2905
check_func XOpenDisplay -lX11           &&
2906
check_func XShmCreateImage -lX11 -lXext &&
2907
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2908

    
2909
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2910
check_cpp_condition \
2911
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2912
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2913
      disable vdpau; }
2914
fi
2915

    
2916
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2917

    
2918
# add some useful compiler flags if supported
2919
check_cflags -Wdeclaration-after-statement
2920
check_cflags -Wall
2921
check_cflags -Wno-parentheses
2922
check_cflags -Wno-switch
2923
check_cflags -Wdisabled-optimization
2924
check_cflags -Wpointer-arith
2925
check_cflags -Wredundant-decls
2926
check_cflags -Wno-pointer-sign
2927
check_cflags -Wcast-qual
2928
check_cflags -Wwrite-strings
2929
check_cflags -Wtype-limits
2930
check_cflags -Wundef
2931
check_cflags -Wmissing-prototypes
2932
enabled extra_warnings && check_cflags -Winline
2933

    
2934
# add some linker flags
2935
check_ldflags -Wl,--warn-common
2936
check_ldflags -Wl,--as-needed
2937
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'
2938
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2939

    
2940
echo "X{};" > $TMPV
2941
if test_ldflags -Wl,--version-script,$TMPV; then
2942
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2943
    check_cc <<EOF && enable symver_asm_label
2944
void ff_foo(void) __asm__ ("av_foo@VERSION");
2945
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2946
EOF
2947
    check_cc <<EOF && enable symver_gnu_asm
2948
__asm__(".symver ff_foo,av_foo@VERSION");
2949
void ff_foo(void) {}
2950
EOF
2951
fi
2952

    
2953
if enabled small; then
2954
    add_cflags $size_cflags
2955
    optimizations="small"
2956
elif enabled optimizations; then
2957
    add_cflags $speed_cflags
2958
else
2959
    add_cflags $noopt_cflags
2960
fi
2961
check_cflags -fno-math-errno
2962
check_cflags -fno-signed-zeros
2963

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

    
3014
enabled_any $THREADS_LIST      && enable threads
3015

    
3016
check_deps $CONFIG_LIST       \
3017
           $CONFIG_EXTRA      \
3018
           $HAVE_LIST         \
3019
           $DECODER_LIST      \
3020
           $ENCODER_LIST      \
3021
           $HWACCEL_LIST      \
3022
           $PARSER_LIST       \
3023
           $BSF_LIST          \
3024
           $DEMUXER_LIST      \
3025
           $MUXER_LIST        \
3026
           $FILTER_LIST       \
3027
           $INDEV_LIST        \
3028
           $OUTDEV_LIST       \
3029
           $PROTOCOL_LIST     \
3030
           $ACODEC_TESTS      \
3031
           $VCODEC_TESTS      \
3032
           $LAVF_TESTS        \
3033
           $LAVFI_TESTS       \
3034
           $SEEK_TESTS        \
3035

    
3036
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3037

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

    
3119
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3120
    echo "Enabled ${type}s:"
3121
    eval list=\$$(toupper $type)_LIST
3122
    print_enabled '_*' $list | sort | pr -3 -t
3123
    echo
3124
done
3125

    
3126
license="LGPL version 2.1 or later"
3127
if enabled nonfree; then
3128
    license="nonfree and unredistributable"
3129
elif enabled gplv3; then
3130
    license="GPL version 3 or later"
3131
elif enabled lgplv3; then
3132
    license="LGPL version 3 or later"
3133
elif enabled gpl; then
3134
    license="GPL version 2 or later"
3135
fi
3136

    
3137
echo "License: $license"
3138

    
3139
echo "Creating config.mak and config.h..."
3140

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

    
3178
enabled stripping || strip="echo skipping strip"
3179

    
3180
config_files="$TMPH config.mak"
3181

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

    
3255
get_version(){
3256
    name=$1
3257
    file=$source_path/$2
3258
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3259
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3260
    lcname=$(tolower $name)
3261
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3262
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3263
}
3264

    
3265
get_version LIBSWSCALE  libswscale/swscale.h
3266
get_version LIBPOSTPROC libpostproc/postprocess.h
3267
get_version LIBAVCODEC  libavcodec/avcodec.h
3268
get_version LIBAVDEVICE libavdevice/avdevice.h
3269
get_version LIBAVFORMAT libavformat/version.h
3270
get_version LIBAVUTIL   libavutil/avutil.h
3271
get_version LIBAVFILTER libavfilter/avfilter.h
3272

    
3273
cat > $TMPH <<EOF
3274
/* Automatically generated by configure - do not modify! */
3275
#ifndef FFMPEG_CONFIG_H
3276
#define FFMPEG_CONFIG_H
3277
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3278
#define FFMPEG_LICENSE "$(c_escape $license)"
3279
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3280
#define CC_TYPE "$cc_type"
3281
#define CC_VERSION $cc_version
3282
#define restrict $_restrict
3283
#define EXTERN_PREFIX "${extern_prefix}"
3284
#define EXTERN_ASM ${extern_prefix}
3285
#define SLIBSUF "$SLIBSUF"
3286
EOF
3287

    
3288
test -n "$malloc_prefix" &&
3289
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3290

    
3291
if enabled small || disabled optimizations; then
3292
    echo "#undef  av_always_inline"  >> $TMPH
3293
    if enabled small; then
3294
        echo "#define av_always_inline inline"  >> $TMPH
3295
    else
3296
        echo "#define av_always_inline av_unused"  >> $TMPH
3297
    fi
3298
fi
3299

    
3300
if enabled yasm; then
3301
    append config_files $TMPASM
3302
    printf '' >$TMPASM
3303
fi
3304

    
3305
print_config ARCH_   "$config_files" $ARCH_LIST
3306
print_config HAVE_   "$config_files" $HAVE_LIST
3307
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3308
                                     $CONFIG_EXTRA      \
3309
                                     $DECODER_LIST      \
3310
                                     $ENCODER_LIST      \
3311
                                     $HWACCEL_LIST      \
3312
                                     $PARSER_LIST       \
3313
                                     $BSF_LIST          \
3314
                                     $DEMUXER_LIST      \
3315
                                     $MUXER_LIST        \
3316
                                     $FILTER_LIST       \
3317
                                     $PROTOCOL_LIST     \
3318
                                     $INDEV_LIST        \
3319
                                     $OUTDEV_LIST       \
3320

    
3321
cat >>config.mak <<EOF
3322
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3323
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3324
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3325
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3326
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3327
EOF
3328

    
3329
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3330
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3331

    
3332
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3333
cp_if_changed $TMPH config.h
3334
touch .config
3335

    
3336
enabled yasm && cp_if_changed $TMPASM config.asm
3337

    
3338
cat > $TMPH <<EOF
3339
/* Generated by ffconf */
3340
#ifndef AVUTIL_AVCONFIG_H
3341
#define AVUTIL_AVCONFIG_H
3342
EOF
3343

    
3344
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3345

    
3346
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3347

    
3348
cp_if_changed $TMPH libavutil/avconfig.h
3349

    
3350
test -n "$WARNINGS" && printf "\n$WARNINGS"
3351

    
3352
# build pkg-config files
3353

    
3354
pkgconfig_generate(){
3355
name=$1
3356
shortname=${name#lib}${build_suffix}
3357
comment=$2
3358
version=$3
3359
libs=$4
3360
requires=$5
3361
enabled ${name#lib} || return 0
3362
cat <<EOF > $name/$name.pc
3363
prefix=$prefix
3364
exec_prefix=\${prefix}
3365
libdir=$libdir
3366
includedir=$incdir
3367

    
3368
Name: $name
3369
Description: $comment
3370
Version: $version
3371
Requires: $(enabled shared || echo $requires)
3372
Requires.private: $(enabled shared && echo $requires)
3373
Conflicts:
3374
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3375
Libs.private: $(enabled shared && echo $libs)
3376
Cflags: -I\${includedir}
3377
EOF
3378
cat <<EOF > $name/$name-uninstalled.pc
3379
prefix=
3380
exec_prefix=
3381
libdir=\${pcfiledir}
3382
includedir=${source_path}
3383

    
3384
Name: $name
3385
Description: $comment
3386
Version: $version
3387
Requires: $requires
3388
Conflicts:
3389
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3390
Cflags: -I\${includedir}
3391
EOF
3392
}
3393

    
3394
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3395
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs"
3396
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3397
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3398
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3399
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3400
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"