Statistics
| Branch: | Revision:

ffmpeg / configure @ 851ffa80

History | View | Annotate | Download (87.5 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
  --enable-powerpc-perf    enable performance report on PPC
215
                           (requires enabling PMC)
216
  --disable-asm            disable all assembler optimizations
217
  --disable-altivec        disable AltiVec optimizations
218
  --disable-amd3dnow       disable 3DNow! optimizations
219
  --disable-amd3dnowext    disable 3DNow! extended optimizations
220
  --disable-mmx            disable MMX optimizations
221
  --disable-mmx2           disable MMX2 optimizations
222
  --disable-sse            disable SSE optimizations
223
  --disable-ssse3          disable SSSE3 optimizations
224
  --disable-armv5te        disable armv5te optimizations
225
  --disable-armv6          disable armv6 optimizations
226
  --disable-armv6t2        disable armv6t2 optimizations
227
  --disable-armvfp         disable ARM VFP optimizations
228
  --disable-iwmmxt         disable iwmmxt optimizations
229
  --disable-mmi            disable MMI optimizations
230
  --disable-neon           disable neon optimizations
231
  --disable-vis            disable VIS optimizations
232
  --disable-yasm           disable use of yasm assembler
233
  --enable-pic             build position-independent code
234
  --malloc-prefix=PFX      prefix malloc and related names with PFX
235
  --enable-sram            allow use of on-chip SRAM
236

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

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

    
251
quotes='""'
252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
516
flags_saved(){
517
    (: ${SAVE_CFLAGS?}) 2> /dev/null
518
}
519

    
520
save_flags(){
521
    flags_saved && return
522
    SAVE_CFLAGS="$CFLAGS"
523
    SAVE_LDFLAGS="$LDFLAGS"
524
    SAVE_extralibs="$extralibs"
525
}
526

    
527
restore_flags(){
528
    flags_saved || return
529
    CFLAGS="$SAVE_CFLAGS"
530
    LDFLAGS="$SAVE_LDFLAGS"
531
    extralibs="$SAVE_extralibs"
532
    unset SAVE_CFLAGS
533
    unset SAVE_LDFLAGS
534
    unset SAVE_extralibs
535
}
536

    
537
temp_cflags(){
538
    save_flags
539
    CFLAGS="$CFLAGS $*"
540
}
541

    
542
temp_ldflags(){
543
    save_flags
544
    LDFLAGS="$LDFLAGS $*"
545
}
546

    
547
temp_extralibs(){
548
    save_flags
549
    extralibs="$extralibs $*"
550
}
551

    
552
append(){
553
    var=$1
554
    shift
555
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
556
    eval "$var=\"\$$var $*\""
557
}
558

    
559
add_cppflags(){
560
    append CPPFLAGS $($filter_cppflags "$@")
561
}
562

    
563
add_cflags(){
564
    append CFLAGS $($filter_cflags "$@")
565
}
566

    
567
add_asflags(){
568
    append ASFLAGS $($filter_asflags "$@")
569
}
570

    
571
add_ldflags(){
572
    append LDFLAGS "$@"
573
}
574

    
575
add_extralibs(){
576
    append extralibs "$@"
577
}
578

    
579
check_cmd(){
580
    log "$@"
581
    "$@" >> $logfile 2>&1
582
}
583

    
584
check_cc(){
585
    log check_cc "$@"
586
    cat > $TMPC
587
    log_file $TMPC
588
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
589
}
590

    
591
check_cpp(){
592
    log check_cpp "$@"
593
    cat > $TMPC
594
    log_file $TMPC
595
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
596
}
597

    
598
check_as(){
599
    log check_as "$@"
600
    cat > $TMPC
601
    log_file $TMPC
602
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
603
}
604

    
605
check_asm(){
606
    log check_asm "$@"
607
    name="$1"
608
    code="$2"
609
    shift 2
610
    disable $name
611
    check_as "$@" <<EOF && enable $name
612
void foo(void){ __asm__ volatile($code); }
613
EOF
614
}
615

    
616
check_yasm(){
617
    log check_yasm "$@"
618
    echo "$1" > $TMPS
619
    log_file $TMPS
620
    shift 1
621
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
622
}
623

    
624
check_ld(){
625
    log check_ld "$@"
626
    flags=''
627
    libs=''
628
    for f; do
629
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
630
    done
631
    check_cc $($filter_cflags $flags) || return
632
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
633
}
634

    
635
check_cppflags(){
636
    log check_cppflags "$@"
637
    set -- $($filter_cppflags "$@")
638
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
639
int x;
640
EOF
641
}
642

    
643
check_cflags(){
644
    log check_cflags "$@"
645
    set -- $($filter_cflags "$@")
646
    check_cc "$@" <<EOF && append CFLAGS "$@"
647
int x;
648
EOF
649
}
650

    
651
test_ldflags(){
652
    log test_ldflags "$@"
653
    check_ld "$@" <<EOF
654
int main(void){ return 0; }
655
EOF
656
}
657

    
658
check_ldflags(){
659
    log check_ldflags "$@"
660
    test_ldflags "$@" && add_ldflags "$@"
661
}
662

    
663
check_header(){
664
    log check_header "$@"
665
    header=$1
666
    shift
667
    disable_safe $header
668
    check_cpp "$@" <<EOF && enable_safe $header
669
#include <$header>
670
int x;
671
EOF
672
}
673

    
674
check_func(){
675
    log check_func "$@"
676
    func=$1
677
    shift
678
    disable $func
679
    check_ld "$@" <<EOF && enable $func
680
extern int $func();
681
int main(void){ $func(); }
682
EOF
683
}
684

    
685
check_mathfunc(){
686
    log check_mathfunc "$@"
687
    func=$1
688
    shift
689
    disable $func
690
    check_ld "$@" <<EOF && enable $func
691
#include <math.h>
692
float foo(float f) { return $func(f); }
693
int main(void){ return 0; }
694
EOF
695
}
696

    
697
check_func_headers(){
698
    log check_func_headers "$@"
699
    headers=$1
700
    func=$2
701
    shift 2
702
    disable $func
703
    incs=""
704
    for hdr in $headers; do
705
        incs="$incs
706
#include <$hdr>"
707
    done
708
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
709
$incs
710
int main(int argc, char **argv){
711
    return (long) $func;
712
}
713
EOF
714
}
715

    
716
check_cpp_condition(){
717
    log check_cpp_condition "$@"
718
    header=$1
719
    condition=$2
720
    shift 2
721
    check_cpp $($filter_cppflags "$@") <<EOF
722
#include <$header>
723
#if !($condition)
724
#error "unsatisfied condition: $condition"
725
#endif
726
EOF
727
}
728

    
729
check_lib(){
730
    log check_lib "$@"
731
    header="$1"
732
    func="$2"
733
    shift 2
734
    temp_extralibs "$@"
735
    check_header $header && check_func $func && add_extralibs "$@"
736
    err=$?
737
    restore_flags
738
    return $err
739
}
740

    
741
check_lib2(){
742
    log check_lib2 "$@"
743
    headers="$1"
744
    func="$2"
745
    shift 2
746
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
747
}
748

    
749
check_exec(){
750
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
751
}
752

    
753
check_exec_crash(){
754
    code=$(cat)
755

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

    
762
    (check_exec "$@") >> $logfile 2>&1 <<EOF
763
#include <signal.h>
764
static void sighandler(int sig){
765
    raise(SIGTERM);
766
}
767
int main(void){
768
    signal(SIGILL, sighandler);
769
    signal(SIGFPE, sighandler);
770
    signal(SIGSEGV, sighandler);
771
#ifdef SIGBUS
772
    signal(SIGBUS, sighandler);
773
#endif
774
    { $code }
775
}
776
EOF
777
}
778

    
779
check_type(){
780
    log check_type "$@"
781
    headers=$1
782
    type=$2
783
    shift 2
784
    disable_safe "$type"
785
    incs=""
786
    for hdr in $headers; do
787
        incs="$incs
788
#include <$hdr>"
789
    done
790
    check_cc "$@" <<EOF && enable_safe "$type"
791
$incs
792
$type v;
793
EOF
794
}
795

    
796
check_struct(){
797
    log check_type "$@"
798
    headers=$1
799
    struct=$2
800
    member=$3
801
    shift 3
802
    disable_safe "${struct}_${member}"
803
    incs=""
804
    for hdr in $headers; do
805
        incs="$incs
806
#include <$hdr>"
807
    done
808
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
809
$incs
810
const void *p = &(($struct *)0)->$member;
811
EOF
812
}
813

    
814
require(){
815
    name="$1"
816
    header="$2"
817
    func="$3"
818
    shift 3
819
    check_lib $header $func "$@" || die "ERROR: $name not found"
820
}
821

    
822
require2(){
823
    name="$1"
824
    headers="$2"
825
    func="$3"
826
    shift 3
827
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
828
}
829

    
830
check_foo_config(){
831
    cfg=$1
832
    pkg=$2
833
    header=$3
834
    func=$4
835
    shift 4
836
    disable $cfg
837
    check_cmd ${pkg}-config --version
838
    err=$?
839
    if test "$err" = 0; then
840
        temp_cflags $(${pkg}-config --cflags)
841
        temp_extralibs $(${pkg}-config --libs)
842
        check_lib "$@" $header $func && enable $cfg
843
    fi
844
    return $err
845
}
846

    
847
check_host_cc(){
848
    log check_host_cc "$@"
849
    cat > $TMPC
850
    log_file $TMPC
851
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
852
}
853

    
854
check_host_cflags(){
855
    log check_host_cflags "$@"
856
    check_host_cc "$@" <<EOF && append host_cflags "$@"
857
int x;
858
EOF
859
}
860

    
861
apply(){
862
    file=$1
863
    shift
864
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
865
}
866

    
867
cp_if_changed(){
868
    cmp -s "$1" "$2" &&
869
        echo "$2 is unchanged" ||
870
        cp -f "$1" "$2"
871
}
872

    
873
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
874
# system-dependent things.
875

    
876
COMPONENT_LIST="
877
    bsfs
878
    decoders
879
    demuxers
880
    encoders
881
    filters
882
    hwaccels
883
    indevs
884
    muxers
885
    outdevs
886
    parsers
887
    protocols
888
"
889

    
890
CONFIG_LIST="
891
    $COMPONENT_LIST
892
    aandct
893
    avcodec
894
    avdevice
895
    avfilter
896
    avfilter_lavf
897
    avformat
898
    avisynth
899
    bzlib
900
    dct
901
    doc
902
    dwt
903
    dxva2
904
    fastdiv
905
    ffmpeg
906
    ffplay
907
    ffprobe
908
    ffserver
909
    fft
910
    golomb
911
    gpl
912
    gprof
913
    gray
914
    h264dsp
915
    hardcoded_tables
916
    libdc1394
917
    libdirac
918
    libfaac
919
    libgsm
920
    libmp3lame
921
    libnut
922
    libopencore_amrnb
923
    libopencore_amrwb
924
    libopenjpeg
925
    librtmp
926
    libschroedinger
927
    libspeex
928
    libtheora
929
    libvorbis
930
    libvpx
931
    libx264
932
    libxvid
933
    lpc
934
    lsp
935
    mdct
936
    memalign_hack
937
    mlib
938
    mpegaudio_hp
939
    network
940
    nonfree
941
    pic
942
    postproc
943
    powerpc_perf
944
    rdft
945
    runtime_cpudetect
946
    shared
947
    small
948
    sram
949
    static
950
    swscale
951
    swscale_alpha
952
    vaapi
953
    vdpau
954
    version3
955
    x11grab
956
    zlib
957
"
958

    
959
THREADS_LIST='
960
    pthreads
961
    w32threads
962
'
963

    
964
ARCH_LIST='
965
    alpha
966
    arm
967
    avr32
968
    avr32_ap
969
    avr32_uc
970
    bfin
971
    ia64
972
    m68k
973
    mips
974
    mips64
975
    parisc
976
    ppc
977
    ppc64
978
    s390
979
    sh4
980
    sparc
981
    sparc64
982
    tomi
983
    x86
984
    x86_32
985
    x86_64
986
'
987

    
988
ARCH_EXT_LIST='
989
    altivec
990
    amd3dnow
991
    amd3dnowext
992
    armv5te
993
    armv6
994
    armv6t2
995
    armvfp
996
    iwmmxt
997
    mmi
998
    mmx
999
    mmx2
1000
    neon
1001
    ppc4xx
1002
    sse
1003
    ssse3
1004
    vis
1005
'
1006

    
1007
HAVE_LIST_PUB='
1008
    bigendian
1009
'
1010

    
1011
HAVE_LIST="
1012
    $ARCH_EXT_LIST
1013
    $HAVE_LIST_PUB
1014
    $THREADS_LIST
1015
    alsa_asoundlib_h
1016
    altivec_h
1017
    arpa_inet_h
1018
    attribute_may_alias
1019
    attribute_packed
1020
    bswap
1021
    closesocket
1022
    cmov
1023
    conio_h
1024
    dcbzl
1025
    dev_bktr_ioctl_bt848_h
1026
    dev_bktr_ioctl_meteor_h
1027
    dev_ic_bt8xx_h
1028
    dev_video_meteor_ioctl_meteor_h
1029
    dev_video_bktr_ioctl_bt848_h
1030
    dlfcn_h
1031
    dlopen
1032
    dos_paths
1033
    ebp_available
1034
    ebx_available
1035
    exp2
1036
    exp2f
1037
    fast_64bit
1038
    fast_clz
1039
    fast_cmov
1040
    fast_unaligned
1041
    fork
1042
    getaddrinfo
1043
    gethrtime
1044
    GetProcessMemoryInfo
1045
    GetProcessTimes
1046
    getrusage
1047
    struct_rusage_ru_maxrss
1048
    inet_aton
1049
    inline_asm
1050
    isatty
1051
    ldbrx
1052
    libdc1394_1
1053
    libdc1394_2
1054
    llrint
1055
    llrintf
1056
    local_aligned_16
1057
    local_aligned_8
1058
    log2
1059
    log2f
1060
    loongson
1061
    lrint
1062
    lrintf
1063
    lzo1x_999_compress
1064
    machine_ioctl_bt848_h
1065
    machine_ioctl_meteor_h
1066
    malloc_h
1067
    memalign
1068
    mkstemp
1069
    pld
1070
    posix_memalign
1071
    round
1072
    roundf
1073
    sdl
1074
    sdl_video_size
1075
    setmode
1076
    socklen_t
1077
    soundcard_h
1078
    poll_h
1079
    setrlimit
1080
    strerror_r
1081
    struct_addrinfo
1082
    struct_ipv6_mreq
1083
    struct_sockaddr_in6
1084
    struct_sockaddr_sa_len
1085
    struct_sockaddr_storage
1086
    symver
1087
    symver_gnu_asm
1088
    symver_asm_label
1089
    sys_mman_h
1090
    sys_resource_h
1091
    sys_select_h
1092
    sys_soundcard_h
1093
    sys_videoio_h
1094
    ten_operands
1095
    termios_h
1096
    threads
1097
    truncf
1098
    vfp_args
1099
    VirtualAlloc
1100
    winsock2_h
1101
    xform_asm
1102
    yasm
1103
"
1104

    
1105
# options emitted with CONFIG_ prefix but not available on command line
1106
CONFIG_EXTRA="
1107
    avutil
1108
    gplv3
1109
    lgplv3
1110
"
1111

    
1112
CMDLINE_SELECT="
1113
    $ARCH_EXT_LIST
1114
    $CONFIG_LIST
1115
    $THREADS_LIST
1116
    asm
1117
    cross_compile
1118
    debug
1119
    extra_warnings
1120
    logging
1121
    optimizations
1122
    stripping
1123
    yasm
1124
"
1125

    
1126
PATHS_LIST='
1127
    bindir
1128
    datadir
1129
    incdir
1130
    libdir
1131
    mandir
1132
    prefix
1133
    shlibdir
1134
'
1135

    
1136
CMDLINE_SET="
1137
    $PATHS_LIST
1138
    ar
1139
    arch
1140
    as
1141
    build_suffix
1142
    cc
1143
    cpu
1144
    cross_prefix
1145
    dep_cc
1146
    extra_version
1147
    host_cc
1148
    host_cflags
1149
    host_ldflags
1150
    host_libs
1151
    host_os
1152
    ld
1153
    logfile
1154
    malloc_prefix
1155
    nm
1156
    samples
1157
    source_path
1158
    strip
1159
    sysinclude
1160
    sysroot
1161
    target_exec
1162
    target_os
1163
    target_path
1164
"
1165

    
1166
CMDLINE_APPEND="
1167
    extra_cflags
1168
"
1169

    
1170
# code dependency declarations
1171

    
1172
# architecture extensions
1173

    
1174
armv5te_deps="arm"
1175
armv6_deps="arm"
1176
armv6t2_deps="arm"
1177
armvfp_deps="arm"
1178
iwmmxt_deps="arm"
1179
neon_deps="arm"
1180

    
1181
mmi_deps="mips"
1182

    
1183
altivec_deps="ppc"
1184
ppc4xx_deps="ppc"
1185

    
1186
vis_deps="sparc"
1187

    
1188
x86_64_suggest="cmov fast_cmov"
1189
amd3dnow_deps="mmx"
1190
amd3dnowext_deps="amd3dnow"
1191
mmx_deps="x86"
1192
mmx2_deps="mmx"
1193
sse_deps="mmx"
1194
ssse3_deps="sse"
1195

    
1196
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1197
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1198
fast_unaligned_if_any="armv6 ppc x86"
1199

    
1200
need_memalign="altivec neon sse"
1201
inline_asm_deps="!tms470"
1202

    
1203
symver_if_any="symver_asm_label symver_gnu_asm"
1204

    
1205
# subsystems
1206
mdct_select="fft"
1207
rdft_select="fft"
1208

    
1209
# decoders / encoders / hardware accelerators
1210
aac_decoder_select="mdct rdft aac_parser"
1211
aac_encoder_select="mdct"
1212
ac3_decoder_select="mdct ac3_parser"
1213
alac_encoder_select="lpc"
1214
amrnb_decoder_select="lsp"
1215
atrac1_decoder_select="mdct"
1216
atrac3_decoder_select="mdct"
1217
binkaudio_dct_decoder_select="mdct rdft dct"
1218
binkaudio_rdft_decoder_select="mdct rdft"
1219
cavs_decoder_select="golomb"
1220
cook_decoder_select="mdct"
1221
cscd_decoder_suggest="zlib"
1222
dca_decoder_select="mdct"
1223
dnxhd_encoder_select="aandct"
1224
dxa_decoder_select="zlib"
1225
eac3_decoder_select="ac3_decoder"
1226
eamad_decoder_select="aandct"
1227
eatgq_decoder_select="aandct"
1228
eatqi_decoder_select="aandct"
1229
ffv1_decoder_select="golomb"
1230
flac_decoder_select="golomb"
1231
flac_encoder_select="golomb lpc"
1232
flashsv_decoder_select="zlib"
1233
flashsv_encoder_select="zlib"
1234
flv_decoder_select="h263_decoder"
1235
flv_encoder_select="h263_encoder"
1236
h261_encoder_select="aandct"
1237
h263_decoder_select="h263_parser"
1238
h263_encoder_select="aandct"
1239
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1240
h263i_decoder_select="h263_decoder"
1241
h263p_encoder_select="h263_encoder"
1242
h264_decoder_select="golomb h264dsp"
1243
h264_dxva2_hwaccel_deps="dxva2api_h"
1244
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1245
h264_vaapi_hwaccel_select="vaapi"
1246
h264_vdpau_decoder_select="vdpau h264_decoder"
1247
imc_decoder_select="fft mdct"
1248
jpegls_decoder_select="golomb"
1249
jpegls_encoder_select="golomb"
1250
ljpeg_encoder_select="aandct"
1251
loco_decoder_select="golomb"
1252
mjpeg_encoder_select="aandct"
1253
mlp_decoder_select="mlp_parser"
1254
mpeg1video_encoder_select="aandct"
1255
mpeg2video_encoder_select="aandct"
1256
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1257
mpeg4_encoder_select="h263_encoder"
1258
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1259
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1260
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1261
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1262
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1263
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1264
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1265
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1266
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1267
msmpeg4v1_decoder_select="h263_decoder"
1268
msmpeg4v1_encoder_select="h263_encoder"
1269
msmpeg4v2_decoder_select="h263_decoder"
1270
msmpeg4v2_encoder_select="h263_encoder"
1271
msmpeg4v3_decoder_select="h263_decoder"
1272
msmpeg4v3_encoder_select="h263_encoder"
1273
nellymoser_decoder_select="mdct"
1274
nellymoser_encoder_select="mdct"
1275
png_decoder_select="zlib"
1276
png_encoder_select="zlib"
1277
qcelp_decoder_select="lsp"
1278
qdm2_decoder_select="mdct rdft"
1279
ra_144_encoder_select="lpc"
1280
rv10_decoder_select="h263_decoder"
1281
rv10_encoder_select="h263_encoder"
1282
rv20_decoder_select="h263_decoder"
1283
rv20_encoder_select="h263_encoder"
1284
rv30_decoder_select="golomb h264dsp"
1285
rv40_decoder_select="golomb h264dsp"
1286
shorten_decoder_select="golomb"
1287
sipr_decoder_select="lsp"
1288
snow_decoder_select="dwt"
1289
snow_encoder_select="aandct dwt"
1290
sonic_decoder_select="golomb"
1291
sonic_encoder_select="golomb"
1292
sonic_ls_encoder_select="golomb"
1293
svq1_encoder_select="aandct"
1294
svq3_decoder_select="golomb h264dsp"
1295
svq3_decoder_suggest="zlib"
1296
theora_decoder_select="vp3_decoder"
1297
tiff_decoder_suggest="zlib"
1298
tiff_encoder_suggest="zlib"
1299
truehd_decoder_select="mlp_decoder"
1300
tscc_decoder_select="zlib"
1301
twinvq_decoder_select="mdct lsp"
1302
vc1_decoder_select="h263_decoder"
1303
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1304
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1305
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1306
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1307
vorbis_decoder_select="mdct"
1308
vorbis_encoder_select="mdct"
1309
vp6a_decoder_select="vp6_decoder"
1310
vp6f_decoder_select="vp6_decoder"
1311
wmapro_decoder_select="mdct"
1312
wmav1_decoder_select="mdct"
1313
wmav1_encoder_select="mdct"
1314
wmav2_decoder_select="mdct"
1315
wmav2_encoder_select="mdct"
1316
wmavoice_decoder_select="lsp rdft dct"
1317
wmv1_decoder_select="h263_decoder"
1318
wmv1_encoder_select="h263_encoder"
1319
wmv2_decoder_select="h263_decoder"
1320
wmv2_encoder_select="h263_encoder"
1321
wmv3_decoder_select="vc1_decoder"
1322
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1323
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1324
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1325
zlib_decoder_select="zlib"
1326
zlib_encoder_select="zlib"
1327
zmbv_decoder_select="zlib"
1328
zmbv_encoder_select="zlib"
1329

    
1330
vaapi_deps="va_va_h"
1331
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1332

    
1333
# parsers
1334
h264_parser_select="golomb h264dsp"
1335

    
1336
# bitstream_filters
1337
aac_adtstoasc_bsf_select="aac_parser"
1338

    
1339
# external libraries
1340
libdirac_decoder_deps="libdirac !libschroedinger"
1341
libdirac_encoder_deps="libdirac"
1342
libfaac_encoder_deps="libfaac"
1343
libgsm_decoder_deps="libgsm"
1344
libgsm_encoder_deps="libgsm"
1345
libgsm_ms_decoder_deps="libgsm"
1346
libgsm_ms_encoder_deps="libgsm"
1347
libmp3lame_encoder_deps="libmp3lame"
1348
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1349
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1350
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1351
libopenjpeg_decoder_deps="libopenjpeg"
1352
libschroedinger_decoder_deps="libschroedinger"
1353
libschroedinger_encoder_deps="libschroedinger"
1354
libspeex_decoder_deps="libspeex"
1355
libtheora_encoder_deps="libtheora"
1356
libvorbis_encoder_deps="libvorbis"
1357
libvpx_decoder_deps="libvpx"
1358
libvpx_encoder_deps="libvpx"
1359
libx264_encoder_deps="libx264"
1360
libxvid_encoder_deps="libxvid"
1361

    
1362
# demuxers / muxers
1363
ac3_demuxer_deps="ac3_parser"
1364
asf_stream_muxer_select="asf_muxer"
1365
avisynth_demuxer_deps="avisynth"
1366
dirac_demuxer_deps="dirac_parser"
1367
eac3_demuxer_select="ac3_parser"
1368
ipod_muxer_select="mov_muxer"
1369
libnut_demuxer_deps="libnut"
1370
libnut_muxer_deps="libnut"
1371
matroska_audio_muxer_select="matroska_muxer"
1372
matroska_demuxer_suggest="zlib bzlib"
1373
mov_demuxer_suggest="zlib"
1374
mp3_demuxer_deps="mpegaudio_parser"
1375
mp4_muxer_select="mov_muxer"
1376
mpegtsraw_demuxer_select="mpegts_demuxer"
1377
mxf_d10_muxer_select="mxf_muxer"
1378
ogg_demuxer_select="golomb"
1379
psp_muxer_select="mov_muxer"
1380
rtsp_demuxer_deps="sdp_demuxer"
1381
rtsp_muxer_deps="sdp_demuxer"
1382
rtsp_muxer_select="rtp_muxer"
1383
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1384
sdp_demuxer_select="asf_demuxer rm_demuxer"
1385
spdif_muxer_select="aac_parser"
1386
tg2_muxer_select="mov_muxer"
1387
tgp_muxer_select="mov_muxer"
1388
w64_demuxer_deps="wav_demuxer"
1389

    
1390
# indevs / outdevs
1391
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1392
alsa_indev_extralibs="-lasound"
1393
alsa_outdev_deps="alsa_asoundlib_h"
1394
alsa_outdev_extralibs="-lasound"
1395
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1396
dv1394_indev_deps="dv1394 dv_demuxer"
1397
jack_indev_deps="jack_jack_h"
1398
jack_indev_extralibs="-ljack"
1399
libdc1394_indev_deps="libdc1394"
1400
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1401
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1402
v4l_indev_deps="linux_videodev_h"
1403
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1404
vfwcap_indev_deps="capCreateCaptureWindow"
1405
vfwcap_indev_extralibs="-lavicap32"
1406
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1407
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1408

    
1409
# protocols
1410
gopher_protocol_deps="network"
1411
http_protocol_deps="network"
1412
http_protocol_select="tcp_protocol"
1413
mmst_protocol_deps="network"
1414
rtmp_protocol_select="tcp_protocol"
1415
rtp_protocol_select="udp_protocol"
1416
tcp_protocol_deps="network"
1417
udp_protocol_deps="network"
1418

    
1419
# filters
1420
movie_filter_deps="avfilter_lavf"
1421
avfilter_lavf_deps="avformat"
1422

    
1423
# libraries
1424
avdevice_deps="avcodec avformat"
1425
avformat_deps="avcodec"
1426

    
1427
# programs
1428
ffmpeg_deps="avcodec avformat swscale"
1429
ffmpeg_select="buffer_filter"
1430
ffplay_deps="avcodec avformat swscale sdl"
1431
ffplay_select="rdft"
1432
ffprobe_deps="avcodec avformat"
1433
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1434
ffserver_extralibs='$ldl'
1435

    
1436
doc_deps="texi2html"
1437

    
1438
# default parameters
1439

    
1440
logfile="config.log"
1441

    
1442
# installation paths
1443
prefix_default="/usr/local"
1444
bindir_default='${prefix}/bin'
1445
datadir_default='${prefix}/share/ffmpeg'
1446
incdir_default='${prefix}/include'
1447
libdir_default='${prefix}/lib'
1448
mandir_default='${prefix}/share/man'
1449
shlibdir_default="$libdir_default"
1450

    
1451
# toolchain
1452
ar_default="ar"
1453
cc_default="gcc"
1454
cc_version=\"unknown\"
1455
host_cc_default="gcc"
1456
ln_s="ln -sf"
1457
nm_default="nm"
1458
objformat="elf"
1459
ranlib="ranlib"
1460
strip_default="strip"
1461
yasmexe="yasm"
1462

    
1463
nm_opts='-g'
1464

    
1465
# machine
1466
arch_default=$(uname -m)
1467
cpu="generic"
1468

    
1469
# OS
1470
target_os_default=$(tolower $(uname -s))
1471
host_os=$target_os_default
1472

    
1473
# configurable options
1474
enable avcodec
1475
enable avdevice
1476
enable avfilter
1477
enable avformat
1478
enable avutil
1479
enable asm
1480
enable debug
1481
enable doc
1482
enable fastdiv
1483
enable ffmpeg
1484
enable ffplay
1485
enable ffprobe
1486
enable ffserver
1487
enable mpegaudio_hp
1488
enable network
1489
enable optimizations
1490
enable protocols
1491
enable static
1492
enable stripping
1493
enable swscale
1494
enable swscale_alpha
1495

    
1496
# build settings
1497
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1498
FFSERVERLDFLAGS=-Wl,-E
1499
LIBPREF="lib"
1500
LIBSUF=".a"
1501
FULLNAME='$(NAME)$(BUILDSUF)'
1502
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1503
SLIBPREF="lib"
1504
SLIBSUF=".so"
1505
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1506
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1507
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1508
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1509

    
1510
CC_O='-o $@'
1511

    
1512
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1513
host_libs='-lm'
1514

    
1515
target_path='$(CURDIR)'
1516

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

    
1522
# find source path
1523
source_path="$(dirname "$0")"
1524
enable source_path_used
1525
if test -f configure; then
1526
    source_path="$(pwd)"
1527
    disable source_path_used
1528
else
1529
    source_path="$(cd "$source_path"; pwd)"
1530
    echo "$source_path" | grep -q '[[:blank:]]' &&
1531
        die "Out of tree builds are impossible with whitespace in source path."
1532
    test -e "$source_path/config.h" &&
1533
        die "Out of tree builds are impossible with config.h in source dir."
1534
fi
1535

    
1536
for v in "$@"; do
1537
    r=${v#*=}
1538
    l=${v%"$r"}
1539
    r=$(sh_quote "$r")
1540
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1541
done
1542

    
1543
find_things(){
1544
    thing=$1
1545
    pattern=$2
1546
    file=$source_path/$3
1547
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1548
}
1549

    
1550
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1551
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1552
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1553
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1554
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1555
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1556
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1557
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1558
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1559
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1560
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1561

    
1562
for n in $COMPONENT_LIST; do
1563
    v=$(toupper ${n%s})_LIST
1564
    eval enable \$$v
1565
    eval ${n}_if_any="\$$v"
1566
done
1567

    
1568
enable $ARCH_EXT_LIST
1569

    
1570
die_unknown(){
1571
    echo "Unknown option \"$1\"."
1572
    echo "See $0 --help for available options."
1573
    exit 1
1574
}
1575

    
1576
show_list() {
1577
    suffix=_$1
1578
    shift
1579
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1580
    exit 0
1581
}
1582

    
1583
for opt do
1584
    optval="${opt#*=}"
1585
    case "$opt" in
1586
    --extra-ldflags=*) add_ldflags $optval
1587
    ;;
1588
    --extra-libs=*) add_extralibs $optval
