Statistics
| Branch: | Revision:

ffmpeg / configure @ 0844bae1

History | View | Annotate | Download (87.4 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-ffserver       disable ffserver build
86
  --disable-avdevice       disable libavdevice build
87
  --disable-avcodec        disable libavcodec build
88
  --disable-avformat       disable libavformat build
89
  --disable-swscale        disable libswscale build
90
  --enable-postproc        enable GPLed postprocessing support [no]
91
  --enable-avfilter        video filter support [no]
92
  --enable-avfilter-lavf   video filters dependent on avformat [no]
93
  --enable-beosthreads     use BeOS threads [no]
94
  --enable-os2threads      use OS/2 threads [no]
95
  --enable-pthreads        use pthreads [no]
96
  --enable-w32threads      use Win32 threads [no]
97
  --enable-x11grab         enable X11 grabbing [no]
98
  --disable-network        disable network support [no]
99
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
100
  --enable-gray            enable full grayscale support (slower color)
101
  --disable-swscale-alpha  disable alpha channel support in swscale
102
  --disable-fastdiv        disable table-based division
103
  --enable-small           optimize for size instead of speed
104
  --disable-aandct         disable AAN DCT code
105
  --disable-dct            disable DCT code
106
  --disable-fft            disable FFT code
107
  --disable-golomb         disable Golomb code
108
  --disable-lpc            disable LPC code
109
  --disable-mdct           disable MDCT code
110
  --disable-rdft           disable RDFT code
111
  --disable-vaapi          disable VAAPI code
112
  --disable-vdpau          disable VDPAU code
113
  --disable-dxva2          disable DXVA2 code
114
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
117
  --enable-beos-netserver  enable BeOS netserver
118
  --disable-encoder=NAME   disable encoder NAME
119
  --enable-encoder=NAME    enable encoder NAME
120
  --disable-encoders       disable all encoders
121
  --disable-decoder=NAME   disable decoder NAME
122
  --enable-decoder=NAME    enable decoder NAME
123
  --disable-decoders       disable all decoders
124
  --disable-hwaccel=NAME   disable hwaccel NAME
125
  --enable-hwaccel=NAME    enable hwaccel NAME
126
  --disable-hwaccels       disable all hwaccels
127
  --disable-muxer=NAME     disable muxer NAME
128
  --enable-muxer=NAME      enable muxer NAME
129
  --disable-muxers         disable all muxers
130
  --disable-demuxer=NAME   disable demuxer NAME
131
  --enable-demuxer=NAME    enable demuxer NAME
132
  --disable-demuxers       disable all demuxers
133
  --enable-parser=NAME     enable parser NAME
134
  --disable-parser=NAME    disable parser NAME
135
  --disable-parsers        disable all parsers
136
  --enable-bsf=NAME        enable bitstream filter NAME
137
  --disable-bsf=NAME       disable bitstream filter NAME
138
  --disable-bsfs           disable all bitstream filters
139
  --enable-protocol=NAME   enable protocol NAME
140
  --disable-protocol=NAME  disable protocol NAME
141
  --disable-protocols      disable all protocols
142
  --disable-indev=NAME     disable input device NAME
143
  --disable-outdev=NAME    disable output device NAME
144
  --disable-indevs         disable input devices
145
  --disable-outdevs        disable output devices
146
  --disable-devices        disable all devices
147
  --enable-filter=NAME     enable filter NAME
148
  --disable-filter=NAME    disable filter NAME
149
  --disable-filters        disable all filters
150
  --list-decoders          show all available decoders
151
  --list-encoders          show all available encoders
152
  --list-hwaccels          show all available hardware accelerators
153
  --list-muxers            show all available muxers
154
  --list-demuxers          show all available demuxers
155
  --list-parsers           show all available parsers
156
  --list-protocols         show all available protocols
157
  --list-bsfs              show all available bitstream filters
158
  --list-indevs            show all available input devices
159
  --list-outdevs           show all available output devices
160
  --list-filters           show all available filters
161

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

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

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

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

    
250
log(){
251
    echo "$@" >> $logfile
252
}
253

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

    
260
echolog(){
261
    log "$@"
262
    echo "$@"
263
}
264

    
265
die(){
266
    echolog "$@"
267
    cat <<EOF
268

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

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

    
292
tolower(){
293
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
294
}
295

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

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

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

    
314
set_all(){
315
    value=$1
316
    shift
317
    for var in $*; do
318
        eval $var=$value
319
    done
320
}
321

    
322
set_weak(){
323
    value=$1
324
    shift
325
    for var; do
326
        eval : \${$var:=$value}
327
    done
328
}
329

    
330
pushvar(){
331
    for var in $*; do
332
        eval level=\${${var}_level:=0}
333
        eval ${var}_${level}="\$$var"
334
        eval ${var}_level=$(($level+1))
335
    done
336
}
337

    
338
popvar(){
339
    for var in $*; do
340
        eval level=\${${var}_level:-0}
341
        test $level = 0 && continue
342
        eval level=$(($level-1))
343
        eval $var="\${${var}_${level}}"
344
        eval ${var}_level=$level
345
        eval unset ${var}_${level}
346
    done
347
}
348

    
349
enable(){
350
    set_all yes $*
351
}
352

    
353
disable(){
354
    set_all no $*
355
}
356

    
357
enable_weak(){
358
    set_weak yes $*
359
}
360

    
361
disable_weak(){
362
    set_weak no $*
363
}
364

    
365
enable_safe(){
366
    for var; do
367
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
368
    done
369
}
370

    
371
disable_safe(){
372
    for var; do
373
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
374
    done
375
}
376

    
377
do_enable_deep(){
378
    for var; do
379
        enabled $var && continue
380
        eval sel="\$${var}_select"
381
        eval sgs="\$${var}_suggest"
382
        pushvar var sgs
383
        enable_deep $sel
384
        popvar sgs
385
        enable_deep_weak $sgs
386
        popvar var
387
    done
388
}
389

    
390
enable_deep(){
391
    do_enable_deep $*
392
    enable $*
393
}
394

    
395
enable_deep_weak(){
396
    do_enable_deep $*
397
    enable_weak $*
398
}
399

    
400
enabled(){
401
    test "${1#!}" = "$1" && op== || op=!=
402
    eval test "x\$${1#!}" $op "xyes"
403
}
404

    
405
disabled(){
406
    test "${1#!}" = "$1" && op== || op=!=
407
    eval test "x\$${1#!}" $op "xno"
408
}
409

    
410
enabled_all(){
411
    for opt; do
412
        enabled $opt || return 1
413
    done
414
}
415

    
416
disabled_all(){
417
    for opt; do
418
        disabled $opt || return 1
419
    done
420
}
421

    
422
enabled_any(){
423
    for opt; do
424
        enabled $opt && return 0
425
    done
426
}
427

    
428
disabled_any(){
429
    for opt; do
430
        disabled $opt && return 0
431
    done
432
    return 1
433
}
434

    
435
set_default(){
436
    for opt; do
437
        eval : \${$opt:=\$${opt}_default}
438
    done
439
}
440

    
441
is_in(){
442
    value=$1
443
    shift
444
    for var in $*; do
445
        [ $var = $value ] && return 0
446
    done
447
    return 1
448
}
449

    
450
check_deps(){
451
    for cfg; do
452
        cfg="${cfg#!}"
453
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
454
        disabled ${cfg}_checking && continue
455
        enable ${cfg}_checking
456

    
457
        eval dep_all="\$${cfg}_deps"
458
        eval dep_any="\$${cfg}_deps_any"
459
        eval dep_sel="\$${cfg}_select"
460
        eval dep_sgs="\$${cfg}_suggest"
461
        eval dep_ifa="\$${cfg}_if"
462
        eval dep_ifn="\$${cfg}_if_any"
463

    
464
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
465
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
466
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
467

    
468
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
469
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
470
        enabled_all  $dep_all || disable $cfg
471
        enabled_any  $dep_any || disable $cfg
472
        disabled_any $dep_sel && disable $cfg
473

    
474
        if enabled $cfg; then
475
            eval dep_extralibs="\$${cfg}_extralibs"
476
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
477
            enable_deep $dep_sel
478
            enable_deep_weak $dep_sgs
479
        fi
480

    
481
        disable ${cfg}_checking
482
    done
483
}
484

    
485
print_config(){
486
    pfx=$1
487
    header=$2
488
    makefile=$3
489
    shift 3
490
    for cfg; do
491
        ucname="$(toupper $cfg)"
492
        if enabled $cfg; then
493
            echo "#define ${pfx}${ucname} 1" >> $header
494
            echo "${pfx}${ucname}=yes" >> $makefile
495
        else
496
            echo "#define ${pfx}${ucname} 0" >> $header
497
            echo "!${pfx}${ucname}=yes" >> $makefile
498
        fi
499
    done
500
}
501

    
502
flags_saved(){
503
    (: ${SAVE_CFLAGS?}) 2> /dev/null
504
}
505

    
506
save_flags(){
507
    flags_saved && return
508
    SAVE_CFLAGS="$CFLAGS"
509
    SAVE_LDFLAGS="$LDFLAGS"
510
    SAVE_extralibs="$extralibs"
511
}
512

    
513
restore_flags(){
514
    flags_saved || return
515
    CFLAGS="$SAVE_CFLAGS"
516
    LDFLAGS="$SAVE_LDFLAGS"
517
    extralibs="$SAVE_extralibs"
518
    unset SAVE_CFLAGS
519
    unset SAVE_LDFLAGS
520
    unset SAVE_extralibs
521
}
522

    
523
temp_cflags(){
524
    save_flags
525
    CFLAGS="$CFLAGS $*"
526
}
527

    
528
temp_ldflags(){
529
    save_flags
530
    LDFLAGS="$LDFLAGS $*"
531
}
532

    
533
temp_extralibs(){
534
    save_flags
535
    extralibs="$extralibs $*"
536
}
537

    
538
append(){
539
    var=$1
540
    shift
541
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
542
    eval "$var=\"\$$var $*\""
543
}
544

    
545
add_cppflags(){
546
    append CPPFLAGS $($filter_cppflags "$@")
547
}
548

    
549
add_cflags(){
550
    append CFLAGS $($filter_cflags "$@")
551
}
552

    
553
add_asflags(){
554
    append ASFLAGS $($filter_asflags "$@")
555
}
556

    
557
add_ldflags(){
558
    append LDFLAGS "$@"
559
}
560

    
561
add_extralibs(){
562
    append extralibs "$@"
563
}
564

    
565
check_cmd(){
566
    log "$@"
567
    "$@" >> $logfile 2>&1
568
}
569

    
570
check_cc(){
571
    log check_cc "$@"
572
    cat > $TMPC
573
    log_file $TMPC
574
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
575
}
576

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

    
584
check_as(){
585
    log check_as "$@"
586
    cat > $TMPC
587
    log_file $TMPC
588
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
589
}
590

    
591
check_asm(){
592
    log check_asm "$@"
593
    name="$1"
594
    code="$2"
595
    shift 2
596
    disable $name
597
    check_as "$@" <<EOF && enable $name
598
void foo(void){ __asm__ volatile($code); }
599
EOF
600
}
601

    
602
check_yasm(){
603
    log check_yasm "$@"
604
    echo "$1" > $TMPS
605
    log_file $TMPS
606
    shift 1
607
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
608
}
609

    
610
check_ld(){
611
    log check_ld "$@"
612
    flags=''
613
    libs=''
614
    for f; do
615
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
616
    done
617
    check_cc $($filter_cflags $flags) || return
618
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
619
}
620

    
621
check_cppflags(){
622
    log check_cppflags "$@"
623
    set -- $($filter_cppflags "$@")
624
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
625
int x;
626
EOF
627
}
628

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

    
637
test_ldflags(){
638
    log test_ldflags "$@"
639
    check_ld "$@" <<EOF
640
int main(void){ return 0; }
641
EOF
642
}
643

    
644
check_ldflags(){
645
    log check_ldflags "$@"
646
    test_ldflags "$@" && add_ldflags "$@"
647
}
648

    
649
check_header(){
650
    log check_header "$@"
651
    header=$1
652
    shift
653
    disable_safe $header
654
    check_cpp "$@" <<EOF && enable_safe $header
655
#include <$header>
656
int x;
657
EOF
658
}
659

    
660
check_func(){
661
    log check_func "$@"
662
    func=$1
663
    shift
664
    disable $func
665
    check_ld "$@" <<EOF && enable $func
666
extern int $func();
667
int main(void){ $func(); }
668
EOF
669
}
670

    
671
check_mathfunc(){
672
    log check_mathfunc "$@"
673
    func=$1
674
    shift
675
    disable $func
676
    check_ld "$@" <<EOF && enable $func
677
#include <math.h>
678
float foo(float f) { return $func(f); }
679
int main(void){ return 0; }
680
EOF
681
}
682

    
683
check_func_headers(){
684
    log check_func_headers "$@"
685
    headers=$1
686
    func=$2
687
    shift 2
688
    disable $func
689
    incs=""
690
    for hdr in $headers; do
691
        incs="$incs
692
#include <$hdr>"
693
    done
694
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
695
$incs
696
int main(int argc, char **argv){
697
    return (long) $func;
698
}
699
EOF
700
}
701

    
702
check_cpp_condition(){
703
    log check_cpp_condition "$@"
704
    header=$1
705
    condition=$2
706
    shift 2
707
    check_cpp $($filter_cppflags "$@") <<EOF
708
#include <$header>
709
#if !($condition)
710
#error "unsatisfied condition: $condition"
711
#endif
712
EOF
713
}
714

    
715
check_lib(){
716
    log check_lib "$@"
717
    header="$1"
718
    func="$2"
719
    shift 2
720
    temp_extralibs "$@"
721
    check_header $header && check_func $func && add_extralibs "$@"
722
    err=$?
723
    restore_flags
724
    return $err
725
}
726

    
727
check_lib2(){
728
    log check_lib2 "$@"
729
    headers="$1"
730
    func="$2"
731
    shift 2
732
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
733
}
734

    
735
check_exec(){
736
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
737
}
738

    
739
check_exec_crash(){
740
    code=$(cat)
741

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

    
748
    (check_exec "$@") >> $logfile 2>&1 <<EOF
749
#include <signal.h>
750
static void sighandler(int sig){
751
    raise(SIGTERM);
752
}
753
int main(void){
754
    signal(SIGILL, sighandler);
755
    signal(SIGFPE, sighandler);
756
    signal(SIGSEGV, sighandler);
757
#ifdef SIGBUS
758
    signal(SIGBUS, sighandler);
759
#endif
760
    { $code }
761
}
762
EOF
763
}
764

    
765
check_type(){
766
    log check_type "$@"
767
    headers=$1
768
    type=$2
769
    shift 2
770
    disable_safe "$type"
771
    incs=""
772
    for hdr in $headers; do
773
        incs="$incs
774
#include <$hdr>"
775
    done
776
    check_cc "$@" <<EOF && enable_safe "$type"
777
$incs
778
$type v;
779
EOF
780
}
781

    
782
check_struct(){
783
    log check_type "$@"
784
    headers=$1
785
    struct=$2
786
    member=$3
787
    shift 3
788
    disable_safe "${struct}_${member}"
789
    incs=""
790
    for hdr in $headers; do
791
        incs="$incs
792
#include <$hdr>"
793
    done
794
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
795
$incs
796
const void *p = &(($struct *)0)->$member;
797
EOF
798
}
799

    
800
require(){
801
    name="$1"
802
    header="$2"
803
    func="$3"
804
    shift 3
805
    check_lib $header $func "$@" || die "ERROR: $name not found"
806
}
807

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

    
816
check_foo_config(){
817
    cfg=$1
818
    pkg=$2
819
    header=$3
820
    func=$4
821
    shift 4
822
    disable $cfg
823
    check_cmd ${pkg}-config --version
824
    err=$?
825
    if test "$err" = 0; then
826
        temp_cflags $(${pkg}-config --cflags)
827
        temp_extralibs $(${pkg}-config --libs)
828
        check_lib "$@" $header $func && enable $cfg
829
    fi
830
    return $err
831
}
832

    
833
check_host_cc(){
834
    log check_host_cc "$@"
835
    cat > $TMPC
836
    log_file $TMPC
837
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
838
}
839

    
840
check_host_cflags(){
841
    log check_host_cflags "$@"
842
    check_host_cc "$@" <<EOF && append host_cflags "$@"
843
int x;
844
EOF
845
}
846

    
847
apply(){
848
    file=$1
849
    shift
850
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
851
}
852

    
853
cp_if_changed(){
854
    cmp -s "$1" "$2" &&
855
        echo "$2 is unchanged" ||
856
        cp -f "$1" "$2"
857
}
858

    
859
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
860
# system-dependent things.
861

    
862
COMPONENT_LIST="
863
    bsfs
864
    decoders
865
    demuxers
866
    encoders
867
    filters
868
    hwaccels
869
    indevs
870
    muxers
871
    outdevs
872
    parsers
873
    protocols
874
"
875

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

    
942
THREADS_LIST='
943
    beosthreads
944
    os2threads
945
    pthreads
946
    w32threads
947
'
948

    
949
ARCH_LIST='
950
    alpha
951
    arm
952
    avr32
953
    avr32_ap
954
    avr32_uc
955
    bfin
956
    ia64
957
    m68k
958
    mips
959
    mips64
960
    parisc
961
    ppc
962
    ppc64
963
    s390
964
    sh4
965
    sparc
966
    sparc64
967
    tomi
968
    x86
969
    x86_32
970
    x86_64
971
'
972

    
973
ARCH_EXT_LIST='
974
    altivec
975
    amd3dnow
976
    amd3dnowext
977
    armv5te
978
    armv6
979
    armv6t2
980
    armvfp
981
    iwmmxt
982
    mmi
983
    mmx
984
    mmx2
985
    neon
986
    ppc4xx
987
    sse
988
    ssse3
989
    vis
990
'
991

    
992
HAVE_LIST_PUB='
993
    bigendian
994
'
995

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

    
1081
# options emitted with CONFIG_ prefix but not available on command line
1082
CONFIG_EXTRA="
1083
    avutil
1084
    gplv3
1085
    lgplv3
1086
"
1087

    
1088
CMDLINE_SELECT="
1089
    $ARCH_EXT_LIST
1090
    $CONFIG_LIST
1091
    $THREADS_LIST
1092
    asm
1093
    cross_compile
1094
    debug
1095
    extra_warnings
1096
    logging
1097
    optimizations
1098
    stripping
1099
    yasm
1100
"
1101

    
1102
PATHS_LIST='
1103
    bindir
1104
    datadir
1105
    incdir
1106
    libdir
1107
    mandir
1108
    prefix
1109
    shlibdir
1110
'
1111

    
1112
CMDLINE_SET="
1113
    $PATHS_LIST
1114
    arch
1115
    as
1116
    build_suffix
1117
    cc
1118
    cpu
1119
    cross_prefix
1120
    dep_cc
1121
    extra_version
1122
    host_cc
1123
    host_cflags
1124
    host_ldflags
1125
    host_libs
1126
    host_os
1127
    ld
1128
    logfile
1129
    malloc_prefix
1130
    nm
1131
    source_path
1132
    sysinclude
1133
    sysroot
1134
    target_exec
1135
    target_os
1136
    target_path
1137
"
1138

    
1139
CMDLINE_APPEND="
1140
    extra_cflags
1141
"
1142

    
1143
# code dependency declarations
1144

    
1145
# architecture extensions
1146

    
1147
armv5te_deps="arm"
1148
armv6_deps="arm"
1149
armv6t2_deps="arm"
1150
armvfp_deps="arm"
1151
iwmmxt_deps="arm"
1152
neon_deps="arm"
1153

    
1154
mmi_deps="mips"
1155

    
1156
altivec_deps="ppc"
1157
ppc4xx_deps="ppc"
1158

    
1159
vis_deps="sparc"
1160

    
1161
x86_64_suggest="cmov fast_cmov"
1162
amd3dnow_deps="mmx"
1163
amd3dnowext_deps="amd3dnow"
1164
mmx_deps="x86"
1165
mmx2_deps="mmx"
1166
sse_deps="mmx"
1167
ssse3_deps="sse"
1168

    
1169
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1170
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1171
fast_unaligned_if_any="armv6 ppc x86"
1172

    
1173
need_memalign="altivec neon sse"
1174
inline_asm_deps="!tms470"
1175

    
1176
# subsystems
1177
mdct_select="fft"
1178
rdft_select="fft"
1179

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

    
1301
# parsers
1302
h264_parser_select="golomb"
1303

    
1304
# bitstream_filters
1305
aac_adtstoasc_bsf_select="aac_parser"
1306

    
1307
# external libraries
1308
libdirac_decoder_deps="libdirac !libschroedinger"
1309
libdirac_encoder_deps="libdirac"
1310
libfaac_encoder_deps="libfaac"
1311
libfaad_decoder_deps="libfaad"
1312
libfaadbin_decoder_extralibs='$ldl'
1313
libgsm_decoder_deps="libgsm"
1314
libgsm_encoder_deps="libgsm"
1315
libgsm_ms_decoder_deps="libgsm"
1316
libgsm_ms_encoder_deps="libgsm"
1317
libmp3lame_encoder_deps="libmp3lame"
1318
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1319
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1320
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1321
libopenjpeg_decoder_deps="libopenjpeg"
1322
libschroedinger_decoder_deps="libschroedinger"
1323
libschroedinger_encoder_deps="libschroedinger"
1324
libspeex_decoder_deps="libspeex"
1325
libtheora_encoder_deps="libtheora"
1326
libvorbis_encoder_deps="libvorbis"
1327
libx264_encoder_deps="libx264"
1328
libxvid_encoder_deps="libxvid"
1329

    
1330
# demuxers / muxers
1331
ac3_demuxer_deps="ac3_parser"
1332
asf_stream_muxer_select="asf_muxer"
1333
avisynth_demuxer_deps="avisynth"
1334
dirac_demuxer_deps="dirac_parser"
1335
eac3_demuxer_select="ac3_parser"
1336
ipod_muxer_select="mov_muxer"
1337
libnut_demuxer_deps="libnut"
1338
libnut_muxer_deps="libnut"
1339
matroska_audio_muxer_select="matroska_muxer"
1340
matroska_demuxer_suggest="zlib bzlib"
1341
mov_demuxer_suggest="zlib"
1342
mp3_demuxer_deps="mpegaudio_parser"
1343
mp4_muxer_select="mov_muxer"
1344
mpegtsraw_demuxer_select="mpegts_demuxer"
1345
mxf_d10_muxer_select="mxf_muxer"
1346
ogg_demuxer_select="golomb"
1347
psp_muxer_select="mov_muxer"
1348
rtsp_demuxer_deps="sdp_demuxer"
1349
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1350
spdif_muxer_select="aac_parser"
1351
tg2_muxer_select="mov_muxer"
1352
tgp_muxer_select="mov_muxer"
1353
w64_demuxer_deps="wav_demuxer"
1354

    
1355
# indevs / outdevs
1356
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1357
alsa_indev_extralibs="-lasound"
1358
alsa_outdev_deps="alsa_asoundlib_h"
1359
alsa_outdev_extralibs="-lasound"
1360
audio_beos_indev_deps="audio_beos"
1361
audio_beos_indev_extralibs="-lmedia -lbe"
1362
audio_beos_outdev_deps="audio_beos"
1363
audio_beos_outdev_extralibs="-lmedia -lbe"
1364
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1365
dv1394_indev_deps="dv1394 dv_demuxer"
1366
jack_indev_deps="jack_jack_h"
1367
jack_indev_extralibs="-ljack"
1368
libdc1394_indev_deps="libdc1394"
1369
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1370
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1371
v4l_indev_deps="linux_videodev_h"
1372
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1373
vfwcap_indev_deps="capCreateCaptureWindow"
1374
vfwcap_indev_extralibs="-lavicap32"
1375
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1376
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1377

    
1378
# protocols
1379
gopher_protocol_deps="network"
1380
http_protocol_deps="network"
1381
rtmp_protocol_deps="tcp_protocol"
1382
rtp_protocol_deps="udp_protocol"
1383
tcp_protocol_deps="network"
1384
udp_protocol_deps="network"
1385

    
1386
# filters
1387
movie_filter_deps="avfilter_lavf"
1388
avfilter_lavf_deps="avformat"
1389

    
1390
# libraries
1391
avdevice_deps="avcodec avformat"
1392
avformat_deps="avcodec"
1393

    
1394
# programs
1395
ffmpeg_deps="avcodec avformat swscale"
1396
ffplay_deps="avcodec avformat swscale sdl"
1397
ffplay_select="rdft"
1398
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1399
ffserver_extralibs='$ldl'
1400

    
1401
doc_deps="texi2html"
1402

    
1403
# default parameters
1404

    
1405
logfile="config.err"
1406

    
1407
# installation paths
1408
prefix_default="/usr/local"
1409
bindir_default='${prefix}/bin'
1410
datadir_default='${prefix}/share/ffmpeg'
1411
incdir_default='${prefix}/include'
1412
libdir_default='${prefix}/lib'
1413
mandir_default='${prefix}/share/man'
1414
shlibdir_default="$libdir_default"
1415

    
1416
# toolchain
1417
ar="ar"
1418
cc_default="gcc"
1419
cc_version=\"unknown\"
1420
host_cc_default="gcc"
1421
ln_s="ln -sf"
1422
nm_default="nm"
1423
objformat="elf"
1424
ranlib="ranlib"
1425
strip="strip"
1426
yasmexe="yasm"
1427

    
1428
nm_opts='-g'
1429

    
1430
# machine
1431
arch_default=$(uname -m)
1432
cpu="generic"
1433

    
1434
# OS
1435
target_os_default=$(tolower $(uname -s))
1436
host_os=$target_os_default
1437

    
1438
# configurable options
1439
enable avcodec
1440
enable avdevice
1441
enable avformat
1442
enable avutil
1443
enable asm
1444
enable debug
1445
enable doc
1446
enable fastdiv
1447
enable ffmpeg
1448
enable ffplay
1449
enable ffserver
1450
enable mpegaudio_hp
1451
enable network
1452
enable optimizations
1453
enable protocols
1454
enable static
1455
enable stripping
1456
enable swscale
1457
enable swscale_alpha
1458

    
1459
# build settings
1460
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1461
FFSERVERLDFLAGS=-Wl,-E
1462
LIBPREF="lib"
1463
LIBSUF=".a"
1464
FULLNAME='$(NAME)$(BUILDSUF)'
1465
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1466
SLIBPREF="lib"
1467
SLIBSUF=".so"
1468
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1469
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1470
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1471
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1472

    
1473
CC_O='-o $@'
1474

    
1475
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1476
host_libs='-lm'
1477

    
1478
target_path='$(CURDIR)'
1479

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

    
1485
# find source path
1486
source_path="$(dirname "$0")"
1487
enable source_path_used
1488
if test -f configure; then
1489
    source_path="$(pwd)"
1490
    disable source_path_used
1491
else
1492
    source_path="$(cd "$source_path"; pwd)"
1493
    echo "$source_path" | grep -q '[[:blank:]]' &&
1494
        die "Out of tree builds are impossible with whitespace in source path."
1495
    test -e "$source_path/config.h" &&
1496
        die "Out of tree builds are impossible with config.h in source dir."
1497
fi
1498

    
1499
for v in "$@"; do
1500
    r=${v#*=}
1501
    l=${v%"$r"}
1502
    r=$(sh_quote "$r")
1503
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1504
done
1505

    
1506
find_things(){
1507
    thing=$1
1508
    pattern=$2
1509
    file=$source_path/$3
1510
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1511
}
1512

    
1513
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1514
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1515
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1516
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1517
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1518
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1519
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1520
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1521
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1522
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1523
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1524

    
1525
enable $ARCH_EXT_LIST \
1526
       $DECODER_LIST \
1527
       $ENCODER_LIST \
1528
       $HWACCEL_LIST \
1529
       $PARSER_LIST \
1530
       $BSF_LIST \
1531
       $DEMUXER_LIST \
1532
       $MUXER_LIST \
1533
       $FILTER_LIST \
1534
       $PROTOCOL_LIST \
1535
       $INDEV_LIST \
1536
       $OUTDEV_LIST \
1537

    
1538
die_unknown(){
1539
    echo "Unknown option \"$1\"."
1540
    echo "See $0 --help for available options."
1541
    exit 1
1542
}
1543

    
1544
show_list() {
1545
    suffix=_$1
1546
    shift
1547
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1548
    exit 0
1549
}
1550

    
1551
for opt do
1552
    optval="${opt#*=}"
1553
    case "$opt" in
1554
    --extra-ldflags=*) add_ldflags $optval
1555
    ;;
1556
    --extra-libs=*) add_extralibs $optval
1557
    ;;
1558
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1559
    ;;
1560
    --enable-debug=*) debuglevel="$optval"
