Statistics
| Branch: | Revision:

ffmpeg / configure @ 3447f12d

History | View | Annotate | Download (95.2 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-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
168
                           and libraw1394 [no]
169
  --enable-libdirac        enable Dirac support via libdirac [no]
170
  --enable-libfaac         enable FAAC support via libfaac [no]
171
  --enable-libgsm          enable GSM support via libgsm [no]
172
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
173
  --enable-libnut          enable NUT (de)muxing via libnut,
174
                           native (de)muxer exists [no]
175
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
176
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
177
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
178
  --enable-libspeex        enable Speex decoding via libspeex [no]
179
  --enable-libtheora       enable Theora encoding via libtheora [no]
180
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
181
                           native implementation exists [no]
182
  --enable-libvpx          enable VP8 support via libvpx [no]
183
  --enable-libx264         enable H.264 encoding via x264 [no]
184
  --enable-libxavs         enable AVS encoding via xavs [no]
185
  --enable-libxvid         enable Xvid encoding via xvidcore,
186
                           native MPEG-4/Xvid encoder exists [no]
187
  --enable-mlib            enable Sun medialib [no]
188
  --enable-zlib            enable zlib [autodetect]
189

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

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

    
245
NOTE: Object files are built at the place where configure is launched.
246
EOF
247
  exit 0
248
}
249

    
250
quotes='""'
251

    
252
log(){
253
    echo "$@" >> $logfile
254
}
255

    
256
log_file(){
257
    log BEGIN $1
258
    pr -n -t $1 >> $logfile
259
    log END $1
260
}
261

    
262
echolog(){
263
    log "$@"
264
    echo "$@"
265
}
266

    
267
warn(){
268
    log "WARNING: $*"
269
    WARNINGS="${WARNINGS}WARNING: $*\n"
270
}
271

    
272
die(){
273
    echolog "$@"
274
    cat <<EOF
275

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

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

    
299
tolower(){
300
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
301
}
302

    
303
c_escape(){
304
    echo "$*" | sed 's/["\\]/\\\0/g'
305
}
306

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

    
313
filter(){
314
    pat=$1
315
    shift
316
    for v; do
317
        eval "case $v in $pat) echo $v ;; esac"
318
    done
319
}
320

    
321
map(){
322
    m=$1
323
    shift
324
    for v; do eval $m; done
325
}
326

    
327
set_all(){
328
    value=$1
329
    shift
330
    for var in $*; do
331
        eval $var=$value
332
    done
333
}
334

    
335
set_weak(){
336
    value=$1
337
    shift
338
    for var; do
339
        eval : \${$var:=$value}
340
    done
341
}
342

    
343
pushvar(){
344
    for var in $*; do
345
        eval level=\${${var}_level:=0}
346
        eval ${var}_${level}="\$$var"
347
        eval ${var}_level=$(($level+1))
348
    done
349
}
350

    
351
popvar(){
352
    for var in $*; do
353
        eval level=\${${var}_level:-0}
354
        test $level = 0 && continue
355
        eval level=$(($level-1))
356
        eval $var="\${${var}_${level}}"
357
        eval ${var}_level=$level
358
        eval unset ${var}_${level}
359
    done
360
}
361

    
362
enable(){
363
    set_all yes $*
364
}
365

    
366
disable(){
367
    set_all no $*
368
}
369

    
370
enable_weak(){
371
    set_weak yes $*
372
}
373

    
374
disable_weak(){
375
    set_weak no $*
376
}
377

    
378
enable_safe(){
379
    for var; do
380
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
381
    done
382
}
383

    
384
disable_safe(){
385
    for var; do
386
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
387
    done
388
}
389

    
390
do_enable_deep(){
391
    for var; do
392
        enabled $var && continue
393
        eval sel="\$${var}_select"
394
        eval sgs="\$${var}_suggest"
395
        pushvar var sgs
396
        enable_deep $sel
397
        popvar sgs
398
        enable_deep_weak $sgs
399
        popvar var
400
    done
401
}
402

    
403
enable_deep(){
404
    do_enable_deep $*
405
    enable $*
406
}
407

    
408
enable_deep_weak(){
409
    do_enable_deep $*
410
    enable_weak $*
411
}
412

    
413
enabled(){
414
    test "${1#!}" = "$1" && op== || op=!=
415
    eval test "x\$${1#!}" $op "xyes"
416
}
417

    
418
disabled(){
419
    test "${1#!}" = "$1" && op== || op=!=
420
    eval test "x\$${1#!}" $op "xno"
421
}
422

    
423
enabled_all(){
424
    for opt; do
425
        enabled $opt || return 1
426
    done
427
}
428

    
429
disabled_all(){
430
    for opt; do
431
        disabled $opt || return 1
432
    done
433
}
434

    
435
enabled_any(){
436
    for opt; do
437
        enabled $opt && return 0
438
    done
439
}
440

    
441
disabled_any(){
442
    for opt; do
443
        disabled $opt && return 0
444
    done
445
    return 1
446
}
447

    
448
set_default(){
449
    for opt; do
450
        eval : \${$opt:=\$${opt}_default}
451
    done
452
}
453

    
454
is_in(){
455
    value=$1
456
    shift
457
    for var in $*; do
458
        [ $var = $value ] && return 0
459
    done
460
    return 1
461
}
462

    
463
check_deps(){
464
    for cfg; do
465
        cfg="${cfg#!}"
466
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
467
        disabled ${cfg}_checking && continue
468
        enable ${cfg}_checking
469

    
470
        eval dep_all="\$${cfg}_deps"
471
        eval dep_any="\$${cfg}_deps_any"
472
        eval dep_sel="\$${cfg}_select"
473
        eval dep_sgs="\$${cfg}_suggest"
474
        eval dep_ifa="\$${cfg}_if"
475
        eval dep_ifn="\$${cfg}_if_any"
476

    
477
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
478
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
479
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
480

    
481
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
482
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
483
        enabled_all  $dep_all || disable $cfg
484
        enabled_any  $dep_any || disable $cfg
485
        disabled_any $dep_sel && disable $cfg
486

    
487
        if enabled $cfg; then
488
            eval dep_extralibs="\$${cfg}_extralibs"
489
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
490
            enable_deep $dep_sel
491
            enable_deep_weak $dep_sgs
492
        fi
493

    
494
        disable ${cfg}_checking
495
    done
496
}
497

    
498
print_config(){
499
    pfx=$1
500
    header=$2
501
    makefile=$3
502
    shift 3
503
    for cfg; do
504
        ucname="$(toupper $cfg)"
505
        if enabled $cfg; then
506
            echo "#define ${pfx}${ucname} 1" >> $header
507
            echo "${pfx}${ucname}=yes" >> $makefile
508
        else
509
            echo "#define ${pfx}${ucname} 0" >> $header
510
            echo "!${pfx}${ucname}=yes" >> $makefile
511
        fi
512
    done
513
}
514

    
515
print_enabled(){
516
    test "$1" = -n && end=" " && shift || end="\n"
517
    suf=$1
518
    shift
519
    for v; do
520
        enabled $v && printf "%s$end" ${v%$suf};
521
    done
522
}
523

    
524
append(){
525
    var=$1
526
    shift
527
    eval "$var=\"\$$var $*\""
528
}
529

    
530
prepend(){
531
    var=$1
532
    shift
533
    eval "$var=\"$* \$$var\""
534
}
535

    
536
add_cppflags(){
537
    append CPPFLAGS $($filter_cppflags "$@")
538
}
539

    
540
add_cflags(){
541
    append CFLAGS $($filter_cflags "$@")
542
}
543

    
544
add_asflags(){
545
    append ASFLAGS $($filter_asflags "$@")
546
}
547

    
548
add_ldflags(){
549
    append LDFLAGS "$@"
550
}
551

    
552
add_extralibs(){
553
    prepend extralibs "$@"
554
}
555

    
556
check_cmd(){
557
    log "$@"
558
    "$@" >> $logfile 2>&1
559
}
560

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

    
568
check_cpp(){
569
    log check_cpp "$@"
570
    cat > $TMPC
571
    log_file $TMPC
572
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
573
}
574

    
575
check_as(){
576
    log check_as "$@"
577
    cat > $TMPC
578
    log_file $TMPC
579
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
580
}
581

    
582
check_asm(){
583
    log check_asm "$@"
584
    name="$1"
585
    code="$2"
586
    shift 2
587
    disable $name
588
    check_as "$@" <<EOF && enable $name
589
void foo(void){ __asm__ volatile($code); }
590
EOF
591
}
592

    
593
check_yasm(){
594
    log check_yasm "$@"
595
    echo "$1" > $TMPS
596
    log_file $TMPS
597
    shift 1
598
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
599
}
600

    
601
check_ld(){
602
    log check_ld "$@"
603
    flags=''
604
    libs=''
605
    for f; do
606
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
607
    done
608
    check_cc $($filter_cflags $flags) || return
609
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
610
}
611

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

    
620
check_cflags(){
621
    log check_cflags "$@"
622
    set -- $($filter_cflags "$@")
623
    check_cc "$@" <<EOF && append CFLAGS "$@"
624
int x;
625
EOF
626
}
627

    
628
test_ldflags(){
629
    log test_ldflags "$@"
630
    check_ld "$@" <<EOF
631
int main(void){ return 0; }
632
EOF
633
}
634

    
635
check_ldflags(){
636
    log check_ldflags "$@"
637
    test_ldflags "$@" && add_ldflags "$@"
638
}
639

    
640
check_header(){
641
    log check_header "$@"
642
    header=$1
643
    shift
644
    disable_safe $header
645
    check_cpp "$@" <<EOF && enable_safe $header
646
#include <$header>
647
int x;
648
EOF
649
}
650

    
651
check_func(){
652
    log check_func "$@"
653
    func=$1
654
    shift
655
    disable $func
656
    check_ld "$@" <<EOF && enable $func
657
extern int $func();
658
int main(void){ $func(); }
659
EOF
660
}
661

    
662
check_mathfunc(){
663
    log check_mathfunc "$@"
664
    func=$1
665
    shift
666
    disable $func
667
    check_ld "$@" <<EOF && enable $func
668
#include <math.h>
669
float foo(float f) { return $func(f); }
670
int main(void){ return 0; }
671
EOF
672
}
673

    
674
check_func_headers(){
675
    log check_func_headers "$@"
676
    headers=$1
677
    func=$2
678
    shift 2
679
    disable $func
680
    incs=""
681
    for hdr in $headers; do
682
        incs="$incs
683
#include <$hdr>"
684
    done
685
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
686
$incs
687
int main(int argc, char **argv){
688
    return (long) $func;
689
}
690
EOF
691
}
692

    
693
check_cpp_condition(){
694
    log check_cpp_condition "$@"
695
    header=$1
696
    condition=$2
697
    shift 2
698
    check_cpp $($filter_cppflags "$@") <<EOF
699
#include <$header>
700
#if !($condition)
701
#error "unsatisfied condition: $condition"
702
#endif
703
EOF
704
}
705

    
706
check_lib(){
707
    log check_lib "$@"
708
    header="$1"
709
    func="$2"
710
    shift 2
711
    check_header $header && check_func $func "$@" && add_extralibs "$@"
712
}
713

    
714
check_lib2(){
715
    log check_lib2 "$@"
716
    headers="$1"
717
    func="$2"
718
    shift 2
719
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
720
}
721

    
722
check_exec(){
723
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
724
}
725

    
726
check_exec_crash(){
727
    code=$(cat)
728

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

    
735
    (check_exec "$@") >> $logfile 2>&1 <<EOF
736
#include <signal.h>
737
static void sighandler(int sig){
738
    raise(SIGTERM);
739
}
740
int main(void){
741
    signal(SIGILL, sighandler);
742
    signal(SIGFPE, sighandler);
743
    signal(SIGSEGV, sighandler);
744
#ifdef SIGBUS
745
    signal(SIGBUS, sighandler);
746
#endif
747
    { $code }
748
}
749
EOF
750
}
751

    
752
check_type(){
753
    log check_type "$@"
754
    headers=$1
755
    type=$2
756
    shift 2
757
    disable_safe "$type"
758
    incs=""
759
    for hdr in $headers; do
760
        incs="$incs
761
#include <$hdr>"
762
    done
763
    check_cc "$@" <<EOF && enable_safe "$type"
764
$incs
765
$type v;
766
EOF
767
}
768

    
769
check_struct(){
770
    log check_type "$@"
771
    headers=$1
772
    struct=$2
773
    member=$3
774
    shift 3
775
    disable_safe "${struct}_${member}"
776
    incs=""
777
    for hdr in $headers; do
778
        incs="$incs
779
#include <$hdr>"
780
    done
781
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
782
$incs
783
const void *p = &(($struct *)0)->$member;
784
EOF
785
}
786

    
787
require(){
788
    name="$1"
789
    header="$2"
790
    func="$3"
791
    shift 3
792
    check_lib $header $func "$@" || die "ERROR: $name not found"
793
}
794

    
795
require2(){
796
    name="$1"
797
    headers="$2"
798
    func="$3"
799
    shift 3
800
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
801
}
802

    
803
check_host_cc(){
804
    log check_host_cc "$@"
805
    cat > $TMPC
806
    log_file $TMPC
807
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
808
}
809

    
810
check_host_cflags(){
811
    log check_host_cflags "$@"
812
    check_host_cc "$@" <<EOF && append host_cflags "$@"
813
int x;
814
EOF
815
}
816

    
817
apply(){
818
    file=$1
819
    shift
820
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
821
}
822

    
823
cp_if_changed(){
824
    cmp -s "$1" "$2" &&
825
        echo "$2 is unchanged" ||
826
        cp -f "$1" "$2"
827
}
828

    
829
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
830
# system-dependent things.
831

    
832
COMPONENT_LIST="
833
    bsfs
834
    decoders
835
    demuxers
836
    encoders
837
    filters
838
    hwaccels
839
    indevs
840
    muxers
841
    outdevs
842
    parsers
843
    protocols
844
"
845

    
846
CONFIG_LIST="
847
    $COMPONENT_LIST
848
    aandct
849
    avcodec
850
    avcore
851
    avdevice
852
    avfilter
853
    avformat
854
    avisynth
855
    bzlib
856
    dct
857
    doc
858
    dwt
859
    dxva2
860
    fastdiv
861
    ffmpeg
862
    ffplay
863
    ffprobe
864
    ffserver
865
    fft
866
    golomb
867
    gpl
868
    gray
869
    h264dsp
870
    hardcoded_tables
871
    huffman
872
    libdc1394
873
    libdirac
874
    libfaac
875
    libgsm
876
    libmp3lame
877
    libnut
878
    libopencore_amrnb
879
    libopencore_amrwb
880
    libopenjpeg
881
    librtmp
882
    libschroedinger
883
    libspeex
884
    libtheora
885
    libvorbis
886
    libvpx
887
    libx264
888
    libxavs
889
    libxvid
890
    lpc
891
    lsp
892
    mdct
893
    memalign_hack
894
    mlib
895
    mpegaudio_hp
896
    network
897
    nonfree
898
    pic
899
    postproc
900
    rdft
901
    runtime_cpudetect
902
    shared
903
    small
904
    sram
905
    static
906
    swscale
907
    swscale_alpha
908
    vaapi
909
    vdpau
910
    version3
911
    x11grab
912
    zlib
913
"
914

    
915
THREADS_LIST='
916
    pthreads
917
    w32threads
918
'
919

    
920
ARCH_LIST='
921
    alpha
922
    arm
923
    avr32
924
    avr32_ap
925
    avr32_uc
926
    bfin
927
    ia64
928
    m68k
929
    mips
930
    mips64
931
    parisc
932
    ppc
933
    ppc64
934
    s390
935
    sh4
936
    sparc
937
    sparc64
938
    tomi
939
    x86
940
    x86_32
941
    x86_64
942
'
943

    
944
ARCH_EXT_LIST='
945
    altivec
946
    amd3dnow
947
    amd3dnowext
948
    armv5te
949
    armv6
950
    armv6t2
951
    armvfp
952
    iwmmxt
953
    mmi
954
    mmx
955
    mmx2
956
    neon
957
    ppc4xx
958
    sse
959
    ssse3
960
    vis
961
'
962

    
963
HAVE_LIST_PUB='
964
    bigendian
965
    fast_unaligned
966
'
967

    
968
HAVE_LIST="
969
    $ARCH_EXT_LIST
970
    $HAVE_LIST_PUB
971
    $THREADS_LIST
972
    alsa_asoundlib_h
973
    altivec_h
974
    arpa_inet_h
975
    attribute_may_alias
976
    attribute_packed
977
    bswap
978
    closesocket
979
    cmov
980
    conio_h
981
    dcbzl
982
    dev_bktr_ioctl_bt848_h
983
    dev_bktr_ioctl_meteor_h
984
    dev_ic_bt8xx_h
985
    dev_video_meteor_ioctl_meteor_h
986
    dev_video_bktr_ioctl_bt848_h
987
    dlfcn_h
988
    dlopen
989
    dos_paths
990
    ebp_available
991
    ebx_available
992
    exp2
993
    exp2f
994
    fast_64bit
995
    fast_clz
996
    fast_cmov
997
    fcntl
998
    fork
999
    getaddrinfo
1000
    gethrtime
1001
    GetProcessMemoryInfo
1002
    GetProcessTimes
1003
    getrusage
1004
    gnu_as
1005
    struct_rusage_ru_maxrss
1006
    ibm_asm
1007
    inet_aton
1008
    inline_asm
1009
    isatty
1010
    ldbrx
1011
    libdc1394_1
1012
    libdc1394_2
1013
    llrint
1014
    llrintf
1015
    local_aligned_16
1016
    local_aligned_8
1017
    log2
1018
    log2f
1019
    loongson
1020
    lrint
1021
    lrintf
1022
    lzo1x_999_compress
1023
    machine_ioctl_bt848_h
1024
    machine_ioctl_meteor_h
1025
    malloc_h
1026
    memalign
1027
    mkstemp
1028
    pld
1029
    posix_memalign
1030
    round
1031
    roundf
1032
    sdl
1033
    sdl_video_size
1034
    setmode
1035
    socklen_t
1036
    soundcard_h
1037
    poll_h
1038
    setrlimit
1039
    strerror_r
1040
    struct_addrinfo
1041
    struct_ipv6_mreq
1042
    struct_sockaddr_in6
1043
    struct_sockaddr_sa_len
1044
    struct_sockaddr_storage
1045
    symver
1046
    symver_gnu_asm
1047
    symver_asm_label
1048
    sys_mman_h
1049
    sys_resource_h
1050
    sys_select_h
1051
    sys_soundcard_h
1052
    sys_videoio_h
1053
    ten_operands
1054
    termios_h
1055
    threads
1056
    truncf
1057
    vfp_args
1058
    VirtualAlloc
1059
    winsock2_h
1060
    xform_asm
1061
    yasm
1062
"
1063

    
1064
# options emitted with CONFIG_ prefix but not available on command line
1065
CONFIG_EXTRA="
1066
    avutil
1067
    gplv3
1068
    lgplv3
1069
"
1070

    
1071
CMDLINE_SELECT="
1072
    $ARCH_EXT_LIST
1073
    $CONFIG_LIST
1074
    $THREADS_LIST
1075
    asm
1076
    cross_compile
1077
    debug
1078
    extra_warnings
1079
    logging
1080
    optimizations
1081
    stripping
1082
    yasm
1083
"
1084

    
1085
PATHS_LIST='
1086
    bindir
1087
    datadir
1088
    incdir
1089
    libdir
1090
    mandir
1091
    prefix
1092
    shlibdir
1093
'
1094

    
1095
CMDLINE_SET="
1096
    $PATHS_LIST
1097
    ar
1098
    arch
1099
    as
1100
    build_suffix
1101
    cc
1102
    cpu
1103
    cross_prefix
1104
    dep_cc
1105
    extra_version
1106
    host_cc
1107
    host_cflags
1108
    host_ldflags
1109
    host_libs
1110
    host_os
1111
    ld
1112
    logfile
1113
    malloc_prefix
1114
    nm
1115
    samples
1116
    source_path
1117
    strip
1118
    sysinclude
1119
    sysroot
1120
    target_exec
1121
    target_os
1122
    target_path
1123
"
1124

    
1125
CMDLINE_APPEND="
1126
    extra_cflags
1127
"
1128

    
1129
# code dependency declarations
1130

    
1131
# architecture extensions
1132

    
1133
armv5te_deps="arm"
1134
armv6_deps="arm"
1135
armv6t2_deps="arm"
1136
armvfp_deps="arm"
1137
iwmmxt_deps="arm"
1138
neon_deps="arm"
1139

    
1140
mmi_deps="mips"
1141

    
1142
altivec_deps="ppc"
1143
ppc4xx_deps="ppc"
1144

    
1145
vis_deps="sparc"
1146

    
1147
x86_64_suggest="cmov fast_cmov"
1148
amd3dnow_deps="mmx"
1149
amd3dnowext_deps="amd3dnow"
1150
mmx_deps="x86"
1151
mmx2_deps="mmx"
1152
sse_deps="mmx"
1153
ssse3_deps="sse"
1154

    
1155
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1156
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1157
fast_unaligned_if_any="armv6 ppc x86"
1158

    
1159
need_memalign="altivec neon sse"
1160
inline_asm_deps="!tms470"
1161

    
1162
symver_if_any="symver_asm_label symver_gnu_asm"
1163

    
1164
# subsystems
1165
dct_select="rdft"
1166
mdct_select="fft"
1167
rdft_select="fft"
1168

    
1169
# decoders / encoders / hardware accelerators
1170
aac_decoder_select="mdct rdft"
1171
aac_encoder_select="mdct"
1172
ac3_decoder_select="mdct ac3_parser"
1173
alac_encoder_select="lpc"
1174
amrnb_decoder_select="lsp"
1175
atrac1_decoder_select="mdct"
1176
atrac3_decoder_select="mdct"
1177
binkaudio_dct_decoder_select="mdct rdft dct"
1178
binkaudio_rdft_decoder_select="mdct rdft"
1179
cavs_decoder_select="golomb"
1180
cook_decoder_select="mdct"
1181
cscd_decoder_suggest="zlib"
1182
dca_decoder_select="mdct"
1183
dnxhd_encoder_select="aandct"
1184
dxa_decoder_select="zlib"
1185
eac3_decoder_select="ac3_decoder"
1186
eamad_decoder_select="aandct"
1187
eatgq_decoder_select="aandct"
1188
eatqi_decoder_select="aandct"
1189
ffv1_decoder_select="golomb"
1190
flac_decoder_select="golomb"
1191
flac_encoder_select="golomb lpc"
1192
flashsv_decoder_select="zlib"
1193
flashsv_encoder_select="zlib"
1194
flv_decoder_select="h263_decoder"
1195
flv_encoder_select="h263_encoder"
1196
fraps_decoder_select="huffman"
1197
h261_encoder_select="aandct"
1198
h263_decoder_select="h263_parser"
1199
h263_encoder_select="aandct"
1200
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1201
h263i_decoder_select="h263_decoder"
1202
h263p_encoder_select="h263_encoder"
1203
h264_decoder_select="golomb h264dsp"
1204
h264_dxva2_hwaccel_deps="dxva2api_h"
1205
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1206
h264_vaapi_hwaccel_select="vaapi"
1207
h264_vdpau_decoder_select="vdpau h264_decoder"
1208
imc_decoder_select="fft mdct"
1209
jpegls_decoder_select="golomb"
1210
jpegls_encoder_select="golomb"
1211
ljpeg_encoder_select="aandct"
1212
loco_decoder_select="golomb"
1213
mjpeg_encoder_select="aandct"
1214
mlp_decoder_select="mlp_parser"
1215
mp1float_decoder_select="dct"
1216
mp2float_decoder_select="dct"
1217
mp3adufloat_decoder_select="dct"
1218
mp3float_decoder_select="dct"
1219
mp3on4float_decoder_select="dct"
1220
mpeg1video_encoder_select="aandct"
1221
mpeg2video_encoder_select="aandct"
1222
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1223
mpeg4_encoder_select="h263_encoder"
1224
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1225
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1226
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1227
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1228
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1229
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1230
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1231
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1232
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1233
msmpeg4v1_decoder_select="h263_decoder"
1234
msmpeg4v1_encoder_select="h263_encoder"
1235
msmpeg4v2_decoder_select="h263_decoder"
1236
msmpeg4v2_encoder_select="h263_encoder"
1237
msmpeg4v3_decoder_select="h263_decoder"
1238
msmpeg4v3_encoder_select="h263_encoder"
1239
nellymoser_decoder_select="mdct"
1240
nellymoser_encoder_select="mdct"
1241
png_decoder_select="zlib"
1242
png_encoder_select="zlib"
1243
qcelp_decoder_select="lsp"
1244
qdm2_decoder_select="mdct rdft"
1245
ra_144_encoder_select="lpc"
1246
rv10_decoder_select="h263_decoder"
1247
rv10_encoder_select="h263_encoder"
1248
rv20_decoder_select="h263_decoder"
1249
rv20_encoder_select="h263_encoder"
1250
rv30_decoder_select="golomb h264dsp"
1251
rv40_decoder_select="golomb h264dsp"
1252
shorten_decoder_select="golomb"
1253
sipr_decoder_select="lsp"
1254
snow_decoder_select="dwt"
1255
snow_encoder_select="aandct dwt"
1256
sonic_decoder_select="golomb"
1257
sonic_encoder_select="golomb"
1258
sonic_ls_encoder_select="golomb"
1259
svq1_encoder_select="aandct"
1260
svq3_decoder_select="golomb h264dsp"
1261
svq3_decoder_suggest="zlib"
1262
theora_decoder_select="vp3_decoder"
1263
tiff_decoder_suggest="zlib"
1264
tiff_encoder_suggest="zlib"
1265
truehd_decoder_select="mlp_decoder"
1266
tscc_decoder_select="zlib"
1267
twinvq_decoder_select="mdct lsp"
1268
vc1_decoder_select="h263_decoder"
1269
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1270
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1271
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1272
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1273
vorbis_decoder_select="mdct"
1274
vorbis_encoder_select="mdct"
1275
vp6_decoder_select="huffman"
1276
vp6a_decoder_select="vp6_decoder"
1277
vp6f_decoder_select="vp6_decoder"
1278
vp8_decoder_select="h264dsp"
1279
wmapro_decoder_select="mdct"
1280
wmav1_decoder_select="mdct"
1281
wmav1_encoder_select="mdct"
1282
wmav2_decoder_select="mdct"
1283
wmav2_encoder_select="mdct"
1284
wmavoice_decoder_select="lsp rdft dct mdct"
1285
wmv1_decoder_select="h263_decoder"
1286
wmv1_encoder_select="h263_encoder"
1287
wmv2_decoder_select="h263_decoder"
1288
wmv2_encoder_select="h263_encoder"
1289
wmv3_decoder_select="vc1_decoder"
1290
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1291
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1292
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1293
zlib_decoder_select="zlib"
1294
zlib_encoder_select="zlib"
1295
zmbv_decoder_select="zlib"
1296
zmbv_encoder_select="zlib"
1297

    
1298
vaapi_deps="va_va_h"
1299
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1300

    
1301
# parsers
1302
h264_parser_select="golomb h264dsp"
1303

    
1304
# external libraries
1305
libdirac_decoder_deps="libdirac !libschroedinger"
1306
libdirac_encoder_deps="libdirac"
1307
libfaac_encoder_deps="libfaac"
1308
libgsm_decoder_deps="libgsm"
1309
libgsm_encoder_deps="libgsm"
1310
libgsm_ms_decoder_deps="libgsm"
1311
libgsm_ms_encoder_deps="libgsm"
1312
libmp3lame_encoder_deps="libmp3lame"
1313
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1314
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1315
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1316
libopenjpeg_decoder_deps="libopenjpeg"
1317
libschroedinger_decoder_deps="libschroedinger"
1318
libschroedinger_encoder_deps="libschroedinger"
1319
libspeex_decoder_deps="libspeex"
1320
libtheora_encoder_deps="libtheora"
1321
libvorbis_encoder_deps="libvorbis"
1322
libvpx_decoder_deps="libvpx"
1323
libvpx_encoder_deps="libvpx"
1324
libx264_encoder_deps="libx264"
1325
libxavs_encoder_deps="libxavs"
1326
libxvid_encoder_deps="libxvid"
1327

    
1328
# demuxers / muxers
1329
ac3_demuxer_deps="ac3_parser"
1330
asf_stream_muxer_select="asf_muxer"
1331
avisynth_demuxer_deps="avisynth"
1332
dirac_demuxer_deps="dirac_parser"
1333
eac3_demuxer_select="ac3_parser"
1334
ipod_muxer_select="mov_muxer"
1335
libnut_demuxer_deps="libnut"
1336
libnut_muxer_deps="libnut"
1337
matroska_audio_muxer_select="matroska_muxer"
1338
matroska_demuxer_suggest="zlib bzlib"
1339
mov_demuxer_suggest="zlib"
1340
mp3_demuxer_deps="mpegaudio_parser"
1341
mp4_muxer_select="mov_muxer"
1342
mpegtsraw_demuxer_select="mpegts_demuxer"
1343
mxf_d10_muxer_select="mxf_muxer"
1344
ogg_demuxer_select="golomb"
1345
psp_muxer_select="mov_muxer"
1346
rtsp_demuxer_deps="sdp_demuxer"
1347
rtsp_muxer_deps="sdp_demuxer"
1348
rtsp_muxer_select="rtp_muxer"
1349
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1350
sdp_demuxer_select="asf_demuxer rm_demuxer"
1351
spdif_muxer_select="aac_parser"
1352
tg2_muxer_select="mov_muxer"
1353
tgp_muxer_select="mov_muxer"
1354
w64_demuxer_deps="wav_demuxer"
1355

    
1356
# indevs / outdevs
1357
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1358
alsa_outdev_deps="alsa_asoundlib_h"
1359
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1360
dv1394_indev_deps="dv1394 dv_demuxer"
1361
jack_indev_deps="jack_jack_h"
1362
libdc1394_indev_deps="libdc1394"
1363
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1364
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1365
v4l_indev_deps="linux_videodev_h"
1366
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1367
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1368
vfwcap_indev_extralibs="-lavicap32"
1369
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1370
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1371

    
1372
# protocols
1373
gopher_protocol_deps="network"
1374
http_protocol_deps="network"
1375
http_protocol_select="tcp_protocol"
1376
mmst_protocol_deps="network"
1377
rtmp_protocol_select="tcp_protocol"
1378
rtp_protocol_select="udp_protocol"
1379
tcp_protocol_deps="network"
1380
udp_protocol_deps="network"
1381

    
1382
# libraries
1383
avdevice_deps="avcodec avformat"
1384
avformat_deps="avcodec"
1385

    
1386
# programs
1387
ffmpeg_deps="avcodec avformat swscale"
1388
ffmpeg_select="buffer_filter"
1389
ffplay_deps="avcodec avformat swscale sdl"
1390
ffplay_select="rdft"
1391
ffprobe_deps="avcodec avformat"
1392
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1393
ffserver_extralibs='$ldl'
1394

    
1395
doc_deps="texi2html"
1396

    
1397
# tests
1398

    
1399
test_deps(){
1400
    suf1=$1
1401
    suf2=$2
1402
    shift 2
1403
    for v; do
1404
        dep=${v%=*}
1405
        tests=${v#*=}
1406
        for name in ${tests}; do
1407
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1408
        done
1409
    done
1410
}
1411

    
1412
set_ne_test_deps(){
1413
    eval ${1}_be_test_deps="bigendian"
1414
    eval ${1}_le_test_deps="!bigendian"
1415
}
1416

    
1417
test_deps _encoder _decoder                                             \
1418
    ac3                                                                 \
1419
    adpcm_g726=g726                                                     \
1420
    adpcm_ima_qt                                                        \
1421
    adpcm_ima_wav                                                       \
1422
    adpcm_ms                                                            \
1423
    adpcm_swf                                                           \
1424
    adpcm_yamaha=adpcm_yam                                              \
1425
    alac                                                                \
1426
    asv1                                                                \
1427
    asv2                                                                \
1428
    bmp                                                                 \
1429
    dnxhd="hdxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1430
    dvvideo="dv dv50"                                                   \
1431
    ffv1                                                                \
1432
    flac                                                                \
1433
    flashsv                                                             \
1434
    flv                                                                 \
1435
    gif                                                                 \
1436
    h261                                                                \
1437
    h263="h263 h263p"                                                   \
1438
    huffyuv                                                             \
1439
    jpegls                                                              \
1440
    mjpeg="jpg mjpeg ljpeg"                                             \
1441
    mp2                                                                 \
1442
    mpeg1video="mpeg mpeg1b"                                            \
1443
    mpeg2video="mpeg2 mpeg2thread"                                      \
1444
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1445
    msmpeg4v3=msmpeg4                                                   \
1446
    msmpeg4v2                                                           \
1447
    pbm=pbmpipe                                                         \
1448
    pcx                                                                 \
1449
    pgm="pgm pgmpipe"                                                   \
1450
    ppm="ppm ppmpipe"                                                   \
1451
    rawvideo="rgb yuv"                                                  \
1452
    roq                                                                 \
1453
    rv10                                                                \
1454
    rv20                                                                \
1455
    sgi                                                                 \
1456
    snow="snow snowll"                                                  \
1457
    svq1                                                                \
1458
    targa=tga                                                           \
1459
    tiff                                                                \
1460
    wmav1                                                               \
1461
    wmav2                                                               \
1462
    wmv1                                                                \
1463
    wmv2                                                                \
1464

    
1465
test_deps _muxer _demuxer                                               \
1466
    aiff                                                                \
1467
    pcm_alaw=alaw                                                       \
1468
    asf                                                                 \
1469
    au                                                                  \
1470
    avi                                                                 \
1471
    dv=dv_fmt                                                           \
1472
    ffm                                                                 \
1473
    flv=flv_fmt                                                         \
1474
    gxf                                                                 \
1475
    matroska=mkv                                                        \
1476
    mmf                                                                 \
1477
    mov                                                                 \
1478
    pcm_mulaw=mulaw                                                     \
1479
    mxf                                                                 \
1480
    nut                                                                 \
1481
    ogg                                                                 \
1482
    rawvideo=pixfmt                                                     \
1483
    rm                                                                  \
1484
    swf                                                                 \
1485
    mpegts=ts                                                           \
1486
    voc                                                                 \
1487
    wav                                                                 \
1488
    yuv4mpegpipe=yuv4mpeg                                               \
1489

    
1490
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1491

    
1492
set_ne_test_deps pixdesc
1493
set_ne_test_deps pixfmts_crop
1494
set_ne_test_deps pixfmts_null
1495
set_ne_test_deps pixfmts_pad
1496
set_ne_test_deps pixfmts_scale
1497
set_ne_test_deps pixfmts_vflip
1498

    
1499
# default parameters
1500

    
1501
logfile="config.log"
1502

    
1503
# installation paths
1504
prefix_default="/usr/local"
1505
bindir_default='${prefix}/bin'
1506
datadir_default='${prefix}/share/ffmpeg'
1507
incdir_default='${prefix}/include'
1508
libdir_default='${prefix}/lib'
1509
mandir_default='${prefix}/share/man'
1510
shlibdir_default="$libdir_default"
1511

    
1512
# toolchain
1513
ar_default="ar"
1514
cc_default="gcc"
1515
cc_version=\"unknown\"
1516
host_cc_default="gcc"
1517
ln_s="ln -sf"
1518
nm_default="nm"
1519
objformat="elf"
1520
ranlib="ranlib"
1521
strip_default="strip"
1522
yasmexe="yasm"
1523
nogas=":"
1524

    
1525
nm_opts='-g'
1526

    
1527
# machine
1528
arch_default=$(uname -m)
1529
cpu="generic"
1530

    
1531
# OS
1532
target_os_default=$(tolower $(uname -s))
1533
host_os=$target_os_default
1534

    
1535
# configurable options
1536
enable avcodec
1537
enable avcore
1538
enable avdevice
1539
enable avfilter
1540
enable avformat
1541
enable avutil
1542
enable asm
1543
enable debug
1544
enable doc
1545
enable fastdiv
1546
enable ffmpeg
1547
enable ffplay
1548
enable ffprobe
1549
enable ffserver
1550
enable mpegaudio_hp
1551
enable network
1552
enable optimizations
1553
enable protocols
1554
enable static
1555
enable stripping
1556
enable swscale
1557
enable swscale_alpha
1558

    
1559
# build settings
1560
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1561
FFSERVERLDFLAGS=-Wl,-E
1562
LIBPREF="lib"
1563
LIBSUF=".a"
1564
FULLNAME='$(NAME)$(BUILDSUF)'
1565
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1566
SLIBPREF="lib"
1567
SLIBSUF=".so"
1568
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1569
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1570
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1571
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1572

    
1573
CC_O='-o $@'
1574

    
1575
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1576
host_libs='-lm'
1577

    
1578
target_path='$(CURDIR)'
1579

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

    
1585
# find source path
1586
source_path="$(dirname "$0")"
1587
enable source_path_used
1588
if test -f configure; then
1589
    source_path="$(pwd)"
1590
    disable source_path_used
1591
else
1592
    source_path="$(cd "$source_path"; pwd)"
1593
    echo "$source_path" | grep -q '[[:blank:]]' &&
1594
        die "Out of tree builds are impossible with whitespace in source path."
1595
    test -e "$source_path/config.h" &&
1596
        die "Out of tree builds are impossible with config.h in source dir."
1597
fi
1598

    
1599
for v in "$@"; do
1600
    r=${v#*=}
1601
    l=${v%"$r"}
1602
    r=$(sh_quote "$r")
1603
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1604
done
1605

    
1606
find_things(){
1607
    thing=$1
1608
    pattern=$2
1609
    file=$source_path/$3
1610
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1611
}
1612

    
1613
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1614
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1615
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1616
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1617
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1618
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1619
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1620
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1621
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1622
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1623
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1624

    
1625
find_tests(){
1626
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1627
}
1628

    
1629
ACODEC_TESTS=$(find_tests acodec)
1630
VCODEC_TESTS=$(find_tests vsynth1)
1631
LAVF_TESTS=$(find_tests lavf)
1632
LAVFI_TESTS=$(find_tests lavfi)
1633
SEEK_TESTS=$(find_tests seek seek_)
1634

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

    
1637
for n in $COMPONENT_LIST; do
1638
    v=$(toupper ${n%s})_LIST
1639
    eval enable \$$v
1640
    eval ${n}_if_any="\$$v"
1641
done
1642

    
1643
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1644

    
1645
die_unknown(){
1646
    echo "Unknown option \"$1\"."
1647
    echo "See $0 --help for available options."
1648
    exit 1
1649
}
1650

    
1651
show_list() {
1652
    suffix=_$1
1653
    shift
1654
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1655
    exit 0
1656
}
1657

    
1658
for opt do
1659
    optval="${opt#*=}"
1660
    case "$opt" in
1661
    --extra-ldflags=*) add_ldflags $optval
1662
    ;;
1663
    --extra-libs=*) add_extralibs $optval
1664
    ;;
1665
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1666
    ;;
1667
    --enable-debug=*) debuglevel="$optval"
