Statistics
| Branch: | Revision:

ffmpeg / configure @ 2ed46eea

History | View | Annotate | Download (84.1 KB)

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

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

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

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

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

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

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

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

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

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

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

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

    
229
Developer options (useful when working on FFmpeg itself):
230
  --disable-debug          disable debugging symbols
231
  --enable-debug=LEVEL     set the debug level [$debuglevel]
232
  --enable-gprof           enable profiling with gprof [$gprof]
233
  --disable-optimizations  disable compiler optimizations
234
  --enable-extra-warnings  enable more compiler warnings
235
  --disable-stripping      disable stripping of executables and shared libraries
236

    
237
NOTE: Object files are built at the place where configure is launched.
238
EOF
239
  exit 0
240
}
241

    
242
log(){
243
    echo "$@" >> $logfile
244
}
245

    
246
log_file(){
247
    log BEGIN $1
248
    pr -n -t $1 >> $logfile
249
    log END $1
250
}
251

    
252
echolog(){
253
    log "$@"
254
    echo "$@"
255
}
256

    
257
die(){
258
    echolog "$@"
259
    cat <<EOF
260

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

    
279
# Avoid locale weirdness, besides we really just want to translate ASCII.
280
toupper(){
281
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
282
}
283

    
284
tolower(){
285
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
286
}
287

    
288
c_escape(){
289
    echo "$*" | sed 's/["\\]/\\\0/g'
290
}
291

    
292
sh_quote(){
293
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
294
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
295
    echo "$v"
296
}
297

    
298
filter(){
299
    pat=$1
300
    shift
301
    for v; do
302
        eval "case $v in $pat) echo $v ;; esac"
303
    done
304
}
305

    
306
set_all(){
307
    value=$1
308
    shift
309
    for var in $*; do
310
        eval $var=$value
311
    done
312
}
313

    
314
set_weak(){
315
    value=$1
316
    shift
317
    for var; do
318
        eval : \${$var:=$value}
319
    done
320
}
321

    
322
pushvar(){
323
    for var in $*; do
324
        eval level=\${${var}_level:=0}
325
        eval ${var}_${level}="\$$var"
326
        eval ${var}_level=$(($level+1))
327
    done
328
}
329

    
330
popvar(){
331
    for var in $*; do
332
        eval level=\${${var}_level:-0}
333
        test $level = 0 && continue
334
        eval level=$(($level-1))
335
        eval $var="\${${var}_${level}}"
336
        eval ${var}_level=$level
337
        eval unset ${var}_${level}
338
    done
339
}
340

    
341
enable(){
342
    set_all yes $*
343
}
344

    
345
disable(){
346
    set_all no $*
347
}
348

    
349
enable_weak(){
350
    set_weak yes $*
351
}
352

    
353
disable_weak(){
354
    set_weak no $*
355
}
356

    
357
enable_safe(){
358
    for var; do
359
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
360
    done
361
}
362

    
363
disable_safe(){
364
    for var; do
365
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
366
    done
367
}
368

    
369
do_enable_deep(){
370
    for var; do
371
        enabled $var && continue
372
        eval sel="\$${var}_select"
373
        eval sgs="\$${var}_suggest"
374
        pushvar var sgs
375
        enable_deep $sel
376
        popvar sgs
377
        enable_deep_weak $sgs
378
        popvar var
379
    done
380
}
381

    
382
enable_deep(){
383
    do_enable_deep $*
384
    enable $*
385
}
386

    
387
enable_deep_weak(){
388
    do_enable_deep $*
389
    enable_weak $*
390
}
391

    
392
enabled(){
393
    test "${1#!}" = "$1" && op== || op=!=
394
    eval test "x\$${1#!}" $op "xyes"
395
}
396

    
397
disabled(){
398
    test "${1#!}" = "$1" && op== || op=!=
399
    eval test "x\$${1#!}" $op "xno"
400
}
401

    
402
enabled_all(){
403
    for opt; do
404
        enabled $opt || return 1
405
    done
406
}
407

    
408
disabled_all(){
409
    for opt; do
410
        disabled $opt || return 1
411
    done
412
}
413

    
414
enabled_any(){
415
    for opt; do
416
        enabled $opt && return 0
417
    done
418
}
419

    
420
disabled_any(){
421
    for opt; do
422
        disabled $opt && return 0
423
    done
424
    return 1
425
}
426

    
427
set_default(){
428
    for opt; do
429
        eval : \${$opt:=\$${opt}_default}
430
    done
431
}
432

    
433
is_in(){
434
    value=$1
435
    shift
436
    for var in $*; do
437
        [ $var = $value ] && return 0
438
    done
439
    return 1
440
}
441

    
442
check_deps(){
443
    for cfg; do
444
        cfg="${cfg#!}"
445
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
446
        disabled ${cfg}_checking && continue
447
        enable ${cfg}_checking
448

    
449
        eval dep_all="\$${cfg}_deps"
450
        eval dep_any="\$${cfg}_deps_any"
451
        eval dep_sel="\$${cfg}_select"
452
        eval dep_sgs="\$${cfg}_suggest"
453
        eval dep_ifa="\$${cfg}_if"
454
        eval dep_ifn="\$${cfg}_if_any"
455

    
456
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
457
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
458
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
459

    
460
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
461
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
462
        enabled_all  $dep_all || disable $cfg
463
        enabled_any  $dep_any || disable $cfg
464
        disabled_any $dep_sel && disable $cfg
465

    
466
        if enabled $cfg; then
467
            eval dep_extralibs="\$${cfg}_extralibs"
468
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
469
            enable_deep $dep_sel
470
            enable_deep_weak $dep_sgs
471
        fi
472

    
473
        disable ${cfg}_checking
474
    done
475
}
476

    
477
print_config(){
478
    pfx=$1
479
    header=$2
480
    makefile=$3
481
    shift 3
482
    for cfg; do
483
        ucname="$(toupper $cfg)"
484
        if enabled $cfg; then
485
            echo "#define ${pfx}${ucname} 1" >> $header
486
            echo "${pfx}${ucname}=yes" >> $makefile
487
        else
488
            echo "#define ${pfx}${ucname} 0" >> $header
489
            echo "!${pfx}${ucname}=yes" >> $makefile
490
        fi
491
    done
492
}
493

    
494
flags_saved(){
495
    (: ${SAVE_CFLAGS?}) 2> /dev/null
496
}
497

    
498
save_flags(){
499
    flags_saved && return
500
    SAVE_CFLAGS="$CFLAGS"
501
    SAVE_LDFLAGS="$LDFLAGS"
502
    SAVE_extralibs="$extralibs"
503
}
504

    
505
restore_flags(){
506
    flags_saved || return
507
    CFLAGS="$SAVE_CFLAGS"
508
    LDFLAGS="$SAVE_LDFLAGS"
509
    extralibs="$SAVE_extralibs"
510
    unset SAVE_CFLAGS
511
    unset SAVE_LDFLAGS
512
    unset SAVE_extralibs
513
}
514

    
515
temp_cflags(){
516
    save_flags
517
    CFLAGS="$CFLAGS $*"
518
}
519

    
520
temp_ldflags(){
521
    save_flags
522
    LDFLAGS="$LDFLAGS $*"
523
}
524

    
525
temp_extralibs(){
526
    save_flags
527
    extralibs="$extralibs $*"
528
}
529

    
530
append(){
531
    var=$1
532
    shift
533
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
534
    eval "$var=\"\$$var $*\""
535
}
536

    
537
add_cppflags(){
538
    append CPPFLAGS $($filter_cppflags "$@")
539
}
540

    
541
add_cflags(){
542
    append CFLAGS $($filter_cflags "$@")
543
}
544

    
545
add_asflags(){
546
    append ASFLAGS $($filter_asflags "$@")
547
}
548

    
549
add_ldflags(){
550
    append LDFLAGS "$@"
551
}
552

    
553
add_extralibs(){
554
    append extralibs "$@"
555
}
556

    
557
check_cmd(){
558
    log "$@"
559
    "$@" >> $logfile 2>&1
560
}
561

    
562
check_cc(){
563
    log check_cc "$@"
564
    cat > $TMPC
565
    log_file $TMPC
566
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
567
}
568

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

    
576
check_as(){
577
    log check_as "$@"
578
    cat > $TMPC
579
    log_file $TMPC
580
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
581
}
582

    
583
check_asm(){
584
    log check_asm "$@"
585
    name="$1"
586
    asm="$2"
587
    shift 2
588
    disable $name
589
    check_as "$@" <<EOF && enable $name
590
void foo(void){ __asm__ volatile($asm); }
591
EOF
592
}
593

    
594
check_yasm(){
595
    log check_yasm "$@"
596
    echo "$1" > $TMPS
597
    log_file $TMPS
598
    shift 1
599
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
600
}
601

    
602
check_ld(){
603
    log check_ld "$@"
604
    check_cc || return
605
    flags=''
606
    libs=''
607
    for f; do
608
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
609
    done
610
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
611
}
612

    
613
check_cppflags(){
614
    log check_cppflags "$@"
615
    set -- $($filter_cppflags "$@")
616
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
617
int x;
618
EOF
619
}
620

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

    
629
test_ldflags(){
630
    log test_ldflags "$@"
631
    check_ld "$@" <<EOF
632
int main(void){ return 0; }
633
EOF
634
}
635

    
636
check_ldflags(){
637
    log check_ldflags "$@"
638
    test_ldflags "$@" && add_ldflags "$@"
639
}
640

    
641
check_header(){
642
    log check_header "$@"
643
    header=$1
644
    shift
645
    disable_safe $header
646
    check_cpp "$@" <<EOF && enable_safe $header
647
#include <$header>
648
int x;
649
EOF
650
}
651

    
652
check_func(){
653
    log check_func "$@"
654
    func=$1
655
    shift
656
    disable $func
657
    check_ld "$@" <<EOF && enable $func
658
extern int $func();
659
int main(void){ $func(); }
660
EOF
661
}
662

    
663
check_func_headers(){
664
    log check_func_headers "$@"
665
    headers=$1
666
    func=$2
667
    shift 2
668
    disable $func
669
    incs=""
670
    for hdr in $headers; do
671
        incs="$incs
672
#include <$hdr>"
673
    done
674
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
675
$incs
676
int main(int argc, char **argv){
677
    return (long) $func;
678
}
679
EOF
680
}
681

    
682
check_cpp_condition(){
683
    log check_cpp_condition "$@"
684
    header=$1
685
    condition=$2
686
    check_cpp <<EOF
687
#include <$header>
688
#if !($condition)
689
#error "unsatisfied condition: $condition"
690
#endif
691
EOF
692
}
693

    
694
check_lib(){
695
    log check_lib "$@"
696
    header="$1"
697
    func="$2"
698
    shift 2
699
    temp_extralibs "$@"
700
    check_header $header && check_func $func && add_extralibs "$@"
701
    err=$?
702
    restore_flags
703
    return $err
704
}
705

    
706
check_lib2(){
707
    log check_lib2 "$@"
708
    headers="$1"
709
    func="$2"
710
    shift 2
711
    temp_extralibs "$@"
712
    check_func_headers "$headers" $func && add_extralibs "$@"
713
    err=$?
714
    restore_flags
715
    return $err
716
}
717

    
718
check_exec(){
719
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
720
}
721

    
722
check_exec_crash(){
723
    code=$(cat)
724

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

    
731
    (check_exec "$@") >> $logfile 2>&1 <<EOF
732
#include <signal.h>
733
static void sighandler(int sig){
734
    raise(SIGTERM);
735
}
736
int main(void){
737
    signal(SIGILL, sighandler);
738
    signal(SIGFPE, sighandler);
739
    signal(SIGSEGV, sighandler);
740
#ifdef SIGBUS
741
    signal(SIGBUS, sighandler);
742
#endif
743
    { $code }
744
}
745
EOF
746
}
747

    
748
check_type(){
749
    log check_type "$@"
750
    headers=$1
751
    type=$2
752
    shift 2
753
    disable_safe "$type"
754
    incs=""
755
    for hdr in $headers; do
756
        incs="$incs
757
#include <$hdr>"
758
    done
759
    check_cc "$@" <<EOF && enable_safe "$type"
760
$incs
761
$type v;
762
EOF
763
}
764

    
765
require(){
766
    name="$1"
767
    header="$2"
768
    func="$3"
769
    shift 3
770
    check_lib $header $func "$@" || die "ERROR: $name not found"
771
}
772

    
773
require2(){
774
    name="$1"
775
    headers="$2"
776
    func="$3"
777
    shift 3
778
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
779
}
780

    
781
check_foo_config(){
782
    cfg=$1
783
    pkg=$2
784
    header=$3
785
    func=$4
786
    shift 4
787
    disable $cfg
788
    check_cmd ${pkg}-config --version
789
    err=$?
790
    if test "$err" = 0; then
791
        temp_cflags $(${pkg}-config --cflags)
792
        temp_extralibs $(${pkg}-config --libs)
793
        check_lib "$@" $header $func && enable $cfg
794
    fi
795
    return $err
796
}
797

    
798
check_host_cc(){
799
    log check_host_cc "$@"
800
    cat > $TMPC
801
    log_file $TMPC
802
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
803
}
804

    
805
check_host_cflags(){
806
    log check_host_cflags "$@"
807
    check_host_cc "$@" <<EOF && append host_cflags "$@"
808
int x;
809
EOF
810
}
811

    
812
apply(){
813
    file=$1
814
    shift
815
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
816
}
817

    
818
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
819
# system-dependent things.
820

    
821
COMPONENT_LIST="
822
    bsfs
823
    decoders
824
    demuxers
825
    encoders
826
    filters
827
    hwaccels
828
    indevs
829
    muxers
830
    outdevs
831
    parsers
832
    protocols
833
"
834

    
835
CONFIG_LIST="
836
    $COMPONENT_LIST
837
    aandct
838
    avfilter
839
    avfilter_lavf
840
    avisynth
841
    beos_netserver
842
    bzlib
843
    doc
844
    fastdiv
845
    ffmpeg
846
    ffplay
847
    ffserver
848
    fft
849
    golomb
850
    gpl
851
    gprof
852
    gray
853
    hardcoded_tables
854
    ipv6
855
    libdc1394
856
    libdirac
857
    libfaac
858
    libfaad
859
    libfaadbin
860
    libgsm
861
    libmp3lame
862
    libnut
863
    libopencore_amrnb
864
    libopencore_amrwb
865
    libopenjpeg
866
    libschroedinger
867
    libspeex
868
    libtheora
869
    libvorbis
870
    libx264
871
    libxvid
872
    lpc
873
    mdct
874
    memalign_hack
875
    mlib
876
    mpegaudio_hp
877
    network
878
    nonfree
879
    pic
880
    postproc
881
    powerpc_perf
882
    rdft
883
    runtime_cpudetect
884
    shared
885
    small
886
    static
887
    swscale_alpha
888
    vaapi
889
    vdpau
890
    version3
891
    x11grab
892
    zlib
893
"
894

    
895
THREADS_LIST='
896
    beosthreads
897
    os2threads
898
    pthreads
899
    w32threads
900
'
901

    
902
ARCH_LIST='
903
    alpha
904
    arm
905
    avr32
906
    avr32_ap
907
    avr32_uc
908
    bfin
909
    ia64
910
    m68k
911
    mips
912
    mips64
913
    parisc
914
    ppc
915
    ppc64
916
    s390
917
    sh4
918
    sparc
919
    sparc64
920
    x86
921
    x86_32
922
    x86_64
923
'
924

    
925
ARCH_EXT_LIST='
926
    altivec
927
    amd3dnow
928
    amd3dnowext
929
    armv5te
930
    armv6
931
    armv6t2
932
    armvfp
933
    iwmmxt
934
    mmi
935
    mmx
936
    mmx2
937
    neon
938
    ppc4xx
939
    sse
940
    ssse3
941
    vis
942
'
943

    
944
HAVE_LIST="
945
    $ARCH_EXT_LIST
946
    $THREADS_LIST
947
    alsa_asoundlib_h
948
    altivec_h
949
    arpa_inet_h
950
    attribute_packed
951
    bigendian
952
    bswap
953
    closesocket
954
    cmov
955
    conio_h
956
    dcbzl
957
    dev_bktr_ioctl_bt848_h
958
    dev_bktr_ioctl_meteor_h
959
    dev_ic_bt8xx_h
960
    dev_video_meteor_ioctl_meteor_h
961
    dev_video_bktr_ioctl_bt848_h
962
    dlfcn_h
963
    dlopen
964
    dos_paths
965
    ebp_available
966
    ebx_available
967
    exp2
968
    exp2f
969
    fast_64bit
970
    fast_clz
971
    fast_cmov
972
    fast_unaligned
973
    fork
974
    getaddrinfo
975
    gethrtime
976
    GetProcessTimes
977
    getrusage
978
    inet_aton
979
    inline_asm
980
    isatty
981
    ldbrx
982
    libdc1394_1
983
    libdc1394_2
984
    llrint
985
    log2
986
    log2f
987
    loongson
988
    lrint
989
    lrintf
990
    lzo1x_999_compress
991
    machine_ioctl_bt848_h
992
    machine_ioctl_meteor_h
993
    malloc_h
994
    memalign
995
    mkstemp
996
    pld
997
    posix_memalign
998
    round
999
    roundf
1000
    sdl
1001
    sdl_video_size
1002
    setmode
1003
    socklen_t
1004
    soundcard_h
1005
    poll_h
1006
    struct_addrinfo
1007
    struct_sockaddr_storage
1008
    sys_mman_h
1009
    sys_resource_h
1010
    sys_select_h
1011
    sys_soundcard_h
1012
    sys_videoio_h
1013
    ten_operands
1014
    termios_h
1015
    threads
1016
    truncf
1017
    vfp_args
1018
    VirtualAlloc
1019
    winsock2_h
1020
    xform_asm
1021
    yasm
1022
"
1023

    
1024
# options emitted with CONFIG_ prefix but not available on command line
1025
CONFIG_EXTRA="
1026
    gplv3
1027
    lgplv3
1028
"
1029

    
1030
CMDLINE_SELECT="
1031
    $ARCH_EXT_LIST
1032
    $CONFIG_LIST
1033
    $THREADS_LIST
1034
    cross_compile
1035
    debug
1036
    extra_warnings
1037
    logging
1038
    optimizations
1039
    stripping
1040
    yasm
1041
"
1042

    
1043
PATHS_LIST='
1044
    bindir
1045
    datadir
1046
    incdir
1047
    libdir
1048
    mandir
1049
    prefix
1050
    shlibdir
1051
'
1052

    
1053
CMDLINE_SET="
1054
    $PATHS_LIST
1055
    arch
1056
    as
1057
    build_suffix
1058
    cc
1059
    cpu
1060
    cross_prefix
1061
    dep_cc
1062
    extra_version
1063
    host_cc
1064
    host_cflags
1065
    host_ldflags
1066
    host_libs
1067
    host_os
1068
    ld
1069
    logfile
1070
    nm
1071
    source_path
1072
    sysinclude
1073
    sysroot
1074
    target_exec
1075
    target_os
1076
    target_path
1077
"
1078

    
1079
CMDLINE_APPEND="
1080
    extra_cflags
1081
"
1082

    
1083
# code dependency declarations
1084

    
1085
# architecture extensions
1086
altivec_deps="ppc"
1087
amd3dnow_deps="mmx"
1088
amd3dnowext_deps="amd3dnow"
1089
armv5te_deps="arm"
1090
armv6_deps="arm"
1091
armv6t2_deps="arm"
1092
armvfp_deps="arm"
1093
iwmmxt_deps="arm"
1094
mmi_deps="mips"
1095
mmx_deps="x86"
1096
mmx2_deps="mmx"
1097
neon_deps="arm"
1098
ppc4xx_deps="ppc"
1099
sse_deps="mmx"
1100
ssse3_deps="sse"
1101
vis_deps="sparc"
1102

    
1103
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1104

    
1105
need_memalign="altivec neon sse"
1106
inline_asm_deps="!tms470"
1107

    
1108
# decoders / encoders / hardware accelerators
1109
aac_decoder_select="fft mdct aac_parser"
1110
aac_encoder_select="fft mdct"
1111
ac3_decoder_select="fft mdct ac3_parser"
1112
alac_encoder_select="lpc"
1113
atrac3_decoder_select="fft mdct"
1114
cavs_decoder_select="golomb"
1115
cook_decoder_select="fft mdct"
1116
cscd_decoder_suggest="zlib"
1117
dca_decoder_select="fft mdct"
1118
dnxhd_encoder_select="aandct"
1119
dxa_decoder_select="zlib"
1120
eac3_decoder_select="ac3_decoder"
1121
eamad_decoder_select="aandct"
1122
eatgq_decoder_select="aandct"
1123
eatqi_decoder_select="aandct"
1124
ffv1_decoder_select="golomb"
1125
flac_decoder_select="golomb"
1126
flac_encoder_select="golomb lpc"
1127
flashsv_decoder_select="zlib"
1128
flashsv_encoder_select="zlib"
1129
flv_decoder_select="h263_decoder"
1130
flv_encoder_select="h263_encoder"
1131
h261_encoder_select="aandct"
1132
h263_decoder_select="h263_parser"
1133
h263_encoder_select="aandct"
1134
h263_vaapi_hwaccel_deps="va_va_h"
1135
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1136
h263i_decoder_select="h263_decoder"
1137
h263p_encoder_select="h263_encoder"
1138
h264_decoder_select="golomb"
1139
h264_vaapi_hwaccel_deps="va_va_h"
1140
h264_vaapi_hwaccel_select="vaapi"
1141
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1142
h264_vdpau_decoder_select="vdpau h264_decoder"
1143
imc_decoder_select="fft mdct"
1144
jpegls_decoder_select="golomb"
1145
jpegls_encoder_select="golomb"
1146
ljpeg_encoder_select="aandct"
1147
loco_decoder_select="golomb"
1148
mjpeg_encoder_select="aandct"
1149
mlp_decoder_select="mlp_parser"
1150
mpeg1video_encoder_select="aandct"
1151
mpeg2video_encoder_select="aandct"
1152
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1153
mpeg4_encoder_select="h263_encoder"
1154
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1155
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1156
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1157
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1158
mpeg2_vaapi_hwaccel_deps="va_va_h"
1159
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1160
mpeg4_vaapi_hwaccel_deps="va_va_h"
1161
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1162
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1163
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1164
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1165
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1166
msmpeg4v1_decoder_select="h263_decoder"
1167
msmpeg4v1_encoder_select="h263_encoder"
1168
msmpeg4v2_decoder_select="h263_decoder"
1169
msmpeg4v2_encoder_select="h263_encoder"
1170
msmpeg4v3_decoder_select="h263_decoder"
1171
msmpeg4v3_encoder_select="h263_encoder"
1172
nellymoser_decoder_select="fft mdct"
1173
nellymoser_encoder_select="fft mdct"
1174
png_decoder_select="zlib"
1175
png_encoder_select="zlib"
1176
qdm2_decoder_select="fft mdct rdft"
1177
rv10_decoder_select="h263_decoder"
1178
rv10_encoder_select="h263_encoder"
1179
rv20_decoder_select="h263_decoder"
1180
rv20_encoder_select="h263_encoder"
1181
rv30_decoder_select="golomb"
1182
rv40_decoder_select="golomb"
1183
shorten_decoder_select="golomb"
1184
sonic_decoder_select="golomb"
1185
sonic_encoder_select="golomb"
1186
sonic_ls_encoder_select="golomb"
1187
svq3_decoder_select="golomb"
1188
svq3_decoder_suggest="zlib"
1189
theora_decoder_select="vp3_decoder"
1190
tiff_decoder_suggest="zlib"
1191
tiff_encoder_suggest="zlib"
1192
truehd_decoder_select="mlp_decoder"
1193
tscc_decoder_select="zlib"
1194
vc1_decoder_select="h263_decoder"
1195
vc1_vaapi_hwaccel_deps="va_va_h"
1196
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1197
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1198
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1199
vorbis_decoder_select="fft mdct"
1200
vorbis_encoder_select="fft mdct"
1201
vp6a_decoder_select="vp6_decoder"
1202
vp6f_decoder_select="vp6_decoder"
1203
wmav1_decoder_select="fft mdct"
1204
wmav1_encoder_select="fft mdct"
1205
wmav2_decoder_select="fft mdct"
1206
wmav2_encoder_select="fft mdct"
1207
wmv1_decoder_select="h263_decoder"
1208
wmv1_encoder_select="h263_encoder"
1209
wmv2_decoder_select="h263_decoder"
1210
wmv2_encoder_select="h263_encoder"
1211
wmv3_decoder_select="vc1_decoder"
1212
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1213
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1214
zlib_decoder_select="zlib"
1215
zlib_encoder_select="zlib"
1216
zmbv_decoder_select="zlib"
1217
zmbv_encoder_select="zlib"
1218

    
1219
# parsers
1220
h264_parser_select="golomb"
1221

    
1222
# bitstream_filters
1223
aac_adtstoasc_bsf_select="aac_parser"
1224

    
1225
# external libraries
1226
libdirac_decoder_deps="libdirac !libschroedinger"
1227
libdirac_encoder_deps="libdirac"
1228
libfaac_encoder_deps="libfaac"
1229
libfaad_decoder_deps="libfaad"
1230
libfaadbin_decoder_extralibs='$ldl'
1231
libgsm_decoder_deps="libgsm"
1232
libgsm_encoder_deps="libgsm"
1233
libgsm_ms_decoder_deps="libgsm"
1234
libgsm_ms_encoder_deps="libgsm"
1235
libmp3lame_encoder_deps="libmp3lame"
1236
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1237
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1238
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1239
libopenjpeg_decoder_deps="libopenjpeg"
1240
libschroedinger_decoder_deps="libschroedinger"
1241
libschroedinger_encoder_deps="libschroedinger"
1242
libspeex_decoder_deps="libspeex"
1243
libtheora_encoder_deps="libtheora"
1244
libvorbis_encoder_deps="libvorbis"
1245
libx264_encoder_deps="libx264"
1246
libxvid_encoder_deps="libxvid"
1247

    
1248
# demuxers / muxers
1249
ac3_demuxer_deps="ac3_parser"
1250
asf_stream_muxer_select="asf_muxer"
1251
avisynth_demuxer_deps="avisynth"
1252
dirac_demuxer_deps="dirac_parser"
1253
eac3_demuxer_select="ac3_parser"
1254
ipod_muxer_select="mov_muxer"
1255
libnut_demuxer_deps="libnut"
1256
libnut_muxer_deps="libnut"
1257
matroska_audio_muxer_select="matroska_muxer"
1258
matroska_demuxer_suggest="zlib bzlib"
1259
mov_demuxer_suggest="zlib"
1260
mp3_demuxer_deps="mpegaudio_parser"
1261
mp4_muxer_select="mov_muxer"
1262
mpegtsraw_demuxer_select="mpegts_demuxer"
1263
mxf_d10_muxer_select="mxf_muxer"
1264
ogg_demuxer_select="golomb"
1265
psp_muxer_select="mov_muxer"
1266
rtsp_demuxer_deps="sdp_demuxer"
1267
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1268
spdif_muxer_select="aac_parser"
1269
tg2_muxer_select="mov_muxer"
1270
tgp_muxer_select="mov_muxer"
1271
w64_demuxer_deps="wav_demuxer"
1272

    
1273
# indevs / outdevs
1274
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1275
alsa_indev_extralibs="-lasound"
1276
alsa_outdev_deps="alsa_asoundlib_h"
1277
alsa_outdev_extralibs="-lasound"
1278
audio_beos_indev_deps="audio_beos"
1279
audio_beos_indev_extralibs="-lmedia -lbe"
1280
audio_beos_outdev_deps="audio_beos"
1281
audio_beos_outdev_extralibs="-lmedia -lbe"
1282
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1283
dv1394_indev_deps="dv1394 dv_demuxer"
1284
jack_indev_deps="jack_jack_h"
1285
jack_indev_extralibs="-ljack"
1286
libdc1394_indev_deps="libdc1394"
1287
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1288
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1289
v4l_indev_deps="linux_videodev_h"
1290
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1291
vfwcap_indev_deps="capCreateCaptureWindow"
1292
vfwcap_indev_extralibs="-lvfw32"
1293
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1294
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1295

    
1296
# protocols
1297
gopher_protocol_deps="network"
1298
http_protocol_deps="network"
1299
rtmp_protocol_deps="tcp_protocol"
1300
rtp_protocol_deps="udp_protocol"
1301
tcp_protocol_deps="network"
1302
udp_protocol_deps="network"
1303

    
1304
# filters
1305
movie_filter_deps="avfilter_lavf"
1306

    
1307
# programs
1308
ffplay_deps="sdl"
1309
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1310
ffserver_extralibs='$ldl'
1311

    
1312
doc_deps="texi2html"
1313

    
1314
# default parameters
1315

    
1316
logfile="config.err"
1317

    
1318
# installation paths
1319
prefix_default="/usr/local"
1320
bindir_default='${prefix}/bin'
1321
datadir_default='${prefix}/share/ffmpeg'
1322
incdir_default='${prefix}/include'
1323
libdir_default='${prefix}/lib'
1324
mandir_default='${prefix}/share/man'
1325
shlibdir_default="$libdir_default"
1326

    
1327
# toolchain
1328
ar="ar"
1329
cc_default="gcc"
1330
cc_version=\"unknown\"
1331
host_cc_default="gcc"
1332
ln_s="ln -sf"
1333
nm_default="nm"
1334
objformat="elf"
1335
ranlib="ranlib"
1336
strip="strip"
1337
yasmexe="yasm"
1338

    
1339
# machine
1340
arch=$(uname -m)
1341
cpu="generic"
1342

    
1343
# OS
1344
target_os=$(tolower $(uname -s))
1345
host_os=$target_os
1346

    
1347
# configurable options
1348
enable debug
1349
enable doc
1350
enable fastdiv
1351
enable ffmpeg
1352
enable ffplay
1353
enable ffserver
1354
enable ipv6
1355
enable mpegaudio_hp
1356
enable network
1357
enable optimizations
1358
enable protocols
1359
enable static
1360
enable stripping
1361
enable swscale_alpha
1362

    
1363
# build settings
1364
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1365
FFSERVERLDFLAGS=-Wl,-E
1366
LIBPREF="lib"
1367
LIBSUF=".a"
1368
FULLNAME='$(NAME)$(BUILDSUF)'
1369
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1370
SLIBPREF="lib"
1371
SLIBSUF=".so"
1372
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1373
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1374
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1375
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1376

    
1377
CC_O='-o $@'
1378

    
1379
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1380
host_libs='-lm'
1381

    
1382
target_path='.'
1383

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

    
1389
# find source path
1390
source_path="$(dirname "$0")"
1391
enable source_path_used
1392
if test -f configure; then
1393
    source_path="$(pwd)"
1394
    disable source_path_used
1395
else
1396
    source_path="$(cd "$source_path"; pwd)"
1397
    echo "$source_path" | grep -q '[[:blank:]]' &&
1398
        die "Out of tree builds are impossible with whitespace in source path."
1399
    test -e "$source_path/config.h" &&
1400
        die "Out of tree builds are impossible with config.h in source dir."
1401
fi
1402

    
1403
for v in "$@"; do
1404
    r=${v#*=}
1405
    l=${v%"$r"}
1406
    r=$(sh_quote "$r")
1407
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1408
done
1409

    
1410
find_things(){
1411
    thing=$1
1412
    pattern=$2
1413
    file=$source_path/$3
1414
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1415
}
1416

    
1417
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1418
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1419
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1420
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1421
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1422
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1423
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1424
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1425
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1426
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1427
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1428

    
1429
enable $ARCH_EXT_LIST \
1430
       $DECODER_LIST \
1431
       $ENCODER_LIST \
1432
       $HWACCEL_LIST \
1433
       $PARSER_LIST \
1434
       $BSF_LIST \
1435
       $DEMUXER_LIST \
1436
       $MUXER_LIST \
1437
       $FILTER_LIST \
1438
       $PROTOCOL_LIST \
1439
       $INDEV_LIST \
1440
       $OUTDEV_LIST \
1441

    
1442
die_unknown(){
1443
    echo "Unknown option \"$1\"."
1444
    echo "See $0 --help for available options."
1445
    exit 1
1446
}
1447

    
1448
show_list() {
1449
    suffix=_$1
1450
    shift
1451
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1452
    exit 0
1453
}
1454

    
1455
for opt do
1456
    optval="${opt#*=}"
1457
    case "$opt" in
1458
    --extra-ldflags=*) add_ldflags $optval
1459
    ;;
1460
    --extra-libs=*) add_extralibs $optval
