Statistics
| Branch: | Revision:

ffmpeg / configure @ d72c981c

History | View | Annotate | Download (94.4 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
  --enable-avfilter-lavf   video filters dependent on avformat [no]
95
  --disable-pthreads       disable pthreads [auto]
96
  --enable-w32threads      use Win32 threads [no]
97
  --enable-x11grab         enable X11 grabbing [no]
98
  --disable-network        disable network support [no]
99
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
100
  --enable-gray            enable full grayscale support (slower color)
101
  --disable-swscale-alpha  disable alpha channel support in swscale
102
  --disable-fastdiv        disable table-based division
103
  --enable-small           optimize for size instead of speed
104
  --disable-aandct         disable AAN DCT code
105
  --disable-dct            disable DCT code
106
  --disable-fft            disable FFT code
107
  --disable-golomb         disable Golomb 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
    avfilter_lavf
854
    avformat
855
    avisynth
856
    bzlib
857
    dct
858
    doc
859
    dwt
860
    dxva2
861
    fastdiv
862
    ffmpeg
863
    ffplay
864
    ffprobe
865
    ffserver
866
    fft
867
    golomb
868
    gpl
869
    gray
870
    h264dsp
871
    hardcoded_tables
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
h261_encoder_select="aandct"
1197
h263_decoder_select="h263_parser"
1198
h263_encoder_select="aandct"
1199
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1200
h263i_decoder_select="h263_decoder"
1201
h263p_encoder_select="h263_encoder"
1202
h264_decoder_select="golomb h264dsp"
1203
h264_dxva2_hwaccel_deps="dxva2api_h"
1204
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1205
h264_vaapi_hwaccel_select="vaapi"
1206
h264_vdpau_decoder_select="vdpau h264_decoder"
1207
imc_decoder_select="fft mdct"
1208
jpegls_decoder_select="golomb"
1209
jpegls_encoder_select="golomb"
1210
ljpeg_encoder_select="aandct"
1211
loco_decoder_select="golomb"
1212
mjpeg_encoder_select="aandct"
1213
mlp_decoder_select="mlp_parser"
1214
mp1float_decoder_select="dct"
1215
mp2float_decoder_select="dct"
1216
mp3adufloat_decoder_select="dct"
1217
mp3float_decoder_select="dct"
1218
mp3on4float_decoder_select="dct"
1219
mpeg1video_encoder_select="aandct"
1220
mpeg2video_encoder_select="aandct"
1221
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1222
mpeg4_encoder_select="h263_encoder"
1223
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1224
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1225
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1226
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1227
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1228
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1229
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1230
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1231
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1232
msmpeg4v1_decoder_select="h263_decoder"
1233
msmpeg4v1_encoder_select="h263_encoder"
1234
msmpeg4v2_decoder_select="h263_decoder"
1235
msmpeg4v2_encoder_select="h263_encoder"
1236
msmpeg4v3_decoder_select="h263_decoder"
1237
msmpeg4v3_encoder_select="h263_encoder"
1238
nellymoser_decoder_select="mdct"
1239
nellymoser_encoder_select="mdct"
1240
png_decoder_select="zlib"
1241
png_encoder_select="zlib"
1242
qcelp_decoder_select="lsp"
1243
qdm2_decoder_select="mdct rdft"
1244
ra_144_encoder_select="lpc"
1245
rv10_decoder_select="h263_decoder"
1246
rv10_encoder_select="h263_encoder"
1247
rv20_decoder_select="h263_decoder"
1248
rv20_encoder_select="h263_encoder"
1249
rv30_decoder_select="golomb h264dsp"
1250
rv40_decoder_select="golomb h264dsp"
1251
shorten_decoder_select="golomb"
1252
sipr_decoder_select="lsp"
1253
snow_decoder_select="dwt"
1254
snow_encoder_select="aandct dwt"
1255
sonic_decoder_select="golomb"
1256
sonic_encoder_select="golomb"
1257
sonic_ls_encoder_select="golomb"
1258
svq1_encoder_select="aandct"
1259
svq3_decoder_select="golomb h264dsp"
1260
svq3_decoder_suggest="zlib"
1261
theora_decoder_select="vp3_decoder"
1262
tiff_decoder_suggest="zlib"
1263
tiff_encoder_suggest="zlib"
1264
truehd_decoder_select="mlp_decoder"
1265
tscc_decoder_select="zlib"
1266
twinvq_decoder_select="mdct lsp"
1267
vc1_decoder_select="h263_decoder"
1268
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1269
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1270
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1271
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1272
vorbis_decoder_select="mdct"
1273
vorbis_encoder_select="mdct"
1274
vp6a_decoder_select="vp6_decoder"
1275
vp6f_decoder_select="vp6_decoder"
1276
vp8_decoder_select="h264dsp"
1277
wmapro_decoder_select="mdct"
1278
wmav1_decoder_select="mdct"
1279
wmav1_encoder_select="mdct"
1280
wmav2_decoder_select="mdct"
1281
wmav2_encoder_select="mdct"
1282
wmavoice_decoder_select="lsp rdft dct mdct"
1283
wmv1_decoder_select="h263_decoder"
1284
wmv1_encoder_select="h263_encoder"
1285
wmv2_decoder_select="h263_decoder"
1286
wmv2_encoder_select="h263_encoder"
1287
wmv3_decoder_select="vc1_decoder"
1288
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1289
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1290
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1291
zlib_decoder_select="zlib"
1292
zlib_encoder_select="zlib"
1293
zmbv_decoder_select="zlib"
1294
zmbv_encoder_select="zlib"
1295

    
1296
vaapi_deps="va_va_h"
1297
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1298

    
1299
# parsers
1300
h264_parser_select="golomb h264dsp"
1301

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

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

    
1354
# indevs / outdevs
1355
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1356
alsa_indev_extralibs="-lasound"
1357
alsa_outdev_deps="alsa_asoundlib_h"
1358
alsa_outdev_extralibs="-lasound"
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
jack_indev_extralibs="-ljack"
1363
libdc1394_indev_deps="libdc1394"
1364
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1365
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1366
v4l_indev_deps="linux_videodev_h"
1367
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1368
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1369
vfwcap_indev_extralibs="-lavicap32"
1370
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1371
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1372

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

    
1383
# filters
1384
movie_filter_deps="avfilter_lavf"
1385
avfilter_lavf_deps="avformat"
1386

    
1387
# libraries
1388
avdevice_deps="avcodec avformat"
1389
avformat_deps="avcodec"
1390

    
1391
# programs
1392
ffmpeg_deps="avcodec avformat swscale"
1393
ffmpeg_select="buffer_filter"
1394
ffplay_deps="avcodec avformat swscale sdl"
1395
ffplay_select="rdft"
1396
ffprobe_deps="avcodec avformat"
1397
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1398
ffserver_extralibs='$ldl'
1399

    
1400
doc_deps="texi2html"
1401

    
1402
# tests
1403

    
1404
test_deps(){
1405
    suf1=$1
1406
    suf2=$2
1407
    shift 2
1408
    for v; do
1409
        dep=${v%=*}
1410
        tests=${v#*=}
1411
        for name in ${tests}; do
1412
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1413
        done
1414
    done
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
pixdesc_be_test_deps="bigendian"
1492
pixdesc_le_test_deps="!bigendian"
1493

    
1494
# default parameters
1495

    
1496
logfile="config.log"
1497

    
1498
# installation paths
1499
prefix_default="/usr/local"
1500
bindir_default='${prefix}/bin'
1501
datadir_default='${prefix}/share/ffmpeg'
1502
incdir_default='${prefix}/include'
1503
libdir_default='${prefix}/lib'
1504
mandir_default='${prefix}/share/man'
1505
shlibdir_default="$libdir_default"
1506

    
1507
# toolchain
1508
ar_default="ar"
1509
cc_default="gcc"
1510
cc_version=\"unknown\"
1511
host_cc_default="gcc"
1512
ln_s="ln -sf"
1513
nm_default="nm"
1514
objformat="elf"
1515
ranlib="ranlib"
1516
strip_default="strip"
1517
yasmexe="yasm"
1518
nogas=":"
1519

    
1520
nm_opts='-g'
1521

    
1522
# machine
1523
arch_default=$(uname -m)
1524
cpu="generic"
1525

    
1526
# OS
1527
target_os_default=$(tolower $(uname -s))
1528
host_os=$target_os_default
1529

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

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

    
1568
CC_O='-o $@'
1569

    
1570
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1571
host_libs='-lm'
1572

    
1573
target_path='$(CURDIR)'
1574

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

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

    
1594
for v in "$@"; do
1595
    r=${v#*=}
1596
    l=${v%"$r"}
1597
    r=$(sh_quote "$r")
1598
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1599
done
1600

    
1601
find_things(){
1602
    thing=$1
1603
    pattern=$2
1604
    file=$source_path/$3
1605
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1606
}
1607

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

    
1620
find_tests(){
1621
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1622
}
1623

    
1624
ACODEC_TESTS=$(find_tests acodec)
1625
VCODEC_TESTS=$(find_tests vsynth1)
1626
LAVF_TESTS=$(find_tests lavf)
1627
LAVFI_TESTS=$(find_tests lavfi)
1628
SEEK_TESTS=$(find_tests seek seek_)
1629

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

    
1632
for n in $COMPONENT_LIST; do
1633
    v=$(toupper ${n%s})_LIST
1634
    eval enable \$$v
1635
    eval ${n}_if_any="\$$v"
1636
done
1637

    
1638
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1639

    
1640
die_unknown(){
1641
    echo "Unknown option \"$1\"."
1642
    echo "See $0 --help for available options."
1643
    exit 1
1644
}
1645

    
1646
show_list() {
1647
    suffix=_$1
1648
    shift
1649
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1650
    exit 0
1651
}
1652

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

    
1708
disabled logging && logfile=/dev/null
1709

    
1710
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1711
set >> $logfile
1712

    
1713
test -n "$cross_prefix" && enable cross_compile
1714

    
1715
if enabled cross_compile; then
1716
    test -n "$arch" && test -n "$target_os" ||
1717
        die "Must specify target arch and OS when cross-compiling"
1718
fi
1719

    
1720
set_default arch target_os
1721

    
1722
ar_default="${cross_prefix}${ar_default}"
1723
cc_default="${cross_prefix}${cc_default}"
1724
nm_default="${cross_prefix}${nm_default}"
1725
ranlib="${cross_prefix}${ranlib}"
1726
strip_default="${cross_prefix}${strip_default}"
1727

    
1728
sysinclude_default="${sysroot}/usr/include"
1729

    
1730
set_default cc nm strip sysinclude
1731
enabled cross_compile || host_cc_default=$cc
1732
set_default host_cc
1733

    
1734
exesuf() {
1735
    case $1 in
1736
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1737
    esac
1738
}
1739

    
1740
EXESUF=$(exesuf $target_os)
1741
HOSTEXESUF=$(exesuf $host_os)
1742

    
1743
# set temporary file name
1744
: ${TMPDIR:=$TEMPDIR}
1745
: ${TMPDIR:=$TMP}
1746
: ${TMPDIR:=/tmp}
1747

    
1748
if ! check_cmd type mktemp; then
1749
    # simple replacement for missing mktemp
1750
    # NOT SAFE FOR GENERAL USE
1751
    mktemp(){
1752
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1753
    }
1754
fi
1755

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

    
1764
trap 'rm -f -- $TMPFILES' EXIT
1765
trap exit HUP INT TERM
1766

    
1767
tmpfile TMPC  .c
1768
tmpfile TMPE  $EXESUF
1769
tmpfile TMPH  .h
1770
tmpfile TMPO  .o
1771
tmpfile TMPS  .S
1772
tmpfile TMPV  .ver
1773
tmpfile TMPSH .sh
1774

    
1775
unset -f mktemp
1776

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

    
1790
filter_cflags=echo
1791
filter_cppflags=echo
1792
filter_asflags=echo
1793

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

    
1939
test -n "$cc_type" && enable $cc_type ||
1940
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1941

    
1942
: ${as_default:=$cc}
1943
: ${dep_cc_default:=$cc}
1944
: ${ld_default:=$cc}
1945
set_default ar as dep_cc ld
1946

    
1947
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1948
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1949

    
1950
add_cflags $extra_cflags
1951
add_asflags $extra_cflags
1952

    
1953
if test -n "$sysroot"; then
1954
    case "$cc_type" in
1955
        gcc)
1956
            add_cppflags --sysroot="$sysroot"
1957
            add_ldflags --sysroot="$sysroot"
1958
        ;;
1959
        tms470)
1960
            add_cppflags -I"$sysinclude"
1961
            add_ldflags  --sysroot="$sysroot"
1962
        ;;
1963
        clang)
1964
            add_cppflags -isysroot "$sysroot"
1965
            add_ldflags -isysroot "$sysroot"
1966
        ;;
1967
    esac
1968
fi
1969

    
1970
if test "$cpu" = host; then
1971
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1972

    
1973
    case "$cc_type" in
1974
        gcc)
