Statistics
| Branch: | Revision:

ffmpeg / configure @ bb55e3a3

History | View | Annotate | Download (88.5 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
952
THREADS_LIST='
953
    beosthreads
954
    os2threads
955
    pthreads
956
    w32threads
957
'
958

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

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

    
1002
HAVE_LIST_PUB='
1003
    bigendian
1004
'
1005

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

    
1095
# options emitted with CONFIG_ prefix but not available on command line
1096
CONFIG_EXTRA="
1097
    avutil
1098
    gplv3
1099
    lgplv3
1100
"
1101

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

    
1116
PATHS_LIST='
1117
    bindir
1118
    datadir
1119
    incdir
1120
    libdir
1121
    mandir
1122
    prefix
1123
    shlibdir
1124
'
1125

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

    
1154
CMDLINE_APPEND="
1155
    extra_cflags
1156
"
1157

    
1158
# code dependency declarations
1159

    
1160
# architecture extensions
1161

    
1162
armv5te_deps="arm"
1163
armv6_deps="arm"
1164
armv6t2_deps="arm"
1165
armvfp_deps="arm"
1166
iwmmxt_deps="arm"
1167
neon_deps="arm"
1168

    
1169
mmi_deps="mips"
1170

    
1171
altivec_deps="ppc"
1172
ppc4xx_deps="ppc"
1173

    
1174
vis_deps="sparc"
1175

    
1176
x86_64_suggest="cmov fast_cmov"
1177
amd3dnow_deps="mmx"
1178
amd3dnowext_deps="amd3dnow"
1179
mmx_deps="x86"
1180
mmx2_deps="mmx"
1181
sse_deps="mmx"
1182
ssse3_deps="sse"
1183

    
1184
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1185
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1186
fast_unaligned_if_any="armv6 ppc x86"
1187

    
1188
need_memalign="altivec neon sse"
1189
inline_asm_deps="!tms470"
1190

    
1191
# subsystems
1192
mdct_select="fft"
1193
rdft_select="fft"
1194

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

    
1322
# parsers
1323
h264_parser_select="golomb"
1324

    
1325
# bitstream_filters
1326
aac_adtstoasc_bsf_select="aac_parser"
1327

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

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

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

    
1401
# protocols
1402
gopher_protocol_deps="network"
1403
http_protocol_deps="network"
1404
http_protocol_select="tcp_protocol"
1405
rtmp_protocol_deps="tcp_protocol"
1406
rtp_protocol_deps="udp_protocol"
1407
tcp_protocol_deps="network"
1408
udp_protocol_deps="network"
1409

    
1410
# filters
1411
movie_filter_deps="avfilter_lavf"
1412
avfilter_lavf_deps="avformat"
1413

    
1414
# libraries
1415
avdevice_deps="avcodec avformat"
1416
avformat_deps="avcodec"
1417

    
1418
# programs
1419
ffmpeg_deps="avcodec avformat swscale"
1420
ffplay_deps="avcodec avformat swscale sdl"
1421
ffplay_select="rdft"
1422
ffprobe_deps="avcodec avformat"
1423
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1424
ffserver_extralibs='$ldl'
1425

    
1426
doc_deps="texi2html"
1427

    
1428
# default parameters
1429

    
1430
logfile="config.err"
1431

    
1432
# installation paths
1433
prefix_default="/usr/local"
1434
bindir_default='${prefix}/bin'
1435
datadir_default='${prefix}/share/ffmpeg'
1436
incdir_default='${prefix}/include'
1437
libdir_default='${prefix}/lib'
1438
mandir_default='${prefix}/share/man'
1439
shlibdir_default="$libdir_default"
1440

    
1441
# toolchain
1442
ar="ar"
1443
cc_default="gcc"
1444
cc_version=\"unknown\"
1445
host_cc_default="gcc"
1446
ln_s="ln -sf"
1447
nm_default="nm"
1448
objformat="elf"
1449
ranlib="ranlib"
1450
strip_default="strip"
1451
yasmexe="yasm"
1452

    
1453
nm_opts='-g'
1454

    
1455
# machine
1456
arch_default=$(uname -m)
1457
cpu="generic"
1458

    
1459
# OS
1460
target_os_default=$(tolower $(uname -s))
1461
host_os=$target_os_default
1462

    
1463
# configurable options
1464
enable avcodec
1465
enable avdevice
1466
enable avformat
1467
enable avutil
1468
enable asm
1469
enable debug
1470
enable doc
1471
enable fastdiv
1472
enable ffmpeg
1473
enable ffplay
1474
enable ffprobe
1475
enable ffserver
1476
enable mpegaudio_hp
1477
enable network
1478
enable optimizations
1479
enable protocols
1480
enable static
1481
enable stripping
1482
enable swscale
1483
enable swscale_alpha
1484

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

    
1499
CC_O='-o $@'
1500

    
1501
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1502
host_libs='-lm'
1503

    
1504
target_path='$(CURDIR)'
1505

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

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

    
1525
for v in "$@"; do
1526
    r=${v#*=}
1527
    l=${v%"$r"}
1528
    r=$(sh_quote "$r")
1529
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1530
done
1531

    
1532
find_things(){
1533
    thing=$1
1534
    pattern=$2
1535
    file=$source_path/$3
1536
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1537
}
1538

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

    
1551
enable $ARCH_EXT_LIST \
1552
       $DECODER_LIST \
1553
       $ENCODER_LIST \
1554
       $HWACCEL_LIST \
1555
       $PARSER_LIST \
1556
       $BSF_LIST \
1557
       $DEMUXER_LIST \
1558
       $MUXER_LIST \
1559
       $FILTER_LIST \
1560
       $PROTOCOL_LIST \
1561
       $INDEV_LIST \
1562
       $OUTDEV_LIST \
1563

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

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

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

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

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

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

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

    
1644
set_default arch target_os
1645

    
1646
ar="${cross_prefix}${ar}"
1647
cc_default="${cross_prefix}${cc_default}"
1648
nm_default="${cross_prefix}${nm_default}"
1649
ranlib="${cross_prefix}${ranlib}"
1650
strip_default="${cross_prefix}${strip_default}"
1651

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

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

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

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

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

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

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

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

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

    
1699
unset -f mktemp
1700

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

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

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

    
1852
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1853

    
1854
: ${as_default:=$cc}
1855
: ${dep_cc_default:=$cc}
1856
: ${ld_default:=$cc}
1857
set_default as dep_cc ld
1858

    
1859
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1860
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1861

    
1862
add_cflags $extra_cflags
1863
add_asflags $extra_cflags
1864

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

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

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

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

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

    
1943
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1944
enable $arch
1945

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

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

    
1991
elif enabled x86; then
1992

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

    
2017
elif enabled sparc; then
2018

    
2019
    case $cpu in
2020
        sparc64)
2021
            cpuflags="-mcpu=v9"
2022
        ;;
2023
    esac
2024

    
2025
elif enabled arm; then
2026

    
2027
    case $cpu in
2028
        armv*)
