Statistics
| Branch: | Revision:

ffmpeg / configure @ 7c1bb914

History | View | Annotate | Download (93.1 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --disable-avfilter       disable video filter support [no]
93
  --enable-avfilter-lavf   video filters dependent on avformat [no]
94
  --disable-pthreads       disable pthreads [auto]
95
  --enable-w32threads      use Win32 threads [no]
96
  --enable-x11grab         enable X11 grabbing [no]
97
  --disable-network        disable network support [no]
98
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99
  --enable-gray            enable full grayscale support (slower color)
100
  --disable-swscale-alpha  disable alpha channel support in swscale
101
  --disable-fastdiv        disable table-based division
102
  --enable-small           optimize for size instead of speed
103
  --disable-aandct         disable AAN DCT code
104
  --disable-dct            disable DCT code
105
  --disable-fft            disable FFT code
106
  --disable-golomb         disable Golomb code
107
  --disable-lpc            disable LPC code
108
  --disable-mdct           disable MDCT code
109
  --disable-rdft           disable RDFT code
110
  --disable-vaapi          disable VAAPI code
111
  --disable-vdpau          disable VDPAU code
112
  --disable-dxva2          disable DXVA2 code
113
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
116
  --disable-everything     disable all components listed below
117
  --disable-encoder=NAME   disable encoder NAME
118
  --enable-encoder=NAME    enable encoder NAME
119
  --disable-encoders       disable all encoders
120
  --disable-decoder=NAME   disable decoder NAME
121
  --enable-decoder=NAME    enable decoder NAME
122
  --disable-decoders       disable all decoders
123
  --disable-hwaccel=NAME   disable hwaccel NAME
124
  --enable-hwaccel=NAME    enable hwaccel NAME
125
  --disable-hwaccels       disable all hwaccels
126
  --disable-muxer=NAME     disable muxer NAME
127
  --enable-muxer=NAME      enable muxer NAME
128
  --disable-muxers         disable all muxers
129
  --disable-demuxer=NAME   disable demuxer NAME
130
  --enable-demuxer=NAME    enable demuxer NAME
131
  --disable-demuxers       disable all demuxers
132
  --enable-parser=NAME     enable parser NAME
133
  --disable-parser=NAME    disable parser NAME
134
  --disable-parsers        disable all parsers
135
  --enable-bsf=NAME        enable bitstream filter NAME
136
  --disable-bsf=NAME       disable bitstream filter NAME
137
  --disable-bsfs           disable all bitstream filters
138
  --enable-protocol=NAME   enable protocol NAME
139
  --disable-protocol=NAME  disable protocol NAME
140
  --disable-protocols      disable all protocols
141
  --disable-indev=NAME     disable input device NAME
142
  --disable-outdev=NAME    disable output device NAME
143
  --disable-indevs         disable input devices
144
  --disable-outdevs        disable output devices
145
  --disable-devices        disable all devices
146
  --enable-filter=NAME     enable filter NAME
147
  --disable-filter=NAME    disable filter NAME
148
  --disable-filters        disable all filters
149
  --list-decoders          show all available decoders
150
  --list-encoders          show all available encoders
151
  --list-hwaccels          show all available hardware accelerators
152
  --list-muxers            show all available muxers
153
  --list-demuxers          show all available demuxers
154
  --list-parsers           show all available parsers
155
  --list-protocols         show all available protocols
156
  --list-bsfs              show all available bitstream filters
157
  --list-indevs            show all available input devices
158
  --list-outdevs           show all available output devices
159
  --list-filters           show all available filters
160

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

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

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

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

    
248
quotes='""'
249

    
250
log(){
251
    echo "$@" >> $logfile
252
}
253

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

    
260
echolog(){
261
    log "$@"
262
    echo "$@"
263
}
264

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

    
270
die(){
271
    echolog "$@"
272
    cat <<EOF
273

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

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

    
297
tolower(){
298
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
299
}
300

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

    
305
sh_quote(){
306
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
307
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
308
    echo "$v"
309
}
310

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

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

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

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

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

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

    
360
enable(){
361
    set_all yes $*
362
}
363

    
364
disable(){
365
    set_all no $*
366
}
367

    
368
enable_weak(){
369
    set_weak yes $*
370
}
371

    
372
disable_weak(){
373
    set_weak no $*
374
}
375

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

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

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

    
401
enable_deep(){
402
    do_enable_deep $*
403
    enable $*
404
}
405

    
406
enable_deep_weak(){
407
    do_enable_deep $*
408
    enable_weak $*
409
}
410

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

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

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

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

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

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

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

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

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

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

    
475
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
476
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
477
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
478

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

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

    
492
        disable ${cfg}_checking
493
    done
494
}
495

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

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

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

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

    
534
add_cppflags(){
535
    append CPPFLAGS $($filter_cppflags "$@")
536
}
537

    
538
add_cflags(){
539
    append CFLAGS $($filter_cflags "$@")
540
}
541

    
542
add_asflags(){
543
    append ASFLAGS $($filter_asflags "$@")
544
}
545

    
546
add_ldflags(){
547
    append LDFLAGS "$@"
548
}
549

    
550
add_extralibs(){
551
    prepend extralibs "$@"
552
}
553

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

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

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

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

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

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

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

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

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

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

    
633
check_ldflags(){
634
    log check_ldflags "$@"
635
    test_ldflags "$@" && add_ldflags "$@"
636
}
637

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

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

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

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

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

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

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

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

    
724
check_exec_crash(){
725
    code=$(cat)
726

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

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

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

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

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

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

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

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

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

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

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

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

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

    
911
THREADS_LIST='
912
    pthreads
913
    w32threads
914
'
915

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

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

    
959
HAVE_LIST_PUB='
960
    bigendian
961
    fast_unaligned
962
'
963

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

    
1060
# options emitted with CONFIG_ prefix but not available on command line
1061
CONFIG_EXTRA="
1062
    avutil
1063
    gplv3
1064
    lgplv3
1065
"
1066

    
1067
CMDLINE_SELECT="
1068
    $ARCH_EXT_LIST
1069
    $CONFIG_LIST
1070
    $THREADS_LIST
1071
    asm
1072
    cross_compile
1073
    debug
1074
    extra_warnings
1075
    logging
1076
    optimizations
1077
    stripping
1078
    yasm
1079
"
1080

    
1081
PATHS_LIST='
1082
    bindir
1083
    datadir
1084
    incdir
1085
    libdir
1086
    mandir
1087
    prefix
1088
    shlibdir
1089
'
1090

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

    
1121
CMDLINE_APPEND="
1122
    extra_cflags
1123
"
1124

    
1125
# code dependency declarations
1126

    
1127
# architecture extensions
1128

    
1129
armv5te_deps="arm"
1130
armv6_deps="arm"
1131
armv6t2_deps="arm"
1132
armvfp_deps="arm"
1133
iwmmxt_deps="arm"
1134
neon_deps="arm"
1135

    
1136
mmi_deps="mips"
1137

    
1138
altivec_deps="ppc"
1139
ppc4xx_deps="ppc"
1140

    
1141
vis_deps="sparc"
1142

    
1143
x86_64_suggest="cmov fast_cmov"
1144
amd3dnow_deps="mmx"
1145
amd3dnowext_deps="amd3dnow"
1146
mmx_deps="x86"
1147
mmx2_deps="mmx"
1148
sse_deps="mmx"
1149
ssse3_deps="sse"
1150

    
1151
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1152
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1153
fast_unaligned_if_any="armv6 ppc x86"
1154

    
1155
need_memalign="altivec neon sse"
1156
inline_asm_deps="!tms470"
1157

    
1158
symver_if_any="symver_asm_label symver_gnu_asm"
1159

    
1160
# subsystems
1161
dct_select="rdft"
1162
mdct_select="fft"
1163
rdft_select="fft"
1164

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

    
1292
vaapi_deps="va_va_h"
1293
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1294

    
1295
# parsers
1296
h264_parser_select="golomb h264dsp"
1297

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

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

    
1349
# indevs / outdevs
1350
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1351
alsa_indev_extralibs="-lasound"
1352
alsa_outdev_deps="alsa_asoundlib_h"
1353
alsa_outdev_extralibs="-lasound"
1354
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1355
dv1394_indev_deps="dv1394 dv_demuxer"
1356
jack_indev_deps="jack_jack_h"
1357
jack_indev_extralibs="-ljack"
1358
libdc1394_indev_deps="libdc1394"
1359
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1360
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1361
v4l_indev_deps="linux_videodev_h"
1362
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1363
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1364
vfwcap_indev_extralibs="-lavicap32"
1365
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1366
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1367

    
1368
# protocols
1369
gopher_protocol_deps="network"
1370
http_protocol_deps="network"
1371
http_protocol_select="tcp_protocol"
1372
mmst_protocol_deps="network"
1373
rtmp_protocol_select="tcp_protocol"
1374
rtp_protocol_select="udp_protocol"
1375
tcp_protocol_deps="network"
1376
udp_protocol_deps="network"
1377

    
1378
# filters
1379
movie_filter_deps="avfilter_lavf"
1380
avfilter_lavf_deps="avformat"
1381

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

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

    
1395
doc_deps="texi2html"
1396

    
1397
# tests
1398

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

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

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

    
1485
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1486
pixdesc_be_test_deps="bigendian"
1487
pixdesc_le_test_deps="!bigendian"
1488

    
1489
# default parameters
1490

    
1491
logfile="config.log"
1492

    
1493
# installation paths
1494
prefix_default="/usr/local"
1495
bindir_default='${prefix}/bin'
1496
datadir_default='${prefix}/share/ffmpeg'
1497
incdir_default='${prefix}/include'
1498
libdir_default='${prefix}/lib'
1499
mandir_default='${prefix}/share/man'
1500
shlibdir_default="$libdir_default"
1501

    
1502
# toolchain
1503
ar_default="ar"
1504
cc_default="gcc"
1505
cc_version=\"unknown\"
1506
host_cc_default="gcc"
1507
ln_s="ln -sf"
1508
nm_default="nm"
1509
objformat="elf"
1510
ranlib="ranlib"
1511
strip_default="strip"
1512
yasmexe="yasm"
1513
nogas=":"
1514

    
1515
nm_opts='-g'
1516

    
1517
# machine
1518
arch_default=$(uname -m)
1519
cpu="generic"
1520

    
1521
# OS
1522
target_os_default=$(tolower $(uname -s))
1523
host_os=$target_os_default
1524

    
1525
# configurable options
1526
enable avcodec
1527
enable avdevice
1528
enable avfilter
1529
enable avformat
1530
enable avutil
1531
enable asm
1532
enable debug
1533
enable doc
1534
enable fastdiv
1535
enable ffmpeg
1536
enable ffplay
1537
enable ffprobe
1538
enable ffserver
1539
enable mpegaudio_hp
1540
enable network
1541
enable optimizations
1542
enable protocols
1543
enable static
1544
enable stripping
1545
enable swscale
1546
enable swscale_alpha
1547

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

    
1562
CC_O='-o $@'
1563

    
1564
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1565
host_libs='-lm'
1566

    
1567
target_path='$(CURDIR)'
1568

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

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

    
1588
for v in "$@"; do
1589
    r=${v#*=}
1590
    l=${v%"$r"}
1591
    r=$(sh_quote "$r")
1592
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1593
done
1594

    
1595
find_things(){
1596
    thing=$1
1597
    pattern=$2
1598
    file=$source_path/$3
1599
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1600
}
1601

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

    
1614
find_tests(){
1615
    map 'echo ${v}_test' $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1616
}
1617

    
1618
ACODEC_TESTS=$(find_tests acodec)
1619
VCODEC_TESTS=$(find_tests vsynth1)
1620
LAVF_TESTS=$(find_tests lavf)
1621
LAVFI_TESTS=$(find_tests lavfi)
1622

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

    
1625
for n in $COMPONENT_LIST; do
1626
    v=$(toupper ${n%s})_LIST
1627
    eval enable \$$v
1628
    eval ${n}_if_any="\$$v"
1629
done
1630

    
1631
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS
1632

    
1633
die_unknown(){
1634
    echo "Unknown option \"$1\"."
1635
    echo "See $0 --help for available options."
1636
    exit 1
1637
}
1638

    
1639
show_list() {
1640
    suffix=_$1
1641
    shift
1642
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1643
    exit 0
1644
}
1645

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

    
1701
disabled logging && logfile=/dev/null
1702

    
1703
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1704
set >> $logfile
1705

    
1706
test -n "$cross_prefix" && enable cross_compile
1707

    
1708
if enabled cross_compile; then
1709
    test -n "$arch" && test -n "$target_os" ||
1710
        die "Must specify target arch and OS when cross-compiling"
1711
fi
1712

    
1713
set_default arch target_os
1714

    
1715
ar_default="${cross_prefix}${ar_default}"
1716
cc_default="${cross_prefix}${cc_default}"
1717
nm_default="${cross_prefix}${nm_default}"
1718
ranlib="${cross_prefix}${ranlib}"
1719
strip_default="${cross_prefix}${strip_default}"
1720

    
1721
sysinclude_default="${sysroot}/usr/include"
1722

    
1723
set_default cc nm strip sysinclude
1724
enabled cross_compile || host_cc_default=$cc
1725
set_default host_cc
1726

    
1727
exesuf() {
1728
    case $1 in
1729
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1730
    esac
1731
}
1732

    
1733
EXESUF=$(exesuf $target_os)
1734
HOSTEXESUF=$(exesuf $host_os)
1735

    
1736
# set temporary file name
1737
: ${TMPDIR:=$TEMPDIR}
1738
: ${TMPDIR:=$TMP}
1739
: ${TMPDIR:=/tmp}
1740

    
1741
if ! check_cmd type mktemp; then
1742
    # simple replacement for missing mktemp
1743
    # NOT SAFE FOR GENERAL USE
1744
    mktemp(){
1745
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1746
    }
1747
fi
1748

    
1749
tmpfile(){
1750
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1751
        (set -C; exec > $tmp) 2>/dev/null ||
1752
        die "Unable to create temporary file in $TMPDIR."
1753
    append TMPFILES $tmp
1754
    eval $1=$tmp
1755
}
1756

    
1757
trap 'rm -f -- $TMPFILES' EXIT
1758
trap exit HUP INT TERM
1759

    
1760
tmpfile TMPC  .c
1761
tmpfile TMPE  $EXESUF
1762
tmpfile TMPH  .h
1763
tmpfile TMPO  .o
1764
tmpfile TMPS  .S
1765
tmpfile TMPV  .ver
1766
tmpfile TMPSH .sh
1767

    
1768
unset -f mktemp
1769

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

    
1783
filter_cflags=echo
1784
filter_cppflags=echo
1785
filter_asflags=echo
1786

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

    
1923
test -n "$cc_type" && enable $cc_type ||
1924
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1925

    
1926
: ${as_default:=$cc}
1927
: ${dep_cc_default:=$cc}
1928
: ${ld_default:=$cc}
1929
set_default ar as dep_cc ld
1930

    
1931
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1932
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1933

    
1934
add_cflags $extra_cflags
1935
add_asflags $extra_cflags
1936

    
1937
if test -n "$sysroot"; then
1938
    case "$cc_type" in
1939
        gcc)
1940
            add_cppflags --sysroot="$sysroot"
1941
            add_ldflags --sysroot="$sysroot"
1942
        ;;
1943
        tms470)
1944
            add_cppflags -I"$sysinclude"
1945
            add_ldflags  --sysroot="$sysroot"
1946
        ;;
1947
        clang)