1589
    ;;
1590
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1591
    ;;
1592
    --enable-debug=*) debuglevel="$optval"
1593
    ;;
1594
    --disable-everything)
1595
    map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1596
    ;;
1597
    --enable-*=*|--disable-*=*)
1598
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1599
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1600
    eval list=\$$(toupper $thing)_LIST
1601
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1602
    $action $(filter "$name" $list)
1603
    ;;
1604
    --enable-?*|--disable-?*)
1605
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1606
    if is_in $option $COMPONENT_LIST; then
1607
        test $action = disable && action=unset
1608
        eval $action \$$(toupper ${option%s})_LIST
1609
    elif is_in $option $CMDLINE_SELECT; then
1610
        $action $option
1611
    else
1612
        die_unknown $opt
1613
    fi
1614
    ;;
1615
    --list-*)
1616
        NAME="${opt#--list-}"
1617
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1618
        NAME=${NAME%s}
1619
        eval show_list $NAME \$$(toupper $NAME)_LIST
1620
    ;;
1621
    --help|-h) show_help
1622
    ;;
1623
    *)
1624
    optname="${opt%%=*}"
1625
    optname="${optname#--}"
1626
    optname=$(echo "$optname" | sed 's/-/_/g')
1627
    if is_in $optname $CMDLINE_SET; then
