Statistics
| Branch: | Revision:

ffmpeg / configure @ 64ad53ff

History | View | Annotate | Download (86.7 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

    
244
NOTE: Object files are built at the place where configure is launched.
245
EOF
246
  exit 0
247
}
248

    
249
log(){
250
    echo "$@" >> $logfile
251
}
252

    
253
log_file(){
254
    log BEGIN $1
255
    pr -n -t $1 >> $logfile
256
    log END $1
257
}
258

    
259
echolog(){
260
    log "$@"
261
    echo "$@"
262
}
263

    
264
die(){
265
    echolog "$@"
266
    cat <<EOF
267

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

    
286
# Avoid locale weirdness, besides we really just want to translate ASCII.
287
toupper(){
288
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
289
}
290

    
291
tolower(){
292
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
293
}
294

    
295
c_escape(){
296
    echo "$*" | sed 's/["\\]/\\\0/g'
297
}
298

    
299
sh_quote(){
300
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
301
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
302
    echo "$v"
303
}
304

    
305
filter(){
306
    pat=$1
307
    shift
308
    for v; do
309
        eval "case $v in $pat) echo $v ;; esac"
310
    done
311
}
312

    
313
set_all(){
314
    value=$1
315
    shift
316
    for var in $*; do
317
        eval $var=$value
318
    done
319
}
320

    
321
set_weak(){
322
    value=$1
323
    shift
324
    for var; do
325
        eval : \${$var:=$value}
326
    done
327
}
328

    
329
pushvar(){
330
    for var in $*; do
331
        eval level=\${${var}_level:=0}
332
        eval ${var}_${level}="\$$var"
333
        eval ${var}_level=$(($level+1))
334
    done
335
}
336

    
337
popvar(){
338
    for var in $*; do
339
        eval level=\${${var}_level:-0}
340
        test $level = 0 && continue
341
        eval level=$(($level-1))
342
        eval $var="\${${var}_${level}}"
343
        eval ${var}_level=$level
344
        eval unset ${var}_${level}
345
    done
346
}
347

    
348
enable(){
349
    set_all yes $*
350
}
351

    
352
disable(){
353
    set_all no $*
354
}
355

    
356
enable_weak(){
357
    set_weak yes $*
358
}
359

    
360
disable_weak(){
361
    set_weak no $*
362
}
363

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

    
370
disable_safe(){
371
    for var; do
372
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
373
    done
374
}
375

    
376
do_enable_deep(){
377
    for var; do
378
        enabled $var && continue
379
        eval sel="\$${var}_select"
380
        eval sgs="\$${var}_suggest"
381
        pushvar var sgs
382
        enable_deep $sel
383
        popvar sgs
384
        enable_deep_weak $sgs
385
        popvar var
386
    done
387
}
388

    
389
enable_deep(){
390
    do_enable_deep $*
391
    enable $*
392
}
393

    
394
enable_deep_weak(){
395
    do_enable_deep $*
396
    enable_weak $*
397
}
398

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

    
404
disabled(){
405
    test "${1#!}" = "$1" && op== || op=!=
406
    eval test "x\$${1#!}" $op "xno"
407
}
408

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

    
415
disabled_all(){
416
    for opt; do
417
        disabled $opt || return 1
418
    done
419
}
420

    
421
enabled_any(){
422
    for opt; do
423
        enabled $opt && return 0
424
    done
425
}
426

    
427
disabled_any(){
428
    for opt; do
429
        disabled $opt && return 0
430
    done
431
    return 1
432
}
433

    
434
set_default(){
435
    for opt; do
436
        eval : \${$opt:=\$${opt}_default}
437
    done
438
}
439

    
440
is_in(){
441
    value=$1
442
    shift
443
    for var in $*; do
444
        [ $var = $value ] && return 0
445
    done
446
    return 1
447
}
448

    
449
check_deps(){
450
    for cfg; do
451
        cfg="${cfg#!}"
452
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
453
        disabled ${cfg}_checking && continue
454
        enable ${cfg}_checking
455

    
456
        eval dep_all="\$${cfg}_deps"
457
        eval dep_any="\$${cfg}_deps_any"
458
        eval dep_sel="\$${cfg}_select"
459
        eval dep_sgs="\$${cfg}_suggest"
460
        eval dep_ifa="\$${cfg}_if"
461
        eval dep_ifn="\$${cfg}_if_any"
462

    
463
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
464
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
465
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
466

    
467
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
468
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
469
        enabled_all  $dep_all || disable $cfg
470
        enabled_any  $dep_any || disable $cfg
471
        disabled_any $dep_sel && disable $cfg
472

    
473
        if enabled $cfg; then
474
            eval dep_extralibs="\$${cfg}_extralibs"
475
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
476
            enable_deep $dep_sel
477
            enable_deep_weak $dep_sgs
478
        fi
479

    
480
        disable ${cfg}_checking
481
    done
482
}
483

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

    
501
flags_saved(){
502
    (: ${SAVE_CFLAGS?}) 2> /dev/null
503
}
504

    
505
save_flags(){
506
    flags_saved && return
507
    SAVE_CFLAGS="$CFLAGS"
508
    SAVE_LDFLAGS="$LDFLAGS"
509
    SAVE_extralibs="$extralibs"
510
}
511

    
512
restore_flags(){
513
    flags_saved || return
514
    CFLAGS="$SAVE_CFLAGS"
515
    LDFLAGS="$SAVE_LDFLAGS"
516
    extralibs="$SAVE_extralibs"
517
    unset SAVE_CFLAGS
518
    unset SAVE_LDFLAGS
519
    unset SAVE_extralibs
520
}
521

    
522
temp_cflags(){
523
    save_flags
524
    CFLAGS="$CFLAGS $*"
525
}
526

    
527
temp_ldflags(){
528
    save_flags
529
    LDFLAGS="$LDFLAGS $*"
530
}
531

    
532
temp_extralibs(){
533
    save_flags
534
    extralibs="$extralibs $*"
535
}
536

    
537
append(){
538
    var=$1
539
    shift
540
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
541
    eval "$var=\"\$$var $*\""
542
}
543

    
544
add_cppflags(){
545
    append CPPFLAGS $($filter_cppflags "$@")
546
}
547

    
548
add_cflags(){
549
    append CFLAGS $($filter_cflags "$@")
550
}
551

    
552
add_asflags(){
553
    append ASFLAGS $($filter_asflags "$@")
554
}
555

    
556
add_ldflags(){
557
    append LDFLAGS "$@"
558
}
559

    
560
add_extralibs(){
561
    append extralibs "$@"
562
}
563

    
564
check_cmd(){
565
    log "$@"
566
    "$@" >> $logfile 2>&1
567
}
568

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

    
576
check_cpp(){
577
    log check_cpp "$@"
578
    cat > $TMPC
579
    log_file $TMPC
580
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
581
}
582

    
583
check_as(){
584
    log check_as "$@"
585
    cat > $TMPC
586
    log_file $TMPC
587
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
588
}
589

    
590
check_asm(){
591
    log check_asm "$@"
592
    name="$1"
593
    code="$2"
594
    shift 2
595
    disable $name
596
    check_as "$@" <<EOF && enable $name
597
void foo(void){ __asm__ volatile($code); }
598
EOF
599
}
600

    
601
check_yasm(){
602
    log check_yasm "$@"
603
    echo "$1" > $TMPS
604
    log_file $TMPS
605
    shift 1
606
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
607
}
608

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

    
620
check_cppflags(){
621
    log check_cppflags "$@"
622
    set -- $($filter_cppflags "$@")
623
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
624
int x;
625
EOF
626
}
627

    
628
check_cflags(){
629
    log check_cflags "$@"
630
    set -- $($filter_cflags "$@")
631
    check_cc "$@" <<EOF && append CFLAGS "$@"
632
int x;
633
EOF
634
}
635

    
636
test_ldflags(){
637
    log test_ldflags "$@"
638
    check_ld "$@" <<EOF
639
int main(void){ return 0; }
640
EOF
641
}
642

    
643
check_ldflags(){
644
    log check_ldflags "$@"
645
    test_ldflags "$@" && add_ldflags "$@"
646
}
647

    
648
check_header(){
649
    log check_header "$@"
650
    header=$1
651
    shift
652
    disable_safe $header
653
    check_cpp "$@" <<EOF && enable_safe $header
654
#include <$header>
655
int x;
656
EOF
657
}
658

    
659
check_func(){
660
    log check_func "$@"
661
    func=$1
662
    shift
663
    disable $func
664
    check_ld "$@" <<EOF && enable $func
665
extern int $func();
666
int main(void){ $func(); }
667
EOF
668
}
669

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

    
689
check_cpp_condition(){
690
    log check_cpp_condition "$@"
691
    header=$1
692
    condition=$2
693
    shift 2
694
    check_cpp $($filter_cppflags "$@") <<EOF
695
#include <$header>
696
#if !($condition)
697
#error "unsatisfied condition: $condition"
698
#endif
699
EOF
700
}
701

    
702
check_lib(){
703
    log check_lib "$@"
704
    header="$1"
705
    func="$2"
706
    shift 2
707
    temp_extralibs "$@"
708
    check_header $header && check_func $func && add_extralibs "$@"
709
    err=$?
710
    restore_flags
711
    return $err
712
}
713

    
714
check_lib2(){
715
    log check_lib2 "$@"
716
    headers="$1"
717
    func="$2"
718
    shift 2
719
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
720
}
721

    
722
check_exec(){
723
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
724
}
725

    
726
check_exec_crash(){
727
    code=$(cat)
728

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

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

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

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

    
787
require(){
788
    name="$1"
789
    header="$2"
790
    func="$3"
791
    shift 3
792
    check_lib $header $func "$@" || die "ERROR: $name not found"
793
}
794

    
795
require2(){
796
    name="$1"
797
    headers="$2"
798
    func="$3"
799
    shift 3
800
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
801
}
802

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

    
820
check_host_cc(){
821
    log check_host_cc "$@"
822
    cat > $TMPC
823
    log_file $TMPC
824
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
825
}
826

    
827
check_host_cflags(){
828
    log check_host_cflags "$@"
829
    check_host_cc "$@" <<EOF && append host_cflags "$@"
830
int x;
831
EOF
832
}
833

    
834
apply(){
835
    file=$1
836
    shift
837
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
838
}
839

    
840
cp_if_changed(){
841
    cmp -s "$1" "$2" &&
842
        echo "$2 is unchanged" ||
843
        cp -f "$1" "$2"
844
}
845

    
846
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
847
# system-dependent things.
848

    
849
COMPONENT_LIST="
850
    bsfs
851
    decoders
852
    demuxers
853
    encoders
854
    filters
855
    hwaccels
856
    indevs
857
    muxers
858
    outdevs
859
    parsers
860
    protocols
861
"
862

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

    
928
THREADS_LIST='
929
    beosthreads
930
    os2threads
931
    pthreads
932
    w32threads
933
'
934

    
935
ARCH_LIST='
936
    alpha
937
    arm
938
    avr32
939
    avr32_ap
940
    avr32_uc
941
    bfin
942
    ia64
943
    m68k
944
    mips
945
    mips64
946
    parisc
947
    ppc
948
    ppc64
949
    s390
950
    sh4
951
    sparc
952
    sparc64
953
    x86
954
    x86_32
955
    x86_64
956
'
957

    
958
ARCH_EXT_LIST='
959
    altivec
960
    amd3dnow
961
    amd3dnowext
962
    armv5te
963
    armv6
964
    armv6t2
965
    armvfp
966
    iwmmxt
967
    mmi
968
    mmx
969
    mmx2
970
    neon
971
    ppc4xx
972
    sse
973
    ssse3
974
    vis
975
'
976

    
977
HAVE_LIST_PUB='
978
    bigendian
979
'
980

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

    
1065
# options emitted with CONFIG_ prefix but not available on command line
1066
CONFIG_EXTRA="
1067
    avutil
1068
    gplv3
1069
    lgplv3
1070
"
1071

    
1072
CMDLINE_SELECT="
1073
    $ARCH_EXT_LIST
1074
    $CONFIG_LIST
1075
    $THREADS_LIST
1076
    asm
1077
    cross_compile
1078
    debug
1079
    extra_warnings
1080
    logging
1081
    optimizations
1082
    stripping
1083
    yasm
1084
"
1085

    
1086
PATHS_LIST='
1087
    bindir
1088
    datadir
1089
    incdir
1090
    libdir
1091
    mandir
1092
    prefix
1093
    shlibdir
1094
'
1095

    
1096
CMDLINE_SET="
1097
    $PATHS_LIST
1098
    arch
1099
    as
1100
    build_suffix
1101
    cc
1102
    cpu
1103
    cross_prefix
1104
    dep_cc
1105
    extra_version
1106
    host_cc
1107
    host_cflags
1108
    host_ldflags
1109
    host_libs
1110
    host_os
1111
    ld
1112
    logfile
1113
    malloc_prefix
1114
    nm
1115
    source_path
1116
    sysinclude
1117
    sysroot
1118
    target_exec
1119
    target_os
1120
    target_path
1121
"
1122

    
1123
CMDLINE_APPEND="
1124
    extra_cflags
1125
"
1126

    
1127
# code dependency declarations
1128

    
1129
# architecture extensions
1130

    
1131
armv5te_deps="arm"
1132
armv6_deps="arm"
1133
armv6t2_deps="arm"
1134
armvfp_deps="arm"
1135
iwmmxt_deps="arm"
1136
neon_deps="arm"
1137

    
1138
mmi_deps="mips"
1139

    
1140
altivec_deps="ppc"
1141
ppc4xx_deps="ppc"
1142

    
1143
vis_deps="sparc"
1144

    
1145
x86_64_suggest="cmov fast_cmov"
1146
amd3dnow_deps="mmx"
1147
amd3dnowext_deps="amd3dnow"
1148
mmx_deps="x86"
1149
mmx2_deps="mmx"
1150
sse_deps="mmx"
1151
ssse3_deps="sse"
1152

    
1153
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1154
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1155
fast_unaligned_if_any="armv6 ppc x86"
1156

    
1157
need_memalign="altivec neon sse"
1158
inline_asm_deps="!tms470"
1159

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

    
1276
# parsers
1277
h264_parser_select="golomb"
1278

    
1279
# bitstream_filters
1280
aac_adtstoasc_bsf_select="aac_parser"
1281

    
1282
# external libraries
1283
libdirac_decoder_deps="libdirac !libschroedinger"
1284
libdirac_encoder_deps="libdirac"
1285
libfaac_encoder_deps="libfaac"
1286
libfaad_decoder_deps="libfaad"
1287
libfaadbin_decoder_extralibs='$ldl'
1288
libgsm_decoder_deps="libgsm"
1289
libgsm_encoder_deps="libgsm"
1290
libgsm_ms_decoder_deps="libgsm"
1291
libgsm_ms_encoder_deps="libgsm"
1292
libmp3lame_encoder_deps="libmp3lame"
1293
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1294
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1295
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1296
libopenjpeg_decoder_deps="libopenjpeg"
1297
libschroedinger_decoder_deps="libschroedinger"
1298
libschroedinger_encoder_deps="libschroedinger"
1299
libspeex_decoder_deps="libspeex"
1300
libtheora_encoder_deps="libtheora"
1301
libvorbis_encoder_deps="libvorbis"
1302
libx264_encoder_deps="libx264"
1303
libxvid_encoder_deps="libxvid"
1304

    
1305
# demuxers / muxers
1306
ac3_demuxer_deps="ac3_parser"
1307
asf_stream_muxer_select="asf_muxer"
1308
avisynth_demuxer_deps="avisynth"
1309
dirac_demuxer_deps="dirac_parser"
1310
eac3_demuxer_select="ac3_parser"
1311
ipod_muxer_select="mov_muxer"
1312
libnut_demuxer_deps="libnut"
1313
libnut_muxer_deps="libnut"
1314
matroska_audio_muxer_select="matroska_muxer"
1315
matroska_demuxer_suggest="zlib bzlib"
1316
mov_demuxer_suggest="zlib"
1317
mp3_demuxer_deps="mpegaudio_parser"
1318
mp4_muxer_select="mov_muxer"
1319
mpegtsraw_demuxer_select="mpegts_demuxer"
1320
mxf_d10_muxer_select="mxf_muxer"
1321
ogg_demuxer_select="golomb"
1322
psp_muxer_select="mov_muxer"
1323
rtsp_demuxer_deps="sdp_demuxer"
1324
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1325
spdif_muxer_select="aac_parser"
1326
tg2_muxer_select="mov_muxer"
1327
tgp_muxer_select="mov_muxer"
1328
w64_demuxer_deps="wav_demuxer"
1329

    
1330
# indevs / outdevs
1331
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1332
alsa_indev_extralibs="-lasound"
1333
alsa_outdev_deps="alsa_asoundlib_h"
1334
alsa_outdev_extralibs="-lasound"
1335
audio_beos_indev_deps="audio_beos"
1336
audio_beos_indev_extralibs="-lmedia -lbe"
1337
audio_beos_outdev_deps="audio_beos"
1338
audio_beos_outdev_extralibs="-lmedia -lbe"
1339
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1340
dv1394_indev_deps="dv1394 dv_demuxer"
1341
jack_indev_deps="jack_jack_h"
1342
jack_indev_extralibs="-ljack"
1343
libdc1394_indev_deps="libdc1394"
1344
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1345
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1346
v4l_indev_deps="linux_videodev_h"
1347
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1348
vfwcap_indev_deps="capCreateCaptureWindow"
1349
vfwcap_indev_extralibs="-lavicap32"
1350
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1351
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1352

    
1353
# protocols
1354
gopher_protocol_deps="network"
1355
http_protocol_deps="network"
1356
rtmp_protocol_deps="tcp_protocol"
1357
rtp_protocol_deps="udp_protocol"
1358
tcp_protocol_deps="network"
1359
udp_protocol_deps="network"
1360

    
1361
# filters
1362
movie_filter_deps="avfilter_lavf"
1363
avfilter_lavf_deps="avformat"
1364

    
1365
# libraries
1366
avdevice_deps="avcodec avformat"
1367
avformat_deps="avcodec"
1368

    
1369
# programs
1370
ffmpeg_deps="avcodec avformat swscale"
1371
ffplay_deps="avcodec avformat swscale sdl"
1372
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1373
ffserver_extralibs='$ldl'
1374

    
1375
doc_deps="texi2html"
1376

    
1377
# default parameters
1378

    
1379
logfile="config.err"
1380

    
1381
# installation paths
1382
prefix_default="/usr/local"
1383
bindir_default='${prefix}/bin'
1384
datadir_default='${prefix}/share/ffmpeg'
1385
incdir_default='${prefix}/include'
1386
libdir_default='${prefix}/lib'
1387
mandir_default='${prefix}/share/man'
1388
shlibdir_default="$libdir_default"
1389

    
1390
# toolchain
1391
ar="ar"
1392
cc_default="gcc"
1393
cc_version=\"unknown\"
1394
host_cc_default="gcc"
1395
ln_s="ln -sf"
1396
nm_default="nm"
1397
objformat="elf"
1398
ranlib="ranlib"
1399
strip="strip"
1400
yasmexe="yasm"
1401

    
1402
nm_opts='-g'
1403

    
1404
# machine
1405
arch=$(uname -m)
1406
cpu="generic"
1407

    
1408
# OS
1409
target_os=$(tolower $(uname -s))
1410
host_os=$target_os
1411

    
1412
# configurable options
1413
enable avcodec
1414
enable avdevice
1415
enable avformat
1416
enable avutil
1417
enable asm
1418
enable debug
1419
enable doc
1420
enable fastdiv
1421
enable ffmpeg
1422
enable ffplay
1423
enable ffserver
1424
enable mpegaudio_hp
1425
enable network
1426
enable optimizations
1427
enable protocols
1428
enable static
1429
enable stripping
1430
enable swscale
1431
enable swscale_alpha
1432

    
1433
# build settings
1434
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1435
FFSERVERLDFLAGS=-Wl,-E
1436
LIBPREF="lib"
1437
LIBSUF=".a"
1438
FULLNAME='$(NAME)$(BUILDSUF)'
1439
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1440
SLIBPREF="lib"
1441
SLIBSUF=".so"
1442
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1443
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1444
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1445
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1446

    
1447
CC_O='-o $@'
1448

    
1449
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1450
host_libs='-lm'
1451

    
1452
target_path='$(CURDIR)'
1453

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

    
1459
# find source path
1460
source_path="$(dirname "$0")"
1461
enable source_path_used
1462
if test -f configure; then
1463
    source_path="$(pwd)"
1464
    disable source_path_used
1465
else
1466
    source_path="$(cd "$source_path"; pwd)"
1467
    echo "$source_path" | grep -q '[[:blank:]]' &&
1468
        die "Out of tree builds are impossible with whitespace in source path."
1469
    test -e "$source_path/config.h" &&
1470
        die "Out of tree builds are impossible with config.h in source dir."
1471
fi
1472

    
1473
for v in "$@"; do
1474
    r=${v#*=}
1475
    l=${v%"$r"}
1476
    r=$(sh_quote "$r")
1477
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1478
done
1479

    
1480
find_things(){
1481
    thing=$1
1482
    pattern=$2
1483
    file=$source_path/$3
1484
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1485
}
1486

    
1487
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1488
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1489
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1490
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1491
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1492
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1493
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1494
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1495
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1496
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1497
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1498

    
1499
enable $ARCH_EXT_LIST \
1500
       $DECODER_LIST \
1501
       $ENCODER_LIST \
1502
       $HWACCEL_LIST \
1503
       $PARSER_LIST \
1504
       $BSF_LIST \
1505
       $DEMUXER_LIST \
1506
       $MUXER_LIST \
1507
       $FILTER_LIST \
1508
       $PROTOCOL_LIST \
1509
       $INDEV_LIST \
1510
       $OUTDEV_LIST \
1511

    
1512
die_unknown(){
1513
    echo "Unknown option \"$1\"."
1514
    echo "See $0 --help for available options."
1515
    exit 1
1516
}
1517

    
1518
show_list() {
1519
    suffix=_$1
1520
    shift
1521
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1522
    exit 0
1523
}
1524

    
1525
for opt do
1526
    optval="${opt#*=}"
1527
    case "$opt" in
1528
    --extra-ldflags=*) add_ldflags $optval
1529
    ;;
1530
    --extra-libs=*) add_extralibs $optval
1531
    ;;
1532
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1533
    ;;
1534
    --enable-debug=*) debuglevel="$optval"
