Statistics
| Branch: | Revision:

ffmpeg / configure @ a1629e28

History | View | Annotate | Download (87.7 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
  --disable-everything     disable all components listed below
119
  --disable-encoder=NAME   disable encoder NAME
120
  --enable-encoder=NAME    enable encoder NAME
121
  --disable-encoders       disable all encoders
122
  --disable-decoder=NAME   disable decoder NAME
123
  --enable-decoder=NAME    enable decoder NAME
124
  --disable-decoders       disable all decoders
125
  --disable-hwaccel=NAME   disable hwaccel NAME
126
  --enable-hwaccel=NAME    enable hwaccel NAME
127
  --disable-hwaccels       disable all hwaccels
128
  --disable-muxer=NAME     disable muxer NAME
129
  --enable-muxer=NAME      enable muxer NAME
130
  --disable-muxers         disable all muxers
131
  --disable-demuxer=NAME   disable demuxer NAME
132
  --enable-demuxer=NAME    enable demuxer NAME
133
  --disable-demuxers       disable all demuxers
134
  --enable-parser=NAME     enable parser NAME
135
  --disable-parser=NAME    disable parser NAME
136
  --disable-parsers        disable all parsers
137
  --enable-bsf=NAME        enable bitstream filter NAME
138
  --disable-bsf=NAME       disable bitstream filter NAME
139
  --disable-bsfs           disable all bitstream filters
140
  --enable-protocol=NAME   enable protocol NAME
141
  --disable-protocol=NAME  disable protocol NAME
142
  --disable-protocols      disable all protocols
143
  --disable-indev=NAME     disable input device NAME
144
  --disable-outdev=NAME    disable output device NAME
145
  --disable-indevs         disable input devices
146
  --disable-outdevs        disable output devices
147
  --disable-devices        disable all devices
148
  --enable-filter=NAME     enable filter NAME
149
  --disable-filter=NAME    disable filter NAME
150
  --disable-filters        disable all filters
151
  --list-decoders          show all available decoders
152
  --list-encoders          show all available encoders
153
  --list-hwaccels          show all available hardware accelerators
154
  --list-muxers            show all available muxers
155
  --list-demuxers          show all available demuxers
156
  --list-parsers           show all available parsers
157
  --list-protocols         show all available protocols
158
  --list-bsfs              show all available bitstream filters
159
  --list-indevs            show all available input devices
160
  --list-outdevs           show all available output devices
161
  --list-filters           show all available filters
162

    
163
External library support:
164
  --enable-avisynth        enable reading of AVISynth script files [no]
165
  --enable-bzlib           enable bzlib [autodetect]
166
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
167
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
168
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
169
                           and libraw1394 [no]
170
  --enable-libdirac        enable Dirac support via libdirac [no]
171
  --enable-libfaac         enable FAAC support via libfaac [no]
172
  --enable-libfaad         enable FAAD support via libfaad [no]
173
  --enable-libfaadbin      open libfaad.so.0 at runtime [no]
174
  --enable-libgsm          enable GSM support via libgsm [no]
175
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
176
  --enable-libnut          enable NUT (de)muxing via libnut,
177
                           native (de)muxer exists [no]
178
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
179
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
180
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
181
  --enable-libspeex        enable Speex decoding via libspeex [no]
182
  --enable-libtheora       enable Theora encoding via libtheora [no]
183
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
184
                           native implementation exists [no]
185
  --enable-libvpx          enable VP8 support via libvpx [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
    bzlib
897
    dct
898
    doc
899
    dwt
900
    dxva2
901
    fastdiv
902
    ffmpeg
903
    ffplay
904
    ffprobe
905
    ffserver
906
    fft
907
    golomb
908
    gpl
909
    gprof
910
    gray
911
    h264dsp
912
    hardcoded_tables
913
    libdc1394
914
    libdirac
915
    libfaac
916
    libfaad
917
    libfaadbin
918
    libgsm
919
    libmp3lame
920
    libnut
921
    libopencore_amrnb
922
    libopencore_amrwb
923
    libopenjpeg
924
    librtmp
925
    libschroedinger
926
    libspeex
927
    libtheora
928
    libvorbis
929
    libvpx
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_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
libvpx_decoder_deps="libvpx"
1353
libvpx_encoder_deps="libvpx"
1354
libx264_encoder_deps="libx264"
1355
libxvid_encoder_deps="libxvid"
1356

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

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

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

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

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

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

    
1435
doc_deps="texi2html"
1436

    
1437
# default parameters
1438

    
1439
logfile="config.err"
1440

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

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

    
1462
nm_opts='-g'
1463

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

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

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

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

    
1509
CC_O='-o $@'
1510

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

    
1514
target_path='$(CURDIR)'
1515

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

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

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

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

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

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

    
1567
enable $ARCH_EXT_LIST
1568

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

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

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

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

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

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

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

    
1649
set_default arch target_os
1650

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

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

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

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

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

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

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

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

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

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

    
1704
unset -f mktemp
1705

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

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

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

    
1858
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1859

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

    
1865
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1866
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1867

    
1868
add_cflags $extra_cflags
1869
add_asflags $extra_cflags
1870

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

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

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

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

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

    
1949
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1950
enable $arch
1951

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

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

    
1997
elif enabled x86; then
1998

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

    
2023
elif enabled sparc; then
2024

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

    
2035
elif enabled arm; then
2036

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

    
2046
elif enabled alpha; then
2047

    
2048
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2049

    
2050
elif enabled bfin; then
2051

    
2052
    cpuflags="-mcpu=$cpu"
2053

    
2054
elif enabled mips; then
2055

    
2056
    cpuflags="-march=$cpu"
2057

    
2058
elif enabled avr32; then
2059

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

    
2079
fi
2080

    
2081
add_cflags $cpuflags
2082
add_asflags $cpuflags
2083

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

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

    
2106
check_host_cflags -std=c99
2107

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

    
2123
enable $subarch
2124
enabled spic && enable pic
2125

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

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

    
2278
set_default $PATHS_LIST
2279

    
2280
add_extralibs $osextralibs
2281

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

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

    
2296
disabled static && LIBNAME=""
2297

    
2298
if enabled_any libfaad libfaadbin ; then
2299
    if check_header faad.h; then
2300
        check_cc <<EOF
2301
#include <faad.h>
2302
#ifndef FAAD2_VERSION
2303
ok faad1
2304
#endif
2305
int main(void) { return 0; }
2306
EOF
2307
        test $? = 0 && enable libfaad2
2308
    else
2309
        die "FAAD test failed."
2310
    fi
2311
fi
2312

    
2313

    
2314
die_license_disabled() {
2315
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2316
}
2317

    
2318
die_license_disabled gpl libfaad2
2319
die_license_disabled gpl libx264
2320
die_license_disabled gpl libxvid
2321
die_license_disabled gpl postproc
2322
die_license_disabled gpl x11grab
2323

    
2324
die_license_disabled nonfree libfaac
2325

    
2326
die_license_disabled version3 libopencore_amrnb
2327
die_license_disabled version3 libopencore_amrwb
2328

    
2329
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2330

    
2331
check_deps $ARCH_EXT_LIST
2332

    
2333
disabled optimizations || check_cflags -fomit-frame-pointer
2334

    
2335
enable_pic() {
2336
    enable pic
2337
    add_cppflags -DPIC
2338
    add_cflags   -fPIC
2339
    add_asflags  -fPIC
2340
}
2341

    
2342
enabled pic && enable_pic
2343

    
2344
check_cc <<EOF || die "Symbol mangling check failed."
2345
int ff_extern;
2346
EOF
2347
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2348
extern_prefix=${sym%%ff_extern*}
2349

    
2350
check_cc <<EOF && enable inline_asm
2351
void foo(void) { __asm__ volatile ("" ::); }
2352
EOF
2353

    
2354
_restrict=
2355
for restrict_keyword in restrict __restrict__ __restrict; do
2356
    check_cc <<EOF && _restrict=$restrict_keyword && break
2357
void foo(char * $restrict_keyword p);
2358
EOF
2359
done
2360

    
2361
check_cc <<EOF && enable attribute_packed
2362
struct { int x; } __attribute__((packed)) x;
2363
EOF
2364

    
2365
check_cc <<EOF && enable attribute_may_alias
2366
union { int x; } __attribute__((may_alias)) x;
2367
EOF
2368

    
2369
check_cc <<EOF || die "endian test failed"
2370
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2371
EOF
2372
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2373

    
2374
if enabled alpha; then
2375

    
2376
    check_cflags -mieee
2377

    
2378
elif enabled arm; then
2379

    
2380
    check_cflags -marm
2381

    
2382
    check_ld <<EOF && enable vfp_args
2383
__asm__ (".eabi_attribute 28, 1");
2384
int main(void) { return 0; }
2385
EOF
2386

    
2387
    # We have to check if pld is a nop and disable it.
2388
    check_asm pld '"pld [r0]"'
2389

    
2390
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2391
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2392
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2393
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2394
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2395
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2396

    
2397
    enabled_all armv6t2 shared !pic && enable_pic
2398

    
2399
elif enabled mips; then
2400

    
2401
    check_asm loongson '"dmult.g $1, $2, $3"'
2402
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2403

    
2404
elif enabled ppc; then
2405

    
2406
    enable local_aligned_8 local_aligned_16
2407

    
2408
    check_asm dcbzl     '"dcbzl 0, 1"'
2409
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2410
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2411

    
2412
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2413
    if enabled altivec; then
2414
        check_cflags -maltivec -mabi=altivec &&
2415
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2416
        check_cflags -faltivec
2417

    
2418
        # check if our compiler supports Motorola AltiVec C API
2419
        check_cc <<EOF || disable altivec
2420
$inc_altivec_h
2421
int main(void) {
2422
    vector signed int v1, v2, v3;
2423
    v1 = vec_add(v2,v3);
2424
    return 0;
2425
}
2426
EOF
2427

    
2428
        # check if our compiler supports braces for vector declarations
2429
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2430
$inc_altivec_h
2431
int main (void) { (vector int) {1}; return 0; }
2432
EOF
2433
    fi
2434

    
2435
elif enabled sparc; then
2436

    
2437
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2438
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2439

    
2440
elif enabled x86; then
2441

    
2442
    enable local_aligned_8 local_aligned_16
2443

    
2444
    # check whether EBP is available on x86
2445
    # As 'i' is stored on the stack, this program will crash
2446
    # if the base pointer is used to access it because the
2447
    # base pointer is cleared in the inline assembly code.
2448
    check_exec_crash <<EOF && enable ebp_available
2449
    volatile int i=0;
2450
    __asm__ volatile (
2451
        "xorl %%ebp, %%ebp"
2452
    ::: "%ebp");
2453
    return i;
2454
EOF
2455

    
2456
    # check whether EBX is available on x86
2457
    check_asm ebx_available '""::"b"(0)' &&
2458
        check_asm ebx_available '"":::"%ebx"'
2459

    
2460
    # check whether more than 10 operands are supported
2461
    check_cc <<EOF && enable ten_operands
2462
int main(void) {
2463
    int x=0;
2464
    __asm__ volatile(
2465
        ""
2466
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2467
    );
2468
    return 0;
2469
}
2470
EOF
2471

    
2472
    # check whether binutils is new enough to compile SSSE3/MMX2
2473
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2474
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2475

    
2476
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2477

    
2478
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2479
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2480
    enabled     pic           && append YASMFLAGS "-DPIC"
2481
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2482
    case "$objformat" in
2483
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2484
    esac
2485
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2486

    
2487
    case "$cpu" in
2488
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2489
            disable fast_clz
2490
        ;;
2491
    esac
2492

    
2493
fi
2494

    
2495
if check_func dlopen; then
2496
    ldl=
2497
elif check_func dlopen -ldl; then
2498
    ldl=-ldl
2499
fi
2500

    
2501
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2502
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2503

    
2504
check_func  fork
2505
check_func  getaddrinfo $network_extralibs
2506
check_func  gethrtime
2507
check_func  getrusage
2508
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2509
check_func  inet_aton $network_extralibs
2510
check_func  isatty
2511
check_func  ${malloc_prefix}memalign            && enable memalign
2512
check_func  mkstemp
2513
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2514
check_func  setrlimit
2515
check_func  strerror_r
2516
check_func_headers io.h setmode
2517
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2518
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2519
check_func_headers windows.h GetProcessTimes
2520
check_func_headers windows.h VirtualAlloc
2521

    
2522
check_header conio.h
2523
check_header dlfcn.h
2524
check_header dxva2api.h
2525
check_header malloc.h
2526
check_header poll.h
2527
check_header sys/mman.h
2528
check_header sys/resource.h
2529
check_header sys/select.h
2530
check_header termios.h
2531
check_header vdpau/vdpau.h
2532
check_header vdpau/vdpau_x11.h
2533
check_header X11/extensions/XvMClib.h
2534

    
2535
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2536

    
2537
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2538
     enabled_any $need_memalign ; then
2539
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2540
fi
2541

    
2542
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2543
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2544

    
2545
# check for some common methods of building with pthread support
2546
# do this before the optional library checks as some of them require pthreads
2547
if enabled pthreads; then
2548
    if check_func pthread_create; then
2549
        :
2550
    elif check_func pthread_create -pthread; then
2551
        add_cflags -pthread
2552
        add_extralibs -pthread
2553
    elif check_func pthread_create -pthreads; then
2554
        add_cflags -pthreads
2555
        add_extralibs -pthreads
2556
    elif check_func pthread_create -lpthreadGC2; then
2557
        add_extralibs -lpthreadGC2
2558
    elif ! check_lib pthread.h pthread_create -lpthread; then
2559
        die "ERROR: can't find pthreads library"
2560
    fi
2561
fi
2562

    
2563
for thread in $THREADS_LIST; do
2564
    if enabled $thread; then
2565
        test -n "$thread_type" &&
2566
            die "ERROR: Only one thread type must be selected." ||
2567
            thread_type="$thread"
2568
    fi
2569
done
2570

    
2571
check_lib math.h sin -lm
2572
disabled vaapi || check_lib va/va.h vaInitialize -lva
2573

    
2574
check_mathfunc exp2
2575
check_mathfunc exp2f
2576
check_mathfunc llrint
2577
check_mathfunc llrintf
2578
check_mathfunc log2
2579
check_mathfunc log2f
2580
check_mathfunc lrint
2581
check_mathfunc lrintf
2582
check_mathfunc round
2583
check_mathfunc roundf
2584
check_mathfunc truncf
2585

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

    
2613
# libdc1394 check
2614
if enabled libdc1394; then
2615
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2616
        enable libdc1394_2; } ||
2617
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2618
        enable libdc1394_1; } ||
