Statistics
| Branch: | Revision:

ffmpeg / configure @ c12caa32

History | View | Annotate | Download (88.2 KB)

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

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

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

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

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

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

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

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

    
62
Standard options:
63
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.err]
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
  --enable-beosthreads     use BeOS threads [no]
95
  --enable-os2threads      use OS/2 threads [no]
96
  --enable-pthreads        use pthreads [no]
97
  --enable-w32threads      use Win32 threads [no]
98
  --enable-x11grab         enable X11 grabbing [no]
99
  --disable-network        disable network support [no]
100
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
101
  --enable-gray            enable full grayscale support (slower color)
102
  --disable-swscale-alpha  disable alpha channel support in swscale
103
  --disable-fastdiv        disable table-based division
104
  --enable-small           optimize for size instead of speed
105
  --disable-aandct         disable AAN DCT code
106
  --disable-dct            disable DCT code
107
  --disable-fft            disable FFT code
108
  --disable-golomb         disable Golomb code
109
  --disable-lpc            disable LPC code
110
  --disable-mdct           disable MDCT code
111
  --disable-rdft           disable RDFT code
112
  --disable-vaapi          disable VAAPI code
113
  --disable-vdpau          disable VDPAU code
114
  --disable-dxva2          disable DXVA2 code
115
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
116
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
117
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
118
  --enable-beos-netserver  enable BeOS netserver
119
  --disable-everything     disable all components listed below
120
  --disable-encoder=NAME   disable encoder NAME
121
  --enable-encoder=NAME    enable encoder NAME
122
  --disable-encoders       disable all encoders
123
  --disable-decoder=NAME   disable decoder NAME
124
  --enable-decoder=NAME    enable decoder NAME
125
  --disable-decoders       disable all decoders
126
  --disable-hwaccel=NAME   disable hwaccel NAME
127
  --enable-hwaccel=NAME    enable hwaccel NAME
128
  --disable-hwaccels       disable all hwaccels
129
  --disable-muxer=NAME     disable muxer NAME
130
  --enable-muxer=NAME      enable muxer NAME
131
  --disable-muxers         disable all muxers
132
  --disable-demuxer=NAME   disable demuxer NAME
133
  --enable-demuxer=NAME    enable demuxer NAME
134
  --disable-demuxers       disable all demuxers
135
  --enable-parser=NAME     enable parser NAME
136
  --disable-parser=NAME    disable parser NAME
137
  --disable-parsers        disable all parsers
138
  --enable-bsf=NAME        enable bitstream filter NAME
139
  --disable-bsf=NAME       disable bitstream filter NAME
140
  --disable-bsfs           disable all bitstream filters
141
  --enable-protocol=NAME   enable protocol NAME
142
  --disable-protocol=NAME  disable protocol NAME
143
  --disable-protocols      disable all protocols
144
  --disable-indev=NAME     disable input device NAME
145
  --disable-outdev=NAME    disable output device NAME
146
  --disable-indevs         disable input devices
147
  --disable-outdevs        disable output devices
148
  --disable-devices        disable all devices
149
  --enable-filter=NAME     enable filter NAME
150
  --disable-filter=NAME    disable filter NAME
151
  --disable-filters        disable all filters
152
  --list-decoders          show all available decoders
153
  --list-encoders          show all available encoders
154
  --list-hwaccels          show all available hardware accelerators
155
  --list-muxers            show all available muxers
156
  --list-demuxers          show all available demuxers
157
  --list-parsers           show all available parsers
158
  --list-protocols         show all available protocols
159
  --list-bsfs              show all available bitstream filters
160
  --list-indevs            show all available input devices
161
  --list-outdevs           show all available output devices
162
  --list-filters           show all available filters
163

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

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

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

    
250
NOTE: Object files are built at the place where configure is launched.
251
EOF
252
  exit 0