1535
    ;;
1536
    --enable-*=*|--disable-*=*)
1537
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1538
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1539
    eval list=\$$(toupper $thing)_LIST
1540
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1541
    $action $(filter "$name" $list)
1542
    ;;
1543
    --enable-?*|--disable-?*)
1544
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1545
    if is_in $option $COMPONENT_LIST; then
1546
        test $action = disable && action=unset
1547
        eval $action \$$(toupper ${option%s})_LIST
1548
    elif is_in $option $CMDLINE_SELECT; then
1549
        $action $option
1550
    else
1551
        die_unknown $opt
1552
    fi
1553
    ;;
1554
    --list-*)
1555
        NAME="${opt#--list-}"
1556
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1557
        NAME=${NAME%s}
1558
        eval show_list $NAME \$$(toupper $NAME)_LIST
1559
    ;;
1560
    --help|-h) show_help
1561
    ;;
1562
    *)
1563
    optname="${opt%%=*}"
1564
    optname="${optname#--}"
1565
    optname=$(echo "$optname" | sed 's/-/_/g')
1566
    if is_in $optname $CMDLINE_SET; then
1567
        eval $optname='$optval'
1568
    elif is_in $optname $CMDLINE_APPEND; then
1569
        append $optname "$optval"
1570
    else
1571
         die_unknown $opt
