Statistics
| Branch: | Revision:

ffmpeg / configure @ cde55897

History | View | Annotate | Download (103 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
  --enable-postproc        enable GPLed postprocessing support [no]
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
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
98
  --enable-gray            enable full grayscale support (slower color)
99
  --disable-swscale-alpha  disable alpha channel support in swscale
100
  --disable-fastdiv        disable table-based division
101
  --enable-small           optimize for size instead of speed
102
  --disable-aandct         disable AAN DCT code
103
  --disable-dct            disable DCT code
104
  --disable-fft            disable FFT code
105
  --disable-golomb         disable Golomb code
106
  --disable-huffman        disable Huffman code
107
  --disable-lpc            disable LPC code
108
  --disable-mdct           disable MDCT code
109
  --disable-rdft           disable RDFT code
110
  --disable-vaapi          disable VAAPI code
111
  --disable-vdpau          disable VDPAU code
112
  --disable-dxva2          disable DXVA2 code
113
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
116
  --disable-everything     disable all components listed below
117
  --disable-encoder=NAME   disable encoder NAME
118
  --enable-encoder=NAME    enable encoder NAME
119
  --disable-encoders       disable all encoders
120
  --disable-decoder=NAME   disable decoder NAME
121
  --enable-decoder=NAME    enable decoder NAME
122
  --disable-decoders       disable all decoders
123
  --disable-hwaccel=NAME   disable hwaccel NAME
124
  --enable-hwaccel=NAME    enable hwaccel NAME
125
  --disable-hwaccels       disable all hwaccels
126
  --disable-muxer=NAME     disable muxer NAME
127
  --enable-muxer=NAME      enable muxer NAME
128
  --disable-muxers         disable all muxers
129
  --disable-demuxer=NAME   disable demuxer NAME
130
  --enable-demuxer=NAME    enable demuxer NAME
131
  --disable-demuxers       disable all demuxers
132
  --enable-parser=NAME     enable parser NAME
133
  --disable-parser=NAME    disable parser NAME
134
  --disable-parsers        disable all parsers
135
  --enable-bsf=NAME        enable bitstream filter NAME
136
  --disable-bsf=NAME       disable bitstream filter NAME
137
  --disable-bsfs           disable all bitstream filters
138
  --enable-protocol=NAME   enable protocol NAME
139
  --disable-protocol=NAME  disable protocol NAME
140
  --disable-protocols      disable all protocols
141
  --disable-indev=NAME     disable input device NAME
142
  --disable-outdev=NAME    disable output device NAME
143
  --disable-indevs         disable input devices
144
  --disable-outdevs        disable output devices
145
  --disable-devices        disable all devices
146
  --enable-filter=NAME     enable filter NAME
147
  --disable-filter=NAME    disable filter NAME
148
  --disable-filters        disable all filters
149
  --list-decoders          show all available decoders
150
  --list-encoders          show all available encoders
151
  --list-hwaccels          show all available hardware accelerators
152
  --list-muxers            show all available muxers
153
  --list-demuxers          show all available demuxers
154
  --list-parsers           show all available parsers
155
  --list-protocols         show all available protocols
156
  --list-bsfs              show all available bitstream filters
157
  --list-indevs            show all available input devices
158
  --list-outdevs           show all available output devices
159
  --list-filters           show all available filters
160

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

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

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

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

    
258
quotes='""'
259

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
982
THREADS_LIST='
983
    pthreads
984
    w32threads
985
'
986

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

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

    
1031
HAVE_LIST_PUB='
1032
    bigendian
1033
    fast_unaligned
1034
'
1035

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

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

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

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

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

    
1203
CMDLINE_APPEND="
1204
    extra_cflags
1205
"
1206

    
1207
# code dependency declarations
1208

    
1209
# architecture extensions
1210

    
1211
armv5te_deps="arm"
1212
armv6_deps="arm"
1213
armv6t2_deps="arm"
1214
armvfp_deps="arm"
1215
iwmmxt_deps="arm"
1216
neon_deps="arm"
1217

    
1218
mmi_deps="mips"
1219

    
1220
altivec_deps="ppc"
1221
ppc4xx_deps="ppc"
1222

    
1223
vis_deps="sparc"
1224

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

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

    
1239
need_memalign="altivec neon sse"
1240
inline_asm_deps="!tms470"
1241

    
1242
symver_if_any="symver_asm_label symver_gnu_asm"
1243

    
1244
# subsystems
1245
dct_select="rdft"
1246
mdct_select="fft"
1247
rdft_select="fft"
1248

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

    
1391
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1392
vaapi_deps="va_va_h"
1393
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1394

    
1395
# parsers
1396
h264_parser_select="golomb h264dsp h264pred"
1397

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

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

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

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

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

    
1499
# libraries
1500
avdevice_deps="avcodec avformat"
1501
avformat_deps="avcodec"
1502

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

    
1512
doc_deps="texi2html"
1513

    
1514
# tests
1515

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

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

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

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

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

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

    
1619
# default parameters
1620

    
1621
logfile="config.log"
1622

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

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

    
1646
nm_opts='-g'
1647

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

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

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

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

    
1693
CC_O='-o $@'
1694

    
1695
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1696
host_libs='-lm'
1697

    
1698
target_path='$(CURDIR)'
1699

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1845
set_default arch target_os
1846

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

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

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

    
1860
exesuf() {
1861
    case $1 in
1862
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1863
    esac
1864
}
1865

    
1866
EXESUF=$(exesuf $target_os)
1867
HOSTEXESUF=$(exesuf $host_os)
1868

    
1869
# set temporary file name
1870
: ${TMPDIR:=$TEMPDIR}
1871
: ${TMPDIR:=$TMP}
1872
: ${TMPDIR:=/tmp}
1873

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

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

    
1890
trap 'rm -f -- $TMPFILES' EXIT
1891

    
1892
tmpfile TMPC  .c
1893
tmpfile TMPE  $EXESUF
1894
tmpfile TMPH  .h
1895
tmpfile TMPO  .o
1896
tmpfile TMPS  .S
1897
tmpfile TMPV  .ver
1898
tmpfile TMPSH .sh
1899
tmpfile TMPASM .asm
1900

    
1901
unset -f mktemp
1902

    
1903
chmod +x $TMPE
1904

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

    
1918
filter_cflags=echo
1919
filter_cppflags=echo
1920
filter_asflags=echo
1921

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

    
2098
test -n "$cc_type" && enable $cc_type ||
2099
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2100

    
2101
: ${as_default:=$cc}
2102
: ${dep_cc_default:=$cc}
2103
: ${ld_default:=$cc}
2104
set_default ar as dep_cc ld
2105

    
2106
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2107
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2108

    
2109
add_cflags $extra_cflags
2110
add_asflags $extra_cflags
2111

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

    
2125
if test "$cpu" = host; then
2126
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2127

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

    
2142
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2143
fi
2144

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

    
2186
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2187
enable $arch
2188

    
2189
# Add processor-specific flags
2190
if test "$cpu" = generic; then
2191
    : do nothing
2192
elif enabled ppc; then
2193

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

    
2234
elif enabled x86; then
2235

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

    
2260
elif enabled sparc; then
2261

    
2262
    case $cpu in
2263
        niagara)