1975
            check_native(){
1976
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1977
                sed -n "/$1=/{
1978
                            s/.*$1=\\([^ ]*\\).*/\\1/
1979
                            p
1980
                            q
1981
                        }" $TMPE
1982
            }
1983
            cpu=$(check_native -march || check_native -mcpu)
1984
        ;;
1985
    esac
1986

    
1987
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1988
fi
1989

    
1990
# Deal with common $arch aliases
1991
case "$arch" in
1992
    arm*)
1993
        arch="arm"
1994
    ;;
1995
    mips|mipsel|IP*)
1996
        arch="mips"
1997
    ;;
1998
    mips64*)
1999
        arch="mips"
2000
        subarch="mips64"
2001
    ;;
2002
    parisc|hppa)
2003
        arch="parisc"
2004
    ;;
2005
    parisc64|hppa64)
2006
        arch="parisc"
2007
        subarch="parisc64"
2008
    ;;
2009
    "Power Macintosh"|ppc|powerpc)
2010
        arch="ppc"
2011
    ;;
2012
    ppc64|powerpc64)
2013
        arch="ppc"
2014
        subarch="ppc64"
2015
    ;;
2016
    s390|s390x)
2017
        arch="s390"
2018
    ;;
2019
    sh4|sh)
2020
        arch="sh4"
