Statistics
| Branch: | Revision:

ffmpeg / configure @ 8429368d

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

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

    
192
Advanced options (experts only):
193
  --source-path=PATH       path to source code [$source_path]
194
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
195
  --enable-cross-compile   assume a cross-compiler is used
196
  --sysroot=PATH           root of cross-build tree
197
  --sysinclude=PATH        location of cross-build system headers
198
  --target-os=OS           compiler targets OS [$target_os]
199
  --target-exec=CMD        command to run executables on target
200
  --target-path=DIR        path to view of build directory on target
201
  --nm=NM                  use nm tool
202
  --ar=AR                  use archive tool AR [$ar_default]
203
  --as=AS                  use assembler AS [$as_default]
204
  --cc=CC                  use C compiler CC [$cc_default]
205
  --ld=LD                  use linker LD
206
  --host-cc=HOSTCC         use host C compiler HOSTCC
207
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
208
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
209
  --host-libs=HLIBS        use libs HLIBS when linking for host
210
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
211
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
212
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
213
  --extra-version=STRING   version string suffix []
214
  --build-suffix=SUFFIX    library name suffix []
215
  --arch=ARCH              select architecture [$arch]
216
  --cpu=CPU                select the minimum required CPU (affects
217
                           instruction selection, may crash on older CPUs)
218
  --disable-asm            disable all assembler optimizations
219
  --disable-altivec        disable AltiVec optimizations
220
  --disable-amd3dnow       disable 3DNow! optimizations
221
  --disable-amd3dnowext    disable 3DNow! extended optimizations
222
  --disable-mmx            disable MMX optimizations
223
  --disable-mmx2           disable MMX2 optimizations
224
  --disable-sse            disable SSE optimizations
225
  --disable-ssse3          disable SSSE3 optimizations
226
  --disable-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
    avcore
875
    avdevice
876
    avfilter
877
    avformat
878
    avisynth
879
    bzlib
880
    dct
881
    doc
882
    dwt
883
    dxva2
884
    fastdiv
885
    ffmpeg
886
    ffplay
887
    ffprobe
888
    ffserver
889
    fft
890
    frei0r
891
    golomb
892
    gpl
893
    gray
894
    h264dsp
895
    h264pred
896
    hardcoded_tables
897
    huffman
898
    libdc1394
899
    libdirac
900
    libfaac
901
    libgsm
902
    libmp3lame
903
    libnut
904
    libopencore_amrnb
905
    libopencore_amrwb
906
    libopencv
907
    libopenjpeg
908
    librtmp
909
    libschroedinger
910
    libspeex
911
    libtheora
912
    libvorbis
913
    libvpx
914
    libx264
915
    libxavs
916
    libxvid
917
    lpc
918
    lsp
919
    mdct
920
    memalign_hack
921
    mlib
922
    mpegaudio_hp
923
    network
924
    nonfree
925
    pic
926
    postproc
927
    rdft
928
    rtpdec
929
    runtime_cpudetect
930
    shared
931
    small
932
    sram
933
    static
934
    swscale
935
    swscale_alpha
936
    vaapi
937
    vdpau
938
    version3
939
    x11grab
940
    zlib
941
"
942

    
943
THREADS_LIST='
944
    pthreads
945
    w32threads
946
'
947

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

    
972
ARCH_EXT_LIST='
973
    altivec
974
    amd3dnow
975
    amd3dnowext
976
    armv5te
977
    armv6
978
    armv6t2
979
    armvfp
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

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

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

    
1197
symver_if_any="symver_asm_label symver_gnu_asm"
1198

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

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

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

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

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

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

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

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

    
1424
# filters
1425
blackframe_filter_deps="gpl"
1426
cropdetect_filter_deps="gpl"
1427
frei0r_filter_deps="frei0r dlopen strtok_r"
1428
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1429
hqdn3d_filter_deps="gpl"
1430
mp_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 avcore
1594
enable avdevice
1595
enable avfilter
1596
enable avformat
1597
enable avutil
1598
enable asm
1599
enable debug
1600
enable doc
1601
enable fastdiv
1602
enable ffmpeg
1603
enable ffplay
1604
enable ffprobe
1605
enable ffserver
1606
enable mpegaudio_hp
1607
enable network
1608
enable optimizations
1609
enable protocols
1610
enable static
1611
enable stripping
1612
enable swscale
1613
enable swscale_alpha
1614

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

    
1629
CC_O='-o $@'
1630

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

    
1634
target_path='$(CURDIR)'
1635

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1781
set_default arch target_os
1782

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

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

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

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

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

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

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

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

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

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

    
1836
unset -f mktemp
1837

    
1838
chmod +x $TMPE
1839

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

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

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

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

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

    
2038
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2039
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2040

    
2041
add_cflags $extra_cflags
2042
add_asflags $extra_cflags
2043

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

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

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

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

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

    
2122
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2123
enable $arch
2124

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

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

    
2170
elif enabled x86; then
2171

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

    
2196
elif enabled sparc; then
2197

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

    
2208
elif enabled arm; then
2209

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

    
2228
elif enabled alpha; then
2229

    
2230
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2231

    
2232
elif enabled bfin; then
2233

    
2234
    cpuflags="-mcpu=$cpu"