1572
    fi
1573
    ;;
1574
    esac
1575
done
1576

    
1577
disabled logging && logfile=/dev/null
1578

    
1579
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1580
set >> $logfile
1581

    
1582
test -n "$cross_prefix" && enable cross_compile
1583

    
1584
ar="${cross_prefix}${ar}"
1585
cc_default="${cross_prefix}${cc_default}"
1586
nm_default="${cross_prefix}${nm_default}"
1587
ranlib="${cross_prefix}${ranlib}"
1588
strip="${cross_prefix}${strip}"
1589

    
1590
sysinclude_default="${sysroot}/usr/include"
1591

    
1592
set_default cc nm sysinclude
1593
enabled cross_compile || host_cc_default=$cc
1594
set_default host_cc
1595

    
1596
exesuf() {
1597
    case $1 in
1598
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1599
    esac
1600
}
1601

    
1602
EXESUF=$(exesuf $target_os)
1603
HOSTEXESUF=$(exesuf $host_os)
1604

    
1605
# set temporary file name
1606
: ${TMPDIR:=$TEMPDIR}
1607
: ${TMPDIR:=$TMP}
1608
: ${TMPDIR:=/tmp}
1609

    
1610
if ! check_cmd type mktemp; then
1611
    # simple replacement for missing mktemp
1612
    # NOT SAFE FOR GENERAL USE
1613
    mktemp(){
1614
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1615
    }
