Statistics
| Branch: | Revision:

ffmpeg / configure @ 350f3d14

History | View | Annotate | Download (104 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.log]
65
  --disable-logging        do not log configure debug information
66
  --prefix=PREFIX          install in PREFIX [$prefix]
67
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
68
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69
  --libdir=DIR             install libs in DIR [PREFIX/lib]
70
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71
  --incdir=DIR             install includes in DIR [PREFIX/include]
72
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
73

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

    
160
External library support:
161
  --enable-avisynth        enable reading of AVISynth script files [no]
162
  --enable-bzlib           enable bzlib [autodetect]
163
  --enable-libcelt         enable CELT/Opus decoding via libcelt [no]
164
  --enable-frei0r          enable frei0r video filtering
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-libopencv       enable video filtering via libopencv [no]
168
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
169
                           and libraw1394 [no]
170
  --enable-libdirac        enable Dirac support via libdirac [no]
171
  --enable-libfaac         enable FAAC support via libfaac [no]
172
  --enable-libfreetype     enable libfreetype [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-librtmp         enable RTMP[E] support via librtmp [no]
179
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
180
  --enable-libspeex        enable Speex decoding via libspeex [no]
181
  --enable-libtheora       enable Theora encoding via libtheora [no]
182
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
183
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
184
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
185
                           native implementation exists [no]
186
  --enable-libvpx          enable VP8 support via libvpx [no]
187
  --enable-libx264         enable H.264 encoding via x264 [no]
188
  --enable-libxavs         enable AVS encoding via xavs [no]
189
  --enable-libxvid         enable Xvid encoding via xvidcore,
190
                           native MPEG-4/Xvid encoder exists [no]
191
  --enable-mlib            enable Sun medialib [no]
192
  --enable-zlib            enable zlib [autodetect]
193

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

    
243
Developer options (useful when working on FFmpeg itself):
244
  --disable-debug          disable debugging symbols
245
  --enable-debug=LEVEL     set the debug level [$debuglevel]
246
  --disable-optimizations  disable compiler optimizations
247
  --enable-extra-warnings  enable more compiler warnings
248
  --disable-stripping      disable stripping of executables and shared libraries
249
  --samples=PATH           location of test samples for FATE, if not set use
250
                           \$FATE_SAMPLES at make invocation time.
251

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

    
257
quotes='""'
258

    
259
log(){
260
    echo "$@" >> $logfile
261
}
262

    
263
log_file(){
264
    log BEGIN $1
265
    pr -n -t $1 >> $logfile
266
    log END $1
267
}
268

    
269
echolog(){
270
    log "$@"
271
    echo "$@"
272
}
273

    
274
warn(){
275
    log "WARNING: $*"
276
    WARNINGS="${WARNINGS}WARNING: $*\n"
277
}
278

    
279
die(){
280
    echolog "$@"
281
    cat <<EOF
282

    
283
If you think configure made a mistake, make sure you are using the latest
284
version from Git.  If the latest version fails, report the problem to the
285
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
286
EOF
287
    if disabled logging; then
288
        cat <<EOF
289
Rerun configure with logging enabled (do not use --disable-logging), and
290
include the log this produces with your report.
291
EOF
292
    else
293
cat <<EOF
294
Include the log file "$logfile" produced by configure as this will help
295
solving the problem.
296
EOF
297
    fi
298
    exit 1
299
}
300

    
301
# Avoid locale weirdness, besides we really just want to translate ASCII.
302
toupper(){
303
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
304
}
305

    
306
tolower(){
307
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
308
}
309

    
310
c_escape(){
311
    echo "$*" | sed 's/["\\]/\\\0/g'
312
}
313

    
314
sh_quote(){
315
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
316
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
317
    echo "$v"
318
}
319

    
320
cleanws(){
321
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
322
}
323

    
324
filter(){
325
    pat=$1
326
    shift
327
    for v; do
328
        eval "case $v in $pat) echo $v ;; esac"
329
    done
330
}
331

    
332
filter_out(){
333
    pat=$1
334
    shift
335
    for v; do
336
        eval "case $v in $pat) ;; *) echo $v ;; esac"
337
    done
338
}
339

    
340
map(){
341
    m=$1
342
    shift
343
    for v; do eval $m; done
344
}
345

    
346
set_all(){
347
    value=$1
348
    shift
349
    for var in $*; do
350
        eval $var=$value
351
    done
352
}
353

    
354
set_weak(){
355
    value=$1
356
    shift
357
    for var; do
358
        eval : \${$var:=$value}
359
    done
360
}
361

    
362
set_safe(){
363
    var=$1
364
    shift
365
    eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
366
}
367

    
368
get_safe(){
369
    eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
370
}
371

    
372
pushvar(){
373
    for var in $*; do
374
        eval level=\${${var}_level:=0}
375
        eval ${var}_${level}="\$$var"
376
        eval ${var}_level=$(($level+1))
377
    done
378
}
379

    
380
popvar(){
381
    for var in $*; do
382
        eval level=\${${var}_level:-0}
383
        test $level = 0 && continue
384
        eval level=$(($level-1))
385
        eval $var="\${${var}_${level}}"
386
        eval ${var}_level=$level
387
        eval unset ${var}_${level}
388
    done
389
}
390

    
391
enable(){
392
    set_all yes $*
393
}
394

    
395
disable(){
396
    set_all no $*
397
}
398

    
399
enable_weak(){
400
    set_weak yes $*
401
}
402

    
403
disable_weak(){
404
    set_weak no $*
405
}
406

    
407
enable_safe(){
408
    for var; do
409
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
410
    done
411
}
412

    
413
disable_safe(){
414
    for var; do
415
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
416
    done
417
}
418

    
419
do_enable_deep(){
420
    for var; do
421
        enabled $var && continue
422
        eval sel="\$${var}_select"
423
        eval sgs="\$${var}_suggest"
424
        pushvar var sgs
425
        enable_deep $sel
426
        popvar sgs
427
        enable_deep_weak $sgs
428
        popvar var
429
    done
430
}
431

    
432
enable_deep(){
433
    do_enable_deep $*
434
    enable $*
435
}
436

    
437
enable_deep_weak(){
438
    do_enable_deep $*
439
    enable_weak $*
440
}
441

    
442
enabled(){
443
    test "${1#!}" = "$1" && op== || op=!=
444
    eval test "x\$${1#!}" $op "xyes"
445
}
446

    
447
disabled(){
448
    test "${1#!}" = "$1" && op== || op=!=
449
    eval test "x\$${1#!}" $op "xno"
450
}
451

    
452
enabled_all(){
453
    for opt; do
454
        enabled $opt || return 1
455
    done
456
}
457

    
458
disabled_all(){
459
    for opt; do
460
        disabled $opt || return 1
461
    done
462
}
463

    
464
enabled_any(){
465
    for opt; do
466
        enabled $opt && return 0
467
    done
468
}
469

    
470
disabled_any(){
471
    for opt; do
472
        disabled $opt && return 0
473
    done
474
    return 1
475
}
476

    
477
set_default(){
478
    for opt; do
479
        eval : \${$opt:=\$${opt}_default}
480
    done
481
}
482

    
483
is_in(){
484
    value=$1
485
    shift
486
    for var in $*; do
487
        [ $var = $value ] && return 0
488
    done
489
    return 1
490
}
491

    
492
check_deps(){
493
    for cfg; do
494
        cfg="${cfg#!}"
495
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
496
        disabled ${cfg}_checking && continue
497
        enable ${cfg}_checking
498

    
499
        eval dep_all="\$${cfg}_deps"
500
        eval dep_any="\$${cfg}_deps_any"
501
        eval dep_sel="\$${cfg}_select"
502
        eval dep_sgs="\$${cfg}_suggest"
503
        eval dep_ifa="\$${cfg}_if"
504
        eval dep_ifn="\$${cfg}_if_any"
505

    
506
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
507
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
508
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
509

    
510
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
511
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
512
        enabled_all  $dep_all || disable $cfg
513
        enabled_any  $dep_any || disable $cfg
514
        disabled_any $dep_sel && disable $cfg
515

    
516
        if enabled $cfg; then
517
            eval dep_extralibs="\$${cfg}_extralibs"
518
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
519
            enable_deep $dep_sel
520
            enable_deep_weak $dep_sgs
521
        fi
522

    
523
        disable ${cfg}_checking
524
    done
525
}
526

    
527
print_config_h(){
528
    enabled $1 && v=1 || v=0
529
    echo "#define $2 $v"
530
}
531

    
532
print_config_mak(){
533
    enabled $1 && v= || v=!
534
    echo "$v$2=yes"
535
}
536

    
537
print_config_asm(){
538
    enabled $1 && echo "%define $2"
539
}
540

    
541
print_config(){
542
    pfx=$1
543
    files=$2
544
    shift 2
545
    for cfg; do
546
        ucname="$(toupper $cfg)"
547
        for f in $files; do
548
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
549
        done
550
    done
551
}
552

    
553
print_enabled(){
554
    test "$1" = -n && end=" " && shift || end="\n"
555
    suf=$1
556
    shift
557
    for v; do
558
        enabled $v && printf "%s$end" ${v%$suf};
559
    done
560
}
561

    
562
append(){
563
    var=$1
564
    shift
565
    eval "$var=\"\$$var $*\""
566
}
567

    
568
prepend(){
569
    var=$1
570
    shift
571
    eval "$var=\"$* \$$var\""
572
}
573

    
574
add_cppflags(){
575
    append CPPFLAGS $($filter_cppflags "$@")
576
}
577

    
578
add_cflags(){
579
    append CFLAGS $($filter_cflags "$@")
580
}
581

    
582
add_asflags(){
583
    append ASFLAGS $($filter_asflags "$@")
584
}
585

    
586
add_ldflags(){
587
    append LDFLAGS "$@"
588
}
589

    
590
add_extralibs(){
591
    prepend extralibs "$@"
592
}
593

    
594
check_cmd(){
595
    log "$@"
596
    "$@" >> $logfile 2>&1
597
}
598

    
599
check_cc(){
600
    log check_cc "$@"
601
    cat > $TMPC
602
    log_file $TMPC
603
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
604
}
605

    
606
check_cpp(){
607
    log check_cpp "$@"
608
    cat > $TMPC
609
    log_file $TMPC
610
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
611
}
612

    
613
check_as(){
614
    log check_as "$@"
615
    cat > $TMPC
616
    log_file $TMPC
617
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
618
}
619

    
620
check_asm(){
621
    log check_asm "$@"
622
    name="$1"
623
    code="$2"
624
    shift 2
625
    disable $name
626
    check_as "$@" <<EOF && enable $name
627
void foo(void){ __asm__ volatile($code); }
628
EOF
629
}
630

    
631
check_yasm(){
632
    log check_yasm "$@"
633
    echo "$1" > $TMPS
634
    log_file $TMPS
635
    shift 1
636
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
637
}
638

    
639
check_ld(){
640
    log check_ld "$@"
641
    flags=''
642
    libs=''
643
    for f; do
644
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
645
    done
646
    check_cc $($filter_cflags $flags) || return
647
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
648
}
649

    
650
check_cppflags(){
651
    log check_cppflags "$@"
652
    set -- $($filter_cppflags "$@")
653
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
654
int x;
655
EOF
656
}
657

    
658
check_cflags(){
659
    log check_cflags "$@"
660
    set -- $($filter_cflags "$@")
661
    check_cc "$@" <<EOF && append CFLAGS "$@"
662
int x;
663
EOF
664
}
665

    
666
test_ldflags(){
667
    log test_ldflags "$@"
668
    check_ld "$@" <<EOF
669
int main(void){ return 0; }
670
EOF
671
}
672

    
673
check_ldflags(){
674
    log check_ldflags "$@"
675
    test_ldflags "$@" && add_ldflags "$@"
676
}
677

    
678
check_header(){
679
    log check_header "$@"
680
    header=$1
681
    shift
682
    disable_safe $header
683
    check_cpp "$@" <<EOF && enable_safe $header
684
#include <$header>
685
int x;
686
EOF
687
}
688

    
689
check_func(){
690
    log check_func "$@"
691
    func=$1
692
    shift
693
    disable $func
694
    check_ld "$@" <<EOF && enable $func
695
extern int $func();
696
int main(void){ $func(); }
697
EOF
698
}
699

    
700
check_mathfunc(){
701
    log check_mathfunc "$@"
702
    func=$1
703
    shift
704
    disable $func
705
    check_ld "$@" <<EOF && enable $func
706
#include <math.h>
707
float foo(float f) { return $func(f); }
708
int main(void){ return 0; }
709
EOF
710
}
711

    
712
check_func_headers(){
713
    log check_func_headers "$@"
714
    headers=$1
715
    funcs=$2
716
    shift 2
717
    {
718
        for hdr in $headers; do
719
            echo "#include <$hdr>"
720
        done
721
        for func in $funcs; do
722
            echo "long check_$func(void) { return (long) $func; }"
723
        done
724
        echo "int main(void) { return 0; }"
725
    } | check_ld "$@" && enable $funcs && enable_safe $headers
726
}
727

    
728
check_cpp_condition(){
729
    log check_cpp_condition "$@"
730
    header=$1
731
    condition=$2
732
    shift 2
733
    check_cpp $($filter_cppflags "$@") <<EOF
734
#include <$header>
735
#if !($condition)
736
#error "unsatisfied condition: $condition"
737
#endif
738
EOF
739
}
740

    
741
check_lib(){
742
    log check_lib "$@"
743
    header="$1"
744
    func="$2"
745
    shift 2
746
    check_header $header && check_func $func "$@" && add_extralibs "$@"
747
}
748

    
749
check_lib2(){
750
    log check_lib2 "$@"
751
    headers="$1"
752
    funcs="$2"
753
    shift 2
754
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
755
}
756

    
757
check_pkg_config(){
758
    log check_pkg_config "$@"
759
    pkg="$1"
760
    headers="$2"
761
    funcs="$3"
762
    shift 3
763
    $pkg_config --exists $pkg 2>/dev/null || return
764
    pkg_cflags=$($pkg_config --cflags $pkg)
765
    pkg_libs=$($pkg_config --libs $pkg)
766
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
767
        set_safe ${pkg}_cflags $pkg_cflags   &&
768
        set_safe ${pkg}_libs   $pkg_libs
769
}
770

    
771
check_exec(){
772
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
773
}
774

    
775
check_exec_crash(){
776
    code=$(cat)
777

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

    
784
    (check_exec "$@") >> $logfile 2>&1 <<EOF
785
#include <signal.h>
786
static void sighandler(int sig){
787
    raise(SIGTERM);
788
}
789
int main(void){
790
    signal(SIGILL, sighandler);
791
    signal(SIGFPE, sighandler);
792
    signal(SIGSEGV, sighandler);
793
#ifdef SIGBUS
794
    signal(SIGBUS, sighandler);
795
#endif
796
    { $code }
797
}
798
EOF
799
}
800

    
801
check_type(){
802
    log check_type "$@"
803
    headers=$1
804
    type=$2
805
    shift 2
806
    disable_safe "$type"
807
    incs=""
808
    for hdr in $headers; do
809
        incs="$incs
810
#include <$hdr>"
811
    done
812
    check_cc "$@" <<EOF && enable_safe "$type"
813
$incs
814
$type v;
815
EOF
816
}
817

    
818
check_struct(){
819
    log check_type "$@"
820
    headers=$1
821
    struct=$2
822
    member=$3
823
    shift 3
824
    disable_safe "${struct}_${member}"
825
    incs=""
826
    for hdr in $headers; do
827
        incs="$incs
828
#include <$hdr>"
829
    done
830
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
831
$incs
832
const void *p = &(($struct *)0)->$member;
833
EOF
834
}
835

    
836
require(){
837
    name="$1"
838
    header="$2"
839
    func="$3"
840
    shift 3
841
    check_lib $header $func "$@" || die "ERROR: $name not found"
842
}
843

    
844
require2(){
845
    name="$1"
846
    headers="$2"
847
    func="$3"
848
    shift 3
849
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
850
}
851

    
852
require_pkg_config(){
853
    pkg="$1"
854
    check_pkg_config "$@" || die "ERROR: $pkg not found"
855
    add_cflags    $(get_safe ${pkg}_cflags)
856
    add_extralibs $(get_safe ${pkg}_libs)
857
}
858

    
859
check_host_cc(){
860
    log check_host_cc "$@"
861
    cat > $TMPC
862
    log_file $TMPC
863
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
864
}
865

    
866
check_host_cflags(){
867
    log check_host_cflags "$@"
868
    check_host_cc "$@" <<EOF && append host_cflags "$@"
869
int x;
870
EOF
871
}
872

    
873
apply(){
874
    file=$1
875
    shift
876
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
877
}
878

    
879
cp_if_changed(){
880
    cmp -s "$1" "$2" &&
881
        echo "$2 is unchanged" ||
882
        cp -f "$1" "$2"
883
}
884

    
885
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
886
# system-dependent things.
887

    
888
COMPONENT_LIST="
889
    bsfs
890
    decoders
891
    demuxers
892
    encoders
893
    filters
894
    hwaccels
895
    indevs
896
    muxers
897
    outdevs
898
    parsers
899
    protocols
900
"
901

    
902
CONFIG_LIST="
903
    $COMPONENT_LIST
904
    aandct
905
    ac3dsp
906
    avcodec
907
    avdevice
908
    avfilter
909
    avformat
910
    avisynth
911
    bzlib
912
    crystalhd
913
    dct
914
    doc
915
    dwt
916
    dxva2
917
    fastdiv
918
    ffmpeg
919
    ffplay
920
    ffprobe
921
    ffserver
922
    fft
923
    frei0r
924
    golomb
925
    gpl
926
    gray
927
    h264dsp
928
    h264pred
929
    hardcoded_tables
930
    huffman
931
    libcelt
932
    libdc1394
933
    libdirac
934
    libfaac
935
    libfreetype
936
    libgsm
937
    libmp3lame
938
    libnut
939
    libopencore_amrnb
940
    libopencore_amrwb
941
    libopencv
942
    libopenjpeg
943
    librtmp
944
    libschroedinger
945
    libspeex
946
    libtheora
947
    libvo_aacenc
948
    libvo_amrwbenc
949
    libvorbis
950
    libvpx
951
    libx264
952
    libxavs
953
    libxvid
954
    lpc
955
    lsp
956
    mdct
957
    memalign_hack
958
    mlib
959
    network
960
    nonfree
961
    pic
962
    postproc
963
    rdft
964
    rtpdec
965
    runtime_cpudetect
966
    shared
967
    sinewin
968
    small
969
    sram
970
    static
971
    swscale
972
    swscale_alpha
973
    vaapi
974
    vdpau
975
    version3
976
    x11grab
977
    zlib
978
"
979

    
980
THREADS_LIST='
981
    pthreads
982
    w32threads
983
'
984

    
985
ARCH_LIST='
986
    alpha
987
    arm
988
    avr32
989
    avr32_ap
990
    avr32_uc
991
    bfin
992
    ia64
993
    m68k
994
    mips
995
    mips64
996
    parisc
997
    ppc
998
    ppc64
999
    s390
1000
    sh4
1001
    sparc
1002
    sparc64
1003
    tomi
1004
    x86
1005
    x86_32
1006
    x86_64
1007
'
1008

    
1009
ARCH_EXT_LIST='
1010
    altivec
1011
    amd3dnow
1012
    amd3dnowext
1013
    armv5te
1014
    armv6
1015
    armv6t2
1016
    armvfp
1017
    avx
1018
    iwmmxt
1019
    mmi
1020
    mmx
1021
    mmx2
1022
    neon
1023
    ppc4xx
1024
    sse
1025
    ssse3
1026
    vis
1027
'
1028

    
1029
HAVE_LIST_PUB='
1030
    bigendian
1031
    fast_unaligned
1032
'
1033

    
1034
HAVE_LIST="
1035
    $ARCH_EXT_LIST
1036
    $HAVE_LIST_PUB
1037
    $THREADS_LIST
1038
    aligned_stack
1039
    alsa_asoundlib_h
1040
    altivec_h
1041
    arpa_inet_h
1042
    attribute_may_alias
1043
    attribute_packed
1044
    bswap
1045
    closesocket
1046
    cmov
1047
    dcbzl
1048
    dev_bktr_ioctl_bt848_h
1049
    dev_bktr_ioctl_meteor_h
1050
    dev_ic_bt8xx_h
1051
    dev_video_meteor_ioctl_meteor_h
1052
    dev_video_bktr_ioctl_bt848_h
1053
    dlfcn_h
1054
    dlopen
1055
    dos_paths
1056
    ebp_available
1057
    ebx_available
1058
    exp2
1059
    exp2f
1060
    fast_64bit
1061
    fast_clz
1062
    fast_cmov
1063
    fcntl
1064
    fork
1065
    getaddrinfo
1066
    gethrtime
1067
    GetProcessMemoryInfo
1068
    GetProcessTimes
1069
    getrusage
1070
    gnu_as
1071
    struct_rusage_ru_maxrss
1072
    ibm_asm
1073
    inet_aton
1074
    inline_asm
1075
    isatty
1076
    kbhit
1077
    ldbrx
1078
    libdc1394_1
1079
    libdc1394_2
1080
    llrint
1081
    llrintf
1082
    local_aligned_16
1083
    local_aligned_8
1084
    localtime_r
1085
    log2
1086
    log2f
1087
    loongson
1088
    lrint
1089
    lrintf
1090
    lzo1x_999_compress
1091
    machine_ioctl_bt848_h
1092
    machine_ioctl_meteor_h
1093
    malloc_h
1094
    MapViewOfFile
1095
    memalign
1096
    mkstemp
1097
    mmap
1098
    pld
1099
    posix_memalign
1100
    round
1101
    roundf
1102
    sdl
1103
    sdl_video_size
1104
    setmode
1105
    sndio_h
1106
    socklen_t
1107
    soundcard_h
1108
    poll_h
1109
    setrlimit
1110
    strerror_r
1111
    strtok_r
1112
    struct_addrinfo
1113
    struct_ipv6_mreq
1114
    struct_sockaddr_in6
1115
    struct_sockaddr_sa_len
1116
    struct_sockaddr_storage
1117
    symver
1118
    symver_gnu_asm
1119
    symver_asm_label
1120
    sys_mman_h
1121
    sys_resource_h
1122
    sys_select_h
1123
    sys_soundcard_h
1124
    sys_videoio_h
1125
    ten_operands
1126
    termios_h
1127
    threads
1128
    trunc
1129
    truncf
1130
    vfp_args
1131
    VirtualAlloc
1132
    winsock2_h
1133
    xform_asm
1134
    xmm_clobbers
1135
    yasm
1136
"
1137

    
1138
# options emitted with CONFIG_ prefix but not available on command line
1139
CONFIG_EXTRA="
1140
    avutil
1141
    gplv3
1142
    lgplv3
1143
"
1144

    
1145
CMDLINE_SELECT="
1146
    $ARCH_EXT_LIST
1147
    $CONFIG_LIST
1148
    $THREADS_LIST
1149
    asm
1150
    cross_compile
1151
    debug
1152
    extra_warnings
1153
    logging
1154
    optimizations
1155
    stripping
1156
    symver
1157
    yasm
1158
"
1159

    
1160
PATHS_LIST='
1161
    bindir
1162
    datadir
1163
    incdir
1164
    libdir
1165
    mandir
1166
    prefix
1167
    shlibdir
1168
'
1169

    
1170
CMDLINE_SET="
1171
    $PATHS_LIST
1172
    ar
1173
    arch
1174
    as
1175
    build_suffix
1176
    cc
1177
    cpu
1178
    cross_prefix
1179
    dep_cc
1180
    extra_version
1181
    host_cc
1182
    host_cflags
1183
    host_ldflags
1184
    host_libs
1185
    host_os
1186
    ld
1187
    logfile
1188
    malloc_prefix
1189
    nm
1190
    pkg_config
1191
    samples
1192
    source_path
1193
    strip
1194
    sysinclude
1195
    sysroot
1196
    target_exec
1197
    target_os
1198
    target_path
1199
"
1200

    
1201
CMDLINE_APPEND="
1202
    extra_cflags
1203
"
1204

    
1205
# code dependency declarations
1206

    
1207
# architecture extensions
1208

    
1209
armv5te_deps="arm"
1210
armv6_deps="arm"
1211
armv6t2_deps="arm"
1212
armvfp_deps="arm"
1213
iwmmxt_deps="arm"
1214
neon_deps="arm"
1215

    
1216
mmi_deps="mips"
1217

    
1218
altivec_deps="ppc"
1219
ppc4xx_deps="ppc"
1220

    
1221
vis_deps="sparc"
1222

    
1223
x86_64_suggest="cmov fast_cmov"
1224
amd3dnow_deps="mmx"
1225
amd3dnowext_deps="amd3dnow"
1226
mmx_deps="x86"
1227
mmx2_deps="mmx"
1228
sse_deps="mmx"
1229
ssse3_deps="sse"
1230
avx_deps="ssse3"
1231

    
1232
aligned_stack_if_any="ppc x86"
1233
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1234
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1235
fast_unaligned_if_any="armv6 ppc x86"
1236

    
1237
need_memalign="altivec neon sse"
1238
inline_asm_deps="!tms470"
1239

    
1240
symver_if_any="symver_asm_label symver_gnu_asm"
1241

    
1242
# subsystems
1243
dct_select="rdft"
1244
mdct_select="fft"
1245
rdft_select="fft"
1246

    
1247
# decoders / encoders / hardware accelerators
1248
aac_decoder_select="mdct sinewin"
1249
aac_encoder_select="mdct sinewin"
1250
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1251
ac3_decoder_select="mdct ac3dsp ac3_parser"
1252
ac3_encoder_select="mdct ac3dsp"
1253
ac3_fixed_encoder_select="mdct ac3dsp"
1254
alac_encoder_select="lpc"
1255
amrnb_decoder_select="lsp"
1256
amrwb_decoder_select="lsp"
1257
atrac1_decoder_select="mdct sinewin"
1258
atrac3_decoder_select="mdct"
1259
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1260
binkaudio_rdft_decoder_select="mdct rdft sinewin"
1261
cavs_decoder_select="golomb"
1262
cook_decoder_select="mdct sinewin"
1263
cscd_decoder_suggest="zlib"
1264
dca_decoder_select="mdct"
1265
dnxhd_encoder_select="aandct"
1266
dxa_decoder_select="zlib"
1267
eac3_decoder_select="ac3_decoder"
1268
eamad_decoder_select="aandct"
1269
eatgq_decoder_select="aandct"
1270
eatqi_decoder_select="aandct"
1271
ffv1_decoder_select="golomb"
1272
flac_decoder_select="golomb"
1273
flac_encoder_select="golomb lpc"
1274
flashsv_decoder_select="zlib"
1275
flashsv_encoder_select="zlib"
1276
flashsv2_encoder_select="zlib"
1277
flv_decoder_select="h263_decoder"
1278
flv_encoder_select="h263_encoder"
1279
fraps_decoder_select="huffman"
1280
h261_encoder_select="aandct"
1281
h263_decoder_select="h263_parser"
1282
h263_encoder_select="aandct"
1283
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1284
h263i_decoder_select="h263_decoder"
1285
h263p_encoder_select="h263_encoder"
1286
h264_decoder_select="golomb h264dsp h264pred"
1287
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1288
h264_dxva2_hwaccel_deps="dxva2api_h"
1289
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1290
h264_vaapi_hwaccel_select="vaapi"
1291
h264_vdpau_decoder_select="vdpau h264_decoder"
1292
imc_decoder_select="fft mdct sinewin"
1293
jpegls_decoder_select="golomb"
1294
jpegls_encoder_select="golomb"
1295
ljpeg_encoder_select="aandct"
1296
loco_decoder_select="golomb"
1297
mjpeg_encoder_select="aandct"
1298
mlp_decoder_select="mlp_parser"
1299
mp1float_decoder_select="dct"
1300
mp2float_decoder_select="dct"
1301
mp3adufloat_decoder_select="dct"
1302
mp3float_decoder_select="dct"
1303
mp3on4float_decoder_select="dct"
1304
mpeg1video_encoder_select="aandct"
1305
mpeg2video_encoder_select="aandct"
1306
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1307
mpeg4_encoder_select="h263_encoder"
1308
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1309
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1310
mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1311
mpeg2_crystalhd_decoder_select="crystalhd"
1312
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1313
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1314
mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1315
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1316
mpeg4_crystalhd_decoder_select="crystalhd"
1317
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1318
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1319
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1320
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1321
msmpeg4_crystalhd_decoder_select="crystalhd"
1322
msmpeg4v1_decoder_select="h263_decoder"
1323
msmpeg4v1_encoder_select="h263_encoder"
1324
msmpeg4v2_decoder_select="h263_decoder"
1325
msmpeg4v2_encoder_select="h263_encoder"
1326
msmpeg4v3_decoder_select="h263_decoder"
1327
msmpeg4v3_encoder_select="h263_encoder"
1328
nellymoser_decoder_select="mdct sinewin"
1329
nellymoser_encoder_select="mdct sinewin"
1330
png_decoder_select="zlib"
1331
png_encoder_select="zlib"
1332
qcelp_decoder_select="lsp"
1333
qdm2_decoder_select="mdct rdft"
1334
ra_144_encoder_select="lpc"
1335
rv10_decoder_select="h263_decoder"
1336
rv10_encoder_select="h263_encoder"
1337
rv20_decoder_select="h263_decoder"
1338
rv20_encoder_select="h263_encoder"
1339
rv30_decoder_select="golomb h264pred"
1340
rv40_decoder_select="golomb h264pred"
1341
shorten_decoder_select="golomb"
1342
sipr_decoder_select="lsp"
1343
snow_decoder_select="dwt"
1344
snow_encoder_select="aandct dwt"
1345
sonic_decoder_select="golomb"
1346
sonic_encoder_select="golomb"
1347
sonic_ls_encoder_select="golomb"
1348
svq1_encoder_select="aandct"
1349
svq3_decoder_select="golomb h264dsp h264pred"
1350
svq3_decoder_suggest="zlib"
1351
theora_decoder_select="vp3_decoder"
1352
tiff_decoder_suggest="zlib"
1353
tiff_encoder_suggest="zlib"
1354
truehd_decoder_select="mlp_decoder"
1355
tscc_decoder_select="zlib"
1356
twinvq_decoder_select="mdct lsp sinewin"
1357
vc1_decoder_select="h263_decoder"
1358
vc1_crystalhd_decoder_select="crystalhd"
1359
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1360
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1361
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1362
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1363
vorbis_decoder_select="mdct"
1364
vorbis_encoder_select="mdct"
1365
vp6_decoder_select="huffman"
1366
vp6a_decoder_select="vp6_decoder"
1367
vp6f_decoder_select="vp6_decoder"
1368
vp8_decoder_select="h264pred"
1369
wmapro_decoder_select="mdct sinewin"
1370
wmav1_decoder_select="mdct sinewin"
1371
wmav1_encoder_select="mdct sinewin"
1372
wmav2_decoder_select="mdct sinewin"
1373
wmav2_encoder_select="mdct sinewin"
1374
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1375
wmv1_decoder_select="h263_decoder"
1376
wmv1_encoder_select="h263_encoder"
1377
wmv2_decoder_select="h263_decoder"
1378
wmv2_encoder_select="h263_encoder"
1379
wmv3_decoder_select="vc1_decoder"
1380
wmv3_crystalhd_decoder_select="crystalhd"
1381
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1382
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1383
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1384
zlib_decoder_select="zlib"
1385
zlib_encoder_select="zlib"
1386
zmbv_decoder_select="zlib"
1387
zmbv_encoder_select="zlib"
1388

    
1389
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1390
vaapi_deps="va_va_h"
1391
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1392

    
1393
# parsers
1394
h264_parser_select="golomb h264dsp h264pred"
1395

    
1396
# external libraries
1397
libcelt_decoder_deps="libcelt"
1398
libdirac_decoder_deps="libdirac !libschroedinger"
1399
libdirac_encoder_deps="libdirac"
1400
libfaac_encoder_deps="libfaac"
1401
libgsm_decoder_deps="libgsm"
1402
libgsm_encoder_deps="libgsm"
1403
libgsm_ms_decoder_deps="libgsm"
1404
libgsm_ms_encoder_deps="libgsm"
1405
libmp3lame_encoder_deps="libmp3lame"
1406
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1407
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1408
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1409
libopenjpeg_decoder_deps="libopenjpeg"
1410
libschroedinger_decoder_deps="libschroedinger"
1411
libschroedinger_encoder_deps="libschroedinger"
1412
libspeex_decoder_deps="libspeex"
1413
libtheora_encoder_deps="libtheora"
1414
libvo_aacenc_encoder_deps="libvo_aacenc"
1415
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1416
libvorbis_encoder_deps="libvorbis"
1417
libvpx_decoder_deps="libvpx"
1418
libvpx_encoder_deps="libvpx"
1419
libx264_encoder_deps="libx264"
1420
libxavs_encoder_deps="libxavs"
1421
libxvid_encoder_deps="libxvid"
1422

    
1423
# demuxers / muxers
1424
ac3_demuxer_select="ac3_parser"
1425
asf_stream_muxer_select="asf_muxer"
1426
avisynth_demuxer_deps="avisynth"
1427
dirac_demuxer_select="dirac_parser"
1428
eac3_demuxer_select="ac3_parser"
1429
flac_demuxer_select="flac_parser"
1430
ipod_muxer_select="mov_muxer"
1431
libnut_demuxer_deps="libnut"
1432
libnut_muxer_deps="libnut"
1433
matroska_audio_muxer_select="matroska_muxer"
1434
matroska_demuxer_suggest="zlib bzlib"
1435
mov_demuxer_suggest="zlib"
1436
mp3_demuxer_select="mpegaudio_parser"
1437
mp4_muxer_select="mov_muxer"
1438
mpegtsraw_demuxer_select="mpegts_demuxer"
1439
mxf_d10_muxer_select="mxf_muxer"
1440
ogg_demuxer_select="golomb"
1441
psp_muxer_select="mov_muxer"
1442
rtp_demuxer_select="sdp_demuxer"
1443
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1444
rtsp_demuxer_select="http_protocol rtpdec"
1445
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1446
sap_demuxer_select="sdp_demuxer"
1447
sap_muxer_select="rtp_muxer rtp_protocol"
1448
sdp_demuxer_select="rtpdec"
1449
spdif_muxer_select="aac_parser"
1450
tg2_muxer_select="mov_muxer"
1451
tgp_muxer_select="mov_muxer"
1452
w64_demuxer_deps="wav_demuxer"
1453

    
1454
# indevs / outdevs
1455
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1456
alsa_outdev_deps="alsa_asoundlib_h"
1457
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1458
dv1394_indev_deps="dv1394 dv_demuxer"
1459
fbdev_indev_deps="linux_fb_h"
1460
jack_indev_deps="jack_jack_h sem_timedwait"
1461
libdc1394_indev_deps="libdc1394"
1462
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1463
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1464
sndio_indev_deps="sndio_h"
1465
sndio_outdev_deps="sndio_h"
1466
v4l_indev_deps="linux_videodev_h"
1467
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1468
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1469
vfwcap_indev_extralibs="-lavicap32"
1470
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1471
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1472

    
1473
# protocols
1474
gopher_protocol_deps="network"
1475
http_protocol_deps="network"
1476
http_protocol_select="tcp_protocol"
1477
mmsh_protocol_select="http_protocol"
1478
mmst_protocol_deps="network"
1479
rtmp_protocol_select="tcp_protocol"
1480
rtp_protocol_select="udp_protocol"
1481
tcp_protocol_deps="network"
1482
udp_protocol_deps="network pthreads"
1483

    
1484
# filters
1485
blackframe_filter_deps="gpl"
1486
cropdetect_filter_deps="gpl"
1487
drawtext_filter_deps="libfreetype"
1488
frei0r_filter_deps="frei0r dlopen strtok_r"
1489
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1490
hqdn3d_filter_deps="gpl"
1491
movie_filter_deps="avcodec avformat"
1492
mp_filter_deps="gpl avcodec"
1493
ocv_filter_deps="libopencv"
1494
scale_filter_deps="swscale"
1495
yadif_filter_deps="gpl"
1496

    
1497
# libraries
1498
avdevice_deps="avcodec avformat"
1499
avformat_deps="avcodec"
1500
postproc_deps="gpl"
1501

    
1502
# programs
1503
ffmpeg_deps="avcodec avformat swscale"
1504
ffmpeg_select="buffer_filter"
1505
ffplay_deps="avcodec avformat swscale sdl"
1506
ffplay_select="rdft"
1507
ffprobe_deps="avcodec avformat"
1508
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1509
ffserver_extralibs='$ldl'
1510

    
1511
doc_deps="texi2html"
1512

    
1513
# tests
1514

    
1515
test_deps(){
1516
    suf1=$1
1517
    suf2=$2
1518
    shift 2
1519
    for v; do
1520
        dep=${v%=*}
1521
        tests=${v#*=}
1522
        for name in ${tests}; do
1523
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1524
        done
1525
    done
1526
}
1527

    
1528
set_ne_test_deps(){
1529
    eval ${1}_be_test_deps="bigendian"
1530
    eval ${1}_le_test_deps="!bigendian"
1531
}
1532

    
1533
test_deps _encoder _decoder                                             \
1534
    adpcm_g726=g726                                                     \
1535
    adpcm_ima_qt                                                        \
1536
    adpcm_ima_wav                                                       \
1537
    adpcm_ms                                                            \
1538
    adpcm_swf                                                           \
1539
    adpcm_yamaha=adpcm_yam                                              \
1540
    alac                                                                \
1541
    asv1                                                                \
1542
    asv2                                                                \
1543
    bmp                                                                 \
1544
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1545
    dvvideo="dv dv50"                                                   \
1546
    ffv1                                                                \
1547
    flac                                                                \
1548
    flashsv                                                             \
1549
    flv                                                                 \
1550
    gif                                                                 \
1551
    h261                                                                \
1552
    h263="h263 h263p"                                                   \
1553
    huffyuv                                                             \
1554
    jpegls                                                              \
1555
    mjpeg="jpg mjpeg ljpeg"                                             \
1556
    mp2                                                                 \
1557
    mpeg1video="mpeg mpeg1b"                                            \
1558
    mpeg2video="mpeg2 mpeg2thread"                                      \
1559
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1560
    msmpeg4v3=msmpeg4                                                   \
1561
    msmpeg4v2                                                           \
1562
    pbm=pbmpipe                                                         \
1563
    pcx                                                                 \
1564
    pgm="pgm pgmpipe"                                                   \
1565
    png                                                                 \
1566
    ppm="ppm ppmpipe"                                                   \
1567
    rawvideo="rgb yuv"                                                  \
1568
    roq                                                                 \
1569
    rv10                                                                \
1570
    rv20                                                                \
1571
    sgi                                                                 \
1572
    snow="snow snowll"                                                  \
1573
    svq1                                                                \
1574
    targa=tga                                                           \
1575
    tiff                                                                \
1576
    wmav1                                                               \
1577
    wmav2                                                               \
1578
    wmv1                                                                \
1579
    wmv2                                                                \
1580

    
1581
test_deps _muxer _demuxer                                               \
1582
    aiff                                                                \
1583
    pcm_alaw=alaw                                                       \
1584
    asf                                                                 \
1585
    au                                                                  \
1586
    avi                                                                 \
1587
    dv=dv_fmt                                                           \
1588
    ffm                                                                 \
1589
    flv=flv_fmt                                                         \
1590
    gxf                                                                 \
1591
    matroska=mkv                                                        \
1592
    mmf                                                                 \
1593
    mov                                                                 \
1594
    pcm_mulaw=mulaw                                                     \
1595
    mxf                                                                 \
1596
    nut                                                                 \
1597
    ogg                                                                 \
1598
    rawvideo=pixfmt                                                     \
1599
    rm                                                                  \
1600
    swf                                                                 \
1601
    mpegts=ts                                                           \
1602
    voc                                                                 \
1603
    wav                                                                 \
1604
    yuv4mpegpipe=yuv4mpeg                                               \
1605

    
1606
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1607
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1608

    
1609
set_ne_test_deps pixdesc
1610
set_ne_test_deps pixfmts_copy
1611
set_ne_test_deps pixfmts_crop
1612
set_ne_test_deps pixfmts_hflip
1613
set_ne_test_deps pixfmts_null
1614
set_ne_test_deps pixfmts_pad
1615
set_ne_test_deps pixfmts_scale
1616
set_ne_test_deps pixfmts_vflip
1617

    
1618
# default parameters
1619

    
1620
logfile="config.log"
1621

    
1622
# installation paths
1623
prefix_default="/usr/local"
1624
bindir_default='${prefix}/bin'
1625
datadir_default='${prefix}/share/ffmpeg'
1626
incdir_default='${prefix}/include'
1627
libdir_default='${prefix}/lib'
1628
mandir_default='${prefix}/share/man'
1629
shlibdir_default="$libdir_default"
1630

    
1631
# toolchain
1632
ar_default="ar"
1633
cc_default="gcc"
1634
cc_version=\"unknown\"
1635
host_cc_default="gcc"
1636
ln_s="ln -sf"
1637
nm_default="nm"
1638
objformat="elf"
1639
pkg_config_default=pkg-config
1640
ranlib="ranlib"
1641
strip_default="strip"
1642
yasmexe="yasm"
1643
nogas=":"
1644

    
1645
nm_opts='-g'
1646

    
1647
# machine
1648
arch_default=$(uname -m)
1649
cpu="generic"
1650

    
1651
# OS
1652
target_os_default=$(tolower $(uname -s))
1653
host_os=$target_os_default
1654

    
1655
# configurable options
1656
enable avcodec
1657
enable avdevice
1658
enable avfilter
1659
enable avformat
1660
enable avutil
1661
enable asm
1662
enable debug
1663
enable doc
1664
enable fastdiv
1665
enable ffmpeg
1666
enable ffplay
1667
enable ffprobe
1668
enable ffserver
1669
enable network
1670
enable optimizations
1671
enable postproc
1672
enable protocols
1673
enable static
1674
enable stripping
1675
enable swscale
1676
enable swscale_alpha
1677

    
1678
# build settings
1679
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1680
FFSERVERLDFLAGS=-Wl,-E
1681
LIBPREF="lib"
1682
LIBSUF=".a"
1683
FULLNAME='$(NAME)$(BUILDSUF)'
1684
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1685
SLIBPREF="lib"
1686
SLIBSUF=".so"
1687
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1688
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1689
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1690
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1691

    
1692
CC_O='-o $@'
1693

    
1694
host_cflags='-D_ISOC99_SOURCE -O3 -g -Wall'
1695
host_libs='-lm'
1696

    
1697
target_path='$(CURDIR)'
1698

    
1699
# since the object filename is not given with the -MM flag, the compiler
1700
# is only able to print the basename, and we must add the path ourselves
1701
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1702
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1703

    
1704
# find source path
1705
source_path="$(dirname "$0")"
1706
enable source_path_used
1707
if test -f configure; then
1708
    source_path="$(pwd)"
1709
    disable source_path_used
1710
else
1711
    source_path="$(cd "$source_path"; pwd)"
1712
    echo "$source_path" | grep -q '[[:blank:]]' &&
1713
        die "Out of tree builds are impossible with whitespace in source path."
1714
    test -e "$source_path/config.h" &&
1715
        die "Out of tree builds are impossible with config.h in source dir."
1716
fi
1717

    
1718
for v in "$@"; do
1719
    r=${v#*=}
1720
    l=${v%"$r"}
1721
    r=$(sh_quote "$r")
1722
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1723
done
1724

    
1725
find_things(){
1726
    thing=$1
1727
    pattern=$2
1728
    file=$source_path/$3
1729
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1730
}
1731

    
1732
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1733
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1734
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1735
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1736
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1737
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1738
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1739
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1740
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1741
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1742
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1743

    
1744
find_tests(){
1745
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1746
}
1747

    
1748
ACODEC_TESTS=$(find_tests acodec)
1749
VCODEC_TESTS=$(find_tests vsynth1)
1750
LAVF_TESTS=$(find_tests lavf)
1751
LAVFI_TESTS=$(find_tests lavfi)
1752
SEEK_TESTS=$(find_tests seek seek_)
1753

    
1754
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1755

    
1756
for n in $COMPONENT_LIST; do
1757
    v=$(toupper ${n%s})_LIST
1758
    eval enable \$$v
1759
    eval ${n}_if_any="\$$v"
1760
done
1761

    
1762
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1763

    
1764
die_unknown(){
1765
    echo "Unknown option \"$1\"."
1766
    echo "See $0 --help for available options."
1767
    exit 1
1768
}
1769

    
1770
show_list() {
1771
    suffix=_$1
1772
    shift
1773
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1774
    exit 0
1775
}
1776

    
1777
for opt do
1778
    optval="${opt#*=}"
1779
    case "$opt" in
1780
    --extra-ldflags=*) add_ldflags $optval
1781
    ;;
1782
    --extra-libs=*) add_extralibs $optval
1783
    ;;
1784
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1785
    ;;
1786
    --enable-debug=*) debuglevel="$optval"