1948
            add_cppflags -isysroot "$sysroot"
1949
            add_ldflags -isysroot "$sysroot"
1950
        ;;
1951
    esac
1952
fi
1953

    
1954
if test "$cpu" = host; then
1955
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1956

    
1957
    case "$cc_type" in
1958
        gcc)
1959
            check_native(){
1960
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1961
                sed -n "/$1=/{
1962
                            s/.*$1=\\([^ ]*\\).*/\\1/
1963
                            p
1964
                            q
1965
                        }" $TMPE
1966
            }
1967
            cpu=$(check_native -march || check_native -mcpu)
1968
        ;;
1969
    esac
1970

    
1971
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1972
fi
1973

    
1974
# Deal with common $arch aliases
1975
case "$arch" in
1976
    arm*)
1977
        arch="arm"
1978
    ;;
1979
    mips|mipsel|IP*)
1980
        arch="mips"
1981
    ;;
1982
    mips64*)
1983
        arch="mips"
1984
        subarch="mips64"
1985
    ;;
1986
    parisc|hppa)
1987
        arch="parisc"
1988
    ;;
1989
    parisc64|hppa64)
1990
        arch="parisc"
1991
        subarch="parisc64"
1992
    ;;
1993
    "Power Macintosh"|ppc|powerpc)
