Statistics
| Branch: | Revision:

ffmpeg / configure @ 1b15dc3c

History | View | Annotate | Download (86.2 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-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
append(){
514
    var=$1
515
    shift
516
    eval "$var=\"\$$var $*\""
517
}
518

    
519
prepend(){
520
    var=$1
521
    shift
522
    eval "$var=\"$* \$$var\""
523
}
524

    
525
add_cppflags(){
526
    append CPPFLAGS $($filter_cppflags "$@")
527
}
528

    
529
add_cflags(){
530
    append CFLAGS $($filter_cflags "$@")
531
}
532

    
533
add_asflags(){
534
    append ASFLAGS $($filter_asflags "$@")
535
}
536

    
537
add_ldflags(){
538
    append LDFLAGS "$@"
539
}
540

    
541
add_extralibs(){
542
    prepend extralibs "$@"
543
}
544

    
545
check_cmd(){
546
    log "$@"
547
    "$@" >> $logfile 2>&1
548
}
549

    
550
check_cc(){
551
    log check_cc "$@"
552
    cat > $TMPC
553
    log_file $TMPC
554
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
555
}
556

    
557
check_cpp(){
558
    log check_cpp "$@"
559
    cat > $TMPC
560
    log_file $TMPC
561
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
562
}
563

    
564
check_as(){
565
    log check_as "$@"
566
    cat > $TMPC
567
    log_file $TMPC
568
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
569
}
570

    
571
check_asm(){
572
    log check_asm "$@"
573
    name="$1"
574
    code="$2"
575
    shift 2
576
    disable $name
577
    check_as "$@" <<EOF && enable $name
578
void foo(void){ __asm__ volatile($code); }
579
EOF
580
}
581

    
582
check_yasm(){
583
    log check_yasm "$@"
584
    echo "$1" > $TMPS
585
    log_file $TMPS
586
    shift 1
587
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
588
}
589

    
590
check_ld(){
591
    log check_ld "$@"
592
    flags=''
593
    libs=''
594
    for f; do
595
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
596
    done
597
    check_cc $($filter_cflags $flags) || return
598
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
599
}
600

    
601
check_cppflags(){
602
    log check_cppflags "$@"
603
    set -- $($filter_cppflags "$@")
604
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
605
int x;
606
EOF
607
}
608

    
609
check_cflags(){
610
    log check_cflags "$@"
611
    set -- $($filter_cflags "$@")
612
    check_cc "$@" <<EOF && append CFLAGS "$@"
613
int x;
614
EOF
615
}
616

    
617
test_ldflags(){
618
    log test_ldflags "$@"
619
    check_ld "$@" <<EOF
620
int main(void){ return 0; }
621
EOF
622
}
623

    
624
check_ldflags(){
625
    log check_ldflags "$@"
626
    test_ldflags "$@" && add_ldflags "$@"
627
}
628

    
629
check_header(){
630
    log check_header "$@"
631
    header=$1
632
    shift
633
    disable_safe $header
634
    check_cpp "$@" <<EOF && enable_safe $header
635
#include <$header>
636
int x;
637
EOF
638
}
639

    
640
check_func(){
641
    log check_func "$@"
642
    func=$1
643
    shift
644
    disable $func
645
    check_ld "$@" <<EOF && enable $func
646
extern int $func();
647
int main(void){ $func(); }
648
EOF
649
}
650

    
651
check_mathfunc(){
652
    log check_mathfunc "$@"
653
    func=$1
654
    shift
655
    disable $func
656
    check_ld "$@" <<EOF && enable $func
657
#include <math.h>
658
float foo(float f) { return $func(f); }
659
int main(void){ return 0; }
660
EOF
661
}
662

    
663
check_func_headers(){
664
    log check_func_headers "$@"
665
    headers=$1
666
    func=$2
667
    shift 2
668
    disable $func
669
    incs=""
670
    for hdr in $headers; do
671
        incs="$incs
672
#include <$hdr>"
673
    done
674
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
675
$incs
676
int main(int argc, char **argv){
677
    return (long) $func;
678
}
679
EOF
680
}
681

    
682
check_cpp_condition(){
683
    log check_cpp_condition "$@"
684
    header=$1
685
    condition=$2
686
    shift 2
687
    check_cpp $($filter_cppflags "$@") <<EOF
688
#include <$header>
689
#if !($condition)
690
#error "unsatisfied condition: $condition"
691
#endif
692
EOF
693
}
694

    
695
check_lib(){
696
    log check_lib "$@"
697
    header="$1"
698
    func="$2"
699
    shift 2
700
    check_header $header && check_func $func "$@" && add_extralibs "$@"
701
}
702

    
703
check_lib2(){
704
    log check_lib2 "$@"
705
    headers="$1"
706
    func="$2"
707
    shift 2
708
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
709
}
710

    
711
check_exec(){
712
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
713
}
714

    
715
check_exec_crash(){
716
    code=$(cat)
717

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

    
724
    (check_exec "$@") >> $logfile 2>&1 <<EOF
725
#include <signal.h>
726
static void sighandler(int sig){
727
    raise(SIGTERM);
728
}
729
int main(void){
730
    signal(SIGILL, sighandler);
731
    signal(SIGFPE, sighandler);
732
    signal(SIGSEGV, sighandler);
733
#ifdef SIGBUS
734
    signal(SIGBUS, sighandler);
735
#endif
736
    { $code }
737
}
738
EOF
739
}
740

    
741
check_type(){
742
    log check_type "$@"
743
    headers=$1
744
    type=$2
745
    shift 2
746
    disable_safe "$type"
747
    incs=""
748
    for hdr in $headers; do
749
        incs="$incs
750
#include <$hdr>"
751
    done
752
    check_cc "$@" <<EOF && enable_safe "$type"
753
$incs
754
$type v;
755
EOF
756
}
757

    
758
check_struct(){
759
    log check_type "$@"
760
    headers=$1
761
    struct=$2
762
    member=$3
763
    shift 3
764
    disable_safe "${struct}_${member}"
765
    incs=""
766
    for hdr in $headers; do
767
        incs="$incs
768
#include <$hdr>"
769
    done
770
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
771
$incs
772
const void *p = &(($struct *)0)->$member;
773
EOF
774
}
775

    
776
require(){
777
    name="$1"
778
    header="$2"
779
    func="$3"
780
    shift 3
781
    check_lib $header $func "$@" || die "ERROR: $name not found"
782
}
783

    
784
require2(){
785
    name="$1"
786
    headers="$2"
787
    func="$3"
788
    shift 3
789
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
790
}
791

    
792
check_host_cc(){
793
    log check_host_cc "$@"
794
    cat > $TMPC
795
    log_file $TMPC
796
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
797
}
798

    
799
check_host_cflags(){
800
    log check_host_cflags "$@"
801
    check_host_cc "$@" <<EOF && append host_cflags "$@"
802
int x;
803
EOF
804
}
805

    
806
apply(){
807
    file=$1
808
    shift
809
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
810
}
811

    
812
cp_if_changed(){
813
    cmp -s "$1" "$2" &&
814
        echo "$2 is unchanged" ||
815
        cp -f "$1" "$2"
816
}
817

    
818
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
819
# system-dependent things.
820

    
821
COMPONENT_LIST="
822
    bsfs
823
    decoders
824
    demuxers
825
    encoders
826
    filters
827
    hwaccels
828
    indevs
829
    muxers
830
    outdevs
831
    parsers
832
    protocols
833
"
834

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

    
902
THREADS_LIST='
903
    pthreads
904
    w32threads
905
'
906

    
907
ARCH_LIST='
908
    alpha
909
    arm
910
    avr32
911
    avr32_ap
912
    avr32_uc
913
    bfin
914
    ia64
915
    m68k
916
    mips
917
    mips64
918
    parisc
919
    ppc
920
    ppc64
921
    s390
922
    sh4
923
    sparc
924
    sparc64
925
    tomi
926
    x86
927
    x86_32
928
    x86_64
929
'
930

    
931
ARCH_EXT_LIST='
932
    altivec
933
    amd3dnow
934
    amd3dnowext
935
    armv5te
936
    armv6
937
    armv6t2
938
    armvfp
939
    iwmmxt
940
    mmi
941
    mmx
942
    mmx2
943
    neon
944
    ppc4xx
945
    sse
946
    ssse3
947
    vis
948
'
949

    
950
HAVE_LIST_PUB='
951
    bigendian
952
'
953

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

    
1048
# options emitted with CONFIG_ prefix but not available on command line
1049
CONFIG_EXTRA="
1050
    avutil
1051
    gplv3
1052
    lgplv3
1053
"
1054

    
1055
CMDLINE_SELECT="
1056
    $ARCH_EXT_LIST
1057
    $CONFIG_LIST
1058
    $THREADS_LIST
1059
    asm
1060
    cross_compile
1061
    debug
1062
    extra_warnings
1063
    logging
1064
    optimizations
1065
    stripping
1066
    yasm
1067
"
1068

    
1069
PATHS_LIST='
1070
    bindir
1071
    datadir
1072
    incdir
1073
    libdir
1074
    mandir
1075
    prefix
1076
    shlibdir
1077
'
1078

    
1079
CMDLINE_SET="
1080
    $PATHS_LIST
1081
    ar
1082
    arch
1083
    as
1084
    build_suffix
1085
    cc
1086
    cpu
1087
    cross_prefix
1088
    dep_cc
1089
    extra_version
1090
    host_cc
1091
    host_cflags
1092
    host_ldflags
1093
    host_libs
1094
    host_os
1095
    ld
1096
    logfile
1097
    malloc_prefix
1098
    nm
1099
    samples
1100
    source_path
1101
    strip
1102
    sysinclude
1103
    sysroot
1104
    target_exec
1105
    target_os
1106
    target_path
1107
"
1108

    
1109
CMDLINE_APPEND="
1110
    extra_cflags
1111
"
1112

    
1113
# code dependency declarations
1114

    
1115
# architecture extensions
1116

    
1117
armv5te_deps="arm"
1118
armv6_deps="arm"
1119
armv6t2_deps="arm"
1120
armvfp_deps="arm"
1121
iwmmxt_deps="arm"
1122
neon_deps="arm"
1123

    
1124
mmi_deps="mips"
1125

    
1126
altivec_deps="ppc"
1127
ppc4xx_deps="ppc"
1128

    
1129
vis_deps="sparc"
1130

    
1131
x86_64_suggest="cmov fast_cmov"
1132
amd3dnow_deps="mmx"
1133
amd3dnowext_deps="amd3dnow"
1134
mmx_deps="x86"
1135
mmx2_deps="mmx"
1136
sse_deps="mmx"
1137
ssse3_deps="sse"
1138

    
1139
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1140
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1141
fast_unaligned_if_any="armv6 ppc x86"
1142

    
1143
need_memalign="altivec neon sse"
1144
inline_asm_deps="!tms470"
1145

    
1146
symver_if_any="symver_asm_label symver_gnu_asm"
1147

    
1148
# subsystems
1149
mdct_select="fft"
1150
rdft_select="fft"
1151

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

    
1274
vaapi_deps="va_va_h"
1275
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1276

    
1277
# parsers
1278
h264_parser_select="golomb h264dsp"
1279

    
1280
# bitstream_filters
1281
aac_adtstoasc_bsf_select="aac_parser"
1282

    
1283
# external libraries
1284
libdirac_decoder_deps="libdirac !libschroedinger"
1285
libdirac_encoder_deps="libdirac"
1286
libfaac_encoder_deps="libfaac"
1287
libgsm_decoder_deps="libgsm"
1288
libgsm_encoder_deps="libgsm"
1289
libgsm_ms_decoder_deps="libgsm"
1290
libgsm_ms_encoder_deps="libgsm"
1291
libmp3lame_encoder_deps="libmp3lame"
1292
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1293
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1294
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1295
libopenjpeg_decoder_deps="libopenjpeg"
1296
libschroedinger_decoder_deps="libschroedinger"
1297
libschroedinger_encoder_deps="libschroedinger"
1298
libspeex_decoder_deps="libspeex"
1299
libtheora_encoder_deps="libtheora"
1300
libvorbis_encoder_deps="libvorbis"
1301
libvpx_decoder_deps="libvpx"
1302
libvpx_encoder_deps="libvpx"
1303
libx264_encoder_deps="libx264"
1304
libxvid_encoder_deps="libxvid"
1305

    
1306
# demuxers / muxers
1307
ac3_demuxer_deps="ac3_parser"
1308
asf_stream_muxer_select="asf_muxer"
1309
avisynth_demuxer_deps="avisynth"
1310
dirac_demuxer_deps="dirac_parser"
1311
eac3_demuxer_select="ac3_parser"
1312
ipod_muxer_select="mov_muxer"
1313
libnut_demuxer_deps="libnut"
1314
libnut_muxer_deps="libnut"
1315
matroska_audio_muxer_select="matroska_muxer"
1316
matroska_demuxer_suggest="zlib bzlib"
1317
mov_demuxer_suggest="zlib"
1318
mp3_demuxer_deps="mpegaudio_parser"
1319
mp4_muxer_select="mov_muxer"
1320
mpegtsraw_demuxer_select="mpegts_demuxer"
1321
mxf_d10_muxer_select="mxf_muxer"
1322
ogg_demuxer_select="golomb"
1323
psp_muxer_select="mov_muxer"
1324
rtsp_demuxer_deps="sdp_demuxer"
1325
rtsp_muxer_deps="sdp_demuxer"
1326
rtsp_muxer_select="rtp_muxer"
1327
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1328
sdp_demuxer_select="asf_demuxer rm_demuxer"
1329
spdif_muxer_select="aac_parser"
1330
tg2_muxer_select="mov_muxer"
1331
tgp_muxer_select="mov_muxer"
1332
w64_demuxer_deps="wav_demuxer"
1333

    
1334
# indevs / outdevs
1335
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1336
alsa_indev_extralibs="-lasound"
1337
alsa_outdev_deps="alsa_asoundlib_h"
1338
alsa_outdev_extralibs="-lasound"
1339
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1340
dv1394_indev_deps="dv1394 dv_demuxer"
1341
jack_indev_deps="jack_jack_h"
1342
jack_indev_extralibs="-ljack"
1343
libdc1394_indev_deps="libdc1394"
1344
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1345
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1346
v4l_indev_deps="linux_videodev_h"
1347
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1348
vfwcap_indev_deps="capCreateCaptureWindow"
1349
vfwcap_indev_extralibs="-lavicap32"
1350
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1351
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1352

    
1353
# protocols
1354
gopher_protocol_deps="network"
1355
http_protocol_deps="network"
1356
http_protocol_select="tcp_protocol"
1357
mmst_protocol_deps="network"
1358
rtmp_protocol_select="tcp_protocol"
1359
rtp_protocol_select="udp_protocol"
1360
tcp_protocol_deps="network"
1361
udp_protocol_deps="network"
1362

    
1363
# filters
1364
movie_filter_deps="avfilter_lavf"
1365
avfilter_lavf_deps="avformat"
1366

    
1367
# libraries
1368
avdevice_deps="avcodec avformat"
1369
avformat_deps="avcodec"
1370

    
1371
# programs
1372
ffmpeg_deps="avcodec avformat swscale"
1373
ffmpeg_select="buffer_filter"
1374
ffplay_deps="avcodec avformat swscale sdl"
1375
ffplay_select="rdft"
1376
ffprobe_deps="avcodec avformat"
1377
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1378
ffserver_extralibs='$ldl'
1379

    
1380
doc_deps="texi2html"
1381

    
1382
# default parameters
1383

    
1384
logfile="config.log"
1385

    
1386
# installation paths
1387
prefix_default="/usr/local"
1388
bindir_default='${prefix}/bin'
1389
datadir_default='${prefix}/share/ffmpeg'
1390
incdir_default='${prefix}/include'
1391
libdir_default='${prefix}/lib'
1392
mandir_default='${prefix}/share/man'
1393
shlibdir_default="$libdir_default"
1394

    
1395
# toolchain
1396
ar_default="ar"
1397
cc_default="gcc"
1398
cc_version=\"unknown\"
1399
host_cc_default="gcc"
1400
ln_s="ln -sf"
1401
nm_default="nm"
1402
objformat="elf"
1403
ranlib="ranlib"
1404
strip_default="strip"
1405
yasmexe="yasm"
1406

    
1407
nm_opts='-g'
1408

    
1409
# machine
1410
arch_default=$(uname -m)
1411
cpu="generic"
1412

    
1413
# OS
1414
target_os_default=$(tolower $(uname -s))
1415
host_os=$target_os_default
1416

    
1417
# configurable options
1418
enable avcodec
1419
enable avdevice
1420
enable avfilter
1421
enable avformat
1422
enable avutil
1423
enable asm
1424
enable debug
1425
enable doc
1426
enable fastdiv
1427
enable ffmpeg
1428
enable ffplay
1429
enable ffprobe
1430
enable ffserver
1431
enable mpegaudio_hp
1432
enable network
1433
enable optimizations
1434
enable protocols
1435
enable static
1436
enable stripping
1437
enable swscale
1438
enable swscale_alpha
1439

    
1440
# build settings
1441
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1442
FFSERVERLDFLAGS=-Wl,-E
1443
LIBPREF="lib"
1444
LIBSUF=".a"
1445
FULLNAME='$(NAME)$(BUILDSUF)'
1446
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1447
SLIBPREF="lib"
1448
SLIBSUF=".so"
1449
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1450
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1451
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1452
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1453

    
1454
CC_O='-o $@'
1455

    
1456
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1457
host_libs='-lm'
1458

    
1459
target_path='$(CURDIR)'
1460

    
1461
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1462
# full relative path for objects in subdirectories for non-recursive Make.
1463
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1464
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1465

    
1466
# find source path
1467
source_path="$(dirname "$0")"
1468
enable source_path_used
1469
if test -f configure; then
1470
    source_path="$(pwd)"
1471
    disable source_path_used
1472
else
1473
    source_path="$(cd "$source_path"; pwd)"
1474
    echo "$source_path" | grep -q '[[:blank:]]' &&
1475
        die "Out of tree builds are impossible with whitespace in source path."
1476
    test -e "$source_path/config.h" &&
1477
        die "Out of tree builds are impossible with config.h in source dir."
1478
fi
1479

    
1480
for v in "$@"; do
1481
    r=${v#*=}
1482
    l=${v%"$r"}
1483
    r=$(sh_quote "$r")
1484
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1485
done
1486

    
1487
find_things(){
1488
    thing=$1
1489
    pattern=$2
1490
    file=$source_path/$3
1491
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1492
}
1493

    
1494
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1495
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1496
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1497
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1498
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1499
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1500
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1501
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1502
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1503
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1504
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1505

    
1506
for n in $COMPONENT_LIST; do
1507
    v=$(toupper ${n%s})_LIST
1508
    eval enable \$$v
1509
    eval ${n}_if_any="\$$v"
1510
done
1511

    
1512
enable $ARCH_EXT_LIST
1513

    
1514
die_unknown(){
1515
    echo "Unknown option \"$1\"."
1516
    echo "See $0 --help for available options."
1517
    exit 1
1518
}
1519

    
1520
show_list() {
1521
    suffix=_$1
1522
    shift
1523
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1524
    exit 0
1525
}
1526

    
1527
for opt do
1528
    optval="${opt#*=}"
1529
    case "$opt" in
1530
    --extra-ldflags=*) add_ldflags $optval
1531
    ;;
1532
    --extra-libs=*) add_extralibs $optval
