Statistics
| Branch: | Revision:

ffmpeg / configure @ df642790

History | View | Annotate | Download (84.4 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffserver       disable ffserver build
86
  --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-asm            disable all assembler optimizations
212
  --disable-altivec        disable AltiVec optimizations
213
  --disable-amd3dnow       disable 3DNow! optimizations
214
  --disable-amd3dnowext    disable 3DNow! extended optimizations
215
  --disable-mmx            disable MMX optimizations
216
  --disable-mmx2           disable MMX2 optimizations
217
  --disable-sse            disable SSE optimizations
218
  --disable-ssse3          disable SSSE3 optimizations
219
  --disable-armv5te        disable armv5te optimizations
220
  --disable-armv6          disable armv6 optimizations
221
  --disable-armv6t2        disable armv6t2 optimizations
222
  --disable-armvfp         disable ARM VFP optimizations
223
  --disable-iwmmxt         disable iwmmxt optimizations
224
  --disable-mmi            disable MMI optimizations
225
  --disable-neon           disable neon optimizations
226
  --disable-vis            disable VIS optimizations
227
  --disable-yasm           disable use of yasm assembler
228
  --enable-pic             build position-independent code
229

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
708
check_lib2(){
709
    log check_lib2 "$@"
710
    headers="$1"
711
    func="$2"
712
    shift 2
713
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
714
}
715

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

    
720
check_exec_crash(){
721
    code=$(cat)
722

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

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

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

    
763
check_struct(){
764
    log check_type "$@"
765
    headers=$1
766
    struct=$2
767
    member=$3
768
    shift 3
769
    disable_safe "${struct}_${member}"
770
    incs=""
771
    for hdr in $headers; do
772
        incs="$incs
773
#include <$hdr>"
774
    done
775
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
776
$incs
777
const void *p = &(($struct *)0)->$member;
778
EOF
779
}
780

    
781
require(){
782
    name="$1"
783
    header="$2"
784
    func="$3"
785
    shift 3
786
    check_lib $header $func "$@" || die "ERROR: $name not found"
787
}
788

    
789
require2(){
790
    name="$1"
791
    headers="$2"
792
    func="$3"
793
    shift 3
794
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
795
}
796

    
797
check_foo_config(){
798
    cfg=$1
799
    pkg=$2
800
    header=$3
801
    func=$4
802
    shift 4
803
    disable $cfg
804
    check_cmd ${pkg}-config --version
805
    err=$?
806
    if test "$err" = 0; then
807
        temp_cflags $(${pkg}-config --cflags)
808
        temp_extralibs $(${pkg}-config --libs)
809
        check_lib "$@" $header $func && enable $cfg
810
    fi
811
    return $err
812
}
813

    
814
check_host_cc(){
815
    log check_host_cc "$@"
816
    cat > $TMPC
817
    log_file $TMPC
818
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
819
}
820

    
821
check_host_cflags(){
822
    log check_host_cflags "$@"
823
    check_host_cc "$@" <<EOF && append host_cflags "$@"
824
int x;
825
EOF
826
}
827

    
828
apply(){
829
    file=$1
830
    shift
831
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
832
}
833

    
834
cp_if_changed(){
835
    cmp -s "$1" "$2" &&
836
        echo "$2 is unchanged" ||
837
        cp -f "$1" "$2"
838
}
839

    
840
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
841
# system-dependent things.
842

    
843
COMPONENT_LIST="
844
    bsfs
845
    decoders
846
    demuxers
847
    encoders
848
    filters
849
    hwaccels
850
    indevs
851
    muxers
852
    outdevs
853
    parsers
854
    protocols
855
"
856

    
857
CONFIG_LIST="
858
    $COMPONENT_LIST
859
    aandct
860
    avfilter
861
    avfilter_lavf
862
    avisynth
863
    beos_netserver
864
    bzlib
865
    doc
866
    fastdiv
867
    ffmpeg
868
    ffplay
869
    ffserver
870
    fft
871
    golomb
872
    gpl
873
    gprof
874
    gray
875
    hardcoded_tables
876
    ipv6
877
    libdc1394
878
    libdirac
879
    libfaac
880
    libfaad
881
    libfaadbin
882
    libgsm
883
    libmp3lame
884
    libnut
885
    libopencore_amrnb
886
    libopencore_amrwb
887
    libopenjpeg
888
    libschroedinger
889
    libspeex
890
    libtheora
891
    libvorbis
892
    libx264
893
    libxvid
894
    lpc
895
    mdct
896
    memalign_hack
897
    mlib
898
    mpegaudio_hp
899
    network
900
    nonfree
901
    pic
902
    postproc
903
    powerpc_perf
904
    rdft
905
    runtime_cpudetect
906
    shared
907
    small
908
    static
909
    swscale_alpha
910
    vaapi
911
    vdpau
912
    version3
913
    x11grab
914
    zlib
915
"
916

    
917
THREADS_LIST='
918
    beosthreads
919
    os2threads
920
    pthreads
921
    w32threads
922
'
923

    
924
ARCH_LIST='
925
    alpha
926
    arm
927
    avr32
928
    avr32_ap
929
    avr32_uc
930
    bfin
931
    ia64
932
    m68k
933
    mips
934
    mips64
935
    parisc
936
    ppc
937
    ppc64
938
    s390
939
    sh4
940
    sparc
941
    sparc64
942
    x86
943
    x86_32
944
    x86_64
945
'
946

    
947
ARCH_EXT_LIST='
948
    altivec
949
    amd3dnow
950
    amd3dnowext
951
    armv5te
952
    armv6
953
    armv6t2
954
    armvfp
955
    iwmmxt
956
    mmi
957
    mmx
958
    mmx2
959
    neon
960
    ppc4xx
961
    sse
962
    ssse3
963
    vis
964
'
965

    
966
HAVE_LIST="
967
    $ARCH_EXT_LIST
968
    $THREADS_LIST
969
    alsa_asoundlib_h
970
    altivec_h
971
    arpa_inet_h
972
    attribute_packed
973
    bigendian
974
    bswap
975
    closesocket
976
    cmov
977
    conio_h
978
    dcbzl
979
    dev_bktr_ioctl_bt848_h
980
    dev_bktr_ioctl_meteor_h
981
    dev_ic_bt8xx_h
982
    dev_video_meteor_ioctl_meteor_h
983
    dev_video_bktr_ioctl_bt848_h
984
    dlfcn_h
985
    dlopen
986
    dos_paths
987
    ebp_available
988
    ebx_available
989
    exp2
990
    exp2f
991
    fast_64bit
992
    fast_clz
993
    fast_cmov
994
    fast_unaligned
995
    fork
996
    getaddrinfo
997
    gethrtime
998
    GetProcessTimes
999
    getrusage
1000
    inet_aton
1001
    inline_asm
1002
    isatty
1003
    ldbrx
1004
    libdc1394_1
1005
    libdc1394_2
1006
    llrint
1007
    log2
1008
    log2f
1009
    loongson
1010
    lrint
1011
    lrintf
1012
    lzo1x_999_compress
1013
    machine_ioctl_bt848_h
1014
    machine_ioctl_meteor_h
1015
    malloc_h
1016
    memalign
1017
    mkstemp
1018
    pld
1019
    posix_memalign
1020
    round
1021
    roundf
1022
    sdl
1023
    sdl_video_size
1024
    setmode
1025
    socklen_t
1026
    soundcard_h
1027
    poll_h
1028
    struct_addrinfo
1029
    struct_sockaddr_storage
1030
    sys_mman_h
1031
    sys_resource_h
1032
    sys_select_h
1033
    sys_soundcard_h
1034
    sys_videoio_h
1035
    ten_operands
1036
    termios_h
1037
    threads
1038
    truncf
1039
    vfp_args
1040
    VirtualAlloc
1041
    winsock2_h
1042
    xform_asm
1043
    yasm
1044
"
1045

    
1046
# options emitted with CONFIG_ prefix but not available on command line
1047
CONFIG_EXTRA="
1048
    gplv3
1049
    lgplv3
1050
"
1051

    
1052
CMDLINE_SELECT="
1053
    $ARCH_EXT_LIST
1054
    $CONFIG_LIST
1055
    $THREADS_LIST
1056
    asm
1057
    cross_compile
1058
    debug
1059
    extra_warnings
1060
    logging
1061
    optimizations
1062
    stripping
1063
    yasm
1064
"
1065

    
1066
PATHS_LIST='
1067
    bindir
1068
    datadir
1069
    incdir
1070
    libdir
1071
    mandir
1072
    prefix
1073
    shlibdir
1074
'
1075

    
1076
CMDLINE_SET="
1077
    $PATHS_LIST
1078
    arch
1079
    as
1080
    build_suffix
1081
    cc
1082
    cpu
1083
    cross_prefix
1084
    dep_cc
1085
    extra_version
1086
    host_cc
1087
    host_cflags
1088
    host_ldflags
1089
    host_libs
1090
    host_os
1091
    ld
1092
    logfile
1093
    nm
1094
    source_path
1095
    sysinclude
1096
    sysroot
1097
    target_exec
1098
    target_os
1099
    target_path
1100
"
1101

    
1102
CMDLINE_APPEND="
1103
    extra_cflags
1104
"
1105

    
1106
# code dependency declarations
1107

    
1108
# architecture extensions
1109

    
1110
armv5te_deps="arm"
1111
armv6_deps="arm"
1112
armv6t2_deps="arm"
1113
armvfp_deps="arm"
1114
iwmmxt_deps="arm"
1115
neon_deps="arm"
1116

    
1117
mmi_deps="mips"
1118

    
1119
altivec_deps="ppc"
1120
ppc4xx_deps="ppc"
1121

    
1122
vis_deps="sparc"
1123

    
1124
x86_64_select="cmov fast_cmov"
1125
amd3dnow_deps="mmx"
1126
amd3dnowext_deps="amd3dnow"
1127
mmx_deps="x86"
1128
mmx2_deps="mmx"
1129
sse_deps="mmx"
1130
ssse3_deps="sse"
1131

    
1132
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1133
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1134
fast_unaligned_if_any="armv6 ppc x86"
1135

    
1136
need_memalign="altivec neon sse"
1137
inline_asm_deps="!tms470"
1138

    
1139
# decoders / encoders / hardware accelerators
1140
aac_decoder_select="fft mdct aac_parser"
1141
aac_encoder_select="fft mdct"
1142
ac3_decoder_select="fft mdct ac3_parser"
1143
alac_encoder_select="lpc"
1144
atrac3_decoder_select="fft mdct"
1145
cavs_decoder_select="golomb"
1146
cook_decoder_select="fft mdct"
1147
cscd_decoder_suggest="zlib"
1148
dca_decoder_select="fft mdct"
1149
dnxhd_encoder_select="aandct"
1150
dxa_decoder_select="zlib"
1151
eac3_decoder_select="ac3_decoder"
1152
eamad_decoder_select="aandct"
1153
eatgq_decoder_select="aandct"
1154
eatqi_decoder_select="aandct"
1155
ffv1_decoder_select="golomb"
1156
flac_decoder_select="golomb"
1157
flac_encoder_select="golomb lpc"
1158
flashsv_decoder_select="zlib"
1159
flashsv_encoder_select="zlib"
1160
flv_decoder_select="h263_decoder"
1161
flv_encoder_select="h263_encoder"
1162
h261_encoder_select="aandct"
1163
h263_decoder_select="h263_parser"
1164
h263_encoder_select="aandct"
1165
h263_vaapi_hwaccel_deps="va_va_h"
1166
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1167
h263i_decoder_select="h263_decoder"
1168
h263p_encoder_select="h263_encoder"
1169
h264_decoder_select="golomb"
1170
h264_vaapi_hwaccel_deps="va_va_h"
1171
h264_vaapi_hwaccel_select="vaapi"
1172
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1173
h264_vdpau_decoder_select="vdpau h264_decoder"
1174
imc_decoder_select="fft mdct"
1175
jpegls_decoder_select="golomb"
1176
jpegls_encoder_select="golomb"
1177
ljpeg_encoder_select="aandct"
1178
loco_decoder_select="golomb"
1179
mjpeg_encoder_select="aandct"
1180
mlp_decoder_select="mlp_parser"
1181
mpeg1video_encoder_select="aandct"
1182
mpeg2video_encoder_select="aandct"
1183
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1184
mpeg4_encoder_select="h263_encoder"
1185
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1186
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1187
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1188
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1189
mpeg2_vaapi_hwaccel_deps="va_va_h"
1190
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1191
mpeg4_vaapi_hwaccel_deps="va_va_h"
1192
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1193
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1194
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1195
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1196
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1197
msmpeg4v1_decoder_select="h263_decoder"
1198
msmpeg4v1_encoder_select="h263_encoder"
1199
msmpeg4v2_decoder_select="h263_decoder"
1200
msmpeg4v2_encoder_select="h263_encoder"
1201
msmpeg4v3_decoder_select="h263_decoder"
1202
msmpeg4v3_encoder_select="h263_encoder"
1203
nellymoser_decoder_select="fft mdct"
1204
nellymoser_encoder_select="fft mdct"
1205
png_decoder_select="zlib"
1206
png_encoder_select="zlib"
1207
qdm2_decoder_select="fft mdct rdft"
1208
rv10_decoder_select="h263_decoder"
1209
rv10_encoder_select="h263_encoder"
1210
rv20_decoder_select="h263_decoder"
1211
rv20_encoder_select="h263_encoder"
1212
rv30_decoder_select="golomb"
1213
rv40_decoder_select="golomb"
1214
shorten_decoder_select="golomb"
1215
sonic_decoder_select="golomb"
1216
sonic_encoder_select="golomb"
1217
sonic_ls_encoder_select="golomb"
1218
svq3_decoder_select="golomb"
1219
svq3_decoder_suggest="zlib"
1220
theora_decoder_select="vp3_decoder"
1221
tiff_decoder_suggest="zlib"
1222
tiff_encoder_suggest="zlib"
1223
truehd_decoder_select="mlp_decoder"
1224
tscc_decoder_select="zlib"
1225
vc1_decoder_select="h263_decoder"
1226
vc1_vaapi_hwaccel_deps="va_va_h"
1227
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1228
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1229
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1230
vorbis_decoder_select="fft mdct"
1231
vorbis_encoder_select="fft mdct"
1232
vp6a_decoder_select="vp6_decoder"
1233
vp6f_decoder_select="vp6_decoder"
1234
wmav1_decoder_select="fft mdct"
1235
wmav1_encoder_select="fft mdct"
1236
wmav2_decoder_select="fft mdct"
1237
wmav2_encoder_select="fft mdct"
1238
wmv1_decoder_select="h263_decoder"
1239
wmv1_encoder_select="h263_encoder"
1240
wmv2_decoder_select="h263_decoder"
1241
wmv2_encoder_select="h263_encoder"
1242
wmv3_decoder_select="vc1_decoder"
1243
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1244
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1245
zlib_decoder_select="zlib"
1246
zlib_encoder_select="zlib"
1247
zmbv_decoder_select="zlib"
1248
zmbv_encoder_select="zlib"
1249

    
1250
# parsers
1251
h264_parser_select="golomb"
1252

    
1253
# bitstream_filters
1254
aac_adtstoasc_bsf_select="aac_parser"
1255

    
1256
# external libraries
1257
libdirac_decoder_deps="libdirac !libschroedinger"
1258
libdirac_encoder_deps="libdirac"
1259
libfaac_encoder_deps="libfaac"
1260
libfaad_decoder_deps="libfaad"
1261
libfaadbin_decoder_extralibs='$ldl'
1262
libgsm_decoder_deps="libgsm"
1263
libgsm_encoder_deps="libgsm"
1264
libgsm_ms_decoder_deps="libgsm"
1265
libgsm_ms_encoder_deps="libgsm"
1266
libmp3lame_encoder_deps="libmp3lame"
1267
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1268
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1269
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1270
libopenjpeg_decoder_deps="libopenjpeg"
1271
libschroedinger_decoder_deps="libschroedinger"
1272
libschroedinger_encoder_deps="libschroedinger"
1273
libspeex_decoder_deps="libspeex"
1274
libtheora_encoder_deps="libtheora"
1275
libvorbis_encoder_deps="libvorbis"
1276
libx264_encoder_deps="libx264"
1277
libxvid_encoder_deps="libxvid"
1278

    
1279
# demuxers / muxers
1280
ac3_demuxer_deps="ac3_parser"
1281
asf_stream_muxer_select="asf_muxer"
1282
avisynth_demuxer_deps="avisynth"
1283
dirac_demuxer_deps="dirac_parser"
1284
eac3_demuxer_select="ac3_parser"
1285
ipod_muxer_select="mov_muxer"
1286
libnut_demuxer_deps="libnut"
1287
libnut_muxer_deps="libnut"
1288
matroska_audio_muxer_select="matroska_muxer"
1289
matroska_demuxer_suggest="zlib bzlib"
1290
mov_demuxer_suggest="zlib"
1291
mp3_demuxer_deps="mpegaudio_parser"
1292
mp4_muxer_select="mov_muxer"
1293
mpegtsraw_demuxer_select="mpegts_demuxer"
1294
mxf_d10_muxer_select="mxf_muxer"
1295
ogg_demuxer_select="golomb"
1296
psp_muxer_select="mov_muxer"
1297
rtsp_demuxer_deps="sdp_demuxer"
1298
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1299
spdif_muxer_select="aac_parser"
1300
tg2_muxer_select="mov_muxer"
1301
tgp_muxer_select="mov_muxer"
1302
w64_demuxer_deps="wav_demuxer"
1303

    
1304
# indevs / outdevs
1305
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1306
alsa_indev_extralibs="-lasound"
1307
alsa_outdev_deps="alsa_asoundlib_h"
1308
alsa_outdev_extralibs="-lasound"
1309
audio_beos_indev_deps="audio_beos"
1310
audio_beos_indev_extralibs="-lmedia -lbe"
1311
audio_beos_outdev_deps="audio_beos"
1312
audio_beos_outdev_extralibs="-lmedia -lbe"
1313
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1314
dv1394_indev_deps="dv1394 dv_demuxer"
1315
jack_indev_deps="jack_jack_h"
1316
jack_indev_extralibs="-ljack"
1317
libdc1394_indev_deps="libdc1394"
1318
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1319
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1320
v4l_indev_deps="linux_videodev_h"
1321
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1322
vfwcap_indev_deps="capCreateCaptureWindow"
1323
vfwcap_indev_extralibs="-lvfw32"
1324
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1325
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1326

    
1327
# protocols
1328
gopher_protocol_deps="network"
1329
http_protocol_deps="network"
1330
rtmp_protocol_deps="tcp_protocol"
1331
rtp_protocol_deps="udp_protocol"
1332
tcp_protocol_deps="network"
1333
udp_protocol_deps="network"
1334

    
1335
# filters
1336
movie_filter_deps="avfilter_lavf"
1337

    
1338
# programs
1339
ffplay_deps="sdl"
1340
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1341
ffserver_extralibs='$ldl'
1342

    
1343
doc_deps="texi2html"
1344

    
1345
# default parameters
1346

    
1347
logfile="config.err"
1348

    
1349
# installation paths
1350
prefix_default="/usr/local"
1351
bindir_default='${prefix}/bin'
1352
datadir_default='${prefix}/share/ffmpeg'
1353
incdir_default='${prefix}/include'
1354
libdir_default='${prefix}/lib'
1355
mandir_default='${prefix}/share/man'
1356
shlibdir_default="$libdir_default"
1357

    
1358
# toolchain
1359
ar="ar"
1360
cc_default="gcc"
1361
cc_version=\"unknown\"
1362
host_cc_default="gcc"
1363
ln_s="ln -sf"
1364
nm_default="nm"
1365
objformat="elf"
1366
ranlib="ranlib"
1367
strip="strip"
1368
yasmexe="yasm"
1369

    
1370
# machine
1371
arch=$(uname -m)
1372
cpu="generic"
1373

    
1374
# OS
1375
target_os=$(tolower $(uname -s))
1376
host_os=$target_os
1377

    
1378
# configurable options
1379
enable asm
1380
enable debug
1381
enable doc
1382
enable fastdiv
1383
enable ffmpeg
1384
enable ffplay
1385
enable ffserver
1386
enable ipv6
1387
enable mpegaudio_hp
1388
enable network
1389
enable optimizations
1390
enable protocols
1391
enable static
1392
enable stripping
1393
enable swscale_alpha
1394

    
1395
# build settings
1396
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1397
FFSERVERLDFLAGS=-Wl,-E
1398
LIBPREF="lib"
1399
LIBSUF=".a"
1400
FULLNAME='$(NAME)$(BUILDSUF)'
1401
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1402
SLIBPREF="lib"
1403
SLIBSUF=".so"
1404
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1405
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1406
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1407
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1408

    
1409
CC_O='-o $@'
1410

    
1411
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1412
host_libs='-lm'
1413

    
1414
target_path='.'
1415

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

    
1421
# find source path
1422
source_path="$(dirname "$0")"
1423
enable source_path_used
1424
if test -f configure; then
1425
    source_path="$(pwd)"
1426
    disable source_path_used
1427
else
1428
    source_path="$(cd "$source_path"; pwd)"
1429
    echo "$source_path" | grep -q '[[:blank:]]' &&
1430
        die "Out of tree builds are impossible with whitespace in source path."
1431
    test -e "$source_path/config.h" &&
1432
        die "Out of tree builds are impossible with config.h in source dir."
1433
fi
1434

    
1435
for v in "$@"; do
1436
    r=${v#*=}
1437
    l=${v%"$r"}
1438
    r=$(sh_quote "$r")
1439
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1440
done
1441

    
1442
find_things(){
1443
    thing=$1
1444
    pattern=$2
1445
    file=$source_path/$3
1446
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1447
}
1448

    
1449
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1450
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1451
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1452
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1453
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1454
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1455
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1456
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1457
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1458
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1459
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1460

    
1461
enable $ARCH_EXT_LIST \
1462
       $DECODER_LIST \
1463
       $ENCODER_LIST \
1464
       $HWACCEL_LIST \
1465
       $PARSER_LIST \
1466
       $BSF_LIST \
1467
       $DEMUXER_LIST \
1468
       $MUXER_LIST \
1469
       $FILTER_LIST \
1470
       $PROTOCOL_LIST \
1471
       $INDEV_LIST \
1472
       $OUTDEV_LIST \
1473

    
1474
die_unknown(){
1475
    echo "Unknown option \"$1\"."
1476
    echo "See $0 --help for available options."
1477
    exit 1
1478
}
1479

    
1480
show_list() {
1481
    suffix=_$1
1482
    shift
1483
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1484
    exit 0
1485
}
1486

    
1487
for opt do
1488
    optval="${opt#*=}"
1489
    case "$opt" in
1490
    --extra-ldflags=*) add_ldflags $optval
1491
    ;;
1492
    --extra-libs=*) add_extralibs $optval
1493
    ;;
1494
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1495
    ;;
1496
    --enable-debug=*) debuglevel="$optval"