1616
fi
1617

    
1618
tmpfile(){
1619
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1620
        (set -C; exec > $tmp) 2>/dev/null ||
1621
        die "Unable to create temporary file in $TMPDIR."
1622
    append TMPFILES $tmp
1623
    eval $1=$tmp
1624
}
1625

    
1626
trap 'rm -f -- $TMPFILES' EXIT
1627
trap exit HUP INT TERM
1628

    
1629
tmpfile TMPC  .c
1630
tmpfile TMPE  $EXESUF
1631
tmpfile TMPH  .h
1632
tmpfile TMPO  .o
1633
tmpfile TMPS  .S
1634
tmpfile TMPV  .ver
1635
tmpfile TMPSH .sh
1636

    
1637
unset -f mktemp
1638

    
1639
# make sure we can execute files in $TMPDIR
1640
cat > $TMPSH 2>> $logfile <<EOF
1641
#! /bin/sh
1642
EOF
1643
chmod +x $TMPSH >> $logfile 2>&1
1644
if ! $TMPSH >> $logfile 2>&1; then
1645
    cat <<EOF
1646
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1647
variable to another directory and make sure that it is not mounted noexec.
1648
EOF
1649
    die "Sanity test failed."
1650
fi
1651

    
1652
filter_cflags=echo
1653
filter_cppflags=echo
1654
filter_asflags=echo
1655

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

    
1790
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1791

    
1792
: ${as_default:=$cc}
1793
: ${dep_cc_default:=$cc}
1794
: ${ld_default:=$cc}
1795
set_default as dep_cc ld
1796

    
1797
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1798
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1799

    
1800
add_cflags $extra_cflags
1801
add_asflags $extra_cflags
1802

    
1803
if test -n "$sysroot"; then
1804
    case "$cc_type" in
1805
        gcc)
1806
            add_cppflags --sysroot="$sysroot"
1807
            add_ldflags --sysroot="$sysroot"
1808
        ;;
1809
        tms470)
1810
            add_cppflags -I"$sysinclude"
1811
            add_ldflags  --sysroot="$sysroot"
1812
        ;;
1813
        clang)
1814
            add_cppflags -isysroot="$sysroot"
1815
            add_ldflags -isysroot="$sysroot"
1816
        ;;
1817
    esac
1818
fi
1819

    
1820
if test "$cpu" = host; then
1821
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1822

    
1823
    case "$cc_type" in
1824
        gcc)
1825
            check_native(){
1826
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1827
                sed -n "/$1=/{
1828
                            s/.*$1=\\([^ ]*\\).*/\\1/
1829
                            p
1830
                            q
1831
                        }" $TMPE
1832
            }
1833
            cpu=$(check_native -march || check_native -mcpu)
1834
        ;;
1835
    esac
1836

    
1837
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1838
fi
1839

    
1840
# Deal with common $arch aliases
1841
case "$arch" in
1842
    arm*)
1843
        arch="arm"
1844
    ;;
1845
    mips|mipsel|IP*)
1846
        arch="mips"
1847
    ;;
1848
    mips64)
1849
        arch="mips"
1850
        subarch="mips64"
1851
    ;;
1852
    parisc|hppa)
1853
        arch="parisc"
1854
    ;;
1855
    parisc64|hppa64)
1856
        arch="parisc"
1857
        subarch="parisc64"
1858
    ;;
1859
    "Power Macintosh"|ppc|powerpc)
1860
        arch="ppc"
1861
    ;;
1862
    ppc64)
1863
        arch="ppc"
1864
        subarch="ppc64"
1865
    ;;
1866
    s390|s390x)
1867
        arch="s390"
1868
    ;;
1869
    sh4|sh)
1870
        arch="sh4"
1871
    ;;
1872
    sun4u|sparc64)
1873
        arch="sparc"
1874
        subarch="sparc64"
1875
    ;;
1876
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1877
        arch="x86"
1878
    ;;
1879
esac
1880

    
1881
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1882
enable $arch
1883

    
1884
# Add processor-specific flags
1885
if test "$cpu" = generic; then
1886
    : do nothing
1887
elif enabled ppc; then
1888

    
1889
    case $(tolower $cpu) in
1890
        601|ppc601|powerpc601)
1891
            cpuflags="-mcpu=601"
1892
            disable altivec
1893
        ;;
1894
        603*|ppc603*|powerpc603*)
1895
            cpuflags="-mcpu=603"
1896
            disable altivec
1897
        ;;
1898
        604*|ppc604*|powerpc604*)
1899
            cpuflags="-mcpu=604"
1900
            disable altivec
1901
        ;;
1902
        g3|75*|ppc75*|powerpc75*)
1903
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1904
            disable altivec
1905
        ;;
1906
        g4|745*|ppc745*|powerpc745*)
1907
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1908
        ;;
1909
        74*|ppc74*|powerpc74*)
1910
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1911
        ;;
1912
        g5|970|ppc970|powerpc970|power4*)
1913
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1914
        ;;
1915
        cell)
1916
            cpuflags="-mcpu=cell"
1917
            enable ldbrx
1918
        ;;
1919
        e500v2)
1920
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1921
            disable altivec
1922
        ;;
1923
        e500)
1924
            cpuflags="-mcpu=8540 -mhard-float"
1925
            disable altivec
1926
        ;;
1927
    esac
1928

    
1929
elif enabled x86; then
1930

    
1931
    case $cpu in
1932
        i[345]86|pentium)
1933
            cpuflags="-march=$cpu"
1934
            disable mmx
1935
        ;;
1936
        # targets that do NOT support conditional mov (cmov)
1937
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1938
            cpuflags="-march=$cpu"
1939
            disable cmov
1940
        ;;
1941
        # targets that do support conditional mov (cmov)
1942
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1943
            cpuflags="-march=$cpu"
1944
            enable cmov
1945
            enable fast_cmov
1946
        ;;
1947
        # targets that do support conditional mov but on which it's slow
1948
        pentium4|pentium4m|prescott|nocona)
1949
            cpuflags="-march=$cpu"
1950
            enable cmov
1951
            disable fast_cmov
1952
        ;;
1953
    esac
1954

    
1955
elif enabled sparc; then
1956

    
1957
    case $cpu in
1958
        sparc64)
1959
            cpuflags="-mcpu=v9"
1960
        ;;
1961
    esac
1962

    
1963
elif enabled arm; then
1964

    
1965
    case $cpu in
1966
        armv*)
1967
            cpuflags="-march=$cpu"
1968
        ;;
1969
        *)
1970
            cpuflags="-mcpu=$cpu"
1971
        ;;
1972
    esac
1973

    
1974
elif enabled alpha; then
1975

    
1976
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1977

    
1978
elif enabled bfin; then
1979

    
1980
    cpuflags="-mcpu=$cpu"
1981

    
1982
elif enabled mips; then
1983

    
1984
    cpuflags="-march=$cpu"
1985

    
1986
elif enabled avr32; then
1987

    
1988
    case $cpu in
1989
        ap7[02]0[0-2])
1990
            subarch="avr32_ap"
1991
            cpuflags="-mpart=$cpu"
1992
        ;;
1993
        ap)
1994
            subarch="avr32_ap"
1995
            cpuflags="-march=$cpu"
1996
        ;;
1997
        uc3[ab]*)
1998
            subarch="avr32_uc"
1999
            cpuflags="-mcpu=$cpu"
2000
        ;;
2001
        uc)
2002
            subarch="avr32_uc"
2003
            cpuflags="-march=$cpu"
2004
        ;;
2005
    esac
2006

    
2007
fi
2008

    
2009
add_cflags $cpuflags
2010
add_asflags $cpuflags
2011

    
2012
# compiler sanity check
2013
check_exec <<EOF
2014
int main(void){ return 0; }
2015
EOF
2016
if test "$?" != 0; then
2017
    echo "$cc is unable to create an executable file."
2018
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2019
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2020
        echo "Only do this if you know what cross compiling means."
2021
    fi
2022
    die "C compiler test failed."
2023
fi
2024

    
2025
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2026
check_cflags -std=c99
2027
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2028
#include <stdlib.h>
2029
EOF
2030
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2031
#include <stdlib.h>
2032
EOF
2033

    
2034
check_host_cflags -std=c99
2035

    
2036
case "$arch" in
2037
    alpha|ia64|mips|parisc|sparc)
2038
        spic=$shared
2039
    ;;
2040
    x86)
2041
        subarch="x86_32"
2042
        check_cc <<EOF && subarch="x86_64"
2043
        int test[(int)sizeof(char*) - 7];
2044
EOF
2045
        if test "$subarch" = "x86_64"; then