2264
            cpuflags="-mcpu=$cpu"
2265
            disable vis
2266
        ;;
2267
        sparc64)
2268
            cpuflags="-mcpu=v9"
2269
        ;;
2270
    esac
2271

    
2272
elif enabled arm; then
2273

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

    
2292
elif enabled alpha; then
2293

    
2294
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2295

    
2296
elif enabled bfin; then
2297

    
2298
    cpuflags="-mcpu=$cpu"
2299

    
2300
elif enabled mips; then
2301

    
2302
    cpuflags="-march=$cpu"
2303

    
2304
elif enabled avr32; then
2305

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

    
2325
fi
2326

    
2327
add_cflags $cpuflags
2328
add_asflags $cpuflags
2329

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

    
2343
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2344
check_cflags -std=c99
2345
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2346
#include <stdlib.h>
2347
EOF
2348
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2349
#include <stdlib.h>
2350
EOF
2351

    
2352
check_host_cflags -std=c99
2353

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

    
2369
enable $subarch
2370
enabled spic && enable pic
2371

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

    
2534
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2535

    
2536
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2537

    
2538
set_default $PATHS_LIST
2539

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

    
2551
disabled static && LIBNAME=""
2552

    
2553
die_license_disabled() {
2554
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2555
}
2556

    
2557
die_license_disabled gpl libx264
2558
die_license_disabled gpl libxavs
2559
die_license_disabled gpl libxvid
2560
die_license_disabled gpl postproc
2561
die_license_disabled gpl x11grab
2562

    
2563
die_license_disabled nonfree libfaac
2564

    
2565
die_license_disabled version3 libopencore_amrnb
2566
die_license_disabled version3 libopencore_amrwb
2567
die_license_disabled version3 libvo_aacenc
2568
die_license_disabled version3 libvo_amrwbenc
2569

    
2570
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2571

    
2572
disabled optimizations || check_cflags -fomit-frame-pointer
2573

    
2574
enable_pic() {
2575
    enable pic
2576
    add_cppflags -DPIC
2577
    add_cflags   -fPIC
2578
    add_asflags  -fPIC
2579
}
2580

    
2581
enabled pic && enable_pic
2582

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

    
2589
check_cc <<EOF && enable inline_asm
2590
void foo(void) { __asm__ volatile ("" ::); }
2591
EOF
2592

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

    
2600
check_cc <<EOF && enable attribute_packed
2601
struct { int x; } __attribute__((packed)) x;
2602
EOF
2603

    
2604
check_cc <<EOF && enable attribute_may_alias
2605
union { int x; } __attribute__((may_alias)) x;
2606
EOF
2607

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

    
2613
if enabled alpha; then
2614

    
2615
    check_cflags -mieee