1787
    ;;
1788
    --disable-everything)
1789
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1790
    ;;
1791
    --enable-*=*|--disable-*=*)
1792
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1793
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1794
    eval list=\$$(toupper $thing)_LIST
1795
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1796
    $action $(filter "$name" $list)
1797
    ;;
1798
    --enable-?*|--disable-?*)
1799
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1800
    if is_in $option $COMPONENT_LIST; then
1801
        test $action = disable && action=unset
1802
        eval $action \$$(toupper ${option%s})_LIST
1803
    elif is_in $option $CMDLINE_SELECT; then
1804
        $action $option
1805
    else
1806
        die_unknown $opt
1807
    fi
1808
    ;;
1809
    --list-*)
1810
        NAME="${opt#--list-}"
1811
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1812
        NAME=${NAME%s}
1813
        eval show_list $NAME \$$(toupper $NAME)_LIST
1814
    ;;
1815
    --help|-h) show_help
1816
    ;;
1817
    *)
1818
    optname="${opt%%=*}"
1819
    optname="${optname#--}"
1820
    optname=$(echo "$optname" | sed 's/-/_/g')
1821
    if is_in $optname $CMDLINE_SET; then
1822
        eval $optname='$optval'
1823
    elif is_in $optname $CMDLINE_APPEND; then