1461
    ;;
1462
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1463
    ;;
1464
    --enable-debug=*) debuglevel="$optval"
1465
    ;;
1466
    --enable-*=*|--disable-*=*)
1467
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1468
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1469
    eval list=\$$(toupper $thing)_LIST
1470
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1471
    $action $(filter "$name" $list)
1472
    ;;
1473
    --enable-?*|--disable-?*)
1474
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1475
    if is_in $option $COMPONENT_LIST; then
1476
        test $action = disable && action=unset
1477
        eval $action \$$(toupper ${option%s})_LIST
1478
    elif is_in $option $CMDLINE_SELECT; then
1479
        $action $option
1480
    else
1481
        die_unknown $opt
1482
    fi
1483
    ;;
1484
    --list-*)
1485
        NAME="${opt#--list-}"
1486
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1487
        NAME=${NAME%s}
1488
        eval show_list $NAME \$$(toupper $NAME)_LIST
1489
    ;;
1490
    --help|-h) show_help
1491
    ;;
1492
    *)
1493
    optname="${opt%%=*}"
1494
    optname="${optname#--}"
1495
    optname=$(echo "$optname" | sed 's/-/_/g')
1496
    if is_in $optname $CMDLINE_SET; then
1497
        eval $optname='$optval'
1498
    elif is_in $optname $CMDLINE_APPEND; then