2046
            spic=$shared
2047
        fi
2048
    ;;
2049
esac
2050

    
2051
enable $subarch
2052
enabled spic && enable pic
2053
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2054

    
2055
# OS specific
2056
case $target_os in
2057
    beos|haiku|zeta)
2058
        prefix_default="$HOME/config"
2059
        # 3 gcc releases known for BeOS, each with ugly bugs
2060
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
2061
        case "$gcc_version" in
2062
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
2063
            disable mmx
2064
            ;;
2065
          *20010315*) echo "BeBits gcc"
2066
            add_cflags -fno-expensive-optimizations
2067
            ;;
2068
        esac
2069
        SHFLAGS=-nostart
2070
        # enable BeOS things
2071
        enable audio_beos
2072
        # no need for libm, but the inet stuff
2073
        # Check for BONE
2074
        # XXX: actually should check for NOT net_server
2075
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
2076
            network_extralibs="-lbind -lsocket"
2077
        else
2078
            enable beos_netserver
2079
            network_extralibs="-lnet"
2080
        fi ;;
2081
    sunos)
2082
        FFSERVERLDFLAGS=""
2083
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2084
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2085
        network_extralibs="-lsocket -lnsl"
2086
        add_cppflags -D__EXTENSIONS__
2087
        nm_opts='-P -g'
2088
        ;;
2089
    netbsd)
2090
        oss_indev_extralibs="-lossaudio"
2091
        oss_outdev_extralibs="-lossaudio"
2092
        ;;
2093
    openbsd)
2094
        enable malloc_aligned
2095
        # On OpenBSD 4.5. the compiler does not use PIC unless
2096
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2097
        # however the generated executable will not do anything
2098
        # (simply quits with exit-code 1, no crash, no output).
2099
        # Thus explicitly enable PIC here.
2100
        enable pic
2101
        SHFLAGS='-shared'
2102
        oss_indev_extralibs="-lossaudio"
2103
        oss_outdev_extralibs="-lossaudio"
2104
        ;;
2105
    freebsd|dragonfly)
2106
        enable malloc_aligned
2107
        ;;
2108
    bsd/os)
2109
        osextralibs="-lpoll -lgnugetopt"
2110
        strip="strip -d"
2111
        ;;
2112
    darwin)
2113
        enable malloc_aligned
2114
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2115
        strip="strip -x"
2116
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2117
        SLIBSUF=".dylib"
2118
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2119
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2120
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2121
        objformat="macho"
2122
        enabled x86_64 && objformat="macho64"
2123
        enabled_any pic shared ||
2124
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2125
        ;;
2126
    mingw32*)
2127
        if test $target_os = "mingw32ce"; then
2128
            disable network
2129
        else
2130
            target_os=mingw32
2131
        fi
2132
        LIBTARGET=i386
2133
        if enabled x86_64; then
2134
            enable malloc_aligned
2135
            LIBTARGET=x64
2136
        elif enabled arm; then
2137
            LIBTARGET=arm
2138
        fi
2139
        shlibdir_default="$bindir_default"
2140
        disable ffserver
2141
        SLIBPREF=""
2142
        SLIBSUF=".dll"
2143
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2144
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2145
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2146
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2147
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2148
            install -d "$(LIBDIR)"; \
2149
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2150
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2151
        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'
2152
        objformat="win32"
2153
        enable dos_paths
2154
        check_cflags -fno-common
2155
        if ! enabled x86_64; then
2156
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2157
                die "ERROR: MinGW runtime version must be >= 3.15."
2158
            enabled_any avisynth vfwcap_indev &&
2159
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2160
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2161
        fi
2162
        ;;
2163
    cygwin*)
2164
        target_os=cygwin
2165
        shlibdir_default="$bindir_default"
2166
        SLIBPREF="cyg"
2167
        SLIBSUF=".dll"
2168
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2169
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2170
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2171
        objformat="win32"
2172
        enable dos_paths
2173
        check_cflags -fno-common
2174
        ;;
2175
    *-dos|freedos|opendos)
2176
        disable ffplay ffserver
2177
        disable $INDEV_LIST $OUTDEV_LIST
2178
        network_extralibs="-lsocket"
2179
        objformat="coff"
2180
        enable dos_paths
2181
        ;;
2182
    linux)
2183
        enable dv1394
2184
        ;;
2185
    irix*)
2186
        target_os=irix
2187
        ranlib="echo ignoring ranlib"
2188
        ;;
2189
    os/2*)
2190
        strip="lxlite"
2191
        ln_s="cp -f"
2192
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2193
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2194
        FFSERVERLDFLAGS=""
2195
        LIBSUF="_s.a"
2196
        SLIBPREF=""
2197
        SLIBSUF=".dll"
2198
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2199
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2200
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2201
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2202
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2203
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2204
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2205
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2206
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2207
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2208
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2209
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2210
        enable dos_paths
2211
        ;;
2212
    gnu/kfreebsd)
2213
        ;;
2214
    gnu)
2215
        ;;
2216

    
2217
    *)
2218
        die "Unknown OS '$target_os'."
2219
        ;;
2220
esac
2221

    
2222
set_default $PATHS_LIST
2223

    
2224
add_extralibs $osextralibs
2225

    
2226
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2227
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2228

    
2229
# we need to build at least one lib type
2230
if ! enabled_any static shared; then
2231
    cat <<EOF
2232
At least one library type must be built.
2233
Specify --enable-static to build the static libraries or --enable-shared to
2234
build the shared libraries as well. To only build the shared libraries specify
2235
--disable-static in addition to --enable-shared.
2236
EOF
2237
    exit 1;
2238
fi
2239

    
2240
disabled static && LIBNAME=""
2241

    
2242
if enabled_any libfaad libfaadbin ; then
2243
    if check_header faad.h; then
2244
        check_cc <<EOF
2245
#include <faad.h>
2246
#ifndef FAAD2_VERSION
2247
ok faad1
2248
#endif
2249
int main(void) { return 0; }
2250
EOF
2251
        test $? = 0 && enable libfaad2
2252
    else
2253
        die "FAAD test failed."
2254
    fi
2255
fi
2256

    
2257

    
2258
die_license_disabled() {
2259
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2260
}
2261

    
2262
die_license_disabled gpl libfaad2
2263
die_license_disabled gpl libx264
2264
die_license_disabled gpl libxvid
2265
die_license_disabled gpl postproc
2266
die_license_disabled gpl x11grab
2267

    
2268
die_license_disabled nonfree libfaac
2269

    
2270
die_license_disabled version3 libopencore_amrnb
2271
die_license_disabled version3 libopencore_amrwb
2272

    
2273
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2274

    
2275
check_deps $ARCH_EXT_LIST
2276

    
2277
disabled optimizations || check_cflags -fomit-frame-pointer
2278

    
2279
enable_pic() {
2280
    enable pic
2281
    add_cppflags -DPIC
2282
    add_cflags   -fPIC
2283
    add_asflags  -fPIC
2284
}
2285

    
2286
enabled pic && enable_pic
2287

    
2288
check_cc <<EOF || die "Symbol mangling check failed."
2289
int ff_extern;
2290
EOF
2291
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2292
extern_prefix=${sym%%ff_extern*}
2293

    
2294
check_cc <<EOF && enable inline_asm
2295
void foo(void) { __asm__ volatile ("" ::); }
2296
EOF
2297

    
2298
_restrict=
2299
for restrict_keyword in restrict __restrict__ __restrict; do
2300
    check_cc <<EOF && _restrict=$restrict_keyword && break
2301
void foo(char * $restrict_keyword p);
2302
EOF
2303
done
2304

    
2305
check_cc <<EOF && enable attribute_packed
2306
struct { int x; } __attribute__((packed)) x;
2307
EOF
2308

    
2309
check_cc <<EOF && enable attribute_may_alias
2310
union { int x; } __attribute__((may_alias)) x;
2311
EOF
2312

    
2313
check_cc <<EOF || die "endian test failed"
2314
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2315
EOF
2316
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2317

    
2318
if enabled alpha; then
2319

    
2320
    check_cflags -mieee
2321

    
2322
elif enabled arm; then
2323

    
2324
    check_cflags -marm
2325

    
2326
    check_ld <<EOF && enable vfp_args
2327
__asm__ (".eabi_attribute 28, 1");
2328
int main(void) { return 0; }
2329
EOF
2330

    
2331
    # We have to check if pld is a nop and disable it.
2332
    check_asm pld '"pld [r0]"'
2333

    
2334
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2335
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2336
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2337
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2338
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2339
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2340

    
2341
    enabled_all armv6t2 shared !pic && enable_pic