1497
    ;;
1498
    --enable-*=*|--disable-*=*)
1499
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1500
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1501
    eval list=\$$(toupper $thing)_LIST
1502
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1503
    $action $(filter "$name" $list)
1504
    ;;
1505
    --enable-?*|--disable-?*)
1506
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1507
    if is_in $option $COMPONENT_LIST; then
1508
        test $action = disable && action=unset
1509
        eval $action \$$(toupper ${option%s})_LIST
1510
    elif is_in $option $CMDLINE_SELECT; then
1511
        $action $option
1512
    else
1513
        die_unknown $opt
1514
    fi
1515
    ;;
1516
    --list-*)
1517
        NAME="${opt#--list-}"
1518
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1519
        NAME=${NAME%s}
1520
        eval show_list $NAME \$$(toupper $NAME)_LIST
1521
    ;;
1522
    --help|-h) show_help
1523
    ;;
1524
    *)
1525
    optname="${opt%%=*}"
1526
    optname="${optname#--}"
1527
    optname=$(echo "$optname" | sed 's/-/_/g')
1528
    if is_in $optname $CMDLINE_SET; then
1529
        eval $optname='$optval'
1530
    elif is_in $optname $CMDLINE_APPEND; then
1531
        append $optname "$optval"
1532
    else
1533
         die_unknown $opt