253
}
254

    
255
log(){
256
    echo "$@" >> $logfile
257
}
258

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

    
265
echolog(){
266
    log "$@"
267
    echo "$@"
268
}
269

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
513
flags_saved(){
514
    (: ${SAVE_CFLAGS?}) 2> /dev/null
515
}
516

    
517
save_flags(){
518
    flags_saved && return
519
    SAVE_CFLAGS="$CFLAGS"
520
    SAVE_LDFLAGS="$LDFLAGS"
521
    SAVE_extralibs="$extralibs"
522
}
523

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

    
534
temp_cflags(){
535
    save_flags
536
    CFLAGS="$CFLAGS $*"
537
}
538

    
539
temp_ldflags(){
540
    save_flags
541
    LDFLAGS="$LDFLAGS $*"
542
}
543

    
544
temp_extralibs(){
545
    save_flags
546
    extralibs="$extralibs $*"
547
}
548

    
549
append(){
550
    var=$1
551
    shift
552
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
553
    eval "$var=\"\$$var $*\""
554
}
555

    
556
add_cppflags(){
557
    append CPPFLAGS $($filter_cppflags "$@")
558
}
559

    
560
add_cflags(){
561
    append CFLAGS $($filter_cflags "$@")
562
}
563

    
564
add_asflags(){
565
    append ASFLAGS $($filter_asflags "$@")
566
}
567

    
568
add_ldflags(){
569
    append LDFLAGS "$@"
570
}
571

    
572
add_extralibs(){
573
    append extralibs "$@"
574
}
575

    
576
check_cmd(){
577
    log "$@"
578
    "$@" >> $logfile 2>&1
579
}
580

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

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

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

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

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

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

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

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

    
648
test_ldflags(){
649
    log test_ldflags "$@"
650
    check_ld "$@" <<EOF
651
int main(void){ return 0; }
652
EOF
653
}
654

    
655
check_ldflags(){
656
    log check_ldflags "$@"
657
    test_ldflags "$@" && add_ldflags "$@"
658
}
659

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

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

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

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

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

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

    
738
check_lib2(){
739
    log check_lib2 "$@"
740
    headers="$1"
741
    func="$2"
742
    shift 2
743
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
744
}
745

    
746
check_exec(){
747
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
748
}
749

    
750
check_exec_crash(){
751
    code=$(cat)
752

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

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

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

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

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

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

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

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

    
851
check_host_cflags(){
852
    log check_host_cflags "$@"
853
    check_host_cc "$@" <<EOF && append host_cflags "$@"
854
int x;
855
EOF
856
}
857

    
858
apply(){
859
    file=$1
860
    shift
861
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
862
}
863

    
864
cp_if_changed(){
865
    cmp -s "$1" "$2" &&
866
        echo "$2 is unchanged" ||
867
        cp -f "$1" "$2"
868
}
869

    
870
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
871
# system-dependent things.
872

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

    
887
CONFIG_LIST="
888
    $COMPONENT_LIST
889
    aandct
890
    avcodec
891
    avdevice
892
    avfilter
893
    avfilter_lavf
894
    avformat
895
    avisynth
896
    beos_netserver
897
    bzlib
898
    dct
899
    doc
900
    dwt
901
    dxva2
902
    fastdiv
903
    ffmpeg
904
    ffplay
905
    ffprobe
906
    ffserver
907
    fft
908
    golomb
909
    gpl
910
    gprof
911
    gray
912
    h264dsp
913
    hardcoded_tables
914
    libdc1394
915
    libdirac
916
    libfaac
917
    libfaad
918
    libfaadbin
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
    libx264
931
    libxvid
932
    lpc
933
    lsp
934
    mdct
935
    memalign_hack
936
    mlib
937
    mpegaudio_hp
938
    network
939
    nonfree
940
    pic
941
    postproc
942
    powerpc_perf
943
    rdft
944
    runtime_cpudetect
945
    shared
946
    small
947
    sram
948
    static
949
    swscale
950
    swscale_alpha
951
    vaapi
952
    vdpau
953
    version3
954
    x11grab
955
    zlib
956
"
957

    
958
THREADS_LIST='
959
    beosthreads
960
    os2threads
961
    pthreads
962
    w32threads
963
'
964

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

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

    
1008
HAVE_LIST_PUB='
1009
    bigendian
1010
'
1011

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

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

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

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

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

    
1164
CMDLINE_APPEND="
1165
    extra_cflags
1166
"
1167

    
1168
# code dependency declarations
1169

    
1170
# architecture extensions
1171

    
1172
armv5te_deps="arm"
1173
armv6_deps="arm"
1174
armv6t2_deps="arm"
1175
armvfp_deps="arm"
1176
iwmmxt_deps="arm"
1177
neon_deps="arm"
1178

    
1179
mmi_deps="mips"
1180

    
1181
altivec_deps="ppc"
1182
ppc4xx_deps="ppc"
1183

    
1184
vis_deps="sparc"
1185

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

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

    
1198
need_memalign="altivec neon sse"
1199
inline_asm_deps="!tms470"
1200

    
1201
# subsystems
1202
mdct_select="fft"
1203
rdft_select="fft"
1204

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

    
1323
vaapi_deps="va_va_h"
1324
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1325

    
1326
# parsers
1327
h264_parser_select="golomb h264dsp"
1328

    
1329
# bitstream_filters
1330
aac_adtstoasc_bsf_select="aac_parser"
1331

    
1332
# external libraries
1333
libdirac_decoder_deps="libdirac !libschroedinger"
1334
libdirac_encoder_deps="libdirac"
1335
libfaac_encoder_deps="libfaac"
1336
libfaad_decoder_deps="libfaad"
1337
libfaadbin_decoder_extralibs='$ldl'
1338
libgsm_decoder_deps="libgsm"
1339
libgsm_encoder_deps="libgsm"
1340
libgsm_ms_decoder_deps="libgsm"
1341
libgsm_ms_encoder_deps="libgsm"
1342
libmp3lame_encoder_deps="libmp3lame"
1343
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1344
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1345
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1346
libopenjpeg_decoder_deps="libopenjpeg"
1347
libschroedinger_decoder_deps="libschroedinger"
1348
libschroedinger_encoder_deps="libschroedinger"
1349
libspeex_decoder_deps="libspeex"
1350
libtheora_encoder_deps="libtheora"
1351
libvorbis_encoder_deps="libvorbis"
1352
libx264_encoder_deps="libx264"
1353
libxvid_encoder_deps="libxvid"
1354

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

    
1383
# indevs / outdevs
1384
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1385
alsa_indev_extralibs="-lasound"
1386
alsa_outdev_deps="alsa_asoundlib_h"
1387
alsa_outdev_extralibs="-lasound"
1388
audio_beos_indev_deps="audio_beos"
1389
audio_beos_indev_extralibs="-lmedia -lbe"
1390
audio_beos_outdev_deps="audio_beos"
1391
audio_beos_outdev_extralibs="-lmedia -lbe"
1392
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1393
dv1394_indev_deps="dv1394 dv_demuxer"
1394
jack_indev_deps="jack_jack_h"
1395
jack_indev_extralibs="-ljack"
1396
libdc1394_indev_deps="libdc1394"
1397
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1398
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1399
v4l_indev_deps="linux_videodev_h"
1400
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1401
vfwcap_indev_deps="capCreateCaptureWindow"
1402
vfwcap_indev_extralibs="-lavicap32"
1403
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1404
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1405

    
1406
# protocols
1407
gopher_protocol_deps="network"
1408
http_protocol_deps="network"
1409
http_protocol_select="tcp_protocol"
1410
rtmp_protocol_deps="tcp_protocol"
1411
rtp_protocol_deps="udp_protocol"
1412
tcp_protocol_deps="network"
1413
udp_protocol_deps="network"
1414

    
1415
# filters
1416
movie_filter_deps="avfilter_lavf"
1417
avfilter_lavf_deps="avformat"
1418

    
1419
# libraries
1420
avdevice_deps="avcodec avformat"
1421
avformat_deps="avcodec"
1422

    
1423
# programs
1424
ffmpeg_deps="avcodec avformat swscale"
1425
ffplay_deps="avcodec avformat swscale sdl"
1426
ffplay_select="rdft"
1427
ffprobe_deps="avcodec avformat"
1428
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1429
ffserver_extralibs='$ldl'
1430

    
1431
doc_deps="texi2html"
1432

    
1433
# default parameters
1434

    
1435
logfile="config.err"
1436

    
1437
# installation paths
1438
prefix_default="/usr/local"
1439
bindir_default='${prefix}/bin'
1440
datadir_default='${prefix}/share/ffmpeg'
1441
incdir_default='${prefix}/include'
1442
libdir_default='${prefix}/lib'
1443
mandir_default='${prefix}/share/man'
1444
shlibdir_default="$libdir_default"
1445

    
1446
# toolchain
1447
ar_default="ar"
1448
cc_default="gcc"
1449
cc_version=\"unknown\"
1450
host_cc_default="gcc"
1451
ln_s="ln -sf"
1452
nm_default="nm"
1453
objformat="elf"
1454
ranlib="ranlib"
1455
strip_default="strip"
1456
yasmexe="yasm"
1457

    
1458
nm_opts='-g'
1459

    
1460
# machine
1461
arch_default=$(uname -m)
1462
cpu="generic"
1463

    
1464
# OS
1465
target_os_default=$(tolower $(uname -s))
1466
host_os=$target_os_default
1467

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

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

    
1505
CC_O='-o $@'
1506

    
1507
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1508
host_libs='-lm'
1509

    
1510
target_path='$(CURDIR)'
1511

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

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

    
1531
for v in "$@"; do
1532
    r=${v#*=}
1533
    l=${v%"$r"}
1534
    r=$(sh_quote "$r")
1535
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1536
done
1537

    
1538
find_things(){
1539
    thing=$1
1540
    pattern=$2
1541
    file=$source_path/$3
1542
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1543
}
1544

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

    
1557
for n in $COMPONENT_LIST; do
1558
    v=$(toupper ${n%s})_LIST
1559
    eval enable \$$v
1560
    eval ${n}_if_any="\$$v"
1561
done
1562

    
1563
enable $ARCH_EXT_LIST
1564

    
1565
die_unknown(){
1566
    echo "Unknown option \"$1\"."
1567
    echo "See $0 --help for available options."
1568
    exit 1
1569
}
1570

    
1571
show_list() {
1572
    suffix=_$1
1573
    shift
1574
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1575
    exit 0
1576
}
1577

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

    
1633
disabled logging && logfile=/dev/null
1634

    
1635
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1636
set >> $logfile
1637

    
1638
test -n "$cross_prefix" && enable cross_compile
1639

    
1640
if enabled cross_compile; then
1641
    test -n "$arch" && test -n "$target_os" ||
1642
        die "Must specify target arch and OS when cross-compiling"
1643
fi
1644

    
1645
set_default arch target_os
1646

    
1647
ar_default="${cross_prefix}${ar_default}"
1648
cc_default="${cross_prefix}${cc_default}"
1649
nm_default="${cross_prefix}${nm_default}"
1650
ranlib="${cross_prefix}${ranlib}"
1651
strip_default="${cross_prefix}${strip_default}"
1652

    
1653
sysinclude_default="${sysroot}/usr/include"
1654

    
1655
set_default cc nm strip sysinclude
1656
enabled cross_compile || host_cc_default=$cc
1657
set_default host_cc
1658

    
1659
exesuf() {
1660
    case $1 in
1661
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1662
    esac
1663
}
1664

    
1665
EXESUF=$(exesuf $target_os)
1666
HOSTEXESUF=$(exesuf $host_os)
1667

    
1668
# set temporary file name
1669
: ${TMPDIR:=$TEMPDIR}
1670
: ${TMPDIR:=$TMP}
1671
: ${TMPDIR:=/tmp}
1672

    
1673
if ! check_cmd type mktemp; then
1674
    # simple replacement for missing mktemp
1675
    # NOT SAFE FOR GENERAL USE
1676
    mktemp(){
1677
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1678
    }
1679
fi
1680

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

    
1689
trap 'rm -f -- $TMPFILES' EXIT
1690
trap exit HUP INT TERM
1691

    
1692
tmpfile TMPC  .c
1693
tmpfile TMPE  $EXESUF
1694
tmpfile TMPH  .h
1695
tmpfile TMPO  .o
1696
tmpfile TMPS  .S
1697
tmpfile TMPV  .ver
1698
tmpfile TMPSH .sh
1699

    
1700
unset -f mktemp
1701

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

    
1715
filter_cflags=echo
1716
filter_cppflags=echo
1717
filter_asflags=echo
1718

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

    
1854
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1855

    
1856
: ${as_default:=$cc}
1857
: ${dep_cc_default:=$cc}
1858
: ${ld_default:=$cc}
1859
set_default ar as dep_cc ld
1860

    
1861
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1862
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1863

    
1864
add_cflags $extra_cflags
1865
add_asflags $extra_cflags
1866

    
1867
if test -n "$sysroot"; then
1868
    case "$cc_type" in
1869
        gcc)
1870
            add_cppflags --sysroot="$sysroot"
1871
            add_ldflags --sysroot="$sysroot"
1872
        ;;
1873
        tms470)