2029
            cpuflags="-march=$cpu"
2030
        ;;
2031
        *)
2032
            cpuflags="-mcpu=$cpu"
2033
        ;;
2034
    esac
2035

    
2036
elif enabled alpha; then
2037

    
2038
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2039

    
2040
elif enabled bfin; then
2041

    
2042
    cpuflags="-mcpu=$cpu"
2043

    
2044
elif enabled mips; then
2045

    
2046
    cpuflags="-march=$cpu"
2047

    
2048
elif enabled avr32; then
2049

    
2050
    case $cpu in
2051
        ap7[02]0[0-2])
2052
            subarch="avr32_ap"
2053
            cpuflags="-mpart=$cpu"
2054
        ;;
2055
        ap)
2056
            subarch="avr32_ap"
2057
            cpuflags="-march=$cpu"
2058
        ;;
2059
        uc3[ab]*)
2060
            subarch="avr32_uc"
2061
            cpuflags="-mcpu=$cpu"
2062
        ;;
2063
        uc)
2064
            subarch="avr32_uc"
2065
            cpuflags="-march=$cpu"
2066
        ;;
2067
    esac
2068

    
2069
fi
2070

    
2071
add_cflags $cpuflags
2072
add_asflags $cpuflags
2073

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

    
2087
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2088
check_cflags -std=c99
2089
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2090
#include <stdlib.h>
2091
EOF
2092
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2093
#include <stdlib.h>
2094
EOF
2095

    
2096
check_host_cflags -std=c99
2097

    
2098
case "$arch" in
2099
    alpha|ia64|mips|parisc|sparc)
2100
        spic=$shared
2101
    ;;
2102
    x86)
2103
        subarch="x86_32"
2104
        check_cc <<EOF && subarch="x86_64"
2105
        int test[(int)sizeof(char*) - 7];
2106
EOF
2107
        if test "$subarch" = "x86_64"; then
2108
            spic=$shared
2109
        fi
2110
    ;;
2111
esac
2112

    
2113
enable $subarch
2114
enabled spic && enable pic
2115
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2116

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

    
2285
set_default $PATHS_LIST
2286

    
2287
add_extralibs $osextralibs
2288

    
2289
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2290
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2291

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

    
2303
disabled static && LIBNAME=""
2304

    
2305
if enabled_any libfaad libfaadbin ; then
2306
    if check_header faad.h; then