2616

    
2617
elif enabled arm; then
2618

    
2619
    check_cflags -marm
2620
    nogas=die
2621

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

    
2635
    # We have to check if pld is a nop and disable it.
2636
    check_asm pld '"pld [r0]"'
2637

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

    
2645
    enabled_all armv6t2 shared !pic && enable_pic
2646

    
2647
elif enabled mips; then
2648

    
2649
    check_asm loongson '"dmult.g $1, $2, $3"'
2650
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2651

    
2652
elif enabled ppc; then
2653

    
2654
    enable local_aligned_8 local_aligned_16
2655

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

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

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

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

    
2685
elif enabled sparc; then
2686

    
2687
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2688
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2689

    
2690
elif enabled x86; then
2691

    
2692
    enable local_aligned_8 local_aligned_16
2693

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

    
2706
    # check whether EBX is available on x86
2707
    check_asm ebx_available '""::"b"(0)' &&
2708
        check_asm ebx_available '"":::"%ebx"'
2709

    
2710
    # check whether xmm clobbers are supported
2711
    check_asm xmm_clobbers '"":::"%xmm0"'
2712

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

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

    
2729
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2730

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

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

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

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

    
2759
fi
2760

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

    
2767
check_ldflags -Wl,--as-needed
2768

    
2769
if check_func dlopen; then
2770
    ldl=
2771
elif check_func dlopen -ldl; then
2772
    ldl=-ldl