2235

    
2236
elif enabled mips; then
2237

    
2238
    cpuflags="-march=$cpu"
2239

    
2240
elif enabled avr32; then
2241

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

    
2261
fi
2262

    
2263
add_cflags $cpuflags
2264
add_asflags $cpuflags
2265

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

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

    
2288
check_host_cflags -std=c99
2289

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

    
2305
enable $subarch
2306
enabled spic && enable pic
2307

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

    
2466
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2467

    
2468
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2469

    
2470
set_default $PATHS_LIST
2471

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

    
2483
disabled static && LIBNAME=""
2484

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

    
2489
die_license_disabled gpl libx264
2490
die_license_disabled gpl libxavs
2491
die_license_disabled gpl libxvid
2492
die_license_disabled gpl postproc
2493
die_license_disabled gpl x11grab
2494

    
2495
die_license_disabled nonfree libfaac
2496

    
2497
die_license_disabled version3 libopencore_amrnb
2498
die_license_disabled version3 libopencore_amrwb
2499

    
2500
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2501

    
2502
disabled optimizations || check_cflags -fomit-frame-pointer
2503

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

    
2511
enabled pic && enable_pic
2512

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

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

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

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

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

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

    
2543
if enabled alpha; then
2544

    
2545
    check_cflags -mieee
2546

    
2547
elif enabled arm; then
2548

    
2549
    check_cflags -marm
2550
    nogas=die
2551

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

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

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

    
2575
    enabled_all armv6t2 shared !pic && enable_pic
2576

    
2577
elif enabled mips; then
2578

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

    
2582
elif enabled ppc; then
2583

    
2584
    enable local_aligned_8 local_aligned_16
2585

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

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

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

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

    
2615
elif enabled sparc; then
2616

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

    
2620
elif enabled x86; then
2621

    
2622
    enable local_aligned_8 local_aligned_16
2623

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

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

    
2640
    # check whether xmm clobbers are supported
2641
    check_asm xmm_clobbers '"":::"%xmm0"'
2642

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

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

    
2659
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2660

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

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

    
2678
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2679
            die "yasm not found, use --disable-yasm for a crippled build"
2680
    fi
2681

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

    
2688
fi
2689

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

    
2696
if check_func dlopen; then
2697
    ldl=
2698
elif check_func dlopen -ldl; then
2699
    ldl=-ldl
2700
fi
2701

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

    
2728
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2729
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2730

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

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

    
2766
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2767

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

    
2773
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2774
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2775

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

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

    
2803
check_lib math.h sin -lm
2804
disabled vaapi || check_lib va/va.h vaInitialize -lva
2805

    
2806
check_mathfunc exp2
2807
check_mathfunc exp2f
2808
check_mathfunc llrint
2809
check_mathfunc llrintf
2810
check_mathfunc log2
2811
check_mathfunc log2f
2812
check_mathfunc lrint
2813
check_mathfunc lrintf
2814
check_mathfunc round
2815
check_mathfunc roundf
2816
check_mathfunc truncf
2817

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

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

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

    
2871
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2872

    
2873
check_header linux/videodev.h
2874
check_header linux/videodev2.h
2875
check_header sys/videoio.h
2876

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

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

    
2891
check_header sys/soundcard.h
2892
check_header soundcard.h
2893

    
2894
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2895

    
2896
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2897

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

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

    
2913
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2914

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

    
2931
# add some linker flags
2932
check_ldflags -Wl,--warn-common
2933
check_ldflags -Wl,--as-needed
2934
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)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2935
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2936

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

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

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

    
3011
enabled_any $THREADS_LIST      && enable threads
3012

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

    
3033
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3034

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

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

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

    
3134
echo "License: $license"
3135

    
3136
echo "Creating config.mak and config.h..."
3137

    
3138
# build tree in object directory if source path is different from current one
3139
if enabled source_path_used; then
3140
    DIRS="
3141
        doc
3142
        libavcodec
3143
        libavcodec/$arch
3144
        libavcore
3145
        libavdevice
3146
        libavfilter
3147
        libavfilter/$arch
3148
        libavfilter/libmpcodecs
3149
        libavfilter/libmpcodecs/libvo
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
        libavcore/Makefile
3167
        libavdevice/Makefile
3168
        libavfilter/Makefile
3169
        libavfilter/${arch}/Makefile
3170
        libavformat/Makefile
3171
        libavutil/Makefile
3172
        libpostproc/Makefile
3173
        libswscale/Makefile
3174
    "
3175
    map 'mkdir -p $v' $DIRS;
3176
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3177
fi
3178

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

    
3181
config_files="$TMPH config.mak"
3182

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

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

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

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

    
3290
test -n "$malloc_prefix" &&
3291
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3292

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

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

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

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

    
3331
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3332
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3333

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

    
3338
enabled yasm && cp_if_changed $TMPASM config.asm
3339

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

    
3346
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3347

    
3348
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3349

    
3350
cp_if_changed $TMPH libavutil/avconfig.h
3351

    
3352
test -n "$WARNINGS" && printf "\n$WARNINGS"
3353

    
3354
# build pkg-config files
3355

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

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

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

    
3396
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3397
pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3398
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3399
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3400
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3401
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3402
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3403
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"