1668
    ;;
1669
    --disable-everything)
1670
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1671
    ;;
1672
    --enable-*=*|--disable-*=*)
1673
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1674
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1675
    eval list=\$$(toupper $thing)_LIST
1676
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1677
    $action $(filter "$name" $list)
1678
    ;;
1679
    --enable-?*|--disable-?*)
1680
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1681
    if is_in $option $COMPONENT_LIST; then
1682
        test $action = disable && action=unset
1683
        eval $action \$$(toupper ${option%s})_LIST
1684
    elif is_in $option $CMDLINE_SELECT; then
1685
        $action $option
1686
    else
1687
        die_unknown $opt
1688
    fi
1689
    ;;
1690
    --list-*)
1691
        NAME="${opt#--list-}"
1692
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1693
        NAME=${NAME%s}
1694
        eval show_list $NAME \$$(toupper $NAME)_LIST
1695
    ;;
1696
    --help|-h) show_help
1697
    ;;
1698
    *)
1699
    optname="${opt%%=*}"
1700
    optname="${optname#--}"
1701
    optname=$(echo "$optname" | sed 's/-/_/g')
1702
    if is_in $optname $CMDLINE_SET; then
1703
        eval $optname='$optval'
1704
    elif is_in $optname $CMDLINE_APPEND; then
