Statistics
| Branch: | Revision:

ffmpeg / configure @ 27ce1be8

History | View | Annotate | Download (85.1 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
919
THREADS_LIST='
920
    beosthreads
921
    os2threads
922
    pthreads
923
    w32threads
924
'
925

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

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

    
968
HAVE_LIST_PUB='
969
    bigendian
970
'
971

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

    
1055
# options emitted with CONFIG_ prefix but not available on command line
1056
CONFIG_EXTRA="
1057
    gplv3
1058
    lgplv3
1059
"
1060

    
1061
CMDLINE_SELECT="
1062
    $ARCH_EXT_LIST
1063
    $CONFIG_LIST
1064
    $THREADS_LIST
1065
    asm
1066
    cross_compile
1067
    debug
1068
    extra_warnings
1069
    logging
1070
    optimizations
1071
    stripping
1072
    yasm
1073
"
1074

    
1075
PATHS_LIST='
1076
    bindir
1077
    datadir
1078
    incdir
1079
    libdir
1080
    mandir
1081
    prefix
1082
    shlibdir
1083
'
1084

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

    
1111
CMDLINE_APPEND="
1112
    extra_cflags
1113
"
1114

    
1115
# code dependency declarations
1116

    
1117
# architecture extensions
1118

    
1119
armv5te_deps="arm"
1120
armv6_deps="arm"
1121
armv6t2_deps="arm"
1122
armvfp_deps="arm"
1123
iwmmxt_deps="arm"
1124
neon_deps="arm"
1125

    
1126
mmi_deps="mips"
1127

    
1128
altivec_deps="ppc"
1129
ppc4xx_deps="ppc"
1130

    
1131
vis_deps="sparc"
1132

    
1133
x86_64_select="cmov fast_cmov"
1134
amd3dnow_deps="mmx"
1135
amd3dnowext_deps="amd3dnow"
1136
mmx_deps="x86"
1137
mmx2_deps="mmx"
1138
sse_deps="mmx"
1139
ssse3_deps="sse"
1140

    
1141
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1142
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1143
fast_unaligned_if_any="armv6 ppc x86"
1144

    
1145
need_memalign="altivec neon sse"
1146
inline_asm_deps="!tms470"
1147

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

    
1261
# parsers
1262
h264_parser_select="golomb"
1263

    
1264
# bitstream_filters
1265
aac_adtstoasc_bsf_select="aac_parser"
1266

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

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

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

    
1338
# protocols
1339
gopher_protocol_deps="network"
1340
http_protocol_deps="network"
1341
rtmp_protocol_deps="tcp_protocol"
1342
rtp_protocol_deps="udp_protocol"
1343
tcp_protocol_deps="network"
1344
udp_protocol_deps="network"
1345

    
1346
# filters
1347
movie_filter_deps="avfilter_lavf"
1348

    
1349
# programs
1350
ffplay_deps="sdl"
1351
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1352
ffserver_extralibs='$ldl'
1353

    
1354
doc_deps="texi2html"
1355

    
1356
# default parameters
1357

    
1358
logfile="config.err"
1359

    
1360
# installation paths
1361
prefix_default="/usr/local"
1362
bindir_default='${prefix}/bin'
1363
datadir_default='${prefix}/share/ffmpeg'
1364
incdir_default='${prefix}/include'
1365
libdir_default='${prefix}/lib'
1366
mandir_default='${prefix}/share/man'
1367
shlibdir_default="$libdir_default"
1368

    
1369
# toolchain
1370
ar="ar"
1371
cc_default="gcc"
1372
cc_version=\"unknown\"
1373
host_cc_default="gcc"
1374
ln_s="ln -sf"
1375
nm_default="nm"
1376
objformat="elf"
1377
ranlib="ranlib"
1378
strip="strip"
1379
yasmexe="yasm"
1380

    
1381
nm_opts='-g'
1382

    
1383
# machine
1384
arch=$(uname -m)
1385
cpu="generic"
1386

    
1387
# OS
1388
target_os=$(tolower $(uname -s))
1389
host_os=$target_os
1390

    
1391
# configurable options
1392
enable asm
1393
enable debug
1394
enable doc
1395
enable fastdiv
1396
enable ffmpeg
1397
enable ffplay
1398
enable ffserver
1399
enable mpegaudio_hp
1400
enable network
1401
enable optimizations
1402
enable protocols
1403
enable static
1404
enable stripping
1405
enable swscale_alpha
1406

    
1407
# build settings
1408
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1409
FFSERVERLDFLAGS=-Wl,-E
1410
LIBPREF="lib"
1411
LIBSUF=".a"
1412
FULLNAME='$(NAME)$(BUILDSUF)'
1413
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1414
SLIBPREF="lib"
1415
SLIBSUF=".so"
1416
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1417
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1418
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1419
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1420

    
1421
CC_O='-o $@'
1422

    
1423
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1424
host_libs='-lm'
1425

    
1426
target_path='.'
1427

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

    
1433
# find source path
1434
source_path="$(dirname "$0")"
1435
enable source_path_used
1436
if test -f configure; then
1437
    source_path="$(pwd)"
1438
    disable source_path_used
1439
else
1440
    source_path="$(cd "$source_path"; pwd)"
1441
    echo "$source_path" | grep -q '[[:blank:]]' &&
1442
        die "Out of tree builds are impossible with whitespace in source path."
1443
    test -e "$source_path/config.h" &&
1444
        die "Out of tree builds are impossible with config.h in source dir."
1445
fi
1446

    
1447
for v in "$@"; do
1448
    r=${v#*=}
1449
    l=${v%"$r"}
1450
    r=$(sh_quote "$r")
1451
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1452
done
1453

    
1454
find_things(){
1455
    thing=$1
1456
    pattern=$2
1457
    file=$source_path/$3
1458
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1459
}
1460

    
1461
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1462
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1463
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1464
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1465
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1466
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1467
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1468
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1469
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1470
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1471
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1472

    
1473
enable $ARCH_EXT_LIST \
1474
       $DECODER_LIST \
1475
       $ENCODER_LIST \
1476
       $HWACCEL_LIST \
1477
       $PARSER_LIST \
1478
       $BSF_LIST \
1479
       $DEMUXER_LIST \
1480
       $MUXER_LIST \
1481
       $FILTER_LIST \
1482
       $PROTOCOL_LIST \
1483
       $INDEV_LIST \
1484
       $OUTDEV_LIST \
1485

    
1486
die_unknown(){
1487
    echo "Unknown option \"$1\"."
1488
    echo "See $0 --help for available options."
1489
    exit 1
1490
}
1491

    
1492
show_list() {
1493
    suffix=_$1
1494
    shift
1495
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1496
    exit 0
1497
}
1498

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

    
1551
disabled logging && logfile=/dev/null
1552

    
1553
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1554
set >> $logfile
1555

    
1556
test -n "$cross_prefix" && enable cross_compile
1557

    
1558
ar="${cross_prefix}${ar}"
1559
cc_default="${cross_prefix}${cc_default}"
1560
nm_default="${cross_prefix}${nm_default}"
1561
ranlib="${cross_prefix}${ranlib}"
1562
strip="${cross_prefix}${strip}"
1563

    
1564
sysinclude_default="${sysroot}/usr/include"
1565

    
1566
set_default cc nm sysinclude
1567
enabled cross_compile || host_cc_default=$cc
1568
set_default host_cc
1569

    
1570
exesuf() {
1571
    case $1 in
1572
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1573
    esac
1574
}
1575

    
1576
EXESUF=$(exesuf $target_os)
1577
HOSTEXESUF=$(exesuf $host_os)
1578

    
1579
# set temporary file name
1580
: ${TMPDIR:=$TEMPDIR}
1581
: ${TMPDIR:=$TMP}
1582
: ${TMPDIR:=/tmp}
1583

    
1584
if ! check_cmd type mktemp; then
1585
    # simple replacement for missing mktemp
1586
    # NOT SAFE FOR GENERAL USE
1587
    mktemp(){
1588
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1589
    }
1590
fi
1591

    
1592
tmpfile(){
1593
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1594
        (set -C; exec > $tmp) 2>/dev/null ||
1595
        die "Unable to create temporary file in $TMPDIR."
1596
    append TMPFILES $tmp
1597
    eval $1=$tmp
1598
}
1599

    
1600
trap 'rm -f -- $TMPFILES' EXIT
1601
trap exit HUP INT TERM
1602

    
1603
tmpfile TMPC  .c
1604
tmpfile TMPE  $EXESUF
1605
tmpfile TMPH  .h
1606
tmpfile TMPO  .o
1607
tmpfile TMPS  .S
1608
tmpfile TMPV  .ver
1609
tmpfile TMPSH .sh
1610

    
1611
unset -f mktemp
1612

    
1613
# make sure we can execute files in $TMPDIR
1614
cat > $TMPSH 2>> $logfile <<EOF
1615
#! /bin/sh
1616
EOF
1617
chmod +x $TMPSH >> $logfile 2>&1
1618
if ! $TMPSH >> $logfile 2>&1; then
1619
    cat <<EOF
1620
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1621
variable to another directory and make sure that it is not mounted noexec.
1622
EOF
1623
    die "Sanity test failed."
1624
fi
1625

    
1626
filter_cflags=echo
1627
filter_cppflags=echo
1628
filter_asflags=echo
1629

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

    
1749
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1750

    
1751
: ${as_default:=$cc}
1752
: ${dep_cc_default:=$cc}
1753
: ${ld_default:=$cc}
1754
set_default as dep_cc ld
1755

    
1756
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1757
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1758

    
1759
add_cflags $extra_cflags
1760
add_asflags $extra_cflags
1761

    
1762
if test -n "$sysroot"; then
1763
    case "$cc_type" in
1764
        gcc)
1765
            add_cppflags --sysroot="$sysroot"
1766
            add_ldflags --sysroot="$sysroot"
1767
        ;;
1768
        tms470)