1628
        eval $optname='$optval'
1629
    elif is_in $optname $CMDLINE_APPEND; then
1630
        append $optname "$optval"
1631
    else
1632
         die_unknown $opt
1633
    fi
1634
    ;;
1635
    esac
1636
done
1637

    
1638
disabled logging && logfile=/dev/null
1639

    
1640
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1641
set >> $logfile
1642

    
1643
test -n "$cross_prefix" && enable cross_compile
1644

    
1645
if enabled cross_compile; then
1646
    test -n "$arch" && test -n "$target_os" ||
1647
        die "Must specify target arch and OS when cross-compiling"
1648
fi
1649

    
1650
set_default arch target_os
1651

    
1652
ar_default="${cross_prefix}${ar_default}"
1653
cc_default="${cross_prefix}${cc_default}"
1654
nm_default="${cross_prefix}${nm_default}"
1655
ranlib="${cross_prefix}${ranlib}"
1656
strip_default="${cross_prefix}${strip_default}"
1657

    
1658
sysinclude_default="${sysroot}/usr/include"
1659

    
1660
set_default cc nm strip sysinclude
1661
enabled cross_compile || host_cc_default=$cc
1662
set_default host_cc
1663

    
1664
exesuf() {
1665
    case $1 in
1666
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1667
    esac
1668
}
1669

    
1670
EXESUF=$(exesuf $target_os)
1671
HOSTEXESUF=$(exesuf $host_os)
1672

    
1673
# set temporary file name
1674
: ${TMPDIR:=$TEMPDIR}
1675
: ${TMPDIR:=$TMP}
1676
: ${TMPDIR:=/tmp}
1677

    
1678
if ! check_cmd type mktemp; then
1679
    # simple replacement for missing mktemp