1534
    fi
1535
    ;;
1536
    esac
1537
done
1538

    
1539
disabled logging && logfile=/dev/null
1540

    
1541
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1542
set >> $logfile
1543

    
1544
test -n "$cross_prefix" && enable cross_compile
1545

    
1546
ar="${cross_prefix}${ar}"
1547
cc_default="${cross_prefix}${cc_default}"
1548
nm_default="${cross_prefix}${nm_default}"
1549
ranlib="${cross_prefix}${ranlib}"
1550
strip="${cross_prefix}${strip}"
1551

    
1552
sysinclude_default="${sysroot}/usr/include"
1553

    
1554
set_default cc nm sysinclude
1555
enabled cross_compile || host_cc_default=$cc
1556
set_default host_cc
1557

    
1558
exesuf() {
1559
    case $1 in
1560
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1561
    esac
1562
}
1563

    
1564
EXESUF=$(exesuf $target_os)
1565
HOSTEXESUF=$(exesuf $host_os)
1566

    
1567
# set temporary file name
1568
: ${TMPDIR:=$TEMPDIR}
1569
: ${TMPDIR:=$TMP}
1570
: ${TMPDIR:=/tmp}
1571

    
1572
if ! check_cmd type mktemp; then
1573
    # simple replacement for missing mktemp