1533
    ;;
1534
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1535
    ;;
1536
    --enable-debug=*) debuglevel="$optval"
1537
    ;;
1538
    --disable-everything)
1539
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1540
    ;;
1541
    --enable-*=*|--disable-*=*)
1542
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1543
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1544
    eval list=\$$(toupper $thing)_LIST
1545
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1546
    $action $(filter "$name" $list)
1547
    ;;
1548
    --enable-?*|--disable-?*)
1549
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1550
    if is_in $option $COMPONENT_LIST; then
1551
        test $action = disable && action=unset
1552
        eval $action \$$(toupper ${option%s})_LIST
1553
    elif is_in $option $CMDLINE_SELECT; then
1554
        $action $option
1555
    else
1556
        die_unknown $opt
1557
    fi
1558
    ;;
1559
    --list-*)
1560
        NAME="${opt#--list-}"
1561
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1562
        NAME=${NAME%s}
1563
        eval show_list $NAME \$$(toupper $NAME)_LIST
1564
    ;;
1565
    --help|-h) show_help
1566
    ;;
1567
    *)
1568
    optname="${opt%%=*}"
1569
    optname="${optname#--}"
1570
    optname=$(echo "$optname" | sed 's/-/_/g')
1571
    if is_in $optname $CMDLINE_SET; then