2619
    die "ERROR: No version of libdc1394 found "
2620
fi
2621

    
2622
SDL_CONFIG="${cross_prefix}sdl-config"
2623
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2624
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2625
    sdl_libs=$("${SDL_CONFIG}" --libs)
2626
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2627
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2628
    enable sdl &&
2629
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2630
fi
2631

    
2632
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2633

    
2634
if enabled network; then
2635
    check_type "sys/types.h sys/socket.h" socklen_t
2636
    check_type netdb.h "struct addrinfo"
2637
    check_type netinet/in.h "struct ipv6_mreq"
2638
    check_type netinet/in.h "struct sockaddr_in6"
2639
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2640
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2641
    # Prefer arpa/inet.h over winsock2
2642
    if check_header arpa/inet.h ; then
2643
        check_func closesocket
2644
    elif check_header winsock2.h ; then
2645
        check_func_headers winsock2.h closesocket -lws2 && \
2646
            network_extralibs="-lws2" || \
2647
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2648
            network_extralibs="-lws2_32"; }
2649
        check_type ws2tcpip.h socklen_t
2650
        check_type ws2tcpip.h "struct addrinfo"
2651
        check_type ws2tcpip.h "struct ipv6_mreq"
2652
        check_type ws2tcpip.h "struct sockaddr_in6"