1769
            add_cppflags -I"$sysinclude"
1770
            add_ldflags  --sysroot="$sysroot"
1771
        ;;
1772
        clang)
1773
            add_cppflags -isysroot="$sysroot"
1774
            add_ldflags -isysroot="$sysroot"
1775
        ;;
1776
    esac
1777
fi
1778

    
1779
if test "$cpu" = host; then
1780
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1781

    
1782
    case "$cc_type" in
1783
        gcc)
1784
            check_native(){
1785
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1786
                sed -n "/$1=/{
1787
                            s/.*$1=\\([^ ]*\\).*/\\1/
1788
                            p
1789
                            q
1790
                        }" $TMPE
1791
            }
1792
            cpu=$(check_native -march || check_native -mcpu)
1793
        ;;
1794
    esac
1795

    
1796
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1797
fi
1798

    
1799
# Deal with common $arch aliases
1800
case "$arch" in
1801
    arm*)
1802
        arch="arm"
1803
    ;;
1804
    mips|mipsel|IP*)
1805
        arch="mips"
1806
    ;;
1807
    mips64)
1808
        arch="mips"
1809
        subarch="mips64"
1810
    ;;
1811
    parisc|hppa)
1812
        arch="parisc"
1813
    ;;
1814
    parisc64|hppa64)