2773
fi
2774

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

    
2801
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2802
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2803

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

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

    
2841
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2842

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

    
2848
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2849
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2850

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

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

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

    
2882
check_mathfunc exp2
2883
check_mathfunc exp2f
2884
check_mathfunc llrint
2885
check_mathfunc llrintf
2886
check_mathfunc log2
2887
check_mathfunc log2f
2888
check_mathfunc lrint
2889
check_mathfunc lrintf
2890
check_mathfunc round
2891
check_mathfunc roundf
2892
check_mathfunc trunc
2893
check_mathfunc truncf
2894

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

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

    
2939
if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2940
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2941
    enable sdl &&
2942
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2943
fi
2944

    
2945
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2946

    
2947
check_header linux/fb.h
2948
check_header linux/videodev.h
2949
check_header linux/videodev2.h
2950
check_header sys/videoio.h
2951

    
2952
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2953
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2954
# w32api 3.12 had it defined wrong
2955
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2956

    
2957
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2958
{ check_header dev/bktr/ioctl_meteor.h &&
2959
  check_header dev/bktr/ioctl_bt848.h; } ||
2960
{ check_header machine/ioctl_meteor.h &&
2961
  check_header machine/ioctl_bt848.h; } ||
2962
{ check_header dev/video/meteor/ioctl_meteor.h &&
2963
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2964
check_header dev/ic/bt8xx.h
2965

    
2966
check_header sndio.h
2967
if check_struct sys/soundcard.h audio_buf_info bytes; then
2968
    enable_safe sys/soundcard.h
2969
else
2970
    check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
2971
    #include <sys/soundcard.h>
2972
    audio_buf_info abc;
2973
EOF
2974
fi
2975
check_header soundcard.h
2976

    
2977
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2978

    
2979
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
2980

    
2981
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2982

    
2983
enabled x11grab                         &&
2984
check_header X11/Xlib.h                 &&
2985
check_header X11/extensions/XShm.h      &&
2986
check_header X11/extensions/Xfixes.h    &&
2987
check_func XOpenDisplay -lX11           &&
2988
check_func XShmCreateImage -lX11 -lXext &&
2989
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2990

    
2991
if ! disabled vaapi; then
2992
    check_lib va/va.h vaInitialize -lva && {
2993
        check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
2994
        warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
2995
    } || disable vaapi
2996
fi
2997

    
2998
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2999
check_cpp_condition \
3000
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3001
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3002
      disable vdpau; }
3003
fi
3004

    
3005
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3006

    
3007
# add some useful compiler flags if supported
3008
check_cflags -Wdeclaration-after-statement
3009
check_cflags -Wall
3010
check_cflags -Wno-parentheses
3011
check_cflags -Wno-switch
3012
check_cflags -Wdisabled-optimization
3013
check_cflags -Wpointer-arith
3014
check_cflags -Wredundant-decls
3015
check_cflags -Wno-pointer-sign
3016
check_cflags -Wcast-qual
3017
check_cflags -Wwrite-strings
3018
check_cflags -Wtype-limits
3019
check_cflags -Wundef
3020
check_cflags -Wmissing-prototypes
3021
check_cflags -Wno-pointer-to-int-cast
3022
enabled extra_warnings && check_cflags -Winline
3023

    
3024
# add some linker flags
3025
check_ldflags -Wl,--warn-common
3026
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'
3027
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3028

    
3029
echo "X{};" > $TMPV
3030
if test_ldflags -Wl,--version-script,$TMPV; then
3031
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3032
    check_cc <<EOF && enable symver_asm_label
3033
void ff_foo(void) __asm__ ("av_foo@VERSION");
3034
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3035
EOF
3036
    check_cc <<EOF && enable symver_gnu_asm
3037
__asm__(".symver ff_foo,av_foo@VERSION");
3038
void ff_foo(void) {}
3039
EOF
3040
fi
3041

    
3042
if enabled small; then
3043
    add_cflags $size_cflags
3044
    optimizations="small"
3045
elif enabled optimizations; then
3046
    add_cflags $speed_cflags
3047
else
3048
    add_cflags $noopt_cflags