1574
    # NOT SAFE FOR GENERAL USE
1575
    mktemp(){
1576
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1577
    }
1578
fi
1579

    
1580
tmpfile(){
1581
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1582
        (set -C; exec > $tmp) 2>/dev/null ||
1583
        die "Unable to create temporary file in $TMPDIR."
1584
    append TMPFILES $tmp
1585
    eval $1=$tmp
1586
}
1587

    
1588
trap 'rm -f -- $TMPFILES' EXIT
1589
trap exit HUP INT TERM
1590

    
1591
tmpfile TMPC  .c
1592
tmpfile TMPE  $EXESUF
1593
tmpfile TMPH  .h
1594
tmpfile TMPO  .o
1595
tmpfile TMPS  .S
1596
tmpfile TMPV  .ver
1597
tmpfile TMPSH .sh
1598

    
1599
unset -f mktemp
1600

    
1601
# make sure we can execute files in $TMPDIR
1602
cat > $TMPSH 2>> $logfile <<EOF
1603
#! /bin/sh
1604
EOF
1605
chmod +x $TMPSH >> $logfile 2>&1
1606
if ! $TMPSH >> $logfile 2>&1; then
1607
    cat <<EOF
1608
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1609
variable to another directory and make sure that it is not mounted noexec.
1610
EOF
1611
    die "Sanity test failed."
1612
fi
1613

    
1614
filter_cflags=echo
1615
filter_cppflags=echo
1616
filter_asflags=echo
1617

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

    
1736
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1737

    
1738
: ${as_default:=$cc}
1739
: ${dep_cc_default:=$cc}
1740
: ${ld_default:=$cc}
1741
set_default as dep_cc ld
1742

    
1743
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1744
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1745

    
1746
add_cflags $extra_cflags
1747
add_asflags $extra_cflags
1748

    
1749
if test -n "$sysroot"; then
1750
    case "$cc_type" in
1751
        gcc)
1752
            add_cppflags --sysroot="$sysroot"
1753
            add_ldflags --sysroot="$sysroot"
1754
        ;;
1755
        tms470)
1756
            add_cppflags -I"$sysinclude"
1757
            add_ldflags  --sysroot="$sysroot"
1758
        ;;
1759
        clang)
1760
            add_cppflags -isysroot="$sysroot"
1761
            add_ldflags -isysroot="$sysroot"
1762
        ;;
1763
    esac
1764
fi
1765

    
1766
if test "$cpu" = host; then
1767
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1768

    
1769
    case "$cc_type" in
1770
        gcc)
1771
            check_native(){
1772
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1773
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1774
            }
1775
            cpu=$(check_native -march || check_native -mcpu)
1776
        ;;
1777
    esac
1778

    
1779
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1780
fi
1781

    
1782
# Deal with common $arch aliases
1783
case "$arch" in
1784
    arm*)
1785
        arch="arm"
1786
    ;;
1787
    mips|mipsel|IP*)
1788
        arch="mips"
1789
    ;;
1790
    mips64)
1791
        arch="mips"
1792
        subarch="mips64"
1793
    ;;
1794
    parisc|hppa)
1795
        arch="parisc"
1796
    ;;
1797
    parisc64|hppa64)
1798
        arch="parisc"
1799
        subarch="parisc64"
1800
    ;;
1801
    "Power Macintosh"|ppc|powerpc)
1802
        arch="ppc"
1803
    ;;
1804
    ppc64)
1805
        arch="ppc"
1806
        subarch="ppc64"
1807
    ;;
1808
    s390|s390x)
1809
        arch="s390"
1810
    ;;
1811
    sh4|sh)
1812
        arch="sh4"
1813
    ;;
1814
    sun4u|sparc64)
1815
        arch="sparc"