1874
            add_cppflags -I"$sysinclude"
1875
            add_ldflags  --sysroot="$sysroot"
1876
        ;;
1877
        clang)
1878
            add_cppflags -isysroot "$sysroot"
1879
            add_ldflags -isysroot "$sysroot"
1880
        ;;
1881
    esac
1882
fi
1883

    
1884
if test "$cpu" = host; then
1885
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1886

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

    
1901
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1902
fi
1903

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

    
1945
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1946
enable $arch
1947

    
1948
# Add processor-specific flags
1949
if test "$cpu" = generic; then
1950
    : do nothing
1951
elif enabled ppc; then
1952

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

    
1993
elif enabled x86; then
1994

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

    
2019
elif enabled sparc; then
2020

    
2021
    case $cpu in
2022
        niagara)
2023
            cpuflags="-mcpu=$cpu"
2024
            disable vis
2025
        ;;
2026
        sparc64)
2027
            cpuflags="-mcpu=v9"
2028
        ;;
2029
    esac
2030

    
2031
elif enabled arm; then
2032

    
2033
    case $cpu in
2034
        armv*)
2035
            cpuflags="-march=$cpu"
2036
        ;;
2037
        *)
2038
            cpuflags="-mcpu=$cpu"
2039
        ;;
2040
    esac
