Statistics
| Branch: | Revision:

ffmpeg / configure @ d9cd11ad

History | View | Annotate | Download (85.6 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_dxva2_hwaccel_deps="dxva2api_h"
1238
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1239
vc1_vaapi_hwaccel_deps="va_va_h"
1240
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1241
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1242
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1243
vorbis_decoder_select="fft mdct"
1244
vorbis_encoder_select="fft mdct"
1245
vp6a_decoder_select="vp6_decoder"
1246
vp6f_decoder_select="vp6_decoder"
1247
wmav1_decoder_select="fft mdct"
1248
wmav1_encoder_select="fft mdct"
1249
wmav2_decoder_select="fft mdct"
1250
wmav2_encoder_select="fft mdct"
1251
wmv1_decoder_select="h263_decoder"
1252
wmv1_encoder_select="h263_encoder"
1253
wmv2_decoder_select="h263_decoder"
1254
wmv2_encoder_select="h263_encoder"
1255
wmv3_decoder_select="vc1_decoder"
1256
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1257
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1258
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1259
zlib_decoder_select="zlib"
1260
zlib_encoder_select="zlib"
1261
zmbv_decoder_select="zlib"
1262
zmbv_encoder_select="zlib"
1263

    
1264
# parsers
1265
h264_parser_select="golomb"
1266

    
1267
# bitstream_filters
1268
aac_adtstoasc_bsf_select="aac_parser"
1269

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

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

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

    
1341
# protocols
1342
gopher_protocol_deps="network"
1343
http_protocol_deps="network"
1344
rtmp_protocol_deps="tcp_protocol"
1345
rtp_protocol_deps="udp_protocol"
1346
tcp_protocol_deps="network"
1347
udp_protocol_deps="network"
1348

    
1349
# filters
1350
movie_filter_deps="avfilter_lavf"
1351

    
1352
# programs
1353
ffplay_deps="sdl"
1354
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1355
ffserver_extralibs='$ldl'
1356

    
1357
doc_deps="texi2html"
1358

    
1359
# default parameters
1360

    
1361
logfile="config.err"
1362

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

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

    
1384
nm_opts='-g'
1385

    
1386
# machine
1387
arch=$(uname -m)
1388
cpu="generic"
1389

    
1390
# OS
1391
target_os=$(tolower $(uname -s))
1392
host_os=$target_os
1393

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

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

    
1424
CC_O='-o $@'
1425

    
1426
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1427
host_libs='-lm'
1428

    
1429
target_path='.'
1430

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

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

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

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

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

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

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

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

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

    
1554
disabled logging && logfile=/dev/null
1555

    
1556
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1557
set >> $logfile
1558

    
1559
test -n "$cross_prefix" && enable cross_compile
1560

    
1561
ar="${cross_prefix}${ar}"
1562
cc_default="${cross_prefix}${cc_default}"
1563
nm_default="${cross_prefix}${nm_default}"
1564
ranlib="${cross_prefix}${ranlib}"
1565
strip="${cross_prefix}${strip}"
1566

    
1567
sysinclude_default="${sysroot}/usr/include"
1568

    
1569
set_default cc nm sysinclude
1570
enabled cross_compile || host_cc_default=$cc
1571
set_default host_cc
1572

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

    
1579
EXESUF=$(exesuf $target_os)
1580
HOSTEXESUF=$(exesuf $host_os)
1581

    
1582
# set temporary file name
1583
: ${TMPDIR:=$TEMPDIR}
1584
: ${TMPDIR:=$TMP}
1585
: ${TMPDIR:=/tmp}
1586

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

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

    
1603
trap 'rm -f -- $TMPFILES' EXIT
1604
trap exit HUP INT TERM
1605

    
1606
tmpfile TMPC  .c
1607
tmpfile TMPE  $EXESUF
1608
tmpfile TMPH  .h
1609
tmpfile TMPO  .o
1610
tmpfile TMPS  .S
1611
tmpfile TMPV  .ver
1612
tmpfile TMPSH .sh
1613

    
1614
unset -f mktemp
1615

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

    
1629
filter_cflags=echo
1630
filter_cppflags=echo
1631
filter_asflags=echo
1632

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

    
1753
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1754

    
1755
: ${as_default:=$cc}
1756
: ${dep_cc_default:=$cc}
1757
: ${ld_default:=$cc}
1758
set_default as dep_cc ld
1759

    
1760
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1761
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1762

    
1763
add_cflags $extra_cflags
1764
add_asflags $extra_cflags
1765

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

    
1783
if test "$cpu" = host; then
1784
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1785

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

    
1800
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1801
fi
1802

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

    
1844
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1845
enable $arch
1846

    
1847
# Add processor-specific flags
1848
if test "$cpu" = generic; then
1849
    : do nothing
1850
elif enabled ppc; then
1851

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

    
1880
elif enabled x86; then
1881

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

    
1906
elif enabled sparc; then
1907

    
1908
    case $cpu in
1909
        sparc64)