3049
fi
3050
check_cflags -fno-math-errno
3051
check_cflags -fno-signed-zeros
3052

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

    
3104
enabled_any $THREADS_LIST      && enable threads
3105

    
3106
check_deps $CONFIG_LIST       \
3107
           $CONFIG_EXTRA      \
3108
           $HAVE_LIST         \
3109
           $DECODER_LIST      \
3110
           $ENCODER_LIST      \
3111
           $HWACCEL_LIST      \
3112
           $PARSER_LIST       \
3113
           $BSF_LIST          \
3114
           $DEMUXER_LIST      \
3115
           $MUXER_LIST        \
3116
           $FILTER_LIST       \
3117
           $INDEV_LIST        \
3118
           $OUTDEV_LIST       \
3119
           $PROTOCOL_LIST     \
3120
           $ACODEC_TESTS      \
3121
           $VCODEC_TESTS      \
3122
           $LAVF_TESTS        \
3123
           $LAVFI_TESTS       \
3124
           $SEEK_TESTS        \
3125

    
3126
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3127

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

    
3213
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3214
    echo "Enabled ${type}s:"
3215
    eval list=\$$(toupper $type)_LIST
3216
    print_enabled '_*' $list | sort | pr -r -3 -t
3217
    echo
3218
done
3219

    
3220
license="LGPL version 2.1 or later"
3221
if enabled nonfree; then
3222
    license="nonfree and unredistributable"
3223
elif enabled gplv3; then
3224
    license="GPL version 3 or later"
3225
elif enabled lgplv3; then
3226
    license="LGPL version 3 or later"
3227
elif enabled gpl; then
3228
    license="GPL version 2 or later"
3229
fi
3230

    
3231
echo "License: $license"
3232

    
3233
echo "Creating config.mak and config.h..."
3234

    
3235
# build tree in object directory if source path is different from current one
3236
if enabled source_path_used; then
3237
    DIRS="
3238
        doc
3239
        libavcodec
3240
        libavcodec/$arch
3241
        libavdevice
3242
        libavfilter
3243
        libavfilter/$arch
3244
        libavfilter/libmpcodecs
3245
        libavfilter/libmpcodecs/libvo
3246
        libavformat
3247
        libavutil
3248
        libavutil/$arch
3249
        libpostproc
3250
        libswscale
3251
        libswscale/$arch
3252
        tests
3253
        tools
3254
    "
3255
    FILES="
3256
        Makefile
3257
        common.mak
3258
        subdir.mak
3259
        doc/texi2pod.pl
3260
        libavcodec/Makefile
3261
        libavcodec/${arch}/Makefile
3262
        libavdevice/Makefile
3263
        libavfilter/Makefile
3264
        libavfilter/${arch}/Makefile
3265
        libavformat/Makefile
3266
        libavutil/Makefile
3267
        libpostproc/Makefile
3268
        libswscale/Makefile
3269
    "
3270
    map 'mkdir -p $v' $DIRS;
3271
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3272
fi
3273

    
3274
enabled stripping || strip="echo skipping strip"
3275

    
3276
config_files="$TMPH config.mak"
3277

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

    
3351
get_version(){
3352
    name=$1
3353
    file=$source_path/$2
3354
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3355
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3356
    lcname=$(tolower $name)
3357
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3358
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3359
}
3360

    
3361
get_version LIBSWSCALE  libswscale/swscale.h
3362
get_version LIBPOSTPROC libpostproc/postprocess.h
3363
get_version LIBAVCODEC  libavcodec/version.h
3364
get_version LIBAVDEVICE libavdevice/avdevice.h
3365
get_version LIBAVFORMAT libavformat/version.h
3366
get_version LIBAVUTIL   libavutil/avutil.h
3367
get_version LIBAVFILTER libavfilter/avfilter.h
3368

    
3369
cat > $TMPH <<EOF
3370
/* Automatically generated by configure - do not modify! */
3371
#ifndef FFMPEG_CONFIG_H
3372
#define FFMPEG_CONFIG_H
3373
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3374
#define FFMPEG_LICENSE "$(c_escape $license)"
3375
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3376
#define CC_TYPE "$cc_type"
3377
#define CC_VERSION $cc_version
3378
#define restrict $_restrict
3379
#define EXTERN_PREFIX "${extern_prefix}"
3380
#define EXTERN_ASM ${extern_prefix}
3381
#define SLIBSUF "$SLIBSUF"
3382
EOF
3383

    
3384
test -n "$malloc_prefix" &&
3385
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3386

    
3387
if enabled small || disabled optimizations; then
3388
    echo "#undef  av_always_inline"  >> $TMPH