2021
    ;;
2022
    sun4u|sparc64)
2023
        arch="sparc"
2024
        subarch="sparc64"
2025
    ;;
2026
    i[3-6]86|i86pc|BePC|x86_64|amd64)
2027
        arch="x86"
2028
    ;;
2029
esac
2030

    
2031
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2032
enable $arch
2033

    
2034
# Add processor-specific flags
2035
if test "$cpu" = generic; then
2036
    : do nothing
2037
elif enabled ppc; then
2038

    
2039
    case $(tolower $cpu) in
2040
        601|ppc601|powerpc601)
2041
            cpuflags="-mcpu=601"
2042
            disable altivec
2043
        ;;
2044
        603*|ppc603*|powerpc603*)
2045
            cpuflags="-mcpu=603"
2046
            disable altivec
2047
        ;;
2048
        604*|ppc604*|powerpc604*)
2049
            cpuflags="-mcpu=604"
2050
            disable altivec
2051
        ;;
2052
        g3|75*|ppc75*|powerpc75*)
2053
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2054
            disable altivec
2055
        ;;
2056
        g4|745*|ppc745*|powerpc745*)
2057
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2058
        ;;
2059
        74*|ppc74*|powerpc74*)
2060
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2061
        ;;
2062
        g5|970|ppc970|powerpc970|power4*)