1910
            cpuflags="-mcpu=v9"
1911
        ;;
1912
    esac
1913

    
1914
elif enabled arm; then
1915

    
1916
    case $cpu in
1917
        armv*)
1918
            cpuflags="-march=$cpu"
1919
        ;;
1920
        *)
1921
            cpuflags="-mcpu=$cpu"
1922
        ;;
1923
    esac
1924

    
1925
elif enabled alpha; then
1926

    
1927
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1928

    
1929
elif enabled bfin; then
1930

    
1931
    cpuflags="-mcpu=$cpu"
1932

    
1933
elif enabled mips; then
1934

    
1935
    cpuflags="-march=$cpu"
1936

    
1937
elif enabled avr32; then
1938

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

    
1958
fi
1959

    
1960
add_cflags $cpuflags
1961
add_asflags $cpuflags
1962

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

    
1976
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1977
check_cflags -std=c99
1978
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1979
#include <stdlib.h>
1980
EOF
1981
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1982
#include <stdlib.h>
1983
EOF
1984

    
1985
check_host_cflags -std=c99
1986

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

    
2002
enable $subarch
2003
enabled spic && enable pic
2004
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2005

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

    
2173
    *)
2174
        die "Unknown OS '$target_os'."
2175
        ;;
2176
esac
2177

    
2178
set_default $PATHS_LIST
2179

    
2180
add_extralibs $osextralibs
2181

    
2182
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2183
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2184

    
2185
# we need to build at least one lib type
2186
if ! enabled_any static shared; then
2187
    cat <<EOF
2188
At least one library type must be built.
2189
Specify --enable-static to build the static libraries or --enable-shared to
2190
build the shared libraries as well. To only build the shared libraries specify
2191
--disable-static in addition to --enable-shared.
2192
EOF
2193
    exit 1;
2194
fi
2195

    
2196
disabled static && LIBNAME=""
2197

    
2198
if enabled_any libfaad libfaadbin ; then
2199
    if check_header faad.h; then
2200
        check_cc <<EOF
2201
#include <faad.h>
2202
#ifndef FAAD2_VERSION
2203
ok faad1
2204
#endif
2205
int main(void) { return 0; }
2206
EOF
2207
        test $? = 0 && enable libfaad2
2208
    else
2209
        die "FAAD test failed."
2210
    fi