2653
        check_type ws2tcpip.h "struct sockaddr_storage"
2654
        check_struct winsock2.h "struct sockaddr" sa_len
2655
    else
2656
        disable network
2657
    fi
2658
fi
2659

    
2660
check_header linux/videodev.h
2661
check_header linux/videodev2.h
2662
check_header sys/videoio.h
2663

    
2664
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2665

    
2666
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2667
{ check_header dev/bktr/ioctl_meteor.h &&
2668
  check_header dev/bktr/ioctl_bt848.h; } ||
2669
{ check_header machine/ioctl_meteor.h &&
2670
  check_header machine/ioctl_bt848.h; } ||
2671
{ check_header dev/video/meteor/ioctl_meteor.h &&
2672
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2673
check_header dev/ic/bt8xx.h
2674

    
2675
check_header sys/soundcard.h
2676
check_header soundcard.h
2677

    
2678
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2679

    
2680
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2681

    
2682
enabled x11grab                         &&
2683
check_header X11/Xlib.h                 &&
2684
check_header X11/extensions/XShm.h      &&
2685
check_header X11/extensions/Xfixes.h    &&
2686
check_func XOpenDisplay -lX11           &&
2687
check_func XShmCreateImage -lX11 -lXext &&
2688
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2689

    
2690
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2691
check_cpp_condition \
2692
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2693
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2694
      disable vdpau; }
