Statistics
| Branch: | Revision:

ffmpeg / configure @ 9c6b3b97

History | View | Annotate | Download (88.5 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
960
THREADS_LIST='
961
    beosthreads
962
    os2threads
963
    pthreads
964
    w32threads
965
'
966

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

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

    
1010
HAVE_LIST_PUB='
1011
    bigendian
1012
'
1013

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

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

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

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

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

    
1166
CMDLINE_APPEND="
1167
    extra_cflags
1168
"
1169

    
1170
# code dependency declarations
1171

    
1172
# architecture extensions
1173

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

    
1181
mmi_deps="mips"
1182

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

    
1186
vis_deps="sparc"
1187

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

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

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

    
1203
# subsystems
1204
mdct_select="fft"
1205
rdft_select="fft"
1206

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

    
1325
vaapi_deps="va_va_h"
1326
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1327

    
1328
# parsers
1329
h264_parser_select="golomb h264dsp"
1330

    
1331
# bitstream_filters
1332
aac_adtstoasc_bsf_select="aac_parser"
1333

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

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

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

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

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

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

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

    
2295
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2296

    
2297
set_default $PATHS_LIST
2298

    
2299
add_extralibs $osextralibs
2300

    
2301
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2302
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2303

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

    
2315
disabled static && LIBNAME=""
2316

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

    
2332

    
2333
die_license_disabled() {
2334
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2335
}
2336

    
2337
die_license_disabled gpl libfaad2
2338
die_license_disabled gpl libx264
2339
die_license_disabled gpl libxvid
2340
die_license_disabled gpl postproc
2341
die_license_disabled gpl x11grab
2342

    
2343
die_license_disabled nonfree libfaac
2344

    
2345
die_license_disabled version3 libopencore_amrnb
2346
die_license_disabled version3 libopencore_amrwb
2347

    
2348
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2349

    
2350
check_deps $ARCH_EXT_LIST
2351

    
2352
disabled optimizations || check_cflags -fomit-frame-pointer
2353

    
2354
enable_pic() {
2355
    enable pic
2356
    add_cppflags -DPIC
2357
    add_cflags   -fPIC
2358
    add_asflags  -fPIC
2359
}
2360

    
2361
enabled pic && enable_pic
2362

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

    
2369
check_cc <<EOF && enable inline_asm
2370
void foo(void) { __asm__ volatile ("" ::); }
2371
EOF
2372

    
2373
_restrict=
2374
for restrict_keyword in restrict __restrict__ __restrict; do
2375
    check_cc <<EOF && _restrict=$restrict_keyword && break
2376
void foo(char * $restrict_keyword p);
2377
EOF
2378
done
2379

    
2380
check_cc <<EOF && enable attribute_packed
2381
struct { int x; } __attribute__((packed)) x;
2382
EOF
2383

    
2384
check_cc <<EOF && enable attribute_may_alias
2385
union { int x; } __attribute__((may_alias)) x;
2386
EOF
2387

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

    
2393
if enabled alpha; then
2394

    
2395
    check_cflags -mieee
2396

    
2397
elif enabled arm; then
2398

    
2399
    check_cflags -marm
2400

    
2401
    check_ld <<EOF && enable vfp_args
2402
__asm__ (".eabi_attribute 28, 1");
2403
int main(void) { return 0; }
2404
EOF
2405

    
2406
    # We have to check if pld is a nop and disable it.
2407
    check_asm pld '"pld [r0]"'
2408

    
2409
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2410
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2411
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2412
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2413
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2414
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2415

    
2416
    enabled_all armv6t2 shared !pic && enable_pic
2417

    
2418
elif enabled mips; then
2419

    
2420
    check_asm loongson '"dmult.g $1, $2, $3"'
2421
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2422

    
2423
elif enabled ppc; then
2424

    
2425
    enable local_aligned_8 local_aligned_16
2426

    
2427
    check_asm dcbzl     '"dcbzl 0, 1"'
2428
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2429
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2430

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

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

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

    
2454
elif enabled sparc; then
2455

    
2456
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2457
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2458

    
2459
elif enabled x86; then
2460

    
2461
    enable local_aligned_8 local_aligned_16
2462

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

    
2475
    # check whether EBX is available on x86
2476
    check_asm ebx_available '""::"b"(0)' &&
2477
        check_asm ebx_available '"":::"%ebx"'
2478

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

    
2491
    # check whether binutils is new enough to compile SSSE3/MMX2
2492
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2493
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2494

    
2495
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2496

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

    
2506
    case "$cpu" in
2507
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2508
            disable fast_clz
2509
        ;;
2510
    esac
2511

    
2512
fi
2513

    
2514
if check_func dlopen; then
2515
    ldl=
2516
elif check_func dlopen -ldl; then
2517
    ldl=-ldl
2518
fi
2519

    
2520
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2521
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2522

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

    
2541
check_header conio.h
2542
check_header dlfcn.h
2543
check_header dxva2api.h
2544
check_header malloc.h
2545
check_header poll.h
2546
check_header sys/mman.h
2547
check_header sys/resource.h
2548
check_header sys/select.h
2549
check_header termios.h
2550
check_header vdpau/vdpau.h
2551
check_header vdpau/vdpau_x11.h
2552
check_header X11/extensions/XvMClib.h
2553

    
2554
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2555

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

    
2561
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2562
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2563

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

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

    
2590
check_lib math.h sin -lm
2591
check_lib va/va.h vaInitialize -lva
2592

    
2593
check_mathfunc exp2
2594
check_mathfunc exp2f
2595
check_mathfunc llrint
2596
check_mathfunc llrintf
2597
check_mathfunc log2
2598
check_mathfunc log2f
2599
check_mathfunc lrint
2600
check_mathfunc lrintf
2601
check_mathfunc round
2602
check_mathfunc roundf
2603
check_mathfunc truncf
2604

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

    
2631
# libdc1394 check
2632
if enabled libdc1394; then
2633
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2634
        enable libdc1394_2; } ||