2041

    
2042
elif enabled alpha; then
2043

    
2044
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2045

    
2046
elif enabled bfin; then
2047

    
2048
    cpuflags="-mcpu=$cpu"
2049

    
2050
elif enabled mips; then
2051

    
2052
    cpuflags="-march=$cpu"
2053

    
2054
elif enabled avr32; then
2055

    
2056
    case $cpu in
2057
        ap7[02]0[0-2])
2058
            subarch="avr32_ap"
2059
            cpuflags="-mpart=$cpu"
2060
        ;;
2061
        ap)
2062
            subarch="avr32_ap"
2063
            cpuflags="-march=$cpu"
2064
        ;;
2065
        uc3[ab]*)
2066
            subarch="avr32_uc"
2067
            cpuflags="-mcpu=$cpu"
2068
        ;;
2069
        uc)
2070
            subarch="avr32_uc"
2071
            cpuflags="-march=$cpu"
2072
        ;;
2073
    esac
2074

    
2075
fi
2076

    
2077
add_cflags $cpuflags
2078
add_asflags $cpuflags
2079

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

    
2093
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2094
check_cflags -std=c99
2095
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2096
#include <stdlib.h>
2097
EOF
2098
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2099
#include <stdlib.h>
2100
EOF
2101

    
2102
check_host_cflags -std=c99
2103

    
2104
case "$arch" in
2105
    alpha|ia64|mips|parisc|sparc)
2106
        spic=$shared
2107
    ;;
2108
    x86)
2109
        subarch="x86_32"
2110
        check_cc <<EOF && subarch="x86_64"
2111
        int test[(int)sizeof(char*) - 7];
2112
EOF
2113
        if test "$subarch" = "x86_64"; then
2114
            spic=$shared
2115
        fi
2116
    ;;
2117
esac
2118

    
2119
enable $subarch
2120
enabled spic && enable pic
2121

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

    
2291
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2292

    
2293
set_default $PATHS_LIST
2294

    
2295
add_extralibs $osextralibs
2296

    
2297
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2298
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2299

    
2300
# we need to build at least one lib type
2301
if ! enabled_any static shared; then
2302
    cat <<EOF
2303
At least one library type must be built.
2304
Specify --enable-static to build the static libraries or --enable-shared to
2305
build the shared libraries as well. To only build the shared libraries specify
2306
--disable-static in addition to --enable-shared.
2307
EOF
2308
    exit 1;
2309
fi
2310

    
2311
disabled static && LIBNAME=""
2312

    
2313
if enabled_any libfaad libfaadbin ; then
2314
    if check_header faad.h; then
2315
        check_cc <<EOF
2316
#include <faad.h>
2317
#ifndef FAAD2_VERSION
2318
ok faad1
2319
#endif
2320
int main(void) { return 0; }
2321
EOF
2322
        test $? = 0 && enable libfaad2
2323
    else
2324
        die "FAAD test failed."