2695
fi
2696

    
2697
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2698

    
2699
# add some useful compiler flags if supported
2700
check_cflags -Wdeclaration-after-statement
2701
check_cflags -Wall
2702
check_cflags -Wno-switch
2703
check_cflags -Wdisabled-optimization
2704
check_cflags -Wpointer-arith
2705
check_cflags -Wredundant-decls
2706
check_cflags -Wno-pointer-sign
2707
check_cflags -Wcast-qual
2708
check_cflags -Wwrite-strings
2709
check_cflags -Wtype-limits
2710
check_cflags -Wundef
2711
check_cflags -Wmissing-prototypes
2712
enabled extra_warnings && check_cflags -Winline
2713

    
2714
# add some linker flags
2715
check_ldflags -Wl,--warn-common
2716
check_ldflags -Wl,--as-needed
2717
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'
2718
check_ldflags -Wl,-Bsymbolic
2719

    
2720
echo "X{};" > $TMPV
2721
test_ldflags -Wl,--version-script,$TMPV &&
2722
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2723

    
2724
if enabled small; then
2725
    add_cflags $size_cflags
2726
    optimizations="small"
2727
elif enabled optimizations; then
2728
    add_cflags $speed_cflags
2729
else
2730
    add_cflags $noopt_cflags
2731
fi
2732
check_cflags -fno-math-errno
2733
check_cflags -fno-signed-zeros
2734

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

    
2772
if enabled gprof; then
2773
    add_cflags  -p