1561
    ;;
1562
    --enable-*=*|--disable-*=*)
1563
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1564
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1565
    eval list=\$$(toupper $thing)_LIST
1566
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1567
    $action $(filter "$name" $list)
1568
    ;;
1569
    --enable-?*|--disable-?*)
1570
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1571
    if is_in $option $COMPONENT_LIST; then
1572
        test $action = disable && action=unset
1573
        eval $action \$$(toupper ${option%s})_LIST
1574
    elif is_in $option $CMDLINE_SELECT; then
1575
        $action $option
1576
    else
1577
        die_unknown $opt
1578
    fi
1579
    ;;
1580
    --list-*)
1581
        NAME="${opt#--list-}"
1582
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1583
        NAME=${NAME%s}
1584
        eval show_list $NAME \$$(toupper $NAME)_LIST
1585
    ;;
1586
    --help|-h) show_help
1587
    ;;
1588
    *)
1589
    optname="${opt%%=*}"
1590
    optname="${optname#--}"
1591
    optname=$(echo "$optname" | sed 's/-/_/g')
1592
    if is_in $optname $CMDLINE_SET; then
1593
        eval $optname='$optval'
1594
    elif is_in $optname $CMDLINE_APPEND; then
1595
        append $optname "$optval"
1596
    else
1597
         die_unknown $opt