1680
    # NOT SAFE FOR GENERAL USE
1681
    mktemp(){
1682
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1683
    }
1684
fi
1685

    
1686
tmpfile(){
1687
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1688
        (set -C; exec > $tmp) 2>/dev/null ||
1689
        die "Unable to create temporary file in $TMPDIR."
1690
    append TMPFILES $tmp
1691
    eval $1=$tmp
1692
}
1693

    
1694
trap 'rm -f -- $TMPFILES' EXIT
1695
trap exit HUP INT TERM
1696

    
1697
tmpfile TMPC  .c
1698
tmpfile TMPE  $EXESUF
1699
tmpfile TMPH  .h
1700
tmpfile TMPO  .o
1701
tmpfile TMPS  .S
1702
tmpfile TMPV  .ver
1703
tmpfile TMPSH .sh
1704

    
1705
unset -f mktemp
1706

    
1707
# make sure we can execute files in $TMPDIR
1708
cat > $TMPSH 2>> $logfile <<EOF
1709
#! /bin/sh
1710
EOF
1711
chmod +x $TMPSH >> $logfile 2>&1
1712
if ! $TMPSH >> $logfile 2>&1; then
1713
    cat <<EOF
1714
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1715
variable to another directory and make sure that it is not mounted noexec.
1716
EOF
1717
    die "Sanity test failed."
1718
fi
1719

    
1720
filter_cflags=echo
1721
filter_cppflags=echo
1722
filter_asflags=echo
1723

    
1724
if   $cc -v 2>&1 | grep -qi ^gcc; then
1725
    cc_type=gcc
1726
    cc_version=__VERSION__
1727
    if ! $cc -dumpversion | grep -q '^2\.'; then
1728
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1729
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1730
    fi
1731
    speed_cflags='-O3'
1732
    size_cflags='-Os'
1733
elif $cc --version 2>/dev/null | grep -q Intel; then
1734
    cc_type=icc
1735
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1736
    CC_DEPFLAGS='-MMD'
1737
    AS_DEPFLAGS='-MMD'
1738
    speed_cflags='-O3'
1739
    size_cflags='-Os'
1740
    noopt_cflags='-O1'
1741
elif $cc -v 2>&1 | grep -q xlc; then
1742
    cc_type=xlc
1743
    cc_version="AV_STRINGIFY(__IBMC__)"
1744
    speed_cflags='-O5'
1745
    size_cflags='-O5 -qcompact'
1746
elif $cc -V 2>/dev/null | grep -q Compaq; then
1747
    cc_type=ccc
1748
    cc_version="AV_STRINGIFY(__DECC_VER)"
1749
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1750
    debuglevel=3
1751
    add_ldflags -Wl,-z,now # calls to libots crash without this
1752
    speed_cflags='-fast'
1753
    size_cflags='-O1'
1754
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1755
    test -d "$sysroot" || die "No valid sysroot specified."
1756
    cc_type=armcc
1757
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1758
    armcc_conf="$PWD/armcc.conf"
1759
    $cc --arm_linux_configure                 \
1760
        --arm_linux_config_file="$armcc_conf" \
1761
        --configure_sysroot="$sysroot"        \
1762
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1763
        die "Error creating armcc configuration file."
1764
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1765
    as_default="${cross_prefix}gcc"
1766
    CC_DEPFLAGS='-MMD'
1767
    AS_DEPFLAGS='-MMD'
1768
    speed_cflags='-O3'
1769
    size_cflags='-Os'
1770
elif $cc -version 2>/dev/null | grep -q TMS470; then
1771
    cc_type=tms470
1772
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1773
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1774
    CC_O='-fr=$(@D)'
1775
    as_default="${cross_prefix}gcc"
1776
    ld_default="${cross_prefix}gcc"
1777
    TMPO=$(basename $TMPC .c).o
1778
    append TMPFILES $TMPO
1779
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1780
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1781
    AS_DEPFLAGS='-MMD'
1782
    speed_cflags='-O3 -mf=5'
1783
    size_cflags='-O3 -mf=2'
1784
    filter_cflags=tms470_flags
1785
    tms470_flags(){
1786
        for flag; do
1787
            case $flag in
1788
                -march=*|-mcpu=*)
1789
                    case "${flag#*=}" in
1790
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1791
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1792
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1793
                        armv6*|arm11*)          echo -mv=6   ;;
1794
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1795
                                                echo -mv=5e  ;;
1796
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1797
                    esac
1798
                    ;;
1799
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1800
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1801
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1802
                -msoft-float)   echo --float_support=vfplib       ;;
1803
                -O[0-3]|-mf=*)  echo $flag                        ;;
1804
                -g)             echo -g -mn                       ;;
1805
                -pds=*)         echo $flag                        ;;
1806
            esac
1807
        done
1808
    }
1809
elif $cc -v 2>&1 | grep -q clang; then
1810
    cc_type=clang
1811
    cc_version=__VERSION__
1812
    CC_DEPFLAGS='-MMD'
1813
    AS_DEPFLAGS='-MMD'
1814
    speed_cflags='-O3'
1815
    size_cflags='-Os'
1816
elif $cc -V 2>&1 | grep -q Sun; then
1817
    cc_type=suncc
1818
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1819
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1820
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1821
    speed_cflags='-O5'
1822
    size_cflags='-O5 -xspace'
1823
    filter_cflags=suncc_flags
1824
    suncc_flags(){
1825
        for flag; do
1826
            case $flag in
1827
                -march=*|-mcpu=*)
1828
                    case "${flag#*=}" in
1829
                        native)                   echo -xtarget=native       ;;
1830
                        v9|niagara)               echo -xarch=sparc          ;;
1831
                        ultrasparc)               echo -xarch=sparcvis       ;;
1832
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1833
                        i586|pentium)             echo -xchip=pentium        ;;
1834
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1835
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1836
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1837
                        pentium4*)          echo -xtarget=pentium4           ;;
1838
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1839
                        *-sse3)             echo -xarch=sse3                 ;;
1840
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1841
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1842
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1843
                        k8|opteron|athlon64|athlon-fx)
1844
                                                  echo -xarch=sse2a          ;;
1845
                        athlon*)                  echo -xarch=pentium_proa   ;;
1846
                    esac