2774
    add_ldflags -p
2775
fi
2776

    
2777
enabled_any $THREADS_LIST      && enable threads
2778

    
2779
check_deps $CONFIG_LIST       \
2780
           $CONFIG_EXTRA      \
2781
           $HAVE_LIST         \
2782
           $DECODER_LIST      \
2783
           $ENCODER_LIST      \
2784
           $HWACCEL_LIST      \
2785
           $PARSER_LIST       \
2786
           $BSF_LIST          \
2787
           $DEMUXER_LIST      \
2788
           $MUXER_LIST        \
2789
           $FILTER_LIST       \
2790
           $INDEV_LIST        \
2791
           $OUTDEV_LIST       \
2792
           $PROTOCOL_LIST     \
2793

    
2794
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2795

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

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

    
2888
license="LGPL version 2.1 or later"
2889
if enabled nonfree; then
2890
    license="nonfree and unredistributable"
2891
elif enabled gplv3; then
2892
    license="GPL version 3 or later"
2893
elif enabled lgplv3; then
2894
    license="LGPL version 3 or later"
2895
elif enabled gpl; then
2896
    license="GPL version 2 or later"
2897
fi
2898

    
2899
echo "License: $license"
2900

    
2901
echo "Creating config.mak and config.h..."
2902

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

    
2938
enabled stripping || strip="echo skipping strip"
2939

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

    
3012
get_version(){
3013
    name=$1
3014
    file=$source_path/$2
3015
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3016
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3017
    lcname=$(tolower $name)
3018
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3019
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3020
}
3021

    
3022
get_version LIBSWSCALE  libswscale/swscale.h
3023
get_version LIBPOSTPROC libpostproc/postprocess.h
3024
get_version LIBAVCODEC  libavcodec/avcodec.h
3025
get_version LIBAVDEVICE libavdevice/avdevice.h
3026
get_version LIBAVFORMAT libavformat/avformat.h
3027
get_version LIBAVUTIL   libavutil/avutil.h
3028
get_version LIBAVFILTER libavfilter/avfilter.h
3029

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

    
3045
test -n "$malloc_prefix" &&
3046
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3047

    
3048
if enabled small || disabled optimizations; then
3049
    echo "#undef  av_always_inline"  >> $TMPH
3050
    echo "#define av_always_inline"  >> $TMPH
3051
fi
3052

    
3053
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3054
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3055
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3056
                                      $CONFIG_EXTRA      \
3057
                                      $DECODER_LIST      \
3058
                                      $ENCODER_LIST      \
3059
                                      $HWACCEL_LIST      \
3060
                                      $PARSER_LIST       \
3061
                                      $BSF_LIST          \
3062
                                      $DEMUXER_LIST      \
3063
                                      $MUXER_LIST        \
3064
                                      $FILTER_LIST       \
3065
                                      $PROTOCOL_LIST     \
3066
                                      $INDEV_LIST        \
3067
                                      $OUTDEV_LIST       \
3068

    
3069
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3070
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3071

    
3072
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3073
cp_if_changed $TMPH config.h
3074

    
3075
cat > $TMPH <<EOF
3076
/* Generated by ffconf */
3077
#ifndef AVUTIL_AVCONFIG_H
3078
#define AVUTIL_AVCONFIG_H
3079
EOF
3080

    
3081
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3082

    
3083
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3084

    
3085
cp_if_changed $TMPH libavutil/avconfig.h
3086

    
3087
# build pkg-config files
3088

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

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

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

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