2063
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2064
        ;;
2065
        cell)
2066
            cpuflags="-mcpu=cell"
2067
            enable ldbrx
2068
        ;;
2069
        e500v2)
2070
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2071
            disable altivec
2072
        ;;
2073
        e500)
2074
            cpuflags="-mcpu=8540 -mhard-float"
2075
            disable altivec
2076
        ;;
2077
    esac
2078

    
2079
elif enabled x86; then
2080

    
2081
    case $cpu in
2082
        i[345]86|pentium)
2083
            cpuflags="-march=$cpu"
2084
            disable mmx
2085
        ;;
2086
        # targets that do NOT support conditional mov (cmov)
2087
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2088
            cpuflags="-march=$cpu"
2089
            disable cmov
2090
        ;;
2091
        # targets that do support conditional mov (cmov)
2092
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
2093
            cpuflags="-march=$cpu"
2094
            enable cmov
2095
            enable fast_cmov
2096
        ;;
2097
        # targets that do support conditional mov but on which it's slow
2098
        pentium4|pentium4m|prescott|nocona)
2099
            cpuflags="-march=$cpu"
2100
            enable cmov
2101
            disable fast_cmov
2102
        ;;
2103
    esac
2104

    
2105
elif enabled sparc; then
2106

    
2107
    case $cpu in
2108
        niagara)
2109
            cpuflags="-mcpu=$cpu"
2110
            disable vis
2111
        ;;
2112
        sparc64)
2113
            cpuflags="-mcpu=v9"
2114
        ;;
2115
    esac
2116

    
2117
elif enabled arm; then
2118

    
2119
    case $cpu in
2120
        armv*)
2121
            cpuflags="-march=$cpu"
2122
        ;;
2123
        *)
2124
            cpuflags="-mcpu=$cpu"
2125
        ;;
2126
    esac
2127

    
2128
elif enabled alpha; then
2129

    
2130
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2131

    
2132
elif enabled bfin; then
2133

    
2134
    cpuflags="-mcpu=$cpu"
2135

    
2136
elif enabled mips; then
2137

    
2138
    cpuflags="-march=$cpu"
2139

    
2140
elif enabled avr32; then
2141

    
2142
    case $cpu in
2143
        ap7[02]0[0-2])
2144
            subarch="avr32_ap"
2145
            cpuflags="-mpart=$cpu"
2146
        ;;
2147
        ap)
2148
            subarch="avr32_ap"
2149
            cpuflags="-march=$cpu"
2150
        ;;
2151
        uc3[ab]*)
2152
            subarch="avr32_uc"
2153
            cpuflags="-mcpu=$cpu"
2154
        ;;
2155
        uc)
2156
            subarch="avr32_uc"
2157
            cpuflags="-march=$cpu"
2158
        ;;
2159
    esac
2160

    
2161
fi
2162

    
2163
add_cflags $cpuflags
2164
add_asflags $cpuflags
2165

    
2166
# compiler sanity check
2167
check_exec <<EOF
2168
int main(void){ return 0; }
2169
EOF
2170
if test "$?" != 0; then
2171
    echo "$cc is unable to create an executable file."
2172
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2173
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2174
        echo "Only do this if you know what cross compiling means."
2175
    fi
2176
    die "C compiler test failed."
2177
fi
2178

    
2179
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2180
check_cflags -std=c99
2181
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2182
#include <stdlib.h>
2183
EOF
2184
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2185
#include <stdlib.h>
2186
EOF
2187

    
2188
check_host_cflags -std=c99
2189

    
2190
case "$arch" in
2191
    alpha|ia64|mips|parisc|sparc)
2192
        spic=$shared
2193
    ;;
2194
    x86)
2195
        subarch="x86_32"
2196
        check_cc <<EOF && subarch="x86_64"
2197
        int test[(int)sizeof(char*) - 7];
2198
EOF
2199
        if test "$subarch" = "x86_64"; then
2200
            spic=$shared
2201
        fi
2202
    ;;
2203
esac
2204

    
2205
enable $subarch
2206
enabled spic && enable pic
2207

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

    
2355
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2356

    
2357
set_default $PATHS_LIST
2358

    
2359
# we need to build at least one lib type
2360
if ! enabled_any static shared; then
2361
    cat <<EOF
2362
At least one library type must be built.
2363
Specify --enable-static to build the static libraries or --enable-shared to
2364
build the shared libraries as well. To only build the shared libraries specify
2365
--disable-static in addition to --enable-shared.
2366
EOF
2367
    exit 1;