1705
        append $optname "$optval"
1706
    else
1707
         die_unknown $opt
1708
    fi
1709
    ;;
1710
    esac
1711
done
1712

    
1713
disabled logging && logfile=/dev/null
1714

    
1715
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1716
set >> $logfile
1717

    
1718
test -n "$cross_prefix" && enable cross_compile
1719

    
1720
if enabled cross_compile; then
1721
    test -n "$arch" && test -n "$target_os" ||
1722
        die "Must specify target arch and OS when cross-compiling"
1723
fi
1724

    
1725
set_default arch target_os
1726

    
1727
ar_default="${cross_prefix}${ar_default}"
1728
cc_default="${cross_prefix}${cc_default}"
1729
nm_default="${cross_prefix}${nm_default}"
1730
ranlib="${cross_prefix}${ranlib}"
1731
strip_default="${cross_prefix}${strip_default}"
1732

    
1733
sysinclude_default="${sysroot}/usr/include"
1734

    
1735
set_default cc nm strip sysinclude
1736
enabled cross_compile || host_cc_default=$cc
1737
set_default host_cc
1738

    
1739
exesuf() {
1740
    case $1 in
1741
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1742
    esac
1743
}
1744

    
1745
EXESUF=$(exesuf $target_os)
1746
HOSTEXESUF=$(exesuf $host_os)
1747

    
1748
# set temporary file name
1749
: ${TMPDIR:=$TEMPDIR}
1750
: ${TMPDIR:=$TMP}
1751
: ${TMPDIR:=/tmp}
1752

    
1753
if ! check_cmd type mktemp; then
1754
    # simple replacement for missing mktemp