1815
        arch="parisc"
1816
        subarch="parisc64"
1817
    ;;
1818
    "Power Macintosh"|ppc|powerpc)
1819
        arch="ppc"
1820
    ;;
1821
    ppc64)
1822
        arch="ppc"
1823
        subarch="ppc64"
1824
    ;;
1825
    s390|s390x)
1826
        arch="s390"
1827
    ;;
1828
    sh4|sh)
1829
        arch="sh4"
1830
    ;;
1831
    sun4u|sparc64)
1832
        arch="sparc"
1833
        subarch="sparc64"
1834
    ;;
1835
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1836
        arch="x86"
1837
    ;;
1838
esac
1839

    
1840
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1841
enable $arch
1842

    
1843
# Add processor-specific flags
1844
if test "$cpu" = generic; then
1845
    : do nothing
1846
elif enabled ppc; then
1847

    
1848
    case $cpu in
1849
        601|ppc601|PowerPC601)
1850
            cpuflags="-mcpu=601"
1851
        ;;
1852
        603*|ppc603*|PowerPC603*)
1853
            cpuflags="-mcpu=603"
1854
        ;;
1855
        604*|ppc604*|PowerPC604*)
1856
            cpuflags="-mcpu=604"
1857
        ;;
1858
        G3|g3|75*|ppc75*|PowerPC75*)
1859
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1860
        ;;
1861
        G4|g4|745*|ppc745*|PowerPC745*)
1862
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1863
        ;;
1864
        74*|ppc74*|PowerPC74*)
1865
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1866
        ;;
1867
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1868
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1869
        ;;
1870
        Cell|CELL|cell)
1871
            cpuflags="-mcpu=cell"
1872
            enable ldbrx
1873
        ;;
1874
    esac
1875

    
1876
elif enabled x86; then
1877

    
1878
    case $cpu in
1879
        i[345]86|pentium)
1880
            cpuflags="-march=$cpu"
1881
            disable mmx
1882
        ;;
1883
        # targets that do NOT support conditional mov (cmov)
1884
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1885
            cpuflags="-march=$cpu"
1886
            disable cmov
1887
        ;;
1888
        # targets that do support conditional mov (cmov)
1889
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1890
            cpuflags="-march=$cpu"
1891
            enable cmov
1892
            enable fast_cmov
1893
        ;;
1894
        # targets that do support conditional mov but on which it's slow
1895
        pentium4|pentium4m|prescott|nocona)
1896
            cpuflags="-march=$cpu"
1897
            enable cmov
1898
            disable fast_cmov
1899
        ;;
1900
    esac
1901

    
1902
elif enabled sparc; then
1903

    
1904
    case $cpu in
1905
        sparc64)
1906
            cpuflags="-mcpu=v9"