2368
fi
2369

    
2370
disabled static && LIBNAME=""
2371

    
2372
die_license_disabled() {
2373
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2374
}
2375

    
2376
die_license_disabled gpl libx264
2377
die_license_disabled gpl libxavs
2378
die_license_disabled gpl libxvid
2379
die_license_disabled gpl postproc
2380
die_license_disabled gpl x11grab
2381

    
2382
die_license_disabled nonfree libfaac
2383

    
2384
die_license_disabled version3 libopencore_amrnb
2385
die_license_disabled version3 libopencore_amrwb
2386

    
2387
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2388

    
2389
check_deps $ARCH_EXT_LIST
2390

    
2391
disabled optimizations || check_cflags -fomit-frame-pointer
2392

    
2393
enable_pic() {
2394
    enable pic
2395
    add_cppflags -DPIC
2396
    add_cflags   -fPIC
2397
    add_asflags  -fPIC
2398
}
2399

    
2400
enabled pic && enable_pic
2401

    
2402
check_cc <<EOF || die "Symbol mangling check failed."
2403
int ff_extern;
2404
EOF
2405
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2406
extern_prefix=${sym%%ff_extern*}
2407

    
2408
check_cc <<EOF && enable inline_asm
2409
void foo(void) { __asm__ volatile ("" ::); }
2410
EOF
2411

    
2412
_restrict=
2413
for restrict_keyword in restrict __restrict__ __restrict; do
2414
    check_cc <<EOF && _restrict=$restrict_keyword && break
2415
void foo(char * $restrict_keyword p);
2416
EOF
2417
done
2418

    
2419
check_cc <<EOF && enable attribute_packed
2420
struct { int x; } __attribute__((packed)) x;
2421
EOF
2422

    
2423
check_cc <<EOF && enable attribute_may_alias
2424
union { int x; } __attribute__((may_alias)) x;
2425
EOF
2426

    
2427
check_cc <<EOF || die "endian test failed"
2428
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2429
EOF
2430
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2431

    
2432
if enabled alpha; then
2433

    
2434
    check_cflags -mieee
2435

    
2436
elif enabled arm; then
2437

    
2438
    check_cflags -marm
2439
    nogas=die
2440

    
2441
    check_ld <<EOF && enable vfp_args
2442
__asm__ (".eabi_attribute 28, 1");
2443
int main(void) { return 0; }
2444
EOF
2445

    
2446
    # We have to check if pld is a nop and disable it.
2447
    check_asm pld '"pld [r0]"'
2448

    
2449
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2450
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2451
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2452
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2453
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2454
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2455

    
2456
    enabled_all armv6t2 shared !pic && enable_pic
2457

    
2458
elif enabled mips; then
2459

    
2460
    check_asm loongson '"dmult.g $1, $2, $3"'
2461
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2462

    
2463
elif enabled ppc; then
2464

    
2465
    enable local_aligned_8 local_aligned_16
2466

    
2467
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2468
    check_asm ibm_asm   '"add 0, 0, 0"'
2469
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2470
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2471

    
2472
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2473
    if enabled altivec; then
2474
        nogas=warn
2475
        check_cflags -maltivec -mabi=altivec &&
2476
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2477
        check_cflags -faltivec
2478

    
2479
        # check if our compiler supports Motorola AltiVec C API
2480
        check_cc <<EOF || disable altivec
2481
$inc_altivec_h
2482
int main(void) {
2483
    vector signed int v1, v2, v3;
2484
    v1 = vec_add(v2,v3);
2485
    return 0;
2486
}
2487
EOF
2488

    
2489
        # check if our compiler supports braces for vector declarations
2490
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2491
$inc_altivec_h
2492
int main (void) { (vector int) {1}; return 0; }
2493
EOF
2494
    fi
2495

    
2496
elif enabled sparc; then
2497

    
2498
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2499
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2500

    
2501
elif enabled x86; then
2502

    
2503
    enable local_aligned_8 local_aligned_16
2504

    
2505
    # check whether EBP is available on x86
2506
    # As 'i' is stored on the stack, this program will crash
2507
    # if the base pointer is used to access it because the
2508
    # base pointer is cleared in the inline assembly code.
2509
    check_exec_crash <<EOF && enable ebp_available
2510
    volatile int i=0;
2511
    __asm__ volatile (
2512
        "xorl %%ebp, %%ebp"
2513
    ::: "%ebp");
2514
    return i;
2515
EOF
2516

    
2517
    # check whether EBX is available on x86
2518
    check_asm ebx_available '""::"b"(0)' &&
2519
        check_asm ebx_available '"":::"%ebx"'
2520

    
2521
    # check whether more than 10 operands are supported
2522
    check_cc <<EOF && enable ten_operands
2523
int main(void) {
2524
    int x=0;
2525
    __asm__ volatile(
2526
        ""
2527
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2528
    );
2529
    return 0;
2530
}
2531
EOF
2532

    
2533
    # check whether binutils is new enough to compile SSSE3/MMX2
2534
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2535
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2536

    
2537
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2538

    
2539
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2540
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2541
    enabled     pic           && append YASMFLAGS "-DPIC"
2542
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2543
    case "$objformat" in
2544
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2545
    esac
2546
    if ! disabled yasm; then
2547
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2548
            warn "yasm not found, performance will suffer"
2549
    fi
2550

    
2551
    case "$cpu" in
2552
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2553
            disable fast_clz
2554
        ;;
2555
    esac
2556

    
2557
fi
2558

    
2559
if enabled asm; then
2560
    as=${gas:=$as}
2561
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2562
        $nogas "GNU assembler not found, install gas-preprocessor"
2563
fi
2564

    
2565
if check_func dlopen; then
2566
    ldl=
2567
elif check_func dlopen -ldl; then
2568
    ldl=-ldl