1994
        arch="ppc"
1995
    ;;
1996
    ppc64|powerpc64)
1997
        arch="ppc"
1998
        subarch="ppc64"
1999
    ;;
2000
    s390|s390x)
2001
        arch="s390"
2002
    ;;
2003
    sh4|sh)
2004
        arch="sh4"
2005
    ;;
2006
    sun4u|sparc64)
2007
        arch="sparc"
2008
        subarch="sparc64"
2009
    ;;
2010
    i[3-6]86|i86pc|BePC|x86_64|amd64)
2011
        arch="x86"
2012
    ;;
2013
esac
2014

    
2015
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2016
enable $arch
2017

    
2018
# Add processor-specific flags
2019
if test "$cpu" = generic; then
2020
    : do nothing
2021
elif enabled ppc; then
2022

    
2023
    case $(tolower $cpu) in
2024
        601|ppc601|powerpc601)
2025
            cpuflags="-mcpu=601"
2026
            disable altivec
2027
        ;;
2028
        603*|ppc603*|powerpc603*)
2029
            cpuflags="-mcpu=603"
2030
            disable altivec
2031
        ;;
2032
        604*|ppc604*|powerpc604*)
2033
            cpuflags="-mcpu=604"
2034
            disable altivec
2035
        ;;
2036
        g3|75*|ppc75*|powerpc75*)