2325
    fi
2326
fi
2327

    
2328

    
2329
die_license_disabled() {
2330
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2331
}
2332

    
2333
die_license_disabled gpl libfaad2
2334
die_license_disabled gpl libx264
2335
die_license_disabled gpl libxvid
2336
die_license_disabled gpl postproc
2337
die_license_disabled gpl x11grab
2338

    
2339
die_license_disabled nonfree libfaac
2340

    
2341
die_license_disabled version3 libopencore_amrnb
2342
die_license_disabled version3 libopencore_amrwb
2343

    
2344
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2345

    
2346
check_deps $ARCH_EXT_LIST
2347

    
2348
disabled optimizations || check_cflags -fomit-frame-pointer
2349

    
2350
enable_pic() {
2351
    enable pic
2352
    add_cppflags -DPIC
2353
    add_cflags   -fPIC
2354
    add_asflags  -fPIC
2355
}
2356

    
2357
enabled pic && enable_pic
2358

    
2359
check_cc <<EOF || die "Symbol mangling check failed."
2360
int ff_extern;
2361
EOF
2362
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2363
extern_prefix=${sym%%ff_extern*}
2364

    
2365
check_cc <<EOF && enable inline_asm
2366
void foo(void) { __asm__ volatile ("" ::); }
2367
EOF
2368

    
2369
_restrict=
2370
for restrict_keyword in restrict __restrict__ __restrict; do
2371
    check_cc <<EOF && _restrict=$restrict_keyword && break
2372
void foo(char * $restrict_keyword p);
2373
EOF
2374
done
2375

    
2376
check_cc <<EOF && enable attribute_packed
2377
struct { int x; } __attribute__((packed)) x;
2378
EOF
2379

    
2380
check_cc <<EOF && enable attribute_may_alias
2381
union { int x; } __attribute__((may_alias)) x;
2382
EOF
2383

    
2384
check_cc <<EOF || die "endian test failed"
2385
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2386
EOF
2387
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2388

    
2389
if enabled alpha; then
2390

    
2391
    check_cflags -mieee
2392

    
2393
elif enabled arm; then
2394

    
2395
    check_cflags -marm
2396

    
2397
    check_ld <<EOF && enable vfp_args
2398
__asm__ (".eabi_attribute 28, 1");
2399
int main(void) { return 0; }
2400
EOF
2401

    
2402
    # We have to check if pld is a nop and disable it.
2403
    check_asm pld '"pld [r0]"'
2404

    
2405
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2406
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2407
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2408
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2409
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2410
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2411

    
2412
    enabled_all armv6t2 shared !pic && enable_pic
2413

    
2414
elif enabled mips; then
2415

    
2416
    check_asm loongson '"dmult.g $1, $2, $3"'
2417
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2418

    
2419
elif enabled ppc; then
2420

    
2421
    enable local_aligned_8 local_aligned_16
2422

    
2423
    check_asm dcbzl     '"dcbzl 0, 1"'
2424
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2425
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2426

    
2427
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2428
    if enabled altivec; then
2429
        check_cflags -maltivec -mabi=altivec &&
2430
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2431
        check_cflags -faltivec
2432

    
2433
        # check if our compiler supports Motorola AltiVec C API
2434
        check_cc <<EOF || disable altivec
2435
$inc_altivec_h
2436
int main(void) {
2437
    vector signed int v1, v2, v3;
2438
    v1 = vec_add(v2,v3);
2439
    return 0;
2440
}
2441
EOF
2442

    
2443
        # check if our compiler supports braces for vector declarations
2444
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2445
$inc_altivec_h
2446
int main (void) { (vector int) {1}; return 0; }
2447
EOF
2448
    fi
2449

    
2450
elif enabled sparc; then
2451

    
2452
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2453
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2454

    
2455
elif enabled x86; then
2456

    
2457
    enable local_aligned_8 local_aligned_16
2458

    
2459
    # check whether EBP is available on x86
2460
    # As 'i' is stored on the stack, this program will crash
2461
    # if the base pointer is used to access it because the
2462
    # base pointer is cleared in the inline assembly code.
2463
    check_exec_crash <<EOF && enable ebp_available
2464
    volatile int i=0;
2465
    __asm__ volatile (
2466
        "xorl %%ebp, %%ebp"
2467
    ::: "%ebp");
2468
    return i;
2469
EOF
2470

    
2471
    # check whether EBX is available on x86
2472
    check_asm ebx_available '""::"b"(0)' &&
2473
        check_asm ebx_available '"":::"%ebx"'
2474

    
2475
    # check whether more than 10 operands are supported
2476
    check_cc <<EOF && enable ten_operands
2477
int main(void) {
2478
    int x=0;
2479
    __asm__ volatile(
2480
        ""
2481
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2482
    );
2483
    return 0;
2484
}
2485
EOF
2486

    
2487
    # check whether binutils is new enough to compile SSSE3/MMX2
2488
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2489
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2490

    
2491
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2492

    
2493
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2494
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2495
    enabled     pic           && append YASMFLAGS "-DPIC"
2496
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2497
    case "$objformat" in
2498
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2499
    esac
2500
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2501

    
2502
    case "$cpu" in
2503
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2504
            disable fast_clz
2505
        ;;
2506
    esac
2507

    
2508
fi
2509

    
2510
if check_func dlopen; then
2511
    ldl=