1598
    fi
1599
    ;;
1600
    esac
1601
done
1602

    
1603
disabled logging && logfile=/dev/null
1604

    
1605
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1606
set >> $logfile
1607

    
1608
test -n "$cross_prefix" && enable cross_compile
1609

    
1610
if enabled cross_compile; then
1611
    test -n "$arch" && test -n "$target_os" ||
1612
        die "Must specify target arch and OS when cross-compiling"
1613
fi
1614

    
1615
set_default arch target_os
1616

    
1617
ar="${cross_prefix}${ar}"
1618
cc_default="${cross_prefix}${cc_default}"
1619
nm_default="${cross_prefix}${nm_default}"
1620
ranlib="${cross_prefix}${ranlib}"
1621
strip="${cross_prefix}${strip}"
1622

    
1623
sysinclude_default="${sysroot}/usr/include"
1624

    
1625
set_default cc nm sysinclude
1626
enabled cross_compile || host_cc_default=$cc
1627
set_default host_cc
1628

    
1629
exesuf() {
1630
    case $1 in
1631
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1632
    esac
1633
}
1634

    
1635
EXESUF=$(exesuf $target_os)
1636
HOSTEXESUF=$(exesuf $host_os)
1637

    
1638
# set temporary file name
1639
: ${TMPDIR:=$TEMPDIR}
1640
: ${TMPDIR:=$TMP}
1641
: ${TMPDIR:=/tmp}
1642

    
1643
if ! check_cmd type mktemp; then
1644
    # simple replacement for missing mktemp