1572
        eval $optname='$optval'
1573
    elif is_in $optname $CMDLINE_APPEND; then
1574
        append $optname "$optval"
1575
    else
1576
         die_unknown $opt
1577
    fi
1578
    ;;
1579
    esac
1580
done
1581

    
1582
disabled logging && logfile=/dev/null
1583

    
1584
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1585
set >> $logfile
1586

    
1587
test -n "$cross_prefix" && enable cross_compile
1588

    
1589
if enabled cross_compile; then
1590
    test -n "$arch" && test -n "$target_os" ||
1591
        die "Must specify target arch and OS when cross-compiling"
1592
fi
1593

    
1594
set_default arch target_os
1595

    
1596
ar_default="${cross_prefix}${ar_default}"
1597
cc_default="${cross_prefix}${cc_default}"
1598
nm_default="${cross_prefix}${nm_default}"
1599
ranlib="${cross_prefix}${ranlib}"
1600
strip_default="${cross_prefix}${strip_default}"
1601

    
1602
sysinclude_default="${sysroot}/usr/include"
1603

    
1604
set_default cc nm strip sysinclude
1605
enabled cross_compile || host_cc_default=$cc
1606
set_default host_cc
1607

    
1608
exesuf() {
1609
    case $1 in
1610
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1611
    esac
1612
}
1613

    
1614
EXESUF=$(exesuf $target_os)
1615
HOSTEXESUF=$(exesuf $host_os)
1616

    
1617
# set temporary file name
1618
: ${TMPDIR:=$TEMPDIR}
1619
: ${TMPDIR:=$TMP}
1620
: ${TMPDIR:=/tmp}
1621

    
1622
if ! check_cmd type mktemp; then
1623
    # simple replacement for missing mktemp
1624
    # NOT SAFE FOR GENERAL USE
1625
    mktemp(){
1626
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1627
    }
1628
fi
1629

    
1630
tmpfile(){
1631
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1632
        (set -C; exec > $tmp) 2>/dev/null ||
1633
        die "Unable to create temporary file in $TMPDIR."
1634
    append TMPFILES $tmp
1635
    eval $1=$tmp
1636
}
1637

    
1638
trap 'rm -f -- $TMPFILES' EXIT
1639
trap exit HUP INT TERM
1640

    
1641
tmpfile TMPC  .c
1642
tmpfile TMPE  $EXESUF
1643
tmpfile TMPH  .h
1644
tmpfile TMPO  .o
1645
tmpfile TMPS  .S
1646
tmpfile TMPV  .ver
1647
tmpfile TMPSH .sh
1648

    
1649
unset -f mktemp
1650

    
1651
# make sure we can execute files in $TMPDIR
1652
cat > $TMPSH 2>> $logfile <<EOF
1653
#! /bin/sh
1654
EOF
1655
chmod +x $TMPSH >> $logfile 2>&1
1656
if ! $TMPSH >> $logfile 2>&1; then
1657
    cat <<EOF
1658
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1659
variable to another directory and make sure that it is not mounted noexec.
1660
EOF
1661
    die "Sanity test failed."
1662
fi
1663

    
1664
filter_cflags=echo
1665
filter_cppflags=echo
1666
filter_asflags=echo
1667

    
1668
if   $cc -v 2>&1 | grep -qi ^gcc; then
1669
    cc_type=gcc
1670
    cc_version=__VERSION__
1671
    if ! $cc -dumpversion | grep -q '^2\.'; then
1672
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1673
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1674
    fi
1675
    speed_cflags='-O3'
1676
    size_cflags='-Os'
1677
elif $cc --version 2>/dev/null | grep -q Intel; then
1678
    cc_type=icc
1679
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1680
    CC_DEPFLAGS='-MMD'
1681
    AS_DEPFLAGS='-MMD'
1682
    speed_cflags='-O3'
1683
    size_cflags='-Os'
1684
    noopt_cflags='-O1'
1685
elif $cc -v 2>&1 | grep -q xlc; then
1686
    cc_type=xlc
1687
    cc_version="AV_STRINGIFY(__IBMC__)"
1688
    speed_cflags='-O5'
1689
    size_cflags='-O5 -qcompact'
1690
elif $cc -V 2>/dev/null | grep -q Compaq; then
1691
    cc_type=ccc
1692
    cc_version="AV_STRINGIFY(__DECC_VER)"
1693
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1694
    debuglevel=3
1695
    add_ldflags -Wl,-z,now # calls to libots crash without this
1696
    speed_cflags='-fast'
1697
    size_cflags='-O1'
1698
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1699
    test -d "$sysroot" || die "No valid sysroot specified."
1700
    cc_type=armcc
1701
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1702
    armcc_conf="$PWD/armcc.conf"
1703
    $cc --arm_linux_configure                 \
1704
        --arm_linux_config_file="$armcc_conf" \
1705
        --configure_sysroot="$sysroot"        \
1706
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1707
        die "Error creating armcc configuration file."
1708
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1709
    as_default="${cross_prefix}gcc"
1710
    CC_DEPFLAGS='-MMD'
1711
    AS_DEPFLAGS='-MMD'
1712
    speed_cflags='-O3'
1713
    size_cflags='-Os'