2569
fi
2570

    
2571
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2572
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2573

    
2574
check_func  fcntl
2575
check_func  fork
2576
check_func  getaddrinfo $network_extralibs
2577
check_func  gethrtime
2578
check_func  getrusage
2579
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2580
check_func  inet_aton $network_extralibs
2581
check_func  isatty
2582
check_func  ${malloc_prefix}memalign            && enable memalign
2583
check_func  mkstemp
2584
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2585
check_func  setrlimit
2586
check_func  strerror_r
2587
check_func_headers io.h setmode
2588
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2589
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2590
check_func_headers windows.h GetProcessTimes
2591
check_func_headers windows.h VirtualAlloc
2592

    
2593
check_header conio.h
2594
check_header dlfcn.h
2595
check_header dxva2api.h
2596
check_header malloc.h
2597
check_header poll.h
2598
check_header sys/mman.h
2599
check_header sys/resource.h
2600
check_header sys/select.h
2601
check_header termios.h
2602
check_header vdpau/vdpau.h
2603
check_header vdpau/vdpau_x11.h
2604
check_header X11/extensions/XvMClib.h
2605

    
2606
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2607

    
2608
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2609
     enabled_any $need_memalign ; then
2610
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2611
fi
2612

    
2613
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2614
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2615

    
2616
# check for some common methods of building with pthread support
2617
# do this before the optional library checks as some of them require pthreads
2618
if ! disabled pthreads && ! enabled w32threads; then
2619
    enable pthreads
2620
    if check_func pthread_create; then
2621
        :
2622
    elif check_func pthread_create -pthread; then
2623
        add_cflags -pthread
2624
        add_extralibs -pthread
2625
    elif check_func pthread_create -pthreads; then
2626
        add_cflags -pthreads
2627
        add_extralibs -pthreads
2628
    elif check_func pthread_create -lpthreadGC2; then
2629
        add_extralibs -lpthreadGC2
2630
    elif ! check_lib pthread.h pthread_create -lpthread; then
2631
        disable pthreads
2632
    fi
2633
fi
2634

    
2635
for thread in $THREADS_LIST; do
2636
    if enabled $thread; then
2637
        test -n "$thread_type" &&
2638
            die "ERROR: Only one thread type must be selected." ||
2639
            thread_type="$thread"
2640
    fi
2641
done
2642

    
2643
check_lib math.h sin -lm
2644
disabled vaapi || check_lib va/va.h vaInitialize -lva
2645

    
2646
check_mathfunc exp2
2647
check_mathfunc exp2f
2648
check_mathfunc llrint
2649
check_mathfunc llrintf
2650
check_mathfunc log2
2651
check_mathfunc log2f
2652
check_mathfunc lrint
2653
check_mathfunc lrintf
2654
check_mathfunc round
2655
check_mathfunc roundf
2656
check_mathfunc truncf
2657

    
2658
# these are off by default, so fail if requested and not available
2659
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2660
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2661
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2662
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2663
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2664
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2665
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2666
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2667
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2668
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2669
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2670
enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2671
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2672
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2673
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2674
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2675
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2676
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2677
enabled libvpx     && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx &&
2678
                        check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2679
                      die "ERROR: libvpx version must be >=0.9.1"; }
2680
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2681
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2682
                        die "ERROR: libx264 version must be >= 0.98."; }
2683
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2684
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2685
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2686

    
2687
# libdc1394 check
2688
if enabled libdc1394; then
2689
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2690
        enable libdc1394_2; } ||
2691
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2692
        enable libdc1394_1; } ||
2693
    die "ERROR: No version of libdc1394 found "
2694
fi
2695

    
2696
SDL_CONFIG="${cross_prefix}sdl-config"
2697
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2698
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2699
    sdl_libs=$("${SDL_CONFIG}" --libs)
2700
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2701
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2702
    enable sdl &&
2703
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2704
fi
2705

    
2706
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2707

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

    
2734
check_header linux/videodev.h
2735
check_header linux/videodev2.h
2736
check_header sys/videoio.h
2737

    
2738
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2739
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2740
# w32api 3.12 had it defined wrong
2741
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2742

    
2743
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2744
{ check_header dev/bktr/ioctl_meteor.h &&
2745
  check_header dev/bktr/ioctl_bt848.h; } ||
2746
{ check_header machine/ioctl_meteor.h &&
2747
  check_header machine/ioctl_bt848.h; } ||
2748
{ check_header dev/video/meteor/ioctl_meteor.h &&
2749
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2750
check_header dev/ic/bt8xx.h
2751

    
2752
check_header sys/soundcard.h
2753
check_header soundcard.h
2754

    
2755
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2756

    
2757
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2758

    
2759
enabled x11grab                         &&
2760
check_header X11/Xlib.h                 &&
2761
check_header X11/extensions/XShm.h      &&
2762
check_header X11/extensions/Xfixes.h    &&
2763
check_func XOpenDisplay -lX11           &&
2764
check_func XShmCreateImage -lX11 -lXext &&
2765
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2766

    
2767
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2768
check_cpp_condition \
2769
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2770
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2771
      disable vdpau; }