1645
    # NOT SAFE FOR GENERAL USE
1646
    mktemp(){
1647
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1648
    }
1649
fi
1650

    
1651
tmpfile(){
1652
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1653
        (set -C; exec > $tmp) 2>/dev/null ||
1654
        die "Unable to create temporary file in $TMPDIR."
1655
    append TMPFILES $tmp
1656
    eval $1=$tmp
1657
}
1658

    
1659
trap 'rm -f -- $TMPFILES' EXIT
1660
trap exit HUP INT TERM
1661

    
1662
tmpfile TMPC  .c
1663
tmpfile TMPE  $EXESUF
1664
tmpfile TMPH  .h
1665
tmpfile TMPO  .o
1666
tmpfile TMPS  .S
1667
tmpfile TMPV  .ver
1668
tmpfile TMPSH .sh
1669

    
1670
unset -f mktemp
1671

    
1672
# make sure we can execute files in $TMPDIR
1673
cat > $TMPSH 2>> $logfile <<EOF
1674
#! /bin/sh
1675
EOF
1676
chmod +x $TMPSH >> $logfile 2>&1
1677
if ! $TMPSH >> $logfile 2>&1; then
1678
    cat <<EOF
1679
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1680
variable to another directory and make sure that it is not mounted noexec.
1681
EOF
1682
    die "Sanity test failed."