1714
elif $cc -version 2>/dev/null | grep -q TMS470; then
1715
    cc_type=tms470
1716
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1717
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1718
    CC_O='-fr=$(@D)'
1719
    as_default="${cross_prefix}gcc"
1720
    ld_default="${cross_prefix}gcc"
1721
    TMPO=$(basename $TMPC .c).o
1722
    append TMPFILES $TMPO
1723
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1724
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1725
    AS_DEPFLAGS='-MMD'
1726
    speed_cflags='-O3 -mf=5'
1727
    size_cflags='-O3 -mf=2'
1728
    filter_cflags=tms470_flags
1729
    tms470_flags(){
1730
        for flag; do
1731
            case $flag in
1732
                -march=*|-mcpu=*)
1733
                    case "${flag#*=}" in
1734
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1735
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1736
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1737
                        armv6*|arm11*)          echo -mv=6   ;;
1738
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1739
                                                echo -mv=5e  ;;
1740
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1741
                    esac
1742
                    ;;
1743
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1744
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1745
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1746
                -msoft-float)   echo --float_support=vfplib       ;;
1747
                -O[0-3]|-mf=*)  echo $flag                        ;;
1748
                -g)             echo -g -mn                       ;;
1749
                -pds=*)         echo $flag                        ;;
1750
            esac
1751
        done
1752
    }
1753
elif $cc -v 2>&1 | grep -q clang; then
1754
    cc_type=clang
1755
    cc_version=__VERSION__
1756
    CC_DEPFLAGS='-MMD'
1757
    AS_DEPFLAGS='-MMD'
1758
    speed_cflags='-O3'
1759
    size_cflags='-Os'
1760
elif $cc -V 2>&1 | grep -q Sun; then
1761
    cc_type=suncc
1762
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1763
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1764
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1765
    speed_cflags='-O5'
1766
    size_cflags='-O5 -xspace'
1767
    filter_cflags=suncc_flags
1768
    suncc_flags(){
1769
        for flag; do
1770
            case $flag in
1771
                -march=*|-mcpu=*)
1772
                    case "${flag#*=}" in
1773
                        native)                   echo -xtarget=native       ;;
1774
                        v9|niagara)               echo -xarch=sparc          ;;
1775
                        ultrasparc)               echo -xarch=sparcvis       ;;
1776
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1777
                        i586|pentium)             echo -xchip=pentium        ;;
1778
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1779
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1780
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1781
                        pentium4*)          echo -xtarget=pentium4           ;;
1782
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1783
                        *-sse3)             echo -xarch=sse3                 ;;
1784
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1785
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1786
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1787
                        k8|opteron|athlon64|athlon-fx)
1788
                                                  echo -xarch=sse2a          ;;
1789
                        athlon*)                  echo -xarch=pentium_proa   ;;
1790
                    esac
1791
                    ;;
1792
                -std=c99)             echo -xc99              ;;
1793
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1794
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1795
                -W*,*)                echo $flag              ;;
1796
                -f*-*|-W*)                                    ;;
1797
                *)                    echo $flag              ;;
1798
            esac
1799
        done
1800
    }
1801
fi
1802

    
1803
test -n "$cc_type" && enable $cc_type ||
1804
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1805

    
1806
: ${as_default:=$cc}
1807
: ${dep_cc_default:=$cc}
1808
: ${ld_default:=$cc}
1809
set_default ar as dep_cc ld
1810

    
1811
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1812
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1813

    
1814
add_cflags $extra_cflags
1815
add_asflags $extra_cflags
1816

    
1817
if test -n "$sysroot"; then
1818
    case "$cc_type" in
1819
        gcc)
1820
            add_cppflags --sysroot="$sysroot"
1821
            add_ldflags --sysroot="$sysroot"
1822
        ;;
1823
        tms470)
1824
            add_cppflags -I"$sysinclude"
1825
            add_ldflags  --sysroot="$sysroot"
1826
        ;;
1827
        clang)
1828
            add_cppflags -isysroot "$sysroot"
1829
            add_ldflags -isysroot "$sysroot"
1830
        ;;
1831
    esac
1832
fi
1833

    
1834
if test "$cpu" = host; then
1835
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1836

    
1837
    case "$cc_type" in
1838
        gcc)
1839
            check_native(){
1840
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1841
                sed -n "/$1=/{
1842
                            s/.*$1=\\([^ ]*\\).*/\\1/
1843
                            p
1844
                            q
1845
                        }" $TMPE
1846
            }
1847
            cpu=$(check_native -march || check_native -mcpu)
1848
        ;;
1849
    esac
1850

    
1851
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1852
fi
1853

    
1854
# Deal with common $arch aliases
1855
case "$arch" in
1856
    arm*)
1857
        arch="arm"
1858
    ;;
1859
    mips|mipsel|IP*)
1860
        arch="mips"
1861
    ;;
1862
    mips64*)
1863
        arch="mips"
1864
        subarch="mips64"
1865
    ;;
1866
    parisc|hppa)
1867
        arch="parisc"
1868
    ;;
1869
    parisc64|hppa64)
1870
        arch="parisc"
1871
        subarch="parisc64"
1872
    ;;
1873
    "Power Macintosh"|ppc|powerpc)
1874
        arch="ppc"
1875
    ;;
1876
    ppc64|powerpc64)
1877
        arch="ppc"
1878
        subarch="ppc64"
1879
    ;;
1880
    s390|s390x)
1881
        arch="s390"
1882
    ;;
1883
    sh4|sh)
1884
        arch="sh4"
1885
    ;;
1886
    sun4u|sparc64)
1887
        arch="sparc"
1888
        subarch="sparc64"
1889
    ;;
1890
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1891
        arch="x86"
1892
    ;;
1893
esac
1894

    
1895
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1896
enable $arch
1897

    
1898
# Add processor-specific flags
1899
if test "$cpu" = generic; then
1900
    : do nothing
1901
elif enabled ppc; then
1902

    
1903
    case $(tolower $cpu) in
1904
        601|ppc601|powerpc601)
1905
            cpuflags="-mcpu=601"
1906
            disable altivec
1907
        ;;
1908
        603*|ppc603*|powerpc603*)
1909
            cpuflags="-mcpu=603"
1910
            disable altivec
1911
        ;;
1912
        604*|ppc604*|powerpc604*)
1913
            cpuflags="-mcpu=604"
1914
            disable altivec
1915
        ;;
1916
        g3|75*|ppc75*|powerpc75*)
1917
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1918
            disable altivec
1919
        ;;
1920
        g4|745*|ppc745*|powerpc745*)
1921
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1922
        ;;
1923
        74*|ppc74*|powerpc74*)
1924
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1925
        ;;
1926
        g5|970|ppc970|powerpc970|power4*)
1927
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1928
        ;;
1929
        cell)
1930
            cpuflags="-mcpu=cell"
1931
            enable ldbrx
1932
        ;;
1933
        e500v2)
1934
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1935
            disable altivec
1936
        ;;
1937
        e500)
1938
            cpuflags="-mcpu=8540 -mhard-float"
1939
            disable altivec
1940
        ;;
1941
    esac
1942

    
1943
elif enabled x86; then
1944

    
1945
    case $cpu in
1946
        i[345]86|pentium)
1947
            cpuflags="-march=$cpu"
1948
            disable mmx
1949
        ;;
1950
        # targets that do NOT support conditional mov (cmov)
1951
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1952
            cpuflags="-march=$cpu"
1953
            disable cmov
1954
        ;;
1955
        # targets that do support conditional mov (cmov)
1956
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
1957
            cpuflags="-march=$cpu"
1958
            enable cmov
1959
            enable fast_cmov
1960
        ;;
1961
        # targets that do support conditional mov but on which it's slow
1962
        pentium4|pentium4m|prescott|nocona)
1963
            cpuflags="-march=$cpu"
1964
            enable cmov
1965
            disable fast_cmov
1966
        ;;
1967
    esac
1968

    
1969
elif enabled sparc; then
1970

    
1971
    case $cpu in
1972
        niagara)
1973
            cpuflags="-mcpu=$cpu"
1974
            disable vis
1975
        ;;
1976
        sparc64)
1977
            cpuflags="-mcpu=v9"
1978
        ;;
1979
    esac
1980

    
1981
elif enabled arm; then
1982

    
1983
    case $cpu in
1984
        armv*)
1985
            cpuflags="-march=$cpu"
1986
        ;;
1987
        *)
1988
            cpuflags="-mcpu=$cpu"
1989
        ;;
1990
    esac
1991

    
1992
elif enabled alpha; then
1993

    
1994
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1995

    
1996
elif enabled bfin; then
1997

    
1998
    cpuflags="-mcpu=$cpu"
1999

    
2000
elif enabled mips; then
2001

    
2002
    cpuflags="-march=$cpu"