1499
        append $optname "$optval"
1500
    else
1501
         die_unknown $opt
1502
    fi
1503
    ;;
1504
    esac
1505
done
1506

    
1507
disabled logging && logfile=/dev/null
1508

    
1509
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1510
set >> $logfile
1511

    
1512
test -n "$cross_prefix" && enable cross_compile
1513

    
1514
ar="${cross_prefix}${ar}"
1515
cc_default="${cross_prefix}${cc_default}"
1516
nm_default="${cross_prefix}${nm_default}"
1517
ranlib="${cross_prefix}${ranlib}"
1518
strip="${cross_prefix}${strip}"
1519

    
1520
sysinclude_default="${sysroot}/usr/include"
1521

    
1522
set_default cc nm sysinclude
1523
enabled cross_compile || host_cc_default=$cc
1524
set_default host_cc
1525

    
1526
exesuf() {
1527
    case $1 in
1528
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1529
    esac
1530
}
1531

    
1532
EXESUF=$(exesuf $target_os)
1533
HOSTEXESUF=$(exesuf $host_os)
1534

    
1535
# set temporary file name
1536
: ${TMPDIR:=$TEMPDIR}
1537
: ${TMPDIR:=$TMP}
1538
: ${TMPDIR:=/tmp}
1539

    
1540
if ! check_cmd type mktemp; then
1541
    # simple replacement for missing mktemp