2342

    
2343
elif enabled ia64; then
2344

    
2345
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2346
    enabled shared && enable_weak hardcoded_tables
2347

    
2348
elif enabled mips; then
2349

    
2350
    check_asm loongson '"dmult.g $1, $2, $3"'
2351
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2352

    
2353
elif enabled ppc; then
2354

    
2355
    check_asm dcbzl     '"dcbzl 0, 1"'
2356
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2357
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2358

    
2359
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2360
    if enabled altivec; then
2361
        check_cflags -maltivec -mabi=altivec &&
2362
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2363
        check_cflags -faltivec
2364

    
2365
        # check if our compiler supports Motorola AltiVec C API
2366
        check_cc <<EOF || disable altivec
2367
$inc_altivec_h
2368
int main(void) {
2369
    vector signed int v1, v2, v3;
2370
    v1 = vec_add(v2,v3);
2371
    return 0;
2372
}
2373
EOF
2374

    
2375
        # check if our compiler supports braces for vector declarations
2376
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2377
$inc_altivec_h
2378
int main (void) { (vector int) {1}; return 0; }
2379
EOF
2380
    fi
2381

    
2382
elif enabled sparc; then
2383

    
2384
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2385
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2386

    
2387
elif enabled x86; then
2388

    
2389
    # check whether EBP is available on x86
2390
    # As 'i' is stored on the stack, this program will crash
2391
    # if the base pointer is used to access it because the
2392
    # base pointer is cleared in the inline assembly code.
2393
    check_exec_crash <<EOF && enable ebp_available
2394
    volatile int i=0;
2395
    __asm__ volatile (
2396
        "xorl %%ebp, %%ebp"
2397
    ::: "%ebp");
2398
    return i;
2399
EOF
2400

    
2401
    # check whether EBX is available on x86
2402
    check_asm ebx_available '""::"b"(0)' &&
2403
        check_asm ebx_available '"":::"%ebx"'
2404

    
2405
    # check whether more than 10 operands are supported
2406
    check_cc <<EOF && enable ten_operands
2407
int main(void) {
2408
    int x=0;
2409
    __asm__ volatile(
2410
        ""
2411
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2412
    );
2413
    return 0;
2414
}
2415
EOF
2416

    
2417
    # check whether binutils is new enough to compile SSSE3/MMX2
2418
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2419
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2420

    
2421
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2422

    
2423
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2424
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2425
    enabled     pic           && append YASMFLAGS "-DPIC"
2426
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2427
    case "$objformat" in
2428
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2429
    esac
2430
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2431

    
2432
    case "$cpu" in
2433
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2434
            disable fast_clz
2435
        ;;
2436
    esac
2437

    
2438
fi
2439

    
2440
if check_func dlopen; then
2441
    ldl=
2442
elif check_func dlopen -ldl; then
2443
    ldl=-ldl
2444
fi
2445

    
2446
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2447
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2448

    
2449
check_func  fork
2450
check_func  getaddrinfo $network_extralibs
2451
check_func  gethrtime
2452
check_func  getrusage
2453
check_func  inet_aton $network_extralibs
2454
check_func  isatty
2455
check_func  ${malloc_prefix}memalign            && enable memalign
2456
check_func  mkstemp
2457
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2458
check_func_headers io.h setmode
2459
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2460
check_func_headers windows.h GetProcessTimes
2461
check_func_headers windows.h VirtualAlloc
2462

    
2463
check_header conio.h
2464
check_header dlfcn.h
2465
check_header dxva2api.h
2466
check_header malloc.h
2467
check_header poll.h
2468
check_header sys/mman.h
2469
check_header sys/resource.h
2470
check_header sys/select.h
2471
check_header termios.h
2472
check_header vdpau/vdpau.h
2473
check_header vdpau/vdpau_x11.h
2474
check_header X11/extensions/XvMClib.h
2475

    
2476
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2477

    
2478
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2479
     enabled_any $need_memalign ; then
2480
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2481
fi
2482

    
2483
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2484
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2485

    
2486
# check for some common methods of building with pthread support
2487
# do this before the optional library checks as some of them require pthreads
2488
if enabled pthreads; then
2489
    if check_func pthread_create; then
2490
        :
2491
    elif check_func pthread_create -pthread; then
2492
        add_cflags -pthread
2493
        add_extralibs -pthread
2494
    elif check_func pthread_create -pthreads; then
2495
        add_cflags -pthreads
2496
        add_extralibs -pthreads
2497
    elif check_func pthread_create -lpthreadGC2; then
2498
        add_extralibs -lpthreadGC2
2499
    elif ! check_lib pthread.h pthread_create -lpthread; then
2500
        die "ERROR: can't find pthreads library"
2501
    fi
2502
fi
2503

    
2504
for thread in $THREADS_LIST; do
2505
    if enabled $thread; then
2506
        test -n "$thread_type" &&
2507
            die "ERROR: Only one thread type must be selected." ||
2508
            thread_type="$thread"
2509
    fi
2510
done
2511

    
2512
check_lib math.h sin -lm
2513
check_lib va/va.h vaInitialize -lva
2514

    
2515
check_func exp2
2516
check_func exp2f
2517
check_func llrint
2518
check_func log2
2519
check_func log2f
2520
check_func lrint
2521
check_func lrintf
2522
check_func round
2523
check_func roundf
2524
check_func truncf
2525

    
2526
# these are off by default, so fail if requested and not available
2527
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2528
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2529
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2530
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2531
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2532
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2533
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2534
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2535
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2536
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2537
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2538
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2539
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2540
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2541
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2542
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2543
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2544
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2545
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2546
                        die "ERROR: libx264 version must be >= 0.83."; }
2547
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2548
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2549

    
2550
# libdc1394 check
2551
if enabled libdc1394; then
2552
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2553
        enable libdc1394_2; } ||
2554
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2555
        enable libdc1394_1; } ||
2556
    die "ERROR: No version of libdc1394 found "
2557
fi
2558

    
2559
SDL_CONFIG="${cross_prefix}sdl-config"
2560
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2561
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2562
    sdl_libs=$("${SDL_CONFIG}" --libs)
2563
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2564
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2565
    enable sdl &&
2566
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2567
fi
2568

    
2569
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2570

    
2571
if enabled network; then
2572
    check_type "sys/types.h sys/socket.h" socklen_t
2573
    check_type netdb.h "struct addrinfo"
2574
    check_type netinet/in.h "struct ipv6_mreq"
2575
    check_type netinet/in.h "struct sockaddr_in6"
2576
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2577
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2578
    # Prefer arpa/inet.h over winsock2
2579
    if check_header arpa/inet.h ; then
2580
        check_func closesocket
2581
    elif check_header winsock2.h ; then
2582
        check_func_headers winsock2.h closesocket -lws2 && \
2583
            network_extralibs="-lws2" || \
2584
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2585
            network_extralibs="-lws2_32"; }
2586
        check_type ws2tcpip.h socklen_t
2587
        check_type ws2tcpip.h "struct addrinfo"
2588
        check_type ws2tcpip.h "struct ipv6_mreq"
2589
        check_type ws2tcpip.h "struct sockaddr_in6"
2590
        check_type ws2tcpip.h "struct sockaddr_storage"
2591
        check_struct winsock2.h "struct sockaddr" sa_len
2592
    else
2593
        disable network
2594
    fi
2595
fi
2596

    
2597
check_header linux/videodev.h
2598
check_header linux/videodev2.h
2599
check_header sys/videoio.h
2600

    
2601
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2602

    
2603
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2604
{ check_header dev/bktr/ioctl_meteor.h &&
2605
  check_header dev/bktr/ioctl_bt848.h; } ||
2606
{ check_header machine/ioctl_meteor.h &&
2607
  check_header machine/ioctl_bt848.h; } ||
2608
{ check_header dev/video/meteor/ioctl_meteor.h &&
2609
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2610
check_header dev/ic/bt8xx.h
2611

    
2612
check_header sys/soundcard.h
2613
check_header soundcard.h
2614

    
2615
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2616

    
2617
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2618

    
2619
enabled x11grab                         &&
2620
check_header X11/Xlib.h                 &&
2621
check_header X11/extensions/XShm.h      &&
2622
check_header X11/extensions/Xfixes.h    &&
2623
check_func XOpenDisplay -lX11           &&
2624
check_func XShmCreateImage -lX11 -lXext &&
2625
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2626

    
2627
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2628
check_cpp_condition \
2629
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2630
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2631
      disable vdpau; }