2003

    
2004
elif enabled avr32; then
2005

    
2006
    case $cpu in
2007
        ap7[02]0[0-2])
2008
            subarch="avr32_ap"
2009
            cpuflags="-mpart=$cpu"
2010
        ;;
2011
        ap)
2012
            subarch="avr32_ap"
2013
            cpuflags="-march=$cpu"
2014
        ;;
2015
        uc3[ab]*)
2016
            subarch="avr32_uc"
2017
            cpuflags="-mcpu=$cpu"
2018
        ;;
2019
        uc)
2020
            subarch="avr32_uc"
2021
            cpuflags="-march=$cpu"
2022
        ;;
2023
    esac
2024

    
2025
fi
2026

    
2027
add_cflags $cpuflags
2028
add_asflags $cpuflags
2029

    
2030
# compiler sanity check
2031
check_exec <<EOF
2032
int main(void){ return 0; }
2033
EOF
2034
if test "$?" != 0; then
2035
    echo "$cc is unable to create an executable file."
2036
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2037
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2038
        echo "Only do this if you know what cross compiling means."
2039
    fi
2040
    die "C compiler test failed."
2041
fi
2042

    
2043
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2044
check_cflags -std=c99
2045
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2046
#include <stdlib.h>
2047
EOF
2048
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2049
#include <stdlib.h>
2050
EOF
2051

    
2052
check_host_cflags -std=c99
2053

    
2054
case "$arch" in
2055
    alpha|ia64|mips|parisc|sparc)
2056
        spic=$shared
2057
    ;;
2058
    x86)
2059
        subarch="x86_32"
2060
        check_cc <<EOF && subarch="x86_64"
2061
        int test[(int)sizeof(char*) - 7];
2062
EOF
2063
        if test "$subarch" = "x86_64"; then
2064
            spic=$shared
2065
        fi
2066
    ;;
2067
esac
2068

    
2069
enable $subarch
2070
enabled spic && enable pic
2071

    
2072
# OS specific
2073
case $target_os in
2074
    haiku)
2075
        prefix_default="/boot/common"
2076
        network_extralibs="-lnetwork"
2077
        ;;
2078
    sunos)
2079
        FFSERVERLDFLAGS=""
2080
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2081
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2082
        network_extralibs="-lsocket -lnsl"
2083
        add_cppflags -D__EXTENSIONS__
2084
        nm_opts='-P -g'
2085
        ;;
2086
    netbsd)
2087
        oss_indev_extralibs="-lossaudio"
2088
        oss_outdev_extralibs="-lossaudio"
2089
        add_cppflags -D_XOPEN_SOURCE=600
2090
        ;;
2091
    openbsd)
2092
        enable malloc_aligned
2093
        # On OpenBSD 4.5. the compiler does not use PIC unless
2094
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2095
        # however the generated executable will not do anything
2096
        # (simply quits with exit-code 1, no crash, no output).
2097
        # Thus explicitly enable PIC here.
2098
        enable pic
2099
        SHFLAGS='-shared'
2100
        oss_indev_extralibs="-lossaudio"
2101
        oss_outdev_extralibs="-lossaudio"
2102
        ;;
2103
    freebsd|dragonfly)
2104
        enable malloc_aligned
2105
        ;;
2106
    bsd/os)
2107
        osextralibs="-lpoll -lgnugetopt"
2108
        strip="strip -d"
2109
        ;;
2110
    darwin)
2111
        enable malloc_aligned
2112
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2113
        strip="${strip} -x"
2114
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2115
        SLIBSUF=".dylib"
2116
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2117
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2118
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2119
        objformat="macho"
2120
        enabled x86_64 && objformat="macho64"
2121
        enabled_any pic shared ||
2122
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2123
        ;;
2124
    mingw32*)
2125
        if test $target_os = "mingw32ce"; then
2126
            disable network
2127
        else
2128
            target_os=mingw32
2129
        fi
2130
        LIBTARGET=i386
2131
        if enabled x86_64; then
2132
            enable malloc_aligned
2133
            LIBTARGET=x64
2134
        elif enabled arm; then
2135
            LIBTARGET=arm
2136
        fi
2137
        shlibdir_default="$bindir_default"
2138
        disable ffserver
2139
        SLIBPREF=""
2140
        SLIBSUF=".dll"
2141
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2142
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2143
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2144
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2145
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2146
            install -d "$(LIBDIR)"; \
2147
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2148
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2149
        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'
2150
        objformat="win32"
2151
        enable dos_paths
2152
        check_cflags -fno-common
2153
        if ! enabled x86_64; then
2154
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2155
                die "ERROR: MinGW runtime version must be >= 3.15."
2156
            enabled_any avisynth vfwcap_indev &&
2157
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2158
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2159
        fi
2160
        ;;
2161
    cygwin*)
2162
        target_os=cygwin
2163
        shlibdir_default="$bindir_default"
2164
        SLIBPREF="cyg"
2165
        SLIBSUF=".dll"
2166
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2167
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2168
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2169
        objformat="win32"
2170
        enable dos_paths
2171
        check_cflags -fno-common
2172
        ;;
2173
    *-dos|freedos|opendos)
2174
        disable ffplay ffserver
2175
        disable $INDEV_LIST $OUTDEV_LIST
2176
        network_extralibs="-lsocket"
2177
        objformat="coff"
2178
        enable dos_paths
2179
        ;;
2180
    linux)
2181
        enable dv1394
2182
        ;;
2183
    irix*)
2184
        target_os=irix
2185
        ranlib="echo ignoring ranlib"
2186
        ;;
2187
    os/2*)
2188
        strip="lxlite"
2189
        ln_s="cp -f"
2190
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2191
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2192
        FFSERVERLDFLAGS=""
2193
        LIBSUF="_s.a"
2194
        SLIBPREF=""
2195
        SLIBSUF=".dll"
2196
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2197
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2198
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2199
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2200
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2201
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2202
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2203
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2204
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2205
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2206
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2207
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2208
        enable dos_paths
2209
        ;;
2210
    gnu/kfreebsd)
2211
        ;;
2212
    gnu)
2213
        ;;
2214
    none)
2215
        ;;
2216
    *)
2217
        die "Unknown OS '$target_os'."
2218
        ;;
2219
esac
2220

    
2221
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2222

    
2223
set_default $PATHS_LIST
2224

    
2225
add_extralibs $osextralibs
2226

    
2227
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2228
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2229

    
2230
# we need to build at least one lib type
2231
if ! enabled_any static shared; then
2232
    cat <<EOF
2233
At least one library type must be built.
2234
Specify --enable-static to build the static libraries or --enable-shared to
2235
build the shared libraries as well. To only build the shared libraries specify
2236
--disable-static in addition to --enable-shared.
2237
EOF
2238
    exit 1;
2239
fi
2240

    
2241
disabled static && LIBNAME=""
2242

    
2243
die_license_disabled() {
2244
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2245
}
2246

    
2247
die_license_disabled gpl libx264
2248
die_license_disabled gpl libxvid
2249
die_license_disabled gpl postproc
2250
die_license_disabled gpl x11grab
2251

    
2252
die_license_disabled nonfree libfaac
2253

    
2254
die_license_disabled version3 libopencore_amrnb
2255
die_license_disabled version3 libopencore_amrwb
2256

    
2257
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2258

    
2259
check_deps $ARCH_EXT_LIST
2260

    
2261
disabled optimizations || check_cflags -fomit-frame-pointer
2262

    
2263
enable_pic() {
2264
    enable pic
2265
    add_cppflags -DPIC
2266
    add_cflags   -fPIC
2267
    add_asflags  -fPIC
2268
}
2269

    
2270
enabled pic && enable_pic
2271

    
2272
check_cc <<EOF || die "Symbol mangling check failed."
2273
int ff_extern;
2274
EOF
2275
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2276
extern_prefix=${sym%%ff_extern*}
2277

    
2278
check_cc <<EOF && enable inline_asm
2279
void foo(void) { __asm__ volatile ("" ::); }
2280
EOF
2281

    
2282
_restrict=
2283
for restrict_keyword in restrict __restrict__ __restrict; do
2284
    check_cc <<EOF && _restrict=$restrict_keyword && break
2285
void foo(char * $restrict_keyword p);
2286
EOF
2287
done
2288

    
2289
check_cc <<EOF && enable attribute_packed
2290
struct { int x; } __attribute__((packed)) x;
2291
EOF
2292

    
2293
check_cc <<EOF && enable attribute_may_alias
2294
union { int x; } __attribute__((may_alias)) x;
2295
EOF
2296

    
2297
check_cc <<EOF || die "endian test failed"
2298
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2299
EOF
2300
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2301

    
2302
if enabled alpha; then
2303

    
2304
    check_cflags -mieee