1824
        append $optname "$optval"
1825
    else
1826
         die_unknown $opt
1827
    fi
1828
    ;;
1829
    esac
1830
done
1831

    
1832
disabled logging && logfile=/dev/null
1833

    
1834
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1835
set >> $logfile
1836

    
1837
test -n "$cross_prefix" && enable cross_compile
1838

    
1839
if enabled cross_compile; then
1840
    test -n "$arch" && test -n "$target_os" ||
1841
        die "Must specify target arch and OS when cross-compiling"
1842
fi
1843

    
1844
set_default arch target_os
1845

    
1846
ar_default="${cross_prefix}${ar_default}"
1847
cc_default="${cross_prefix}${cc_default}"
1848
nm_default="${cross_prefix}${nm_default}"
1849
pkg_config_default="${cross_prefix}${pkg_config_default}"
1850
ranlib="${cross_prefix}${ranlib}"
1851
strip_default="${cross_prefix}${strip_default}"
1852

    
1853
sysinclude_default="${sysroot}/usr/include"
1854

    
1855
set_default cc nm pkg_config strip sysinclude
1856
enabled cross_compile || host_cc_default=$cc
1857
set_default host_cc
1858

    
1859
if ! $pkg_config --version >/dev/null 2>&1; then
1860
    warn "$pkg_config not found, library detection may fail."