2632
fi
2633

    
2634
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2635

    
2636
# add some useful compiler flags if supported
2637
check_cflags -Wdeclaration-after-statement
2638
check_cflags -Wall
2639
check_cflags -Wno-switch
2640
check_cflags -Wdisabled-optimization
2641
check_cflags -Wpointer-arith
2642
check_cflags -Wredundant-decls
2643
check_cflags -Wno-pointer-sign
2644
check_cflags -Wcast-qual
2645
check_cflags -Wwrite-strings
2646
check_cflags -Wtype-limits
2647
check_cflags -Wundef
2648
enabled extra_warnings && check_cflags -Winline
2649

    
2650
# add some linker flags
2651
check_ldflags -Wl,--warn-common
2652
check_ldflags -Wl,--as-needed
2653
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'
2654
check_ldflags -Wl,-Bsymbolic
2655

    
2656
echo "X{};" > $TMPV
2657
test_ldflags -Wl,--version-script,$TMPV &&
2658
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2659

    
2660
if enabled small; then
2661
    add_cflags $size_cflags
2662
    optimizations="small"
2663
elif enabled optimizations; then
2664
    add_cflags $speed_cflags
2665
fi
2666
check_cflags -fno-math-errno
2667
check_cflags -fno-signed-zeros
2668

    
2669
if enabled icc; then
2670
    # Just warnings, no remarks
2671
    check_cflags -w1
2672
    # -wd: Disable following warnings
2673
    # 144, 167, 556: -Wno-pointer-sign
2674
    # 10006: ignoring unknown option -fno-signed-zeros
2675
    # 10156: ignoring option '-W'; no argument required
2676
    check_cflags -wd144,167,556,10006,10156
2677
    # 11030: Warning unknown option --as-needed
2678
    # 10156: ignoring option '-export'; no argument required
2679
    check_ldflags -wd10156,11030
2680
    # Allow to compile with optimizations
2681
    check_ldflags -march=$cpu
2682
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2683
    enable ebp_available
2684
elif enabled ccc; then
2685
    # disable some annoying warnings
2686
    add_cflags -msg_disable cvtu32to64
2687
    add_cflags -msg_disable embedcomment
2688
    add_cflags -msg_disable needconstext
2689
    add_cflags -msg_disable nomainieee
2690
    add_cflags -msg_disable ptrmismatch1
2691
    add_cflags -msg_disable unreachcode
2692
elif enabled gcc; then
2693
    check_cflags -fno-tree-vectorize
2694
elif enabled clang; then
2695
    check_cflags -Qunused-arguments
2696
elif enabled armcc; then
2697
    # 2523: use of inline assembler is deprecated
2698
    add_cflags -Wrvct,--diag_suppress=2523
2699
elif enabled tms470; then
2700
    add_cflags -pds=824 -pds=837
2701
fi
2702

    
2703
if enabled gprof; then
2704
    add_cflags  -p
2705
    add_ldflags -p
2706
fi
2707

    
2708
# Find out if the .align argument is a power of two or not.
2709
check_asm asmalign_pot '".align 3"'
2710

    
2711
enabled_any $DECODER_LIST      && enable decoders
2712
enabled_any $ENCODER_LIST      && enable encoders
2713
enabled_any $HWACCEL_LIST      && enable hwaccels
2714
enabled_any $BSF_LIST          && enable bsfs
2715
enabled_any $DEMUXER_LIST      && enable demuxers
2716
enabled_any $MUXER_LIST        && enable muxers
2717
enabled_any $FILTER_LIST       && enable filters
2718
enabled_any $INDEV_LIST        && enable indevs
2719
enabled_any $OUTDEV_LIST       && enable outdevs
2720
enabled_any $PROTOCOL_LIST     && enable protocols
2721

    
2722
enabled_any $THREADS_LIST      && enable threads
2723

    
2724
check_deps $CONFIG_LIST       \
2725
           $CONFIG_EXTRA      \
2726
           $HAVE_LIST         \
2727
           $DECODER_LIST      \
2728
           $ENCODER_LIST      \
2729
           $HWACCEL_LIST      \
2730
           $PARSER_LIST       \
2731
           $BSF_LIST          \
2732
           $DEMUXER_LIST      \
2733
           $MUXER_LIST        \
2734
           $FILTER_LIST       \
2735
           $INDEV_LIST        \
2736
           $OUTDEV_LIST       \
2737
           $PROTOCOL_LIST     \
2738

    
2739
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2740

    
2741
echo "install prefix            $prefix"
2742
echo "source path               $source_path"
2743
echo "C compiler                $cc"
2744
echo ".align is power-of-two    $asmalign_pot"
2745
echo "ARCH                      $arch ($cpu)"
2746
if test "$build_suffix" != ""; then
2747
    echo "build suffix              $build_suffix"
2748
fi
2749
if test "$extra_version" != ""; then
2750
    echo "version string suffix     $extra_version"
2751
fi
2752
echo "big-endian                ${bigendian-no}"
2753
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2754
if enabled x86; then
2755
    echo "yasm                      ${yasm-no}"
2756
    echo "MMX enabled               ${mmx-no}"
2757
    echo "MMX2 enabled              ${mmx2-no}"
2758
    echo "3DNow! enabled            ${amd3dnow-no}"
2759
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2760
    echo "SSE enabled               ${sse-no}"
2761
    echo "SSSE3 enabled             ${ssse3-no}"
2762
    echo "CMOV enabled              ${cmov-no}"
2763
    echo "CMOV is fast              ${fast_cmov-no}"
2764
    echo "EBX available             ${ebx_available-no}"
2765
    echo "EBP available             ${ebp_available-no}"
2766
    echo "10 operands supported     ${ten_operands-no}"
2767
fi
2768
if enabled arm; then
2769
    echo "ARMv5TE enabled           ${armv5te-no}"
2770
    echo "ARMv6 enabled             ${armv6-no}"
2771
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2772
    echo "ARM VFP enabled           ${armvfp-no}"
2773
    echo "IWMMXT enabled            ${iwmmxt-no}"
2774
    echo "NEON enabled              ${neon-no}"
2775
fi
2776
if enabled mips; then
2777
    echo "MMI enabled               ${mmi-no}"
2778
fi
2779
if enabled ppc; then
2780
    echo "AltiVec enabled           ${altivec-no}"
2781
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2782
    echo "dcbzl available           ${dcbzl-no}"
2783
    echo "performance report        ${powerpc_perf-no}"
2784
fi
2785
if enabled sparc; then
2786
    echo "VIS enabled               ${vis-no}"
2787
fi
2788
echo "gprof enabled             ${gprof-no}"
2789
echo "debug symbols             ${debug-no}"
2790
echo "strip symbols             ${stripping-no}"
2791
echo "optimizations             ${optimizations-no}"
2792
echo "static                    ${static-no}"
2793
echo "shared                    ${shared-no}"
2794
echo "postprocessing support    ${postproc-no}"
2795
echo "new filter support        ${avfilter-no}"
2796
echo "filters using lavformat   ${avfilter_lavf-no}"
2797
echo "network support           ${network-no}"
2798
echo "threading support         ${thread_type-no}"
2799
echo "SDL support               ${sdl-no}"
2800
echo "Sun medialib support      ${mlib-no}"
2801
echo "AVISynth enabled          ${avisynth-no}"
2802
echo "libdc1394 support         ${libdc1394-no}"
2803
echo "libdirac enabled          ${libdirac-no}"
2804
echo "libfaac enabled           ${libfaac-no}"
2805
echo "libfaad enabled           ${libfaad-no}"
2806
echo "libfaad dlopened          ${libfaadbin-no}"
2807
echo "libgsm enabled            ${libgsm-no}"
2808
echo "libmp3lame enabled        ${libmp3lame-no}"
2809
echo "libnut enabled            ${libnut-no}"
2810
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2811
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2812
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2813
echo "libschroedinger enabled   ${libschroedinger-no}"
2814
echo "libspeex enabled          ${libspeex-no}"
2815
echo "libtheora enabled         ${libtheora-no}"
2816
echo "libvorbis enabled         ${libvorbis-no}"
2817
echo "libx264 enabled           ${libx264-no}"
2818
echo "libxvid enabled           ${libxvid-no}"
2819
echo "zlib enabled              ${zlib-no}"
2820
echo "bzlib enabled             ${bzlib-no}"
2821
echo
2822

    
2823
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2824
    echo "Enabled ${type}s:"
2825
    eval list=\$$(toupper $type)_LIST
2826
    for part in $list; do
2827
        enabled $part && echo ${part%_*}