1907
        ;;
1908
    esac
1909

    
1910
elif enabled arm; then
1911

    
1912
    case $cpu in
1913
        armv*)
1914
            cpuflags="-march=$cpu"
1915
        ;;
1916
        *)
1917
            cpuflags="-mcpu=$cpu"
1918
        ;;
1919
    esac
1920

    
1921
elif enabled alpha; then
1922

    
1923
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1924

    
1925
elif enabled bfin; then
1926

    
1927
    cpuflags="-mcpu=$cpu"
1928

    
1929
elif enabled mips; then
1930

    
1931
    cpuflags="-march=$cpu"
1932

    
1933
elif enabled avr32; then
1934

    
1935
    case $cpu in
1936
        ap7[02]0[0-2])
1937
            subarch="avr32_ap"
1938
            cpuflags="-mpart=$cpu"
1939
        ;;
1940
        ap)
1941
            subarch="avr32_ap"
1942
            cpuflags="-march=$cpu"
1943
        ;;
1944
        uc3[ab]*)
1945
            subarch="avr32_uc"
1946
            cpuflags="-mcpu=$cpu"
1947
        ;;
1948
        uc)
1949
            subarch="avr32_uc"
1950
            cpuflags="-march=$cpu"
1951
        ;;
1952
    esac
1953

    
1954
fi
1955

    
1956
add_cflags $cpuflags
1957
add_asflags $cpuflags
1958

    
1959
# compiler sanity check
1960
check_exec <<EOF
1961
int main(void){ return 0; }
1962
EOF
1963
if test "$?" != 0; then
1964
    echo "$cc is unable to create an executable file."
1965
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1966
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1967
        echo "Only do this if you know what cross compiling means."
1968
    fi
1969
    die "C compiler test failed."
1970
fi
1971

    
1972
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1973
check_cflags -std=c99
1974
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1975
#include <stdlib.h>
1976
EOF
1977
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1978
#include <stdlib.h>
1979
EOF
1980

    
1981
check_host_cflags -std=c99
1982

    
1983
case "$arch" in
1984
    alpha|ia64|mips|parisc|sparc)
1985
        spic=$shared
1986
    ;;
1987
    x86)
1988
        subarch="x86_32"
1989
        check_cc <<EOF && subarch="x86_64"
1990
        int test[(int)sizeof(char*) - 7];
1991
EOF
1992
        if test "$subarch" = "x86_64"; then
1993
            spic=$shared
1994
        fi
1995
    ;;
1996
esac
1997

    
1998
enable $subarch
1999
enabled spic && enable pic
2000
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2001

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

    
2166
    *)
2167
        die "Unknown OS '$target_os'."
2168
        ;;
2169
esac
2170

    
2171
set_default $PATHS_LIST
2172

    
2173
add_extralibs $osextralibs
2174

    
2175
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2176
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2177

    
2178
# we need to build at least one lib type
2179
if ! enabled_any static shared; then
2180
    cat <<EOF
2181
At least one library type must be built.
2182
Specify --enable-static to build the static libraries or --enable-shared to
2183
build the shared libraries as well. To only build the shared libraries specify
2184
--disable-static in addition to --enable-shared.
2185
EOF
2186
    exit 1;
2187
fi
2188

    
2189
disabled static && LIBNAME=""
2190

    
2191
if enabled_any libfaad libfaadbin ; then
2192
    if check_header faad.h; then
2193
        check_cc <<EOF
2194
#include <faad.h>
2195
#ifndef FAAD2_VERSION
2196
ok faad1
2197
#endif
2198
int main(void) { return 0; }
2199
EOF
2200
        test $? = 0 && enable libfaad2
2201
    else
2202
        die "FAAD test failed."
2203
    fi
2204
fi
2205

    
2206

    
2207
die_license_disabled() {
2208
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2209
}
2210

    
2211
die_license_disabled gpl libfaad2
2212
die_license_disabled gpl libx264
2213
die_license_disabled gpl libxvid
2214
die_license_disabled gpl postproc
2215
die_license_disabled gpl x11grab
2216

    
2217
die_license_disabled nonfree libfaac
2218

    
2219
die_license_disabled version3 libopencore_amrnb
2220
die_license_disabled version3 libopencore_amrwb
2221

    
2222
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2223

    
2224
check_deps $ARCH_EXT_LIST
2225

    
2226
disabled optimizations || check_cflags -fomit-frame-pointer
2227

    
2228
enable_pic() {
2229
    enable pic
2230
    add_cppflags -DPIC
2231
    add_cflags   -fPIC
2232
    add_asflags  -fPIC
2233
}
2234

    
2235
enabled pic && enable_pic
2236

    
2237
check_cc <<EOF || die "Symbol mangling check failed."
2238
int ff_extern;
2239
EOF
2240
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2241
extern_prefix=${sym%%ff_extern*}
2242

    
2243
check_cc <<EOF && enable inline_asm
2244
void foo(void) { __asm__ volatile ("" ::); }
2245
EOF
2246

    
2247
_restrict=
2248
for restrict_keyword in restrict __restrict__ __restrict; do
2249
    check_cc <<EOF && _restrict=$restrict_keyword && break