2305

    
2306
elif enabled arm; then
2307

    
2308
    check_cflags -marm
2309

    
2310
    check_ld <<EOF && enable vfp_args
2311
__asm__ (".eabi_attribute 28, 1");
2312
int main(void) { return 0; }
2313
EOF
2314

    
2315
    # We have to check if pld is a nop and disable it.
2316
    check_asm pld '"pld [r0]"'
2317

    
2318
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2319
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2320
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2321
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2322
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2323
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2324

    
2325
    enabled_all armv6t2 shared !pic && enable_pic
2326

    
2327
elif enabled mips; then
2328

    
2329
    check_asm loongson '"dmult.g $1, $2, $3"'
2330
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2331

    
2332
elif enabled ppc; then
2333

    
2334
    enable local_aligned_8 local_aligned_16
2335

    
2336
    check_asm dcbzl     '"dcbzl 0, 1"'
2337
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2338
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2339

    
2340
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2341
    if enabled altivec; then
2342
        check_cflags -maltivec -mabi=altivec &&
2343
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2344
        check_cflags -faltivec
2345

    
2346
        # check if our compiler supports Motorola AltiVec C API
2347
        check_cc <<EOF || disable altivec
2348
$inc_altivec_h
2349
int main(void) {
2350
    vector signed int v1, v2, v3;
2351
    v1 = vec_add(v2,v3);
2352
    return 0;
2353
}
2354
EOF
2355

    
2356
        # check if our compiler supports braces for vector declarations
2357
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2358
$inc_altivec_h
2359
int main (void) { (vector int) {1}; return 0; }
2360
EOF
2361
    fi
2362

    
2363
elif enabled sparc; then
2364

    
2365
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2366
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2367

    
2368
elif enabled x86; then
2369

    
2370
    enable local_aligned_8 local_aligned_16
2371

    
2372
    # check whether EBP is available on x86
2373
    # As 'i' is stored on the stack, this program will crash
2374
    # if the base pointer is used to access it because the
2375
    # base pointer is cleared in the inline assembly code.
2376
    check_exec_crash <<EOF && enable ebp_available
2377
    volatile int i=0;
2378
    __asm__ volatile (
2379
        "xorl %%ebp, %%ebp"
2380
    ::: "%ebp");
2381
    return i;
2382
EOF
2383

    
2384
    # check whether EBX is available on x86
2385
    check_asm ebx_available '""::"b"(0)' &&
2386
        check_asm ebx_available '"":::"%ebx"'
2387

    
2388
    # check whether more than 10 operands are supported
2389
    check_cc <<EOF && enable ten_operands
2390
int main(void) {
2391
    int x=0;
2392
    __asm__ volatile(
2393
        ""
2394
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2395
    );
2396
    return 0;
2397
}
2398
EOF
2399

    
2400
    # check whether binutils is new enough to compile SSSE3/MMX2
2401
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2402
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2403

    
2404
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2405

    
2406
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2407
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2408
    enabled     pic           && append YASMFLAGS "-DPIC"
2409
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2410
    case "$objformat" in
2411
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2412
    esac
2413
    if ! disabled yasm; then
2414
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2415
            warn "yasm not found, performance will suffer"
2416
    fi
2417

    
2418
    case "$cpu" in
2419
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2420
            disable fast_clz
2421
        ;;
2422
    esac
2423

    
2424
fi
2425

    
2426
if check_func dlopen; then
2427
    ldl=
2428
elif check_func dlopen -ldl; then
2429
    ldl=-ldl
2430
fi
2431

    
2432
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2433
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2434

    
2435
check_func  fork
2436
check_func  getaddrinfo $network_extralibs
2437
check_func  gethrtime
2438
check_func  getrusage
2439
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2440
check_func  inet_aton $network_extralibs
2441
check_func  isatty
2442
check_func  ${malloc_prefix}memalign            && enable memalign
2443
check_func  mkstemp
2444
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2445
check_func  setrlimit
2446
check_func  strerror_r
2447
check_func_headers io.h setmode
2448
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2449
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2450
check_func_headers windows.h GetProcessTimes
2451
check_func_headers windows.h VirtualAlloc
2452

    
2453
check_header conio.h
2454
check_header dlfcn.h
2455
check_header dxva2api.h
2456
check_header malloc.h
2457
check_header poll.h
2458
check_header sys/mman.h
2459
check_header sys/resource.h
2460
check_header sys/select.h
2461
check_header termios.h
2462
check_header vdpau/vdpau.h
2463
check_header vdpau/vdpau_x11.h
2464
check_header X11/extensions/XvMClib.h
2465

    
2466
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2467

    
2468
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2469
     enabled_any $need_memalign ; then
2470
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2471
fi
2472

    
2473
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2474
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2475

    
2476
# check for some common methods of building with pthread support
2477
# do this before the optional library checks as some of them require pthreads
2478
if ! disabled pthreads && ! enabled w32threads; then
2479
    enable pthreads
2480
    if check_func pthread_create; then
2481
        :
2482
    elif check_func pthread_create -pthread; then
2483
        add_cflags -pthread
2484
        add_extralibs -pthread
2485
    elif check_func pthread_create -pthreads; then
2486
        add_cflags -pthreads
2487
        add_extralibs -pthreads
2488
    elif check_func pthread_create -lpthreadGC2; then
2489
        add_extralibs -lpthreadGC2
2490
    elif ! check_lib pthread.h pthread_create -lpthread; then
2491
        disable pthreads
2492
    fi
2493
fi
2494

    
2495
for thread in $THREADS_LIST; do
2496
    if enabled $thread; then
2497
        test -n "$thread_type" &&
2498
            die "ERROR: Only one thread type must be selected." ||
2499
            thread_type="$thread"
2500
    fi
2501
done
2502

    
2503
check_lib math.h sin -lm
2504
disabled vaapi || check_lib va/va.h vaInitialize -lva
2505

    
2506
check_mathfunc exp2
2507
check_mathfunc exp2f
2508
check_mathfunc llrint
2509
check_mathfunc llrintf
2510
check_mathfunc log2
2511
check_mathfunc log2f
2512
check_mathfunc lrint
2513
check_mathfunc lrintf
2514
check_mathfunc round
2515
check_mathfunc roundf
2516
check_mathfunc truncf
2517

    
2518
# these are off by default, so fail if requested and not available
2519
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2520
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2521
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2522
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2523
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2524
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2525
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2526
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2527
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2528
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2529
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2530
enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
2531
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2532
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2533
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2534
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2535
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2536
enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2537
                      require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2538
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2539
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2540
                        die "ERROR: libx264 version must be >= 0.98."; }
2541
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2542
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2543

    
2544
# libdc1394 check
2545
if enabled libdc1394; then
2546
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2547
        enable libdc1394_2; } ||
2548
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2549
        enable libdc1394_1; } ||
2550
    die "ERROR: No version of libdc1394 found "
2551
fi
2552

    
2553
SDL_CONFIG="${cross_prefix}sdl-config"
2554
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2555
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2556
    sdl_libs=$("${SDL_CONFIG}" --libs)
2557
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2558
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2559
    enable sdl &&
2560
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2561
fi
2562

    
2563
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2564

    
2565
if enabled network; then
2566
    check_type "sys/types.h sys/socket.h" socklen_t
2567
    check_type netdb.h "struct addrinfo"
2568
    check_type netinet/in.h "struct ipv6_mreq"
2569
    check_type netinet/in.h "struct sockaddr_in6"
2570
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2571
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2572
    # Prefer arpa/inet.h over winsock2
2573
    if check_header arpa/inet.h ; then
2574
        check_func closesocket
2575
    elif check_header winsock2.h ; then
2576
        check_func_headers winsock2.h closesocket -lws2 && \
2577
            network_extralibs="-lws2" || \
2578
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2579
            network_extralibs="-lws2_32"; }
2580
        check_type ws2tcpip.h socklen_t
2581
        check_type ws2tcpip.h "struct addrinfo"
2582
        check_type ws2tcpip.h "struct ipv6_mreq"
2583
        check_type ws2tcpip.h "struct sockaddr_in6"
2584
        check_type ws2tcpip.h "struct sockaddr_storage"
2585
        check_struct winsock2.h "struct sockaddr" sa_len
2586
    else
2587
        disable network
2588
    fi
2589
fi
2590

    
2591
check_header linux/videodev.h
2592
check_header linux/videodev2.h
2593
check_header sys/videoio.h
2594

    
2595
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2596

    
2597
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2598
{ check_header dev/bktr/ioctl_meteor.h &&
2599
  check_header dev/bktr/ioctl_bt848.h; } ||
2600
{ check_header machine/ioctl_meteor.h &&
2601
  check_header machine/ioctl_bt848.h; } ||