2211
fi
2212

    
2213

    
2214
die_license_disabled() {
2215
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2216
}
2217

    
2218
die_license_disabled gpl libfaad2
2219
die_license_disabled gpl libx264
2220
die_license_disabled gpl libxvid
2221
die_license_disabled gpl postproc
2222
die_license_disabled gpl x11grab
2223

    
2224
die_license_disabled nonfree libfaac
2225

    
2226
die_license_disabled version3 libopencore_amrnb
2227
die_license_disabled version3 libopencore_amrwb
2228

    
2229
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2230

    
2231
check_deps $ARCH_EXT_LIST
2232

    
2233
disabled optimizations || check_cflags -fomit-frame-pointer
2234

    
2235
enable_pic() {
2236
    enable pic
2237
    add_cppflags -DPIC
2238
    add_cflags   -fPIC
2239
    add_asflags  -fPIC
2240
}
2241

    
2242
enabled pic && enable_pic
2243

    
2244
check_cc <<EOF || die "Symbol mangling check failed."
2245
int ff_extern;
2246
EOF
2247
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2248
extern_prefix=${sym%%ff_extern*}
2249

    
2250
check_cc <<EOF && enable inline_asm
2251
void foo(void) { __asm__ volatile ("" ::); }
2252
EOF
2253

    
2254
_restrict=
2255
for restrict_keyword in restrict __restrict__ __restrict; do
2256
    check_cc <<EOF && _restrict=$restrict_keyword && break
2257
void foo(char * $restrict_keyword p);
2258
EOF
2259
done
2260

    
2261
check_cc <<EOF && enable attribute_packed
2262
struct { int x; } __attribute__((packed)) x;
2263
EOF
2264

    
2265
check_cc <<EOF || die "endian test failed"
2266
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2267
EOF
2268
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2269

    
2270
if enabled alpha; then
2271

    
2272
    check_cflags -mieee
2273

    
2274
elif enabled arm; then
2275

    
2276
    check_cflags -marm
2277

    
2278
    check_ld <<EOF && enable vfp_args
2279
__asm__ (".eabi_attribute 28, 1");
2280
int main(void) { return 0; }
2281
EOF
2282

    
2283
    # We have to check if pld is a nop and disable it.
2284
    check_asm pld '"pld [r0]"'
2285

    
2286
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2287
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2288
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2289
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2290
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2291
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2292

    
2293
    enabled_all armv6t2 shared !pic && enable_pic
2294

    
2295
elif enabled ia64; then
2296

    
2297
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2298
    enabled shared && enable_weak hardcoded_tables
2299

    
2300
elif enabled mips; then
2301

    
2302
    check_asm loongson '"dmult.g $1, $2, $3"'
2303
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2304

    
2305
elif enabled ppc; then
2306

    
2307
    check_asm dcbzl     '"dcbzl 0, 1"'
2308
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2309
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2310

    
2311
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2312
    if enabled altivec; then
2313
        check_cflags -maltivec -mabi=altivec &&
2314
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2315
        check_cflags -faltivec
2316

    
2317
        # check if our compiler supports Motorola AltiVec C API
2318
        check_cc <<EOF || disable altivec
2319
$inc_altivec_h
2320
int main(void) {
2321
    vector signed int v1, v2, v3;
2322
    v1 = vec_add(v2,v3);
2323
    return 0;
2324
}
2325
EOF
2326

    
2327
        # check if our compiler supports braces for vector declarations
2328
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2329
$inc_altivec_h
2330
int main (void) { (vector int) {1}; return 0; }
2331
EOF
2332
    fi
2333

    
2334
elif enabled sparc; then
2335

    
2336
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2337
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2338

    
2339
elif enabled x86; then
2340

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

    
2353
    # check whether EBX is available on x86
2354
    check_asm ebx_available '""::"b"(0)' &&
2355
        check_asm ebx_available '"":::"%ebx"'
2356

    
2357
    # check whether more than 10 operands are supported
2358
    check_cc <<EOF && enable ten_operands
2359
int main(void) {
2360
    int x=0;
2361
    __asm__ volatile(
2362
        ""
2363
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2364
    );
2365
    return 0;
2366
}
2367
EOF
2368

    
2369
    # check whether binutils is new enough to compile SSSE3/MMX2
2370
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2371
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2372

    
2373
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2374

    
2375
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2376
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2377
    enabled     pic           && append YASMFLAGS "-DPIC"
2378
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2379
    case "$objformat" in
2380
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2381
    esac
2382
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2383

    
2384
    case "$cpu" in
2385
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2386
            disable fast_clz
2387
        ;;
2388
    esac