1755
    # NOT SAFE FOR GENERAL USE
1756
    mktemp(){
1757
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1758
    }
1759
fi
1760

    
1761
tmpfile(){
1762
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1763
        (set -C; exec > $tmp) 2>/dev/null ||
1764
        die "Unable to create temporary file in $TMPDIR."
1765
    append TMPFILES $tmp
1766
    eval $1=$tmp
1767
}
1768

    
1769
trap 'rm -f -- $TMPFILES' EXIT
1770
trap exit HUP INT TERM
1771

    
1772
tmpfile TMPC  .c
1773
tmpfile TMPE  $EXESUF
1774
tmpfile TMPH  .h
1775
tmpfile TMPO  .o
1776
tmpfile TMPS  .S
1777
tmpfile TMPV  .ver
1778
tmpfile TMPSH .sh
1779

    
1780
unset -f mktemp
1781

    
1782
# make sure we can execute files in $TMPDIR
1783
cat > $TMPSH 2>> $logfile <<EOF
1784
#! /bin/sh
1785
EOF
1786
chmod +x $TMPSH >> $logfile 2>&1
1787
if ! $TMPSH >> $logfile 2>&1; then
1788
    cat <<EOF
1789
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1790
variable to another directory and make sure that it is not mounted noexec.
1791
EOF
1792
    die "Sanity test failed."
1793
fi
1794

    
1795
filter_cflags=echo
1796
filter_cppflags=echo
1797
filter_asflags=echo
1798

    
1799
if   $cc -v 2>&1 | grep -qi ^gcc; then
1800
    cc_type=gcc
1801
    cc_version=__VERSION__
1802
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1803
    cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1804
    if ! $cc -dumpversion | grep -q '^2\.'; then
1805
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1806
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1807
    fi
1808
    speed_cflags='-O3'
1809
    size_cflags='-Os'
1810
elif $cc --version 2>/dev/null | grep -q Intel; then
1811
    cc_type=icc
1812
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1813
    cc_ident=$($cc --version | head -n1)
1814
    CC_DEPFLAGS='-MMD'
1815
    AS_DEPFLAGS='-MMD'
1816
    speed_cflags='-O3'
1817
    size_cflags='-Os'
1818
    noopt_cflags='-O1'
1819
elif $cc -v 2>&1 | grep -q xlc; then
1820
    cc_type=xlc
1821
    cc_version="AV_STRINGIFY(__IBMC__)"
1822
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1823
    speed_cflags='-O5'
1824
    size_cflags='-O5 -qcompact'
1825
elif $cc -V 2>/dev/null | grep -q Compaq; then
1826
    cc_type=ccc
1827
    cc_version="AV_STRINGIFY(__DECC_VER)"
1828
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1829
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1830
    debuglevel=3
1831
    add_ldflags -Wl,-z,now # calls to libots crash without this
1832
    speed_cflags='-fast'
1833
    size_cflags='-O1'
1834
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1835
    test -d "$sysroot" || die "No valid sysroot specified."
1836
    cc_type=armcc
1837
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1838
    cc_ident=$($cc --vsn | head -n1)