1683
fi
1684

    
1685
filter_cflags=echo
1686
filter_cppflags=echo
1687
filter_asflags=echo
1688

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

    
1823
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1824

    
1825
: ${as_default:=$cc}
1826
: ${dep_cc_default:=$cc}
1827
: ${ld_default:=$cc}
1828
set_default as dep_cc ld
1829

    
1830
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1831
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1832

    
1833
add_cflags $extra_cflags
1834
add_asflags $extra_cflags
1835

    
1836
if test -n "$sysroot"; then
1837
    case "$cc_type" in
1838
        gcc)
1839
            add_cppflags --sysroot="$sysroot"
1840
            add_ldflags --sysroot="$sysroot"
1841
        ;;
1842
        tms470)
1843
            add_cppflags -I"$sysinclude"
1844
            add_ldflags  --sysroot="$sysroot"
1845
        ;;
1846
        clang)
1847
            add_cppflags -isysroot="$sysroot"
1848
            add_ldflags -isysroot="$sysroot"
1849
        ;;
1850
    esac
1851
fi
1852

    
1853
if test "$cpu" = host; then
1854
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1855

    
1856
    case "$cc_type" in
1857
        gcc)
1858
            check_native(){
1859
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1860
                sed -n "/$1=/{
1861
                            s/.*$1=\\([^ ]*\\).*/\\1/
1862
                            p
1863
                            q
1864
                        }" $TMPE
1865
            }
1866
            cpu=$(check_native -march || check_native -mcpu)
1867
        ;;
1868
    esac
1869

    
1870
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1871
fi
1872

    
1873
# Deal with common $arch aliases
1874
case "$arch" in
1875
    arm*)
1876
        arch="arm"
1877
    ;;
1878
    mips|mipsel|IP*)
1879
        arch="mips"
1880
    ;;
1881
    mips64)
1882
        arch="mips"
1883
        subarch="mips64"
1884
    ;;
1885
    parisc|hppa)
1886
        arch="parisc"
1887
    ;;
1888
    parisc64|hppa64)
1889
        arch="parisc"
1890
        subarch="parisc64"
1891
    ;;
1892
    "Power Macintosh"|ppc|powerpc)
1893
        arch="ppc"
1894
    ;;
1895
    ppc64)
1896
        arch="ppc"
1897
        subarch="ppc64"
1898
    ;;
1899
    s390|s390x)
1900
        arch="s390"
1901
    ;;
1902
    sh4|sh)
1903
        arch="sh4"
1904
    ;;
1905
    sun4u|sparc64)
1906
        arch="sparc"
1907
        subarch="sparc64"
1908
    ;;
1909
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1910
        arch="x86"
1911
    ;;
1912
esac
1913

    
1914
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1915
enable $arch
1916

    
1917
# Add processor-specific flags
1918
if test "$cpu" = generic; then
1919
    : do nothing
1920
elif enabled ppc; then
1921

    
1922
    case $(tolower $cpu) in
1923
        601|ppc601|powerpc601)
1924
            cpuflags="-mcpu=601"
1925
            disable altivec
1926
        ;;
1927
        603*|ppc603*|powerpc603*)
1928
            cpuflags="-mcpu=603"
1929
            disable altivec
1930
        ;;
1931
        604*|ppc604*|powerpc604*)
1932
            cpuflags="-mcpu=604"
1933
            disable altivec
1934
        ;;
1935
        g3|75*|ppc75*|powerpc75*)
1936
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1937
            disable altivec
1938
        ;;
1939
        g4|745*|ppc745*|powerpc745*)
1940
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1941
        ;;
1942
        74*|ppc74*|powerpc74*)
1943
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1944
        ;;
1945
        g5|970|ppc970|powerpc970|power4*)
1946
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1947
        ;;
1948
        cell)
1949
            cpuflags="-mcpu=cell"
1950
            enable ldbrx
1951
        ;;
1952
        e500v2)
1953
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1954
            disable altivec
1955
        ;;
1956
        e500)
1957
            cpuflags="-mcpu=8540 -mhard-float"
1958
            disable altivec
1959
        ;;
1960
    esac
1961

    
1962
elif enabled x86; then
1963

    
1964
    case $cpu in
1965
        i[345]86|pentium)
1966
            cpuflags="-march=$cpu"
1967
            disable mmx
1968
        ;;
1969
        # targets that do NOT support conditional mov (cmov)
1970
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1971
            cpuflags="-march=$cpu"
1972
            disable cmov
1973
        ;;
1974
        # targets that do support conditional mov (cmov)
1975
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1976
            cpuflags="-march=$cpu"
1977
            enable cmov
1978
            enable fast_cmov
1979
        ;;
1980
        # targets that do support conditional mov but on which it's slow
1981
        pentium4|pentium4m|prescott|nocona)
1982
            cpuflags="-march=$cpu"
1983
            enable cmov
1984
            disable fast_cmov
1985
        ;;
1986
    esac
1987

    
1988
elif enabled sparc; then
1989

    
1990
    case $cpu in
1991
        sparc64)
1992
            cpuflags="-mcpu=v9"
1993
        ;;
1994
    esac
1995

    
1996
elif enabled arm; then
1997

    
1998
    case $cpu in
1999
        armv*)
2000
            cpuflags="-march=$cpu"
2001
        ;;
2002
        *)
2003
            cpuflags="-mcpu=$cpu"
2004
        ;;
2005
    esac
2006

    
2007
elif enabled alpha; then
2008

    
2009
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2010

    
2011
elif enabled bfin; then
2012

    
2013
    cpuflags="-mcpu=$cpu"
2014

    
2015
elif enabled mips; then
2016

    
2017
    cpuflags="-march=$cpu"
2018

    
2019
elif enabled avr32; then
2020

    
2021
    case $cpu in
2022
        ap7[02]0[0-2])
2023
            subarch="avr32_ap"
2024
            cpuflags="-mpart=$cpu"
2025
        ;;
2026
        ap)
2027
            subarch="avr32_ap"
2028
            cpuflags="-march=$cpu"
2029
        ;;
2030
        uc3[ab]*)
2031
            subarch="avr32_uc"
2032
            cpuflags="-mcpu=$cpu"
2033
        ;;
2034
        uc)
2035
            subarch="avr32_uc"
2036
            cpuflags="-march=$cpu"
2037
        ;;
2038
    esac
2039

    
2040
fi
2041

    
2042
add_cflags $cpuflags
2043
add_asflags $cpuflags
2044

    
2045
# compiler sanity check
2046
check_exec <<EOF
2047
int main(void){ return 0; }
2048
EOF
2049
if test "$?" != 0; then
2050
    echo "$cc is unable to create an executable file."
2051
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2052
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2053
        echo "Only do this if you know what cross compiling means."
2054
    fi
2055
    die "C compiler test failed."
2056
fi
2057

    
2058
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2059
check_cflags -std=c99
2060
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2061
#include <stdlib.h>
2062
EOF
2063
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2064
#include <stdlib.h>
2065
EOF
2066

    
2067
check_host_cflags -std=c99
2068

    
2069
case "$arch" in
2070
    alpha|ia64|mips|parisc|sparc)
2071
        spic=$shared
2072
    ;;
2073
    x86)
2074
        subarch="x86_32"
2075
        check_cc <<EOF && subarch="x86_64"
2076
        int test[(int)sizeof(char*) - 7];
2077
EOF
2078
        if test "$subarch" = "x86_64"; then
2079
            spic=$shared
2080
        fi
2081
    ;;
2082
esac
2083

    
2084
enable $subarch
2085
enabled spic && enable pic
2086
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2087

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

    
2256
set_default $PATHS_LIST
2257

    
2258
add_extralibs $osextralibs
2259

    
2260
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2261
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2262

    
2263
# we need to build at least one lib type
2264
if ! enabled_any static shared; then
2265
    cat <<EOF
2266
At least one library type must be built.
2267
Specify --enable-static to build the static libraries or --enable-shared to
2268
build the shared libraries as well. To only build the shared libraries specify
2269
--disable-static in addition to --enable-shared.
2270
EOF
2271
    exit 1;
