Statistics
| Branch: | Revision:

ffmpeg / configure @ ca87d439

History | View | Annotate | Download (104 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --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
if ! $pkg_config --version >/dev/null 2>&1; then
1861
    warn "$pkg_config not found, library detection may fail."
1862
    pkg_config=false
1863
fi
1864

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

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

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

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

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

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

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

    
1906
unset -f mktemp
1907

    
1908
chmod +x $TMPE
1909

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

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

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

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

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

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

    
2114
add_cflags $extra_cflags
2115
add_asflags $extra_cflags
2116

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

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

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

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

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

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

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

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

    
2239
elif enabled x86; then
2240

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

    
2265
elif enabled sparc; then
2266

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

    
2277
elif enabled arm; then
2278

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

    
2297
elif enabled alpha; then
2298

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

    
2301
elif enabled bfin; then
2302

    
2303
    cpuflags="-mcpu=$cpu"
2304

    
2305
elif enabled mips; then
2306

    
2307
    cpuflags="-march=$cpu"
2308

    
2309
elif enabled avr32; then
2310

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

    
2330
fi
2331

    
2332
add_cflags $cpuflags
2333
add_asflags $cpuflags
2334

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

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

    
2357
check_host_cflags -std=c99
2358

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

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

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

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

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

    
2543
set_default $PATHS_LIST
2544

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

    
2556
disabled static && LIBNAME=""
2557

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

    
2562
die_license_disabled gpl libx264
2563
die_license_disabled gpl libxavs
2564
die_license_disabled gpl libxvid
2565
die_license_disabled gpl postproc
2566
die_license_disabled gpl x11grab
2567

    
2568
die_license_disabled nonfree libfaac
2569

    
2570
die_license_disabled version3 libopencore_amrnb
2571
die_license_disabled version3 libopencore_amrwb
2572
die_license_disabled version3 libvo_aacenc
2573
die_license_disabled version3 libvo_amrwbenc
2574

    
2575
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2576

    
2577
disabled optimizations || check_cflags -fomit-frame-pointer
2578

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

    
2586
enabled pic && enable_pic
2587

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

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

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

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

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

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

    
2618
if enabled alpha; then
2619

    
2620
    check_cflags -mieee
2621

    
2622
elif enabled arm; then
2623

    
2624
    check_cflags -marm
2625
    nogas=die
2626

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

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

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

    
2650
    enabled_all armv6t2 shared !pic && enable_pic
2651

    
2652
elif enabled mips; then
2653

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

    
2657
elif enabled ppc; then
2658

    
2659
    enable local_aligned_8 local_aligned_16
2660

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

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

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

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

    
2690
elif enabled sparc; then
2691

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

    
2695
elif enabled x86; then
2696

    
2697
    enable local_aligned_8 local_aligned_16
2698

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

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

    
2715
    # check whether xmm clobbers are supported
2716
    check_asm xmm_clobbers '"":::"%xmm0"'
2717

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

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

    
2734
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2735

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

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

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

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

    
2764
fi
2765

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

    
2772
check_ldflags -Wl,--as-needed
2773

    
2774
if check_func dlopen; then
2775
    ldl=
2776
elif check_func dlopen -ldl; then
2777
    ldl=-ldl
2778
fi
2779

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

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

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

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

    
2846
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2847

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

    
2853
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2854
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2855

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

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

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

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

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

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

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

    
2954
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2955

    
2956
check_header linux/fb.h
2957
check_header linux/videodev.h
2958
check_header linux/videodev2.h
2959
check_header sys/videoio.h
2960

    
2961
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2962
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2963
# w32api 3.12 had it defined wrong
2964
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2965

    
2966
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2967
{ check_header dev/bktr/ioctl_meteor.h &&
2968
  check_header dev/bktr/ioctl_bt848.h; } ||
2969
{ check_header machine/ioctl_meteor.h &&
2970
  check_header machine/ioctl_bt848.h; } ||
2971
{ check_header dev/video/meteor/ioctl_meteor.h &&
2972
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2973
check_header dev/ic/bt8xx.h
2974

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

    
2986
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2987

    
2988
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
2989

    
2990
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2991

    
2992
enabled x11grab                         &&
2993
check_header X11/Xlib.h                 &&
2994
check_header X11/extensions/XShm.h      &&
2995
check_header X11/extensions/Xfixes.h    &&
2996
check_func XOpenDisplay -lX11           &&
2997
check_func XShmCreateImage -lX11 -lXext &&
2998
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2999

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

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

    
3014
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3015

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

    
3033
# add some linker flags
3034
check_ldflags -Wl,--warn-common
3035
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'
3036
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3037

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

    
3051
if enabled small; then
3052
    add_cflags $size_cflags
3053
    optimizations="small"
3054
elif enabled optimizations; then
3055
    add_cflags $speed_cflags
3056
else
3057
    add_cflags $noopt_cflags
3058
fi
3059
check_cflags -fno-math-errno
3060
check_cflags -fno-signed-zeros
3061

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

    
3113
enabled_any $THREADS_LIST      && enable threads
3114

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

    
3135
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3136

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

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

    
3229
license="LGPL version 2.1 or later"
3230
if enabled nonfree; then
3231
    license="nonfree and unredistributable"
3232
elif enabled gplv3; then
3233
    license="GPL version 3 or later"
3234
elif enabled lgplv3; then
3235
    license="LGPL version 3 or later"
3236
elif enabled gpl; then
3237
    license="GPL version 2 or later"
3238
fi
3239

    
3240
echo "License: $license"
3241

    
3242
echo "Creating config.mak and config.h..."
3243

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

    
3283
enabled stripping || strip="echo skipping strip"
3284

    
3285
config_files="$TMPH config.mak"
3286

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

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

    
3370
get_version LIBSWSCALE  libswscale/swscale.h
3371
get_version LIBPOSTPROC libpostproc/postprocess.h
3372
get_version LIBAVCODEC  libavcodec/version.h
3373
get_version LIBAVDEVICE libavdevice/avdevice.h
3374
get_version LIBAVFORMAT libavformat/version.h
3375
get_version LIBAVUTIL   libavutil/avutil.h
3376
get_version LIBAVFILTER libavfilter/avfilter.h
3377

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

    
3393
test -n "$malloc_prefix" &&
3394
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3395

    
3396
if enabled small || disabled optimizations; then
3397
    echo "#undef  av_always_inline"  >> $TMPH
3398
    if enabled small; then
3399
        echo "#define av_always_inline inline"  >> $TMPH
3400
    else
3401
        echo "#define av_always_inline av_unused"  >> $TMPH
3402
    fi
3403
fi
3404

    
3405
if enabled yasm; then
3406
    append config_files $TMPASM
3407
    printf '' >$TMPASM
3408
fi
3409

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

    
3426
cat >>config.mak <<EOF
3427
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3428
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3429
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3430
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3431
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3432
EOF
3433

    
3434
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3435
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3436

    
3437
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3438
cp_if_changed $TMPH config.h
3439
touch .config
3440

    
3441
enabled yasm && cp_if_changed $TMPASM config.asm
3442

    
3443
cat > $TMPH <<EOF
3444
/* Generated by ffconf */
3445
#ifndef AVUTIL_AVCONFIG_H
3446
#define AVUTIL_AVCONFIG_H
3447
EOF
3448

    
3449
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3450

    
3451
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3452

    
3453
cp_if_changed $TMPH libavutil/avconfig.h
3454

    
3455
test -n "$WARNINGS" && printf "\n$WARNINGS"
3456

    
3457
# build pkg-config files
3458

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

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

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

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