1839
    armcc_conf="$PWD/armcc.conf"
1840
    $cc --arm_linux_configure                 \
1841
        --arm_linux_config_file="$armcc_conf" \
1842
        --configure_sysroot="$sysroot"        \
1843
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1844
        die "Error creating armcc configuration file."
1845
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1846
    as_default="${cross_prefix}gcc"
1847
    CC_DEPFLAGS='-MMD'
1848
    AS_DEPFLAGS='-MMD'
1849
    speed_cflags='-O3'
1850
    size_cflags='-Os'
1851
elif $cc -version 2>/dev/null | grep -q TMS470; then
1852
    cc_type=tms470
1853
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1854
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1855
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1856
    CC_O='-fr=$(@D)'
1857
    as_default="${cross_prefix}gcc"
1858
    ld_default="${cross_prefix}gcc"
1859
    TMPO=$(basename $TMPC .c).o
1860
    append TMPFILES $TMPO
1861
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1862
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1863
    AS_DEPFLAGS='-MMD'
1864
    speed_cflags='-O3 -mf=5'
1865
    size_cflags='-O3 -mf=2'
1866
    filter_cflags=tms470_flags
1867
    tms470_flags(){
1868
        for flag; do
1869
            case $flag in
1870
                -march=*|-mcpu=*)
1871
                    case "${flag#*=}" in
1872
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1873
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1874
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1875
                        armv6*|arm11*)          echo -mv=6   ;;
1876
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1877
                                                echo -mv=5e  ;;
1878
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1879
                    esac
1880
                    ;;
1881
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1882
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1883
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1884
                -msoft-float)   echo --float_support=vfplib       ;;
1885
                -O[0-3]|-mf=*)  echo $flag                        ;;
1886
                -g)             echo -g -mn                       ;;
1887
                -pds=*)         echo $flag                        ;;
1888
            esac
1889
        done
1890
    }
1891
elif $cc -v 2>&1 | grep -q clang; then
1892
    cc_type=clang
1893
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
1894
        cc_version=__clang_version__ || cc_version=__VERSION__
1895
    cc_ident=$($cc --version | head -n1)
1896
    CC_DEPFLAGS='-MMD'
1897
    AS_DEPFLAGS='-MMD'
1898
    speed_cflags='-O3'
1899
    size_cflags='-Os'
1900
elif $cc -V 2>&1 | grep -q Sun; then
1901
    cc_type=suncc
1902
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1903
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1904
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1905
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1906
    speed_cflags='-O5'
1907
    size_cflags='-O5 -xspace'
1908
    filter_cflags=suncc_flags
1909
    suncc_flags(){
1910
        for flag; do
1911
            case $flag in
1912
                -march=*|-mcpu=*)
1913
                    case "${flag#*=}" in
1914
                        native)                   echo -xtarget=native       ;;
1915
                        v9|niagara)               echo -xarch=sparc          ;;
1916
                        ultrasparc)               echo -xarch=sparcvis       ;;
1917
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1918
                        i586|pentium)             echo -xchip=pentium        ;;
1919
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1920
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1921
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1922
                        pentium4*)          echo -xtarget=pentium4           ;;
1923
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1924
                        *-sse3)             echo -xarch=sse3                 ;;
1925
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1926
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1927
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1928
                        k8|opteron|athlon64|athlon-fx)
1929
                                                  echo -xarch=sse2a          ;;
1930
                        athlon*)                  echo -xarch=pentium_proa   ;;
1931
                    esac
1932
                    ;;
1933
                -std=c99)             echo -xc99              ;;
1934
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1935
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1936
                -W*,*)                echo $flag              ;;
1937
                -f*-*|-W*)                                    ;;
1938
                *)                    echo $flag              ;;
1939
            esac
1940
        done
1941
    }
1942
elif $cc -v 2>&1 | grep -q PathScale; then
1943
    cc_type=pathscale
1944
    cc_version=__PATHSCALE__
1945
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1946
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1947
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1948
    speed_cflags='-O2'
1949
    size_cflags='-Os'
1950
fi
1951

    
1952
test -n "$cc_type" && enable $cc_type ||
1953
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1954

    
1955
: ${as_default:=$cc}
1956
: ${dep_cc_default:=$cc}
1957
: ${ld_default:=$cc}
1958
set_default ar as dep_cc ld
1959

    
1960
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1961
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1962

    
1963
add_cflags $extra_cflags
1964
add_asflags $extra_cflags
1965

    
1966
if test -n "$sysroot"; then
1967
    case "$cc_type" in
1968
        gcc)
1969
            add_cppflags --sysroot="$sysroot"
1970
            add_ldflags --sysroot="$sysroot"
1971
        ;;
1972
        tms470)
1973
            add_cppflags -I"$sysinclude"
1974
            add_ldflags  --sysroot="$sysroot"
1975
        ;;
1976
        clang)
1977
            add_cppflags -isysroot "$sysroot"
1978
            add_ldflags -isysroot "$sysroot"
1979
        ;;
1980
    esac
1981
fi
1982

    
1983
if test "$cpu" = host; then
1984
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1985

    
1986
    case "$cc_type" in
1987
        gcc)
1988
            check_native(){
1989
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1990
                sed -n "/$1=/{
1991
                            s/.*$1=\\([^ ]*\\).*/\\1/
1992
                            p
1993
                            q
1994
                        }" $TMPE
1995
            }
1996
            cpu=$(check_native -march || check_native -mcpu)
1997
        ;;
1998
    esac
1999

    
2000
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2001
fi
2002

    
2003
# Deal with common $arch aliases
2004
case "$arch" in
2005
    arm*)
2006
        arch="arm"
2007
    ;;
2008
    mips|mipsel|IP*)
2009
        arch="mips"
2010
    ;;
2011
    mips64*)
2012
        arch="mips"
2013
        subarch="mips64"
2014
    ;;
2015
    parisc|hppa)
2016
        arch="parisc"
2017
    ;;
2018
    parisc64|hppa64)
2019
        arch="parisc"
2020
        subarch="parisc64"
2021
    ;;
2022
    "Power Macintosh"|ppc|powerpc)
2023
        arch="ppc"
2024
    ;;
2025
    ppc64|powerpc64)
2026
        arch="ppc"
2027
        subarch="ppc64"
2028
    ;;
2029
    s390|s390x)
2030
        arch="s390"
2031
    ;;
2032
    sh4|sh)
2033
        arch="sh4"
2034
    ;;
2035
    sun4u|sparc64)
2036
        arch="sparc"
2037
        subarch="sparc64"
2038
    ;;
2039
    i[3-6]86|i86pc|BePC|x86_64|amd64)
2040
        arch="x86"
2041
    ;;
2042
esac
2043

    
2044
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2045
enable $arch
2046

    
2047
# Add processor-specific flags
2048
if test "$cpu" = generic; then
2049
    : do nothing
2050
elif enabled ppc; then
2051

    
2052
    case $(tolower $cpu) in
2053
        601|ppc601|powerpc601)
2054
            cpuflags="-mcpu=601"
2055
            disable altivec
2056
        ;;
2057
        603*|ppc603*|powerpc603*)
2058
            cpuflags="-mcpu=603"
2059
            disable altivec
2060
        ;;
2061
        604*|ppc604*|powerpc604*)
2062
            cpuflags="-mcpu=604"
2063
            disable altivec
2064
        ;;
2065
        g3|75*|ppc75*|powerpc75*)
2066
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2067
            disable altivec
2068
        ;;
2069
        g4|745*|ppc745*|powerpc745*)
2070
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2071
        ;;
2072
        74*|ppc74*|powerpc74*)
2073
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2074
        ;;
2075
        g5|970|ppc970|powerpc970|power4*)
2076
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2077
        ;;
2078
        cell)
2079
            cpuflags="-mcpu=cell"
2080
            enable ldbrx
2081
        ;;
2082
        e500v2)
2083
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2084
            disable altivec
2085
        ;;
2086
        e500)
2087
            cpuflags="-mcpu=8540 -mhard-float"
2088
            disable altivec
2089
        ;;
2090
    esac
2091

    
2092
elif enabled x86; then
2093

    
2094
    case $cpu in
2095
        i[345]86|pentium)
2096
            cpuflags="-march=$cpu"
2097
            disable mmx
2098
        ;;
2099
        # targets that do NOT support conditional mov (cmov)
2100
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2101
            cpuflags="-march=$cpu"
2102
            disable cmov
2103
        ;;
2104
        # targets that do support conditional mov (cmov)
2105
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
2106
            cpuflags="-march=$cpu"
2107
            enable cmov
2108
            enable fast_cmov
2109
        ;;
2110
        # targets that do support conditional mov but on which it's slow
2111
        pentium4|pentium4m|prescott|nocona)
2112
            cpuflags="-march=$cpu"
2113
            enable cmov
2114
            disable fast_cmov
2115
        ;;
2116
    esac
2117

    
2118
elif enabled sparc; then
2119

    
2120
    case $cpu in
2121
        niagara)
2122
            cpuflags="-mcpu=$cpu"
2123
            disable vis
2124
        ;;
2125
        sparc64)
2126
            cpuflags="-mcpu=v9"
2127
        ;;
2128
    esac
2129

    
2130
elif enabled arm; then
2131

    
2132
    case $cpu in
2133
        armv*)
2134
            cpuflags="-march=$cpu"
2135
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2136
        ;;
2137
        *)
2138
            cpuflags="-mcpu=$cpu"
2139
            case $cpu in
2140
                cortex-a*)                               subarch=armv7a  ;;
2141
                cortex-r*)                               subarch=armv7r  ;;
2142
                cortex-m*)                               subarch=armv7m  ;;
2143
                arm11*)                                  subarch=armv6   ;;
2144
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2145
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2146
            esac
2147
        ;;
2148
    esac
2149

    
2150
elif enabled alpha; then
2151

    
2152
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2153

    
2154
elif enabled bfin; then
2155

    
2156
    cpuflags="-mcpu=$cpu"
2157

    
2158
elif enabled mips; then
2159

    
2160
    cpuflags="-march=$cpu"
2161

    
2162
elif enabled avr32; then
2163

    
2164
    case $cpu in
2165
        ap7[02]0[0-2])
2166
            subarch="avr32_ap"
2167
            cpuflags="-mpart=$cpu"
2168
        ;;
2169
        ap)
2170
            subarch="avr32_ap"
2171
            cpuflags="-march=$cpu"
2172
        ;;
2173
        uc3[ab]*)
2174
            subarch="avr32_uc"
2175
            cpuflags="-mcpu=$cpu"
2176
        ;;
2177
        uc)
2178
            subarch="avr32_uc"
2179
            cpuflags="-march=$cpu"
2180
        ;;
2181
    esac
2182

    
2183
fi
2184

    
2185
add_cflags $cpuflags
2186
add_asflags $cpuflags
2187

    
2188
# compiler sanity check
2189
check_exec <<EOF
2190
int main(void){ return 0; }
2191
EOF
2192
if test "$?" != 0; then
2193
    echo "$cc is unable to create an executable file."
2194
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2195
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2196
        echo "Only do this if you know what cross compiling means."
2197
    fi
2198
    die "C compiler test failed."
2199
fi
2200

    
2201
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2202
check_cflags -std=c99
2203
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2204
#include <stdlib.h>
2205
EOF
2206
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2207
#include <stdlib.h>
2208
EOF
2209

    
2210
check_host_cflags -std=c99
2211

    
2212
case "$arch" in
2213
    alpha|ia64|mips|parisc|sparc)