1847
                    ;;
1848
                -std=c99)             echo -xc99              ;;
1849
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1850
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1851
                -W*,*)                echo $flag              ;;
1852
                -f*-*|-W*)                                    ;;
1853
                *)                    echo $flag              ;;
1854
            esac
1855
        done
1856
    }
1857
fi
1858

    
1859
test -n "$cc_type" && enable $cc_type ||
1860
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1861

    
1862
: ${as_default:=$cc}
1863
: ${dep_cc_default:=$cc}
1864
: ${ld_default:=$cc}
1865
set_default ar as dep_cc ld
1866

    
1867
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1868
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1869

    
1870
add_cflags $extra_cflags
1871
add_asflags $extra_cflags
1872

    
1873
if test -n "$sysroot"; then
1874
    case "$cc_type" in
1875
        gcc)
1876
            add_cppflags --sysroot="$sysroot"
1877
            add_ldflags --sysroot="$sysroot"
1878
        ;;
1879
        tms470)
1880
            add_cppflags -I"$sysinclude"
1881
            add_ldflags  --sysroot="$sysroot"
1882
        ;;
1883
        clang)
1884
            add_cppflags -isysroot "$sysroot"
1885
            add_ldflags -isysroot "$sysroot"
1886
        ;;
1887
    esac
1888
fi
1889

    
1890
if test "$cpu" = host; then
1891
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1892

    
1893
    case "$cc_type" in
1894
        gcc)
1895
            check_native(){
1896
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1897
                sed -n "/$1=/{
1898
                            s/.*$1=\\([^ ]*\\).*/\\1/
1899
                            p
1900
                            q
1901
                        }" $TMPE
1902
            }
1903
            cpu=$(check_native -march || check_native -mcpu)
1904
        ;;
1905
    esac
1906

    
1907
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1908
fi
1909

    
1910
# Deal with common $arch aliases
1911
case "$arch" in
1912
    arm*)
1913
        arch="arm"
1914
    ;;
1915
    mips|mipsel|IP*)
1916
        arch="mips"
1917
    ;;
1918
    mips64*)
1919
        arch="mips"
1920
        subarch="mips64"
1921
    ;;
1922
    parisc|hppa)
1923
        arch="parisc"
1924
    ;;
1925
    parisc64|hppa64)
1926
        arch="parisc"
1927
        subarch="parisc64"
1928
    ;;
1929
    "Power Macintosh"|ppc|powerpc)
1930
        arch="ppc"
1931
    ;;
1932
    ppc64|powerpc64)
1933
        arch="ppc"
1934
        subarch="ppc64"
1935
    ;;
1936
    s390|s390x)
1937
        arch="s390"
1938
    ;;
1939
    sh4|sh)
1940
        arch="sh4"
1941
    ;;
1942
    sun4u|sparc64)
1943
        arch="sparc"
1944
        subarch="sparc64"
1945
    ;;
1946
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1947
        arch="x86"
1948
    ;;
1949
esac
1950

    
1951
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1952
enable $arch
1953

    
1954
# Add processor-specific flags
1955
if test "$cpu" = generic; then
1956
    : do nothing
1957
elif enabled ppc; then
1958

    
1959
    case $(tolower $cpu) in
1960
        601|ppc601|powerpc601)
1961
            cpuflags="-mcpu=601"
1962
            disable altivec
1963
        ;;
1964
        603*|ppc603*|powerpc603*)
1965
            cpuflags="-mcpu=603"
1966
            disable altivec
1967
        ;;
1968
        604*|ppc604*|powerpc604*)
1969
            cpuflags="-mcpu=604"
1970
            disable altivec
1971
        ;;
1972
        g3|75*|ppc75*|powerpc75*)
1973
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1974
            disable altivec
1975
        ;;
1976
        g4|745*|ppc745*|powerpc745*)
1977
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1978
        ;;
1979
        74*|ppc74*|powerpc74*)
1980
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1981
        ;;
1982
        g5|970|ppc970|powerpc970|power4*)
1983
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1984
        ;;
1985
        cell)
1986
            cpuflags="-mcpu=cell"
1987
            enable ldbrx
1988
        ;;
1989
        e500v2)
1990
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1991
            disable altivec
1992
        ;;
1993
        e500)
1994
            cpuflags="-mcpu=8540 -mhard-float"
1995
            disable altivec
1996
        ;;
1997
    esac
1998

    
1999
elif enabled x86; then
2000

    
2001
    case $cpu in
2002
        i[345]86|pentium)
2003
            cpuflags="-march=$cpu"
2004
            disable mmx
2005
        ;;
2006
        # targets that do NOT support conditional mov (cmov)
2007
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2008
            cpuflags="-march=$cpu"
2009
            disable cmov
2010
        ;;
2011
        # targets that do support conditional mov (cmov)
2012
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
2013
            cpuflags="-march=$cpu"
2014
            enable cmov
2015
            enable fast_cmov
2016
        ;;
2017
        # targets that do support conditional mov but on which it's slow
2018
        pentium4|pentium4m|prescott|nocona)
2019
            cpuflags="-march=$cpu"
2020
            enable cmov
2021
            disable fast_cmov
2022
        ;;
2023
    esac
2024

    
2025
elif enabled sparc; then
2026

    
2027
    case $cpu in
2028
        niagara)
2029
            cpuflags="-mcpu=$cpu"
2030
            disable vis
2031
        ;;
2032
        sparc64)
2033
            cpuflags="-mcpu=v9"
2034
        ;;
2035
    esac
2036

    
2037
elif enabled arm; then
2038

    
2039
    case $cpu in
2040
        armv*)
2041
            cpuflags="-march=$cpu"
2042
        ;;
2043
        *)
2044
            cpuflags="-mcpu=$cpu"
2045
        ;;
2046
    esac
2047

    
2048
elif enabled alpha; then
2049

    
2050
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2051

    
2052
elif enabled bfin; then
2053

    
2054
    cpuflags="-mcpu=$cpu"
2055

    
2056
elif enabled mips; then
2057

    
2058
    cpuflags="-march=$cpu"
2059

    
2060
elif enabled avr32; then
2061

    
2062
    case $cpu in
2063
        ap7[02]0[0-2])
2064
            subarch="avr32_ap"
2065
            cpuflags="-mpart=$cpu"
2066
        ;;
2067
        ap)
2068
            subarch="avr32_ap"
2069
            cpuflags="-march=$cpu"
2070
        ;;
2071
        uc3[ab]*)
2072
            subarch="avr32_uc"
2073
            cpuflags="-mcpu=$cpu"
2074
        ;;
2075
        uc)
2076
            subarch="avr32_uc"
2077
            cpuflags="-march=$cpu"
2078
        ;;
2079
    esac
2080

    
2081
fi
2082

    
2083
add_cflags $cpuflags
2084
add_asflags $cpuflags
2085

    
2086
# compiler sanity check
2087
check_exec <<EOF
2088
int main(void){ return 0; }
2089
EOF
2090
if test "$?" != 0; then
2091
    echo "$cc is unable to create an executable file."
2092
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2093
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2094
        echo "Only do this if you know what cross compiling means."
2095
    fi
2096
    die "C compiler test failed."
2097
fi
2098

    
2099
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2100
check_cflags -std=c99
2101
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2102
#include <stdlib.h>
2103
EOF
2104
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2105
#include <stdlib.h>
2106
EOF
2107

    
2108
check_host_cflags -std=c99
2109

    
2110
case "$arch" in
2111
    alpha|ia64|mips|parisc|sparc)
2112
        spic=$shared
2113
    ;;
2114
    x86)
2115
        subarch="x86_32"
2116
        check_cc <<EOF && subarch="x86_64"
2117
        int test[(int)sizeof(char*) - 7];
2118
EOF
2119
        if test "$subarch" = "x86_64"; then
2120
            spic=$shared
2121
        fi
2122
    ;;
2123
esac
2124

    
2125
enable $subarch
2126
enabled spic && enable pic
2127

    
2128
# OS specific
2129
case $target_os in
2130
    haiku)
2131
        prefix_default="/boot/common"
2132
        network_extralibs="-lnetwork"
2133
        ;;
2134
    sunos)
2135
        FFSERVERLDFLAGS=""
2136
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2137
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2138
        network_extralibs="-lsocket -lnsl"
2139
        add_cppflags -D__EXTENSIONS__
2140
        nm_opts='-P -g'
2141
        ;;
2142
    netbsd)
2143
        oss_indev_extralibs="-lossaudio"
2144
        oss_outdev_extralibs="-lossaudio"
2145
        add_cppflags -D_XOPEN_SOURCE=600
2146
        ;;
2147
    openbsd)
2148
        enable malloc_aligned
2149
        # On OpenBSD 4.5. the compiler does not use PIC unless
2150
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2151
        # however the generated executable will not do anything
2152
        # (simply quits with exit-code 1, no crash, no output).
2153
        # Thus explicitly enable PIC here.
2154
        enable pic
2155
        SHFLAGS='-shared'
2156
        oss_indev_extralibs="-lossaudio"
2157
        oss_outdev_extralibs="-lossaudio"
2158
        ;;
2159
    freebsd|dragonfly)
2160
        enable malloc_aligned
2161
        ;;
2162
    bsd/os)
2163
        osextralibs="-lpoll -lgnugetopt"
2164
        strip="strip -d"
2165
        ;;
2166
    darwin)
2167
        enable malloc_aligned
2168
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2169
        strip="${strip} -x"
2170
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2171
        SLIBSUF=".dylib"
2172
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2173
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2174
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2175
        objformat="macho"
2176
        enabled x86_64 && objformat="macho64"
2177
        enabled_any pic shared ||
2178
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2179
        ;;
2180
    mingw32*)
2181
        if test $target_os = "mingw32ce"; then
2182
            disable network
2183
        else
2184
            target_os=mingw32
2185
        fi
2186
        LIBTARGET=i386
2187
        if enabled x86_64; then
2188
            enable malloc_aligned
2189
            LIBTARGET=x64
2190
        elif enabled arm; then
2191
            LIBTARGET=arm
2192
        fi
2193
        shlibdir_default="$bindir_default"
2194
        disable ffserver
2195
        SLIBPREF=""
2196
        SLIBSUF=".dll"