2635
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2636
        enable libdc1394_1; } ||
2637
    die "ERROR: No version of libdc1394 found "
2638
fi
2639

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

    
2650
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2651

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

    
2678
check_header linux/videodev.h
2679
check_header linux/videodev2.h
2680
check_header sys/videoio.h
2681

    
2682
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2683

    
2684
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2685
{ check_header dev/bktr/ioctl_meteor.h &&
2686
  check_header dev/bktr/ioctl_bt848.h; } ||
2687
{ check_header machine/ioctl_meteor.h &&
2688
  check_header machine/ioctl_bt848.h; } ||
2689
{ check_header dev/video/meteor/ioctl_meteor.h &&
2690
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2691
check_header dev/ic/bt8xx.h
2692

    
2693
check_header sys/soundcard.h
2694
check_header soundcard.h
2695

    
2696
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2697

    
2698
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2699

    
2700
enabled x11grab                         &&
2701
check_header X11/Xlib.h                 &&
2702
check_header X11/extensions/XShm.h      &&
2703
check_header X11/extensions/Xfixes.h    &&
2704
check_func XOpenDisplay -lX11           &&
2705
check_func XShmCreateImage -lX11 -lXext &&
2706
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2707

    
2708
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2709
check_cpp_condition \
2710
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2711
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2712
      disable vdpau; }
2713
fi
2714

    
2715
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2716

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

    
2732
# add some linker flags
2733
check_ldflags -Wl,--warn-common
2734
check_ldflags -Wl,--as-needed
2735
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'
2736
check_ldflags -Wl,-Bsymbolic
2737

    
2738
echo "X{};" > $TMPV
2739
test_ldflags -Wl,--version-script,$TMPV &&
2740
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2741

    
2742
if enabled small; then
2743
    add_cflags $size_cflags
2744
    optimizations="small"
2745
elif enabled optimizations; then
2746
    add_cflags $speed_cflags
2747
else
2748
    add_cflags $noopt_cflags
2749
fi
2750
check_cflags -fno-math-errno
2751
check_cflags -fno-signed-zeros
2752

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

    
2790
if enabled gprof; then
2791
    add_cflags  -p
2792
    add_ldflags -p
2793
fi
2794

    
2795
# Find out if the .align argument is a power of two or not.
2796
check_asm asmalign_pot '".align 3"'
2797

    
2798
enabled_any $THREADS_LIST      && enable threads
2799

    
2800
check_deps $CONFIG_LIST       \
2801
           $CONFIG_EXTRA      \