2214
        spic=$shared
2215
    ;;
2216
    x86)
2217
        subarch="x86_32"
2218
        check_cc <<EOF && subarch="x86_64"
2219
        int test[(int)sizeof(char*) - 7];
2220
EOF
2221
        if test "$subarch" = "x86_64"; then
2222
            spic=$shared
2223
        fi
2224
    ;;
2225
esac
2226

    
2227
enable $subarch
2228
enabled spic && enable pic
2229

    
2230
# OS specific
2231
case $target_os in
2232
    haiku)
2233
        prefix_default="/boot/common"
2234
        network_extralibs="-lnetwork"
2235
        ;;
2236
    sunos)
2237
        FFSERVERLDFLAGS=""
2238
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2239
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2240
        network_extralibs="-lsocket -lnsl"
2241
        add_cppflags -D__EXTENSIONS__
2242
        nm_opts='-P -g'
2243
        ;;
2244
    netbsd)
2245
        oss_indev_extralibs="-lossaudio"
2246
        oss_outdev_extralibs="-lossaudio"
2247
        add_cppflags -D_XOPEN_SOURCE=600
2248
        ;;
2249
    openbsd)
2250
        enable malloc_aligned
2251
        # On OpenBSD 4.5. the compiler does not use PIC unless
2252
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2253
        # however the generated executable will not do anything
2254
        # (simply quits with exit-code 1, no crash, no output).
2255
        # Thus explicitly enable PIC here.
2256
        enable pic
2257
        SHFLAGS='-shared'
2258
        oss_indev_extralibs="-lossaudio"
2259
        oss_outdev_extralibs="-lossaudio"
2260
        ;;
2261
    freebsd|dragonfly)
2262
        enable malloc_aligned
2263
        ;;
2264
    bsd/os)
2265
        add_extralibs -lpoll -lgnugetopt
2266
        strip="strip -d"
2267
        ;;
2268
    darwin)
2269
        enable malloc_aligned
2270
        gas="gas-preprocessor.pl $cc"
2271
        enabled ppc && add_asflags -force_cpusubtype_ALL
2272
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2273
        strip="${strip} -x"
2274
        add_ldflags -Wl,-dynamic,-search_paths_first
2275
        SLIBSUF=".dylib"
2276
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2277
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2278
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2279
        objformat="macho"
2280
        enabled x86_64 && objformat="macho64"
2281
        enabled_any pic shared ||
2282
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2283
        ;;
2284
    mingw32*)
2285
        if test $target_os = "mingw32ce"; then
2286
            disable network
2287
        else
2288
            target_os=mingw32
2289
        fi
2290
        LIBTARGET=i386
2291
        if enabled x86_64; then
2292
            enable malloc_aligned
2293
            LIBTARGET=x64
2294
        elif enabled arm; then
2295
            LIBTARGET=arm
2296
        fi
2297
        shlibdir_default="$bindir_default"
2298
        disable ffserver
2299
        SLIBPREF=""
2300
        SLIBSUF=".dll"
2301
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2302
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2303
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2304
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2305
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2306
            install -d "$(LIBDIR)"; \
2307
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2308
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2309
        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'
2310
        objformat="win32"
2311
        enable dos_paths
2312
        check_cflags -fno-common
2313
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2314
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2315
                die "ERROR: MinGW runtime version must be >= 3.15."
2316
        ;;
2317
    cygwin*)
2318
        target_os=cygwin
2319
        shlibdir_default="$bindir_default"
2320
        SLIBPREF="cyg"
2321
        SLIBSUF=".dll"
2322
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2323
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2324
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2325
        objformat="win32"
2326
        enable dos_paths
2327
        check_cflags -fno-common
2328
        ;;
2329
    *-dos|freedos|opendos)
2330
        disable ffplay ffserver
2331
        disable $INDEV_LIST $OUTDEV_LIST
2332
        network_extralibs="-lsocket"
2333
        objformat="coff"
2334
        enable dos_paths
2335
        ;;
2336
    linux)
2337
        enable dv1394
2338
        ;;
2339
    irix*)
2340
        target_os=irix
2341
        ranlib="echo ignoring ranlib"
2342
        ;;
2343
    os/2*)
2344
        strip="lxlite"
2345
        ln_s="cp -f"
2346
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2347
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2348
        FFSERVERLDFLAGS=""
2349
        LIBSUF="_s.a"
2350
        SLIBPREF=""
2351
        SLIBSUF=".dll"
2352
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2353
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2354
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2355
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2356
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2357
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2358
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2359
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2360
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2361
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2362
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2363
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2364
        enable dos_paths
2365
        ;;
2366
    gnu/kfreebsd)
2367
        ;;
2368
    gnu)
2369
        ;;
2370
    none)
2371
        ;;
2372
    *)
2373
        die "Unknown OS '$target_os'."
2374
        ;;
2375
esac
2376

    
2377
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2378

    
2379
set_default $PATHS_LIST
2380

    
2381
# we need to build at least one lib type
2382
if ! enabled_any static shared; then
2383
    cat <<EOF
2384
At least one library type must be built.
2385
Specify --enable-static to build the static libraries or --enable-shared to
2386
build the shared libraries as well. To only build the shared libraries specify
2387
--disable-static in addition to --enable-shared.
2388
EOF
2389
    exit 1;
2390
fi
2391

    
2392
disabled static && LIBNAME=""
2393

    
2394
die_license_disabled() {
2395
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2396
}
2397

    
2398
die_license_disabled gpl libx264
2399
die_license_disabled gpl libxavs
2400
die_license_disabled gpl libxvid
2401
die_license_disabled gpl postproc
2402
die_license_disabled gpl x11grab
2403

    
2404
die_license_disabled nonfree libfaac
2405

    
2406
die_license_disabled version3 libopencore_amrnb
2407
die_license_disabled version3 libopencore_amrwb
2408

    
2409
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2410

    
2411
check_deps $ARCH_EXT_LIST
2412

    
2413
disabled optimizations || check_cflags -fomit-frame-pointer
2414

    
2415
enable_pic() {
2416
    enable pic
2417
    add_cppflags -DPIC
2418
    add_cflags   -fPIC
2419
    add_asflags  -fPIC
2420
}
2421

    
2422
enabled pic && enable_pic
2423

    
2424
check_cc <<EOF || die "Symbol mangling check failed."
2425
int ff_extern;
2426
EOF
2427
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2428
extern_prefix=${sym%%ff_extern*}
2429

    
2430
check_cc <<EOF && enable inline_asm
2431
void foo(void) { __asm__ volatile ("" ::); }
2432
EOF
2433

    
2434
_restrict=
2435
for restrict_keyword in restrict __restrict__ __restrict; do
2436
    check_cc <<EOF && _restrict=$restrict_keyword && break
2437
void foo(char * $restrict_keyword p);
2438
EOF
2439
done
2440

    
2441
check_cc <<EOF && enable attribute_packed
2442
struct { int x; } __attribute__((packed)) x;
2443
EOF
2444

    
2445
check_cc <<EOF && enable attribute_may_alias
2446
union { int x; } __attribute__((may_alias)) x;
2447
EOF
2448

    
2449
check_cc <<EOF || die "endian test failed"
2450
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2451
EOF
2452
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2453

    
2454
if enabled alpha; then
2455

    
2456
    check_cflags -mieee
2457

    
2458
elif enabled arm; then
2459

    
2460
    check_cflags -marm
2461
    nogas=die
2462

    
2463
    check_ld <<EOF && enable vfp_args
2464
__asm__ (".eabi_attribute 28, 1");
2465
int main(void) { return 0; }
2466
EOF
2467

    
2468
    # We have to check if pld is a nop and disable it.
2469
    check_asm pld '"pld [r0]"'
2470

    
2471
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2472
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2473
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2474
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2475
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2476
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2477

    
2478
    enabled_all armv6t2 shared !pic && enable_pic
2479

    
2480
elif enabled mips; then
2481

    
2482
    check_asm loongson '"dmult.g $1, $2, $3"'
2483
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2484

    
2485
elif enabled ppc; then
2486

    
2487
    enable local_aligned_8 local_aligned_16
2488

    
2489
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2490
    check_asm ibm_asm   '"add 0, 0, 0"'
2491
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2492
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2493

    
2494
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2495
    if enabled altivec; then
2496
        nogas=warn
2497
        check_cflags -maltivec -mabi=altivec &&
2498
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2499
        check_cflags -faltivec
2500

    
2501
        # check if our compiler supports Motorola AltiVec C API
2502
        check_cc <<EOF || disable altivec
2503
$inc_altivec_h
2504
int main(void) {
2505
    vector signed int v1, v2, v3;
2506
    v1 = vec_add(v2,v3);
2507
    return 0;
2508
}
2509
EOF
2510

    
2511
        # check if our compiler supports braces for vector declarations
2512
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2513
$inc_altivec_h
2514
int main (void) { (vector int) {1}; return 0; }
2515
EOF
2516
    fi
2517

    
2518
elif enabled sparc; then
2519

    
2520
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2521
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2522

    
2523
elif enabled x86; then
2524

    
2525
    enable local_aligned_8 local_aligned_16
2526

    
2527
    # check whether EBP is available on x86
2528
    # As 'i' is stored on the stack, this program will crash
2529
    # if the base pointer is used to access it because the
2530
    # base pointer is cleared in the inline assembly code.
2531
    check_exec_crash <<EOF && enable ebp_available
2532
    volatile int i=0;
2533
    __asm__ volatile (
2534
        "xorl %%ebp, %%ebp"
2535
    ::: "%ebp");
2536
    return i;
2537
EOF
2538

    
2539
    # check whether EBX is available on x86
2540
    check_asm ebx_available '""::"b"(0)' &&
2541
        check_asm ebx_available '"":::"%ebx"'
2542

    
2543
    # check whether more than 10 operands are supported
2544
    check_cc <<EOF && enable ten_operands
2545
int main(void) {
2546
    int x=0;
2547
    __asm__ volatile(
2548
        ""
2549
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2550
    );
2551
    return 0;
2552
}
2553
EOF
2554

    
2555
    # check whether binutils is new enough to compile SSSE3/MMX2
2556
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2557
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2558

    
2559
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2560

    
2561
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2562
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2563
    enabled     pic           && append YASMFLAGS "-DPIC"
2564
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2565
    case "$objformat" in
2566
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2567
    esac
2568
    if ! disabled yasm; then
2569
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2570
            warn "yasm not found, performance will suffer"
2571
    fi
2572

    
2573
    case "$cpu" in
2574
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2575
            disable fast_clz
2576
        ;;
2577
    esac
2578

    
2579
fi
2580

    
2581
if enabled asm; then
2582
    as=${gas:=$as}
2583
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2584
        $nogas "GNU assembler not found, install gas-preprocessor"
2585
fi
2586

    
2587
if check_func dlopen; then
2588
    ldl=
2589
elif check_func dlopen -ldl; then
2590
    ldl=-ldl