2197
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2198
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2199
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2200
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2201
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2202
            install -d "$(LIBDIR)"; \
2203
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2204
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2205
        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'
2206
        objformat="win32"
2207
        enable dos_paths
2208
        check_cflags -fno-common
2209
        if ! enabled x86_64; then
2210
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2211
                die "ERROR: MinGW runtime version must be >= 3.15."
2212
            enabled_any avisynth vfwcap_indev &&
2213
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2214
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2215
        fi
2216
        ;;
2217
    cygwin*)
2218
        target_os=cygwin
2219
        shlibdir_default="$bindir_default"
2220
        SLIBPREF="cyg"
2221
        SLIBSUF=".dll"
2222
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2223
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2224
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2225
        objformat="win32"
2226
        enable dos_paths
2227
        check_cflags -fno-common
2228
        ;;
2229
    *-dos|freedos|opendos)
2230
        disable ffplay ffserver
2231
        disable $INDEV_LIST $OUTDEV_LIST
2232
        network_extralibs="-lsocket"
2233
        objformat="coff"
2234
        enable dos_paths
2235
        ;;
2236
    linux)
2237
        enable dv1394
2238
        ;;
2239
    irix*)
2240
        target_os=irix
2241
        ranlib="echo ignoring ranlib"
2242
        ;;
2243
    os/2*)
2244
        strip="lxlite"
2245
        ln_s="cp -f"
2246
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2247
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2248
        FFSERVERLDFLAGS=""
2249
        LIBSUF="_s.a"
2250
        SLIBPREF=""
2251
        SLIBSUF=".dll"
2252
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2253
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2254
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2255
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2256
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2257
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2258
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2259
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2260
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2261
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2262
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2263
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2264
        enable dos_paths
2265
        ;;
2266
    gnu/kfreebsd)
2267
        ;;
2268
    gnu)
2269
        ;;
2270
    none)
2271
        ;;
2272
    *)
2273
        die "Unknown OS '$target_os'."
2274
        ;;
2275
esac
2276

    
2277
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2278

    
2279
set_default $PATHS_LIST
2280

    
2281
add_extralibs $osextralibs
2282

    
2283
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2284
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2285

    
2286
# we need to build at least one lib type
2287
if ! enabled_any static shared; then
2288
    cat <<EOF
2289
At least one library type must be built.
2290
Specify --enable-static to build the static libraries or --enable-shared to
2291
build the shared libraries as well. To only build the shared libraries specify
2292
--disable-static in addition to --enable-shared.
2293
EOF
2294
    exit 1;
2295
fi
2296

    
2297
disabled static && LIBNAME=""
2298

    
2299
die_license_disabled() {
2300
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2301
}
2302

    
2303
die_license_disabled gpl libx264
2304
die_license_disabled gpl libxvid
2305
die_license_disabled gpl postproc
2306
die_license_disabled gpl x11grab
2307

    
2308
die_license_disabled nonfree libfaac
2309

    
2310
die_license_disabled version3 libopencore_amrnb
2311
die_license_disabled version3 libopencore_amrwb
2312

    
2313
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2314

    
2315
check_deps $ARCH_EXT_LIST
2316

    
2317
disabled optimizations || check_cflags -fomit-frame-pointer
2318

    
2319
enable_pic() {
2320
    enable pic
2321
    add_cppflags -DPIC
2322
    add_cflags   -fPIC
2323
    add_asflags  -fPIC
2324
}
2325

    
2326
enabled pic && enable_pic
2327

    
2328
check_cc <<EOF || die "Symbol mangling check failed."
2329
int ff_extern;
2330
EOF
2331
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2332
extern_prefix=${sym%%ff_extern*}
2333

    
2334
check_cc <<EOF && enable inline_asm
2335
void foo(void) { __asm__ volatile ("" ::); }
2336
EOF
2337

    
2338
_restrict=
2339
for restrict_keyword in restrict __restrict__ __restrict; do
2340
    check_cc <<EOF && _restrict=$restrict_keyword && break
2341
void foo(char * $restrict_keyword p);
2342
EOF
2343
done
2344

    
2345
check_cc <<EOF && enable attribute_packed
2346
struct { int x; } __attribute__((packed)) x;
2347
EOF
2348

    
2349
check_cc <<EOF && enable attribute_may_alias
2350
union { int x; } __attribute__((may_alias)) x;
2351
EOF
2352

    
2353
check_cc <<EOF || die "endian test failed"
2354
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2355
EOF
2356
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2357

    
2358
if enabled alpha; then
2359

    
2360
    check_cflags -mieee
2361

    
2362
elif enabled arm; then
2363

    
2364
    check_cflags -marm
2365

    
2366
    check_ld <<EOF && enable vfp_args
2367
__asm__ (".eabi_attribute 28, 1");
2368
int main(void) { return 0; }
2369
EOF
2370

    
2371
    # We have to check if pld is a nop and disable it.
2372
    check_asm pld '"pld [r0]"'
2373

    
2374
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2375
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2376
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2377
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2378
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2379
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2380

    
2381
    enabled_all armv6t2 shared !pic && enable_pic
2382

    
2383
elif enabled mips; then
2384

    
2385
    check_asm loongson '"dmult.g $1, $2, $3"'
2386
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2387

    
2388
elif enabled ppc; then
2389

    
2390
    enable local_aligned_8 local_aligned_16
2391

    
2392
    check_asm dcbzl     '"dcbzl 0, 1"'
2393
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2394
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2395

    
2396
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2397
    if enabled altivec; then
2398
        check_cflags -maltivec -mabi=altivec &&
2399
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2400
        check_cflags -faltivec
2401

    
2402
        # check if our compiler supports Motorola AltiVec C API
2403
        check_cc <<EOF || disable altivec
2404
$inc_altivec_h
2405
int main(void) {
2406
    vector signed int v1, v2, v3;
2407
    v1 = vec_add(v2,v3);
2408
    return 0;
2409
}
2410
EOF
2411

    
2412
        # check if our compiler supports braces for vector declarations
2413
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2414
$inc_altivec_h
2415
int main (void) { (vector int) {1}; return 0; }
2416
EOF
2417
    fi
2418

    
2419
elif enabled sparc; then
2420

    
2421
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2422
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2423

    
2424
elif enabled x86; then
2425

    
2426
    enable local_aligned_8 local_aligned_16
2427

    
2428
    # check whether EBP is available on x86
2429
    # As 'i' is stored on the stack, this program will crash
2430
    # if the base pointer is used to access it because the
2431
    # base pointer is cleared in the inline assembly code.
2432
    check_exec_crash <<EOF && enable ebp_available
2433
    volatile int i=0;
2434
    __asm__ volatile (
2435
        "xorl %%ebp, %%ebp"
2436
    ::: "%ebp");
2437
    return i;
2438
EOF
2439

    
2440
    # check whether EBX is available on x86
2441
    check_asm ebx_available '""::"b"(0)' &&
2442
        check_asm ebx_available '"":::"%ebx"'
2443

    
2444
    # check whether more than 10 operands are supported
2445
    check_cc <<EOF && enable ten_operands
2446
int main(void) {
2447
    int x=0;
2448
    __asm__ volatile(
2449
        ""
2450
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2451
    );
2452
    return 0;
2453
}
2454
EOF
2455

    
2456
    # check whether binutils is new enough to compile SSSE3/MMX2
2457
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2458
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2459

    
2460
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2461

    
2462
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2463
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2464
    enabled     pic           && append YASMFLAGS "-DPIC"
2465
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2466
    case "$objformat" in
2467
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2468
    esac
2469
    if ! disabled yasm; then
2470
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2471
            warn "yasm not found, performance will suffer"
2472
    fi
2473

    
2474
    case "$cpu" in
2475
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2476
            disable fast_clz
2477
        ;;
2478
    esac
2479

    
2480
fi
2481

    
2482
if check_func dlopen; then
2483
    ldl=
2484
elif check_func dlopen -ldl; then
2485
    ldl=-ldl
2486
fi
2487

    
2488
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2489
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2490

    
2491
check_func  fork
2492
check_func  getaddrinfo $network_extralibs
2493
check_func  gethrtime
2494
check_func  getrusage
2495
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2496
check_func  inet_aton $network_extralibs
2497
check_func  isatty
2498
check_func  ${malloc_prefix}memalign            && enable memalign
2499
check_func  mkstemp
2500
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2501
check_func  setrlimit
2502
check_func  strerror_r
2503
check_func_headers io.h setmode
2504
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2505
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2506
check_func_headers windows.h GetProcessTimes
2507
check_func_headers windows.h VirtualAlloc
2508

    
2509
check_header conio.h
2510
check_header dlfcn.h
2511
check_header dxva2api.h
2512
check_header malloc.h
2513
check_header poll.h
2514
check_header sys/mman.h
2515
check_header sys/resource.h
2516
check_header sys/select.h
2517
check_header termios.h
2518
check_header vdpau/vdpau.h
2519
check_header vdpau/vdpau_x11.h
2520
check_header X11/extensions/XvMClib.h
2521

    
2522
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2523

    
2524
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2525
     enabled_any $need_memalign ; then
2526
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2527
fi
2528

    
2529
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2530
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2531

    
2532
# check for some common methods of building with pthread support
2533
# do this before the optional library checks as some of them require pthreads
2534
if ! disabled pthreads && ! enabled w32threads; then
2535
    enable pthreads
2536
    if check_func pthread_create; then
2537
        :
2538
    elif check_func pthread_create -pthread; then
2539
        add_cflags -pthread
2540
        add_extralibs -pthread
2541
    elif check_func pthread_create -pthreads; then
2542
        add_cflags -pthreads
2543
        add_extralibs -pthreads
2544
    elif check_func pthread_create -lpthreadGC2; then
2545
        add_extralibs -lpthreadGC2
2546
    elif ! check_lib pthread.h pthread_create -lpthread; then
2547
        disable pthreads
2548
    fi
2549
fi
2550

    
2551
for thread in $THREADS_LIST; do
2552
    if enabled $thread; then
2553
        test -n "$thread_type" &&
2554
            die "ERROR: Only one thread type must be selected." ||
2555
            thread_type="$thread"
2556
    fi