2250
void foo(char * $restrict_keyword p);
2251
EOF
2252
done
2253

    
2254
check_cc <<EOF && enable attribute_packed
2255
struct { int x; } __attribute__((packed)) x;
2256
EOF
2257

    
2258
check_cc <<EOF || die "endian test failed"
2259
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2260
EOF
2261
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2262

    
2263
if enabled alpha; then
2264

    
2265
    check_cflags -mieee
2266

    
2267
elif enabled arm; then
2268

    
2269
    check_cflags -marm
2270

    
2271
    check_ld <<EOF && enable vfp_args
2272
__asm__ (".eabi_attribute 28, 1");
2273
int main(void) { return 0; }
2274
EOF
2275

    
2276
    # We have to check if pld is a nop and disable it.
2277
    check_asm pld '"pld [r0]"'
2278

    
2279
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2280
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2281
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2282
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2283
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2284
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2285

    
2286
    enabled_all armv6t2 shared !pic && enable_pic
2287

    
2288
elif enabled ia64; then
2289

    
2290
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2291
    enabled shared && enable_weak hardcoded_tables
2292

    
2293
elif enabled mips; then
2294

    
2295
    check_asm loongson '"dmult.g $1, $2, $3"'
2296
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2297

    
2298
elif enabled ppc; then
2299

    
2300
    check_asm dcbzl     '"dcbzl 0, 1"'
2301
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2302
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2303

    
2304
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2305
    if enabled altivec; then
2306
        check_cflags -maltivec -mabi=altivec &&
2307
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2308
        check_cflags -faltivec
2309

    
2310
        # check if our compiler supports Motorola AltiVec C API
2311
        check_cc <<EOF || disable altivec
2312
$inc_altivec_h
2313
int main(void) {
2314
    vector signed int v1, v2, v3;
2315
    v1 = vec_add(v2,v3);
2316
    return 0;
2317
}
2318
EOF
2319

    
2320
        # check if our compiler supports braces for vector declarations
2321
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2322
$inc_altivec_h
2323
int main (void) { (vector int) {1}; return 0; }
2324
EOF
2325
    fi
2326

    
2327
elif enabled sparc; then
2328

    
2329
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2330
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2331

    
2332
elif enabled x86; then
2333

    
2334
    # check whether EBP is available on x86
2335
    # As 'i' is stored on the stack, this program will crash
2336
    # if the base pointer is used to access it because the
2337
    # base pointer is cleared in the inline assembly code.
2338
    check_exec_crash <<EOF && enable ebp_available
2339
    volatile int i=0;
2340
    __asm__ volatile (
2341
        "xorl %%ebp, %%ebp"
2342
    ::: "%ebp");
2343
    return i;
2344
EOF
2345

    
2346
    # check whether EBX is available on x86
2347
    check_asm ebx_available '""::"b"(0)' &&
2348
        check_asm ebx_available '"":::"%ebx"'
2349

    
2350
    # check whether more than 10 operands are supported
2351
    check_cc <<EOF && enable ten_operands
2352
int main(void) {
2353
    int x=0;
2354
    __asm__ volatile(
2355
        ""
2356
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2357
    );
2358
    return 0;
2359
}
2360
EOF
2361

    
2362
    # check whether binutils is new enough to compile SSSE3/MMX2
2363
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2364
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2365

    
2366
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2367

    
2368
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2369
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2370
    enabled     pic           && append YASMFLAGS "-DPIC"
2371
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2372
    case "$objformat" in
2373
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2374
    esac
2375
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2376

    
2377
    case "$cpu" in
2378
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2379
            disable fast_clz
2380
        ;;
2381
    esac
2382

    
2383
fi
2384

    
2385
if check_func dlopen; then
2386
    ldl=
2387
elif check_func dlopen -ldl; then
2388
    ldl=-ldl