1861
    pkg_config=false
1862
fi
1863

    
1864
exesuf() {
1865
    case $1 in
1866
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1867
    esac
1868
}
1869

    
1870
EXESUF=$(exesuf $target_os)
1871
HOSTEXESUF=$(exesuf $host_os)
1872

    
1873
# set temporary file name
1874
: ${TMPDIR:=$TEMPDIR}
1875
: ${TMPDIR:=$TMP}
1876
: ${TMPDIR:=/tmp}
1877

    
1878
if ! check_cmd mktemp -u XXXXXX; then
1879
    # simple replacement for missing mktemp
1880
    # NOT SAFE FOR GENERAL USE
1881
    mktemp(){
1882
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1883
    }
1884
fi
1885

    
1886
tmpfile(){
1887
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1888
        (set -C; exec > $tmp) 2>/dev/null ||
1889
        die "Unable to create temporary file in $TMPDIR."
1890
    append TMPFILES $tmp
1891
    eval $1=$tmp
1892
}
1893

    
1894
trap 'rm -f -- $TMPFILES' EXIT
1895

    
1896
tmpfile TMPC  .c
1897
tmpfile TMPE  $EXESUF
1898
tmpfile TMPH  .h
1899
tmpfile TMPO  .o
1900
tmpfile TMPS  .S
1901
tmpfile TMPV  .ver
1902
tmpfile TMPSH .sh
1903
tmpfile TMPASM .asm
1904

    
1905
unset -f mktemp
1906

    
1907
chmod +x $TMPE
1908

    
1909
# make sure we can execute files in $TMPDIR
1910
cat > $TMPSH 2>> $logfile <<EOF
1911
#! /bin/sh
1912
EOF
1913
chmod +x $TMPSH >> $logfile 2>&1
1914
if ! $TMPSH >> $logfile 2>&1; then
1915
    cat <<EOF
1916
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1917
variable to another directory and make sure that it is not mounted noexec.
1918
EOF
1919
    die "Sanity test failed."
1920
fi
1921

    
1922
filter_cflags=echo
1923
filter_cppflags=echo
1924
filter_asflags=echo
1925

    
1926
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1927
    cc_type=llvm_gcc
1928
    cc_version=__VERSION__
1929
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1930
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1931
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1932
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1933
    speed_cflags='-O3'
1934
    size_cflags='-Os'
1935
elif $cc -v 2>&1 | grep -qi ^gcc; then
1936
    cc_type=gcc
1937
    cc_version=__VERSION__
1938
    gcc_version=$($cc --version | head -n1)
1939
    gcc_basever=$($cc -dumpversion)
1940
    gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
1941
    gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1942
    cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
1943
    if ! $cc -dumpversion | grep -q '^2\.'; then
1944
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1945
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1946
    fi
1947
    speed_cflags='-O3'