1816
        subarch="sparc64"
1817
    ;;
1818
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1819
        arch="x86"
1820
    ;;
1821
esac
1822

    
1823
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1824
enable $arch
1825

    
1826
# Add processor-specific flags
1827
if test "$cpu" = generic; then
1828
    : do nothing
1829
elif enabled ppc; then
1830

    
1831
    case $cpu in
1832
        601|ppc601|PowerPC601)
1833
            cpuflags="-mcpu=601"
1834
        ;;
1835
        603*|ppc603*|PowerPC603*)
1836
            cpuflags="-mcpu=603"
1837
        ;;
1838
        604*|ppc604*|PowerPC604*)
1839
            cpuflags="-mcpu=604"
1840
        ;;
1841
        G3|g3|75*|ppc75*|PowerPC75*)
1842
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1843
        ;;
1844
        G4|g4|745*|ppc745*|PowerPC745*)
1845
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1846
        ;;
1847
        74*|ppc74*|PowerPC74*)
1848
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1849
        ;;
1850
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1851
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1852
        ;;
1853
        Cell|CELL|cell)
1854
            cpuflags="-mcpu=cell"
1855
            enable ldbrx
1856
        ;;
1857
    esac
1858

    
1859
elif enabled x86; then
1860

    
1861
    case $cpu in
1862
        i[345]86|pentium)
1863
            cpuflags="-march=$cpu"
1864
            disable mmx
1865
        ;;
1866
        # targets that do NOT support conditional mov (cmov)
1867
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1868
            cpuflags="-march=$cpu"
1869
            disable cmov
1870
        ;;
1871
        # targets that do support conditional mov (cmov)
1872
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1873
            cpuflags="-march=$cpu"
1874
            enable cmov
1875
            enable fast_cmov
1876
        ;;
1877
        # targets that do support conditional mov but on which it's slow
1878
        pentium4|pentium4m|prescott|nocona)
1879
            cpuflags="-march=$cpu"
1880
            enable cmov
1881
            disable fast_cmov
1882
        ;;
1883
    esac
1884

    
1885
elif enabled sparc; then
1886

    
1887
    case $cpu in
1888
        sparc64)
1889
            cpuflags="-mcpu=v9"
1890
        ;;
1891
    esac
1892

    
1893
elif enabled arm; then
1894

    
1895
    case $cpu in
1896
        armv*)
1897
            cpuflags="-march=$cpu"
1898
        ;;
1899
        *)
1900
            cpuflags="-mcpu=$cpu"
1901
        ;;
1902
    esac
1903

    
1904
elif enabled alpha; then
1905

    
1906
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1907

    
1908
elif enabled bfin; then
1909

    
1910
    cpuflags="-mcpu=$cpu"
1911

    
1912
elif enabled mips; then
1913

    
1914
    cpuflags="-march=$cpu"
1915

    
1916
elif enabled avr32; then
1917

    
1918
    case $cpu in
1919
        ap7[02]0[0-2])
1920
            subarch="avr32_ap"
1921
            cpuflags="-mpart=$cpu"
1922
        ;;
1923
        ap)
1924
            subarch="avr32_ap"
1925
            cpuflags="-march=$cpu"
1926
        ;;
1927
        uc3[ab]*)
1928
            subarch="avr32_uc"
1929
            cpuflags="-mcpu=$cpu"
1930
        ;;
1931
        uc)
1932
            subarch="avr32_uc"
1933
            cpuflags="-march=$cpu"
1934
        ;;
1935
    esac
1936

    
1937
fi
1938

    
1939
add_cflags $cpuflags
1940
add_asflags $cpuflags
1941

    
1942
# compiler sanity check
1943
check_exec <<EOF
1944
int main(void){ return 0; }
1945
EOF
1946
if test "$?" != 0; then
1947
    echo "$cc is unable to create an executable file."
1948
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1949
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1950
        echo "Only do this if you know what cross compiling means."
1951
    fi
1952
    die "C compiler test failed."
1953
fi
1954

    
1955
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1956
check_cflags -std=c99
1957
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1958
#include <stdlib.h>
1959
EOF
1960
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1961
#include <stdlib.h>
1962
EOF
1963

    
1964
check_host_cflags -std=c99
1965

    
1966
case "$arch" in
1967
    alpha|ia64|mips|parisc|sparc)
1968
        spic=$shared
1969
    ;;
1970
    x86)
1971
        subarch="x86_32"
1972
        check_cc <<EOF && subarch="x86_64"
1973
        int test[(int)sizeof(char*) - 7];
1974
EOF
1975
        if test "$subarch" = "x86_64"; then
1976
            spic=$shared
1977
        fi
1978
    ;;
1979
esac
1980

    
1981
enable $subarch
1982
enabled spic && enable pic
1983
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1984

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

    
2148
    *)
2149
        die "Unknown OS '$target_os'."
2150
        ;;
2151
esac
2152

    
2153
set_default $PATHS_LIST
2154

    
2155
add_extralibs $osextralibs
2156

    
2157
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2158
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2159

    
2160
# we need to build at least one lib type
2161
if ! enabled_any static shared; then
2162
    cat <<EOF
2163
At least one library type must be built.
2164
Specify --enable-static to build the static libraries or --enable-shared to
2165
build the shared libraries as well. To only build the shared libraries specify
2166
--disable-static in addition to --enable-shared.
2167
EOF
2168
    exit 1;
2169
fi
2170

    
2171
disabled static && LIBNAME=""
2172

    
2173
if enabled_any libfaad libfaadbin ; then
2174
    if check_header faad.h; then
2175
        check_cc <<EOF
2176
#include <faad.h>
2177
#ifndef FAAD2_VERSION
2178
ok faad1
2179
#endif
2180
int main(void) { return 0; }
2181
EOF
2182
        test $? = 0 && enable libfaad2
2183
    else
2184
        die "FAAD test failed."
2185
    fi
2186
fi
2187

    
2188

    
2189
die_license_disabled() {
2190
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2191
}
2192

    
2193
die_license_disabled gpl libfaad2
2194
die_license_disabled gpl libx264
2195
die_license_disabled gpl libxvid
2196
die_license_disabled gpl postproc
2197
die_license_disabled gpl x11grab
2198

    
2199
die_license_disabled nonfree libfaac
2200

    
2201
die_license_disabled version3 libopencore_amrnb
2202
die_license_disabled version3 libopencore_amrwb
2203

    
2204
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2205

    
2206
check_deps $ARCH_EXT_LIST
2207

    
2208
disabled optimizations || check_cflags -fomit-frame-pointer
2209

    
2210
enable_pic() {
2211
    enable pic
2212
    add_cppflags -DPIC
2213
    add_cflags   -fPIC
2214
    add_asflags  -fPIC
2215
}
2216

    
2217
enabled pic && enable_pic
2218

    
2219
check_cc <<EOF || die "Symbol mangling check failed."
2220
int ff_extern;
2221
EOF
2222
sym=$($nm -P -g $TMPO | grep ff_extern)
2223
extern_prefix=${sym%%ff_extern*}
2224

    
2225
check_cc <<EOF && enable inline_asm
2226
void foo(void) { __asm__ volatile ("" ::); }
2227
EOF
2228

    
2229
_restrict=
2230
for restrict_keyword in restrict __restrict__ __restrict; do
2231
    check_cc <<EOF && _restrict=$restrict_keyword && break