2389

    
2390
fi
2391

    
2392
if check_func dlopen; then
2393
    ldl=
2394
elif check_func dlopen -ldl; then
2395
    ldl=-ldl
2396
fi
2397

    
2398
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2399
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2400

    
2401
check_func  fork
2402
check_func  getaddrinfo $network_extralibs
2403
check_func  gethrtime
2404
check_func  getrusage
2405
check_func  inet_aton $network_extralibs
2406
check_func  isatty
2407
check_func  memalign
2408
check_func  mkstemp
2409
check_func  posix_memalign
2410
check_func_headers io.h setmode
2411
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2412
check_func_headers windows.h GetProcessTimes
2413
check_func_headers windows.h VirtualAlloc
2414

    
2415
check_header conio.h
2416
check_header dlfcn.h
2417
check_header dxva2api.h
2418
check_header malloc.h
2419
check_header poll.h
2420
check_header sys/mman.h
2421
check_header sys/resource.h
2422
check_header sys/select.h
2423
check_header termios.h
2424
check_header vdpau/vdpau.h
2425
check_header vdpau/vdpau_x11.h
2426
check_header X11/extensions/XvMClib.h
2427

    
2428
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2429
     enabled_any $need_memalign ; then
2430
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2431
fi
2432

    
2433
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2434
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2435

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

    
2454
for thread in $THREADS_LIST; do
2455
    if enabled $thread; then
2456
        test -n "$thread_type" &&
2457
            die "ERROR: Only one thread type must be selected." ||
2458
            thread_type="$thread"
2459
    fi
2460
done
2461

    
2462
check_lib math.h sin -lm
2463
check_lib va/va.h vaInitialize -lva
2464

    
2465
check_func exp2
2466
check_func exp2f
2467
check_func llrint
2468
check_func log2
2469
check_func log2f
2470
check_func lrint
2471
check_func lrintf
2472
check_func round
2473
check_func roundf
2474
check_func truncf
2475

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

    
2500
# libdc1394 check
2501
if enabled libdc1394; then
2502
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2503
        enable libdc1394_2; } ||
2504
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2505
        enable libdc1394_1; } ||
2506
    die "ERROR: No version of libdc1394 found "
2507
fi
2508

    
2509
SDL_CONFIG="${cross_prefix}sdl-config"
2510
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2511
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2512
    sdl_libs=$("${SDL_CONFIG}" --libs)
2513
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2514
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2515
    enable sdl &&
2516
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2517
fi
2518

    
2519
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2520

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

    
2547
check_header linux/videodev.h
2548
check_header linux/videodev2.h
2549
check_header sys/videoio.h
2550

    
2551
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2552

    
2553
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2554
{ check_header dev/bktr/ioctl_meteor.h &&
2555
  check_header dev/bktr/ioctl_bt848.h; } ||
2556
{ check_header machine/ioctl_meteor.h &&
2557
  check_header machine/ioctl_bt848.h; } ||
2558
{ check_header dev/video/meteor/ioctl_meteor.h &&
2559
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2560
check_header dev/ic/bt8xx.h
2561

    
2562
check_header sys/soundcard.h
2563
check_header soundcard.h
2564

    
2565
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2566

    
2567
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2568

    
2569
enabled x11grab                         &&
2570
check_header X11/Xlib.h                 &&
2571
check_header X11/extensions/XShm.h      &&
2572
check_header X11/extensions/Xfixes.h    &&
2573
check_func XOpenDisplay -lX11           &&
2574
check_func XShmCreateImage -lX11 -lXext &&
2575
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2576

    
2577
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2578
check_cpp_condition \
2579
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2580
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2581
      disable vdpau; }