1948
    size_cflags='-Os'
1949
elif $cc --version 2>/dev/null | grep -q Intel; then
1950
    cc_type=icc
1951
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1952
    cc_ident=$($cc --version | head -n1)
1953
    icc_version=$($cc -dumpversion)
1954
    CC_DEPFLAGS='-MMD'
1955
    AS_DEPFLAGS='-MMD'
1956
    speed_cflags='-O3'
1957
    size_cflags='-Os'
1958
    noopt_cflags='-O1'
1959
elif $cc -v 2>&1 | grep -q xlc; then
1960
    cc_type=xlc
1961
    cc_version="AV_STRINGIFY(__IBMC__)"
1962
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1963
    speed_cflags='-O5'
1964
    size_cflags='-O5 -qcompact'
1965
elif $cc -V 2>/dev/null | grep -q Compaq; then
1966
    cc_type=ccc
1967
    cc_version="AV_STRINGIFY(__DECC_VER)"
1968
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1969
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1970
    debuglevel=3
1971
    add_ldflags -Wl,-z,now # calls to libots crash without this
1972
    speed_cflags='-fast'
1973
    size_cflags='-O1'
1974
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1975
    test -d "$sysroot" || die "No valid sysroot specified."
1976
    cc_type=armcc
1977
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1978
    cc_ident=$($cc --vsn | head -n1)
1979
    armcc_conf="$PWD/armcc.conf"
1980
    $cc --arm_linux_configure                 \
1981
        --arm_linux_config_file="$armcc_conf" \
1982
        --configure_sysroot="$sysroot"        \
1983
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1984
        die "Error creating armcc configuration file."
1985
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1986
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1987
    as_default="${cross_prefix}gcc"
1988
    CC_DEPFLAGS='-MMD'
1989
    AS_DEPFLAGS='-MMD'
1990
    speed_cflags='-O3'
1991
    size_cflags='-Os'
1992
    filter_asflags="filter_out -W${armcc_opt}*"
1993
elif $cc -version 2>/dev/null | grep -q TMS470; then
1994
    cc_type=tms470
1995
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1996
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1997
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1998
    CC_O='-fr=$(@D)'
1999
    as_default="${cross_prefix}gcc"
2000
    ld_default="${cross_prefix}gcc"
2001
    TMPO=$(basename $TMPC .c).o
2002
    append TMPFILES $TMPO
2003
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2004
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2005
    AS_DEPFLAGS='-MMD'
2006
    speed_cflags='-O3 -mf=5'
2007
    size_cflags='-O3 -mf=2'
2008
    filter_cflags=tms470_flags
2009
    tms470_flags(){
2010
        for flag; do
2011
            case $flag in
2012
                -march=*|-mcpu=*)
2013
                    case "${flag#*=}" in
2014
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
2015
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
2016
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
2017
                        armv6*|arm11*)          echo -mv=6   ;;
2018
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2019
                                                echo -mv=5e  ;;
2020
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2021
                    esac
2022
                    ;;
2023
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2024
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
2025
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2026
                -msoft-float)   echo --float_support=vfplib       ;;
2027
                -O[0-3]|-mf=*)  echo $flag                        ;;
2028
                -g)             echo -g -mn                       ;;
2029
                -pds=*)         echo $flag                        ;;
2030
            esac
2031
        done
2032
    }
2033
elif $cc -v 2>&1 | grep -q clang; then
2034
    cc_type=clang
2035
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
2036
        cc_version=__clang_version__ || cc_version=__VERSION__
2037
    cc_ident=$($cc --version | head -n1)
2038
    CC_DEPFLAGS='-MMD'
2039
    AS_DEPFLAGS='-MMD'
2040
    speed_cflags='-O3'
2041
    size_cflags='-Os'
2042
elif $cc -V 2>&1 | grep -q Sun; then
2043
    cc_type=suncc
2044
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
2045
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2046
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2047
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2048
    speed_cflags='-O5'
2049
    size_cflags='-O5 -xspace'
2050
    filter_cflags=suncc_flags
2051
    suncc_flags(){
2052
        for flag; do
2053
            case $flag in
2054
                -march=*|-mcpu=*)
2055
                    case "${flag#*=}" in
2056
                        native)                   echo -xtarget=native       ;;
2057
                        v9|niagara)               echo -xarch=sparc          ;;
2058
                        ultrasparc)               echo -xarch=sparcvis       ;;
2059
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2060
                        i586|pentium)             echo -xchip=pentium        ;;
2061
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2062
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2063
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2064
                        pentium4*)          echo -xtarget=pentium4           ;;
2065
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2066
                        *-sse3)             echo -xarch=sse3                 ;;
2067
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
2068
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2069
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2070
                        k8|opteron|athlon64|athlon-fx)
2071
                                                  echo -xarch=sse2a          ;;
2072
                        athlon*)                  echo -xarch=pentium_proa   ;;
2073
                    esac
2074
                    ;;
2075
                -std=c99)             echo -xc99              ;;
2076
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
2077
                -fPIC)                echo -KPIC -xcode=pic32 ;;
2078
                -W*,*)                echo $flag              ;;
2079
                -f*-*|-W*)                                    ;;
2080
                *)                    echo $flag              ;;
2081
            esac
2082
        done
2083
    }
2084
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2085
    cc_type=pathscale
2086
    cc_version=__PATHSCALE__
2087
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2088
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2089
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2090
    speed_cflags='-O2'
2091
    size_cflags='-Os'
2092
elif $cc -v 2>&1 | grep -q Open64; then
2093
    cc_type=open64
2094
    cc_version=__OPEN64__
2095
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2096
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2097
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2098
    speed_cflags='-O2'
2099
    size_cflags='-Os'
2100
fi
2101

    
2102
test -n "$cc_type" && enable $cc_type ||
2103
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2104

    
2105
: ${as_default:=$cc}
2106
: ${dep_cc_default:=$cc}
2107
: ${ld_default:=$cc}
2108
set_default ar as dep_cc ld
2109

    
2110
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2111
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2112

    
2113
add_cflags $extra_cflags
2114
add_asflags $extra_cflags
2115

    
2116
if test -n "$sysroot"; then
2117
    case "$cc_type" in
2118
        gcc|llvm_gcc|clang)
2119
            add_cppflags --sysroot="$sysroot"
2120
            add_ldflags --sysroot="$sysroot"
2121
        ;;
2122
        tms470)
2123
            add_cppflags -I"$sysinclude"
2124
            add_ldflags  --sysroot="$sysroot"
2125
        ;;
2126
    esac
2127
fi
2128

    
2129
if test "$cpu" = host; then
2130
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2131

    
2132
    case "$cc_type" in
2133
        gcc|llvm_gcc)
2134
            check_native(){
2135
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2136
                sed -n "/$1=/{
2137
                            s/.*$1=\\([^ ]*\\).*/\\1/
2138
                            p
2139
                            q
2140
                        }" $TMPE
2141
            }
2142
            cpu=$(check_native -march || check_native -mcpu)
2143
        ;;
2144
    esac
2145

    
2146
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2147
fi
2148

    
2149
# Deal with common $arch aliases
2150
case "$arch" in
2151
    arm*)
2152
        arch="arm"
2153
    ;;
2154
    mips|mipsel|IP*)
2155
        arch="mips"
2156
    ;;
2157
    mips64*)
2158
        arch="mips"
2159
        subarch="mips64"
2160
    ;;
2161
    parisc|hppa)
2162
        arch="parisc"
2163
    ;;
2164
    parisc64|hppa64)
2165
        arch="parisc"
2166
        subarch="parisc64"
2167
    ;;
2168
    "Power Macintosh"|ppc|powerpc)
2169
        arch="ppc"
2170
    ;;
2171
    ppc64|powerpc64)
2172
        arch="ppc"
2173
        subarch="ppc64"
2174
    ;;
2175
    s390|s390x)
2176
        arch="s390"
2177
    ;;
2178
    sh4|sh)
2179
        arch="sh4"
2180
    ;;
2181
    sun4u|sparc64)
2182
        arch="sparc"
2183
        subarch="sparc64"
2184
    ;;
2185
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2186
        arch="x86"
2187
    ;;
2188
esac
2189

    
2190
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2191
enable $arch
2192

    
2193
# Add processor-specific flags
2194
if test "$cpu" = generic; then
2195
    : do nothing
2196
elif enabled ppc; then
2197

    
2198
    case $(tolower $cpu) in
2199
        601|ppc601|powerpc601)
2200
            cpuflags="-mcpu=601"
2201
            disable altivec
2202
        ;;
2203
        603*|ppc603*|powerpc603*)
2204
            cpuflags="-mcpu=603"
2205
            disable altivec
2206
        ;;
2207
        604*|ppc604*|powerpc604*)
2208
            cpuflags="-mcpu=604"
2209
            disable altivec
2210
        ;;
2211
        g3|75*|ppc75*|powerpc75*)
2212
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2213
            disable altivec
2214
        ;;
2215
        g4|745*|ppc745*|powerpc745*)
2216
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2217
        ;;
2218
        74*|ppc74*|powerpc74*)
2219
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2220
        ;;
2221
        g5|970|ppc970|powerpc970|power4*)
2222
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2223
        ;;
2224
        cell)
2225
            cpuflags="-mcpu=cell"
2226
            enable ldbrx
2227
        ;;
2228
        e500v2)
2229
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2230
            disable altivec
2231
        ;;
2232
        e500)
2233
            cpuflags="-mcpu=8540 -mhard-float"
2234
            disable altivec
2235
        ;;
2236
    esac
2237

    
2238
elif enabled x86; then
2239

    
2240
    case $cpu in
2241
        i[345]86|pentium)
2242
            cpuflags="-march=$cpu"
2243
            disable mmx
2244
        ;;
2245
        # targets that do NOT support conditional mov (cmov)
2246
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2247
            cpuflags="-march=$cpu"
2248
            disable cmov
2249
        ;;
2250
        # targets that do support conditional mov (cmov)
2251
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2252
            cpuflags="-march=$cpu"
2253
            enable cmov
2254
            enable fast_cmov
2255
        ;;
2256
        # targets that do support conditional mov but on which it's slow
2257
        pentium4|pentium4m|prescott|nocona)
2258
            cpuflags="-march=$cpu"
2259
            enable cmov
2260
            disable fast_cmov
2261
        ;;
2262
    esac
2263

    
2264
elif enabled sparc; then
2265

    
2266
    case $cpu in
2267
        niagara)
2268
            cpuflags="-mcpu=$cpu"
2269
            disable vis
2270
        ;;
2271
        sparc64)
2272
            cpuflags="-mcpu=v9"
2273
        ;;
2274
    esac
2275

    
2276
elif enabled arm; then
2277

    
2278
    case $cpu in
2279
        armv*)
2280
            cpuflags="-march=$cpu"
2281
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2282
        ;;
2283
        *)
2284
            cpuflags="-mcpu=$cpu"
2285
            case $cpu in
2286
                cortex-a*)                               subarch=armv7a  ;;
2287
                cortex-r*)                               subarch=armv7r  ;;
2288
                cortex-m*)                               subarch=armv7m  ;;
2289
                arm11*)                                  subarch=armv6   ;;
2290
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2291
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2292
            esac
2293
        ;;
2294
    esac
2295

    
2296
elif enabled alpha; then
2297

    
2298
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2299

    
2300
elif enabled bfin; then
2301

    
2302
    cpuflags="-mcpu=$cpu"
2303

    
2304
elif enabled mips; then
2305

    
2306
    cpuflags="-march=$cpu"
2307

    
2308
elif enabled avr32; then
2309

    
2310
    case $cpu in
2311
        ap7[02]0[0-2])
2312
            subarch="avr32_ap"
2313
            cpuflags="-mpart=$cpu"
2314
        ;;
2315
        ap)
2316
            subarch="avr32_ap"
2317
            cpuflags="-march=$cpu"
2318
        ;;
2319
        uc3[ab]*)
2320
            subarch="avr32_uc"
2321
            cpuflags="-mcpu=$cpu"
2322
        ;;
2323
        uc)
2324
            subarch="avr32_uc"
2325
            cpuflags="-march=$cpu"
2326
        ;;
2327
    esac
2328

    
2329
fi
2330

    
2331
add_cflags $cpuflags
2332
add_asflags $cpuflags
2333

    
2334
# compiler sanity check
2335
check_exec <<EOF
2336
int main(void){ return 0; }
2337
EOF
2338
if test "$?" != 0; then
2339
    echo "$cc is unable to create an executable file."
2340
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2341
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2342
        echo "Only do this if you know what cross compiling means."
2343
    fi
2344
    die "C compiler test failed."
