Statistics
| Branch: | Revision:

ffmpeg / configure @ 48fc536a

History | View | Annotate | Download (84.7 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_PUB='
967
    bigendian
968
'
969

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

    
1050
# options emitted with CONFIG_ prefix but not available on command line
1051
CONFIG_EXTRA="
1052
    gplv3
1053
    lgplv3
1054
"
1055

    
1056
CMDLINE_SELECT="
1057
    $ARCH_EXT_LIST
1058
    $CONFIG_LIST
1059
    $THREADS_LIST
1060
    asm
1061
    cross_compile
1062
    debug
1063
    extra_warnings
1064
    logging
1065
    optimizations
1066
    stripping
1067
    yasm
1068
"
1069

    
1070
PATHS_LIST='
1071
    bindir
1072
    datadir
1073
    incdir
1074
    libdir
1075
    mandir
1076
    prefix
1077
    shlibdir
1078
'
1079

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

    
1106
CMDLINE_APPEND="
1107
    extra_cflags
1108
"
1109

    
1110
# code dependency declarations
1111

    
1112
# architecture extensions
1113

    
1114
armv5te_deps="arm"
1115
armv6_deps="arm"
1116
armv6t2_deps="arm"
1117
armvfp_deps="arm"
1118
iwmmxt_deps="arm"
1119
neon_deps="arm"
1120

    
1121
mmi_deps="mips"
1122

    
1123
altivec_deps="ppc"
1124
ppc4xx_deps="ppc"
1125

    
1126
vis_deps="sparc"
1127

    
1128
x86_64_select="cmov fast_cmov"
1129
amd3dnow_deps="mmx"
1130
amd3dnowext_deps="amd3dnow"
1131
mmx_deps="x86"
1132
mmx2_deps="mmx"
1133
sse_deps="mmx"
1134
ssse3_deps="sse"
1135

    
1136
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1137
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1138
fast_unaligned_if_any="armv6 ppc x86"
1139

    
1140
need_memalign="altivec neon sse"
1141
inline_asm_deps="!tms470"
1142

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

    
1254
# parsers
1255
h264_parser_select="golomb"
1256

    
1257
# bitstream_filters
1258
aac_adtstoasc_bsf_select="aac_parser"
1259

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

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

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

    
1331
# protocols
1332
gopher_protocol_deps="network"
1333
http_protocol_deps="network"
1334
rtmp_protocol_deps="tcp_protocol"
1335
rtp_protocol_deps="udp_protocol"
1336
tcp_protocol_deps="network"
1337
udp_protocol_deps="network"
1338

    
1339
# filters
1340
movie_filter_deps="avfilter_lavf"
1341

    
1342
# programs
1343
ffplay_deps="sdl"
1344
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1345
ffserver_extralibs='$ldl'
1346

    
1347
doc_deps="texi2html"
1348

    
1349
# default parameters
1350

    
1351
logfile="config.err"
1352

    
1353
# installation paths
1354
prefix_default="/usr/local"
1355
bindir_default='${prefix}/bin'
1356
datadir_default='${prefix}/share/ffmpeg'
1357
incdir_default='${prefix}/include'
1358
libdir_default='${prefix}/lib'
1359
mandir_default='${prefix}/share/man'
1360
shlibdir_default="$libdir_default"
1361

    
1362
# toolchain
1363
ar="ar"
1364
cc_default="gcc"
1365
cc_version=\"unknown\"
1366
host_cc_default="gcc"
1367
ln_s="ln -sf"
1368
nm_default="nm"
1369
objformat="elf"
1370
ranlib="ranlib"
1371
strip="strip"
1372
yasmexe="yasm"
1373

    
1374
# machine
1375
arch=$(uname -m)
1376
cpu="generic"
1377

    
1378
# OS
1379
target_os=$(tolower $(uname -s))
1380
host_os=$target_os
1381

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

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

    
1413
CC_O='-o $@'
1414

    
1415
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1416
host_libs='-lm'
1417

    
1418
target_path='.'
1419

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

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

    
1439
for v in "$@"; do
1440
    r=${v#*=}
1441
    l=${v%"$r"}
1442
    r=$(sh_quote "$r")
1443
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1444
done
1445

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

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

    
1465
enable $ARCH_EXT_LIST \
1466
       $DECODER_LIST \
1467
       $ENCODER_LIST \
1468
       $HWACCEL_LIST \
1469
       $PARSER_LIST \
1470
       $BSF_LIST \
1471
       $DEMUXER_LIST \
1472
       $MUXER_LIST \
1473
       $FILTER_LIST \
1474
       $PROTOCOL_LIST \
1475
       $INDEV_LIST \
1476
       $OUTDEV_LIST \
1477

    
1478
die_unknown(){
1479
    echo "Unknown option \"$1\"."
1480
    echo "See $0 --help for available options."
1481
    exit 1
1482
}
1483

    
1484
show_list() {
1485
    suffix=_$1
1486
    shift
1487
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1488
    exit 0
1489
}
1490

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

    
1543
disabled logging && logfile=/dev/null
1544

    
1545
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1546
set >> $logfile
1547

    
1548
test -n "$cross_prefix" && enable cross_compile
1549

    
1550
ar="${cross_prefix}${ar}"
1551
cc_default="${cross_prefix}${cc_default}"
1552
nm_default="${cross_prefix}${nm_default}"
1553
ranlib="${cross_prefix}${ranlib}"
1554
strip="${cross_prefix}${strip}"
1555

    
1556
sysinclude_default="${sysroot}/usr/include"
1557

    
1558
set_default cc nm sysinclude
1559
enabled cross_compile || host_cc_default=$cc
1560
set_default host_cc
1561

    
1562
exesuf() {
1563
    case $1 in
1564
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1565
    esac
1566
}
1567

    
1568
EXESUF=$(exesuf $target_os)
1569
HOSTEXESUF=$(exesuf $host_os)
1570

    
1571
# set temporary file name
1572
: ${TMPDIR:=$TEMPDIR}
1573
: ${TMPDIR:=$TMP}
1574
: ${TMPDIR:=/tmp}
1575

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

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

    
1592
trap 'rm -f -- $TMPFILES' EXIT
1593
trap exit HUP INT TERM
1594

    
1595
tmpfile TMPC  .c
1596
tmpfile TMPE  $EXESUF
1597
tmpfile TMPH  .h
1598
tmpfile TMPO  .o
1599
tmpfile TMPS  .S
1600
tmpfile TMPV  .ver
1601
tmpfile TMPSH .sh
1602

    
1603
unset -f mktemp
1604

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

    
1618
filter_cflags=echo
1619
filter_cppflags=echo
1620
filter_asflags=echo
1621

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

    
1740
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1741

    
1742
: ${as_default:=$cc}
1743
: ${dep_cc_default:=$cc}
1744
: ${ld_default:=$cc}
1745
set_default as dep_cc ld
1746

    
1747
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1748
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1749

    
1750
add_cflags $extra_cflags
1751
add_asflags $extra_cflags
1752

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

    
1770
if test "$cpu" = host; then
1771
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1772

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

    
1783
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1784
fi
1785

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

    
1827
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1828
enable $arch
1829

    
1830
# Add processor-specific flags
1831
if test "$cpu" = generic; then
1832
    : do nothing
1833
elif enabled ppc; then
1834

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

    
1863
elif enabled x86; then
1864

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

    
1889
elif enabled sparc; then
1890

    
1891
    case $cpu in
1892
        sparc64)
1893
            cpuflags="-mcpu=v9"
1894
        ;;
1895
    esac
1896

    
1897
elif enabled arm; then
1898

    
1899
    case $cpu in
1900
        armv*)