2272
fi
2273

    
2274
disabled static && LIBNAME=""
2275

    
2276
if enabled_any libfaad libfaadbin ; then
2277
    if check_header faad.h; then
2278
        check_cc <<EOF
2279
#include <faad.h>
2280
#ifndef FAAD2_VERSION
2281
ok faad1
2282
#endif
2283
int main(void) { return 0; }
2284
EOF
2285
        test $? = 0 && enable libfaad2
2286
    else
2287
        die "FAAD test failed."
2288
    fi
2289
fi
2290

    
2291

    
2292
die_license_disabled() {
2293
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2294
}
2295

    
2296
die_license_disabled gpl libfaad2
2297
die_license_disabled gpl libx264
2298
die_license_disabled gpl libxvid
2299
die_license_disabled gpl postproc
2300
die_license_disabled gpl x11grab
2301

    
2302
die_license_disabled nonfree libfaac
2303

    
2304
die_license_disabled version3 libopencore_amrnb
2305
die_license_disabled version3 libopencore_amrwb
2306

    
2307
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2308

    
2309
check_deps $ARCH_EXT_LIST
2310

    
2311
disabled optimizations || check_cflags -fomit-frame-pointer
2312

    
2313
enable_pic() {
2314
    enable pic
2315
    add_cppflags -DPIC
2316
    add_cflags   -fPIC
2317
    add_asflags  -fPIC
2318
}
2319

    
2320
enabled pic && enable_pic
2321

    
2322
check_cc <<EOF || die "Symbol mangling check failed."
2323
int ff_extern;
2324
EOF
2325
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2326
extern_prefix=${sym%%ff_extern*}
2327

    
2328
check_cc <<EOF && enable inline_asm
2329
void foo(void) { __asm__ volatile ("" ::); }
2330
EOF
2331

    
2332
_restrict=
2333
for restrict_keyword in restrict __restrict__ __restrict; do
2334
    check_cc <<EOF && _restrict=$restrict_keyword && break
2335
void foo(char * $restrict_keyword p);
2336
EOF
2337
done
2338

    
2339
check_cc <<EOF && enable attribute_packed
2340
struct { int x; } __attribute__((packed)) x;
2341
EOF
2342

    
2343
check_cc <<EOF && enable attribute_may_alias
2344
union { int x; } __attribute__((may_alias)) x;
2345
EOF
2346

    
2347
check_cc <<EOF || die "endian test failed"
2348
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2349
EOF
2350
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2351

    
2352
if enabled alpha; then
2353

    
2354
    check_cflags -mieee
2355

    
2356
elif enabled arm; then
2357

    
2358
    check_cflags -marm
2359

    
2360
    check_ld <<EOF && enable vfp_args
2361
__asm__ (".eabi_attribute 28, 1");
2362
int main(void) { return 0; }
2363
EOF
2364

    
2365
    # We have to check if pld is a nop and disable it.
2366
    check_asm pld '"pld [r0]"'
2367

    
2368
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2369
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2370
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2371
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2372
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2373
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2374

    
2375
    enabled_all armv6t2 shared !pic && enable_pic
2376

    
2377
elif enabled ia64; then
2378

    
2379
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2380
    enabled shared && enable_weak hardcoded_tables
2381

    
2382
elif enabled mips; then
2383

    
2384
    check_asm loongson '"dmult.g $1, $2, $3"'
2385
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2386

    
2387
elif enabled ppc; then
2388

    
2389
    check_asm dcbzl     '"dcbzl 0, 1"'
2390
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2391
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2392

    
2393
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2394
    if enabled altivec; then
2395
        check_cflags -maltivec -mabi=altivec &&
2396
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2397
        check_cflags -faltivec
2398

    
2399
        # check if our compiler supports Motorola AltiVec C API
2400
        check_cc <<EOF || disable altivec
2401
$inc_altivec_h
2402
int main(void) {
2403
    vector signed int v1, v2, v3;
2404
    v1 = vec_add(v2,v3);
2405
    return 0;
2406
}
2407
EOF
2408

    
2409
        # check if our compiler supports braces for vector declarations
2410
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2411
$inc_altivec_h
2412
int main (void) { (vector int) {1}; return 0; }
2413
EOF
2414
    fi
2415

    
2416
elif enabled sparc; then
2417

    
2418
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2419
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2420

    
2421
elif enabled x86; then
2422

    
2423
    # check whether EBP is available on x86
2424
    # As 'i' is stored on the stack, this program will crash
2425
    # if the base pointer is used to access it because the
2426
    # base pointer is cleared in the inline assembly code.
2427
    check_exec_crash <<EOF && enable ebp_available
2428
    volatile int i=0;
2429
    __asm__ volatile (
2430
        "xorl %%ebp, %%ebp"
2431
    ::: "%ebp");
2432
    return i;
2433
EOF
2434

    
2435
    # check whether EBX is available on x86
2436
    check_asm ebx_available '""::"b"(0)' &&
2437
        check_asm ebx_available '"":::"%ebx"'
2438

    
2439
    # check whether more than 10 operands are supported
2440
    check_cc <<EOF && enable ten_operands
2441
int main(void) {
2442
    int x=0;
2443
    __asm__ volatile(
2444
        ""
2445
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2446
    );
2447
    return 0;
2448
}
2449
EOF
2450

    
2451
    # check whether binutils is new enough to compile SSSE3/MMX2
2452
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2453
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2454

    
2455
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2456

    
2457
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2458
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2459
    enabled     pic           && append YASMFLAGS "-DPIC"
2460
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2461
    case "$objformat" in
2462
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2463
    esac
2464
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2465

    
2466
    case "$cpu" in
2467
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2468
            disable fast_clz
2469
        ;;
2470
    esac
2471

    
2472
fi
2473

    
2474
if check_func dlopen; then
2475
    ldl=
2476
elif check_func dlopen -ldl; then
2477
    ldl=-ldl
2478
fi
2479

    
2480
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2481
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2482

    
2483
check_func  fork
2484
check_func  getaddrinfo $network_extralibs
2485
check_func  gethrtime
2486
check_func  getrusage
2487
check_func  inet_aton $network_extralibs
2488
check_func  isatty
2489
check_func  ${malloc_prefix}memalign            && enable memalign
2490
check_func  mkstemp
2491
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2492
check_func  setrlimit
2493
check_func_headers io.h setmode
2494
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2495
check_func_headers windows.h GetProcessTimes
2496
check_func_headers windows.h VirtualAlloc
2497

    
2498
check_header conio.h
2499
check_header dlfcn.h
2500
check_header dxva2api.h
2501
check_header malloc.h
2502
check_header poll.h
2503
check_header sys/mman.h
2504
check_header sys/resource.h
2505
check_header sys/select.h
2506
check_header termios.h
2507
check_header vdpau/vdpau.h
2508
check_header vdpau/vdpau_x11.h
2509
check_header X11/extensions/XvMClib.h
2510

    
2511
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2512

    
2513
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2514
     enabled_any $need_memalign ; then
2515
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2516
fi
2517

    
2518
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2519
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2520

    
2521
# check for some common methods of building with pthread support
2522
# do this before the optional library checks as some of them require pthreads
2523
if enabled pthreads; then
2524
    if check_func pthread_create; then
2525
        :
2526
    elif check_func pthread_create -pthread; then
2527
        add_cflags -pthread
2528
        add_extralibs -pthread
2529
    elif check_func pthread_create -pthreads; then
2530
        add_cflags -pthreads
2531
        add_extralibs -pthreads
2532
    elif check_func pthread_create -lpthreadGC2; then
2533
        add_extralibs -lpthreadGC2
2534
    elif ! check_lib pthread.h pthread_create -lpthread; then
2535
        die "ERROR: can't find pthreads library"
2536
    fi
2537
fi
2538

    
2539
for thread in $THREADS_LIST; do
2540
    if enabled $thread; then
2541
        test -n "$thread_type" &&
2542
            die "ERROR: Only one thread type must be selected." ||
2543
            thread_type="$thread"
2544
    fi