2307
        check_cc <<EOF
2308
#include <faad.h>
2309
#ifndef FAAD2_VERSION
2310
ok faad1
2311
#endif
2312
int main(void) { return 0; }
2313
EOF
2314
        test $? = 0 && enable libfaad2
2315
    else
2316
        die "FAAD test failed."
2317
    fi
2318
fi
2319

    
2320

    
2321
die_license_disabled() {
2322
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2323
}
2324

    
2325
die_license_disabled gpl libfaad2
2326
die_license_disabled gpl libx264
2327
die_license_disabled gpl libxvid
2328
die_license_disabled gpl postproc
2329
die_license_disabled gpl x11grab
2330

    
2331
die_license_disabled nonfree libfaac
2332

    
2333
die_license_disabled version3 libopencore_amrnb
2334
die_license_disabled version3 libopencore_amrwb
2335

    
2336
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2337

    
2338
check_deps $ARCH_EXT_LIST
2339

    
2340
disabled optimizations || check_cflags -fomit-frame-pointer
2341

    
2342
enable_pic() {
2343
    enable pic
2344
    add_cppflags -DPIC
2345
    add_cflags   -fPIC
2346
    add_asflags  -fPIC
2347
}
2348

    
2349
enabled pic && enable_pic
2350

    
2351
check_cc <<EOF || die "Symbol mangling check failed."
2352
int ff_extern;
2353
EOF
2354
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2355
extern_prefix=${sym%%ff_extern*}
2356

    
2357
check_cc <<EOF && enable inline_asm
2358
void foo(void) { __asm__ volatile ("" ::); }
2359
EOF
2360

    
2361
_restrict=
2362
for restrict_keyword in restrict __restrict__ __restrict; do
2363
    check_cc <<EOF && _restrict=$restrict_keyword && break
2364
void foo(char * $restrict_keyword p);
2365
EOF
2366
done
2367

    
2368
check_cc <<EOF && enable attribute_packed
2369
struct { int x; } __attribute__((packed)) x;
2370
EOF
2371

    
2372
check_cc <<EOF && enable attribute_may_alias
2373
union { int x; } __attribute__((may_alias)) x;
2374
EOF
2375

    
2376
check_cc <<EOF || die "endian test failed"
2377
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2378
EOF
2379
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2380

    
2381
if enabled alpha; then
2382

    
2383
    check_cflags -mieee
2384

    
2385
elif enabled arm; then
2386

    
2387
    check_cflags -marm
2388

    
2389
    check_ld <<EOF && enable vfp_args
2390
__asm__ (".eabi_attribute 28, 1");
2391
int main(void) { return 0; }
2392
EOF
2393

    
2394
    # We have to check if pld is a nop and disable it.
2395
    check_asm pld '"pld [r0]"'
2396

    
2397
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2398
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2399
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2400
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2401
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2402
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2403

    
2404
    enabled_all armv6t2 shared !pic && enable_pic
2405

    
2406
elif enabled ia64; then
2407

    
2408
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2409
    enabled shared && enable_weak hardcoded_tables
2410

    
2411
elif enabled mips; then
2412

    
2413
    check_asm loongson '"dmult.g $1, $2, $3"'
2414
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2415

    
2416
elif enabled ppc; then
2417

    
2418
    enable local_aligned_8 local_aligned_16
2419

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

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

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

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

    
2447
elif enabled sparc; then
2448

    
2449
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2450
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2451

    
2452
elif enabled x86; then
2453

    
2454
    enable local_aligned_8 local_aligned_16
2455

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

    
2468
    # check whether EBX is available on x86
2469
    check_asm ebx_available '""::"b"(0)' &&
2470
        check_asm ebx_available '"":::"%ebx"'
2471

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

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

    
2488
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2489

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

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

    
2505
fi
2506

    
2507
if check_func dlopen; then
2508
    ldl=
2509
elif check_func dlopen -ldl; then
2510
    ldl=-ldl