2512
elif check_func dlopen -ldl; then
2513
    ldl=-ldl
2514
fi
2515

    
2516
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2517
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2518

    
2519
check_func  fork
2520
check_func  getaddrinfo $network_extralibs
2521
check_func  gethrtime
2522
check_func  getrusage
2523
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2524
check_func  inet_aton $network_extralibs
2525
check_func  isatty
2526
check_func  ${malloc_prefix}memalign            && enable memalign
2527
check_func  mkstemp
2528
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2529
check_func  setrlimit
2530
check_func  strerror_r
2531
check_func_headers io.h setmode
2532
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2533
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2534
check_func_headers windows.h GetProcessTimes
2535
check_func_headers windows.h VirtualAlloc
2536

    
2537
check_header conio.h
2538
check_header dlfcn.h
2539
check_header dxva2api.h
2540
check_header malloc.h
2541
check_header poll.h
2542
check_header sys/mman.h
2543
check_header sys/resource.h
2544
check_header sys/select.h
2545
check_header termios.h
2546
check_header vdpau/vdpau.h
2547
check_header vdpau/vdpau_x11.h
2548
check_header X11/extensions/XvMClib.h
2549

    
2550
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2551

    
2552
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2553
     enabled_any $need_memalign ; then
2554
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2555
fi
2556

    
2557
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2558
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2559

    
2560
# check for some common methods of building with pthread support
2561
# do this before the optional library checks as some of them require pthreads
2562
if enabled pthreads; then
2563
    if check_func pthread_create; then
2564
        :
2565
    elif check_func pthread_create -pthread; then
2566
        add_cflags -pthread
2567
        add_extralibs -pthread
2568
    elif check_func pthread_create -pthreads; then
2569
        add_cflags -pthreads
2570
        add_extralibs -pthreads
2571
    elif check_func pthread_create -lpthreadGC2; then
2572
        add_extralibs -lpthreadGC2
2573
    elif ! check_lib pthread.h pthread_create -lpthread; then
2574
        die "ERROR: can't find pthreads library"
2575
    fi
2576
fi
2577

    
2578
for thread in $THREADS_LIST; do
2579
    if enabled $thread; then
2580
        test -n "$thread_type" &&
2581
            die "ERROR: Only one thread type must be selected." ||
2582
            thread_type="$thread"
2583
    fi
2584
done
2585

    
2586
check_lib math.h sin -lm
2587
check_lib va/va.h vaInitialize -lva
2588

    
2589
check_mathfunc exp2
2590
check_mathfunc exp2f
2591
check_mathfunc llrint
2592
check_mathfunc llrintf
2593
check_mathfunc log2
2594
check_mathfunc log2f
2595
check_mathfunc lrint
2596
check_mathfunc lrintf
2597
check_mathfunc round
2598
check_mathfunc roundf
2599
check_mathfunc truncf
2600

    
2601
# these are off by default, so fail if requested and not available
2602
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2603
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2604
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2605
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2606
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2607
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2608
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2609
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2610
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2611
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2612
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2613
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2614
enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init -lrtmp
2615
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2616
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2617
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2618
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2619
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2620
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2621
                      { check_cpp_condition x264.h "X264_BUILD >= 90" ||
2622
                        die "ERROR: libx264 version must be >= 0.90."; }
2623
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2624
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2625

    
2626
# libdc1394 check
2627
if enabled libdc1394; then
2628
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2629
        enable libdc1394_2; } ||
2630
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2631
        enable libdc1394_1; } ||
2632
    die "ERROR: No version of libdc1394 found "
2633
fi
2634

    
2635
SDL_CONFIG="${cross_prefix}sdl-config"
2636
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2637
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2638
    sdl_libs=$("${SDL_CONFIG}" --libs)
2639
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2640
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2641
    enable sdl &&
2642
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2643
fi
2644

    
2645
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2646

    
2647
if enabled network; then
2648
    check_type "sys/types.h sys/socket.h" socklen_t
2649
    check_type netdb.h "struct addrinfo"
2650
    check_type netinet/in.h "struct ipv6_mreq"
2651
    check_type netinet/in.h "struct sockaddr_in6"
2652
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2653
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2654
    # Prefer arpa/inet.h over winsock2
2655
    if check_header arpa/inet.h ; then
2656
        check_func closesocket
2657
    elif check_header winsock2.h ; then
2658
        check_func_headers winsock2.h closesocket -lws2 && \
2659
            network_extralibs="-lws2" || \
2660
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2661
            network_extralibs="-lws2_32"; }
2662
        check_type ws2tcpip.h socklen_t
2663
        check_type ws2tcpip.h "struct addrinfo"
2664
        check_type ws2tcpip.h "struct ipv6_mreq"
2665
        check_type ws2tcpip.h "struct sockaddr_in6"
2666
        check_type ws2tcpip.h "struct sockaddr_storage"
2667
        check_struct winsock2.h "struct sockaddr" sa_len
2668
    else
2669
        disable network
2670
    fi
2671
fi
2672

    
2673
check_header linux/videodev.h
2674
check_header linux/videodev2.h
2675
check_header sys/videoio.h
2676

    
2677
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2678

    
2679
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2680
{ check_header dev/bktr/ioctl_meteor.h &&
2681
  check_header dev/bktr/ioctl_bt848.h; } ||
2682
{ check_header machine/ioctl_meteor.h &&
2683
  check_header machine/ioctl_bt848.h; } ||