2591
fi
2592

    
2593
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2594
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2595

    
2596
check_func  fcntl
2597
check_func  fork
2598
check_func  getaddrinfo $network_extralibs
2599
check_func  gethrtime
2600
check_func  getrusage
2601
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2602
check_func  inet_aton $network_extralibs
2603
check_func  isatty
2604
check_func  ${malloc_prefix}memalign            && enable memalign
2605
check_func  mkstemp
2606
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2607
check_func  setrlimit
2608
check_func  strerror_r
2609
check_func_headers io.h setmode
2610
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2611
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2612
check_func_headers windows.h GetProcessTimes
2613
check_func_headers windows.h VirtualAlloc
2614

    
2615
check_header conio.h
2616
check_header dlfcn.h
2617
check_header dxva2api.h
2618
check_header malloc.h
2619
check_header poll.h
2620
check_header sys/mman.h
2621
check_header sys/resource.h
2622
check_header sys/select.h
2623
check_header termios.h
2624
check_header vdpau/vdpau.h
2625
check_header vdpau/vdpau_x11.h
2626
check_header X11/extensions/XvMClib.h
2627

    
2628
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2629

    
2630
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2631
     enabled_any $need_memalign ; then
2632
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2633
fi
2634

    
2635
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2636
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2637

    
2638
# check for some common methods of building with pthread support
2639
# do this before the optional library checks as some of them require pthreads
2640
if ! disabled pthreads && ! enabled w32threads; then
2641
    enable pthreads
2642
    if check_func pthread_create; then
2643
        :
2644
    elif check_func pthread_create -pthread; then
2645
        add_cflags -pthread
2646
        add_extralibs -pthread
2647
    elif check_func pthread_create -pthreads; then
2648
        add_cflags -pthreads
2649
        add_extralibs -pthreads
2650
    elif check_func pthread_create -lpthreadGC2; then
2651
        add_extralibs -lpthreadGC2
2652
    elif ! check_lib pthread.h pthread_create -lpthread; then
2653
        disable pthreads
2654
    fi
2655
fi
2656

    
2657
for thread in $THREADS_LIST; do
2658
    if enabled $thread; then
2659
        test -n "$thread_type" &&
2660
            die "ERROR: Only one thread type must be selected." ||
2661
            thread_type="$thread"
2662
    fi
2663
done
2664

    
2665
check_lib math.h sin -lm
2666
disabled vaapi || check_lib va/va.h vaInitialize -lva
2667

    
2668
check_mathfunc exp2
2669
check_mathfunc exp2f
2670
check_mathfunc llrint
2671
check_mathfunc llrintf
2672
check_mathfunc log2
2673
check_mathfunc log2f
2674
check_mathfunc lrint
2675
check_mathfunc lrintf
2676
check_mathfunc round
2677
check_mathfunc roundf
2678
check_mathfunc truncf
2679

    
2680
# these are off by default, so fail if requested and not available
2681
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2682
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2683
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2684
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2685
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2686
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2687
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2688
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2689
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2690
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2691
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2692
enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2693
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2694
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2695
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2696
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2697
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2698
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2699
enabled libvpx     && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx &&
2700
                        check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2701
                      die "ERROR: libvpx version must be >=0.9.1"; }
2702
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2703
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2704
                        die "ERROR: libx264 version must be >= 0.98."; }
2705
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2706
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2707
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2708

    
2709
# libdc1394 check
2710
if enabled libdc1394; then
2711
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2712
        enable libdc1394_2; } ||
2713
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2714
        enable libdc1394_1; } ||
2715
    die "ERROR: No version of libdc1394 found "
2716
fi
2717

    
2718
SDL_CONFIG="${cross_prefix}sdl-config"
2719
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2720
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2721
    sdl_libs=$("${SDL_CONFIG}" --libs)
2722
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2723
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2724
    enable sdl &&
2725
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2726
fi
2727

    
2728
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2729

    
2730
if enabled network; then
2731
    check_type "sys/types.h sys/socket.h" socklen_t
2732
    check_type netdb.h "struct addrinfo"
2733
    check_type netinet/in.h "struct ipv6_mreq"
2734
    check_type netinet/in.h "struct sockaddr_in6"
2735
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2736
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2737
    # Prefer arpa/inet.h over winsock2
2738
    if check_header arpa/inet.h ; then
2739
        check_func closesocket
2740
    elif check_header winsock2.h ; then
2741
        check_func_headers winsock2.h closesocket -lws2 && \
2742
            network_extralibs="-lws2" || \
2743
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2744
            network_extralibs="-lws2_32"; }
2745
        check_type ws2tcpip.h socklen_t
2746
        check_type ws2tcpip.h "struct addrinfo"
2747
        check_type ws2tcpip.h "struct ipv6_mreq"
2748
        check_type ws2tcpip.h "struct sockaddr_in6"
2749
        check_type ws2tcpip.h "struct sockaddr_storage"
2750
        check_struct winsock2.h "struct sockaddr" sa_len
2751
    else
2752
        disable network
2753
    fi
2754
fi
2755

    
2756
check_header linux/videodev.h
2757
check_header linux/videodev2.h
2758
check_header sys/videoio.h
2759

    
2760
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2761
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2762
# w32api 3.12 had it defined wrong
2763
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2764

    
2765
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2766
{ check_header dev/bktr/ioctl_meteor.h &&
2767
  check_header dev/bktr/ioctl_bt848.h; } ||
2768
{ check_header machine/ioctl_meteor.h &&
2769
  check_header machine/ioctl_bt848.h; } ||
2770
{ check_header dev/video/meteor/ioctl_meteor.h &&
2771
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2772
check_header dev/ic/bt8xx.h
2773

    
2774
check_header sys/soundcard.h
2775
check_header soundcard.h
2776

    
2777
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2778

    
2779
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2780

    
2781
enabled x11grab                         &&
2782
check_header X11/Xlib.h                 &&
2783
check_header X11/extensions/XShm.h      &&
2784
check_header X11/extensions/Xfixes.h    &&
2785
check_func XOpenDisplay -lX11           &&
2786
check_func XShmCreateImage -lX11 -lXext &&
2787
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2788

    
2789
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2790
check_cpp_condition \
2791
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2792
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2793
      disable vdpau; }
2794
fi
2795

    
2796
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2797

    
2798
# add some useful compiler flags if supported
2799
check_cflags -Wdeclaration-after-statement
2800
check_cflags -Wall
2801
check_cflags -Wno-parentheses
2802
check_cflags -Wno-switch
2803
check_cflags -Wdisabled-optimization
2804
check_cflags -Wpointer-arith
2805
check_cflags -Wredundant-decls
2806
check_cflags -Wno-pointer-sign
2807
check_cflags -Wcast-qual
2808
check_cflags -Wwrite-strings
2809
check_cflags -Wtype-limits
2810
check_cflags -Wundef
2811
check_cflags -Wmissing-prototypes
2812
enabled extra_warnings && check_cflags -Winline
2813

    
2814
# add some linker flags
2815
check_ldflags -Wl,--warn-common
2816
check_ldflags -Wl,--as-needed
2817
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'
2818
check_ldflags -Wl,-Bsymbolic
2819

    
2820
echo "X{};" > $TMPV
2821
if test_ldflags -Wl,--version-script,$TMPV; then
2822
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2823
    check_cc <<EOF && enable symver_asm_label
2824
void ff_foo(void) __asm__ ("av_foo@VERSION");
2825
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2826
EOF
2827
    check_cc <<EOF && enable symver_gnu_asm
2828
__asm__(".symver ff_foo,av_foo@VERSION");
2829
void ff_foo(void) {}
2830
EOF
2831
fi
2832

    
2833
if enabled small; then
2834
    add_cflags $size_cflags
2835
    optimizations="small"
2836
elif enabled optimizations; then
2837
    add_cflags $speed_cflags
2838
else
2839
    add_cflags $noopt_cflags
2840
fi
2841
check_cflags -fno-math-errno
2842
check_cflags -fno-signed-zeros
2843

    
2844
if enabled icc; then
2845
    # Just warnings, no remarks
2846
    check_cflags -w1
2847
    # -wd: Disable following warnings
2848
    # 144, 167, 556: -Wno-pointer-sign
2849
    # 10006: ignoring unknown option -fno-signed-zeros
2850
    # 10156: ignoring option '-W'; no argument required
2851
    check_cflags -wd144,167,556,10006,10156
2852
    # 11030: Warning unknown option --as-needed
2853
    # 10156: ignoring option '-export'; no argument required
2854
    check_ldflags -wd10156,11030
2855
    # Allow to compile with optimizations
2856
    check_ldflags -march=$cpu
2857
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2858
    enable ebp_available
2859
elif enabled ccc; then
2860
    # disable some annoying warnings
2861
    add_cflags -msg_disable cvtu32to64
2862
    add_cflags -msg_disable embedcomment
2863
    add_cflags -msg_disable needconstext
2864
    add_cflags -msg_disable nomainieee
2865
    add_cflags -msg_disable ptrmismatch1
2866
    add_cflags -msg_disable unreachcode
2867
elif enabled gcc; then
2868
    check_cflags -fno-tree-vectorize
2869
    check_cflags -Werror=implicit-function-declaration
2870
    check_cflags -Werror=missing-prototypes
2871
elif enabled clang; then
2872
    check_cflags -Qunused-arguments
2873
elif enabled armcc; then
2874
    # 2523: use of inline assembler is deprecated
2875
    add_cflags -Wrvct,--diag_suppress=2523
2876
    add_cflags -Wrvct,--diag_suppress=1207
2877
elif enabled tms470; then
2878
    add_cflags -pds=824 -pds=837
2879
fi
2880

    
2881
enabled_any $THREADS_LIST      && enable threads
2882

    
2883
check_deps $CONFIG_LIST       \
2884
           $CONFIG_EXTRA      \
2885
           $HAVE_LIST         \
2886
           $DECODER_LIST      \
2887
           $ENCODER_LIST      \
2888
           $HWACCEL_LIST      \
2889
           $PARSER_LIST       \
2890
           $BSF_LIST          \
2891
           $DEMUXER_LIST      \
2892
           $MUXER_LIST        \
2893
           $FILTER_LIST       \
2894
           $INDEV_LIST        \
2895
           $OUTDEV_LIST       \
2896
           $PROTOCOL_LIST     \
2897
           $ACODEC_TESTS      \
2898
           $VCODEC_TESTS      \
2899
           $LAVF_TESTS        \
2900
           $LAVFI_TESTS       \
2901
           $SEEK_TESTS        \
2902

    
2903
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2904

    
2905
echo "install prefix            $prefix"
2906
echo "source path               $source_path"
2907
echo "C compiler                $cc"
2908
echo "ARCH                      $arch ($cpu)"
2909
if test "$build_suffix" != ""; then
2910
    echo "build suffix              $build_suffix"
2911
fi
2912
if test "$extra_version" != ""; then
2913
    echo "version string suffix     $extra_version"
2914
fi
2915
echo "big-endian                ${bigendian-no}"
2916
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2917
if enabled x86; then
2918
    echo "yasm                      ${yasm-no}"
2919
    echo "MMX enabled               ${mmx-no}"
2920
    echo "MMX2 enabled              ${mmx2-no}"
2921
    echo "3DNow! enabled            ${amd3dnow-no}"
2922
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2923
    echo "SSE enabled               ${sse-no}"
2924
    echo "SSSE3 enabled             ${ssse3-no}"
2925
    echo "CMOV enabled              ${cmov-no}"
2926
    echo "CMOV is fast              ${fast_cmov-no}"
2927
    echo "EBX available             ${ebx_available-no}"
2928
    echo "EBP available             ${ebp_available-no}"
2929
    echo "10 operands supported     ${ten_operands-no}"
2930
fi
2931
if enabled arm; then
2932
    echo "ARMv5TE enabled           ${armv5te-no}"