1542
    # NOT SAFE FOR GENERAL USE
1543
    mktemp(){
1544
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1545
    }
1546
fi
1547

    
1548
tmpfile(){
1549
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1550
        (set -C; exec > $tmp) 2>/dev/null ||
1551
        die "Unable to create temporary file in $TMPDIR."
1552
    append TMPFILES $tmp
1553
    eval $1=$tmp
1554
}
1555

    
1556
trap 'rm -f -- $TMPFILES' EXIT
1557
trap exit HUP INT TERM
1558

    
1559
tmpfile TMPC  .c
1560
tmpfile TMPE  $EXESUF
1561
tmpfile TMPH  .h
1562
tmpfile TMPO  .o
1563
tmpfile TMPS  .S
1564
tmpfile TMPSH .sh
1565

    
1566
unset -f mktemp
1567

    
1568
# make sure we can execute files in $TMPDIR
1569
cat > $TMPSH 2>> $logfile <<EOF
1570
#! /bin/sh
1571
EOF
1572
chmod +x $TMPSH >> $logfile 2>&1
1573
if ! $TMPSH >> $logfile 2>&1; then
1574
    cat <<EOF
1575
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1576
variable to another directory and make sure that it is not mounted noexec.
1577
EOF
1578
    die "Sanity test failed."
1579
fi
1580

    
1581
filter_cflags=echo
1582
filter_cppflags=echo
1583
filter_asflags=echo
1584

    
1585
if   $cc -v 2>&1 | grep -qi ^gcc; then
1586
    cc_type=gcc
1587
    cc_version=__VERSION__
1588
    if ! $cc -dumpversion | grep -q '^2\.'; then
1589
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1590
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1591
    fi
1592
elif $cc --version 2>/dev/null | grep -q Intel; then
1593
    cc_type=icc
1594
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1595
    CC_DEPFLAGS='-MMD'
1596
    AS_DEPFLAGS='-MMD'
1597
elif $cc -v 2>&1 | grep -q xlc; then
1598
    cc_type=xlc
1599
    cc_version="AV_STRINGIFY(__IBMC__)"
1600
elif $cc -V 2>/dev/null | grep -q Compaq; then
1601
    cc_type=ccc
1602
    cc_version="AV_STRINGIFY(__DECC_VER)"
1603
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1604
    debuglevel=3
1605
    add_ldflags -Wl,-z,now # calls to libots crash without this
1606
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1607
    test -d "$sysroot" || die "No valid sysroot specified."
1608
    cc_type=armcc
1609
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1610
    armcc_conf="$PWD/armcc.conf"
1611
    $cc --arm_linux_configure                 \
1612
        --arm_linux_config_file="$armcc_conf" \
1613
        --configure_sysroot="$sysroot"        \
1614
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1615
        die "Error creating armcc configuration file."
1616
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1617
    as_default="${cross_prefix}gcc"
1618
    CC_DEPFLAGS='-MMD'
1619
    AS_DEPFLAGS='-MMD'
1620
elif $cc -version 2>/dev/null | grep -q TMS470; then
1621
    cc_type=tms470
1622
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1623
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1624
    CC_O='-fr=$(@D)'
1625
    as_default="${cross_prefix}gcc"
1626
    ld_default="${cross_prefix}gcc"
1627
    TMPO=$(basename $TMPC .c).o
1628
    append TMPFILES $TMPO
1629
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1630
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1631
    AS_DEPFLAGS='-MMD'
1632
    filter_cflags=tms470_flags
1633
    tms470_flags(){
1634
        for flag; do
1635
            case $flag in
1636
                -march=*|-mcpu=*)
1637
                    case "${flag#*=}" in
1638
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1639
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1640
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1641
                        armv6*|arm11*)          echo -mv=6   ;;
1642
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1643
                                                echo -mv=5e  ;;
1644
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1645
                    esac
1646
                    ;;
1647
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1648
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1649
                -msoft-float)   echo --float_support=vfplib       ;;
1650
                -Os)            echo -O3 -mf=2                    ;;
1651
                -O[0-3])        echo $flag -mf=5                  ;;
1652
                -g)             echo -g -mn                       ;;
1653
            esac
1654
        done
1655
    }
1656
elif $cc -v 2>&1 | grep -q clang; then
1657
    cc_type=clang
1658
    cc_version=__VERSION__
1659
    CC_DEPFLAGS='-MMD'
1660
    AS_DEPFLAGS='-MMD'
1661
elif $cc -V 2>&1 | grep -q Sun; then
1662
    cc_type=suncc
1663
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1664
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1665
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1666
    filter_cflags=suncc_flags
1667
    suncc_flags(){
1668
        for flag; do
1669
            case $flag in
1670
                -march=*|-mcpu=*)
1671
                    case "${flag#*=}" in
1672
                        native)                   echo -xtarget=native       ;;
1673
                        v9)                       echo -xarch=sparc          ;;
1674
                        ultrasparc)               echo -xarch=sparcvis       ;;
1675
                        ultrasparc3|niagara*)     echo -xarch=sparcvis2      ;;
1676
                        i586|pentium)             echo -xchip=pentium        ;;
1677
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1678
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1679
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1680
                        pentium4*)          echo -xtarget=pentium4           ;;
1681
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1682
                        *-sse3)             echo -xarch=sse3                 ;;
1683
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1684
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1685
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1686
                        k8|opteron|athlon64|athlon-fx)
1687
                                                  echo -xarch=sse2a          ;;
1688
                        athlon*)                  echo -xarch=pentium_proa   ;;
1689
                    esac
1690
                    ;;
1691
                -std=c99)             echo -xc99              ;;
1692
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1693
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1694
                -Os)                  echo -O5 -xspace        ;;
1695
                -W*,*)                echo $flag              ;;