2389
fi
2390

    
2391
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2392
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2393

    
2394
check_func  fork
2395
check_func  getaddrinfo $network_extralibs
2396
check_func  gethrtime
2397
check_func  getrusage
2398
check_func  inet_aton $network_extralibs
2399
check_func  isatty
2400
check_func  memalign
2401
check_func  mkstemp
2402
check_func  posix_memalign
2403
check_func_headers io.h setmode
2404
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2405
check_func_headers windows.h GetProcessTimes
2406
check_func_headers windows.h VirtualAlloc
2407

    
2408
check_header conio.h
2409
check_header dlfcn.h
2410
check_header dxva2api.h
2411
check_header malloc.h
2412
check_header poll.h
2413
check_header sys/mman.h
2414
check_header sys/resource.h
2415
check_header sys/select.h
2416
check_header termios.h
2417
check_header vdpau/vdpau.h
2418
check_header vdpau/vdpau_x11.h
2419
check_header X11/extensions/XvMClib.h
2420

    
2421
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2422
     enabled_any $need_memalign ; then
2423
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2424
fi
2425

    
2426
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2427
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2428

    
2429
# check for some common methods of building with pthread support
2430
# do this before the optional library checks as some of them require pthreads
2431
if enabled pthreads; then
2432
    if check_func pthread_create; then
2433
        :
2434
    elif check_func pthread_create -pthread; then
2435
        add_cflags -pthread
2436
        add_extralibs -pthread
2437
    elif check_func pthread_create -pthreads; then
2438
        add_cflags -pthreads
2439
        add_extralibs -pthreads
2440
    elif check_func pthread_create -lpthreadGC2; then
2441
        add_extralibs -lpthreadGC2
2442
    elif ! check_lib pthread.h pthread_create -lpthread; then
2443
        die "ERROR: can't find pthreads library"
2444
    fi
2445
fi
2446

    
2447
for thread in $THREADS_LIST; do
2448
    if enabled $thread; then
2449
        test -n "$thread_type" &&
2450
            die "ERROR: Only one thread type must be selected." ||
2451
            thread_type="$thread"
2452
    fi
2453
done
2454

    
2455
check_lib math.h sin -lm
2456
check_lib va/va.h vaInitialize -lva
2457

    
2458
check_func exp2
2459
check_func exp2f
2460
check_func llrint
2461
check_func log2
2462
check_func log2f
2463
check_func lrint
2464
check_func lrintf
2465
check_func round
2466
check_func roundf
2467
check_func truncf
2468

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

    
2493
# libdc1394 check
2494
if enabled libdc1394; then
2495
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2496
        enable libdc1394_2; } ||
2497
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2498
        enable libdc1394_1; } ||
2499
    die "ERROR: No version of libdc1394 found "
2500
fi
2501

    
2502
SDL_CONFIG="${cross_prefix}sdl-config"
2503
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2504
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2505
    sdl_libs=$("${SDL_CONFIG}" --libs)
2506
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2507
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2508
    enable sdl &&
2509
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2510
fi
2511

    
2512
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2513

    
2514
if enabled network; then
2515
    check_type "sys/types.h sys/socket.h" socklen_t
2516
    check_type netdb.h "struct addrinfo"
2517
    check_type netinet/in.h "struct ipv6_mreq"
2518
    check_type netinet/in.h "struct sockaddr_in6"
2519
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2520
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2521
    # Prefer arpa/inet.h over winsock2
2522
    if check_header arpa/inet.h ; then
2523
        check_func closesocket
2524
    elif check_header winsock2.h ; then
2525
        check_func_headers winsock2.h closesocket -lws2 && \
2526
            network_extralibs="-lws2" || \
2527
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2528
            network_extralibs="-lws2_32"; }
2529
        check_type ws2tcpip.h socklen_t
2530
        check_type ws2tcpip.h "struct addrinfo"
2531
        check_type ws2tcpip.h "struct ipv6_mreq"
2532
        check_type ws2tcpip.h "struct sockaddr_in6"
2533
        check_type ws2tcpip.h "struct sockaddr_storage"
2534
        check_struct winsock2.h "struct sockaddr" sa_len
2535
    else
2536
        disable network
2537
    fi
2538
fi
2539

    
2540
check_header linux/videodev.h
2541
check_header linux/videodev2.h
2542
check_header sys/videoio.h
2543

    
2544
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2545

    
2546
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2547
{ check_header dev/bktr/ioctl_meteor.h &&
2548
  check_header dev/bktr/ioctl_bt848.h; } ||
2549
{ check_header machine/ioctl_meteor.h &&
2550
  check_header machine/ioctl_bt848.h; } ||
2551
{ check_header dev/video/meteor/ioctl_meteor.h &&
2552
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2553
check_header dev/ic/bt8xx.h
2554

    
2555
check_header sys/soundcard.h
2556
check_header soundcard.h
2557

    
2558
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2559

    
2560
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2561

    
2562
enabled x11grab                         &&
2563
check_header X11/Xlib.h                 &&
2564
check_header X11/extensions/XShm.h      &&
2565
check_header X11/extensions/Xfixes.h    &&
2566
check_func XOpenDisplay -lX11           &&
2567
check_func XShmCreateImage -lX11 -lXext &&
2568
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2569

    
2570
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2571
check_cpp_condition \
2572
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2573
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2574
      disable vdpau; }
