Statistics
| Branch: | Revision:

ffmpeg / configure @ e0e335a0

History | View | Annotate | Download (88.8 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
  --enable-avfilter        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-libschroedinger enable Dirac support via libschroedinger [no]
181
  --enable-libspeex        enable Speex decoding via libspeex [no]
182
  --enable-libtheora       enable Theora encoding via libtheora [no]
183
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
184
                           native implementation exists [no]
185
  --enable-libx264         enable H.264 encoding via x264 [no]
186
  --enable-libxvid         enable Xvid encoding via xvidcore,
187
                           native MPEG-4/Xvid encoder exists [no]
188
  --enable-mlib            enable Sun medialib [no]
189
  --enable-zlib            enable zlib [autodetect]
190

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

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

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

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

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

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

    
268
die(){
269
    echolog "$@"
270
    cat <<EOF
271

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

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

    
295
tolower(){
296
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
297
}
298

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

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

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

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

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

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

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

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

    
358
enable(){
359
    set_all yes $*
360
}
361

    
362
disable(){
363
    set_all no $*
364
}
365

    
366
enable_weak(){
367
    set_weak yes $*
368
}
369

    
370
disable_weak(){
371
    set_weak no $*
372
}
373

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

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

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

    
399
enable_deep(){
400
    do_enable_deep $*
401
    enable $*
402
}
403

    
404
enable_deep_weak(){
405
    do_enable_deep $*
406
    enable_weak $*
407
}
408

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

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

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

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

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

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

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

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

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

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

    
473
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
474
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
475
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
476

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

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

    
490
        disable ${cfg}_checking
491
    done
492
}
493

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

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

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

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

    
532
temp_cflags(){
533
    save_flags
534
    CFLAGS="$CFLAGS $*"
535
}
536

    
537
temp_ldflags(){
538
    save_flags
539
    LDFLAGS="$LDFLAGS $*"
540
}
541

    
542
temp_extralibs(){
543
    save_flags
544
    extralibs="$extralibs $*"
545
}
546

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

    
554
add_cppflags(){
555
    append CPPFLAGS $($filter_cppflags "$@")
556
}
557

    
558
add_cflags(){
559
    append CFLAGS $($filter_cflags "$@")
560
}
561

    
562
add_asflags(){
563
    append ASFLAGS $($filter_asflags "$@")
564
}
565

    
566
add_ldflags(){
567
    append LDFLAGS "$@"
568
}
569

    
570
add_extralibs(){
571
    append extralibs "$@"
572
}
573

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

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

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

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

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

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

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

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

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

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

    
653
check_ldflags(){
654
    log check_ldflags "$@"
655
    test_ldflags "$@" && add_ldflags "$@"
656
}
657

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

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

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

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

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

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

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

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

    
748
check_exec_crash(){
749
    code=$(cat)
750

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
955
THREADS_LIST='
956
    beosthreads
957
    os2threads
958
    pthreads
959
    w32threads
960
'
961

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

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

    
1005
HAVE_LIST_PUB='
1006
    bigendian
1007
'
1008

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

    
1098
# options emitted with CONFIG_ prefix but not available on command line
1099
CONFIG_EXTRA="
1100
    avutil
1101
    gplv3
1102
    lgplv3
1103
"
1104

    
1105
CMDLINE_SELECT="
1106
    $ARCH_EXT_LIST
1107
    $CONFIG_LIST
1108
    $THREADS_LIST
1109
    asm
1110
    cross_compile
1111
    debug
1112
    extra_warnings
1113
    logging
1114
    optimizations
1115
    stripping
1116
    yasm
1117
"
1118

    
1119
PATHS_LIST='
1120
    bindir
1121
    datadir
1122
    incdir
1123
    libdir
1124
    mandir
1125
    prefix
1126
    shlibdir
1127
'
1128

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

    
1158
CMDLINE_APPEND="
1159
    extra_cflags
1160
"
1161

    
1162
# code dependency declarations
1163

    
1164
# architecture extensions
1165

    
1166
armv5te_deps="arm"
1167
armv6_deps="arm"
1168
armv6t2_deps="arm"
1169
armvfp_deps="arm"
1170
iwmmxt_deps="arm"
1171
neon_deps="arm"
1172

    
1173
mmi_deps="mips"
1174

    
1175
altivec_deps="ppc"
1176
ppc4xx_deps="ppc"
1177

    
1178
vis_deps="sparc"
1179

    
1180
x86_64_suggest="cmov fast_cmov"
1181
amd3dnow_deps="mmx"
1182
amd3dnowext_deps="amd3dnow"
1183
mmx_deps="x86"
1184
mmx2_deps="mmx"
1185
sse_deps="mmx"
1186
ssse3_deps="sse"
1187

    
1188
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1189
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1190
fast_unaligned_if_any="armv6 ppc x86"
1191

    
1192
need_memalign="altivec neon sse"
1193
inline_asm_deps="!tms470"
1194

    
1195
# subsystems
1196
mdct_select="fft"
1197
rdft_select="fft"
1198

    
1199
# decoders / encoders / hardware accelerators
1200
aac_decoder_select="mdct rdft aac_parser"
1201
aac_encoder_select="mdct"
1202
ac3_decoder_select="mdct ac3_parser"
1203
alac_encoder_select="lpc"
1204
amrnb_decoder_select="lsp"
1205
atrac1_decoder_select="mdct"
1206
atrac3_decoder_select="mdct"
1207
binkaudio_dct_decoder_select="mdct rdft dct"
1208
binkaudio_rdft_decoder_select="mdct rdft"
1209
cavs_decoder_select="golomb"
1210
cook_decoder_select="mdct"
1211
cscd_decoder_suggest="zlib"
1212
dca_decoder_select="mdct"
1213
dnxhd_encoder_select="aandct"
1214
dxa_decoder_select="zlib"
1215
eac3_decoder_select="ac3_decoder"
1216
eamad_decoder_select="aandct"
1217
eatgq_decoder_select="aandct"
1218
eatqi_decoder_select="aandct"
1219
ffv1_decoder_select="golomb"
1220
flac_decoder_select="golomb"
1221
flac_encoder_select="golomb lpc"
1222
flashsv_decoder_select="zlib"
1223
flashsv_encoder_select="zlib"
1224
flv_decoder_select="h263_decoder"
1225
flv_encoder_select="h263_encoder"
1226
h261_encoder_select="aandct"
1227
h263_decoder_select="h263_parser"
1228
h263_encoder_select="aandct"
1229
h263_vaapi_hwaccel_deps="va_va_h"
1230
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1231
h263i_decoder_select="h263_decoder"
1232
h263p_encoder_select="h263_encoder"
1233
h264_decoder_select="golomb h264dsp"
1234
h264_dxva2_hwaccel_deps="dxva2api_h"
1235
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1236
h264_vaapi_hwaccel_deps="va_va_h"
1237
h264_vaapi_hwaccel_select="vaapi"
1238
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1239
h264_vdpau_decoder_select="vdpau h264_decoder"
1240
imc_decoder_select="fft mdct"
1241
jpegls_decoder_select="golomb"
1242
jpegls_encoder_select="golomb"
1243
ljpeg_encoder_select="aandct"
1244
loco_decoder_select="golomb"
1245
mjpeg_encoder_select="aandct"
1246
mlp_decoder_select="mlp_parser"
1247
mpeg1video_encoder_select="aandct"
1248
mpeg2video_encoder_select="aandct"
1249
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1250
mpeg4_encoder_select="h263_encoder"
1251
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1252
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1253
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1254
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1255
mpeg2_vaapi_hwaccel_deps="va_va_h"
1256
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1257
mpeg4_vaapi_hwaccel_deps="va_va_h"
1258
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1259
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
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_deps="va_va_h"
1301
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1302
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1303
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1304
vorbis_decoder_select="mdct"
1305
vorbis_encoder_select="mdct"
1306
vp6a_decoder_select="vp6_decoder"
1307
vp6f_decoder_select="vp6_decoder"
1308
wmapro_decoder_select="mdct"
1309
wmav1_decoder_select="mdct"
1310
wmav1_encoder_select="mdct"
1311
wmav2_decoder_select="mdct"
1312
wmav2_encoder_select="mdct"
1313
wmavoice_decoder_select="lsp"
1314
wmv1_decoder_select="h263_decoder"
1315
wmv1_encoder_select="h263_encoder"
1316
wmv2_decoder_select="h263_decoder"
1317
wmv2_encoder_select="h263_encoder"
1318
wmv3_decoder_select="vc1_decoder"
1319
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1320
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1321
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1322
zlib_decoder_select="zlib"
1323
zlib_encoder_select="zlib"
1324
zmbv_decoder_select="zlib"
1325
zmbv_encoder_select="zlib"
1326

    
1327
# parsers
1328
h264_parser_select="golomb h264dsp"
1329

    
1330
# bitstream_filters
1331
aac_adtstoasc_bsf_select="aac_parser"
1332

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

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

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

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

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

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

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

    
1432
doc_deps="texi2html"
1433

    
1434
# default parameters
1435

    
1436
logfile="config.err"
1437

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

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

    
1459
nm_opts='-g'
1460

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

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

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

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

    
1505
CC_O='-o $@'
1506

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

    
1510
target_path='$(CURDIR)'
1511

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

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

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

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

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

    
1557
enable $ARCH_EXT_LIST \
1558
       $DECODER_LIST \
1559
       $ENCODER_LIST \
1560
       $HWACCEL_LIST \
1561
       $PARSER_LIST \
1562
       $BSF_LIST \
1563
       $DEMUXER_LIST \
1564
       $MUXER_LIST \
1565
       $FILTER_LIST \
1566
       $PROTOCOL_LIST \
1567
       $INDEV_LIST \
1568
       $OUTDEV_LIST \
1569

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

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

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

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

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

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

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

    
1650
set_default arch target_os
1651

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

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

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

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

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

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

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

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

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

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

    
1705
unset -f mktemp
1706

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

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

    
1724
if   $cc -v 2>&1 | grep -qi ^gcc; then
1725
    cc_type=gcc
1726
    cc_version=__VERSION__
1727
    if ! $cc -dumpversion | grep -q '^2\.'; then
1728
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1729
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1730
    fi
1731
    speed_cflags='-O3'
1732
    size_cflags='-Os'
1733
elif $cc --version 2>/dev/null | grep -q Intel; then
1734
    cc_type=icc
1735
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1736
    CC_DEPFLAGS='-MMD'
1737
    AS_DEPFLAGS='-MMD'
1738
    speed_cflags='-O3'
1739
    size_cflags='-Os'
1740
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)                       echo -xarch=sparc          ;;
1830
                        ultrasparc)               echo -xarch=sparcvis       ;;