1696
                -f*-*|-W*)                                    ;;
1697
                *)                    echo $flag              ;;
1698
            esac
1699
        done
1700
    }
1701
fi
1702

    
1703
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1704

    
1705
: ${as_default:=$cc}
1706
: ${dep_cc_default:=$cc}
1707
: ${ld_default:=$cc}
1708
set_default as dep_cc ld
1709

    
1710
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1711
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1712

    
1713
add_cflags $extra_cflags
1714
add_asflags $extra_cflags
1715

    
1716
if test -n "$sysroot"; then
1717
    case "$cc_type" in
1718
        gcc)
1719
            add_cppflags --sysroot="$sysroot"
1720
            add_ldflags --sysroot="$sysroot"
1721
        ;;
1722
        tms470)
1723
            add_cppflags -I"$sysinclude"
1724
            add_ldflags  --sysroot="$sysroot"
1725
        ;;
1726
        clang)
1727
            add_cppflags -isysroot="$sysroot"
1728
            add_ldflags -isysroot="$sysroot"
1729
        ;;
1730
    esac
1731
fi
1732

    
1733
if test "$cpu" = host; then
1734
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1735

    
1736
    case "$cc_type" in
1737
        gcc)
1738
            check_native(){
1739
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1740
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1741
            }
1742
            cpu=$(check_native -march || check_native -mcpu)
1743
        ;;
1744
    esac
1745

    
1746
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1747
fi
1748

    
1749
# Add processor-specific flags
1750
case $cpu in
1751
    601|ppc601|PowerPC601)
1752
        cpuflags="-mcpu=601"
1753
    ;;
1754
    603*|ppc603*|PowerPC603*)
1755
        cpuflags="-mcpu=603"
1756
    ;;
1757
    604*|ppc604*|PowerPC604*)
1758
        cpuflags="-mcpu=604"
1759
    ;;
1760
    G3|g3|75*|ppc75*|PowerPC75*)
1761
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1762
    ;;
1763
    G4|g4|745*|ppc745*|PowerPC745*)
1764
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1765
    ;;
1766
    74*|ppc74*|PowerPC74*)
1767
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1768
    ;;
1769
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1770
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1771
    ;;
1772
    Cell|CELL|cell)
1773
        cpuflags="-mcpu=cell"
1774
        enable ldbrx
1775
    ;;
1776
    # targets that do NOT support conditional mov (cmov)
1777
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1778
        cpuflags="-march=$cpu"
1779
        disable cmov
1780
    ;;
1781
    # targets that do support conditional mov (cmov)
1782
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1783
        cpuflags="-march=$cpu"
1784
        enable cmov
1785
        enable fast_cmov
1786
    ;;
1787
    # targets that do support conditional mov but on which it's slow
1788
    pentium4|pentium4m|prescott|nocona)
1789
        cpuflags="-march=$cpu"
1790
        enable cmov
1791
        disable fast_cmov
1792
    ;;
1793
    sparc64)
1794
        cpuflags="-mcpu=v9"
1795
    ;;
1796
    arm11*|cortex*)
1797
        cpuflags="-mcpu=$cpu"
1798
        enable fast_unaligned
1799
    ;;
1800
    armv[67]*)
1801
        cpuflags="-march=$cpu"
1802
        enable fast_unaligned
1803
    ;;
1804
    armv*)
1805
        cpuflags="-march=$cpu"
1806
    ;;
1807
    arm*)
1808
        cpuflags="-mcpu=$cpu"
1809
    ;;
1810
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1811
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1812
    ;;
1813
    bf*)
1814
        cpuflags="-mcpu=$cpu"
1815
    ;;
1816
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1817
        cpuflags="-march=$cpu"
1818
    ;;
1819
    ap7[02]0[0-2])
1820
        subarch="avr32_ap"
1821
        cpuflags="-mpart=$cpu"
1822
    ;;
1823
    ap)
1824
        subarch="avr32_ap"
1825
        cpuflags="-march=$cpu"
1826
    ;;
1827
    uc3[ab]*)
1828
        subarch="avr32_uc"
1829
        cpuflags="-mcpu=$cpu"
1830
    ;;
1831
    uc)
1832
        subarch="avr32_uc"
1833
        cpuflags="-march=$cpu"
1834
    ;;
1835
    generic)
1836
    ;;
1837
    *)
1838
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1839
    ;;
1840
esac
1841

    
1842
add_cflags $cpuflags
1843
add_asflags $cpuflags
1844

    
1845
# compiler sanity check
1846
check_exec <<EOF
1847
int main(void){ return 0; }
1848
EOF
1849
if test "$?" != 0; then
1850
    echo "$cc is unable to create an executable file."
1851
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1852
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1853
        echo "Only do this if you know what cross compiling means."
1854
    fi
1855
    die "C compiler test failed."
1856
fi
1857

    
1858
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1859
check_cflags -std=c99
1860
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1861
#include <stdlib.h>
1862
EOF
1863
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1864
#include <stdlib.h>
1865
EOF
1866

    
1867
check_host_cflags -std=c99
1868

    
1869
case "$arch" in
1870
    alpha)
1871
        arch="alpha"
1872
        enable fast_64bit
1873
        check_cflags -mieee
1874
        spic=$shared
1875
    ;;
1876
    arm|armv[4567]*l)
1877
        arch="arm"
1878
    ;;
1879
    avr32)
1880
    ;;
1881
    bfin)
1882
        arch="bfin"
1883
    ;;
1884
    ia64)
1885
        arch="ia64"
1886
        enable fast_64bit
1887
        spic=$shared
1888
        # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1889
        enabled shared && enable_weak hardcoded_tables
1890
    ;;
1891
    m68k)
1892
        arch="m68k"
1893
    ;;
1894
    mips|mipsel|IP*)
1895
        arch="mips"
1896
        spic=$shared
1897
    ;;
1898
    mips64)
1899
        arch="mips"
1900
        subarch="mips64"
1901
        enable fast_64bit
1902
        spic=$shared
1903
    ;;
1904
    parisc|hppa)
1905
        arch="parisc"
1906
        spic=$shared
1907
    ;;
1908
    parisc64|hppa64)
1909
        arch="parisc"
1910
        enable fast_64bit
1911
        spic=$shared
1912
    ;;
1913
    "Power Macintosh"|ppc|powerpc)
1914
        arch="ppc"
1915
        enable fast_unaligned
1916
    ;;
1917
    ppc64)
1918
        arch="ppc"
1919
        subarch="ppc64"
1920
        enable fast_64bit
1921
        enable fast_unaligned
1922
    ;;
1923
    s390|s390x)
1924
        arch="s390"
1925
    ;;
1926
    sh4|sh)
1927
        arch="sh4"
1928
    ;;
1929
    sparc)
1930
        arch="sparc"
1931
        spic=$shared
1932
    ;;
1933
    sun4u|sparc64)
1934
        arch="sparc"
1935
        subarch="sparc64"
1936
        enable fast_64bit
1937
        spic=$shared
1938
    ;;
1939
    i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1940
        arch="x86"
1941
        subarch="x86_32"
1942
        enable fast_unaligned
1943
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1944
        int test[(int)sizeof(char*) - 7];
1945
EOF
1946
        if test "$subarch" = "x86_64"; then
1947
            enable cmov
1948
            enable fast_cmov
1949
        fi
1950
    ;;
1951
    *)
1952
        arch="unknown"
1953
    ;;
1954
esac
1955

    
1956
enable $arch $subarch
1957
enabled spic && enable pic
1958
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1959

    
1960
# OS specific
1961
case $target_os in
1962
    beos|haiku|zeta)
1963
        prefix_default="$HOME/config"
1964
        # 3 gcc releases known for BeOS, each with ugly bugs
1965
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1966
        case "$gcc_version" in
1967
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1968
            disable mmx
1969
            ;;
1970
          *20010315*) echo "BeBits gcc"
1971
            add_cflags -fno-expensive-optimizations
1972
            ;;
1973
        esac
1974
        SHFLAGS=-nostart
1975
        # enable BeOS things
1976
        enable audio_beos
1977
        # no need for libm, but the inet stuff
1978
        # Check for BONE
1979
        # XXX: actually should check for NOT net_server
1980
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1981
            network_extralibs="-lbind -lsocket"
1982
        else
1983
            enable beos_netserver
1984
            network_extralibs="-lnet"
1985
        fi ;;
1986
    sunos)
1987
        FFSERVERLDFLAGS=""
1988
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1989
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1990
        network_extralibs="-lsocket -lnsl"
1991
        add_cppflags -D__EXTENSIONS__
1992
        ;;
1993
    netbsd)
1994
        oss_indev_extralibs="-lossaudio"
1995
        oss_outdev_extralibs="-lossaudio"
1996
        ;;
1997
    openbsd)
1998
        enable malloc_aligned
1999
        # On OpenBSD 4.5. the compiler does not use PIC unless
2000
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2001
        # however the generated executable will not do anything
2002
        # (simply quits with exit-code 1, no crash, no output).
2003
        # Thus explicitly enable PIC here.
2004
        enable pic
2005
        SHFLAGS='-shared'
2006
        oss_indev_extralibs="-lossaudio"
2007
        oss_outdev_extralibs="-lossaudio"
2008
        ;;
2009
    freebsd|dragonfly)
2010
        enable malloc_aligned
2011
        ;;
2012
    bsd/os)
2013
        osextralibs="-lpoll -lgnugetopt"
2014
        strip="strip -d"
2015
        ;;
2016
    darwin)
2017
        enable malloc_aligned
2018
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2019
        strip="strip -x"
2020
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2021
        SLIBSUF=".dylib"
2022
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2023
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2024
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2025
        objformat="macho"
2026
        enabled x86_64 && objformat="macho64"
2027
        enabled_any pic shared ||
2028
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2029
        ;;
2030
    mingw32*)
2031
        # Only WinXP or greater are supported
2032
        add_cflags -D_WIN32_WINNT=0x0501
2033
        if test $target_os = "mingw32ce"; then
2034
            disable network
2035
        else
2036
            target_os=mingw32
2037
        fi
2038
        LIBTARGET=i386
2039
        if enabled x86_64; then
2040
            enable malloc_aligned
2041
            LIBTARGET=x64
2042
        elif enabled arm; then
2043
            LIBTARGET=arm
2044
        fi
2045
        shlibdir_default="$bindir_default"
2046
        disable ffserver