2772
fi
2773

    
2774
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2775

    
2776
# add some useful compiler flags if supported
2777
check_cflags -Wdeclaration-after-statement
2778
check_cflags -Wall
2779
check_cflags -Wno-switch
2780
check_cflags -Wdisabled-optimization
2781
check_cflags -Wpointer-arith
2782
check_cflags -Wredundant-decls
2783
check_cflags -Wno-pointer-sign
2784
check_cflags -Wcast-qual
2785
check_cflags -Wwrite-strings
2786
check_cflags -Wtype-limits
2787
check_cflags -Wundef
2788
check_cflags -Wmissing-prototypes
2789
enabled extra_warnings && check_cflags -Winline
2790

    
2791
# add some linker flags
2792
check_ldflags -Wl,--warn-common
2793
check_ldflags -Wl,--as-needed
2794
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'
2795
check_ldflags -Wl,-Bsymbolic
2796

    
2797
echo "X{};" > $TMPV
2798
if test_ldflags -Wl,--version-script,$TMPV; then
2799
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2800
    check_cc <<EOF && enable symver_asm_label
2801
void ff_foo(void) __asm__ ("av_foo@VERSION");
2802
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2803
EOF
2804
    check_cc <<EOF && enable symver_gnu_asm
2805
__asm__(".symver ff_foo,av_foo@VERSION");
2806
void ff_foo(void) {}
2807
EOF
2808
fi
2809

    
2810
if enabled small; then
2811
    add_cflags $size_cflags
2812
    optimizations="small"
2813
elif enabled optimizations; then
2814
    add_cflags $speed_cflags
2815
else
2816
    add_cflags $noopt_cflags
2817
fi
2818
check_cflags -fno-math-errno
2819
check_cflags -fno-signed-zeros
2820

    
2821
if enabled icc; then
2822
    # Just warnings, no remarks
2823
    check_cflags -w1
2824
    # -wd: Disable following warnings
2825
    # 144, 167, 556: -Wno-pointer-sign
2826
    # 10006: ignoring unknown option -fno-signed-zeros
2827
    # 10156: ignoring option '-W'; no argument required
2828
    check_cflags -wd144,167,556,10006,10156
2829
    # 11030: Warning unknown option --as-needed
2830
    # 10156: ignoring option '-export'; no argument required
2831
    check_ldflags -wd10156,11030
2832
    # Allow to compile with optimizations
2833
    check_ldflags -march=$cpu
2834
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2835
    enable ebp_available
2836
elif enabled ccc; then
2837
    # disable some annoying warnings
2838
    add_cflags -msg_disable cvtu32to64
2839
    add_cflags -msg_disable embedcomment
2840
    add_cflags -msg_disable needconstext
2841
    add_cflags -msg_disable nomainieee
2842
    add_cflags -msg_disable ptrmismatch1
2843
    add_cflags -msg_disable unreachcode
2844
elif enabled gcc; then
2845
    check_cflags -fno-tree-vectorize
2846
    check_cflags -Werror=implicit-function-declaration
2847
    check_cflags -Werror=missing-prototypes
2848
elif enabled clang; then
2849
    check_cflags -Qunused-arguments
2850
elif enabled armcc; then
2851
    # 2523: use of inline assembler is deprecated
2852
    add_cflags -Wrvct,--diag_suppress=2523
2853
    add_cflags -Wrvct,--diag_suppress=1207
2854
elif enabled tms470; then
2855
    add_cflags -pds=824 -pds=837
2856
fi
2857

    
2858
enabled_any $THREADS_LIST      && enable threads
2859

    
2860
check_deps $CONFIG_LIST       \
2861
           $CONFIG_EXTRA      \
2862
           $HAVE_LIST         \
2863
           $DECODER_LIST      \
2864
           $ENCODER_LIST      \
2865
           $HWACCEL_LIST      \
2866
           $PARSER_LIST       \
2867
           $BSF_LIST          \
2868
           $DEMUXER_LIST      \
2869
           $MUXER_LIST        \
2870
           $FILTER_LIST       \
2871
           $INDEV_LIST        \
2872
           $OUTDEV_LIST       \
2873
           $PROTOCOL_LIST     \
2874
           $ACODEC_TESTS      \
2875
           $VCODEC_TESTS      \
2876
           $LAVF_TESTS        \
2877
           $LAVFI_TESTS       \
2878
           $SEEK_TESTS        \
2879

    
2880
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2881

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

    
2962
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2963
    echo "Enabled ${type}s:"
2964
    eval list=\$$(toupper $type)_LIST
2965
    print_enabled '_*' $list | sort | pr -3 -t
2966
    echo
2967
done
2968

    
2969
license="LGPL version 2.1 or later"
2970
if enabled nonfree; then
2971
    license="nonfree and unredistributable"
2972
elif enabled gplv3; then
2973
    license="GPL version 3 or later"
2974
elif enabled lgplv3; then
2975
    license="LGPL version 3 or later"
2976
elif enabled gpl; then
2977
    license="GPL version 2 or later"
2978
fi
2979

    
2980
echo "License: $license"
2981

    
2982
echo "Creating config.mak and config.h..."
2983

    
2984
# build tree in object directory if source path is different from current one
2985
if enabled source_path_used; then
2986
    DIRS="
2987
        doc
2988
        libavcodec
2989
        libavcodec/$arch