2232
void foo(char * $restrict_keyword p);
2233
EOF
2234
done
2235

    
2236
check_cc <<EOF && enable attribute_packed
2237
struct { int x; } __attribute__((packed)) x;
2238
EOF
2239

    
2240
check_cc <<EOF || die "endian test failed"
2241
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2242
EOF
2243
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2244

    
2245
if enabled alpha; then
2246

    
2247
    check_cflags -mieee
2248

    
2249
elif enabled arm; then
2250

    
2251
    check_cflags -marm
2252

    
2253
    check_ld <<EOF && enable vfp_args
2254
__asm__ (".eabi_attribute 28, 1");
2255
int main(void) { return 0; }
2256
EOF
2257

    
2258
    # We have to check if pld is a nop and disable it.
2259
    check_asm pld '"pld [r0]"'
2260

    
2261
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2262
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2263
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2264
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2265
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2266
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2267

    
2268
    enabled_all armv6t2 shared !pic && enable_pic
2269

    
2270
elif enabled ia64; then
2271

    
2272
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2273
    enabled shared && enable_weak hardcoded_tables
2274

    
2275
elif enabled mips; then
2276

    
2277
    check_asm loongson '"dmult.g $1, $2, $3"'
2278
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2279

    
2280
elif enabled ppc; then
2281

    
2282
    check_asm dcbzl     '"dcbzl 0, 1"'
2283
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2284
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2285

    
2286
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2287
    if enabled altivec; then
2288
        check_cflags -maltivec -mabi=altivec &&
2289
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2290
        check_cflags -faltivec
2291

    
2292
        # check if our compiler supports Motorola AltiVec C API
2293
        check_cc <<EOF || disable altivec
2294
$inc_altivec_h
2295
int main(void) {
2296
    vector signed int v1, v2, v3;
2297
    v1 = vec_add(v2,v3);
2298
    return 0;
2299
}
2300
EOF
2301

    
2302
        # check if our compiler supports braces for vector declarations
2303
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2304
$inc_altivec_h
2305
int main (void) { (vector int) {1}; return 0; }
2306
EOF
2307
    fi
2308

    
2309
elif enabled sparc; then
2310

    
2311
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2312
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2313

    
2314
elif enabled x86; then
2315

    
2316
    # check whether EBP is available on x86
2317
    # As 'i' is stored on the stack, this program will crash
2318
    # if the base pointer is used to access it because the
2319
    # base pointer is cleared in the inline assembly code.
2320
    check_exec_crash <<EOF && enable ebp_available
2321
    volatile int i=0;
2322
    __asm__ volatile (
2323
        "xorl %%ebp, %%ebp"
2324
    ::: "%ebp");
2325
    return i;
2326
EOF
2327

    
2328
    # check whether EBX is available on x86
2329
    check_asm ebx_available '""::"b"(0)' &&
2330
        check_asm ebx_available '"":::"%ebx"'
2331

    
2332
    # check whether more than 10 operands are supported
2333
    check_cc <<EOF && enable ten_operands
2334
int main(void) {
2335
    int x=0;
2336
    __asm__ volatile(
2337
        ""
2338
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2339
    );
2340
    return 0;
2341
}
2342
EOF
2343

    
2344
    # check whether binutils is new enough to compile SSSE3/MMX2
2345
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2346
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2347

    
2348
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2349

    
2350
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2351
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2352
    enabled     pic           && append YASMFLAGS "-DPIC"
2353
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2354
    case "$objformat" in
2355
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2356
    esac
2357
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2358

    
2359
    case "$cpu" in
2360
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2361
            disable fast_clz
2362
        ;;
2363
    esac
2364

    
2365
fi
2366

    
2367
if check_func dlopen; then
2368
    ldl=
2369
elif check_func dlopen -ldl; then
2370
    ldl=-ldl
2371
fi
2372

    
2373
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2374
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2375

    
2376
check_func  fork
2377
check_func  getaddrinfo $network_extralibs
2378
check_func  gethrtime
2379
check_func  getrusage
2380
check_func  inet_aton $network_extralibs
2381
check_func  isatty
2382
check_func  memalign
2383
check_func  mkstemp
2384
check_func  posix_memalign
2385
check_func_headers io.h setmode
2386
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2387
check_func_headers windows.h GetProcessTimes
2388
check_func_headers windows.h VirtualAlloc
2389

    
2390
check_header conio.h
2391
check_header dlfcn.h
2392
check_header malloc.h
2393
check_header poll.h
2394
check_header sys/mman.h
2395
check_header sys/resource.h
2396
check_header sys/select.h
2397
check_header termios.h
2398
check_header vdpau/vdpau.h
2399
check_header vdpau/vdpau_x11.h
2400
check_header X11/extensions/XvMClib.h
2401

    
2402
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2403
     enabled_any $need_memalign ; then
2404
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2405
fi
2406

    
2407
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2408
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2409

    
2410
# check for some common methods of building with pthread support
2411
# do this before the optional library checks as some of them require pthreads
2412
if enabled pthreads; then
2413
    if check_func pthread_create; then
2414
        :
2415
    elif check_func pthread_create -pthread; then
2416
        add_cflags -pthread
2417
        add_extralibs -pthread
2418
    elif check_func pthread_create -pthreads; then
2419
        add_cflags -pthreads
2420
        add_extralibs -pthreads
2421
    elif check_func pthread_create -lpthreadGC2; then
2422
        add_extralibs -lpthreadGC2
2423
    elif ! check_lib pthread.h pthread_create -lpthread; then
2424
        die "ERROR: can't find pthreads library"
2425
    fi
2426
fi
2427

    
2428
for thread in $THREADS_LIST; do
2429
    if enabled $thread; then
2430
        test -n "$thread_type" &&
2431
            die "ERROR: Only one thread type must be selected." ||
2432
            thread_type="$thread"
2433
    fi
2434
done
2435

    
2436
check_lib math.h sin -lm
2437
check_lib va/va.h vaInitialize -lva
2438

    
2439
check_func exp2
2440
check_func exp2f
2441
check_func llrint
2442
check_func log2
2443
check_func log2f
2444
check_func lrint
2445
check_func lrintf
2446
check_func round
2447
check_func roundf
2448
check_func truncf
2449

    
2450
# these are off by default, so fail if requested and not available
2451
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2452
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2453
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2454
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2455
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2456
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2457
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2458
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2459
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2460
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2461
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2462
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2463
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2464
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2465
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2466
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2467
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2468
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2469
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2470
                        die "ERROR: libx264 version must be >= 0.83."; }
2471
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2472
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2473

    
2474
# libdc1394 check
2475
if enabled libdc1394; then
2476
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2477
        enable libdc1394_2; } ||
2478
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2479
        enable libdc1394_1; } ||
2480
    die "ERROR: No version of libdc1394 found "
2481
fi
2482

    
2483
SDL_CONFIG="${cross_prefix}sdl-config"
2484
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2485
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2486
    sdl_libs=$("${SDL_CONFIG}" --libs)
2487
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2488
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2489
    enable sdl &&
2490
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2491
fi
2492

    
2493
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2494

    
2495
if enabled network; then
2496
    check_type "sys/types.h sys/socket.h" socklen_t
2497
    check_type netdb.h "struct addrinfo"
2498
    check_type sys/socket.h "struct sockaddr_storage"
2499
    # Prefer arpa/inet.h over winsock2
2500
    if check_header arpa/inet.h ; then
2501
        check_func closesocket