2047
        SLIBPREF=""
2048
        SLIBSUF=".dll"
2049
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2050
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2051
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2052
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2053
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2054
            install -d "$(LIBDIR)"; \
2055
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2056
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2057
        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'
2058
        objformat="win32"
2059
        enable dos_paths
2060
        check_cflags -fno-common
2061
        if ! enabled x86_64; then
2062
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2063
                die "ERROR: MinGW runtime version must be >= 3.15."
2064
            enabled_any avisynth vfwcap_indev &&
2065
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2066
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2067
            fi
2068
        ;;
2069
    cygwin*)
2070
        target_os=cygwin
2071
        shlibdir_default="$bindir_default"
2072
        SLIBPREF="cyg"
2073
        SLIBSUF=".dll"
2074
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2075
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2076
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2077
        objformat="win32"
2078
        enable dos_paths
2079
        check_cflags -fno-common
2080
        ;;
2081
    *-dos|freedos|opendos)
2082
        disable ffplay ffserver
2083
        disable $INDEV_LIST $OUTDEV_LIST
2084
        network_extralibs="-lsocket"
2085
        objformat="coff"
2086
        enable dos_paths
2087
        ;;
2088
    linux)
2089
        enable dv1394
2090
        ;;
2091
    irix*)
2092
        target_os=irix
2093
        ranlib="echo ignoring ranlib"
2094
        ;;
2095
    os/2*)
2096
        strip="lxlite"
2097
        ln_s="cp -f"
2098
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2099
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2100
        FFSERVERLDFLAGS=""
2101
        LIBSUF="_s.a"
2102
        SLIBPREF=""
2103
        SLIBSUF=".dll"
2104
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2105
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2106
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2107
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2108
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2109
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2110
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2111
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2112
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2113
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2114
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2115
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2116
        enable dos_paths
2117
        ;;
2118
    gnu/kfreebsd)
2119
        ;;
2120
    gnu)
2121
        ;;
2122

    
2123
    *)
2124
        die "Unknown OS '$target_os'."
2125
        ;;
2126
esac
2127

    
2128
set_default $PATHS_LIST
2129

    
2130
add_extralibs $osextralibs
2131

    
2132
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2133
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2134

    
2135
# we need to build at least one lib type
2136
if ! enabled_any static shared; then
2137
    cat <<EOF
2138
At least one library type must be built.
2139
Specify --enable-static to build the static libraries or --enable-shared to
2140
build the shared libraries as well. To only build the shared libraries specify
2141
--disable-static in addition to --enable-shared.
2142
EOF
2143
    exit 1;
2144
fi
2145

    
2146
disabled static && LIBNAME=""
2147

    
2148
if enabled_any libfaad libfaadbin ; then
2149
    if check_header faad.h; then
2150
        check_cc <<EOF
2151
#include <faad.h>
2152
#ifndef FAAD2_VERSION
2153
ok faad1
2154
#endif
2155
int main(void) { return 0; }
2156
EOF
2157
        test $? = 0 && enable libfaad2
2158
    else
2159
        die "FAAD test failed."
2160
    fi
2161
fi
2162

    
2163

    
2164
die_license_disabled() {
2165
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2166
}
2167

    
2168
die_license_disabled gpl libfaad2
2169
die_license_disabled gpl libx264
2170
die_license_disabled gpl libxvid
2171
die_license_disabled gpl postproc
2172
die_license_disabled gpl x11grab
2173

    
2174
die_license_disabled nonfree libfaac
2175

    
2176
die_license_disabled version3 libopencore_amrnb
2177
die_license_disabled version3 libopencore_amrwb
2178

    
2179
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2180

    
2181
check_deps $ARCH_EXT_LIST
2182

    
2183
disabled optimizations || check_cflags -fomit-frame-pointer
2184

    
2185
enable_pic() {
2186
    enable pic
2187
    add_cppflags -DPIC
2188
    add_cflags   -fPIC
2189
    add_asflags  -fPIC
2190
}
2191

    
2192
enabled pic && enable_pic
2193

    
2194
check_cc <<EOF || die "Symbol mangling check failed."
2195
int ff_extern;
2196
EOF
2197
sym=$($nm -P -g $TMPO | grep ff_extern)
2198
extern_prefix=${sym%%ff_extern*}
2199

    
2200
check_cc <<EOF && enable inline_asm
2201
void foo(void) { __asm__ volatile ("" ::); }
2202
EOF
2203

    
2204
_restrict=
2205
for restrict_keyword in restrict __restrict__ __restrict; do
2206
    check_cc <<EOF && _restrict=$restrict_keyword && break
2207
void foo(char * $restrict_keyword p);
2208
EOF
2209
done
2210

    
2211
check_cc <<EOF && enable attribute_packed
2212
struct { int x; } __attribute__((packed)) x;
2213
EOF
2214

    
2215
check_cc <<EOF || die "endian test failed"
2216
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2217
EOF
2218
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2219

    
2220
if enabled arm; then
2221

    
2222
    check_cflags -marm
2223

    
2224
    check_ld <<EOF && enable vfp_args
2225
__asm__ (".eabi_attribute 28, 1");
2226
int main(void) { return 0; }
2227
EOF
2228

    
2229
    # We have to check if pld is a nop and disable it.
2230
    check_asm pld '"pld [r0]"'
2231

    
2232
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2233
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2234
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2235
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2236
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2237
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2238

    
2239
    enabled_all armv6t2 shared !pic && enable_pic
2240

    
2241
elif enabled mips; then
2242

    
2243
    check_asm loongson '"dmult.g $1, $2, $3"'
2244
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2245

    
2246
elif enabled ppc; then
2247

    
2248
    check_asm dcbzl     '"dcbzl 0, 1"'
2249
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2250
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2251

    
2252
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2253
    if enabled altivec; then
2254
        check_cflags -maltivec -mabi=altivec &&
2255
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2256
        check_cflags -faltivec
2257

    
2258
        # check if our compiler supports Motorola AltiVec C API
2259
        check_cc <<EOF || disable altivec
2260
$inc_altivec_h
2261
int main(void) {
2262
    vector signed int v1, v2, v3;
2263
    v1 = vec_add(v2,v3);
2264
    return 0;
2265
}
2266
EOF
2267

    
2268
        # check if our compiler supports braces for vector declarations
2269
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2270
$inc_altivec_h
2271
int main (void) { (vector int) {1}; return 0; }
2272
EOF
2273
    fi
2274

    
2275
elif enabled sparc; then
2276

    
2277
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2278
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2279

    
2280
elif enabled x86; then
2281

    
2282
    # check whether EBP is available on x86
2283
    # As 'i' is stored on the stack, this program will crash
2284
    # if the base pointer is used to access it because the
2285
    # base pointer is cleared in the inline assembly code.
2286
    check_exec_crash <<EOF && enable ebp_available
2287
    volatile int i=0;
2288
    __asm__ volatile (
2289
        "xorl %%ebp, %%ebp"
2290
    ::: "%ebp");
2291
    return i;
2292
EOF
2293

    
2294
    # check whether EBX is available on x86
2295
    check_asm ebx_available '""::"b"(0)' &&
2296
        check_asm ebx_available '"":::"%ebx"'
2297

    
2298
    # check whether more than 10 operands are supported
2299
    check_cc <<EOF && enable ten_operands
2300
int main(void) {
2301
    int x=0;
2302
    __asm__ volatile(
2303
        ""
2304
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2305
    );
2306
    return 0;
2307
}
2308
EOF
2309

    
2310
    # check whether binutils is new enough to compile SSSE3/MMX2
2311
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2312
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2313

    
2314
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2315

    
2316
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2317
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2318
    enabled     pic           && append YASMFLAGS "-DPIC"
2319
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2320
    case "$objformat" in
2321
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2322
    esac
2323
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2324

    
2325
    case "$cpu" in
2326
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2327
            disable fast_clz
2328
        ;;
2329
    esac
2330

    
2331
fi
2332

    
2333
if check_func dlopen; then
2334
    ldl=
2335
elif check_func dlopen -ldl; then
2336
    ldl=-ldl
2337
fi
2338

    
2339
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2340
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2341

    
2342
check_func  fork
2343
check_func  getaddrinfo $network_extralibs
2344
check_func  gethrtime
2345
check_func  getrusage
2346
check_func  inet_aton $network_extralibs
2347
check_func  isatty
2348
check_func  memalign
2349
check_func  mkstemp
2350
check_func  posix_memalign
2351
check_func_headers io.h setmode
2352
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2353
check_func_headers windows.h GetProcessTimes
2354
check_func_headers windows.h VirtualAlloc
2355

    
2356
check_header conio.h
2357
check_header dlfcn.h
2358
check_header malloc.h
2359
check_header poll.h
2360
check_header sys/mman.h
2361
check_header sys/resource.h
2362
check_header sys/select.h
2363
check_header termios.h
2364
check_header vdpau/vdpau.h
2365
check_header vdpau/vdpau_x11.h
2366
check_header X11/extensions/XvMClib.h
2367

    
2368
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2369
     enabled_any $need_memalign ; then
2370
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2371
fi
2372

    
2373
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2374
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2375

    
2376
# check for some common methods of building with pthread support
2377
# do this before the optional library checks as some of them require pthreads
2378
if enabled pthreads; then
2379
    if check_func pthread_create; then
2380
        :
2381
    elif check_func pthread_create -pthread; then
2382
        add_cflags -pthread
2383
        add_extralibs -pthread
2384
    elif check_func pthread_create -pthreads; then
2385
        add_cflags -pthreads
2386
        add_extralibs -pthreads
2387
    elif check_func pthread_create -lpthreadGC2; then
2388
        add_extralibs -lpthreadGC2
2389
    elif ! check_lib pthread.h pthread_create -lpthread; then
2390
        die "ERROR: can't find pthreads library"
2391
    fi
2392
fi
2393

    
2394
for thread in $THREADS_LIST; do
2395
    if enabled $thread; then
2396
        test -n "$thread_type" &&
2397
            die "ERROR: Only one thread type must be selected." ||
2398
            thread_type="$thread"
2399
    fi