2582
fi
2583

    
2584
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2585

    
2586
# add some useful compiler flags if supported
2587
check_cflags -Wdeclaration-after-statement
2588
check_cflags -Wall
2589
check_cflags -Wno-switch
2590
check_cflags -Wdisabled-optimization
2591
check_cflags -Wpointer-arith
2592
check_cflags -Wredundant-decls
2593
check_cflags -Wno-pointer-sign
2594
check_cflags -Wcast-qual
2595
check_cflags -Wwrite-strings
2596
check_cflags -Wtype-limits
2597
check_cflags -Wundef
2598
enabled extra_warnings && check_cflags -Winline
2599

    
2600
# add some linker flags
2601
check_ldflags -Wl,--warn-common
2602
check_ldflags -Wl,--as-needed
2603
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'
2604
check_ldflags -Wl,-Bsymbolic
2605

    
2606
echo "X{};" > $TMPV
2607
test_ldflags -Wl,--version-script,$TMPV &&
2608
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2609

    
2610
if enabled small; then
2611
    check_cflags -Os            # not all compilers support -Os
2612
    optimizations="small"
2613
elif enabled optimizations; then
2614
    if enabled xlc; then
2615
        add_cflags  -O5
2616
        add_ldflags -O5
2617
    elif enabled suncc; then
2618
        add_cflags -O5
2619
    elif enabled ccc; then
2620
        add_cflags -fast
2621
    else
2622
        add_cflags -O3
2623
    fi
2624
fi
2625
check_cflags -fno-math-errno
2626
check_cflags -fno-signed-zeros
2627

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

    
2662
if enabled gprof; then
2663
    add_cflags  -p
2664
    add_ldflags -p
2665
fi
2666

    
2667
# Find out if the .align argument is a power of two or not.
2668
check_asm asmalign_pot '".align 3"'
2669

    
2670
enabled_any $DECODER_LIST      && enable decoders
2671
enabled_any $ENCODER_LIST      && enable encoders
2672
enabled_any $HWACCEL_LIST      && enable hwaccels
2673
enabled_any $BSF_LIST          && enable bsfs
2674
enabled_any $DEMUXER_LIST      && enable demuxers
2675
enabled_any $MUXER_LIST        && enable muxers
2676
enabled_any $FILTER_LIST       && enable filters
2677
enabled_any $INDEV_LIST        && enable indevs
2678
enabled_any $OUTDEV_LIST       && enable outdevs
2679
enabled_any $PROTOCOL_LIST     && enable protocols
2680

    
2681
enabled_any $THREADS_LIST      && enable threads
2682

    
2683
check_deps $CONFIG_LIST       \
2684
           $CONFIG_EXTRA      \
2685
           $HAVE_LIST         \
2686
           $DECODER_LIST      \
2687
           $ENCODER_LIST      \
2688
           $HWACCEL_LIST      \
2689
           $PARSER_LIST       \
2690
           $BSF_LIST          \
2691
           $DEMUXER_LIST      \
2692
           $MUXER_LIST        \
2693
           $FILTER_LIST       \
2694
           $INDEV_LIST        \
2695
           $OUTDEV_LIST       \
2696
           $PROTOCOL_LIST     \
2697

    
2698
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2699

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

    
2782
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2783
    echo "Enabled ${type}s:"
2784
    eval list=\$$(toupper $type)_LIST
2785
    for part in $list; do
2786
        enabled $part && echo ${part%_*}
2787
    done | sort | pr -3 -t
2788
    echo
2789
done
2790

    
2791
license="LGPL version 2.1 or later"
2792
if enabled nonfree; then
2793
    license="nonfree and unredistributable"
2794
elif enabled gplv3; then
2795
    license="GPL version 3 or later"
2796
elif enabled lgplv3; then
2797
    license="LGPL version 3 or later"
2798
elif enabled gpl; then
2799
    license="GPL version 2 or later"