2802
           $HAVE_LIST         \
2803
           $DECODER_LIST      \
2804
           $ENCODER_LIST      \
2805
           $HWACCEL_LIST      \
2806
           $PARSER_LIST       \
2807
           $BSF_LIST          \
2808
           $DEMUXER_LIST      \
2809
           $MUXER_LIST        \
2810
           $FILTER_LIST       \
2811
           $INDEV_LIST        \
2812
           $OUTDEV_LIST       \
2813
           $PROTOCOL_LIST     \
2814

    
2815
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2816

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

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

    
2910
license="LGPL version 2.1 or later"
2911
if enabled nonfree; then
2912
    license="nonfree and unredistributable"
2913
elif enabled gplv3; then
2914
    license="GPL version 3 or later"
2915
elif enabled lgplv3; then
2916
    license="LGPL version 3 or later"
2917
elif enabled gpl; then
2918
    license="GPL version 2 or later"
2919
fi
2920

    
2921
echo "License: $license"
2922

    
2923
echo "Creating config.mak and config.h..."
2924

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

    
2960
enabled stripping || strip="echo skipping strip"
2961

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

    
3034
get_version(){
3035
    name=$1
3036
    file=$source_path/$2
3037
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3038
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3039
    lcname=$(tolower $name)
3040
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3041
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3042
}
3043

    
3044
get_version LIBSWSCALE  libswscale/swscale.h
3045
get_version LIBPOSTPROC libpostproc/postprocess.h
3046
get_version LIBAVCODEC  libavcodec/avcodec.h
3047
get_version LIBAVDEVICE libavdevice/avdevice.h
3048
get_version LIBAVFORMAT libavformat/avformat.h
3049
get_version LIBAVUTIL   libavutil/avutil.h
3050
get_version LIBAVFILTER libavfilter/avfilter.h
3051

    
3052
enabled asmalign_pot || align_shift="1 <<"
3053

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

    
3069
test -n "$malloc_prefix" &&
3070
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3071

    
3072
if enabled small || disabled optimizations; then
3073
    echo "#undef  av_always_inline"  >> $TMPH
3074
    echo "#define av_always_inline"  >> $TMPH
3075
fi
3076

    
3077
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3078
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3079
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3080
                                      $CONFIG_EXTRA      \
3081
                                      $DECODER_LIST      \
3082
                                      $ENCODER_LIST      \
3083
                                      $HWACCEL_LIST      \
3084
                                      $PARSER_LIST       \
3085
                                      $BSF_LIST          \
3086
                                      $DEMUXER_LIST      \
3087
                                      $MUXER_LIST        \
3088
                                      $FILTER_LIST       \
3089
                                      $PROTOCOL_LIST     \
3090
                                      $INDEV_LIST        \
3091
                                      $OUTDEV_LIST       \
3092

    
3093
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3094
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3095

    
3096
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3097
cp_if_changed $TMPH config.h
3098

    
3099
cat > $TMPH <<EOF
3100
/* Generated by ffconf */
3101
#ifndef AVUTIL_AVCONFIG_H
3102
#define AVUTIL_AVCONFIG_H
3103
EOF
3104

    
3105
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3106

    
3107
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3108

    
3109
cp_if_changed $TMPH libavutil/avconfig.h
3110

    
3111
# build pkg-config files
3112

    
3113
pkgconfig_generate(){
3114
name=$1
3115
shortname=${name#lib}${build_suffix}
3116
comment=$2
3117
version=$3
3118
libs=$4
3119
requires=$5
3120
cat <<EOF > $name/$name.pc
3121
prefix=$prefix
3122
exec_prefix=\${prefix}
3123
libdir=$libdir
3124
includedir=$incdir
3125

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

    
3142
Name: $name
3143
Description: $comment
3144
Version: $version
3145
Requires: $requires
3146
Conflicts:
3147
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3148
Cflags: -I\${includedir}
3149
EOF
3150
}
3151

    
3152
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3153
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3154
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3155
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3156
enabled avfilter &&
3157
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3158
enabled postproc &&
3159
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3160
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"