2545
done
2546

    
2547
check_lib math.h sin -lm
2548
check_lib va/va.h vaInitialize -lva
2549

    
2550
check_mathfunc exp2
2551
check_mathfunc exp2f
2552
check_mathfunc llrint
2553
check_mathfunc log2
2554
check_mathfunc log2f
2555
check_mathfunc lrint
2556
check_mathfunc lrintf
2557
check_mathfunc round
2558
check_mathfunc roundf
2559
check_mathfunc truncf
2560

    
2561
# these are off by default, so fail if requested and not available
2562
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2563
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2564
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2565
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2566
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2567
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2568
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2569
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2570
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2571
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2572
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2573
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2574
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2575
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2576
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2577
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2578
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2579
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2580
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2581
                        die "ERROR: libx264 version must be >= 0.83."; }
2582
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2583
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2584

    
2585
# libdc1394 check
2586
if enabled libdc1394; then
2587
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2588
        enable libdc1394_2; } ||
2589
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2590
        enable libdc1394_1; } ||
2591
    die "ERROR: No version of libdc1394 found "
2592
fi
2593

    
2594
SDL_CONFIG="${cross_prefix}sdl-config"
2595
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2596
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2597
    sdl_libs=$("${SDL_CONFIG}" --libs)
2598
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2599
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2600
    enable sdl &&
2601
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2602
fi
2603

    
2604
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2605

    
2606
if enabled network; then
2607
    check_type "sys/types.h sys/socket.h" socklen_t
2608
    check_type netdb.h "struct addrinfo"
2609
    check_type netinet/in.h "struct ipv6_mreq"
2610
    check_type netinet/in.h "struct sockaddr_in6"
2611
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2612
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2613
    # Prefer arpa/inet.h over winsock2
2614
    if check_header arpa/inet.h ; then
2615
        check_func closesocket
2616
    elif check_header winsock2.h ; then
2617
        check_func_headers winsock2.h closesocket -lws2 && \
2618
            network_extralibs="-lws2" || \
2619
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2620
            network_extralibs="-lws2_32"; }
2621
        check_type ws2tcpip.h socklen_t
2622
        check_type ws2tcpip.h "struct addrinfo"
2623
        check_type ws2tcpip.h "struct ipv6_mreq"
2624
        check_type ws2tcpip.h "struct sockaddr_in6"
2625
        check_type ws2tcpip.h "struct sockaddr_storage"
2626
        check_struct winsock2.h "struct sockaddr" sa_len
2627
    else
2628
        disable network
2629
    fi
2630
fi
2631

    
2632
check_header linux/videodev.h
2633
check_header linux/videodev2.h
2634
check_header sys/videoio.h
2635

    
2636
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2637

    
2638
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2639
{ check_header dev/bktr/ioctl_meteor.h &&
2640
  check_header dev/bktr/ioctl_bt848.h; } ||
2641
{ check_header machine/ioctl_meteor.h &&
2642
  check_header machine/ioctl_bt848.h; } ||
2643
{ check_header dev/video/meteor/ioctl_meteor.h &&
2644
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2645
check_header dev/ic/bt8xx.h
2646

    
2647
check_header sys/soundcard.h
2648
check_header soundcard.h
2649

    
2650
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2651

    
2652
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2653

    
2654
enabled x11grab                         &&
2655
check_header X11/Xlib.h                 &&
2656
check_header X11/extensions/XShm.h      &&
2657
check_header X11/extensions/Xfixes.h    &&
2658
check_func XOpenDisplay -lX11           &&
2659
check_func XShmCreateImage -lX11 -lXext &&
2660
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2661

    
2662
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2663
check_cpp_condition \
2664
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2665
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2666
      disable vdpau; }
2667
fi
2668

    
2669
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2670

    
2671
# add some useful compiler flags if supported
2672
check_cflags -Wdeclaration-after-statement
2673
check_cflags -Wall
2674
check_cflags -Wno-switch
2675
check_cflags -Wdisabled-optimization
2676
check_cflags -Wpointer-arith
2677
check_cflags -Wredundant-decls
2678
check_cflags -Wno-pointer-sign
2679
check_cflags -Wcast-qual
2680
check_cflags -Wwrite-strings
2681
check_cflags -Wtype-limits
2682
check_cflags -Wundef
2683
enabled extra_warnings && check_cflags -Winline
2684

    
2685
# add some linker flags
2686
check_ldflags -Wl,--warn-common
2687
check_ldflags -Wl,--as-needed
2688
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'
2689
check_ldflags -Wl,-Bsymbolic
2690

    
2691
echo "X{};" > $TMPV
2692
test_ldflags -Wl,--version-script,$TMPV &&
2693
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2694

    
2695
if enabled small; then
2696
    add_cflags $size_cflags
2697
    optimizations="small"
2698
elif enabled optimizations; then
2699
    add_cflags $speed_cflags
2700
fi
2701
check_cflags -fno-math-errno
2702
check_cflags -fno-signed-zeros
2703

    
2704
if enabled icc; then
2705
    # Just warnings, no remarks
2706
    check_cflags -w1
2707
    # -wd: Disable following warnings
2708
    # 144, 167, 556: -Wno-pointer-sign
2709
    # 10006: ignoring unknown option -fno-signed-zeros
2710
    # 10156: ignoring option '-W'; no argument required
2711
    check_cflags -wd144,167,556,10006,10156
2712
    # 11030: Warning unknown option --as-needed
2713
    # 10156: ignoring option '-export'; no argument required
2714
    check_ldflags -wd10156,11030
2715
    # Allow to compile with optimizations
2716
    check_ldflags -march=$cpu
2717
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2718
    enable ebp_available
2719
elif enabled ccc; then
2720
    # disable some annoying warnings
2721
    add_cflags -msg_disable cvtu32to64
2722
    add_cflags -msg_disable embedcomment
2723
    add_cflags -msg_disable needconstext
2724
    add_cflags -msg_disable nomainieee
2725
    add_cflags -msg_disable ptrmismatch1
2726
    add_cflags -msg_disable unreachcode
2727
elif enabled gcc; then
2728
    check_cflags -fno-tree-vectorize
2729
elif enabled clang; then
2730
    check_cflags -Qunused-arguments
2731
elif enabled armcc; then
2732
    # 2523: use of inline assembler is deprecated
2733
    add_cflags -Wrvct,--diag_suppress=2523
2734
elif enabled tms470; then
2735
    add_cflags -pds=824 -pds=837
2736
fi
2737

    
2738
if enabled gprof; then
2739
    add_cflags  -p
2740
    add_ldflags -p
2741
fi
2742

    
2743
# Find out if the .align argument is a power of two or not.
2744
check_asm asmalign_pot '".align 3"'
2745

    
2746
enabled_any $DECODER_LIST      && enable decoders
2747
enabled_any $ENCODER_LIST      && enable encoders
2748
enabled_any $HWACCEL_LIST      && enable hwaccels
2749
enabled_any $BSF_LIST          && enable bsfs
2750
enabled_any $DEMUXER_LIST      && enable demuxers
2751
enabled_any $MUXER_LIST        && enable muxers
2752
enabled_any $FILTER_LIST       && enable filters
2753
enabled_any $INDEV_LIST        && enable indevs
2754
enabled_any $OUTDEV_LIST       && enable outdevs
2755
enabled_any $PROTOCOL_LIST     && enable protocols
2756

    
2757
enabled_any $THREADS_LIST      && enable threads
2758

    
2759
check_deps $CONFIG_LIST       \
2760
           $CONFIG_EXTRA      \
2761
           $HAVE_LIST         \
2762
           $DECODER_LIST      \
2763
           $ENCODER_LIST      \
2764
           $HWACCEL_LIST      \
2765
           $PARSER_LIST       \
2766
           $BSF_LIST          \
2767
           $DEMUXER_LIST      \
2768
           $MUXER_LIST        \
2769
           $FILTER_LIST       \
2770
           $INDEV_LIST        \
2771
           $OUTDEV_LIST       \
2772
           $PROTOCOL_LIST     \
2773

    
2774
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2775

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

    
2858
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2859
    echo "Enabled ${type}s:"
2860
    eval list=\$$(toupper $type)_LIST
2861
    for part in $list; do
2862
        enabled $part && echo ${part%_*}
2863
    done | sort | pr -3 -t
2864
    echo
2865
done
2866

    
2867
license="LGPL version 2.1 or later"
2868
if enabled nonfree; then
2869
    license="nonfree and unredistributable"