2828
    done | sort | pr -3 -t
2829
    echo
2830
done
2831

    
2832
license="LGPL version 2.1 or later"
2833
if enabled nonfree; then
2834
    license="nonfree and unredistributable"
2835
elif enabled gplv3; then
2836
    license="GPL version 3 or later"
2837
elif enabled lgplv3; then
2838
    license="LGPL version 3 or later"
2839
elif enabled gpl; then
2840
    license="GPL version 2 or later"
2841
fi
2842

    
2843
echo "License: $license"
2844

    
2845
echo "Creating config.mak and config.h..."
2846

    
2847
# build tree in object directory if source path is different from current one
2848
if enabled source_path_used; then
2849
    DIRS="
2850
        doc
2851
        libavcodec
2852
        libavcodec/$arch
2853
        libavdevice
2854
        libavfilter
2855
        libavformat
2856
        libavutil
2857
        libavutil/$arch
2858
        libpostproc
2859
        libswscale
2860
        libswscale/$arch
2861
        tests
2862
        tools
2863
    "
2864
    FILES="
2865
        Makefile
2866
        common.mak
2867
        subdir.mak
2868
        doc/texi2pod.pl
2869
        libavcodec/Makefile
2870
        libavdevice/Makefile
2871
        libavfilter/Makefile
2872
        libavformat/Makefile
2873
        libavutil/Makefile
2874
        libpostproc/Makefile
2875
        libswscale/Makefile
2876
    "
2877
    for dir in $DIRS ; do
2878
        mkdir -p $dir
2879
    done
2880
    for f in $FILES ; do
2881
        $ln_s "$source_path/$f" $f
2882
    done
2883
fi
2884

    
2885
enabled stripping || strip="echo skipping strip"
2886

    
2887
cat > config.mak <<EOF
2888
# Automatically generated by configure - do not modify!
2889
ifndef FFMPEG_CONFIG_MAK
2890
FFMPEG_CONFIG_MAK=1
2891
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2892
prefix=$prefix
2893
LIBDIR=\$(DESTDIR)$libdir
2894
SHLIBDIR=\$(DESTDIR)$shlibdir
2895
INCDIR=\$(DESTDIR)$incdir
2896
BINDIR=\$(DESTDIR)$bindir
2897
DATADIR=\$(DESTDIR)$datadir
2898
MANDIR=\$(DESTDIR)$mandir
2899
SRC_PATH="$source_path"
2900
SRC_PATH_BARE=$source_path
2901
BUILD_ROOT="$PWD"
2902
ARCH=$arch
2903
CC=$cc
2904
AS=$as
2905
LD=$ld
2906
DEPCC=$dep_cc
2907
YASM=$yasmexe
2908
AR=$ar
2909
RANLIB=$ranlib
2910
LN_S=$ln_s
2911
STRIP=$strip
2912
CPPFLAGS=$CPPFLAGS
2913
CFLAGS=$CFLAGS
2914
ASFLAGS=$ASFLAGS
2915
CC_O=$CC_O
2916
LDFLAGS=$LDFLAGS
2917
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2918
SHFLAGS=$SHFLAGS
2919
YASMFLAGS=$YASMFLAGS
2920
BUILDSUF=$build_suffix
2921
FULLNAME=$FULLNAME
2922
LIBPREF=$LIBPREF
2923
LIBSUF=$LIBSUF
2924
LIBNAME=$LIBNAME
2925
SLIBPREF=$SLIBPREF
2926
SLIBSUF=$SLIBSUF
2927
EXESUF=$EXESUF
2928
EXTRA_VERSION=$extra_version
2929
DEPFLAGS=$DEPFLAGS
2930
CCDEP=$CCDEP
2931
ASDEP=$ASDEP
2932
CC_DEPFLAGS=$CC_DEPFLAGS
2933
AS_DEPFLAGS=$AS_DEPFLAGS
2934
HOSTCC=$host_cc
2935
HOSTCFLAGS=$host_cflags
2936
HOSTEXESUF=$HOSTEXESUF
2937
HOSTLDFLAGS=$host_ldflags
2938
HOSTLIBS=$host_libs
2939
TARGET_EXEC=$target_exec
2940
TARGET_PATH=$target_path
2941
SDL_LIBS=$sdl_libs
2942
SDL_CFLAGS=$sdl_cflags
2943
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2944
EXTRALIBS=$extralibs
2945
EOF
2946

    
2947
get_version(){
2948
    name=$1
2949
    file=$source_path/$2
2950
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2951
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2952
    lcname=$(tolower $name)
2953
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2954
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2955
}
2956

    
2957
get_version LIBSWSCALE  libswscale/swscale.h
2958
get_version LIBPOSTPROC libpostproc/postprocess.h
2959
get_version LIBAVCODEC  libavcodec/avcodec.h
2960
get_version LIBAVDEVICE libavdevice/avdevice.h
2961
get_version LIBAVFORMAT libavformat/avformat.h
2962
get_version LIBAVUTIL   libavutil/avutil.h
2963
get_version LIBAVFILTER libavfilter/avfilter.h
2964

    
2965
enabled shared && cat >> config.mak <<EOF
2966
LIBTARGET=${LIBTARGET}
2967
SLIBNAME=${SLIBNAME}
2968
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2969
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2970
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2971
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2972
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2973
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2974
EOF
2975

    
2976
enabled asmalign_pot || align_shift="1 <<"
2977

    
2978
cat > $TMPH <<EOF
2979
/* Automatically generated by configure - do not modify! */
2980
#ifndef FFMPEG_CONFIG_H
2981
#define FFMPEG_CONFIG_H
2982
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2983
#define FFMPEG_LICENSE "$(c_escape $license)"
2984
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2985
#define CC_TYPE "$cc_type"
2986
#define CC_VERSION $cc_version
2987
#define restrict $_restrict
2988
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2989
#define EXTERN_PREFIX "${extern_prefix}"
2990
#define EXTERN_ASM ${extern_prefix}
2991
EOF
2992

    
2993
test -n "$malloc_prefix" &&
2994
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2995

    
2996
if enabled small || disabled optimizations; then
2997
    echo "#define av_always_inline"  >> $TMPH
2998
fi
2999

    
3000
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3001
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3002
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3003
                                      $CONFIG_EXTRA      \
3004
                                      $DECODER_LIST      \
3005
                                      $ENCODER_LIST      \
3006
                                      $HWACCEL_LIST      \
3007
                                      $PARSER_LIST       \
3008
                                      $BSF_LIST          \
3009
                                      $DEMUXER_LIST      \
3010
                                      $MUXER_LIST        \
3011
                                      $FILTER_LIST       \
3012
                                      $PROTOCOL_LIST     \
3013
                                      $INDEV_LIST        \
3014
                                      $OUTDEV_LIST       \
3015

    
3016
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3017
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3018

    
3019
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3020
cp_if_changed $TMPH config.h
3021

    
3022
cat > $TMPH <<EOF
3023
/* Generated by ffconf */
3024
#ifndef AVUTIL_AVCONFIG_H
3025
#define AVUTIL_AVCONFIG_H
3026
EOF
3027

    
3028
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3029

    
3030
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3031

    
3032
cp_if_changed $TMPH libavutil/avconfig.h
3033

    
3034
# build pkg-config files
3035

    
3036
pkgconfig_generate(){
3037
name=$1
3038
shortname=${name#lib}${build_suffix}
3039
comment=$2
3040
version=$3
3041
libs=$4
3042
requires=$5
3043
cat <<EOF > $name/$name.pc
3044
prefix=$prefix
3045
exec_prefix=\${prefix}
3046
libdir=$libdir
3047
includedir=$incdir
3048

    
3049
Name: $name
3050
Description: $comment
3051
Version: $version
3052
Requires: $(enabled shared || echo $requires)
3053
Requires.private: $(enabled shared && echo $requires)
3054
Conflicts:
3055
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3056
Libs.private: $(enabled shared && echo $libs)
3057
Cflags: -I\${includedir}
3058
EOF
3059
cat <<EOF > $name/$name-uninstalled.pc
3060
prefix=
3061
exec_prefix=
3062
libdir=\${pcfiledir}
3063
includedir=${source_path}
3064

    
3065
Name: $name
3066
Description: $comment
3067
Version: $version
3068
Requires: $requires
3069
Conflicts:
3070
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3071
Cflags: -I\${includedir}
3072
EOF
3073
}
3074

    
3075
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3076
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3077
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3078
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3079
enabled avfilter &&
3080
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3081
enabled postproc &&
3082
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3083
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"