1901
            cpuflags="-march=$cpu"
1902
        ;;
1903
        *)
1904
            cpuflags="-mcpu=$cpu"
1905
        ;;
1906
    esac
1907

    
1908
elif enabled alpha; then
1909

    
1910
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1911

    
1912
elif enabled bfin; then
1913

    
1914
    cpuflags="-mcpu=$cpu"
1915

    
1916
elif enabled mips; then
1917

    
1918
    cpuflags="-march=$cpu"
1919

    
1920
elif enabled avr32; then
1921

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

    
1941
fi
1942

    
1943
add_cflags $cpuflags
1944
add_asflags $cpuflags
1945

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

    
1959
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1960
check_cflags -std=c99
1961
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1962
#include <stdlib.h>
1963
EOF
1964
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1965
#include <stdlib.h>
1966
EOF
1967

    
1968
check_host_cflags -std=c99
1969

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

    
1985
enable $subarch
1986
enabled spic && enable pic
1987
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1988

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

    
2152
    *)
2153
        die "Unknown OS '$target_os'."
2154
        ;;
2155
esac
2156

    
2157
set_default $PATHS_LIST
2158

    
2159
add_extralibs $osextralibs
2160

    
2161
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2162
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2163

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

    
2175
disabled static && LIBNAME=""
2176

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

    
2192

    
2193
die_license_disabled() {
2194
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2195
}
2196

    
2197
die_license_disabled gpl libfaad2
2198
die_license_disabled gpl libx264
2199
die_license_disabled gpl libxvid
2200
die_license_disabled gpl postproc
2201
die_license_disabled gpl x11grab
2202

    
2203
die_license_disabled nonfree libfaac
2204

    
2205
die_license_disabled version3 libopencore_amrnb
2206
die_license_disabled version3 libopencore_amrwb
2207

    
2208
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2209

    
2210
check_deps $ARCH_EXT_LIST
2211

    
2212
disabled optimizations || check_cflags -fomit-frame-pointer
2213

    
2214
enable_pic() {
2215
    enable pic
2216
    add_cppflags -DPIC
2217
    add_cflags   -fPIC
2218
    add_asflags  -fPIC
2219
}
2220

    
2221
enabled pic && enable_pic
2222

    
2223
check_cc <<EOF || die "Symbol mangling check failed."
2224
int ff_extern;
2225
EOF
2226
sym=$($nm -g $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^[:blank:]]*ff_extern/)) }')
2227
extern_prefix=${sym%%ff_extern*}
2228

    
2229
check_cc <<EOF && enable inline_asm
2230
void foo(void) { __asm__ volatile ("" ::); }
2231
EOF
2232

    
2233
_restrict=
2234
for restrict_keyword in restrict __restrict__ __restrict; do
2235
    check_cc <<EOF && _restrict=$restrict_keyword && break