2800
fi
2801

    
2802
echo "License: $license"
2803

    
2804
echo "Creating config.mak and config.h..."
2805

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

    
2844
enabled stripping || strip="echo skipping strip"
2845

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

    
2906
get_version(){
2907
    name=$1
2908
    file=$source_path/$2
2909
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2910
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2911
    lcname=$(tolower $name)
2912
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2913
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2914
}
2915

    
2916
get_version LIBSWSCALE  libswscale/swscale.h
2917
get_version LIBPOSTPROC libpostproc/postprocess.h
2918
get_version LIBAVCODEC  libavcodec/avcodec.h
2919
get_version LIBAVDEVICE libavdevice/avdevice.h
2920
get_version LIBAVFORMAT libavformat/avformat.h
2921
get_version LIBAVUTIL   libavutil/avutil.h
2922
get_version LIBAVFILTER libavfilter/avfilter.h
2923

    
2924
enabled shared && cat >> config.mak <<EOF
2925
LIBTARGET=${LIBTARGET}
2926
SLIBNAME=${SLIBNAME}
2927
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2928
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2929
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2930
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2931
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2932
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2933
EOF
2934

    
2935
enabled asmalign_pot || align_shift="1 <<"
2936

    
2937
cat > $TMPH <<EOF
2938
/* Automatically generated by configure - do not modify! */
2939
#ifndef FFMPEG_CONFIG_H
2940
#define FFMPEG_CONFIG_H
2941
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2942
#define FFMPEG_LICENSE "$(c_escape $license)"
2943
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2944
#define CC_TYPE "$cc_type"
2945
#define CC_VERSION $cc_version
2946
#define restrict $_restrict
2947
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2948
#define EXTERN_PREFIX "${extern_prefix}"
2949
#define EXTERN_ASM ${extern_prefix}
2950
EOF
2951

    
2952
if enabled small || disabled optimizations; then
2953
    echo "#define av_always_inline"  >> $TMPH
2954
fi
2955

    
2956
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2957
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2958
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2959
                                      $CONFIG_EXTRA      \
2960
                                      $DECODER_LIST      \
2961
                                      $ENCODER_LIST      \
2962
                                      $HWACCEL_LIST      \
2963
                                      $PARSER_LIST       \
2964
                                      $BSF_LIST          \
2965
                                      $DEMUXER_LIST      \
2966
                                      $MUXER_LIST        \
2967
                                      $FILTER_LIST       \
2968
                                      $PROTOCOL_LIST     \
2969
                                      $INDEV_LIST        \
2970
                                      $OUTDEV_LIST       \
2971

    
2972
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2973
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2974

    
2975
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2976
cp_if_changed $TMPH config.h
2977

    
2978
cat > $TMPH <<EOF
2979
/* Generated by ffconf */
2980
#ifndef AVUTIL_AVCONFIG_H
2981
#define AVUTIL_AVCONFIG_H
2982
EOF
2983

    
2984
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
2985

    
2986
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
2987

    
2988
cp_if_changed $TMPH libavutil/avconfig.h
2989

    
2990
# build pkg-config files
2991

    
2992
pkgconfig_generate(){
2993
name=$1
2994
shortname=${name#lib}${build_suffix}
2995
comment=$2
2996
version=$3
2997
libs=$4
2998
requires=$5
2999
cat <<EOF > $name/$name.pc
3000
prefix=$prefix
3001
exec_prefix=\${prefix}
3002
libdir=$libdir
3003
includedir=$incdir
3004

    
3005
Name: $name
3006
Description: $comment
3007
Version: $version
3008
Requires: $(enabled shared || echo $requires)
3009
Requires.private: $(enabled shared && echo $requires)
3010
Conflicts:
3011
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3012
Libs.private: $(enabled shared && echo $libs)
3013
Cflags: -I\${includedir}
3014
EOF
3015
cat <<EOF > $name/$name-uninstalled.pc
3016
prefix=
3017
exec_prefix=
3018
libdir=\${pcfiledir}
3019
includedir=${source_path}
3020

    
3021
Name: $name
3022
Description: $comment
3023
Version: $version
3024
Requires: $requires
3025
Conflicts:
3026
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3027
Cflags: -I\${includedir}
3028
EOF
3029
}
3030

    
3031
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3032
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3033
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3034
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3035
enabled avfilter &&
3036
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3037
enabled postproc &&
3038
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3039
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"