3389
    if enabled small; then
3390
        echo "#define av_always_inline inline"  >> $TMPH
3391
    else
3392
        echo "#define av_always_inline av_unused"  >> $TMPH
3393
    fi
3394
fi
3395

    
3396
if enabled yasm; then
3397
    append config_files $TMPASM
3398
    printf '' >$TMPASM
3399
fi
3400

    
3401
print_config ARCH_   "$config_files" $ARCH_LIST
3402
print_config HAVE_   "$config_files" $HAVE_LIST
3403
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3404
                                     $CONFIG_EXTRA      \
3405
                                     $DECODER_LIST      \
3406
                                     $ENCODER_LIST      \
3407
                                     $HWACCEL_LIST      \
3408
                                     $PARSER_LIST       \
3409
                                     $BSF_LIST          \
3410
                                     $DEMUXER_LIST      \
3411
                                     $MUXER_LIST        \
3412
                                     $FILTER_LIST       \
3413
                                     $PROTOCOL_LIST     \
3414
                                     $INDEV_LIST        \
3415
                                     $OUTDEV_LIST       \
3416

    
3417
cat >>config.mak <<EOF
3418
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3419
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3420
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3421
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3422
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3423
EOF
3424

    
3425
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3426
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3427

    
3428
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3429
cp_if_changed $TMPH config.h
3430
touch .config
3431

    
3432
enabled yasm && cp_if_changed $TMPASM config.asm
3433

    
3434
cat > $TMPH <<EOF
3435
/* Generated by ffconf */
3436
#ifndef AVUTIL_AVCONFIG_H
3437
#define AVUTIL_AVCONFIG_H
3438
EOF
3439

    
3440
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3441

    
3442
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3443

    
3444
cp_if_changed $TMPH libavutil/avconfig.h
3445

    
3446
test -n "$WARNINGS" && printf "\n$WARNINGS"
3447

    
3448
# build pkg-config files
3449

    
3450
pkgconfig_generate(){
3451
name=$1
3452
shortname=${name#lib}${build_suffix}
3453
comment=$2
3454
version=$3
3455
libs=$4
3456
requires=$5
3457
enabled ${name#lib} || return 0
3458
cat <<EOF > $name/$name.pc
3459
prefix=$prefix
3460
exec_prefix=\${prefix}
3461
libdir=$libdir
3462
includedir=$incdir
3463

    
3464
Name: $name
3465
Description: $comment
3466
Version: $version
3467
Requires: $(enabled shared || echo $requires)
3468
Requires.private: $(enabled shared && echo $requires)
3469
Conflicts:
3470
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3471
Libs.private: $(enabled shared && echo $libs)
3472
Cflags: -I\${includedir}
3473
EOF
3474
cat <<EOF > $name/$name-uninstalled.pc
3475
prefix=
3476
exec_prefix=
3477
libdir=\${pcfiledir}
3478
includedir=${source_path}
3479

    
3480
Name: $name
3481
Description: $comment
3482
Version: $version
3483
Requires: $requires
3484
Conflicts:
3485
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3486
Cflags: -I\${includedir}
3487
EOF
3488
}
3489

    
3490
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3491
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3492
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3493
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3494
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3495
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3496
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"