Statistics
| Branch: | Revision:

ffmpeg / configure @ e0099fda

History | View | Annotate | Download (100 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2044
add_cflags $extra_cflags
2045
add_asflags $extra_cflags
2046

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

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

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

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

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

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

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

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

    
2173
elif enabled x86; then
2174

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

    
2199
elif enabled sparc; then
2200

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

    
2211
elif enabled arm; then
2212

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

    
2231
elif enabled alpha; then
2232

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

    
2235
elif enabled bfin; then
2236

    
2237
    cpuflags="-mcpu=$cpu"
2238

    
2239
elif enabled mips; then
2240

    
2241
    cpuflags="-march=$cpu"
2242

    
2243
elif enabled avr32; then
2244

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

    
2264
fi
2265

    
2266
add_cflags $cpuflags
2267
add_asflags $cpuflags
2268

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

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

    
2291
check_host_cflags -std=c99
2292

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

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

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

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

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

    
2473
set_default $PATHS_LIST
2474

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

    
2486
disabled static && LIBNAME=""
2487

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

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

    
2498
die_license_disabled nonfree libfaac
2499

    
2500
die_license_disabled version3 libopencore_amrnb
2501
die_license_disabled version3 libopencore_amrwb
2502

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

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

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

    
2514
enabled pic && enable_pic
2515

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

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

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

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

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

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

    
2546
if enabled alpha; then
2547

    
2548
    check_cflags -mieee
2549

    
2550
elif enabled arm; then
2551

    
2552
    check_cflags -marm
2553
    nogas=die
2554

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

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

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

    
2578
    enabled_all armv6t2 shared !pic && enable_pic
2579

    
2580
elif enabled mips; then
2581

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

    
2585
elif enabled ppc; then
2586

    
2587
    enable local_aligned_8 local_aligned_16
2588

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

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

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

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

    
2618
elif enabled sparc; then
2619

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

    
2623
elif enabled x86; then
2624

    
2625
    enable local_aligned_8 local_aligned_16
2626

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

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

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

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

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

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

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

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

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

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

    
2691
fi
2692

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

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

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

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

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

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

    
2769
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2770

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2934
# add some linker flags
2935
check_ldflags -Wl,--warn-common
2936
check_ldflags -Wl,--as-needed
2937
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2938
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2939

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

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

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

    
3014
enabled_any $THREADS_LIST      && enable threads
3015

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

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

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

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

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

    
3137
echo "License: $license"
3138

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

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

    
3182
enabled stripping || strip="echo skipping strip"
3183

    
3184
config_files="$TMPH config.mak"
3185

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

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

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

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

    
3293
test -n "$malloc_prefix" &&
3294
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3295

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

    
3305
if enabled yasm; then
3306
    append config_files $TMPASM
3307
    printf '' >$TMPASM
3308
fi
3309

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

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

    
3334
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3335
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3336

    
3337
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3338
cp_if_changed $TMPH config.h
3339
touch .config
3340

    
3341
enabled yasm && cp_if_changed $TMPASM config.asm
3342

    
3343
cat > $TMPH <<EOF
3344
/* Generated by ffconf */
3345
#ifndef AVUTIL_AVCONFIG_H
3346
#define AVUTIL_AVCONFIG_H
3347
EOF
3348

    
3349
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3350

    
3351
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3352

    
3353
cp_if_changed $TMPH libavutil/avconfig.h
3354

    
3355
test -n "$WARNINGS" && printf "\n$WARNINGS"
3356

    
3357
# build pkg-config files
3358

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

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

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

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