2557
done
2558

    
2559
check_lib math.h sin -lm
2560
disabled vaapi || check_lib va/va.h vaInitialize -lva
2561

    
2562
check_mathfunc exp2
2563
check_mathfunc exp2f
2564
check_mathfunc llrint
2565
check_mathfunc llrintf
2566
check_mathfunc log2
2567
check_mathfunc log2f
2568
check_mathfunc lrint
2569
check_mathfunc lrintf
2570
check_mathfunc round
2571
check_mathfunc roundf
2572
check_mathfunc truncf
2573

    
2574
# these are off by default, so fail if requested and not available
2575
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2576
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2577
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2578
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2579
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2580
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2581
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2582
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2583
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2584
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2585
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2586
enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
2587
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2588
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2589
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2590
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2591
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2592
enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2593
                      require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2594
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2595
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2596
                        die "ERROR: libx264 version must be >= 0.98."; }
2597
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2598
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2599

    
2600
# libdc1394 check
2601
if enabled libdc1394; then
2602
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2603
        enable libdc1394_2; } ||
2604
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2605
        enable libdc1394_1; } ||
2606
    die "ERROR: No version of libdc1394 found "
2607
fi
2608

    
2609
SDL_CONFIG="${cross_prefix}sdl-config"
2610
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2611
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2612
    sdl_libs=$("${SDL_CONFIG}" --libs)
2613
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2614
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2615
    enable sdl &&
2616
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2617
fi
2618

    
2619
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2620

    
2621
if enabled network; then
2622
    check_type "sys/types.h sys/socket.h" socklen_t
2623
    check_type netdb.h "struct addrinfo"
2624
    check_type netinet/in.h "struct ipv6_mreq"
2625
    check_type netinet/in.h "struct sockaddr_in6"
2626
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2627
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2628
    # Prefer arpa/inet.h over winsock2
2629
    if check_header arpa/inet.h ; then
2630
        check_func closesocket
2631
    elif check_header winsock2.h ; then
2632
        check_func_headers winsock2.h closesocket -lws2 && \
2633
            network_extralibs="-lws2" || \
2634
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2635
            network_extralibs="-lws2_32"; }
2636
        check_type ws2tcpip.h socklen_t
2637
        check_type ws2tcpip.h "struct addrinfo"
2638
        check_type ws2tcpip.h "struct ipv6_mreq"
2639
        check_type ws2tcpip.h "struct sockaddr_in6"
2640
        check_type ws2tcpip.h "struct sockaddr_storage"
2641
        check_struct winsock2.h "struct sockaddr" sa_len
2642
    else
2643
        disable network
2644
    fi
2645
fi
2646

    
2647
check_header linux/videodev.h
2648
check_header linux/videodev2.h
2649
check_header sys/videoio.h
2650

    
2651
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2652

    
2653
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2654
{ check_header dev/bktr/ioctl_meteor.h &&
2655
  check_header dev/bktr/ioctl_bt848.h; } ||
2656
{ check_header machine/ioctl_meteor.h &&
2657
  check_header machine/ioctl_bt848.h; } ||
2658
{ check_header dev/video/meteor/ioctl_meteor.h &&
2659
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2660
check_header dev/ic/bt8xx.h
2661

    
2662
check_header sys/soundcard.h
2663
check_header soundcard.h
2664

    
2665
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2666

    
2667
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2668

    
2669
enabled x11grab                         &&
2670
check_header X11/Xlib.h                 &&
2671
check_header X11/extensions/XShm.h      &&
2672
check_header X11/extensions/Xfixes.h    &&
2673
check_func XOpenDisplay -lX11           &&
2674
check_func XShmCreateImage -lX11 -lXext &&
2675
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2676

    
2677
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2678
check_cpp_condition \
2679
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2680
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2681
      disable vdpau; }
2682
fi
2683

    
2684
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2685

    
2686
# add some useful compiler flags if supported
2687
check_cflags -Wdeclaration-after-statement
2688
check_cflags -Wall
2689
check_cflags -Wno-switch
2690
check_cflags -Wdisabled-optimization
2691
check_cflags -Wpointer-arith
2692
check_cflags -Wredundant-decls
2693
check_cflags -Wno-pointer-sign
2694
check_cflags -Wcast-qual
2695
check_cflags -Wwrite-strings
2696
check_cflags -Wtype-limits
2697
check_cflags -Wundef
2698
check_cflags -Wmissing-prototypes
2699
enabled extra_warnings && check_cflags -Winline
2700

    
2701
# add some linker flags
2702
check_ldflags -Wl,--warn-common
2703
check_ldflags -Wl,--as-needed
2704
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'
2705
check_ldflags -Wl,-Bsymbolic
2706

    
2707
echo "X{};" > $TMPV
2708
if test_ldflags -Wl,--version-script,$TMPV; then
2709
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2710
    check_cc <<EOF && enable symver_asm_label
2711
void ff_foo(void) __asm__ ("av_foo@VERSION");
2712
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2713
EOF
2714
    check_cc <<EOF && enable symver_gnu_asm
2715
__asm__(".symver ff_foo,av_foo@VERSION");
2716
void ff_foo(void) {}
2717
EOF
2718
fi
2719

    
2720
if enabled small; then
2721
    add_cflags $size_cflags
2722
    optimizations="small"
2723
elif enabled optimizations; then
2724
    add_cflags $speed_cflags
2725
else
2726
    add_cflags $noopt_cflags
2727
fi
2728
check_cflags -fno-math-errno
2729
check_cflags -fno-signed-zeros
2730

    
2731
if enabled icc; then
2732
    # Just warnings, no remarks
2733
    check_cflags -w1
2734
    # -wd: Disable following warnings
2735
    # 144, 167, 556: -Wno-pointer-sign
2736
    # 10006: ignoring unknown option -fno-signed-zeros
2737
    # 10156: ignoring option '-W'; no argument required
2738
    check_cflags -wd144,167,556,10006,10156
2739
    # 11030: Warning unknown option --as-needed
2740
    # 10156: ignoring option '-export'; no argument required
2741
    check_ldflags -wd10156,11030
2742
    # Allow to compile with optimizations
2743
    check_ldflags -march=$cpu
2744
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2745
    enable ebp_available
2746
elif enabled ccc; then
2747
    # disable some annoying warnings
2748
    add_cflags -msg_disable cvtu32to64
2749
    add_cflags -msg_disable embedcomment
2750
    add_cflags -msg_disable needconstext
2751
    add_cflags -msg_disable nomainieee
2752
    add_cflags -msg_disable ptrmismatch1
2753
    add_cflags -msg_disable unreachcode
2754
elif enabled gcc; then
2755
    check_cflags -fno-tree-vectorize
2756
    check_cflags -Werror=implicit
2757
    check_cflags -Werror=missing-prototypes
2758
elif enabled clang; then
2759
    check_cflags -Qunused-arguments
2760
elif enabled armcc; then
2761
    # 2523: use of inline assembler is deprecated
2762
    add_cflags -Wrvct,--diag_suppress=2523
2763
    add_cflags -Wrvct,--diag_suppress=1207
2764
elif enabled tms470; then
2765
    add_cflags -pds=824 -pds=837
2766
fi
2767

    
2768
if enabled gprof; then
2769
    add_cflags  -p
2770
    add_ldflags -p
2771
fi
2772

    
2773
enabled_any $THREADS_LIST      && enable threads
2774

    
2775
check_deps $CONFIG_LIST       \
2776
           $CONFIG_EXTRA      \
2777
           $HAVE_LIST         \
2778
           $DECODER_LIST      \
2779
           $ENCODER_LIST      \
2780
           $HWACCEL_LIST      \
2781
           $PARSER_LIST       \
2782
           $BSF_LIST          \
2783
           $DEMUXER_LIST      \
2784
           $MUXER_LIST        \
2785
           $FILTER_LIST       \
2786
           $INDEV_LIST        \
2787
           $OUTDEV_LIST       \
2788
           $PROTOCOL_LIST     \
2789

    
2790
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2791

    
2792
echo "install prefix            $prefix"
2793
echo "source path               $source_path"
2794
echo "C compiler                $cc"
2795
echo "ARCH                      $arch ($cpu)"
2796
if test "$build_suffix" != ""; then
2797
    echo "build suffix              $build_suffix"
2798
fi
2799
if test "$extra_version" != ""; then
2800
    echo "version string suffix     $extra_version"
2801
fi
2802
echo "big-endian                ${bigendian-no}"
2803
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2804
if enabled x86; then
2805
    echo "yasm                      ${yasm-no}"
2806
    echo "MMX enabled               ${mmx-no}"
2807
    echo "MMX2 enabled              ${mmx2-no}"
2808
    echo "3DNow! enabled            ${amd3dnow-no}"
2809
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2810
    echo "SSE enabled               ${sse-no}"
2811
    echo "SSSE3 enabled             ${ssse3-no}"
2812
    echo "CMOV enabled              ${cmov-no}"
2813
    echo "CMOV is fast              ${fast_cmov-no}"
2814
    echo "EBX available             ${ebx_available-no}"
2815
    echo "EBP available             ${ebp_available-no}"
2816
    echo "10 operands supported     ${ten_operands-no}"
2817
fi
2818
if enabled arm; then
2819
    echo "ARMv5TE enabled           ${armv5te-no}"
2820
    echo "ARMv6 enabled             ${armv6-no}"
2821
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2822
    echo "ARM VFP enabled           ${armvfp-no}"
2823
    echo "IWMMXT enabled            ${iwmmxt-no}"
2824
    echo "NEON enabled              ${neon-no}"
2825
fi
2826
if enabled mips; then
2827
    echo "MMI enabled               ${mmi-no}"
2828
fi
2829
if enabled ppc; then
2830
    echo "AltiVec enabled           ${altivec-no}"
2831
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2832
    echo "dcbzl available           ${dcbzl-no}"
2833
    echo "performance report        ${powerpc_perf-no}"
2834
fi
2835
if enabled sparc; then
2836
    echo "VIS enabled               ${vis-no}"