1831
                        ultrasparc3|niagara*)     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 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
        sparc64)
2027
            cpuflags="-mcpu=v9"
2028
        ;;
2029
    esac
2030

    
2031
elif enabled arm; then
2032

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

    
2042
elif enabled alpha; then
2043

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

    
2046
elif enabled bfin; then
2047

    
2048
    cpuflags="-mcpu=$cpu"
2049

    
2050
elif enabled mips; then
2051

    
2052
    cpuflags="-march=$cpu"
2053

    
2054
elif enabled avr32; then
2055

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

    
2075
fi
2076

    
2077
add_cflags $cpuflags
2078
add_asflags $cpuflags
2079

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

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

    
2102
check_host_cflags -std=c99
2103

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

    
2119
enable $subarch
2120
enabled spic && enable pic
2121
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2122

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

    
2292
set_default $PATHS_LIST
2293

    
2294
add_extralibs $osextralibs
2295

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

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

    
2310
disabled static && LIBNAME=""
2311

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

    
2327

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

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

    
2338
die_license_disabled nonfree libfaac
2339

    
2340
die_license_disabled version3 libopencore_amrnb
2341
die_license_disabled version3 libopencore_amrwb
2342

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

    
2345
check_deps $ARCH_EXT_LIST
2346

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

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

    
2356
enabled pic && enable_pic
2357

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

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

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

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

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

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

    
2388
if enabled alpha; then
2389

    
2390
    check_cflags -mieee