2575
fi
2576

    
2577
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2578

    
2579
# add some useful compiler flags if supported
2580
check_cflags -Wdeclaration-after-statement
2581
check_cflags -Wall
2582
check_cflags -Wno-switch
2583
check_cflags -Wdisabled-optimization
2584
check_cflags -Wpointer-arith
2585
check_cflags -Wredundant-decls
2586
check_cflags -Wno-pointer-sign
2587
check_cflags -Wcast-qual
2588
check_cflags -Wwrite-strings
2589
check_cflags -Wtype-limits
2590
check_cflags -Wundef
2591
enabled extra_warnings && check_cflags -Winline
2592

    
2593
# add some linker flags
2594
check_ldflags -Wl,--warn-common
2595
check_ldflags -Wl,--as-needed
2596
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'
2597
check_ldflags -Wl,-Bsymbolic
2598

    
2599
echo "X{};" > $TMPV
2600
test_ldflags -Wl,--version-script,$TMPV &&
2601
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2602

    
2603
if enabled small; then
2604
    check_cflags -Os            # not all compilers support -Os
2605
    optimizations="small"
2606
elif enabled optimizations; then
2607
    if enabled xlc; then
2608
        add_cflags  -O5
2609
        add_ldflags -O5
2610
    elif enabled suncc; then
2611
        add_cflags -O5
2612
    elif enabled ccc; then
2613
        add_cflags -fast
2614
    else
2615
        add_cflags -O3
2616
    fi
2617
fi
2618
check_cflags -fno-math-errno
2619
check_cflags -fno-signed-zeros
2620

    
2621
if enabled icc; then
2622
    # Just warnings, no remarks
2623
    check_cflags -w1
2624
    # -wd: Disable following warnings
2625
    # 144, 167, 556: -Wno-pointer-sign
2626
    # 10006: ignoring unknown option -fno-signed-zeros
2627
    # 10156: ignoring option '-W'; no argument required
2628
    check_cflags -wd144,167,556,10006,10156
2629
    # 11030: Warning unknown option --as-needed
2630
    # 10156: ignoring option '-export'; no argument required
2631
    check_ldflags -wd10156,11030
2632
    # Allow to compile with optimizations
2633
    check_ldflags -march=$cpu
2634
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2635
    enable ebp_available
2636
elif enabled ccc; then
2637
    # disable some annoying warnings
2638
    add_cflags -msg_disable cvtu32to64
2639
    add_cflags -msg_disable embedcomment
2640
    add_cflags -msg_disable needconstext
2641
    add_cflags -msg_disable nomainieee
2642
    add_cflags -msg_disable ptrmismatch1
2643
    add_cflags -msg_disable unreachcode
2644
elif enabled gcc; then
2645
    check_cflags -fno-tree-vectorize
2646
elif enabled clang; then
2647
    check_cflags -Qunused-arguments
2648
elif enabled armcc; then
2649
    # 2523: use of inline assembler is deprecated
2650
    add_cflags -Wrvct,--diag_suppress=2523
2651
fi
2652

    
2653
if enabled gprof; then
2654
    add_cflags  -p
2655
    add_ldflags -p
2656
fi
2657

    
2658
# Find out if the .align argument is a power of two or not.
2659
check_asm asmalign_pot '".align 3"'
2660

    
2661
enabled_any $DECODER_LIST      && enable decoders
2662
enabled_any $ENCODER_LIST      && enable encoders
2663
enabled_any $HWACCEL_LIST      && enable hwaccels
2664
enabled_any $BSF_LIST          && enable bsfs
2665
enabled_any $DEMUXER_LIST      && enable demuxers
2666
enabled_any $MUXER_LIST        && enable muxers
2667
enabled_any $FILTER_LIST       && enable filters
2668
enabled_any $INDEV_LIST        && enable indevs
2669
enabled_any $OUTDEV_LIST       && enable outdevs
2670
enabled_any $PROTOCOL_LIST     && enable protocols
2671

    
2672
enabled_any $THREADS_LIST      && enable threads
2673

    
2674
check_deps $CONFIG_LIST       \
2675
           $CONFIG_EXTRA      \
2676
           $HAVE_LIST         \
2677
           $DECODER_LIST      \
2678
           $ENCODER_LIST      \
2679
           $HWACCEL_LIST      \
2680
           $PARSER_LIST       \
2681
           $BSF_LIST          \
2682
           $DEMUXER_LIST      \