2502
    elif check_header winsock2.h ; then
2503
        check_func_headers winsock2.h closesocket -lws2 && \
2504
            network_extralibs="-lws2" || \
2505
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2506
            network_extralibs="-lws2_32"; }
2507
        check_type ws2tcpip.h socklen_t
2508
        check_type ws2tcpip.h "struct addrinfo"
2509
        check_type ws2tcpip.h "struct sockaddr_storage"
2510
    else
2511
        disable network
2512
    fi
2513
fi
2514

    
2515
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2516
#include <sys/types.h>
2517
#include <sys/socket.h>
2518
#include <netinet/in.h>
2519
#include <netdb.h>
2520
int main(void) {
2521
    struct sockaddr_storage saddr;
2522
    struct ipv6_mreq mreq6;
2523
    getaddrinfo(0,0,0,0);
2524
    getnameinfo(0,0,0,0,0,0,0);
2525
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2526
}
2527
EOF
2528

    
2529
check_header linux/videodev.h
2530
check_header linux/videodev2.h
2531
check_header sys/videoio.h
2532

    
2533
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2534

    
2535
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2536
{ check_header dev/bktr/ioctl_meteor.h &&
2537
  check_header dev/bktr/ioctl_bt848.h; } ||
2538
{ check_header machine/ioctl_meteor.h &&
2539
  check_header machine/ioctl_bt848.h; } ||
2540
{ check_header dev/video/meteor/ioctl_meteor.h &&
2541
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2542
check_header dev/ic/bt8xx.h
2543

    
2544
check_header sys/soundcard.h
2545
check_header soundcard.h
2546

    
2547
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2548

    
2549
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2550

    
2551
enabled x11grab                         &&
2552
check_header X11/Xlib.h                 &&
2553
check_header X11/extensions/XShm.h      &&
2554
check_header X11/extensions/Xfixes.h    &&
2555
check_func XOpenDisplay -lX11           &&
2556
check_func XShmCreateImage -lX11 -lXext &&
2557
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2558

    
2559
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2560
check_cpp_condition \
2561
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2562
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2563
      disable vdpau; }
2564
fi
2565

    
2566
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2567

    
2568
# add some useful compiler flags if supported
2569
check_cflags -Wdeclaration-after-statement
2570
check_cflags -Wall
2571
check_cflags -Wno-switch
2572
check_cflags -Wdisabled-optimization
2573
check_cflags -Wpointer-arith
2574
check_cflags -Wredundant-decls
2575
check_cflags -Wno-pointer-sign
2576
check_cflags -Wcast-qual
2577
check_cflags -Wwrite-strings
2578
check_cflags -Wtype-limits
2579
check_cflags -Wundef
2580
enabled extra_warnings && check_cflags -Winline
2581

    
2582
# add some linker flags
2583
check_ldflags -Wl,--warn-common
2584
check_ldflags -Wl,--as-needed
2585
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'
2586
check_ldflags -Wl,-Bsymbolic
2587

    
2588
echo "X{};" > $TMPV
2589
test_ldflags -Wl,--version-script,$TMPV &&
2590
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2591

    
2592
if enabled small; then
2593
    check_cflags -Os            # not all compilers support -Os
2594
    optimizations="small"
2595
elif enabled optimizations; then
2596
    if enabled xlc; then
2597
        add_cflags  -O5
2598
        add_ldflags -O5
2599
    elif enabled suncc; then
2600
        add_cflags -O5
2601
    elif enabled ccc; then
2602
        add_cflags -fast
2603
    else
2604
        add_cflags -O3
2605
    fi
2606
fi
2607
check_cflags -fno-math-errno
2608
check_cflags -fno-signed-zeros
2609

    
2610
if enabled icc; then
2611
    # Just warnings, no remarks
2612
    check_cflags -w1
2613
    # -wd: Disable following warnings
2614
    # 144, 167, 556: -Wno-pointer-sign
2615
    # 10006: ignoring unknown option -fno-signed-zeros
2616
    # 10156: ignoring option '-W'; no argument required
2617
    check_cflags -wd144,167,556,10006,10156
2618
    # 11030: Warning unknown option --as-needed
2619
    # 10156: ignoring option '-export'; no argument required
2620
    check_ldflags -wd10156,11030
2621
    # Allow to compile with optimizations
2622
    check_ldflags -march=$cpu
2623
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2624
    enable ebp_available
2625
elif enabled ccc; then
2626
    # disable some annoying warnings
2627
    add_cflags -msg_disable cvtu32to64
2628
    add_cflags -msg_disable embedcomment
2629
    add_cflags -msg_disable needconstext
2630
    add_cflags -msg_disable nomainieee
2631
    add_cflags -msg_disable ptrmismatch1
2632
    add_cflags -msg_disable unreachcode
2633
elif enabled gcc; then
2634
    check_cflags -fno-tree-vectorize
2635
elif enabled clang; then
2636
    check_cflags -Qunused-arguments
2637
fi
2638

    
2639
if enabled gprof; then
2640
    add_cflags  -p
2641
    add_ldflags -p
2642
fi
2643

    
2644
# Find out if the .align argument is a power of two or not.
2645
check_asm asmalign_pot '".align 3"'
2646

    
2647
enabled_any $DECODER_LIST      && enable decoders
2648
enabled_any $ENCODER_LIST      && enable encoders
2649
enabled_any $HWACCEL_LIST      && enable hwaccels
2650
enabled_any $BSF_LIST          && enable bsfs
2651
enabled_any $DEMUXER_LIST      && enable demuxers
2652
enabled_any $MUXER_LIST        && enable muxers
2653
enabled_any $FILTER_LIST       && enable filters
2654
enabled_any $INDEV_LIST        && enable indevs
2655
enabled_any $OUTDEV_LIST       && enable outdevs
2656
enabled_any $PROTOCOL_LIST     && enable protocols
2657

    
2658
enabled_any $THREADS_LIST      && enable threads
2659

    
2660
check_deps $CONFIG_LIST       \
2661
           $CONFIG_EXTRA      \
2662
           $HAVE_LIST         \
2663
           $DECODER_LIST      \
2664
           $ENCODER_LIST      \
2665
           $HWACCEL_LIST      \
2666
           $PARSER_LIST       \
2667
           $BSF_LIST          \
2668
           $DEMUXER_LIST      \
2669
           $MUXER_LIST        \
2670
           $FILTER_LIST       \
2671
           $INDEV_LIST        \
2672
           $OUTDEV_LIST       \
2673
           $PROTOCOL_LIST     \
2674

    
2675
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2676

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

    
2762
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2763
    echo "Enabled ${type}s:"
2764
    eval list=\$$(toupper $type)_LIST
2765
    for part in $list; do
2766
        enabled $part && echo ${part%_*}
2767
    done | sort | pr -3 -t
2768
    echo
2769
done
2770

    
2771
license="LGPL version 2.1 or later"
2772
if enabled nonfree; then
2773
    license="nonfree and unredistributable"
2774
elif enabled gplv3; then
2775
    license="GPL version 3 or later"
2776
elif enabled lgplv3; then
2777
    license="LGPL version 3 or later"
2778
elif enabled gpl; then
2779
    license="GPL version 2 or later"
2780
fi
2781

    
2782
echo "License: $license"
2783

    
2784
echo "Creating config.mak and config.h..."
2785

    
2786
# build tree in object directory if source path is different from current one
2787
if enabled source_path_used; then
2788
    DIRS="
2789
        doc