2391

    
2392
elif enabled arm; then
2393

    
2394
    check_cflags -marm
2395

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

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

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

    
2411
    enabled_all armv6t2 shared !pic && enable_pic
2412

    
2413
elif enabled ia64; then
2414

    
2415
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2416
    enabled shared && enable_weak hardcoded_tables
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_headers io.h setmode
2535
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2536
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2537
check_func_headers windows.h GetProcessTimes
2538
check_func_headers windows.h VirtualAlloc
2539

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

    
2553
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2554

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2792
enabled_any $DECODER_LIST      && enable decoders
2793
enabled_any $ENCODER_LIST      && enable encoders
2794
enabled_any $HWACCEL_LIST      && enable hwaccels
2795
enabled_any $BSF_LIST          && enable bsfs
2796
enabled_any $DEMUXER_LIST      && enable demuxers
2797
enabled_any $MUXER_LIST        && enable muxers
2798
enabled_any $FILTER_LIST       && enable filters
2799
enabled_any $INDEV_LIST        && enable indevs
2800
enabled_any $OUTDEV_LIST       && enable outdevs
2801
enabled_any $PROTOCOL_LIST     && enable protocols
2802

    
2803
enabled_any $THREADS_LIST      && enable threads
2804

    
2805
check_deps $CONFIG_LIST       \
2806
           $CONFIG_EXTRA      \
2807
           $HAVE_LIST         \
2808
           $DECODER_LIST      \
2809
           $ENCODER_LIST      \
2810
           $HWACCEL_LIST      \
2811
           $PARSER_LIST       \
2812
           $BSF_LIST          \
2813
           $DEMUXER_LIST      \
2814
           $MUXER_LIST        \
2815
           $FILTER_LIST       \
2816
           $INDEV_LIST        \
2817
           $OUTDEV_LIST       \
2818
           $PROTOCOL_LIST     \
2819

    
2820
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2821

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

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

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

    
2924
echo "License: $license"
2925

    
2926
echo "Creating config.mak and config.h..."
2927

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

    
2962
enabled stripping || strip="echo skipping strip"
2963

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

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

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

    
3054
enabled asmalign_pot || align_shift="1 <<"
3055

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

    
3071
test -n "$malloc_prefix" &&
3072
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3073

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

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

    
3095
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3096
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3097

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

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

    
3107
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3108

    
3109
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3110

    
3111
cp_if_changed $TMPH libavutil/avconfig.h
3112

    
3113
# build pkg-config files
3114

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

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

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

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