2400
done
2401

    
2402
check_lib math.h sin -lm
2403
check_lib va/va.h vaInitialize -lva
2404

    
2405
check_func exp2
2406
check_func exp2f
2407
check_func llrint
2408
check_func log2
2409
check_func log2f
2410
check_func lrint
2411
check_func lrintf
2412
check_func round
2413
check_func roundf
2414
check_func truncf
2415

    
2416
# these are off by default, so fail if requested and not available
2417
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2418
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2419
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2420
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2421
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2422
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2423
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2424
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2425
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2426
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2427
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2428
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2429
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2430
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2431
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2432
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2433
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2434
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2435
                      { check_cpp_condition x264.h "X264_BUILD >= 79" ||
2436
                        die "ERROR: libx264 version must be >= 0.79."; }
2437
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2438
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2439

    
2440
# libdc1394 check
2441
if enabled libdc1394; then
2442
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2443
        enable libdc1394_2; } ||
2444
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2445
        enable libdc1394_1; } ||
2446
    die "ERROR: No version of libdc1394 found "
2447
fi
2448

    
2449
disable sdl_too_old
2450
disable sdl
2451
SDL_CONFIG="${cross_prefix}sdl-config"
2452
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2453
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2454
    sdl_libs=$("${SDL_CONFIG}" --libs)
2455
    temp_cflags $sdl_cflags
2456
    temp_extralibs $sdl_libs
2457
    if check_lib2 SDL.h SDL_Init; then
2458
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2459
        if test "$_sdlversion" -lt 121 ; then
2460
            enable sdl_too_old
2461
        else
2462
            enable sdl
2463
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2464
#include <SDL.h>
2465
int main(int argc, char **argv){
2466
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2467
    int w = vi->current_w;
2468
    return 0;
2469
}
2470
EOF
2471
        fi
2472
    fi
2473
    restore_flags
2474
fi
2475

    
2476
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2477

    
2478
if enabled network; then
2479
    check_type "sys/types.h sys/socket.h" socklen_t
2480
    check_type netdb.h "struct addrinfo"
2481
    check_type sys/socket.h "struct sockaddr_storage"
2482
    # Prefer arpa/inet.h over winsock2
2483
    if check_header arpa/inet.h ; then
2484
        check_func closesocket
2485
    elif check_header winsock2.h ; then
2486
        check_func_headers winsock2.h closesocket -lws2 && \
2487
            network_extralibs="-lws2" || \
2488
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2489
            network_extralibs="-lws2_32"; }
2490
        check_type ws2tcpip.h socklen_t
2491
        check_type ws2tcpip.h "struct addrinfo"
2492
        check_type ws2tcpip.h "struct sockaddr_storage"
2493
    else
2494
        disable network
2495
    fi
2496
fi
2497

    
2498
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2499
#include <sys/types.h>
2500
#include <sys/socket.h>
2501
#include <netinet/in.h>
2502
#include <netdb.h>
2503
int main(void) {
2504
    struct sockaddr_storage saddr;
2505
    struct ipv6_mreq mreq6;
2506
    getaddrinfo(0,0,0,0);
2507
    getnameinfo(0,0,0,0,0,0,0);
2508
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2509
}
2510
EOF
2511

    
2512
check_header linux/videodev.h
2513
check_header linux/videodev2.h
2514
check_header sys/videoio.h
2515

    
2516
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2517

    
2518
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2519
{ check_header dev/bktr/ioctl_meteor.h &&
2520
  check_header dev/bktr/ioctl_bt848.h; } ||
2521
{ check_header machine/ioctl_meteor.h &&
2522
  check_header machine/ioctl_bt848.h; } ||
2523
{ check_header dev/video/meteor/ioctl_meteor.h &&
2524
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2525
check_header dev/ic/bt8xx.h
2526

    
2527
check_header sys/soundcard.h
2528
check_header soundcard.h
2529

    
2530
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2531

    
2532
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2533

    
2534
enabled x11grab                         &&
2535
check_header X11/Xlib.h                 &&
2536
check_header X11/extensions/XShm.h      &&
2537
check_header X11/extensions/Xfixes.h    &&
2538
check_func XOpenDisplay -lX11           &&
2539
check_func XShmCreateImage -lX11 -lXext &&
2540
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2541

    
2542
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2543
check_cpp_condition \
2544
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2545
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2546
      disable vdpau; }
2547
fi
2548

    
2549
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2550

    
2551
# add some useful compiler flags if supported
2552
check_cflags -Wdeclaration-after-statement
2553
check_cflags -Wall
2554
check_cflags -Wno-switch
2555
check_cflags -Wdisabled-optimization
2556
check_cflags -Wpointer-arith
2557
check_cflags -Wredundant-decls
2558
check_cflags -Wno-pointer-sign
2559
check_cflags -Wcast-qual
2560
check_cflags -Wwrite-strings
2561
check_cflags -Wtype-limits
2562
check_cflags -Wundef
2563
enabled extra_warnings && check_cflags -Winline
2564

    
2565
# add some linker flags
2566
check_ldflags -Wl,--warn-common
2567
check_ldflags -Wl,--as-needed
2568
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'
2569
check_ldflags -Wl,-Bsymbolic
2570

    
2571
if enabled small; then
2572
    check_cflags -Os            # not all compilers support -Os
2573
    optimizations="small"
2574
elif enabled optimizations; then
2575
    if enabled xlc; then
2576
        add_cflags  -O5
2577
        add_ldflags -O5
2578
    elif enabled suncc; then
2579
        add_cflags -O5
2580
    elif enabled ccc; then
2581
        add_cflags -fast
2582
    else
2583
        add_cflags -O3
2584
    fi
2585
fi
2586
check_cflags -fno-math-errno
2587
check_cflags -fno-signed-zeros
2588

    
2589
if enabled icc; then
2590
    # Just warnings, no remarks
2591
    check_cflags -w1
2592
    # -wd: Disable following warnings
2593
    # 144, 167, 556: -Wno-pointer-sign
2594
    # 10006: ignoring unknown option -fno-signed-zeros
2595
    # 10156: ignoring option '-W'; no argument required
2596
    check_cflags -wd144,167,556,10006,10156
2597
    # 11030: Warning unknown option --as-needed
2598
    # 10156: ignoring option '-export'; no argument required
2599
    check_ldflags -wd10156,11030
2600
    # Allow to compile with optimizations
2601
    check_ldflags -march=$cpu
2602
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2603
    enable ebp_available
2604
elif enabled ccc; then
2605
    # disable some annoying warnings
2606
    add_cflags -msg_disable cvtu32to64
2607
    add_cflags -msg_disable embedcomment
2608
    add_cflags -msg_disable needconstext
2609
    add_cflags -msg_disable nomainieee
2610
    add_cflags -msg_disable ptrmismatch1
2611
    add_cflags -msg_disable unreachcode
2612
elif enabled gcc; then
2613
    check_cflags -fno-tree-vectorize
2614
elif enabled clang; then
2615
    check_cflags -Qunused-arguments
2616
fi
2617

    
2618
if enabled gprof; then
2619
    add_cflags  -p
2620
    add_ldflags -p
2621
fi
2622

    
2623
# Find out if the .align argument is a power of two or not.
2624
check_asm asmalign_pot '".align 3"'
2625

    
2626
enabled_any $DECODER_LIST      && enable decoders
2627
enabled_any $ENCODER_LIST      && enable encoders
2628
enabled_any $HWACCEL_LIST      && enable hwaccels
2629
enabled_any $BSF_LIST          && enable bsfs
2630
enabled_any $DEMUXER_LIST      && enable demuxers
2631
enabled_any $MUXER_LIST        && enable muxers
2632
enabled_any $FILTER_LIST       && enable filters
2633
enabled_any $INDEV_LIST        && enable indevs
2634
enabled_any $OUTDEV_LIST       && enable outdevs
2635
enabled_any $PROTOCOL_LIST     && enable protocols
2636

    
2637
enabled_any $THREADS_LIST      && enable threads
2638

    
2639
check_deps $CONFIG_LIST       \
2640
           $CONFIG_EXTRA      \
2641
           $HAVE_LIST         \
2642
           $DECODER_LIST      \
2643
           $ENCODER_LIST      \
2644
           $HWACCEL_LIST      \
2645
           $PARSER_LIST       \
2646
           $BSF_LIST          \
2647
           $DEMUXER_LIST      \
2648
           $MUXER_LIST        \
2649
           $FILTER_LIST       \
2650
           $INDEV_LIST        \
2651
           $OUTDEV_LIST       \
2652
           $PROTOCOL_LIST     \
2653

    
2654
echo "install prefix            $prefix"
2655
echo "source path               $source_path"
2656
echo "C compiler                $cc"
2657
echo ".align is power-of-two    $asmalign_pot"
2658
echo "ARCH                      $arch ($cpu)"
2659
if test "$build_suffix" != ""; then
2660
    echo "build suffix              $build_suffix"
2661
fi
2662
if test "$extra_version" != ""; then
2663
    echo "version string suffix     $extra_version"
2664
fi
2665
echo "big-endian                ${bigendian-no}"
2666
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2667
if enabled x86; then
2668
    echo "yasm                      ${yasm-no}"
2669
    echo "MMX enabled               ${mmx-no}"
2670
    echo "MMX2 enabled              ${mmx2-no}"
2671
    echo "3DNow! enabled            ${amd3dnow-no}"
2672
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2673
    echo "SSE enabled               ${sse-no}"
2674
    echo "SSSE3 enabled             ${ssse3-no}"
2675
    echo "CMOV enabled              ${cmov-no}"
2676
    echo "CMOV is fast              ${fast_cmov-no}"
2677
    echo "EBX available             ${ebx_available-no}"
2678
    echo "EBP available             ${ebp_available-no}"
2679
    echo "10 operands supported     ${ten_operands-no}"
2680
fi
2681
if enabled arm; then
2682
    echo "ARMv5TE enabled           ${armv5te-no}"
2683
    echo "ARMv6 enabled             ${armv6-no}"
2684
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2685
    echo "ARM VFP enabled           ${armvfp-no}"
2686
    echo "IWMMXT enabled            ${iwmmxt-no}"
2687
    echo "NEON enabled              ${neon-no}"
2688
fi
2689
if enabled mips; then
2690
    echo "MMI enabled               ${mmi-no}"
2691
fi
2692
if enabled ppc; then
2693
    echo "AltiVec enabled           ${altivec-no}"
2694
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2695
    echo "dcbzl available           ${dcbzl-no}"
2696
    echo "performance report        ${powerpc_perf-no}"
2697
fi
2698
if enabled sparc; then
2699
    echo "VIS enabled               ${vis-no}"