2990
        libavcore
2991
        libavdevice
2992
        libavfilter
2993
        libavformat
2994
        libavutil
2995
        libavutil/$arch
2996
        libpostproc
2997
        libswscale
2998
        libswscale/$arch
2999
        tests
3000
        tools
3001
    "
3002
    FILES="
3003
        Makefile
3004
        common.mak
3005
        subdir.mak
3006
        doc/texi2pod.pl
3007
        libavcodec/Makefile
3008
        libavcodec/${arch}/Makefile
3009
        libavcore/Makefile
3010
        libavdevice/Makefile
3011
        libavfilter/Makefile
3012
        libavformat/Makefile
3013
        libavutil/Makefile
3014
        libpostproc/Makefile
3015
        libswscale/Makefile
3016
    "
3017
    map 'mkdir -p $v' $DIRS;
3018
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3019
fi
3020

    
3021
enabled stripping || strip="echo skipping strip"
3022

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

    
3096
get_version(){
3097
    name=$1
3098
    file=$source_path/$2
3099
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3100
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3101
    lcname=$(tolower $name)
3102
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3103
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3104
}
3105

    
3106
get_version LIBSWSCALE  libswscale/swscale.h
3107
get_version LIBPOSTPROC libpostproc/postprocess.h
3108
get_version LIBAVCODEC  libavcodec/avcodec.h
3109
get_version LIBAVCORE   libavcore/avcore.h
3110
get_version LIBAVDEVICE libavdevice/avdevice.h
3111
get_version LIBAVFORMAT libavformat/avformat.h
3112
get_version LIBAVUTIL   libavutil/avutil.h
3113
get_version LIBAVFILTER libavfilter/avfilter.h
3114

    
3115
cat > $TMPH <<EOF
3116
/* Automatically generated by configure - do not modify! */
3117
#ifndef FFMPEG_CONFIG_H
3118
#define FFMPEG_CONFIG_H
3119
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3120
#define FFMPEG_LICENSE "$(c_escape $license)"
3121
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3122
#define CC_TYPE "$cc_type"
3123
#define CC_VERSION $cc_version
3124
#define restrict $_restrict
3125
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3126
#define EXTERN_PREFIX "${extern_prefix}"
3127
#define EXTERN_ASM ${extern_prefix}
3128
EOF
3129

    
3130
test -n "$malloc_prefix" &&
3131
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3132

    
3133
if enabled small || disabled optimizations; then
3134
    echo "#undef  av_always_inline"  >> $TMPH
3135
    echo "#define av_always_inline"  >> $TMPH
3136
fi
3137

    
3138
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3139
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3140
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3141
                                      $CONFIG_EXTRA      \
3142
                                      $DECODER_LIST      \
3143
                                      $ENCODER_LIST      \
3144
                                      $HWACCEL_LIST      \
3145
                                      $PARSER_LIST       \
3146
                                      $BSF_LIST          \
3147
                                      $DEMUXER_LIST      \
3148
                                      $MUXER_LIST        \
3149
                                      $FILTER_LIST       \
3150
                                      $PROTOCOL_LIST     \
3151
                                      $INDEV_LIST        \
3152
                                      $OUTDEV_LIST       \
3153

    
3154
cat >>config.mak <<EOF
3155
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3156
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3157
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3158
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3159
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3160
EOF
3161

    
3162
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3163
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3164

    
3165
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3166
cp_if_changed $TMPH config.h
3167
touch .config
3168

    
3169
cat > $TMPH <<EOF
3170
/* Generated by ffconf */
3171
#ifndef AVUTIL_AVCONFIG_H
3172
#define AVUTIL_AVCONFIG_H
3173
EOF
3174

    
3175
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3176

    
3177
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3178

    
3179
cp_if_changed $TMPH libavutil/avconfig.h
3180

    
3181
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
3182

    
3183
test -n "$WARNINGS" && printf "\n$WARNINGS"
3184

    
3185
# build pkg-config files
3186

    
3187
pkgconfig_generate(){
3188
name=$1
3189
shortname=${name#lib}${build_suffix}
3190
comment=$2
3191
version=$3
3192
libs=$4
3193
requires=$5
3194
enabled $shortname || return
3195
cat <<EOF > $name/$name.pc
3196
prefix=$prefix
3197
exec_prefix=\${prefix}
3198
libdir=$libdir
3199
includedir=$incdir
3200

    
3201
Name: $name
3202
Description: $comment
3203
Version: $version
3204
Requires: $(enabled shared || echo $requires)
3205
Requires.private: $(enabled shared && echo $requires)
3206
Conflicts:
3207
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3208
Libs.private: $(enabled shared && echo $libs)
3209
Cflags: -I\${includedir}
3210
EOF
3211
cat <<EOF > $name/$name-uninstalled.pc
3212
prefix=
3213
exec_prefix=
3214
libdir=\${pcfiledir}
3215
includedir=${source_path}
3216

    
3217
Name: $name
3218
Description: $comment
3219
Version: $version
3220
Requires: $requires
3221
Conflicts:
3222
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3223
Cflags: -I\${includedir}
3224
EOF
3225
}
3226

    
3227
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3228
pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3229
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3230
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3231
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3232
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3233
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3234
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"