2602
{ check_header dev/video/meteor/ioctl_meteor.h &&
2603
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2604
check_header dev/ic/bt8xx.h
2605

    
2606
check_header sys/soundcard.h
2607
check_header soundcard.h
2608

    
2609
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2610

    
2611
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2612

    
2613
enabled x11grab                         &&
2614
check_header X11/Xlib.h                 &&
2615
check_header X11/extensions/XShm.h      &&
2616
check_header X11/extensions/Xfixes.h    &&
2617
check_func XOpenDisplay -lX11           &&
2618
check_func XShmCreateImage -lX11 -lXext &&
2619
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2620

    
2621
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2622
check_cpp_condition \
2623
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2624
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2625
      disable vdpau; }
2626
fi
2627

    
2628
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2629

    
2630
# add some useful compiler flags if supported
2631
check_cflags -Wdeclaration-after-statement
2632
check_cflags -Wall
2633
check_cflags -Wno-switch
2634
check_cflags -Wdisabled-optimization
2635
check_cflags -Wpointer-arith
2636
check_cflags -Wredundant-decls
2637
check_cflags -Wno-pointer-sign
2638
check_cflags -Wcast-qual
2639
check_cflags -Wwrite-strings
2640
check_cflags -Wtype-limits
2641
check_cflags -Wundef
2642
check_cflags -Wmissing-prototypes
2643
enabled extra_warnings && check_cflags -Winline
2644

    
2645
# add some linker flags
2646
check_ldflags -Wl,--warn-common
2647
check_ldflags -Wl,--as-needed
2648
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'
2649
check_ldflags -Wl,-Bsymbolic
2650

    
2651
echo "X{};" > $TMPV
2652
if test_ldflags -Wl,--version-script,$TMPV; then
2653
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2654
    check_cc <<EOF && enable symver_asm_label
2655
void ff_foo(void) __asm__ ("av_foo@VERSION");
2656
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2657
EOF
2658
    check_cc <<EOF && enable symver_gnu_asm
2659
__asm__(".symver ff_foo,av_foo@VERSION");
2660
void ff_foo(void) {}
2661
EOF
2662
fi
2663

    
2664
if enabled small; then
2665
    add_cflags $size_cflags
2666
    optimizations="small"
2667
elif enabled optimizations; then
2668
    add_cflags $speed_cflags
2669
else
2670
    add_cflags $noopt_cflags
2671
fi
2672
check_cflags -fno-math-errno
2673
check_cflags -fno-signed-zeros
2674

    
2675
if enabled icc; then
2676
    # Just warnings, no remarks
2677
    check_cflags -w1
2678
    # -wd: Disable following warnings
2679
    # 144, 167, 556: -Wno-pointer-sign
2680
    # 10006: ignoring unknown option -fno-signed-zeros
2681
    # 10156: ignoring option '-W'; no argument required
2682
    check_cflags -wd144,167,556,10006,10156
2683
    # 11030: Warning unknown option --as-needed
2684
    # 10156: ignoring option '-export'; no argument required
2685
    check_ldflags -wd10156,11030
2686
    # Allow to compile with optimizations
2687
    check_ldflags -march=$cpu
2688
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2689
    enable ebp_available
2690
elif enabled ccc; then
2691
    # disable some annoying warnings
2692
    add_cflags -msg_disable cvtu32to64
2693
    add_cflags -msg_disable embedcomment
2694
    add_cflags -msg_disable needconstext
2695
    add_cflags -msg_disable nomainieee
2696
    add_cflags -msg_disable ptrmismatch1
2697
    add_cflags -msg_disable unreachcode
2698
elif enabled gcc; then
2699
    check_cflags -fno-tree-vectorize
2700
    check_cflags -Werror=implicit-function-declaration
2701
    check_cflags -Werror=missing-prototypes
2702
elif enabled clang; then
2703
    check_cflags -Qunused-arguments
2704
elif enabled armcc; then
2705
    # 2523: use of inline assembler is deprecated
2706
    add_cflags -Wrvct,--diag_suppress=2523
2707
    add_cflags -Wrvct,--diag_suppress=1207
2708
elif enabled tms470; then
2709
    add_cflags -pds=824 -pds=837
2710
fi
2711

    
2712
enabled_any $THREADS_LIST      && enable threads
2713

    
2714
check_deps $CONFIG_LIST       \
2715
           $CONFIG_EXTRA      \
2716
           $HAVE_LIST         \
2717
           $DECODER_LIST      \
2718
           $ENCODER_LIST      \
2719
           $HWACCEL_LIST      \
2720
           $PARSER_LIST       \
2721
           $BSF_LIST          \
2722
           $DEMUXER_LIST      \
2723
           $MUXER_LIST        \
2724
           $FILTER_LIST       \
2725
           $INDEV_LIST        \
2726
           $OUTDEV_LIST       \
2727
           $PROTOCOL_LIST     \
2728

    
2729
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2730

    
2731
echo "install prefix            $prefix"
2732
echo "source path               $source_path"
2733
echo "C compiler                $cc"
2734
echo "ARCH                      $arch ($cpu)"
2735
if test "$build_suffix" != ""; then
2736
    echo "build suffix              $build_suffix"
2737
fi
2738
if test "$extra_version" != ""; then
2739
    echo "version string suffix     $extra_version"
2740
fi
2741
echo "big-endian                ${bigendian-no}"
2742
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2743
if enabled x86; then
2744
    echo "yasm                      ${yasm-no}"
2745
    echo "MMX enabled               ${mmx-no}"
2746
    echo "MMX2 enabled              ${mmx2-no}"
2747
    echo "3DNow! enabled            ${amd3dnow-no}"
2748
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2749
    echo "SSE enabled               ${sse-no}"
2750
    echo "SSSE3 enabled             ${ssse3-no}"
2751
    echo "CMOV enabled              ${cmov-no}"
2752
    echo "CMOV is fast              ${fast_cmov-no}"
2753
    echo "EBX available             ${ebx_available-no}"
2754
    echo "EBP available             ${ebp_available-no}"
2755
    echo "10 operands supported     ${ten_operands-no}"
2756
fi
2757
if enabled arm; then
2758
    echo "ARMv5TE enabled           ${armv5te-no}"
2759
    echo "ARMv6 enabled             ${armv6-no}"
2760
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2761
    echo "ARM VFP enabled           ${armvfp-no}"
2762
    echo "IWMMXT enabled            ${iwmmxt-no}"
2763
    echo "NEON enabled              ${neon-no}"
2764
fi
2765
if enabled mips; then
2766
    echo "MMI enabled               ${mmi-no}"
2767
fi
2768
if enabled ppc; then
2769
    echo "AltiVec enabled           ${altivec-no}"
2770
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2771
    echo "dcbzl available           ${dcbzl-no}"
2772
fi
2773
if enabled sparc; then
2774
    echo "VIS enabled               ${vis-no}"
2775
fi
2776
echo "debug symbols             ${debug-no}"
2777
echo "strip symbols             ${stripping-no}"
2778
echo "optimizations             ${optimizations-no}"
2779
echo "static                    ${static-no}"
2780
echo "shared                    ${shared-no}"
2781
echo "postprocessing support    ${postproc-no}"
2782
echo "new filter support        ${avfilter-no}"
2783
echo "filters using lavformat   ${avfilter_lavf-no}"
2784
echo "network support           ${network-no}"
2785
echo "threading support         ${thread_type-no}"
2786
echo "SDL support               ${sdl-no}"
2787
echo "Sun medialib support      ${mlib-no}"
2788
echo "AVISynth enabled          ${avisynth-no}"
2789
echo "libdc1394 support         ${libdc1394-no}"
2790
echo "libdirac enabled          ${libdirac-no}"
2791
echo "libfaac enabled           ${libfaac-no}"
2792
echo "libgsm enabled            ${libgsm-no}"
2793
echo "libmp3lame enabled        ${libmp3lame-no}"
2794
echo "libnut enabled            ${libnut-no}"
2795
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2796
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2797
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2798
echo "librtmp enabled           ${librtmp-no}"
2799
echo "libschroedinger enabled   ${libschroedinger-no}"
2800
echo "libspeex enabled          ${libspeex-no}"
2801
echo "libtheora enabled         ${libtheora-no}"
2802
echo "libvorbis enabled         ${libvorbis-no}"
2803
echo "libvpx enabled            ${libvpx-no}"
2804
echo "libx264 enabled           ${libx264-no}"
2805
echo "libxvid enabled           ${libxvid-no}"
2806
echo "zlib enabled              ${zlib-no}"
2807
echo "bzlib enabled             ${bzlib-no}"
2808
echo
2809

    
2810
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2811
    echo "Enabled ${type}s:"