2037
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2038
            disable altivec
2039
        ;;
2040
        g4|745*|ppc745*|powerpc745*)
2041
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2042
        ;;
2043
        74*|ppc74*|powerpc74*)
2044
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2045
        ;;
2046
        g5|970|ppc970|powerpc970|power4*)
2047
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2048
        ;;
2049
        cell)
2050
            cpuflags="-mcpu=cell"
2051
            enable ldbrx
2052
        ;;
2053
        e500v2)
2054
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2055
            disable altivec
2056
        ;;
2057
        e500)
2058
            cpuflags="-mcpu=8540 -mhard-float"
2059
            disable altivec
2060
        ;;
2061
    esac
2062

    
2063
elif enabled x86; then
2064

    
2065
    case $cpu in
2066
        i[345]86|pentium)
2067
            cpuflags="-march=$cpu"
2068
            disable mmx
2069
        ;;
2070
        # targets that do NOT support conditional mov (cmov)
2071
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2072
            cpuflags="-march=$cpu"
2073
            disable cmov
2074
        ;;
2075
        # targets that do support conditional mov (cmov)
2076
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
2077
            cpuflags="-march=$cpu"
2078
            enable cmov
2079
            enable fast_cmov
2080
        ;;
2081
        # targets that do support conditional mov but on which it's slow
2082
        pentium4|pentium4m|prescott|nocona)
2083
            cpuflags="-march=$cpu"
2084
            enable cmov
2085
            disable fast_cmov
2086
        ;;
2087
    esac
2088

    
2089
elif enabled sparc; then
2090

    
2091
    case $cpu in
2092
        niagara)
2093
            cpuflags="-mcpu=$cpu"
2094
            disable vis
2095
        ;;
2096
        sparc64)
2097
            cpuflags="-mcpu=v9"
2098
        ;;
2099
    esac
2100

    
2101
elif enabled arm; then
2102

    
2103
    case $cpu in
2104
        armv*)
2105
            cpuflags="-march=$cpu"
2106
        ;;
2107
        *)
2108
            cpuflags="-mcpu=$cpu"
2109
        ;;
2110
    esac
2111

    
2112
elif enabled alpha; then
2113

    
2114
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2115

    
2116
elif enabled bfin; then
2117

    
2118
    cpuflags="-mcpu=$cpu"
2119

    
2120
elif enabled mips; then
2121

    
2122
    cpuflags="-march=$cpu"
2123

    
2124
elif enabled avr32; then
2125

    
2126
    case $cpu in
2127
        ap7[02]0[0-2])
2128
            subarch="avr32_ap"
2129
            cpuflags="-mpart=$cpu"
2130
        ;;
2131
        ap)
2132
            subarch="avr32_ap"
2133
            cpuflags="-march=$cpu"
2134
        ;;
2135
        uc3[ab]*)
2136
            subarch="avr32_uc"
2137
            cpuflags="-mcpu=$cpu"
2138
        ;;
2139
        uc)
2140
            subarch="avr32_uc"
2141
            cpuflags="-march=$cpu"
2142
        ;;
2143
    esac
2144

    
2145
fi
2146

    
2147
add_cflags $cpuflags
2148
add_asflags $cpuflags
2149

    
2150
# compiler sanity check
2151
check_exec <<EOF
2152
int main(void){ return 0; }
2153
EOF
2154
if test "$?" != 0; then
2155
    echo "$cc is unable to create an executable file."
2156
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2157
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2158
        echo "Only do this if you know what cross compiling means."
2159
    fi
2160
    die "C compiler test failed."
2161
fi
2162

    
2163
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2164
check_cflags -std=c99
2165
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2166
#include <stdlib.h>
2167
EOF
2168
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2169
#include <stdlib.h>
2170
EOF
2171

    
2172
check_host_cflags -std=c99
2173

    
2174
case "$arch" in
2175
    alpha|ia64|mips|parisc|sparc)
2176
        spic=$shared
2177
    ;;
2178
    x86)
2179
        subarch="x86_32"
2180
        check_cc <<EOF && subarch="x86_64"
2181
        int test[(int)sizeof(char*) - 7];
2182
EOF
2183
        if test "$subarch" = "x86_64"; then
2184
            spic=$shared
2185
        fi
2186
    ;;
2187
esac
2188

    
2189
enable $subarch
2190
enabled spic && enable pic
2191

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

    
2339
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2340

    
2341
set_default $PATHS_LIST
2342

    
2343
# we need to build at least one lib type
2344
if ! enabled_any static shared; then
2345
    cat <<EOF
2346
At least one library type must be built.
2347
Specify --enable-static to build the static libraries or --enable-shared to
2348
build the shared libraries as well. To only build the shared libraries specify
2349
--disable-static in addition to --enable-shared.
2350
EOF
2351
    exit 1;
2352
fi
2353

    
2354
disabled static && LIBNAME=""
2355

    
2356
die_license_disabled() {
2357
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2358
}
2359

    
2360
die_license_disabled gpl libx264
2361
die_license_disabled gpl libxvid
2362
die_license_disabled gpl postproc
2363
die_license_disabled gpl x11grab
2364

    
2365
die_license_disabled nonfree libfaac
2366

    
2367
die_license_disabled version3 libopencore_amrnb
2368
die_license_disabled version3 libopencore_amrwb
2369

    
2370
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2371

    
2372
check_deps $ARCH_EXT_LIST
2373

    
2374
disabled optimizations || check_cflags -fomit-frame-pointer
2375

    
2376
enable_pic() {
2377
    enable pic
2378
    add_cppflags -DPIC
2379
    add_cflags   -fPIC
2380
    add_asflags  -fPIC
2381
}
2382

    
2383
enabled pic && enable_pic
2384

    
2385
check_cc <<EOF || die "Symbol mangling check failed."
2386
int ff_extern;
2387
EOF
2388
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2389
extern_prefix=${sym%%ff_extern*}
2390

    
2391
check_cc <<EOF && enable inline_asm
2392
void foo(void) { __asm__ volatile ("" ::); }
2393
EOF
2394

    
2395
_restrict=
2396
for restrict_keyword in restrict __restrict__ __restrict; do
2397
    check_cc <<EOF && _restrict=$restrict_keyword && break