2236
void foo(char * $restrict_keyword p);
2237
EOF
2238
done
2239

    
2240
check_cc <<EOF && enable attribute_packed
2241
struct { int x; } __attribute__((packed)) x;
2242
EOF
2243

    
2244
check_cc <<EOF || die "endian test failed"
2245
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2246
EOF
2247
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2248

    
2249
if enabled alpha; then
2250

    
2251
    check_cflags -mieee
2252

    
2253
elif enabled arm; then
2254

    
2255
    check_cflags -marm
2256

    
2257
    check_ld <<EOF && enable vfp_args
2258
__asm__ (".eabi_attribute 28, 1");
2259
int main(void) { return 0; }
2260
EOF
2261

    
2262
    # We have to check if pld is a nop and disable it.
2263
    check_asm pld '"pld [r0]"'
2264

    
2265
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2266
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2267
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2268
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2269
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2270
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2271

    
2272
    enabled_all armv6t2 shared !pic && enable_pic
2273

    
2274
elif enabled ia64; then
2275

    
2276
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2277
    enabled shared && enable_weak hardcoded_tables
2278

    
2279
elif enabled mips; then
2280

    
2281
    check_asm loongson '"dmult.g $1, $2, $3"'
2282
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2283

    
2284
elif enabled ppc; then
2285

    
2286
    check_asm dcbzl     '"dcbzl 0, 1"'
2287
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2288
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2289

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

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

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

    
2313
elif enabled sparc; then
2314

    
2315
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2316
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2317

    
2318
elif enabled x86; then
2319

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

    
2332
    # check whether EBX is available on x86