2683
           $MUXER_LIST        \
2684
           $FILTER_LIST       \
2685
           $INDEV_LIST        \
2686
           $OUTDEV_LIST       \
2687
           $PROTOCOL_LIST     \
2688

    
2689
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2690

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

    
2773
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2774
    echo "Enabled ${type}s:"
2775
    eval list=\$$(toupper $type)_LIST
2776
    for part in $list; do
2777
        enabled $part && echo ${part%_*}
2778
    done | sort | pr -3 -t
2779
    echo
2780
done
2781

    
2782
license="LGPL version 2.1 or later"
2783
if enabled nonfree; then
2784
    license="nonfree and unredistributable"
2785
elif enabled gplv3; then
2786
    license="GPL version 3 or later"
2787
elif enabled lgplv3; then
2788
    license="LGPL version 3 or later"
2789
elif enabled gpl; then
2790
    license="GPL version 2 or later"
2791
fi
2792

    
2793
echo "License: $license"
2794

    
2795
echo "Creating config.mak and config.h..."
2796

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

    
2835
enabled stripping || strip="echo skipping strip"
2836

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

    
2897
get_version(){
2898
    name=$1
2899
    file=$source_path/$2
2900
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2901
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2902
    lcname=$(tolower $name)
2903
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2904
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2905
}
2906

    
2907
get_version LIBSWSCALE  libswscale/swscale.h
2908
get_version LIBPOSTPROC libpostproc/postprocess.h
2909
get_version LIBAVCODEC  libavcodec/avcodec.h
2910
get_version LIBAVDEVICE libavdevice/avdevice.h
2911
get_version LIBAVFORMAT libavformat/avformat.h
2912
get_version LIBAVUTIL   libavutil/avutil.h
2913
get_version LIBAVFILTER libavfilter/avfilter.h
2914

    
2915
enabled shared && cat >> config.mak <<EOF
2916
LIBTARGET=${LIBTARGET}
2917
SLIBNAME=${SLIBNAME}
2918
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2919
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2920
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2921
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2922
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2923
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2924
EOF
2925

    
2926
enabled asmalign_pot || align_shift="1 <<"
2927

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

    
2943
if enabled small || disabled optimizations; then
2944
    echo "#define av_always_inline"  >> $TMPH
2945
fi
2946

    
2947
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2948
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2949
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2950
                                      $CONFIG_EXTRA      \
2951
                                      $DECODER_LIST      \
2952
                                      $ENCODER_LIST      \
2953
                                      $HWACCEL_LIST      \
2954
                                      $PARSER_LIST       \
2955
                                      $BSF_LIST          \
2956
                                      $DEMUXER_LIST      \
2957
                                      $MUXER_LIST        \
2958
                                      $FILTER_LIST       \
2959
                                      $PROTOCOL_LIST     \
2960
                                      $INDEV_LIST        \
2961
                                      $OUTDEV_LIST       \
2962

    
2963
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2964
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2965

    
2966
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2967
cp_if_changed $TMPH config.h
2968

    
2969
cat > $TMPH <<EOF
2970
/* Generated by ffconf */
2971
#ifndef AVUTIL_AVCONFIG_H
2972
#define AVUTIL_AVCONFIG_H
2973
EOF
2974

    
2975
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
2976

    
2977
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
2978

    
2979
cp_if_changed $TMPH libavutil/avconfig.h
2980

    
2981
# build pkg-config files
2982

    
2983
pkgconfig_generate(){
2984
name=$1
2985
shortname=${name#lib}${build_suffix}
2986
comment=$2
2987
version=$3
2988
libs=$4
2989
requires=$5
2990
cat <<EOF > $name/$name.pc
2991
prefix=$prefix
2992
exec_prefix=\${prefix}
2993
libdir=$libdir
2994
includedir=$incdir
2995

    
2996
Name: $name
2997
Description: $comment
2998
Version: $version
2999
Requires: $(enabled shared || echo $requires)
3000
Requires.private: $(enabled shared && echo $requires)
3001
Conflicts:
3002
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3003
Libs.private: $(enabled shared && echo $libs)
3004
Cflags: -I\${includedir}
3005
EOF
3006
cat <<EOF > $name/$name-uninstalled.pc
3007
prefix=
3008
exec_prefix=
3009
libdir=\${pcfiledir}
3010
includedir=${source_path}
3011

    
3012
Name: $name
3013
Description: $comment
3014
Version: $version
3015
Requires: $requires
3016
Conflicts:
3017
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3018
Cflags: -I\${includedir}
3019
EOF
3020
}
3021

    
3022
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3023
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3024
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3025
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3026
enabled avfilter &&
3027
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3028
enabled postproc &&
3029
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3030
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"