2398
void foo(char * $restrict_keyword p);
2399
EOF
2400
done
2401

    
2402
check_cc <<EOF && enable attribute_packed
2403
struct { int x; } __attribute__((packed)) x;
2404
EOF
2405

    
2406
check_cc <<EOF && enable attribute_may_alias
2407
union { int x; } __attribute__((may_alias)) x;
2408
EOF
2409

    
2410
check_cc <<EOF || die "endian test failed"
2411
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2412
EOF
2413
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2414

    
2415
if enabled alpha; then
2416

    
2417
    check_cflags -mieee
2418

    
2419
elif enabled arm; then
2420

    
2421
    check_cflags -marm
2422
    nogas=die
2423

    
2424
    check_ld <<EOF && enable vfp_args
2425
__asm__ (".eabi_attribute 28, 1");
2426
int main(void) { return 0; }
2427
EOF
2428

    
2429
    # We have to check if pld is a nop and disable it.
2430
    check_asm pld '"pld [r0]"'
2431

    
2432
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2433
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2434
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2435
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2436
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2437
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2438

    
2439
    enabled_all armv6t2 shared !pic && enable_pic
2440

    
2441
elif enabled mips; then
2442

    
2443
    check_asm loongson '"dmult.g $1, $2, $3"'
2444
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2445

    
2446
elif enabled ppc; then
2447

    
2448
    enable local_aligned_8 local_aligned_16
2449

    
2450
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2451
    check_asm ibm_asm   '"add 0, 0, 0"'
2452
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2453
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2454

    
2455
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2456
    if enabled altivec; then
2457
        nogas=warn
2458
        check_cflags -maltivec -mabi=altivec &&
2459
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2460
        check_cflags -faltivec
2461

    
2462
        # check if our compiler supports Motorola AltiVec C API
2463
        check_cc <<EOF || disable altivec
2464
$inc_altivec_h
2465
int main(void) {
2466
    vector signed int v1, v2, v3;
2467
    v1 = vec_add(v2,v3);
2468
    return 0;
2469
}
2470
EOF
2471

    
2472
        # check if our compiler supports braces for vector declarations
2473
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2474
$inc_altivec_h
2475
int main (void) { (vector int) {1}; return 0; }
2476
EOF
2477
    fi
2478

    
2479
elif enabled sparc; then
2480

    
2481
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2482
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2483

    
2484
elif enabled x86; then
2485

    
2486
    enable local_aligned_8 local_aligned_16
2487

    
2488
    # check whether EBP is available on x86
2489
    # As 'i' is stored on the stack, this program will crash
2490
    # if the base pointer is used to access it because the
2491
    # base pointer is cleared in the inline assembly code.
2492
    check_exec_crash <<EOF && enable ebp_available
2493
    volatile int i=0;
2494
    __asm__ volatile (
2495
        "xorl %%ebp, %%ebp"
2496
    ::: "%ebp");
2497
    return i;
2498
EOF
2499

    
2500
    # check whether EBX is available on x86
2501
    check_asm ebx_available '""::"b"(0)' &&
2502
        check_asm ebx_available '"":::"%ebx"'
2503

    
2504
    # check whether more than 10 operands are supported
2505
    check_cc <<EOF && enable ten_operands
2506
int main(void) {
2507
    int x=0;
2508
    __asm__ volatile(
2509
        ""
2510
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2511
    );
2512
    return 0;
2513
}
2514
EOF
2515

    
2516
    # check whether binutils is new enough to compile SSSE3/MMX2
2517
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2518
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2519

    
2520
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2521

    
2522
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2523
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2524
    enabled     pic           && append YASMFLAGS "-DPIC"
2525
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2526
    case "$objformat" in
2527
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2528
    esac
2529
    if ! disabled yasm; then
2530
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2531
            warn "yasm not found, performance will suffer"
2532
    fi
2533

    
2534
    case "$cpu" in
2535
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2536
            disable fast_clz
2537
        ;;
2538
    esac
2539

    
2540
fi
2541

    
2542
if enabled asm; then
2543
    as=${gas:=$as}
2544
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2545
        $nogas "GNU assembler not found, install gas-preprocessor"
2546
fi
2547

    
2548
if check_func dlopen; then
2549
    ldl=
2550
elif check_func dlopen -ldl; then
2551
    ldl=-ldl
2552
fi
2553

    
2554
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2555
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2556

    
2557
check_func  fcntl
2558
check_func  fork
2559
check_func  getaddrinfo $network_extralibs
2560
check_func  gethrtime
2561
check_func  getrusage
2562
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2563
check_func  inet_aton $network_extralibs
2564
check_func  isatty
2565
check_func  ${malloc_prefix}memalign            && enable memalign
2566
check_func  mkstemp
2567
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2568
check_func  setrlimit
2569
check_func  strerror_r
2570
check_func_headers io.h setmode
2571
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2572
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2573
check_func_headers windows.h GetProcessTimes
2574
check_func_headers windows.h VirtualAlloc
2575

    
2576
check_header conio.h
2577
check_header dlfcn.h
2578
check_header dxva2api.h
2579
check_header malloc.h
2580
check_header poll.h
2581
check_header sys/mman.h
2582
check_header sys/resource.h
2583
check_header sys/select.h
2584
check_header termios.h
2585
check_header vdpau/vdpau.h
2586
check_header vdpau/vdpau_x11.h
2587
check_header X11/extensions/XvMClib.h
2588

    
2589
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2590

    
2591
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2592
     enabled_any $need_memalign ; then