2933
    echo "ARMv6 enabled             ${armv6-no}"
2934
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2935
    echo "ARM VFP enabled           ${armvfp-no}"
2936
    echo "IWMMXT enabled            ${iwmmxt-no}"
2937
    echo "NEON enabled              ${neon-no}"
2938
fi
2939
if enabled mips; then
2940
    echo "MMI enabled               ${mmi-no}"
2941
fi
2942
if enabled ppc; then
2943
    echo "AltiVec enabled           ${altivec-no}"
2944
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2945
    echo "dcbzl available           ${dcbzl-no}"
2946
fi
2947
if enabled sparc; then
2948
    echo "VIS enabled               ${vis-no}"
2949
fi
2950
echo "debug symbols             ${debug-no}"
2951
echo "strip symbols             ${stripping-no}"
2952
echo "optimizations             ${optimizations-no}"
2953
echo "static                    ${static-no}"
2954
echo "shared                    ${shared-no}"
2955
echo "postprocessing support    ${postproc-no}"
2956
echo "new filter support        ${avfilter-no}"
2957
echo "network support           ${network-no}"
2958
echo "threading support         ${thread_type-no}"
2959
echo "SDL support               ${sdl-no}"
2960
echo "Sun medialib support      ${mlib-no}"
2961
echo "AVISynth enabled          ${avisynth-no}"
2962
echo "libdc1394 support         ${libdc1394-no}"
2963
echo "libdirac enabled          ${libdirac-no}"
2964
echo "libfaac enabled           ${libfaac-no}"
2965
echo "libgsm enabled            ${libgsm-no}"
2966
echo "libmp3lame enabled        ${libmp3lame-no}"
2967
echo "libnut enabled            ${libnut-no}"
2968
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2969
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2970
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2971
echo "librtmp enabled           ${librtmp-no}"
2972
echo "libschroedinger enabled   ${libschroedinger-no}"
2973
echo "libspeex enabled          ${libspeex-no}"
2974
echo "libtheora enabled         ${libtheora-no}"
2975
echo "libvorbis enabled         ${libvorbis-no}"
2976
echo "libvpx enabled            ${libvpx-no}"
2977
echo "libx264 enabled           ${libx264-no}"
2978
echo "libxavs enabled           ${libxavs-no}"
2979
echo "libxvid enabled           ${libxvid-no}"
2980
echo "zlib enabled              ${zlib-no}"
2981
echo "bzlib enabled             ${bzlib-no}"
2982
echo
2983

    
2984
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2985
    echo "Enabled ${type}s:"
2986
    eval list=\$$(toupper $type)_LIST
2987
    print_enabled '_*' $list | sort | pr -3 -t
2988
    echo
2989
done
2990

    
2991
license="LGPL version 2.1 or later"
2992
if enabled nonfree; then
2993
    license="nonfree and unredistributable"
2994
elif enabled gplv3; then
2995
    license="GPL version 3 or later"
2996
elif enabled lgplv3; then
2997
    license="LGPL version 3 or later"
2998
elif enabled gpl; then
2999
    license="GPL version 2 or later"
3000
fi
3001

    
3002
echo "License: $license"
3003

    
3004
echo "Creating config.mak and config.h..."
3005

    
3006
# build tree in object directory if source path is different from current one
3007
if enabled source_path_used; then
3008
    DIRS="
3009
        doc
3010
        libavcodec
3011
        libavcodec/$arch
3012
        libavcore
3013
        libavdevice
3014
        libavfilter
3015
        libavformat
3016
        libavutil
3017
        libavutil/$arch
3018
        libpostproc
3019
        libswscale
3020
        libswscale/$arch
3021
        tests
3022
        tools
3023
    "
3024
    FILES="
3025
        Makefile
3026
        common.mak
3027
        subdir.mak
3028
        doc/texi2pod.pl
3029
        libavcodec/Makefile
3030
        libavcodec/${arch}/Makefile
3031
        libavcore/Makefile
3032
        libavdevice/Makefile
3033
        libavfilter/Makefile
3034
        libavformat/Makefile
3035
        libavutil/Makefile
3036
        libpostproc/Makefile
3037
        libswscale/Makefile
3038
    "
3039
    map 'mkdir -p $v' $DIRS;
3040
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3041
fi
3042

    
3043
enabled stripping || strip="echo skipping strip"
3044

    
3045
cat > config.mak <<EOF
3046
# Automatically generated by configure - do not modify!
3047
ifndef FFMPEG_CONFIG_MAK
3048
FFMPEG_CONFIG_MAK=1
3049
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3050
prefix=$prefix
3051
LIBDIR=\$(DESTDIR)$libdir
3052
SHLIBDIR=\$(DESTDIR)$shlibdir
3053
INCDIR=\$(DESTDIR)$incdir
3054
BINDIR=\$(DESTDIR)$bindir
3055
DATADIR=\$(DESTDIR)$datadir
3056
MANDIR=\$(DESTDIR)$mandir
3057
SRC_PATH="$source_path"
3058
SRC_PATH_BARE=$source_path
3059
BUILD_ROOT="$PWD"
3060
CC_IDENT=$cc_ident
3061
ARCH=$arch
3062
CC=$cc
3063
AS=$as
3064
LD=$ld
3065
DEPCC=$dep_cc
3066
YASM=$yasmexe
3067
YASMDEP=$yasmexe
3068
AR=$ar
3069
RANLIB=$ranlib
3070
CP=cp -p
3071
LN_S=$ln_s
3072
STRIP=$strip
3073
CPPFLAGS=$CPPFLAGS
3074
CFLAGS=$CFLAGS
3075
ASFLAGS=$ASFLAGS
3076
CC_O=$CC_O
3077
LDFLAGS=$LDFLAGS
3078
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3079
SHFLAGS=$SHFLAGS
3080
YASMFLAGS=$YASMFLAGS
3081
BUILDSUF=$build_suffix
3082
FULLNAME=$FULLNAME
3083
LIBPREF=$LIBPREF
3084
LIBSUF=$LIBSUF
3085
LIBNAME=$LIBNAME
3086
SLIBPREF=$SLIBPREF
3087
SLIBSUF=$SLIBSUF
3088
EXESUF=$EXESUF
3089
EXTRA_VERSION=$extra_version
3090
DEPFLAGS=$DEPFLAGS
3091
CCDEP=$CCDEP
3092
ASDEP=$ASDEP
3093
CC_DEPFLAGS=$CC_DEPFLAGS
3094
AS_DEPFLAGS=$AS_DEPFLAGS
3095
HOSTCC=$host_cc
3096
HOSTCFLAGS=$host_cflags
3097
HOSTEXESUF=$HOSTEXESUF
3098
HOSTLDFLAGS=$host_ldflags
3099
HOSTLIBS=$host_libs
3100
TARGET_EXEC=$target_exec
3101
TARGET_PATH=$target_path
3102
SDL_LIBS=$sdl_libs
3103
SDL_CFLAGS=$sdl_cflags
3104
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3105
EXTRALIBS=$extralibs
3106
INSTALL=install
3107
LIBTARGET=${LIBTARGET}
3108
SLIBNAME=${SLIBNAME}
3109
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3110
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3111
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3112
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3113
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3114
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3115
SAMPLES=$samples
3116
EOF
3117

    
3118
get_version(){
3119
    name=$1
3120
    file=$source_path/$2
3121
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3122
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3123
    lcname=$(tolower $name)
3124
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3125
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3126
}
3127

    
3128
get_version LIBSWSCALE  libswscale/swscale.h
3129
get_version LIBPOSTPROC libpostproc/postprocess.h
3130
get_version LIBAVCODEC  libavcodec/avcodec.h
3131
get_version LIBAVCORE   libavcore/avcore.h
3132
get_version LIBAVDEVICE libavdevice/avdevice.h
3133
get_version LIBAVFORMAT libavformat/avformat.h
3134
get_version LIBAVUTIL   libavutil/avutil.h
3135
get_version LIBAVFILTER libavfilter/avfilter.h
3136

    
3137
cat > $TMPH <<EOF
3138
/* Automatically generated by configure - do not modify! */
3139
#ifndef FFMPEG_CONFIG_H
3140
#define FFMPEG_CONFIG_H
3141
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3142
#define FFMPEG_LICENSE "$(c_escape $license)"
3143
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3144
#define CC_TYPE "$cc_type"
3145
#define CC_VERSION $cc_version
3146
#define restrict $_restrict
3147
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3148
#define EXTERN_PREFIX "${extern_prefix}"
3149
#define EXTERN_ASM ${extern_prefix}
3150
EOF
3151

    
3152
test -n "$malloc_prefix" &&
3153
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3154

    
3155
if enabled small || disabled optimizations; then
3156
    echo "#undef  av_always_inline"  >> $TMPH
3157
    echo "#define av_always_inline"  >> $TMPH
3158
fi
3159

    
3160
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3161
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3162
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3163
                                      $CONFIG_EXTRA      \
3164
                                      $DECODER_LIST      \
3165
                                      $ENCODER_LIST      \
3166
                                      $HWACCEL_LIST      \
3167
                                      $PARSER_LIST       \
3168
                                      $BSF_LIST          \
3169
                                      $DEMUXER_LIST      \
3170
                                      $MUXER_LIST        \
3171
                                      $FILTER_LIST       \
3172
                                      $PROTOCOL_LIST     \
3173
                                      $INDEV_LIST        \
3174
                                      $OUTDEV_LIST       \
3175

    
3176
cat >>config.mak <<EOF
3177
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3178
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3179
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3180
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3181
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3182
EOF
3183

    
3184
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3185
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3186

    
3187
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3188
cp_if_changed $TMPH config.h
3189
touch .config
3190

    
3191
cat > $TMPH <<EOF
3192
/* Generated by ffconf */
3193
#ifndef AVUTIL_AVCONFIG_H
3194
#define AVUTIL_AVCONFIG_H
3195
EOF
3196

    
3197
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3198

    
3199
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3200

    
3201
cp_if_changed $TMPH libavutil/avconfig.h
3202

    
3203
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
3204

    
3205
test -n "$WARNINGS" && printf "\n$WARNINGS"
3206

    
3207
# build pkg-config files
3208

    
3209
pkgconfig_generate(){
3210
name=$1
3211
shortname=${name#lib}${build_suffix}
3212
comment=$2
3213
version=$3
3214
libs=$4
3215
requires=$5
3216
enabled $shortname || return 0
3217
cat <<EOF > $name/$name.pc
3218
prefix=$prefix
3219
exec_prefix=\${prefix}
3220
libdir=$libdir
3221
includedir=$incdir
3222

    
3223
Name: $name
3224
Description: $comment
3225
Version: $version
3226
Requires: $(enabled shared || echo $requires)
3227
Requires.private: $(enabled shared && echo $requires)
3228
Conflicts:
3229
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3230
Libs.private: $(enabled shared && echo $libs)
3231
Cflags: -I\${includedir}
3232
EOF
3233
cat <<EOF > $name/$name-uninstalled.pc
3234
prefix=
3235
exec_prefix=
3236
libdir=\${pcfiledir}
3237
includedir=${source_path}
3238

    
3239
Name: $name
3240
Description: $comment
3241
Version: $version
3242
Requires: $requires
3243
Conflicts:
3244
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3245
Cflags: -I\${includedir}
3246
EOF
3247
}
3248

    
3249
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3250
pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3251
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3252
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3253
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3254
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3255
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3256
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"