2345
fi
2346

    
2347
add_cppflags -D_ISOC99_SOURCE
2348
check_cflags -std=c99
2349
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2350
#include <stdlib.h>
2351
EOF
2352
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2353
#include <stdlib.h>
2354
EOF
2355

    
2356
check_host_cflags -std=c99
2357

    
2358
case "$arch" in
2359
    alpha|ia64|mips|parisc|sparc)
2360
        spic=$shared
2361
    ;;
2362
    x86)
2363
        subarch="x86_32"
2364
        check_cc <<EOF && subarch="x86_64"
2365
        int test[(int)sizeof(char*) - 7];
2366
EOF
2367
        if test "$subarch" = "x86_64"; then
2368
            spic=$shared
2369
        fi
2370
    ;;
2371
esac
2372

    
2373
enable $subarch
2374
enabled spic && enable pic
2375

    
2376
# OS specific
2377
case $target_os in
2378
    haiku)
2379
        prefix_default="/boot/common"
2380
        network_extralibs="-lnetwork"
2381
        host_libs=
2382
        ;;
2383
    sunos)
2384
        FFSERVERLDFLAGS=""
2385
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2386
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2387
        network_extralibs="-lsocket -lnsl"
2388
        add_cppflags -D__EXTENSIONS__
2389
        nm_opts='-P -g'
2390
        ;;
2391
    netbsd)
2392
        disable symver
2393
        oss_indev_extralibs="-lossaudio"
2394
        oss_outdev_extralibs="-lossaudio"
2395
        ;;
2396
    openbsd)
2397
        enable malloc_aligned
2398
        # On OpenBSD 4.5. the compiler does not use PIC unless
2399
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2400
        # however the generated executable will not do anything
2401
        # (simply quits with exit-code 1, no crash, no output).
2402
        # Thus explicitly enable PIC here.
2403
        enable pic
2404
        disable symver
2405
        SHFLAGS='-shared'
2406
        oss_indev_extralibs="-lossaudio"
2407
        oss_outdev_extralibs="-lossaudio"
2408
        ;;
2409
    dragonfly)
2410
        enable malloc_aligned
2411
        disable symver
2412
        ;;
2413
    freebsd)
2414
        enable malloc_aligned
2415
        ;;
2416
    bsd/os)
2417
        add_extralibs -lpoll -lgnugetopt
2418
        strip="strip -d"
2419
        ;;
2420
    darwin)
2421
        enable malloc_aligned
2422
        gas="gas-preprocessor.pl $cc"
2423
        enabled ppc && add_asflags -force_cpusubtype_ALL
2424
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2425
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2426
        strip="${strip} -x"
2427
        add_ldflags -Wl,-dynamic,-search_paths_first
2428
        SLIBSUF=".dylib"
2429
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2430
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2431
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2432
        objformat="macho"
2433
        enabled x86_64 && objformat="macho64"
2434
        enabled_any pic shared ||
2435
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2436
        ;;
2437
    mingw32*)
2438
        if test $target_os = "mingw32ce"; then
2439
            disable network
2440
        else
2441
            target_os=mingw32
2442
        fi
2443
        LIBTARGET=i386
2444
        if enabled x86_64; then
2445
            enable malloc_aligned
2446
            LIBTARGET=x64
2447
        elif enabled arm; then
2448
            LIBTARGET=arm-wince
2449
        fi
2450
        shlibdir_default="$bindir_default"
2451
        SLIBPREF=""
2452
        SLIBSUF=".dll"
2453
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2454
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2455
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2456
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2457
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2458
            install -d "$(LIBDIR)"; \
2459
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2460
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2461
        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'
2462
        objformat="win32"
2463
        enable dos_paths
2464
        check_cflags -fno-common
2465
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2466
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2467
                die "ERROR: MinGW runtime version must be >= 3.15."
2468
        add_cppflags -U__STRICT_ANSI__
2469
        ;;
2470
    cygwin*)
2471
        target_os=cygwin
2472
        shlibdir_default="$bindir_default"
2473
        SLIBPREF="cyg"
2474
        SLIBSUF=".dll"
2475
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2476
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2477
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2478
        objformat="win32"
2479
        enable dos_paths
2480
        check_cflags -fno-common
2481
        ;;
2482
    *-dos|freedos|opendos)
2483
        network_extralibs="-lsocket"
2484
        objformat="coff"
2485
        enable dos_paths
2486
        ;;
2487
    linux)
2488
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2489
        enable dv1394
2490
        ;;
2491
    irix*)
2492
        target_os=irix
2493
        ranlib="echo ignoring ranlib"
2494
        ;;
2495
    os/2*)
2496
        strip="lxlite -CS"
2497
        ln_s="cp -f"
2498
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2499
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2500
        FFSERVERLDFLAGS=""
2501
        LIBSUF="_s.a"
2502
        SLIBPREF=""
2503
        SLIBSUF=".dll"
2504
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2505
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2506
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2507
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2508
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2509
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2510
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2511
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2512
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2513
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2514
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2515
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2516
        enable dos_paths
2517
        ;;
2518
    gnu/kfreebsd)
2519
        ;;
2520
    gnu)
2521
        ;;
2522
    qnx)
2523
        add_cppflags -D_QNX_SOURCE
2524
        network_extralibs="-lsocket"
2525
        ;;
2526
    symbian)
2527
        SLIBSUF=".dll"
2528
        enable dos_paths
2529
        add_cflags --include=$sysinclude/gcce/gcce.h
2530
        ;;
2531
    none)
2532
        ;;
2533
    *)
2534
        die "Unknown OS '$target_os'."
2535
        ;;
2536
esac
2537

    
2538
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2539

    
2540
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2541

    
2542
set_default $PATHS_LIST
2543

    
2544
# we need to build at least one lib type
2545
if ! enabled_any static shared; then
2546
    cat <<EOF
2547
At least one library type must be built.
2548
Specify --enable-static to build the static libraries or --enable-shared to
2549
build the shared libraries as well. To only build the shared libraries specify
2550
--disable-static in addition to --enable-shared.
2551
EOF
2552
    exit 1;
2553
fi
2554

    
2555
disabled static && LIBNAME=""
2556

    
2557
die_license_disabled() {
2558
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2559
}
2560

    
2561
die_license_disabled gpl libx264
2562
die_license_disabled gpl libxavs
2563
die_license_disabled gpl libxvid
2564
die_license_disabled gpl x11grab
2565

    
2566
die_license_disabled nonfree libfaac
2567

    
2568
die_license_disabled version3 libopencore_amrnb
2569
die_license_disabled version3 libopencore_amrwb
2570
die_license_disabled version3 libvo_aacenc
2571
die_license_disabled version3 libvo_amrwbenc
2572

    
2573
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2574

    
2575
disabled optimizations || check_cflags -fomit-frame-pointer
2576

    
2577
enable_pic() {
2578
    enable pic
2579
    add_cppflags -DPIC
2580
    add_cflags   -fPIC
2581
    add_asflags  -fPIC
2582
}
2583

    
2584
enabled pic && enable_pic
2585

    
2586
check_cc <<EOF || die "Symbol mangling check failed."
2587
int ff_extern;
2588
EOF
2589
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2590
extern_prefix=${sym%%ff_extern*}
2591

    
2592
check_cc <<EOF && enable inline_asm
2593
void foo(void) { __asm__ volatile ("" ::); }
2594
EOF
2595

    
2596
_restrict=
2597
for restrict_keyword in restrict __restrict__ __restrict; do
2598
    check_cc <<EOF && _restrict=$restrict_keyword && break
2599
void foo(char * $restrict_keyword p);
2600
EOF
2601
done
2602

    
2603
check_cc <<EOF && enable attribute_packed
2604
struct { int x; } __attribute__((packed)) x;
2605
EOF
2606

    
2607
check_cc <<EOF && enable attribute_may_alias
2608
union { int x; } __attribute__((may_alias)) x;
2609
EOF
2610

    
2611
check_cc <<EOF || die "endian test failed"
2612
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2613
EOF
2614
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2615

    
2616
if enabled alpha; then
2617

    
2618
    check_cflags -mieee
2619

    
2620
elif enabled arm; then
2621

    
2622
    check_cflags -marm
2623
    nogas=die
2624

    
2625
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2626
        enable vfp_args
2627
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2628
        case "${cross_prefix:-$cc}" in
2629
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2630
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2631
__asm__ (".eabi_attribute 28, 1");
2632
int main(void) { return 0; }
2633
EOF
2634
        esac
2635
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2636
    fi
2637

    
2638
    # We have to check if pld is a nop and disable it.
2639
    check_asm pld '"pld [r0]"'
2640

    
2641
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2642
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2643
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2644
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2645
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2646
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2647

    
2648
    enabled_all armv6t2 shared !pic && enable_pic
2649

    
2650
elif enabled mips; then
2651

    
2652
    check_asm loongson '"dmult.g $1, $2, $3"'
2653
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2654

    
2655
elif enabled ppc; then
2656

    
2657
    enable local_aligned_8 local_aligned_16
2658

    
2659
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2660
    check_asm ibm_asm   '"add 0, 0, 0"'
2661
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2662
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2663

    
2664
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2665
    if enabled altivec; then
2666
        nogas=warn
2667
        check_cflags -maltivec -mabi=altivec &&
2668
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2669
        check_cflags -faltivec
2670

    
2671
        # check if our compiler supports Motorola AltiVec C API
2672
        check_cc <<EOF || disable altivec
2673
$inc_altivec_h
2674
int main(void) {
2675
    vector signed int v1, v2, v3;
2676
    v1 = vec_add(v2,v3);
2677
    return 0;
2678
}
2679
EOF
2680

    
2681
        # check if our compiler supports braces for vector declarations
2682
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2683
$inc_altivec_h
2684
int main (void) { (vector int) {1}; return 0; }
2685
EOF
2686
    fi
2687

    
2688
elif enabled sparc; then
2689

    
2690
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2691
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2692

    
2693
elif enabled x86; then
2694

    
2695
    enable local_aligned_8 local_aligned_16
2696

    
2697
    # check whether EBP is available on x86
2698
    # As 'i' is stored on the stack, this program will crash
2699
    # if the base pointer is used to access it because the
2700
    # base pointer is cleared in the inline assembly code.
2701
    check_exec_crash <<EOF && enable ebp_available
2702
    volatile int i=0;
2703
    __asm__ volatile (
2704
        "xorl %%ebp, %%ebp"
2705
    ::: "%ebp");
2706
    return i;
2707
EOF
2708

    
2709
    # check whether EBX is available on x86
2710
    check_asm ebx_available '""::"b"(0)' &&
2711
        check_asm ebx_available '"":::"%ebx"'
2712

    
2713
    # check whether xmm clobbers are supported
2714
    check_asm xmm_clobbers '"":::"%xmm0"'
2715

    
2716
    # check whether more than 10 operands are supported
2717
    check_cc <<EOF && enable ten_operands
2718
int main(void) {
2719
    int x=0;
2720
    __asm__ volatile(
2721
        ""
2722
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2723
    );
2724
    return 0;
2725
}
2726
EOF
2727

    
2728
    # check whether binutils is new enough to compile SSSE3/MMX2
2729
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2730
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2731

    
2732
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2733

    
2734
    if ! disabled_any asm mmx yasm; then
2735
        if check_cmd $yasmexe --version; then
2736
            enabled x86_64 && yasm_extra="-m amd64"
2737
            yasm_debug="-g dwarf2"
2738
        elif check_cmd nasm -v; then
2739
            yasmexe=nasm
2740
            yasm_debug="-g -F dwarf"
2741
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2742
        fi
2743

    
2744
        YASMFLAGS="-f $objformat $yasm_extra"
2745
        enabled pic               && append YASMFLAGS "-DPIC"
2746
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2747
        case "$objformat" in
2748
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2749
        esac
2750

    
2751
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2752
            die "yasm not found, use --disable-yasm for a crippled build"
2753
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2754
    fi
2755

    
2756
    case "$cpu" in
2757
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2758
            disable fast_clz
2759
        ;;
2760
    esac
2761

    
2762
fi
2763

    
2764
if enabled asm; then
2765
    as=${gas:=$as}
2766
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2767
        $nogas "GNU assembler not found, install gas-preprocessor"
2768
fi
2769

    
2770
check_ldflags -Wl,--as-needed
2771

    
2772
if check_func dlopen; then
2773
    ldl=
2774
elif check_func dlopen -ldl; then
2775
    ldl=-ldl
2776
fi
2777

    
2778
if enabled network; then
2779
    check_type "sys/types.h sys/socket.h" socklen_t
2780
    check_type netdb.h "struct addrinfo"
2781
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2782
    check_type netinet/in.h "struct sockaddr_in6"
2783
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2784
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2785
    # Prefer arpa/inet.h over winsock2
2786
    if check_header arpa/inet.h ; then
2787
        check_func closesocket
2788
    elif check_header winsock2.h ; then