2333
    check_asm ebx_available '""::"b"(0)' &&
2334
        check_asm ebx_available '"":::"%ebx"'
2335

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

    
2348
    # check whether binutils is new enough to compile SSSE3/MMX2
2349
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2350
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2351

    
2352
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2353

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

    
2363
    case "$cpu" in
2364
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2365
            disable fast_clz
2366
        ;;
2367
    esac
2368

    
2369
fi
2370

    
2371
if check_func dlopen; then
2372
    ldl=
2373
elif check_func dlopen -ldl; then
2374
    ldl=-ldl
2375
fi
2376

    
2377
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2378
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2379

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

    
2394
check_header conio.h
2395
check_header dlfcn.h
2396
check_header malloc.h
2397
check_header poll.h
2398
check_header sys/mman.h
2399
check_header sys/resource.h
2400
check_header sys/select.h
2401
check_header termios.h
2402
check_header vdpau/vdpau.h
2403
check_header vdpau/vdpau_x11.h
2404
check_header X11/extensions/XvMClib.h
2405

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

    
2411
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2412
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2413

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

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

    
2440
check_lib math.h sin -lm
2441
check_lib va/va.h vaInitialize -lva
2442

    
2443
check_func exp2
2444
check_func exp2f
2445
check_func llrint
2446
check_func log2
2447
check_func log2f
2448
check_func lrint
2449
check_func lrintf
2450
check_func round
2451
check_func roundf
2452
check_func truncf
2453

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

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

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

    
2497
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2498

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

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

    
2533
check_header linux/videodev.h
2534
check_header linux/videodev2.h
2535
check_header sys/videoio.h
2536

    
2537
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2538

    
2539
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2540
{ check_header dev/bktr/ioctl_meteor.h &&
2541
  check_header dev/bktr/ioctl_bt848.h; } ||
2542
{ check_header machine/ioctl_meteor.h &&
2543
  check_header machine/ioctl_bt848.h; } ||