2790
        libavcodec
2791
        libavcodec/$arch
2792
        libavdevice
2793
        libavfilter
2794
        libavformat
2795
        libavutil
2796
        libavutil/$arch
2797
        libpostproc
2798
        libswscale
2799
        libswscale/$arch
2800
        tests
2801
        tools
2802
    "
2803
    FILES="
2804
        Makefile
2805
        common.mak
2806
        subdir.mak
2807
        doc/texi2pod.pl
2808
        libavcodec/Makefile
2809
        libavdevice/Makefile
2810
        libavfilter/Makefile
2811
        libavformat/Makefile
2812
        libavutil/Makefile
2813
        libpostproc/Makefile
2814
        libswscale/Makefile
2815
    "
2816
    for dir in $DIRS ; do
2817
        mkdir -p $dir
2818
    done
2819
    for f in $FILES ; do
2820
        $ln_s "$source_path/$f" $f
2821
    done
2822
fi
2823

    
2824
enabled stripping || strip="echo skipping strip"
2825

    
2826
cat > config.mak <<EOF
2827
# Automatically generated by configure - do not modify!
2828
ifndef FFMPEG_CONFIG_MAK
2829
FFMPEG_CONFIG_MAK=1
2830
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2831
prefix=$prefix
2832
LIBDIR=\$(DESTDIR)$libdir
2833
SHLIBDIR=\$(DESTDIR)$shlibdir
2834
INCDIR=\$(DESTDIR)$incdir
2835
BINDIR=\$(DESTDIR)$bindir
2836
DATADIR=\$(DESTDIR)$datadir
2837
MANDIR=\$(DESTDIR)$mandir
2838
SRC_PATH="$source_path"
2839
SRC_PATH_BARE=$source_path
2840
BUILD_ROOT="$PWD"
2841
ARCH=$arch
2842
CC=$cc
2843
AS=$as
2844
LD=$ld
2845
DEPCC=$dep_cc
2846
YASM=$yasmexe
2847
AR=$ar
2848
RANLIB=$ranlib
2849
LN_S=$ln_s
2850
STRIP=$strip
2851
CPPFLAGS=$CPPFLAGS
2852
CFLAGS=$CFLAGS
2853
ASFLAGS=$ASFLAGS
2854
CC_O=$CC_O
2855
LDFLAGS=$LDFLAGS
2856
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2857
SHFLAGS=$SHFLAGS
2858
YASMFLAGS=$YASMFLAGS
2859
BUILDSUF=$build_suffix
2860
FULLNAME=$FULLNAME
2861
LIBPREF=$LIBPREF
2862
LIBSUF=$LIBSUF
2863
LIBNAME=$LIBNAME
2864
SLIBPREF=$SLIBPREF
2865
SLIBSUF=$SLIBSUF
2866
EXESUF=$EXESUF
2867
EXTRA_VERSION=$extra_version
2868
DEPFLAGS=$DEPFLAGS
2869
CCDEP=$CCDEP
2870
ASDEP=$ASDEP
2871
CC_DEPFLAGS=$CC_DEPFLAGS
2872
AS_DEPFLAGS=$AS_DEPFLAGS
2873
HOSTCC=$host_cc
2874
HOSTCFLAGS=$host_cflags
2875
HOSTEXESUF=$HOSTEXESUF
2876
HOSTLDFLAGS=$host_ldflags
2877
HOSTLIBS=$host_libs
2878
TARGET_EXEC=$target_exec
2879
TARGET_PATH=$target_path
2880
SDL_LIBS=$sdl_libs
2881
SDL_CFLAGS=$sdl_cflags
2882
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2883
EXTRALIBS=$extralibs
2884
EOF
2885

    
2886
get_version(){
2887
    name=$1
2888
    file=$source_path/$2
2889
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2890
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2891
    lcname=$(tolower $name)
2892
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2893
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2894
}
2895

    
2896
get_version LIBSWSCALE  libswscale/swscale.h
2897
get_version LIBPOSTPROC libpostproc/postprocess.h
2898
get_version LIBAVCODEC  libavcodec/avcodec.h
2899
get_version LIBAVDEVICE libavdevice/avdevice.h
2900
get_version LIBAVFORMAT libavformat/avformat.h
2901
get_version LIBAVUTIL   libavutil/avutil.h
2902
get_version LIBAVFILTER libavfilter/avfilter.h
2903

    
2904
enabled shared && cat >> config.mak <<EOF
2905
LIBTARGET=${LIBTARGET}
2906
SLIBNAME=${SLIBNAME}
2907
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2908
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2909
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2910
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2911
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2912
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2913
EOF
2914

    
2915
enabled asmalign_pot || align_shift="1 <<"
2916

    
2917
cat > $TMPH <<EOF
2918
/* Automatically generated by configure - do not modify! */
2919
#ifndef FFMPEG_CONFIG_H
2920
#define FFMPEG_CONFIG_H
2921
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2922
#define FFMPEG_LICENSE "$(c_escape $license)"
2923
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2924
#define CC_TYPE "$cc_type"
2925
#define CC_VERSION $cc_version
2926
#define restrict $_restrict
2927
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2928
#define EXTERN_PREFIX "${extern_prefix}"
2929
#define EXTERN_ASM ${extern_prefix}
2930
EOF
2931

    
2932
if enabled small || disabled optimizations; then
2933
    echo "#define av_always_inline"  >> $TMPH
2934
fi
2935

    
2936
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2937
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2938
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2939
                                      $CONFIG_EXTRA      \
2940
                                      $DECODER_LIST      \
2941
                                      $ENCODER_LIST      \
2942
                                      $HWACCEL_LIST      \
2943
                                      $PARSER_LIST       \
2944
                                      $BSF_LIST          \
2945
                                      $DEMUXER_LIST      \
2946
                                      $MUXER_LIST        \
2947
                                      $FILTER_LIST       \
2948
                                      $PROTOCOL_LIST     \
2949
                                      $INDEV_LIST        \
2950
                                      $OUTDEV_LIST       \
2951

    
2952
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2953
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2954

    
2955
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2956
cp_if_changed $TMPH config.h
2957

    
2958
# build pkg-config files
2959

    
2960
pkgconfig_generate(){
2961
name=$1
2962
shortname=${name#lib}${build_suffix}
2963
comment=$2
2964
version=$3
2965
libs=$4
2966
requires=$5
2967
cat <<EOF > $name/$name.pc
2968
prefix=$prefix
2969
exec_prefix=\${prefix}
2970
libdir=$libdir
2971
includedir=$incdir
2972

    
2973
Name: $name
2974
Description: $comment
2975
Version: $version
2976
Requires: $(enabled shared || echo $requires)
2977
Requires.private: $(enabled shared && echo $requires)
2978
Conflicts:
2979
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2980
Libs.private: $(enabled shared && echo $libs)
2981
Cflags: -I\${includedir}
2982
EOF
2983
cat <<EOF > $name/$name-uninstalled.pc
2984
prefix=
2985
exec_prefix=
2986
libdir=\${pcfiledir}
2987
includedir=${source_path}
2988

    
2989
Name: $name
2990
Description: $comment
2991
Version: $version
2992
Requires: $requires
2993
Conflicts:
2994
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2995
Cflags: -I\${includedir}
2996
EOF
2997
}
2998

    
2999
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3000
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3001
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3002
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3003
enabled avfilter &&
3004
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3005
enabled postproc &&
3006
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3007
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"