2837
fi
2838
echo "gprof enabled             ${gprof-no}"
2839
echo "debug symbols             ${debug-no}"
2840
echo "strip symbols             ${stripping-no}"
2841
echo "optimizations             ${optimizations-no}"
2842
echo "static                    ${static-no}"
2843
echo "shared                    ${shared-no}"
2844
echo "postprocessing support    ${postproc-no}"
2845
echo "new filter support        ${avfilter-no}"
2846
echo "filters using lavformat   ${avfilter_lavf-no}"
2847
echo "network support           ${network-no}"
2848
echo "threading support         ${thread_type-no}"
2849
echo "SDL support               ${sdl-no}"
2850
echo "Sun medialib support      ${mlib-no}"
2851
echo "AVISynth enabled          ${avisynth-no}"
2852
echo "libdc1394 support         ${libdc1394-no}"
2853
echo "libdirac enabled          ${libdirac-no}"
2854
echo "libfaac enabled           ${libfaac-no}"
2855
echo "libgsm enabled            ${libgsm-no}"
2856
echo "libmp3lame enabled        ${libmp3lame-no}"
2857
echo "libnut enabled            ${libnut-no}"
2858
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2859
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2860
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2861
echo "librtmp enabled           ${librtmp-no}"
2862
echo "libschroedinger enabled   ${libschroedinger-no}"
2863
echo "libspeex enabled          ${libspeex-no}"
2864
echo "libtheora enabled         ${libtheora-no}"
2865
echo "libvorbis enabled         ${libvorbis-no}"
2866
echo "libvpx enabled            ${libvpx-no}"
2867
echo "libx264 enabled           ${libx264-no}"
2868
echo "libxvid enabled           ${libxvid-no}"
2869
echo "zlib enabled              ${zlib-no}"
2870
echo "bzlib enabled             ${bzlib-no}"
2871
echo
2872

    
2873
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2874
    echo "Enabled ${type}s:"
2875
    eval list=\$$(toupper $type)_LIST
2876
    for part in $list; do
2877
        enabled $part && echo ${part%_*}
2878
    done | sort | pr -3 -t
2879
    echo
2880
done
2881

    
2882
license="LGPL version 2.1 or later"
2883
if enabled nonfree; then
2884
    license="nonfree and unredistributable"
2885
elif enabled gplv3; then
2886
    license="GPL version 3 or later"
2887
elif enabled lgplv3; then
2888
    license="LGPL version 3 or later"
2889
elif enabled gpl; then
2890
    license="GPL version 2 or later"
2891
fi
2892

    
2893
echo "License: $license"
2894

    
2895
echo "Creating config.mak and config.h..."
2896

    
2897
# build tree in object directory if source path is different from current one
2898
if enabled source_path_used; then
2899
    DIRS="
2900
        doc
2901
        libavcodec
2902
        libavcodec/$arch
2903
        libavdevice
2904
        libavfilter
2905
        libavformat
2906
        libavutil
2907
        libavutil/$arch
2908
        libpostproc
2909
        libswscale
2910
        libswscale/$arch
2911
        tests
2912
        tools
2913
    "
2914
    FILES="
2915
        Makefile
2916
        common.mak
2917
        subdir.mak
2918
        doc/texi2pod.pl
2919
        libavcodec/Makefile
2920
        libavcodec/${arch}/Makefile
2921
        libavdevice/Makefile
2922
        libavfilter/Makefile
2923
        libavformat/Makefile
2924
        libavutil/Makefile
2925
        libpostproc/Makefile
2926
        libswscale/Makefile
2927
    "
2928
    map 'mkdir -p $v' $DIRS;
2929
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2930
fi
2931

    
2932
enabled stripping || strip="echo skipping strip"
2933

    
2934
cat > config.mak <<EOF
2935
# Automatically generated by configure - do not modify!
2936
ifndef FFMPEG_CONFIG_MAK
2937
FFMPEG_CONFIG_MAK=1
2938
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2939
prefix=$prefix
2940
LIBDIR=\$(DESTDIR)$libdir
2941
SHLIBDIR=\$(DESTDIR)$shlibdir
2942
INCDIR=\$(DESTDIR)$incdir
2943
BINDIR=\$(DESTDIR)$bindir
2944
DATADIR=\$(DESTDIR)$datadir
2945
MANDIR=\$(DESTDIR)$mandir
2946
SRC_PATH="$source_path"
2947
SRC_PATH_BARE=$source_path
2948
BUILD_ROOT="$PWD"
2949
ARCH=$arch
2950
CC=$cc
2951
AS=$as
2952
LD=$ld
2953
DEPCC=$dep_cc
2954
YASM=$yasmexe
2955
YASMDEP=$yasmexe
2956
AR=$ar
2957
RANLIB=$ranlib
2958
CP=cp -p
2959
LN_S=$ln_s
2960
STRIP=$strip
2961
CPPFLAGS=$CPPFLAGS
2962
CFLAGS=$CFLAGS
2963
ASFLAGS=$ASFLAGS
2964
CC_O=$CC_O
2965
LDFLAGS=$LDFLAGS
2966
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2967
SHFLAGS=$SHFLAGS
2968
YASMFLAGS=$YASMFLAGS
2969
BUILDSUF=$build_suffix
2970
FULLNAME=$FULLNAME
2971
LIBPREF=$LIBPREF
2972
LIBSUF=$LIBSUF
2973
LIBNAME=$LIBNAME
2974
SLIBPREF=$SLIBPREF
2975
SLIBSUF=$SLIBSUF
2976
EXESUF=$EXESUF
2977
EXTRA_VERSION=$extra_version
2978
DEPFLAGS=$DEPFLAGS
2979
CCDEP=$CCDEP
2980
ASDEP=$ASDEP
2981
CC_DEPFLAGS=$CC_DEPFLAGS
2982
AS_DEPFLAGS=$AS_DEPFLAGS
2983
HOSTCC=$host_cc
2984
HOSTCFLAGS=$host_cflags
2985
HOSTEXESUF=$HOSTEXESUF
2986
HOSTLDFLAGS=$host_ldflags
2987
HOSTLIBS=$host_libs
2988
TARGET_EXEC=$target_exec
2989
TARGET_PATH=$target_path
2990
SDL_LIBS=$sdl_libs
2991
SDL_CFLAGS=$sdl_cflags
2992
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2993
EXTRALIBS=$extralibs
2994
INSTALL=install
2995
LIBTARGET=${LIBTARGET}
2996
SLIBNAME=${SLIBNAME}
2997
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2998
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2999
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3000
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3001
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3002
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3003
SAMPLES=$samples
3004
EOF
3005

    
3006
get_version(){
3007
    name=$1
3008
    file=$source_path/$2
3009
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3010
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3011
    lcname=$(tolower $name)
3012
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3013
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3014
}
3015

    
3016
get_version LIBSWSCALE  libswscale/swscale.h
3017
get_version LIBPOSTPROC libpostproc/postprocess.h
3018
get_version LIBAVCODEC  libavcodec/avcodec.h
3019
get_version LIBAVDEVICE libavdevice/avdevice.h
3020
get_version LIBAVFORMAT libavformat/avformat.h
3021
get_version LIBAVUTIL   libavutil/avutil.h
3022
get_version LIBAVFILTER libavfilter/avfilter.h
3023

    
3024
cat > $TMPH <<EOF
3025
/* Automatically generated by configure - do not modify! */
3026
#ifndef FFMPEG_CONFIG_H
3027
#define FFMPEG_CONFIG_H
3028
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3029
#define FFMPEG_LICENSE "$(c_escape $license)"
3030
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3031
#define CC_TYPE "$cc_type"
3032
#define CC_VERSION $cc_version
3033
#define restrict $_restrict
3034
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3035
#define EXTERN_PREFIX "${extern_prefix}"
3036
#define EXTERN_ASM ${extern_prefix}
3037
EOF
3038

    
3039
test -n "$malloc_prefix" &&
3040
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3041

    
3042
if enabled small || disabled optimizations; then
3043
    echo "#undef  av_always_inline"  >> $TMPH
3044
    echo "#define av_always_inline"  >> $TMPH
3045
fi
3046

    
3047
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3048
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3049
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3050
                                      $CONFIG_EXTRA      \
3051
                                      $DECODER_LIST      \
3052
                                      $ENCODER_LIST      \
3053
                                      $HWACCEL_LIST      \
3054
                                      $PARSER_LIST       \
3055
                                      $BSF_LIST          \
3056
                                      $DEMUXER_LIST      \
3057
                                      $MUXER_LIST        \
3058
                                      $FILTER_LIST       \
3059
                                      $PROTOCOL_LIST     \
3060
                                      $INDEV_LIST        \
3061
                                      $OUTDEV_LIST       \
3062

    
3063
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3064
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3065

    
3066
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3067
cp_if_changed $TMPH config.h
3068

    
3069
cat > $TMPH <<EOF
3070
/* Generated by ffconf */
3071
#ifndef AVUTIL_AVCONFIG_H
3072
#define AVUTIL_AVCONFIG_H
3073
EOF
3074

    
3075
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3076

    
3077
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3078

    
3079
cp_if_changed $TMPH libavutil/avconfig.h
3080

    
3081
test -n "$WARNINGS" && printf "\n$WARNINGS"
3082

    
3083
# build pkg-config files
3084

    
3085
pkgconfig_generate(){
3086
name=$1
3087
shortname=${name#lib}${build_suffix}
3088
comment=$2
3089
version=$3
3090
libs=$4
3091
requires=$5
3092
cat <<EOF > $name/$name.pc
3093
prefix=$prefix
3094
exec_prefix=\${prefix}
3095
libdir=$libdir
3096
includedir=$incdir
3097

    
3098
Name: $name
3099
Description: $comment
3100
Version: $version
3101
Requires: $(enabled shared || echo $requires)
3102
Requires.private: $(enabled shared && echo $requires)
3103
Conflicts:
3104
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3105
Libs.private: $(enabled shared && echo $libs)
3106
Cflags: -I\${includedir}
3107
EOF
3108
cat <<EOF > $name/$name-uninstalled.pc
3109
prefix=
3110
exec_prefix=
3111
libdir=\${pcfiledir}
3112
includedir=${source_path}
3113

    
3114
Name: $name
3115
Description: $comment
3116
Version: $version
3117
Requires: $requires
3118
Conflicts:
3119
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3120
Cflags: -I\${includedir}
3121
EOF
3122
}
3123

    
3124
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3125
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3126
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3127
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3128
enabled avfilter &&
3129
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3130
enabled postproc &&
3131
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3132
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"