2700
fi
2701
echo "gprof enabled             ${gprof-no}"
2702
echo "debug symbols             ${debug-no}"
2703
echo "strip symbols             ${stripping-no}"
2704
echo "optimizations             ${optimizations-no}"
2705
echo "static                    ${static-no}"
2706
echo "shared                    ${shared-no}"
2707
echo "postprocessing support    ${postproc-no}"
2708
echo "new filter support        ${avfilter-no}"
2709
echo "filters using lavformat   ${avfilter_lavf-no}"
2710
echo "network support           ${network-no}"
2711
if enabled network; then
2712
    echo "IPv6 support              ${ipv6-no}"
2713
fi
2714
echo "threading support         ${thread_type-no}"
2715
echo "SDL support               ${sdl-no}"
2716
if enabled sdl_too_old; then
2717
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2718
fi
2719
echo "Sun medialib support      ${mlib-no}"
2720
echo "AVISynth enabled          ${avisynth-no}"
2721
echo "libdc1394 support         ${libdc1394-no}"
2722
echo "libdirac enabled          ${libdirac-no}"
2723
echo "libfaac enabled           ${libfaac-no}"
2724
echo "libfaad enabled           ${libfaad-no}"
2725
echo "libfaad dlopened          ${libfaadbin-no}"
2726
echo "libgsm enabled            ${libgsm-no}"
2727
echo "libmp3lame enabled        ${libmp3lame-no}"
2728
echo "libnut enabled            ${libnut-no}"
2729
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2730
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2731
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2732
echo "libschroedinger enabled   ${libschroedinger-no}"
2733
echo "libspeex enabled          ${libspeex-no}"
2734
echo "libtheora enabled         ${libtheora-no}"
2735
echo "libvorbis enabled         ${libvorbis-no}"
2736
echo "libx264 enabled           ${libx264-no}"
2737
echo "libxvid enabled           ${libxvid-no}"
2738
echo "zlib enabled              ${zlib-no}"
2739
echo "bzlib enabled             ${bzlib-no}"
2740
echo
2741

    
2742
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2743
    echo "Enabled ${type}s:"
2744
    eval list=\$$(toupper $type)_LIST
2745
    for part in $list; do
2746
        enabled $part && echo ${part%_*}
2747
    done | sort | pr -3 -t
2748
    echo
2749
done
2750

    
2751
license="LGPL version 2.1 or later"
2752
if enabled nonfree; then
2753
    license="nonfree and unredistributable"
2754
elif enabled gplv3; then
2755
    license="GPL version 3 or later"
2756
elif enabled lgplv3; then
2757
    license="LGPL version 3 or later"
2758
elif enabled gpl; then
2759
    license="GPL version 2 or later"
2760
fi
2761

    
2762
echo "License: $license"
2763

    
2764
echo "Creating config.mak and config.h..."
2765

    
2766
enabled stripping || strip="echo skipping strip"
2767

    
2768
cat > config.mak <<EOF
2769
# Automatically generated by configure - do not modify!
2770
ifndef FFMPEG_CONFIG_MAK
2771
FFMPEG_CONFIG_MAK=1
2772
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2773
prefix=$prefix
2774
LIBDIR=\$(DESTDIR)$libdir
2775
SHLIBDIR=\$(DESTDIR)$shlibdir
2776
INCDIR=\$(DESTDIR)$incdir
2777
BINDIR=\$(DESTDIR)$bindir
2778
DATADIR=\$(DESTDIR)$datadir
2779
MANDIR=\$(DESTDIR)$mandir
2780
SRC_PATH="$source_path"
2781
SRC_PATH_BARE=$source_path
2782
BUILD_ROOT="$PWD"
2783
ARCH=$arch
2784
CC=$cc
2785
AS=$as
2786
LD=$ld
2787
DEPCC=$dep_cc
2788
YASM=$yasmexe
2789
AR=$ar
2790
RANLIB=$ranlib
2791
LN_S=$ln_s
2792
STRIP=$strip
2793
CPPFLAGS=$CPPFLAGS
2794
CFLAGS=$CFLAGS
2795
ASFLAGS=$ASFLAGS
2796
CC_O=$CC_O
2797
LDFLAGS=$LDFLAGS
2798
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2799
SHFLAGS=$SHFLAGS
2800
YASMFLAGS=$YASMFLAGS
2801
BUILDSUF=$build_suffix
2802
FULLNAME=$FULLNAME
2803
LIBPREF=$LIBPREF
2804
LIBSUF=$LIBSUF
2805
LIBNAME=$LIBNAME
2806
SLIBPREF=$SLIBPREF
2807
SLIBSUF=$SLIBSUF
2808
EXESUF=$EXESUF
2809
EXTRA_VERSION=$extra_version
2810
DEPFLAGS=$DEPFLAGS
2811
CCDEP=$CCDEP
2812
ASDEP=$ASDEP
2813
CC_DEPFLAGS=$CC_DEPFLAGS
2814
AS_DEPFLAGS=$AS_DEPFLAGS
2815
HOSTCC=$host_cc
2816
HOSTCFLAGS=$host_cflags
2817
HOSTEXESUF=$HOSTEXESUF
2818
HOSTLDFLAGS=$host_ldflags
2819
HOSTLIBS=$host_libs
2820
TARGET_EXEC=$target_exec
2821
TARGET_PATH=$target_path
2822
SDL_LIBS=$sdl_libs
2823
SDL_CFLAGS=$sdl_cflags
2824
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2825
EXTRALIBS=$extralibs
2826
EOF
2827

    
2828
get_version(){
2829
    name=$1
2830
    file=$source_path/$2
2831
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2832
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2833
    lcname=$(tolower $name)
2834
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2835
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2836
}
2837

    
2838
get_version LIBSWSCALE  libswscale/swscale.h
2839
get_version LIBPOSTPROC libpostproc/postprocess.h
2840
get_version LIBAVCODEC  libavcodec/avcodec.h
2841
get_version LIBAVDEVICE libavdevice/avdevice.h
2842
get_version LIBAVFORMAT libavformat/avformat.h
2843
get_version LIBAVUTIL   libavutil/avutil.h
2844
get_version LIBAVFILTER libavfilter/avfilter.h
2845

    
2846
enabled shared && cat >> config.mak <<EOF
2847
LIBTARGET=${LIBTARGET}
2848
SLIBNAME=${SLIBNAME}
2849
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2850
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2851
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2852
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2853
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2854
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2855
EOF
2856

    
2857
enabled asmalign_pot || align_shift="1 <<"
2858

    
2859
cat > $TMPH <<EOF
2860
/* Automatically generated by configure - do not modify! */
2861
#ifndef FFMPEG_CONFIG_H
2862
#define FFMPEG_CONFIG_H
2863
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2864
#define FFMPEG_LICENSE "$(c_escape $license)"
2865
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2866
#define CC_TYPE "$cc_type"
2867
#define CC_VERSION $cc_version
2868
#define restrict $_restrict
2869
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2870
#define EXTERN_PREFIX "${extern_prefix}"
2871
#define EXTERN_ASM ${extern_prefix}
2872
EOF
2873

    
2874
if enabled small || disabled optimizations; then
2875
    echo "#define av_always_inline"  >> $TMPH
2876
fi
2877

    
2878
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2879
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2880
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2881
                                      $CONFIG_EXTRA      \
2882
                                      $DECODER_LIST      \
2883
                                      $ENCODER_LIST      \
2884
                                      $HWACCEL_LIST      \
2885
                                      $PARSER_LIST       \
2886
                                      $BSF_LIST          \
2887
                                      $DEMUXER_LIST      \
2888
                                      $MUXER_LIST        \
2889
                                      $FILTER_LIST       \
2890
                                      $PROTOCOL_LIST     \
2891
                                      $INDEV_LIST        \
2892
                                      $OUTDEV_LIST       \
2893

    
2894
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2895
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2896

    
2897
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2898
cmp -s $TMPH config.h &&
2899
    echo "config.h is unchanged" ||
2900
    mv -f $TMPH config.h
2901

    
2902
# build tree in object directory if source path is different from current one
2903
if enabled source_path_used; then
2904
    DIRS="
2905
        doc
2906
        libavcodec
2907
        libavcodec/$arch
2908
        libavdevice
2909
        libavfilter
2910
        libavformat
2911
        libavutil
2912
        libavutil/$arch
2913
        libpostproc
2914
        libswscale
2915
        libswscale/$arch
2916
        tests
2917
        tools
2918
    "
2919
    FILES="
2920
        Makefile
2921
        common.mak
2922
        subdir.mak
2923
        doc/texi2pod.pl
2924
        libavcodec/Makefile
2925
        libavdevice/Makefile
2926
        libavfilter/Makefile
2927
        libavformat/Makefile
2928
        libavutil/Makefile
2929
        libpostproc/Makefile
2930
        libswscale/Makefile
2931
    "
2932
    for dir in $DIRS ; do
2933
        mkdir -p $dir
2934
    done
2935
    for f in $FILES ; do
2936
        $ln_s "$source_path/$f" $f
2937
    done
2938
fi
2939

    
2940

    
2941
# build pkg-config files
2942

    
2943
pkgconfig_generate(){
2944
name=$1
2945
shortname=${name#lib}${build_suffix}
2946
comment=$2
2947
version=$3
2948
libs=$4
2949
requires=$5
2950
cat <<EOF > $name/$name.pc
2951
prefix=$prefix
2952
exec_prefix=\${prefix}
2953
libdir=$libdir
2954
includedir=$incdir
2955

    
2956
Name: $name
2957
Description: $comment
2958
Version: $version
2959
Requires: $(enabled shared || echo $requires)
2960
Requires.private: $(enabled shared && echo $requires)
2961
Conflicts:
2962
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2963
Libs.private: $(enabled shared && echo $libs)
2964
Cflags: -I\${includedir}
2965
EOF
2966
cat <<EOF > $name/$name-uninstalled.pc
2967
prefix=
2968
exec_prefix=
2969
libdir=\${pcfiledir}
2970
includedir=${source_path}
2971

    
2972
Name: $name
2973
Description: $comment
2974
Version: $version
2975
Requires: $requires
2976
Conflicts:
2977
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2978
Cflags: -I\${includedir}
2979
EOF
2980
}
2981

    
2982
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2983
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2984
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2985
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2986
enabled avfilter &&
2987
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2988
enabled postproc &&
2989
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2990
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"