2593
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2594
fi
2595

    
2596
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2597
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2598

    
2599
# check for some common methods of building with pthread support
2600
# do this before the optional library checks as some of them require pthreads
2601
if ! disabled pthreads && ! enabled w32threads; then
2602
    enable pthreads
2603
    if check_func pthread_create; then
2604
        :
2605
    elif check_func pthread_create -pthread; then
2606
        add_cflags -pthread
2607
        add_extralibs -pthread
2608
    elif check_func pthread_create -pthreads; then
2609
        add_cflags -pthreads
2610
        add_extralibs -pthreads
2611
    elif check_func pthread_create -lpthreadGC2; then
2612
        add_extralibs -lpthreadGC2
2613
    elif ! check_lib pthread.h pthread_create -lpthread; then
2614
        disable pthreads
2615
    fi
2616
fi
2617

    
2618
for thread in $THREADS_LIST; do
2619
    if enabled $thread; then
2620
        test -n "$thread_type" &&
2621
            die "ERROR: Only one thread type must be selected." ||
2622
            thread_type="$thread"
2623
    fi
2624
done
2625

    
2626
check_lib math.h sin -lm
2627
disabled vaapi || check_lib va/va.h vaInitialize -lva
2628

    
2629
check_mathfunc exp2
2630
check_mathfunc exp2f
2631
check_mathfunc llrint
2632
check_mathfunc llrintf
2633
check_mathfunc log2
2634
check_mathfunc log2f
2635
check_mathfunc lrint
2636
check_mathfunc lrintf
2637
check_mathfunc round
2638
check_mathfunc roundf
2639
check_mathfunc truncf
2640

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

    
2669
# libdc1394 check
2670
if enabled libdc1394; then
2671
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2672
        enable libdc1394_2; } ||
2673
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2674
        enable libdc1394_1; } ||
2675
    die "ERROR: No version of libdc1394 found "
2676
fi
2677

    
2678
SDL_CONFIG="${cross_prefix}sdl-config"
2679
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2680
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2681
    sdl_libs=$("${SDL_CONFIG}" --libs)
2682
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2683
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2684
    enable sdl &&
2685
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2686
fi
2687

    
2688
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2689

    
2690
if enabled network; then
2691
    check_type "sys/types.h sys/socket.h" socklen_t
2692
    check_type netdb.h "struct addrinfo"
2693
    check_type netinet/in.h "struct ipv6_mreq"
2694
    check_type netinet/in.h "struct sockaddr_in6"
2695
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2696
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2697
    # Prefer arpa/inet.h over winsock2
2698
    if check_header arpa/inet.h ; then
2699
        check_func closesocket
2700
    elif check_header winsock2.h ; then
2701
        check_func_headers winsock2.h closesocket -lws2 && \
2702
            network_extralibs="-lws2" || \
2703
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2704
            network_extralibs="-lws2_32"; }
2705
        check_type ws2tcpip.h socklen_t
2706
        check_type ws2tcpip.h "struct addrinfo"
2707
        check_type ws2tcpip.h "struct ipv6_mreq"
2708
        check_type ws2tcpip.h "struct sockaddr_in6"
2709
        check_type ws2tcpip.h "struct sockaddr_storage"
2710
        check_struct winsock2.h "struct sockaddr" sa_len
2711
    else
2712
        disable network
2713
    fi
2714
fi
2715

    
2716
check_header linux/videodev.h
2717
check_header linux/videodev2.h
2718
check_header sys/videoio.h
2719

    
2720
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2721
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2722
# w32api 3.12 had it defined wrong
2723
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2724

    
2725
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2726
{ check_header dev/bktr/ioctl_meteor.h &&
2727
  check_header dev/bktr/ioctl_bt848.h; } ||
2728
{ check_header machine/ioctl_meteor.h &&
2729
  check_header machine/ioctl_bt848.h; } ||
2730
{ check_header dev/video/meteor/ioctl_meteor.h &&
2731
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2732
check_header dev/ic/bt8xx.h
2733

    
2734
check_header sys/soundcard.h
2735
check_header soundcard.h
2736

    
2737
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2738

    
2739
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2740

    
2741
enabled x11grab                         &&
2742
check_header X11/Xlib.h                 &&
2743
check_header X11/extensions/XShm.h      &&
2744
check_header X11/extensions/Xfixes.h    &&
2745
check_func XOpenDisplay -lX11           &&
2746
check_func XShmCreateImage -lX11 -lXext &&
2747
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2748

    
2749
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2750
check_cpp_condition \
2751
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2752
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2753
      disable vdpau; }
2754
fi
2755

    
2756
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2757

    
2758
# add some useful compiler flags if supported
2759
check_cflags -Wdeclaration-after-statement
2760
check_cflags -Wall
2761
check_cflags -Wno-switch
2762
check_cflags -Wdisabled-optimization
2763
check_cflags -Wpointer-arith
2764
check_cflags -Wredundant-decls
2765
check_cflags -Wno-pointer-sign
2766
check_cflags -Wcast-qual
2767
check_cflags -Wwrite-strings
2768
check_cflags -Wtype-limits
2769
check_cflags -Wundef
2770
check_cflags -Wmissing-prototypes
2771
enabled extra_warnings && check_cflags -Winline
2772

    
2773
# add some linker flags
2774
check_ldflags -Wl,--warn-common
2775
check_ldflags -Wl,--as-needed
2776
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2777
check_ldflags -Wl,-Bsymbolic
2778

    
2779
echo "X{};" > $TMPV
2780
if test_ldflags -Wl,--version-script,$TMPV; then
2781
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2782
    check_cc <<EOF && enable symver_asm_label
2783
void ff_foo(void) __asm__ ("av_foo@VERSION");
2784
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2785
EOF
2786
    check_cc <<EOF && enable symver_gnu_asm