2544
{ check_header dev/video/meteor/ioctl_meteor.h &&
2545
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2546
check_header dev/ic/bt8xx.h
2547

    
2548
check_header sys/soundcard.h
2549
check_header soundcard.h
2550

    
2551
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2552

    
2553
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2554

    
2555
enabled x11grab                         &&
2556
check_header X11/Xlib.h                 &&
2557
check_header X11/extensions/XShm.h      &&
2558
check_header X11/extensions/Xfixes.h    &&
2559
check_func XOpenDisplay -lX11           &&
2560
check_func XShmCreateImage -lX11 -lXext &&
2561
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2562

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

    
2570
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2571

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

    
2586
# add some linker flags
2587
check_ldflags -Wl,--warn-common
2588
check_ldflags -Wl,--as-needed
2589
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'
2590
check_ldflags -Wl,-Bsymbolic
2591

    
2592
echo "X{};" > $TMPV
2593
test_ldflags -Wl,--version-script,$TMPV &&
2594
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2595

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

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

    
2643
if enabled gprof; then
2644
    add_cflags  -p
2645
    add_ldflags -p
2646
fi
2647

    
2648
# Find out if the .align argument is a power of two or not.
2649
check_asm asmalign_pot '".align 3"'
2650

    
2651
enabled_any $DECODER_LIST      && enable decoders
2652
enabled_any $ENCODER_LIST      && enable encoders
2653
enabled_any $HWACCEL_LIST      && enable hwaccels
2654
enabled_any $BSF_LIST          && enable bsfs
2655
enabled_any $DEMUXER_LIST      && enable demuxers
2656
enabled_any $MUXER_LIST        && enable muxers
2657
enabled_any $FILTER_LIST       && enable filters
2658
enabled_any $INDEV_LIST        && enable indevs
2659
enabled_any $OUTDEV_LIST       && enable outdevs
2660
enabled_any $PROTOCOL_LIST     && enable protocols
2661

    
2662
enabled_any $THREADS_LIST      && enable threads
2663

    
2664
check_deps $CONFIG_LIST       \
2665
           $CONFIG_EXTRA      \
2666
           $HAVE_LIST         \
2667
           $DECODER_LIST      \
2668
           $ENCODER_LIST      \
2669
           $HWACCEL_LIST      \
2670
           $PARSER_LIST       \
2671
           $BSF_LIST          \
2672
           $DEMUXER_LIST      \
2673
           $MUXER_LIST        \
2674
           $FILTER_LIST       \
2675
           $INDEV_LIST        \
2676
           $OUTDEV_LIST       \
2677
           $PROTOCOL_LIST     \
2678

    
2679
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2680

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

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

    
2775
license="LGPL version 2.1 or later"
2776
if enabled nonfree; then
2777
    license="nonfree and unredistributable"
2778
elif enabled gplv3; then
2779
    license="GPL version 3 or later"
2780
elif enabled lgplv3; then
2781
    license="LGPL version 3 or later"
2782
elif enabled gpl; then
2783
    license="GPL version 2 or later"
2784
fi
2785

    
2786
echo "License: $license"
2787

    
2788
echo "Creating config.mak and config.h..."
2789

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

    
2828
enabled stripping || strip="echo skipping strip"
2829

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

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

    
2900
get_version LIBSWSCALE  libswscale/swscale.h
2901
get_version LIBPOSTPROC libpostproc/postprocess.h
2902
get_version LIBAVCODEC  libavcodec/avcodec.h
2903
get_version LIBAVDEVICE libavdevice/avdevice.h
2904
get_version LIBAVFORMAT libavformat/avformat.h
2905
get_version LIBAVUTIL   libavutil/avutil.h
2906
get_version LIBAVFILTER libavfilter/avfilter.h
2907

    
2908
enabled shared && cat >> config.mak <<EOF
2909
LIBTARGET=${LIBTARGET}
2910
SLIBNAME=${SLIBNAME}
2911
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2912
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2913
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2914
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2915
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2916
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2917
EOF
2918

    
2919
enabled asmalign_pot || align_shift="1 <<"
2920

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

    
2936
if enabled small || disabled optimizations; then
2937
    echo "#define av_always_inline"  >> $TMPH
2938
fi
2939

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

    
2956
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2957
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2958

    
2959
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2960
cp_if_changed $TMPH config.h
2961

    
2962
cat > $TMPH <<EOF
2963
/* Generated by ffconf */
2964
#ifndef AVUTIL_AVCONFIG_H
2965
#define AVUTIL_AVCONFIG_H
2966
EOF
2967

    
2968
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
2969

    
2970
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
2971

    
2972
cp_if_changed $TMPH libavutil/avconfig.h
2973

    
2974
# build pkg-config files
2975

    
2976
pkgconfig_generate(){
2977
name=$1
2978
shortname=${name#lib}${build_suffix}
2979
comment=$2
2980
version=$3
2981
libs=$4
2982
requires=$5
2983
cat <<EOF > $name/$name.pc
2984
prefix=$prefix
2985
exec_prefix=\${prefix}
2986
libdir=$libdir
2987
includedir=$incdir
2988

    
2989
Name: $name
2990
Description: $comment
2991
Version: $version
2992
Requires: $(enabled shared || echo $requires)
2993
Requires.private: $(enabled shared && echo $requires)
2994
Conflicts:
2995
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2996
Libs.private: $(enabled shared && echo $libs)
2997
Cflags: -I\${includedir}
2998
EOF
2999
cat <<EOF > $name/$name-uninstalled.pc
3000
prefix=
3001
exec_prefix=
3002
libdir=\${pcfiledir}
3003
includedir=${source_path}
3004

    
3005
Name: $name
3006
Description: $comment
3007
Version: $version
3008
Requires: $requires
3009
Conflicts:
3010
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3011
Cflags: -I\${includedir}
3012
EOF
3013
}
3014

    
3015
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3016
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3017
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3018
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3019
enabled avfilter &&
3020
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3021
enabled postproc &&
3022
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3023
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"