2684
{ check_header dev/video/meteor/ioctl_meteor.h &&
2685
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2686
check_header dev/ic/bt8xx.h
2687

    
2688
check_header sys/soundcard.h
2689
check_header soundcard.h
2690

    
2691
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2692

    
2693
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2694

    
2695
enabled x11grab                         &&
2696
check_header X11/Xlib.h                 &&
2697
check_header X11/extensions/XShm.h      &&
2698
check_header X11/extensions/Xfixes.h    &&
2699
check_func XOpenDisplay -lX11           &&
2700
check_func XShmCreateImage -lX11 -lXext &&
2701
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2702

    
2703
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2704
check_cpp_condition \
2705
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2706
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2707
      disable vdpau; }
2708
fi
2709

    
2710
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2711

    
2712
# add some useful compiler flags if supported
2713
check_cflags -Wdeclaration-after-statement
2714
check_cflags -Wall
2715
check_cflags -Wno-switch
2716
check_cflags -Wdisabled-optimization
2717
check_cflags -Wpointer-arith
2718
check_cflags -Wredundant-decls
2719
check_cflags -Wno-pointer-sign
2720
check_cflags -Wcast-qual
2721
check_cflags -Wwrite-strings
2722
check_cflags -Wtype-limits
2723
check_cflags -Wundef
2724
check_cflags -Wmissing-prototypes
2725
enabled extra_warnings && check_cflags -Winline
2726

    
2727
# add some linker flags
2728
check_ldflags -Wl,--warn-common
2729
check_ldflags -Wl,--as-needed
2730
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'
2731
check_ldflags -Wl,-Bsymbolic
2732

    
2733
echo "X{};" > $TMPV
2734
test_ldflags -Wl,--version-script,$TMPV &&
2735
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2736

    
2737
if enabled small; then
2738
    add_cflags $size_cflags
2739
    optimizations="small"
2740
elif enabled optimizations; then
2741
    add_cflags $speed_cflags
2742
else
2743
    add_cflags $noopt_cflags
2744
fi
2745
check_cflags -fno-math-errno
2746
check_cflags -fno-signed-zeros
2747

    
2748
if enabled icc; then
2749
    # Just warnings, no remarks
2750
    check_cflags -w1
2751
    # -wd: Disable following warnings
2752
    # 144, 167, 556: -Wno-pointer-sign
2753
    # 10006: ignoring unknown option -fno-signed-zeros
2754
    # 10156: ignoring option '-W'; no argument required
2755
    check_cflags -wd144,167,556,10006,10156
2756
    # 11030: Warning unknown option --as-needed
2757
    # 10156: ignoring option '-export'; no argument required
2758
    check_ldflags -wd10156,11030
2759
    # Allow to compile with optimizations
2760
    check_ldflags -march=$cpu
2761
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2762
    enable ebp_available
2763
elif enabled ccc; then
2764
    # disable some annoying warnings
2765
    add_cflags -msg_disable cvtu32to64
2766
    add_cflags -msg_disable embedcomment
2767
    add_cflags -msg_disable needconstext
2768
    add_cflags -msg_disable nomainieee
2769
    add_cflags -msg_disable ptrmismatch1
2770
    add_cflags -msg_disable unreachcode
2771
elif enabled gcc; then
2772
    check_cflags -fno-tree-vectorize
2773
    check_cflags -Werror=implicit
2774
    check_cflags -Werror=missing-prototypes
2775
elif enabled clang; then
2776
    check_cflags -Qunused-arguments
2777
elif enabled armcc; then
2778
    # 2523: use of inline assembler is deprecated
2779
    add_cflags -Wrvct,--diag_suppress=2523
2780
    add_cflags -Wrvct,--diag_suppress=1207
2781
elif enabled tms470; then
2782
    add_cflags -pds=824 -pds=837
2783
fi
2784

    
2785
if enabled gprof; then
2786
    add_cflags  -p
2787
    add_ldflags -p
2788
fi
2789

    
2790
# Find out if the .align argument is a power of two or not.
2791
check_asm asmalign_pot '".align 3"'
2792

    
2793
enabled_any $THREADS_LIST      && enable threads
2794

    
2795
check_deps $CONFIG_LIST       \
2796
           $CONFIG_EXTRA      \
2797
           $HAVE_LIST         \
2798
           $DECODER_LIST      \
2799
           $ENCODER_LIST      \
2800
           $HWACCEL_LIST      \
2801
           $PARSER_LIST       \
2802
           $BSF_LIST          \
2803
           $DEMUXER_LIST      \
2804
           $MUXER_LIST        \
2805
           $FILTER_LIST       \
2806
           $INDEV_LIST        \
2807
           $OUTDEV_LIST       \
2808
           $PROTOCOL_LIST     \
2809

    
2810
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2811

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

    
2895
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2896
    echo "Enabled ${type}s:"
2897
    eval list=\$$(toupper $type)_LIST
2898
    for part in $list; do
2899
        enabled $part && echo ${part%_*}
2900
    done | sort | pr -3 -t
2901
    echo
2902
done
2903

    
2904
license="LGPL version 2.1 or later"
2905
if enabled nonfree; then
2906
    license="nonfree and unredistributable"
2907
elif enabled gplv3; then
2908
    license="GPL version 3 or later"
2909
elif enabled lgplv3; then
2910
    license="LGPL version 3 or later"