2787
__asm__(".symver ff_foo,av_foo@VERSION");
2788
void ff_foo(void) {}
2789
EOF
2790
fi
2791

    
2792
if enabled small; then
2793
    add_cflags $size_cflags
2794
    optimizations="small"
2795
elif enabled optimizations; then
2796
    add_cflags $speed_cflags
2797
else
2798
    add_cflags $noopt_cflags
2799
fi
2800
check_cflags -fno-math-errno
2801
check_cflags -fno-signed-zeros
2802

    
2803
if enabled icc; then
2804
    # Just warnings, no remarks
2805
    check_cflags -w1
2806
    # -wd: Disable following warnings
2807
    # 144, 167, 556: -Wno-pointer-sign
2808
    # 10006: ignoring unknown option -fno-signed-zeros
2809
    # 10156: ignoring option '-W'; no argument required
2810
    check_cflags -wd144,167,556,10006,10156
2811
    # 11030: Warning unknown option --as-needed
2812
    # 10156: ignoring option '-export'; no argument required
2813
    check_ldflags -wd10156,11030
2814
    # Allow to compile with optimizations
2815
    check_ldflags -march=$cpu
2816
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2817
    enable ebp_available
2818
elif enabled ccc; then
2819
    # disable some annoying warnings
2820
    add_cflags -msg_disable cvtu32to64
2821
    add_cflags -msg_disable embedcomment
2822
    add_cflags -msg_disable needconstext
2823
    add_cflags -msg_disable nomainieee
2824
    add_cflags -msg_disable ptrmismatch1
2825
    add_cflags -msg_disable unreachcode
2826
elif enabled gcc; then
2827
    check_cflags -fno-tree-vectorize
2828
    check_cflags -Werror=implicit-function-declaration
2829
    check_cflags -Werror=missing-prototypes
2830
elif enabled clang; then
2831
    check_cflags -Qunused-arguments
2832
elif enabled armcc; then
2833
    # 2523: use of inline assembler is deprecated
2834
    add_cflags -Wrvct,--diag_suppress=2523
2835
    add_cflags -Wrvct,--diag_suppress=1207
2836
elif enabled tms470; then
2837
    add_cflags -pds=824 -pds=837
2838
fi
2839

    
2840
enabled_any $THREADS_LIST      && enable threads
2841

    
2842
check_deps $CONFIG_LIST       \
2843
           $CONFIG_EXTRA      \
2844
           $HAVE_LIST         \
2845
           $DECODER_LIST      \
2846
           $ENCODER_LIST      \
2847
           $HWACCEL_LIST      \
2848
           $PARSER_LIST       \
2849
           $BSF_LIST          \
2850
           $DEMUXER_LIST      \
2851
           $MUXER_LIST        \
2852
           $FILTER_LIST       \
2853
           $INDEV_LIST        \
2854
           $OUTDEV_LIST       \
2855
           $PROTOCOL_LIST     \
2856
           $ACODEC_TESTS      \
2857
           $VCODEC_TESTS      \
2858
           $LAVF_TESTS        \
2859
           $LAVFI_TESTS       \
2860

    
2861
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2862

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

    
2942
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2943
    echo "Enabled ${type}s:"
2944
    eval list=\$$(toupper $type)_LIST
2945
    print_enabled '_*' $list | sort | pr -3 -t
2946
    echo
2947
done
2948

    
2949
license="LGPL version 2.1 or later"
2950
if enabled nonfree; then
2951
    license="nonfree and unredistributable"
2952
elif enabled gplv3; then
2953
    license="GPL version 3 or later"
2954
elif enabled lgplv3; then
2955
    license="LGPL version 3 or later"
2956
elif enabled gpl; then
2957
    license="GPL version 2 or later"
2958
fi
2959

    
2960
echo "License: $license"
2961

    
2962
echo "Creating config.mak and config.h..."
2963

    
2964
# build tree in object directory if source path is different from current one
2965
if enabled source_path_used; then
2966
    DIRS="
2967
        doc
2968
        libavcodec
2969
        libavcodec/$arch
2970
        libavdevice
2971
        libavfilter
2972
        libavformat
2973
        libavutil
2974
        libavutil/$arch
2975
        libpostproc
2976
        libswscale
2977
        libswscale/$arch
2978
        tests
2979
        tools
2980
    "
2981
    FILES="
2982
        Makefile
2983
        common.mak
2984
        subdir.mak
2985
        doc/texi2pod.pl
2986
        libavcodec/Makefile
2987
        libavcodec/${arch}/Makefile
2988
        libavdevice/Makefile
2989
        libavfilter/Makefile
2990
        libavformat/Makefile
2991
        libavutil/Makefile
2992
        libpostproc/Makefile
2993
        libswscale/Makefile
2994
    "
2995
    map 'mkdir -p $v' $DIRS;