2812
    eval list=\$$(toupper $type)_LIST
2813
    for part in $list; do
2814
        enabled $part && echo ${part%_*}
2815
    done | sort | pr -3 -t
2816
    echo
2817
done
2818

    
2819
license="LGPL version 2.1 or later"
2820
if enabled nonfree; then
2821
    license="nonfree and unredistributable"
2822
elif enabled gplv3; then
2823
    license="GPL version 3 or later"
2824
elif enabled lgplv3; then
2825
    license="LGPL version 3 or later"
2826
elif enabled gpl; then
2827
    license="GPL version 2 or later"
2828
fi
2829

    
2830
echo "License: $license"
2831

    
2832
echo "Creating config.mak and config.h..."
2833

    
2834
# build tree in object directory if source path is different from current one
2835
if enabled source_path_used; then
2836
    DIRS="
2837
        doc
2838
        libavcodec
2839
        libavcodec/$arch
2840
        libavdevice
2841
        libavfilter
2842
        libavformat
2843
        libavutil
2844
        libavutil/$arch
2845
        libpostproc
2846
        libswscale
2847
        libswscale/$arch
2848
        tests
2849
        tools
2850
    "
2851
    FILES="
2852
        Makefile
2853
        common.mak
2854
        subdir.mak
2855
        doc/texi2pod.pl
2856
        libavcodec/Makefile
2857
        libavcodec/${arch}/Makefile
2858
        libavdevice/Makefile
2859
        libavfilter/Makefile
2860
        libavformat/Makefile
2861
        libavutil/Makefile
2862
        libpostproc/Makefile
2863
        libswscale/Makefile
2864
    "
2865
    map 'mkdir -p $v' $DIRS;
2866
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2867
fi
2868

    
2869
enabled stripping || strip="echo skipping strip"
2870

    
2871
cat > config.mak <<EOF
2872
# Automatically generated by configure - do not modify!
2873
ifndef FFMPEG_CONFIG_MAK
2874
FFMPEG_CONFIG_MAK=1
2875
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2876
prefix=$prefix
2877
LIBDIR=\$(DESTDIR)$libdir
2878
SHLIBDIR=\$(DESTDIR)$shlibdir
2879
INCDIR=\$(DESTDIR)$incdir
2880
BINDIR=\$(DESTDIR)$bindir
2881
DATADIR=\$(DESTDIR)$datadir
2882
MANDIR=\$(DESTDIR)$mandir
2883
SRC_PATH="$source_path"
2884
SRC_PATH_BARE=$source_path
2885
BUILD_ROOT="$PWD"
2886
ARCH=$arch
2887
CC=$cc
2888
AS=$as
2889
LD=$ld
2890
DEPCC=$dep_cc
2891
YASM=$yasmexe
2892
YASMDEP=$yasmexe
2893
AR=$ar
2894
RANLIB=$ranlib
2895
CP=cp -p
2896
LN_S=$ln_s
2897
STRIP=$strip
2898
CPPFLAGS=$CPPFLAGS
2899
CFLAGS=$CFLAGS
2900
ASFLAGS=$ASFLAGS
2901
CC_O=$CC_O
2902
LDFLAGS=$LDFLAGS
2903
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2904
SHFLAGS=$SHFLAGS
2905
YASMFLAGS=$YASMFLAGS
2906
BUILDSUF=$build_suffix
2907
FULLNAME=$FULLNAME
2908
LIBPREF=$LIBPREF
2909
LIBSUF=$LIBSUF
2910
LIBNAME=$LIBNAME
2911
SLIBPREF=$SLIBPREF
2912
SLIBSUF=$SLIBSUF
2913
EXESUF=$EXESUF
2914
EXTRA_VERSION=$extra_version
2915
DEPFLAGS=$DEPFLAGS
2916
CCDEP=$CCDEP
2917
ASDEP=$ASDEP
2918
CC_DEPFLAGS=$CC_DEPFLAGS
2919
AS_DEPFLAGS=$AS_DEPFLAGS
2920
HOSTCC=$host_cc
2921
HOSTCFLAGS=$host_cflags
2922
HOSTEXESUF=$HOSTEXESUF
2923
HOSTLDFLAGS=$host_ldflags
2924
HOSTLIBS=$host_libs
2925
TARGET_EXEC=$target_exec
2926
TARGET_PATH=$target_path
2927
SDL_LIBS=$sdl_libs
2928
SDL_CFLAGS=$sdl_cflags
2929
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2930
EXTRALIBS=$extralibs
2931
INSTALL=install
2932
LIBTARGET=${LIBTARGET}
2933
SLIBNAME=${SLIBNAME}
2934
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2935
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2936
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2937
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2938
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2939
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2940
SAMPLES=$samples
2941
EOF
2942

    
2943
get_version(){
2944
    name=$1
2945
    file=$source_path/$2
2946
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2947
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2948
    lcname=$(tolower $name)
2949
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2950
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2951
}
2952

    
2953
get_version LIBSWSCALE  libswscale/swscale.h
2954
get_version LIBPOSTPROC libpostproc/postprocess.h
2955
get_version LIBAVCODEC  libavcodec/avcodec.h
2956
get_version LIBAVDEVICE libavdevice/avdevice.h
2957
get_version LIBAVFORMAT libavformat/avformat.h
2958
get_version LIBAVUTIL   libavutil/avutil.h
2959
get_version LIBAVFILTER libavfilter/avfilter.h
2960

    
2961
cat > $TMPH <<EOF
2962
/* Automatically generated by configure - do not modify! */
2963
#ifndef FFMPEG_CONFIG_H
2964
#define FFMPEG_CONFIG_H
2965
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2966
#define FFMPEG_LICENSE "$(c_escape $license)"
2967
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2968
#define CC_TYPE "$cc_type"
2969
#define CC_VERSION $cc_version
2970
#define restrict $_restrict
2971
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
2972
#define EXTERN_PREFIX "${extern_prefix}"
2973
#define EXTERN_ASM ${extern_prefix}
2974
EOF
2975

    
2976
test -n "$malloc_prefix" &&
2977
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2978

    
2979
if enabled small || disabled optimizations; then
2980
    echo "#undef  av_always_inline"  >> $TMPH
2981
    echo "#define av_always_inline"  >> $TMPH
2982
fi
2983

    
2984
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2985
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2986
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2987
                                      $CONFIG_EXTRA      \
2988
                                      $DECODER_LIST      \
2989
                                      $ENCODER_LIST      \
2990
                                      $HWACCEL_LIST      \
2991
                                      $PARSER_LIST       \
2992
                                      $BSF_LIST          \
2993
                                      $DEMUXER_LIST      \
2994
                                      $MUXER_LIST        \
2995
                                      $FILTER_LIST       \
2996
                                      $PROTOCOL_LIST     \
2997
                                      $INDEV_LIST        \
2998
                                      $OUTDEV_LIST       \
2999

    
3000
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3001
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3002

    
3003
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3004
cp_if_changed $TMPH config.h
3005

    
3006
cat > $TMPH <<EOF
3007
/* Generated by ffconf */
3008
#ifndef AVUTIL_AVCONFIG_H
3009
#define AVUTIL_AVCONFIG_H
3010
EOF
3011

    
3012
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3013

    
3014
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3015

    
3016
cp_if_changed $TMPH libavutil/avconfig.h
3017

    
3018
test -n "$WARNINGS" && printf "\n$WARNINGS"
3019

    
3020
# build pkg-config files
3021

    
3022
pkgconfig_generate(){
3023
name=$1
3024
shortname=${name#lib}${build_suffix}
3025
comment=$2
3026
version=$3
3027
libs=$4
3028
requires=$5
3029
cat <<EOF > $name/$name.pc
3030
prefix=$prefix
3031
exec_prefix=\${prefix}
3032
libdir=$libdir
3033
includedir=$incdir
3034

    
3035
Name: $name
3036
Description: $comment
3037
Version: $version
3038
Requires: $(enabled shared || echo $requires)
3039
Requires.private: $(enabled shared && echo $requires)
3040
Conflicts:
3041
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3042
Libs.private: $(enabled shared && echo $libs)
3043
Cflags: -I\${includedir}
3044
EOF
3045
cat <<EOF > $name/$name-uninstalled.pc
3046
prefix=
3047
exec_prefix=
3048
libdir=\${pcfiledir}
3049
includedir=${source_path}
3050

    
3051
Name: $name
3052
Description: $comment
3053
Version: $version
3054
Requires: $requires
3055
Conflicts:
3056
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3057
Cflags: -I\${includedir}
3058
EOF
3059
}
3060

    
3061
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3062
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3063
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3064
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3065
enabled avfilter &&
3066
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3067
enabled postproc &&
3068
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3069
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"