2911
elif enabled gpl; then
2912
    license="GPL version 2 or later"
2913
fi
2914

    
2915
echo "License: $license"
2916

    
2917
echo "Creating config.mak and config.h..."
2918

    
2919
# build tree in object directory if source path is different from current one
2920
if enabled source_path_used; then
2921
    DIRS="
2922
        doc
2923
        libavcodec
2924
        libavcodec/$arch
2925
        libavdevice
2926
        libavfilter
2927
        libavformat
2928
        libavutil
2929
        libavutil/$arch
2930
        libpostproc
2931
        libswscale
2932
        libswscale/$arch
2933
        tests
2934
        tools
2935
    "
2936
    FILES="
2937
        Makefile
2938
        common.mak
2939
        subdir.mak
2940
        doc/texi2pod.pl
2941
        libavcodec/Makefile
2942
        libavcodec/${arch}/Makefile
2943
        libavdevice/Makefile
2944
        libavfilter/Makefile
2945
        libavformat/Makefile
2946
        libavutil/Makefile
2947
        libpostproc/Makefile
2948
        libswscale/Makefile
2949
    "
2950
    map 'mkdir -p $v' $DIRS;
2951
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2952
fi
2953

    
2954
enabled stripping || strip="echo skipping strip"
2955

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

    
3028
get_version(){
3029
    name=$1
3030
    file=$source_path/$2
3031
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3032
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3033
    lcname=$(tolower $name)
3034
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3035
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3036
}
3037

    
3038
get_version LIBSWSCALE  libswscale/swscale.h
3039
get_version LIBPOSTPROC libpostproc/postprocess.h
3040
get_version LIBAVCODEC  libavcodec/avcodec.h
3041
get_version LIBAVDEVICE libavdevice/avdevice.h
3042
get_version LIBAVFORMAT libavformat/avformat.h
3043
get_version LIBAVUTIL   libavutil/avutil.h
3044
get_version LIBAVFILTER libavfilter/avfilter.h
3045

    
3046
enabled asmalign_pot || align_shift="1 <<"
3047

    
3048
cat > $TMPH <<EOF
3049
/* Automatically generated by configure - do not modify! */
3050
#ifndef FFMPEG_CONFIG_H
3051
#define FFMPEG_CONFIG_H
3052
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3053
#define FFMPEG_LICENSE "$(c_escape $license)"
3054
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3055
#define CC_TYPE "$cc_type"
3056
#define CC_VERSION $cc_version
3057
#define restrict $_restrict
3058
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3059
#define EXTERN_PREFIX "${extern_prefix}"
3060
#define EXTERN_ASM ${extern_prefix}
3061
EOF
3062

    
3063
test -n "$malloc_prefix" &&
3064
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3065

    
3066
if enabled small || disabled optimizations; then
3067
    echo "#undef  av_always_inline"  >> $TMPH
3068
    echo "#define av_always_inline"  >> $TMPH
3069
fi
3070

    
3071
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3072
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3073
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3074
                                      $CONFIG_EXTRA      \
3075
                                      $DECODER_LIST      \
3076
                                      $ENCODER_LIST      \
3077
                                      $HWACCEL_LIST      \
3078
                                      $PARSER_LIST       \
3079
                                      $BSF_LIST          \
3080
                                      $DEMUXER_LIST      \
3081
                                      $MUXER_LIST        \
3082
                                      $FILTER_LIST       \
3083
                                      $PROTOCOL_LIST     \
3084
                                      $INDEV_LIST        \
3085
                                      $OUTDEV_LIST       \
3086

    
3087
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3088
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3089

    
3090
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3091
cp_if_changed $TMPH config.h
3092

    
3093
cat > $TMPH <<EOF
3094
/* Generated by ffconf */
3095
#ifndef AVUTIL_AVCONFIG_H
3096
#define AVUTIL_AVCONFIG_H
3097
EOF
3098

    
3099
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3100

    
3101
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3102

    
3103
cp_if_changed $TMPH libavutil/avconfig.h
3104

    
3105
# build pkg-config files
3106

    
3107
pkgconfig_generate(){
3108
name=$1
3109
shortname=${name#lib}${build_suffix}
3110
comment=$2
3111
version=$3
3112
libs=$4
3113
requires=$5
3114
cat <<EOF > $name/$name.pc
3115
prefix=$prefix
3116
exec_prefix=\${prefix}
3117
libdir=$libdir
3118
includedir=$incdir
3119

    
3120
Name: $name
3121
Description: $comment
3122
Version: $version
3123
Requires: $(enabled shared || echo $requires)
3124
Requires.private: $(enabled shared && echo $requires)
3125
Conflicts:
3126
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3127
Libs.private: $(enabled shared && echo $libs)
3128
Cflags: -I\${includedir}
3129
EOF
3130
cat <<EOF > $name/$name-uninstalled.pc
3131
prefix=
3132
exec_prefix=
3133
libdir=\${pcfiledir}
3134
includedir=${source_path}
3135

    
3136
Name: $name
3137
Description: $comment
3138
Version: $version
3139
Requires: $requires
3140
Conflicts:
3141
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3142
Cflags: -I\${includedir}
3143
EOF
3144
}
3145

    
3146
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3147
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3148
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3149
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3150
enabled avfilter &&
3151
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3152
enabled postproc &&
3153
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3154
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"