2996
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2997
fi
2998

    
2999
enabled stripping || strip="echo skipping strip"
3000

    
3001
cat > config.mak <<EOF
3002
# Automatically generated by configure - do not modify!
3003
ifndef FFMPEG_CONFIG_MAK
3004
FFMPEG_CONFIG_MAK=1
3005
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3006
prefix=$prefix
3007
LIBDIR=\$(DESTDIR)$libdir
3008
SHLIBDIR=\$(DESTDIR)$shlibdir
3009
INCDIR=\$(DESTDIR)$incdir
3010
BINDIR=\$(DESTDIR)$bindir
3011
DATADIR=\$(DESTDIR)$datadir
3012
MANDIR=\$(DESTDIR)$mandir
3013
SRC_PATH="$source_path"
3014
SRC_PATH_BARE=$source_path
3015
BUILD_ROOT="$PWD"
3016
ARCH=$arch
3017
CC=$cc
3018
AS=$as
3019
LD=$ld
3020
DEPCC=$dep_cc
3021
YASM=$yasmexe
3022
YASMDEP=$yasmexe
3023
AR=$ar
3024
RANLIB=$ranlib
3025
CP=cp -p
3026
LN_S=$ln_s
3027
STRIP=$strip
3028
CPPFLAGS=$CPPFLAGS
3029
CFLAGS=$CFLAGS
3030
ASFLAGS=$ASFLAGS
3031
CC_O=$CC_O
3032
LDFLAGS=$LDFLAGS
3033
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3034
SHFLAGS=$SHFLAGS
3035
YASMFLAGS=$YASMFLAGS
3036
BUILDSUF=$build_suffix
3037
FULLNAME=$FULLNAME
3038
LIBPREF=$LIBPREF
3039
LIBSUF=$LIBSUF
3040
LIBNAME=$LIBNAME
3041
SLIBPREF=$SLIBPREF
3042
SLIBSUF=$SLIBSUF
3043
EXESUF=$EXESUF
3044
EXTRA_VERSION=$extra_version
3045
DEPFLAGS=$DEPFLAGS
3046
CCDEP=$CCDEP
3047
ASDEP=$ASDEP
3048
CC_DEPFLAGS=$CC_DEPFLAGS
3049
AS_DEPFLAGS=$AS_DEPFLAGS
3050
HOSTCC=$host_cc
3051
HOSTCFLAGS=$host_cflags
3052
HOSTEXESUF=$HOSTEXESUF
3053
HOSTLDFLAGS=$host_ldflags
3054
HOSTLIBS=$host_libs
3055
TARGET_EXEC=$target_exec
3056
TARGET_PATH=$target_path
3057
SDL_LIBS=$sdl_libs
3058
SDL_CFLAGS=$sdl_cflags
3059
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3060
EXTRALIBS=$extralibs
3061
INSTALL=install
3062
LIBTARGET=${LIBTARGET}
3063
SLIBNAME=${SLIBNAME}
3064
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3065
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3066
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3067
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3068
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3069
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3070
SAMPLES=$samples
3071
EOF
3072

    
3073
get_version(){
3074
    name=$1
3075
    file=$source_path/$2
3076
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3077
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3078
    lcname=$(tolower $name)
3079
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3080
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3081
}
3082

    
3083
get_version LIBSWSCALE  libswscale/swscale.h
3084
get_version LIBPOSTPROC libpostproc/postprocess.h
3085
get_version LIBAVCODEC  libavcodec/avcodec.h
3086
get_version LIBAVDEVICE libavdevice/avdevice.h
3087
get_version LIBAVFORMAT libavformat/avformat.h
3088
get_version LIBAVUTIL   libavutil/avutil.h
3089
get_version LIBAVFILTER libavfilter/avfilter.h
3090

    
3091
cat > $TMPH <<EOF
3092
/* Automatically generated by configure - do not modify! */
3093
#ifndef FFMPEG_CONFIG_H
3094
#define FFMPEG_CONFIG_H
3095
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3096
#define FFMPEG_LICENSE "$(c_escape $license)"
3097
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3098
#define CC_TYPE "$cc_type"
3099
#define CC_VERSION $cc_version
3100
#define restrict $_restrict
3101
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3102
#define EXTERN_PREFIX "${extern_prefix}"
3103
#define EXTERN_ASM ${extern_prefix}
3104
EOF
3105

    
3106
test -n "$malloc_prefix" &&
3107
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3108

    
3109
if enabled small || disabled optimizations; then
3110
    echo "#undef  av_always_inline"  >> $TMPH
3111
    echo "#define av_always_inline"  >> $TMPH
3112
fi
3113

    
3114
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3115
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3116
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3117
                                      $CONFIG_EXTRA      \
3118
                                      $DECODER_LIST      \
3119
                                      $ENCODER_LIST      \
3120
                                      $HWACCEL_LIST      \
3121
                                      $PARSER_LIST       \
3122
                                      $BSF_LIST          \
3123
                                      $DEMUXER_LIST      \
3124
                                      $MUXER_LIST        \
3125
                                      $FILTER_LIST       \
3126
                                      $PROTOCOL_LIST     \
3127
                                      $INDEV_LIST        \
3128
                                      $OUTDEV_LIST       \
3129

    
3130
cat >>config.mak <<EOF
3131
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3132
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3133
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3134
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3135
EOF
3136

    
3137
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3138
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3139

    
3140
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3141
cp_if_changed $TMPH config.h
3142

    
3143
cat > $TMPH <<EOF
3144
/* Generated by ffconf */
3145
#ifndef AVUTIL_AVCONFIG_H
3146
#define AVUTIL_AVCONFIG_H
3147
EOF
3148

    
3149
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3150

    
3151
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3152

    
3153
cp_if_changed $TMPH libavutil/avconfig.h
3154

    
3155
test -n "$WARNINGS" && printf "\n$WARNINGS"
3156

    
3157
# build pkg-config files
3158

    
3159
pkgconfig_generate(){
3160
name=$1
3161
shortname=${name#lib}${build_suffix}
3162
comment=$2
3163
version=$3
3164
libs=$4
3165
requires=$5
3166
cat <<EOF > $name/$name.pc
3167
prefix=$prefix
3168
exec_prefix=\${prefix}
3169
libdir=$libdir
3170
includedir=$incdir
3171

    
3172
Name: $name
3173
Description: $comment
3174
Version: $version
3175
Requires: $(enabled shared || echo $requires)
3176
Requires.private: $(enabled shared && echo $requires)
3177
Conflicts:
3178
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3179
Libs.private: $(enabled shared && echo $libs)
3180
Cflags: -I\${includedir}
3181
EOF
3182
cat <<EOF > $name/$name-uninstalled.pc
3183
prefix=
3184
exec_prefix=
3185
libdir=\${pcfiledir}
3186
includedir=${source_path}
3187

    
3188
Name: $name
3189
Description: $comment
3190
Version: $version
3191
Requires: $requires
3192
Conflicts:
3193
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3194
Cflags: -I\${includedir}
3195
EOF
3196
}
3197

    
3198
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3199
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3200
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3201
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3202
enabled avfilter &&
3203
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3204
enabled postproc &&
3205
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3206
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"