2870
elif enabled gplv3; then
2871
    license="GPL version 3 or later"
2872
elif enabled lgplv3; then
2873
    license="LGPL version 3 or later"
2874
elif enabled gpl; then
2875
    license="GPL version 2 or later"
2876
fi
2877

    
2878
echo "License: $license"
2879

    
2880
echo "Creating config.mak and config.h..."
2881

    
2882
# build tree in object directory if source path is different from current one
2883
if enabled source_path_used; then
2884
    DIRS="
2885
        doc
2886
        libavcodec
2887
        libavcodec/$arch
2888
        libavdevice
2889
        libavfilter
2890
        libavformat
2891
        libavutil
2892
        libavutil/$arch
2893
        libpostproc
2894
        libswscale
2895
        libswscale/$arch
2896
        tests
2897
        tools
2898
    "
2899
    FILES="
2900
        Makefile
2901
        common.mak
2902
        subdir.mak
2903
        doc/texi2pod.pl
2904
        libavcodec/Makefile
2905
        libavdevice/Makefile
2906
        libavfilter/Makefile
2907
        libavformat/Makefile
2908
        libavutil/Makefile
2909
        libpostproc/Makefile
2910
        libswscale/Makefile
2911
    "
2912
    for dir in $DIRS ; do
2913
        mkdir -p $dir
2914
    done
2915
    for f in $FILES ; do
2916
        $ln_s "$source_path/$f" $f
2917
    done
2918
fi
2919

    
2920
enabled stripping || strip="echo skipping strip"
2921

    
2922
cat > config.mak <<EOF
2923
# Automatically generated by configure - do not modify!
2924
ifndef FFMPEG_CONFIG_MAK
2925
FFMPEG_CONFIG_MAK=1
2926
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2927
prefix=$prefix
2928
LIBDIR=\$(DESTDIR)$libdir
2929
SHLIBDIR=\$(DESTDIR)$shlibdir
2930
INCDIR=\$(DESTDIR)$incdir
2931
BINDIR=\$(DESTDIR)$bindir
2932
DATADIR=\$(DESTDIR)$datadir
2933
MANDIR=\$(DESTDIR)$mandir
2934
SRC_PATH="$source_path"
2935
SRC_PATH_BARE=$source_path
2936
BUILD_ROOT="$PWD"
2937
ARCH=$arch
2938
CC=$cc
2939
AS=$as
2940
LD=$ld
2941
DEPCC=$dep_cc
2942
YASM=$yasmexe
2943
AR=$ar
2944
RANLIB=$ranlib
2945
LN_S=$ln_s
2946
STRIP=$strip
2947
CPPFLAGS=$CPPFLAGS
2948
CFLAGS=$CFLAGS
2949
ASFLAGS=$ASFLAGS
2950
CC_O=$CC_O
2951
LDFLAGS=$LDFLAGS
2952
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2953
SHFLAGS=$SHFLAGS
2954
YASMFLAGS=$YASMFLAGS
2955
BUILDSUF=$build_suffix
2956
FULLNAME=$FULLNAME
2957
LIBPREF=$LIBPREF
2958
LIBSUF=$LIBSUF
2959
LIBNAME=$LIBNAME
2960
SLIBPREF=$SLIBPREF
2961
SLIBSUF=$SLIBSUF
2962
EXESUF=$EXESUF
2963
EXTRA_VERSION=$extra_version
2964
DEPFLAGS=$DEPFLAGS
2965
CCDEP=$CCDEP
2966
ASDEP=$ASDEP
2967
CC_DEPFLAGS=$CC_DEPFLAGS
2968
AS_DEPFLAGS=$AS_DEPFLAGS
2969
HOSTCC=$host_cc
2970
HOSTCFLAGS=$host_cflags
2971
HOSTEXESUF=$HOSTEXESUF
2972
HOSTLDFLAGS=$host_ldflags
2973
HOSTLIBS=$host_libs
2974
TARGET_EXEC=$target_exec
2975
TARGET_PATH=$target_path
2976
SDL_LIBS=$sdl_libs
2977
SDL_CFLAGS=$sdl_cflags
2978
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2979
EXTRALIBS=$extralibs
2980
EOF
2981

    
2982
get_version(){
2983
    name=$1
2984
    file=$source_path/$2
2985
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2986
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2987
    lcname=$(tolower $name)
2988
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2989
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2990
}
2991

    
2992
get_version LIBSWSCALE  libswscale/swscale.h
2993
get_version LIBPOSTPROC libpostproc/postprocess.h
2994
get_version LIBAVCODEC  libavcodec/avcodec.h
2995
get_version LIBAVDEVICE libavdevice/avdevice.h
2996
get_version LIBAVFORMAT libavformat/avformat.h
2997
get_version LIBAVUTIL   libavutil/avutil.h
2998
get_version LIBAVFILTER libavfilter/avfilter.h
2999

    
3000
enabled shared && cat >> config.mak <<EOF
3001
LIBTARGET=${LIBTARGET}
3002
SLIBNAME=${SLIBNAME}
3003
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3004
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3005
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3006
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3007
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3008
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3009
EOF
3010

    
3011
enabled asmalign_pot || align_shift="1 <<"
3012

    
3013
cat > $TMPH <<EOF
3014
/* Automatically generated by configure - do not modify! */
3015
#ifndef FFMPEG_CONFIG_H
3016
#define FFMPEG_CONFIG_H
3017
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3018
#define FFMPEG_LICENSE "$(c_escape $license)"
3019
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3020
#define CC_TYPE "$cc_type"
3021
#define CC_VERSION $cc_version
3022
#define restrict $_restrict
3023
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3024
#define EXTERN_PREFIX "${extern_prefix}"
3025
#define EXTERN_ASM ${extern_prefix}
3026
EOF
3027

    
3028
test -n "$malloc_prefix" &&
3029
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3030

    
3031
if enabled small || disabled optimizations; then
3032
    echo "#define av_always_inline"  >> $TMPH
3033
fi
3034

    
3035
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3036
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3037
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3038
                                      $CONFIG_EXTRA      \
3039
                                      $DECODER_LIST      \
3040
                                      $ENCODER_LIST      \
3041
                                      $HWACCEL_LIST      \
3042
                                      $PARSER_LIST       \
3043
                                      $BSF_LIST          \
3044
                                      $DEMUXER_LIST      \
3045
                                      $MUXER_LIST        \
3046
                                      $FILTER_LIST       \
3047
                                      $PROTOCOL_LIST     \
3048
                                      $INDEV_LIST        \
3049
                                      $OUTDEV_LIST       \
3050

    
3051
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3052
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3053

    
3054
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3055
cp_if_changed $TMPH config.h
3056

    
3057
cat > $TMPH <<EOF
3058
/* Generated by ffconf */
3059
#ifndef AVUTIL_AVCONFIG_H
3060
#define AVUTIL_AVCONFIG_H
3061
EOF
3062

    
3063
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3064

    
3065
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3066

    
3067
cp_if_changed $TMPH libavutil/avconfig.h
3068

    
3069
# build pkg-config files
3070

    
3071
pkgconfig_generate(){
3072
name=$1
3073
shortname=${name#lib}${build_suffix}
3074
comment=$2
3075
version=$3
3076
libs=$4
3077
requires=$5
3078
cat <<EOF > $name/$name.pc
3079
prefix=$prefix
3080
exec_prefix=\${prefix}
3081
libdir=$libdir
3082
includedir=$incdir
3083

    
3084
Name: $name
3085
Description: $comment
3086
Version: $version
3087
Requires: $(enabled shared || echo $requires)
3088
Requires.private: $(enabled shared && echo $requires)
3089
Conflicts:
3090
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3091
Libs.private: $(enabled shared && echo $libs)
3092
Cflags: -I\${includedir}
3093
EOF
3094
cat <<EOF > $name/$name-uninstalled.pc
3095
prefix=
3096
exec_prefix=
3097
libdir=\${pcfiledir}
3098
includedir=${source_path}
3099

    
3100
Name: $name
3101
Description: $comment
3102
Version: $version
3103
Requires: $requires
3104
Conflicts:
3105
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3106
Cflags: -I\${includedir}
3107
EOF
3108
}
3109

    
3110
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3111
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3112
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3113
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3114
enabled avfilter &&
3115
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3116
enabled postproc &&
3117
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3118
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"