2789
        check_func_headers winsock2.h closesocket -lws2 && \
2790
            network_extralibs="-lws2" || \
2791
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2792
            network_extralibs="-lws2_32"; }
2793
        check_type ws2tcpip.h socklen_t
2794
        check_type ws2tcpip.h "struct addrinfo"
2795
        check_type ws2tcpip.h "struct ipv6_mreq"
2796
        check_type ws2tcpip.h "struct sockaddr_in6"
2797
        check_type ws2tcpip.h "struct sockaddr_storage"
2798
        check_struct winsock2.h "struct sockaddr" sa_len
2799
    else
2800
        disable network
2801
    fi
2802
fi
2803

    
2804
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2805
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2806

    
2807
check_func  fcntl
2808
check_func  fork
2809
check_func  getaddrinfo $network_extralibs
2810
check_func  gethrtime
2811
check_func  getrusage
2812
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2813
check_func  inet_aton $network_extralibs
2814
check_func  isatty
2815
check_func  localtime_r
2816
check_func  ${malloc_prefix}memalign            && enable memalign
2817
check_func  mkstemp
2818
check_func  mmap
2819
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2820
check_func  setrlimit
2821
check_func  strerror_r
2822
check_func  strtok_r
2823
check_func_headers conio.h kbhit
2824
check_func_headers io.h setmode
2825
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2826
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2827
check_func_headers windows.h GetProcessTimes
2828
check_func_headers windows.h MapViewOfFile
2829
check_func_headers windows.h VirtualAlloc
2830

    
2831
check_header dlfcn.h
2832
check_header dxva2api.h
2833
check_header libcrystalhd/libcrystalhd_if.h
2834
check_header malloc.h
2835
check_header poll.h
2836
check_header sys/mman.h
2837
check_header sys/resource.h
2838
check_header sys/select.h
2839
check_header termios.h
2840
check_header vdpau/vdpau.h
2841
check_header vdpau/vdpau_x11.h
2842
check_header X11/extensions/XvMClib.h
2843

    
2844
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2845

    
2846
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2847
     enabled_any $need_memalign ; then
2848
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2849
fi
2850

    
2851
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2852
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2853

    
2854
# check for some common methods of building with pthread support
2855
# do this before the optional library checks as some of them require pthreads
2856
if ! disabled pthreads && ! enabled w32threads; then
2857
    enable pthreads
2858
    if check_func pthread_create; then
2859
        :
2860
    elif check_func pthread_create -pthread; then
2861
        add_cflags -pthread
2862
        add_extralibs -pthread
2863
    elif check_func pthread_create -pthreads; then
2864
        add_cflags -pthreads
2865
        add_extralibs -pthreads
2866
    elif check_func pthread_create -lpthreadGC2; then
2867
        add_extralibs -lpthreadGC2
2868
    elif ! check_lib pthread.h pthread_create -lpthread; then
2869
        disable pthreads
2870
    fi
2871
fi
2872

    
2873
for thread in $THREADS_LIST; do
2874
    if enabled $thread; then
2875
        test -n "$thread_type" &&
2876
            die "ERROR: Only one thread type must be selected." ||
2877
            thread_type="$thread"
2878
    fi
2879
done
2880

    
2881
check_lib math.h sin -lm && LIBM="-lm"
2882
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
2883
enabled vaapi && require vaapi va/va.h vaInitialize -lva
2884

    
2885
check_mathfunc exp2
2886
check_mathfunc exp2f
2887
check_mathfunc llrint
2888
check_mathfunc llrintf
2889
check_mathfunc log2
2890
check_mathfunc log2f
2891
check_mathfunc lrint
2892
check_mathfunc lrintf
2893
check_mathfunc round
2894
check_mathfunc roundf
2895
check_mathfunc trunc
2896
check_mathfunc truncf
2897

    
2898
# these are off by default, so fail if requested and not available
2899
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2900
enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0
2901
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2902
enabled libdirac   && require_pkg_config dirac                          \
2903
    "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
2904
    "dirac_decoder_init dirac_encoder_init"
2905
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2906
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
2907
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2908
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2909
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2910
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2911
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2912
enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2913
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2914
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2915
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2916
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2917
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2918
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
2919
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2920
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2921
enabled libvpx     && {
2922
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2923
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2924
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
2925
                                die "ERROR: libvpx encoder version must be >=0.9.6"; } }
2926
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2927
                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2928
                        die "ERROR: libx264 version must be >= 0.99."; }
2929
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2930
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2931
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2932

    
2933
# libdc1394 check
2934
if enabled libdc1394; then
2935
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2936
        enable libdc1394_2; } ||
2937
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2938
        enable libdc1394_1; } ||
2939
    die "ERROR: No version of libdc1394 found "
2940
fi
2941

    
2942
SDL_CONFIG="${cross_prefix}sdl-config"
2943
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2944
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2945
    sdl_libs=$("${SDL_CONFIG}" --libs)
2946
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
2947
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2948
    enable sdl &&
2949
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2950
else
2951
    if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2952
        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2953
        enable sdl &&
2954
        check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2955
    fi
2956
fi
2957

    
2958
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2959

    
2960
check_header linux/fb.h
2961
check_header linux/videodev.h
2962
check_header linux/videodev2.h
2963
check_header sys/videoio.h
2964

    
2965
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2966
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2967
# w32api 3.12 had it defined wrong
2968
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2969

    
2970
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2971
{ check_header dev/bktr/ioctl_meteor.h &&
2972
  check_header dev/bktr/ioctl_bt848.h; } ||
2973
{ check_header machine/ioctl_meteor.h &&
2974
  check_header machine/ioctl_bt848.h; } ||
2975
{ check_header dev/video/meteor/ioctl_meteor.h &&
2976
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2977
check_header dev/ic/bt8xx.h
2978

    
2979
check_header sndio.h
2980
if check_struct sys/soundcard.h audio_buf_info bytes; then
2981
    enable_safe sys/soundcard.h
2982
else
2983
    check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
2984
    #include <sys/soundcard.h>
2985
    audio_buf_info abc;
2986
EOF
2987
fi
2988
check_header soundcard.h
2989

    
2990
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2991

    
2992
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
2993

    
2994
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2995

    
2996
enabled x11grab                         &&
2997
check_header X11/Xlib.h                 &&
2998
check_header X11/extensions/XShm.h      &&
2999
check_header X11/extensions/Xfixes.h    &&
3000
check_func XOpenDisplay -lX11           &&
3001
check_func XShmCreateImage -lX11 -lXext &&
3002
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
3003

    
3004
if ! disabled vaapi; then
3005
    check_lib va/va.h vaInitialize -lva && {
3006
        check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3007
        warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3008
    } || disable vaapi
3009
fi
3010

    
3011
if ! disabled vdpau && enabled vdpau_vdpau_h; then
3012
check_cpp_condition \
3013
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3014
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3015
      disable vdpau; }
3016
fi
3017

    
3018
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3019

    
3020
# add some useful compiler flags if supported
3021
check_cflags -Wdeclaration-after-statement
3022
check_cflags -Wall
3023
check_cflags -Wno-parentheses
3024
check_cflags -Wno-switch
3025
check_cflags -Wdisabled-optimization
3026
check_cflags -Wpointer-arith
3027
check_cflags -Wredundant-decls
3028
check_cflags -Wno-pointer-sign
3029
check_cflags -Wcast-qual
3030
check_cflags -Wwrite-strings
3031
check_cflags -Wtype-limits
3032
check_cflags -Wundef
3033
check_cflags -Wmissing-prototypes
3034
check_cflags -Wno-pointer-to-int-cast
3035
enabled extra_warnings && check_cflags -Winline
3036

    
3037
# add some linker flags
3038
check_ldflags -Wl,--warn-common
3039
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'
3040
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3041

    
3042
echo "X{};" > $TMPV
3043
if test_ldflags -Wl,--version-script,$TMPV; then
3044
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3045
    check_cc <<EOF && enable symver_asm_label
3046
void ff_foo(void) __asm__ ("av_foo@VERSION");
3047
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3048
EOF
3049
    check_cc <<EOF && enable symver_gnu_asm
3050
__asm__(".symver ff_foo,av_foo@VERSION");
3051
void ff_foo(void) {}
3052
EOF
3053
fi
3054

    
3055
if enabled small; then
3056
    add_cflags $size_cflags
3057
    optimizations="small"
3058
elif enabled optimizations; then
3059
    add_cflags $speed_cflags
3060
else
3061
    add_cflags $noopt_cflags
3062
fi
3063
check_cflags -fno-math-errno
3064
check_cflags -fno-signed-zeros
3065

    
3066
if enabled icc; then
3067
    # Just warnings, no remarks
3068
    check_cflags -w1
3069
    # -wd: Disable following warnings
3070
    # 144, 167, 556: -Wno-pointer-sign
3071
    # 1292: attribute "foo" ignored
3072
    # 10006: ignoring unknown option -fno-signed-zeros
3073
    # 10148: ignoring unknown option -Wno-parentheses
3074
    # 10156: ignoring option '-W'; no argument required
3075
    check_cflags -wd144,167,556,1292,10006,10148,10156
3076
    # 11030: Warning unknown option --as-needed
3077
    # 10156: ignoring option '-export'; no argument required
3078
    check_ldflags -wd10156,11030
3079
    # Allow to compile with optimizations
3080
    check_ldflags -march=$cpu
3081
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3082
    enable ebp_available
3083
    if enabled x86_32; then
3084
        test ${icc_version%%.*} -ge 11 && \
3085
            check_cflags -falign-stack=maintain-16-byte || \
3086
            disable aligned_stack
3087
    fi
3088
elif enabled ccc; then
3089
    # disable some annoying warnings
3090
    add_cflags -msg_disable cvtu32to64
3091
    add_cflags -msg_disable embedcomment
3092
    add_cflags -msg_disable needconstext
3093
    add_cflags -msg_disable nomainieee
3094
    add_cflags -msg_disable ptrmismatch1
3095
    add_cflags -msg_disable unreachcode
3096
elif enabled gcc; then
3097
    check_cflags -fno-tree-vectorize
3098
    check_cflags -Werror=implicit-function-declaration
3099
    check_cflags -Werror=missing-prototypes
3100
elif enabled llvm_gcc; then
3101
    check_cflags -mllvm -stack-alignment=16
3102
elif enabled clang; then
3103
    check_cflags -mllvm -stack-alignment=16
3104
    check_cflags -Qunused-arguments
3105
elif enabled armcc; then
3106
    # 2523: use of inline assembler is deprecated
3107
    add_cflags -W${armcc_opt},--diag_suppress=2523
3108
    add_cflags -W${armcc_opt},--diag_suppress=1207
3109
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3110
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3111
elif enabled tms470; then
3112
    add_cflags -pds=824 -pds=837
3113
elif enabled pathscale; then
3114
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3115
fi
3116

    
3117
enabled_any $THREADS_LIST      && enable threads
3118

    
3119
check_deps $CONFIG_LIST       \
3120
           $CONFIG_EXTRA      \
3121
           $HAVE_LIST         \
3122
           $DECODER_LIST      \
3123
           $ENCODER_LIST      \
3124
           $HWACCEL_LIST      \
3125
           $PARSER_LIST       \
3126
           $BSF_LIST          \
3127
           $DEMUXER_LIST      \
3128
           $MUXER_LIST        \
3129
           $FILTER_LIST       \
3130
           $INDEV_LIST        \
3131
           $OUTDEV_LIST       \
3132
           $PROTOCOL_LIST     \
3133
           $ACODEC_TESTS      \
3134
           $VCODEC_TESTS      \
3135
           $LAVF_TESTS        \
3136
           $LAVFI_TESTS       \
3137
           $SEEK_TESTS        \
3138

    
3139
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3140

    
3141
echo "install prefix            $prefix"
3142
echo "source path               $source_path"
3143
echo "C compiler                $cc"
3144
echo "ARCH                      $arch ($cpu)"
3145
if test "$build_suffix" != ""; then
3146
    echo "build suffix              $build_suffix"
3147
fi
3148
if test "$extra_version" != ""; then
3149
    echo "version string suffix     $extra_version"
3150
fi
3151
echo "big-endian                ${bigendian-no}"
3152
echo "runtime cpu detection     ${runtime_cpudetect-no}"
3153
if enabled x86; then
3154
    echo "yasm                      ${yasm-no}"
3155
    echo "MMX enabled               ${mmx-no}"
3156
    echo "MMX2 enabled              ${mmx2-no}"
3157
    echo "3DNow! enabled            ${amd3dnow-no}"
3158
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
3159
    echo "SSE enabled               ${sse-no}"
3160
    echo "SSSE3 enabled             ${ssse3-no}"
3161
    echo "CMOV enabled              ${cmov-no}"