2511
fi
2512

    
2513
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2514
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2515

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

    
2533
check_header conio.h
2534
check_header dlfcn.h
2535
check_header dxva2api.h
2536
check_header malloc.h
2537
check_header poll.h
2538
check_header sys/mman.h
2539
check_header sys/resource.h
2540
check_header sys/select.h
2541
check_header termios.h
2542
check_header vdpau/vdpau.h
2543
check_header vdpau/vdpau_x11.h
2544
check_header X11/extensions/XvMClib.h
2545

    
2546
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2547

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

    
2553
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2554
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2555

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

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

    
2582
check_lib math.h sin -lm
2583
check_lib va/va.h vaInitialize -lva
2584

    
2585
check_mathfunc exp2
2586
check_mathfunc exp2f
2587
check_mathfunc llrint
2588
check_mathfunc log2
2589
check_mathfunc log2f
2590
check_mathfunc lrint
2591
check_mathfunc lrintf
2592
check_mathfunc round
2593
check_mathfunc roundf
2594
check_mathfunc truncf
2595

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

    
2620
# libdc1394 check
2621
if enabled libdc1394; then
2622
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2623
        enable libdc1394_2; } ||
2624
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2625
        enable libdc1394_1; } ||
2626
    die "ERROR: No version of libdc1394 found "
2627
fi
2628

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

    
2639
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2640

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

    
2667
check_header linux/videodev.h
2668
check_header linux/videodev2.h
2669
check_header sys/videoio.h
2670

    
2671
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2672

    
2673
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2674
{ check_header dev/bktr/ioctl_meteor.h &&
2675
  check_header dev/bktr/ioctl_bt848.h; } ||
2676
{ check_header machine/ioctl_meteor.h &&
2677
  check_header machine/ioctl_bt848.h; } ||
2678
{ check_header dev/video/meteor/ioctl_meteor.h &&
2679
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2680
check_header dev/ic/bt8xx.h
2681

    
2682
check_header sys/soundcard.h
2683
check_header soundcard.h
2684

    
2685
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2686

    
2687
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2688

    
2689
enabled x11grab                         &&
2690
check_header X11/Xlib.h                 &&
2691
check_header X11/extensions/XShm.h      &&
2692
check_header X11/extensions/Xfixes.h    &&
2693
check_func XOpenDisplay -lX11           &&
2694
check_func XShmCreateImage -lX11 -lXext &&
2695
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2696

    
2697
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2698
check_cpp_condition \
2699
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2700
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2701
      disable vdpau; }
2702
fi
2703

    
2704
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2705

    
2706
# add some useful compiler flags if supported
2707
check_cflags -Wdeclaration-after-statement
2708
check_cflags -Wall
2709
check_cflags -Wno-switch
2710
check_cflags -Wdisabled-optimization
2711
check_cflags -Wpointer-arith
2712
check_cflags -Wredundant-decls
2713
check_cflags -Wno-pointer-sign
2714
check_cflags -Wcast-qual
2715
check_cflags -Wwrite-strings
2716
check_cflags -Wtype-limits
2717
check_cflags -Wundef
2718
check_cflags -Wmissing-prototypes
2719
enabled extra_warnings && check_cflags -Winline
2720

    
2721
# add some linker flags
2722
check_ldflags -Wl,--warn-common
2723
check_ldflags -Wl,--as-needed
2724
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'
2725
check_ldflags -Wl,-Bsymbolic
2726

    
2727
echo "X{};" > $TMPV
2728
test_ldflags -Wl,--version-script,$TMPV &&
2729
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2730

    
2731
if enabled small; then
2732
    add_cflags $size_cflags
2733
    optimizations="small"
2734
elif enabled optimizations; then
2735
    add_cflags $speed_cflags
2736
fi
2737
check_cflags -fno-math-errno
2738
check_cflags -fno-signed-zeros
2739

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

    
2777
if enabled gprof; then
2778
    add_cflags  -p
2779
    add_ldflags -p
2780
fi
2781

    
2782
# Find out if the .align argument is a power of two or not.
2783
check_asm asmalign_pot '".align 3"'
2784

    
2785
enabled_any $DECODER_LIST      && enable decoders
2786
enabled_any $ENCODER_LIST      && enable encoders
2787
enabled_any $HWACCEL_LIST      && enable hwaccels
2788
enabled_any $BSF_LIST          && enable bsfs
2789
enabled_any $DEMUXER_LIST      && enable demuxers
2790
enabled_any $MUXER_LIST        && enable muxers
2791
enabled_any $FILTER_LIST       && enable filters
2792
enabled_any $INDEV_LIST        && enable indevs
2793
enabled_any $OUTDEV_LIST       && enable outdevs
2794
enabled_any $PROTOCOL_LIST     && enable protocols
2795

    
2796
enabled_any $THREADS_LIST      && enable threads
2797

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

    
2813
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2814

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

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

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

    
2917
echo "License: $license"
2918

    
2919
echo "Creating config.mak and config.h..."
2920

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
3103
cp_if_changed $TMPH libavutil/avconfig.h
3104

    
3105
# build pkg-config files
3106

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

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

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

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