3162
    echo "CMOV is fast              ${fast_cmov-no}"
3163
    echo "EBX available             ${ebx_available-no}"
3164
    echo "EBP available             ${ebp_available-no}"
3165
    echo "10 operands supported     ${ten_operands-no}"
3166
fi
3167
if enabled arm; then
3168
    echo "ARMv5TE enabled           ${armv5te-no}"
3169
    echo "ARMv6 enabled             ${armv6-no}"
3170
    echo "ARMv6T2 enabled           ${armv6t2-no}"
3171
    echo "ARM VFP enabled           ${armvfp-no}"
3172
    echo "IWMMXT enabled            ${iwmmxt-no}"
3173
    echo "NEON enabled              ${neon-no}"
3174
fi
3175
if enabled mips; then
3176
    echo "MMI enabled               ${mmi-no}"
3177
fi
3178
if enabled ppc; then
3179
    echo "AltiVec enabled           ${altivec-no}"
3180
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
3181
    echo "dcbzl available           ${dcbzl-no}"
3182
fi
3183
if enabled sparc; then
3184
    echo "VIS enabled               ${vis-no}"
3185
fi
3186
echo "debug symbols             ${debug-no}"
3187
echo "strip symbols             ${stripping-no}"
3188
echo "optimizations             ${optimizations-no}"
3189
echo "static                    ${static-no}"
3190
echo "shared                    ${shared-no}"
3191
echo "postprocessing support    ${postproc-no}"
3192
echo "new filter support        ${avfilter-no}"
3193
echo "network support           ${network-no}"
3194
echo "threading support         ${thread_type-no}"
3195
echo "SDL support               ${sdl-no}"
3196
echo "Sun medialib support      ${mlib-no}"
3197
echo "AVISynth enabled          ${avisynth-no}"
3198
echo "libcelt enabled           ${libcelt-no}"
3199
echo "frei0r enabled            ${frei0r-no}"
3200
echo "libdc1394 support         ${libdc1394-no}"
3201
echo "libdirac enabled          ${libdirac-no}"
3202
echo "libfaac enabled           ${libfaac-no}"
3203
echo "libgsm enabled            ${libgsm-no}"
3204
echo "libmp3lame enabled        ${libmp3lame-no}"
3205
echo "libnut enabled            ${libnut-no}"
3206
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3207
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3208
echo "libopencv support         ${libopencv-no}"
3209
echo "libopenjpeg enabled       ${libopenjpeg-no}"
3210
echo "librtmp enabled           ${librtmp-no}"
3211
echo "libschroedinger enabled   ${libschroedinger-no}"
3212
echo "libspeex enabled          ${libspeex-no}"
3213
echo "libtheora enabled         ${libtheora-no}"
3214
echo "libva enabled             ${vaapi-no}"
3215
echo "libvo-aacenc support      ${libvo_aacenc-no}"
3216
echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3217
echo "libvorbis enabled         ${libvorbis-no}"
3218
echo "libvpx enabled            ${libvpx-no}"
3219
echo "libx264 enabled           ${libx264-no}"
3220
echo "libxavs enabled           ${libxavs-no}"
3221
echo "libxvid enabled           ${libxvid-no}"
3222
echo "zlib enabled              ${zlib-no}"
3223
echo "bzlib enabled             ${bzlib-no}"
3224
echo
3225

    
3226
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3227
    echo "Enabled ${type}s:"
3228
    eval list=\$$(toupper $type)_LIST
3229
    print_enabled '_*' $list | sort | pr -r -3 -t
3230
    echo
3231
done
3232

    
3233
license="LGPL version 2.1 or later"
3234
if enabled nonfree; then
3235
    license="nonfree and unredistributable"
3236
elif enabled gplv3; then
3237
    license="GPL version 3 or later"
3238
elif enabled lgplv3; then
3239
    license="LGPL version 3 or later"
3240
elif enabled gpl; then
3241
    license="GPL version 2 or later"
3242
fi
3243

    
3244
echo "License: $license"
3245

    
3246
echo "Creating config.mak and config.h..."
3247

    
3248
# build tree in object directory if source path is different from current one
3249
if enabled source_path_used; then
3250
    DIRS="
3251
        doc
3252
        libavcodec
3253
        libavcodec/$arch
3254
        libavdevice
3255
        libavfilter
3256
        libavfilter/$arch
3257
        libavfilter/libmpcodecs
3258
        libavfilter/libmpcodecs/libvo
3259
        libavformat
3260
        libavutil
3261
        libavutil/$arch
3262
        libpostproc
3263
        libswscale
3264
        libswscale/$arch
3265
        tests
3266
        tools
3267
    "
3268
    FILES="
3269
        Makefile
3270
        common.mak
3271
        subdir.mak
3272
        doc/texi2pod.pl
3273
        libavcodec/Makefile
3274
        libavcodec/${arch}/Makefile
3275
        libavdevice/Makefile
3276
        libavfilter/Makefile
3277
        libavfilter/${arch}/Makefile
3278
        libavformat/Makefile
3279
        libavutil/Makefile
3280
        libpostproc/Makefile
3281
        libswscale/Makefile
3282
    "
3283
    map 'mkdir -p $v' $DIRS;
3284
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3285
fi
3286

    
3287
enabled stripping || strip="echo skipping strip"
3288

    
3289
config_files="$TMPH config.mak"
3290

    
3291
cat > config.mak <<EOF
3292
# Automatically generated by configure - do not modify!
3293
ifndef FFMPEG_CONFIG_MAK
3294
FFMPEG_CONFIG_MAK=1
3295
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3296
prefix=$prefix
3297
LIBDIR=\$(DESTDIR)$libdir
3298
SHLIBDIR=\$(DESTDIR)$shlibdir
3299
INCDIR=\$(DESTDIR)$incdir
3300
BINDIR=\$(DESTDIR)$bindir
3301
DATADIR=\$(DESTDIR)$datadir
3302
MANDIR=\$(DESTDIR)$mandir
3303
SRC_PATH="$source_path"
3304
SRC_PATH_BARE=$source_path
3305
BUILD_ROOT="$PWD"
3306
CC_IDENT=$cc_ident
3307
ARCH=$arch
3308
CC=$cc
3309
AS=$as
3310
LD=$ld
3311
DEPCC=$dep_cc
3312
YASM=$yasmexe
3313
YASMDEP=$yasmexe
3314
AR=$ar
3315
RANLIB=$ranlib
3316
CP=cp -p
3317
LN_S=$ln_s
3318
STRIP=$strip
3319
CPPFLAGS=$CPPFLAGS
3320
CFLAGS=$CFLAGS
3321
ASFLAGS=$ASFLAGS
3322
CC_O=$CC_O
3323
LDFLAGS=$LDFLAGS
3324
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3325
SHFLAGS=$SHFLAGS
3326
YASMFLAGS=$YASMFLAGS
3327
BUILDSUF=$build_suffix
3328
FULLNAME=$FULLNAME
3329
LIBPREF=$LIBPREF
3330
LIBSUF=$LIBSUF
3331
LIBNAME=$LIBNAME
3332
SLIBPREF=$SLIBPREF
3333
SLIBSUF=$SLIBSUF
3334
EXESUF=$EXESUF
3335
EXTRA_VERSION=$extra_version
3336
DEPFLAGS=$DEPFLAGS
3337
CCDEP=$CCDEP
3338
ASDEP=$ASDEP
3339
CC_DEPFLAGS=$CC_DEPFLAGS
3340
AS_DEPFLAGS=$AS_DEPFLAGS
3341
HOSTCC=$host_cc
3342
HOSTCFLAGS=$host_cflags
3343
HOSTEXESUF=$HOSTEXESUF
3344
HOSTLDFLAGS=$host_ldflags
3345
HOSTLIBS=$host_libs
3346
TARGET_EXEC=$target_exec
3347
TARGET_PATH=$target_path
3348
SDL_LIBS=$sdl_libs
3349
SDL_CFLAGS=$sdl_cflags
3350
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3351
EXTRALIBS=$extralibs
3352
INSTALL=install
3353
LIBTARGET=${LIBTARGET}
3354
SLIBNAME=${SLIBNAME}
3355
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3356
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3357
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3358
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3359
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3360
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3361
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3362
EOF
3363

    
3364
get_version(){
3365
    name=$1
3366
    file=$source_path/$2
3367
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3368
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3369
    lcname=$(tolower $name)
3370
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3371
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3372
}
3373

    
3374
get_version LIBSWSCALE  libswscale/swscale.h
3375
get_version LIBPOSTPROC libpostproc/postprocess.h
3376
get_version LIBAVCODEC  libavcodec/version.h
3377
get_version LIBAVDEVICE libavdevice/avdevice.h
3378
get_version LIBAVFORMAT libavformat/version.h
3379
get_version LIBAVUTIL   libavutil/avutil.h
3380
get_version LIBAVFILTER libavfilter/avfilter.h
3381

    
3382
cat > $TMPH <<EOF
3383
/* Automatically generated by configure - do not modify! */
3384
#ifndef FFMPEG_CONFIG_H
3385
#define FFMPEG_CONFIG_H
3386
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3387
#define FFMPEG_LICENSE "$(c_escape $license)"
3388
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3389
#define CC_TYPE "$cc_type"
3390
#define CC_VERSION $cc_version
3391
#define restrict $_restrict
3392
#define EXTERN_PREFIX "${extern_prefix}"
3393
#define EXTERN_ASM ${extern_prefix}
3394
#define SLIBSUF "$SLIBSUF"
3395
EOF
3396

    
3397
test -n "$malloc_prefix" &&
3398
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3399

    
3400
if enabled small || disabled optimizations; then
3401
    echo "#undef  av_always_inline"  >> $TMPH
3402
    if enabled small; then
3403
        echo "#define av_always_inline inline"  >> $TMPH
3404
    else
3405
        echo "#define av_always_inline av_unused"  >> $TMPH
3406
    fi
3407
fi
3408

    
3409
if enabled yasm; then
3410
    append config_files $TMPASM
3411
    printf '' >$TMPASM
3412
fi
3413

    
3414
print_config ARCH_   "$config_files" $ARCH_LIST
3415
print_config HAVE_   "$config_files" $HAVE_LIST
3416
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3417
                                     $CONFIG_EXTRA      \
3418
                                     $DECODER_LIST      \
3419
                                     $ENCODER_LIST      \
3420
                                     $HWACCEL_LIST      \
3421
                                     $PARSER_LIST       \
3422
                                     $BSF_LIST          \
3423
                                     $DEMUXER_LIST      \
3424
                                     $MUXER_LIST        \
3425
                                     $FILTER_LIST       \
3426
                                     $PROTOCOL_LIST     \
3427
                                     $INDEV_LIST        \
3428
                                     $OUTDEV_LIST       \
3429

    
3430
cat >>config.mak <<EOF
3431
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3432
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3433
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3434
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3435
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3436
EOF
3437

    
3438
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3439
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3440

    
3441
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3442
cp_if_changed $TMPH config.h
3443
touch .config
3444

    
3445
enabled yasm && cp_if_changed $TMPASM config.asm
3446

    
3447
cat > $TMPH <<EOF
3448
/* Generated by ffconf */
3449
#ifndef AVUTIL_AVCONFIG_H
3450
#define AVUTIL_AVCONFIG_H
3451
EOF
3452

    
3453
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3454

    
3455
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3456

    
3457
cp_if_changed $TMPH libavutil/avconfig.h
3458

    
3459
test -n "$WARNINGS" && printf "\n$WARNINGS"
3460

    
3461
# build pkg-config files
3462

    
3463
pkgconfig_generate(){
3464
name=$1
3465
shortname=${name#lib}${build_suffix}
3466
comment=$2
3467
version=$3
3468
libs=$4
3469
requires=$5
3470
enabled ${name#lib} || return 0
3471
cat <<EOF > $name/$name.pc
3472
prefix=$prefix
3473
exec_prefix=\${prefix}
3474
libdir=$libdir
3475
includedir=$incdir
3476

    
3477
Name: $name
3478
Description: $comment
3479
Version: $version
3480
Requires: $(enabled shared || echo $requires)
3481
Requires.private: $(enabled shared && echo $requires)
3482
Conflicts:
3483
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3484
Libs.private: $(enabled shared && echo $libs)
3485
Cflags: -I\${includedir}
3486
EOF
3487
cat <<EOF > $name/$name-uninstalled.pc
3488
prefix=
3489
exec_prefix=
3490
libdir=\${pcfiledir}
3491
includedir=${source_path}
3492

    
3493
Name: $name
3494
Description: $comment
3495
Version: $version
3496
Requires: $requires
3497
Conflicts:
3498
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3499
Cflags: -I\${includedir}
3500
EOF
3501
}
3502

    
3503
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3504
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3505
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3506
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3507
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3508
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3509
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"