Statistics
| Branch: | Revision:

ffmpeg / configure @ 60361817

History | View | Annotate | Download (86.6 KB)

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

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

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

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

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

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

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

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

    
62
Standard options:
63
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.log]
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-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --disable-avfilter       disable video filter support [no]
93
  --enable-avfilter-lavf   video filters dependent on avformat [no]
94
  --disable-pthreads       disable pthreads [auto]
95
  --enable-w32threads      use Win32 threads [no]
96
  --enable-x11grab         enable X11 grabbing [no]
97
  --disable-network        disable network support [no]
98
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99
  --enable-gray            enable full grayscale support (slower color)
100
  --disable-swscale-alpha  disable alpha channel support in swscale
101
  --disable-fastdiv        disable table-based division
102
  --enable-small           optimize for size instead of speed
103
  --disable-aandct         disable AAN DCT code
104
  --disable-dct            disable DCT code
105
  --disable-fft            disable FFT code
106
  --disable-golomb         disable Golomb code
107
  --disable-lpc            disable LPC code
108
  --disable-mdct           disable MDCT code
109
  --disable-rdft           disable RDFT code
110
  --disable-vaapi          disable VAAPI code
111
  --disable-vdpau          disable VDPAU code
112
  --disable-dxva2          disable DXVA2 code
113
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
116
  --disable-everything     disable all components listed below
117
  --disable-encoder=NAME   disable encoder NAME
118
  --enable-encoder=NAME    enable encoder NAME
119
  --disable-encoders       disable all encoders
120
  --disable-decoder=NAME   disable decoder NAME
121
  --enable-decoder=NAME    enable decoder NAME
122
  --disable-decoders       disable all decoders
123
  --disable-hwaccel=NAME   disable hwaccel NAME
124
  --enable-hwaccel=NAME    enable hwaccel NAME
125
  --disable-hwaccels       disable all hwaccels
126
  --disable-muxer=NAME     disable muxer NAME
127
  --enable-muxer=NAME      enable muxer NAME
128
  --disable-muxers         disable all muxers
129
  --disable-demuxer=NAME   disable demuxer NAME
130
  --enable-demuxer=NAME    enable demuxer NAME
131
  --disable-demuxers       disable all demuxers
132
  --enable-parser=NAME     enable parser NAME
133
  --disable-parser=NAME    disable parser NAME
134
  --disable-parsers        disable all parsers
135
  --enable-bsf=NAME        enable bitstream filter NAME
136
  --disable-bsf=NAME       disable bitstream filter NAME
137
  --disable-bsfs           disable all bitstream filters
138
  --enable-protocol=NAME   enable protocol NAME
139
  --disable-protocol=NAME  disable protocol NAME
140
  --disable-protocols      disable all protocols
141
  --disable-indev=NAME     disable input device NAME
142
  --disable-outdev=NAME    disable output device NAME
143
  --disable-indevs         disable input devices
144
  --disable-outdevs        disable output devices
145
  --disable-devices        disable all devices
146
  --enable-filter=NAME     enable filter NAME
147
  --disable-filter=NAME    disable filter NAME
148
  --disable-filters        disable all filters
149
  --list-decoders          show all available decoders
150
  --list-encoders          show all available encoders
151
  --list-hwaccels          show all available hardware accelerators
152
  --list-muxers            show all available muxers
153
  --list-demuxers          show all available demuxers
154
  --list-parsers           show all available parsers
155
  --list-protocols         show all available protocols
156
  --list-bsfs              show all available bitstream filters
157
  --list-indevs            show all available input devices
158
  --list-outdevs           show all available output devices
159
  --list-filters           show all available filters
160

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

    
188
Advanced options (experts only):
189
  --source-path=PATH       path to source code [$source_path]
190
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
191
  --enable-cross-compile   assume a cross-compiler is used
192
  --sysroot=PATH           root of cross-build tree
193
  --sysinclude=PATH        location of cross-build system headers
194
  --target-os=OS           compiler targets OS [$target_os]
195
  --target-exec=CMD        command to run executables on target
196
  --target-path=DIR        path to view of build directory on target
197
  --nm=NM                  use nm tool
198
  --ar=AR                  use archive tool AR [$ar_default]
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
  --enable-sram            allow use of on-chip SRAM
236

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

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

    
251
quotes='""'
252

    
253
log(){
254
    echo "$@" >> $logfile
255
}
256

    
257
log_file(){
258
    log BEGIN $1
259
    pr -n -t $1 >> $logfile
260
    log END $1
261
}
262

    
263
echolog(){
264
    log "$@"
265
    echo "$@"
266
}
267

    
268
warn(){
269
    log "WARNING: $*"
270
    WARNINGS="${WARNINGS}WARNING: $*\n"
271
}
272

    
273
die(){
274
    echolog "$@"
275
    cat <<EOF
276

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

    
295
# Avoid locale weirdness, besides we really just want to translate ASCII.
296
toupper(){
297
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
298
}
299

    
300
tolower(){
301
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
302
}
303

    
304
c_escape(){
305
    echo "$*" | sed 's/["\\]/\\\0/g'
306
}
307

    
308
sh_quote(){
309
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
310
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
311
    echo "$v"
312
}
313

    
314
filter(){
315
    pat=$1
316
    shift
317
    for v; do
318
        eval "case $v in $pat) echo $v ;; esac"
319
    done
320
}
321

    
322
map(){
323
    m=$1
324
    shift
325
    for v; do eval $m; done
326
}
327

    
328
set_all(){
329
    value=$1
330
    shift
331
    for var in $*; do
332
        eval $var=$value
333
    done
334
}
335

    
336
set_weak(){
337
    value=$1
338
    shift
339
    for var; do
340
        eval : \${$var:=$value}
341
    done
342
}
343

    
344
pushvar(){
345
    for var in $*; do
346
        eval level=\${${var}_level:=0}
347
        eval ${var}_${level}="\$$var"
348
        eval ${var}_level=$(($level+1))
349
    done
350
}
351

    
352
popvar(){
353
    for var in $*; do
354
        eval level=\${${var}_level:-0}
355
        test $level = 0 && continue
356
        eval level=$(($level-1))
357
        eval $var="\${${var}_${level}}"
358
        eval ${var}_level=$level
359
        eval unset ${var}_${level}
360
    done
361
}
362

    
363
enable(){
364
    set_all yes $*
365
}
366

    
367
disable(){
368
    set_all no $*
369
}
370

    
371
enable_weak(){
372
    set_weak yes $*
373
}
374

    
375
disable_weak(){
376
    set_weak no $*
377
}
378

    
379
enable_safe(){
380
    for var; do
381
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
382
    done
383
}
384

    
385
disable_safe(){
386
    for var; do
387
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
388
    done
389
}
390

    
391
do_enable_deep(){
392
    for var; do
393
        enabled $var && continue
394
        eval sel="\$${var}_select"
395
        eval sgs="\$${var}_suggest"
396
        pushvar var sgs
397
        enable_deep $sel
398
        popvar sgs
399
        enable_deep_weak $sgs
400
        popvar var
401
    done
402
}
403

    
404
enable_deep(){
405
    do_enable_deep $*
406
    enable $*
407
}
408

    
409
enable_deep_weak(){
410
    do_enable_deep $*
411
    enable_weak $*
412
}
413

    
414
enabled(){
415
    test "${1#!}" = "$1" && op== || op=!=
416
    eval test "x\$${1#!}" $op "xyes"
417
}
418

    
419
disabled(){
420
    test "${1#!}" = "$1" && op== || op=!=
421
    eval test "x\$${1#!}" $op "xno"
422
}
423

    
424
enabled_all(){
425
    for opt; do
426
        enabled $opt || return 1
427
    done
428
}
429

    
430
disabled_all(){
431
    for opt; do
432
        disabled $opt || return 1
433
    done
434
}
435

    
436
enabled_any(){
437
    for opt; do
438
        enabled $opt && return 0
439
    done
440
}
441

    
442
disabled_any(){
443
    for opt; do
444
        disabled $opt && return 0
445
    done
446
    return 1
447
}
448

    
449
set_default(){
450
    for opt; do
451
        eval : \${$opt:=\$${opt}_default}
452
    done
453
}
454

    
455
is_in(){
456
    value=$1
457
    shift
458
    for var in $*; do
459
        [ $var = $value ] && return 0
460
    done
461
    return 1
462
}
463

    
464
check_deps(){
465
    for cfg; do
466
        cfg="${cfg#!}"
467
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
468
        disabled ${cfg}_checking && continue
469
        enable ${cfg}_checking
470

    
471
        eval dep_all="\$${cfg}_deps"
472
        eval dep_any="\$${cfg}_deps_any"
473
        eval dep_sel="\$${cfg}_select"
474
        eval dep_sgs="\$${cfg}_suggest"
475
        eval dep_ifa="\$${cfg}_if"
476
        eval dep_ifn="\$${cfg}_if_any"
477

    
478
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
479
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
480
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
481

    
482
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
483
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
484
        enabled_all  $dep_all || disable $cfg
485
        enabled_any  $dep_any || disable $cfg
486
        disabled_any $dep_sel && disable $cfg
487

    
488
        if enabled $cfg; then
489
            eval dep_extralibs="\$${cfg}_extralibs"
490
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
491
            enable_deep $dep_sel
492
            enable_deep_weak $dep_sgs
493
        fi
494

    
495
        disable ${cfg}_checking
496
    done
497
}
498

    
499
print_config(){
500
    pfx=$1
501
    header=$2
502
    makefile=$3
503
    shift 3
504
    for cfg; do
505
        ucname="$(toupper $cfg)"
506
        if enabled $cfg; then
507
            echo "#define ${pfx}${ucname} 1" >> $header
508
            echo "${pfx}${ucname}=yes" >> $makefile
509
        else
510
            echo "#define ${pfx}${ucname} 0" >> $header
511
            echo "!${pfx}${ucname}=yes" >> $makefile
512
        fi
513
    done
514
}
515

    
516
append(){
517
    var=$1
518
    shift
519
    eval "$var=\"\$$var $*\""
520
}
521

    
522
prepend(){
523
    var=$1
524
    shift
525
    eval "$var=\"$* \$$var\""
526
}
527

    
528
add_cppflags(){
529
    append CPPFLAGS $($filter_cppflags "$@")
530
}
531

    
532
add_cflags(){
533
    append CFLAGS $($filter_cflags "$@")
534
}
535

    
536
add_asflags(){
537
    append ASFLAGS $($filter_asflags "$@")
538
}
539

    
540
add_ldflags(){
541
    append LDFLAGS "$@"
542
}
543

    
544
add_extralibs(){
545
    prepend extralibs "$@"
546
}
547

    
548
check_cmd(){
549
    log "$@"
550
    "$@" >> $logfile 2>&1
551
}
552

    
553
check_cc(){
554
    log check_cc "$@"
555
    cat > $TMPC
556
    log_file $TMPC
557
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
558
}
559

    
560
check_cpp(){
561
    log check_cpp "$@"
562
    cat > $TMPC
563
    log_file $TMPC
564
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
565
}
566

    
567
check_as(){
568
    log check_as "$@"
569
    cat > $TMPC
570
    log_file $TMPC
571
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
572
}
573

    
574
check_asm(){
575
    log check_asm "$@"
576
    name="$1"
577
    code="$2"
578
    shift 2
579
    disable $name
580
    check_as "$@" <<EOF && enable $name
581
void foo(void){ __asm__ volatile($code); }
582
EOF
583
}
584

    
585
check_yasm(){
586
    log check_yasm "$@"
587
    echo "$1" > $TMPS
588
    log_file $TMPS
589
    shift 1
590
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
591
}
592

    
593
check_ld(){
594
    log check_ld "$@"
595
    flags=''
596
    libs=''
597
    for f; do
598
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
599
    done
600
    check_cc $($filter_cflags $flags) || return
601
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
602
}
603

    
604
check_cppflags(){
605
    log check_cppflags "$@"
606
    set -- $($filter_cppflags "$@")
607
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
608
int x;
609
EOF
610
}
611

    
612
check_cflags(){
613
    log check_cflags "$@"
614
    set -- $($filter_cflags "$@")
615
    check_cc "$@" <<EOF && append CFLAGS "$@"
616
int x;
617
EOF
618
}
619

    
620
test_ldflags(){
621
    log test_ldflags "$@"
622
    check_ld "$@" <<EOF
623
int main(void){ return 0; }
624
EOF
625
}
626

    
627
check_ldflags(){
628
    log check_ldflags "$@"
629
    test_ldflags "$@" && add_ldflags "$@"
630
}
631

    
632
check_header(){
633
    log check_header "$@"
634
    header=$1
635
    shift
636
    disable_safe $header
637
    check_cpp "$@" <<EOF && enable_safe $header
638
#include <$header>
639
int x;
640
EOF
641
}
642

    
643
check_func(){
644
    log check_func "$@"
645
    func=$1
646
    shift
647
    disable $func
648
    check_ld "$@" <<EOF && enable $func
649
extern int $func();
650
int main(void){ $func(); }
651
EOF
652
}
653

    
654
check_mathfunc(){
655
    log check_mathfunc "$@"
656
    func=$1
657
    shift
658
    disable $func
659
    check_ld "$@" <<EOF && enable $func
660
#include <math.h>
661
float foo(float f) { return $func(f); }
662
int main(void){ return 0; }
663
EOF
664
}
665

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

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

    
698
check_lib(){
699
    log check_lib "$@"
700
    header="$1"
701
    func="$2"
702
    shift 2
703
    check_header $header && check_func $func "$@" && add_extralibs "$@"
704
}
705

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

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

    
718
check_exec_crash(){
719
    code=$(cat)
720

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

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

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

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

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

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

    
795
check_host_cc(){
796
    log check_host_cc "$@"
797
    cat > $TMPC
798
    log_file $TMPC
799
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
800
}
801

    
802
check_host_cflags(){
803
    log check_host_cflags "$@"
804
    check_host_cc "$@" <<EOF && append host_cflags "$@"
805
int x;
806
EOF
807
}
808

    
809
apply(){
810
    file=$1
811
    shift
812
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
813
}
814

    
815
cp_if_changed(){
816
    cmp -s "$1" "$2" &&
817
        echo "$2 is unchanged" ||
818
        cp -f "$1" "$2"
819
}
820

    
821
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
822
# system-dependent things.
823

    
824
COMPONENT_LIST="
825
    bsfs
826
    decoders
827
    demuxers
828
    encoders
829
    filters
830
    hwaccels
831
    indevs
832
    muxers
833
    outdevs
834
    parsers
835
    protocols
836
"
837

    
838
CONFIG_LIST="
839
    $COMPONENT_LIST
840
    aandct
841
    avcodec
842
    avdevice
843
    avfilter
844
    avfilter_lavf
845
    avformat
846
    avisynth
847
    bzlib
848
    dct
849
    doc
850
    dwt
851
    dxva2
852
    fastdiv
853
    ffmpeg
854
    ffplay
855
    ffprobe
856
    ffserver
857
    fft
858
    golomb
859
    gpl
860
    gprof
861
    gray
862
    h264dsp
863
    hardcoded_tables
864
    libdc1394
865
    libdirac
866
    libfaac
867
    libgsm
868
    libmp3lame
869
    libnut
870
    libopencore_amrnb
871
    libopencore_amrwb
872
    libopenjpeg
873
    librtmp
874
    libschroedinger
875
    libspeex
876
    libtheora
877
    libvorbis
878
    libvpx
879
    libx264
880
    libxvid
881
    lpc
882
    lsp
883
    mdct
884
    memalign_hack
885
    mlib
886
    mpegaudio_hp
887
    network
888
    nonfree
889
    pic
890
    postproc
891
    powerpc_perf
892
    rdft
893
    runtime_cpudetect
894
    shared
895
    small
896
    sram
897
    static
898
    swscale
899
    swscale_alpha
900
    vaapi
901
    vdpau
902
    version3
903
    x11grab
904
    zlib
905
"
906

    
907
THREADS_LIST='
908
    pthreads
909
    w32threads
910
'
911

    
912
ARCH_LIST='
913
    alpha
914
    arm
915
    avr32
916
    avr32_ap
917
    avr32_uc
918
    bfin
919
    ia64
920
    m68k
921
    mips
922
    mips64
923
    parisc
924
    ppc
925
    ppc64
926
    s390
927
    sh4
928
    sparc
929
    sparc64
930
    tomi
931
    x86
932
    x86_32
933
    x86_64
934
'
935

    
936
ARCH_EXT_LIST='
937
    altivec
938
    amd3dnow
939
    amd3dnowext
940
    armv5te
941
    armv6
942
    armv6t2
943
    armvfp
944
    iwmmxt
945
    mmi
946
    mmx
947
    mmx2
948
    neon
949
    ppc4xx
950
    sse
951
    ssse3
952
    vis
953
'
954

    
955
HAVE_LIST_PUB='
956
    bigendian
957
'
958

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

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

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

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

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

    
1114
CMDLINE_APPEND="
1115
    extra_cflags
1116
"
1117

    
1118
# code dependency declarations
1119

    
1120
# architecture extensions
1121

    
1122
armv5te_deps="arm"
1123
armv6_deps="arm"
1124
armv6t2_deps="arm"
1125
armvfp_deps="arm"
1126
iwmmxt_deps="arm"
1127
neon_deps="arm"
1128

    
1129
mmi_deps="mips"
1130

    
1131
altivec_deps="ppc"
1132
ppc4xx_deps="ppc"
1133

    
1134
vis_deps="sparc"
1135

    
1136
x86_64_suggest="cmov fast_cmov"
1137
amd3dnow_deps="mmx"
1138
amd3dnowext_deps="amd3dnow"
1139
mmx_deps="x86"
1140
mmx2_deps="mmx"
1141
sse_deps="mmx"
1142
ssse3_deps="sse"
1143

    
1144
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1145
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1146
fast_unaligned_if_any="armv6 ppc x86"
1147

    
1148
need_memalign="altivec neon sse"
1149
inline_asm_deps="!tms470"
1150

    
1151
symver_if_any="symver_asm_label symver_gnu_asm"
1152

    
1153
# subsystems
1154
mdct_select="fft"
1155
rdft_select="fft"
1156

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

    
1278
vaapi_deps="va_va_h"
1279
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1280

    
1281
# parsers
1282
h264_parser_select="golomb h264dsp"
1283

    
1284
# bitstream_filters
1285
aac_adtstoasc_bsf_select="aac_parser"
1286

    
1287
# external libraries
1288
libdirac_decoder_deps="libdirac !libschroedinger"
1289
libdirac_encoder_deps="libdirac"
1290
libfaac_encoder_deps="libfaac"
1291
libgsm_decoder_deps="libgsm"
1292
libgsm_encoder_deps="libgsm"
1293
libgsm_ms_decoder_deps="libgsm"
1294
libgsm_ms_encoder_deps="libgsm"
1295
libmp3lame_encoder_deps="libmp3lame"
1296
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1297
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1298
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1299
libopenjpeg_decoder_deps="libopenjpeg"
1300
libschroedinger_decoder_deps="libschroedinger"
1301
libschroedinger_encoder_deps="libschroedinger"
1302
libspeex_decoder_deps="libspeex"
1303
libtheora_encoder_deps="libtheora"
1304
libvorbis_encoder_deps="libvorbis"
1305
libvpx_decoder_deps="libvpx"
1306
libvpx_encoder_deps="libvpx"
1307
libx264_encoder_deps="libx264"
1308
libxvid_encoder_deps="libxvid"
1309

    
1310
# demuxers / muxers
1311
ac3_demuxer_deps="ac3_parser"
1312
asf_stream_muxer_select="asf_muxer"
1313
avisynth_demuxer_deps="avisynth"
1314
dirac_demuxer_deps="dirac_parser"
1315
eac3_demuxer_select="ac3_parser"
1316
ipod_muxer_select="mov_muxer"
1317
libnut_demuxer_deps="libnut"
1318
libnut_muxer_deps="libnut"
1319
matroska_audio_muxer_select="matroska_muxer"
1320
matroska_demuxer_suggest="zlib bzlib"
1321
mov_demuxer_suggest="zlib"
1322
mp3_demuxer_deps="mpegaudio_parser"
1323
mp4_muxer_select="mov_muxer"
1324
mpegtsraw_demuxer_select="mpegts_demuxer"
1325
mxf_d10_muxer_select="mxf_muxer"
1326
ogg_demuxer_select="golomb"
1327
psp_muxer_select="mov_muxer"
1328
rtsp_demuxer_deps="sdp_demuxer"
1329
rtsp_muxer_deps="sdp_demuxer"
1330
rtsp_muxer_select="rtp_muxer"
1331
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1332
sdp_demuxer_select="asf_demuxer rm_demuxer"
1333
spdif_muxer_select="aac_parser"
1334
tg2_muxer_select="mov_muxer"
1335
tgp_muxer_select="mov_muxer"
1336
w64_demuxer_deps="wav_demuxer"
1337

    
1338
# indevs / outdevs
1339
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1340
alsa_indev_extralibs="-lasound"
1341
alsa_outdev_deps="alsa_asoundlib_h"
1342
alsa_outdev_extralibs="-lasound"
1343
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1344
dv1394_indev_deps="dv1394 dv_demuxer"
1345
jack_indev_deps="jack_jack_h"
1346
jack_indev_extralibs="-ljack"
1347
libdc1394_indev_deps="libdc1394"
1348
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1349
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1350
v4l_indev_deps="linux_videodev_h"
1351
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1352
vfwcap_indev_deps="capCreateCaptureWindow"
1353
vfwcap_indev_extralibs="-lavicap32"
1354
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1355
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1356

    
1357
# protocols
1358
gopher_protocol_deps="network"
1359
http_protocol_deps="network"
1360
http_protocol_select="tcp_protocol"
1361
mmst_protocol_deps="network"
1362
rtmp_protocol_select="tcp_protocol"
1363
rtp_protocol_select="udp_protocol"
1364
tcp_protocol_deps="network"
1365
udp_protocol_deps="network"
1366

    
1367
# filters
1368
movie_filter_deps="avfilter_lavf"
1369
avfilter_lavf_deps="avformat"
1370

    
1371
# libraries
1372
avdevice_deps="avcodec avformat"
1373
avformat_deps="avcodec"
1374

    
1375
# programs
1376
ffmpeg_deps="avcodec avformat swscale"
1377
ffmpeg_select="buffer_filter"
1378
ffplay_deps="avcodec avformat swscale sdl"
1379
ffplay_select="rdft"
1380
ffprobe_deps="avcodec avformat"
1381
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1382
ffserver_extralibs='$ldl'
1383

    
1384
doc_deps="texi2html"
1385

    
1386
# default parameters
1387

    
1388
logfile="config.log"
1389

    
1390
# installation paths
1391
prefix_default="/usr/local"
1392
bindir_default='${prefix}/bin'
1393
datadir_default='${prefix}/share/ffmpeg'
1394
incdir_default='${prefix}/include'
1395
libdir_default='${prefix}/lib'
1396
mandir_default='${prefix}/share/man'
1397
shlibdir_default="$libdir_default"
1398

    
1399
# toolchain
1400
ar_default="ar"
1401
cc_default="gcc"
1402
cc_version=\"unknown\"
1403
host_cc_default="gcc"
1404
ln_s="ln -sf"
1405
nm_default="nm"
1406
objformat="elf"
1407
ranlib="ranlib"
1408
strip_default="strip"
1409
yasmexe="yasm"
1410

    
1411
nm_opts='-g'
1412

    
1413
# machine
1414
arch_default=$(uname -m)
1415
cpu="generic"
1416

    
1417
# OS
1418
target_os_default=$(tolower $(uname -s))
1419
host_os=$target_os_default
1420

    
1421
# configurable options
1422
enable avcodec
1423
enable avdevice
1424
enable avfilter
1425
enable avformat
1426
enable avutil
1427
enable asm
1428
enable debug
1429
enable doc
1430
enable fastdiv
1431
enable ffmpeg
1432
enable ffplay
1433
enable ffprobe
1434
enable ffserver
1435
enable mpegaudio_hp
1436
enable network
1437
enable optimizations
1438
enable protocols
1439
enable static
1440
enable stripping
1441
enable swscale
1442
enable swscale_alpha
1443

    
1444
# build settings
1445
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1446
FFSERVERLDFLAGS=-Wl,-E
1447
LIBPREF="lib"
1448
LIBSUF=".a"
1449
FULLNAME='$(NAME)$(BUILDSUF)'
1450
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1451
SLIBPREF="lib"
1452
SLIBSUF=".so"
1453
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1454
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1455
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1456
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1457

    
1458
CC_O='-o $@'
1459

    
1460
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1461
host_libs='-lm'
1462

    
1463
target_path='$(CURDIR)'
1464

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

    
1470
# find source path
1471
source_path="$(dirname "$0")"
1472
enable source_path_used
1473
if test -f configure; then
1474
    source_path="$(pwd)"
1475
    disable source_path_used
1476
else
1477
    source_path="$(cd "$source_path"; pwd)"
1478
    echo "$source_path" | grep -q '[[:blank:]]' &&
1479
        die "Out of tree builds are impossible with whitespace in source path."
1480
    test -e "$source_path/config.h" &&
1481
        die "Out of tree builds are impossible with config.h in source dir."
1482
fi
1483

    
1484
for v in "$@"; do
1485
    r=${v#*=}
1486
    l=${v%"$r"}
1487
    r=$(sh_quote "$r")
1488
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1489
done
1490

    
1491
find_things(){
1492
    thing=$1
1493
    pattern=$2
1494
    file=$source_path/$3
1495
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1496
}
1497

    
1498
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1499
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1500
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1501
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1502
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1503
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1504
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1505
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1506
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1507
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1508
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1509

    
1510
for n in $COMPONENT_LIST; do
1511
    v=$(toupper ${n%s})_LIST
1512
    eval enable \$$v
1513
    eval ${n}_if_any="\$$v"
1514
done
1515

    
1516
enable $ARCH_EXT_LIST
1517

    
1518
die_unknown(){
1519
    echo "Unknown option \"$1\"."
1520
    echo "See $0 --help for available options."
1521
    exit 1
1522
}
1523

    
1524
show_list() {
1525
    suffix=_$1
1526
    shift
1527
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1528
    exit 0
1529
}
1530

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

    
1586
disabled logging && logfile=/dev/null
1587

    
1588
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1589
set >> $logfile
1590

    
1591
test -n "$cross_prefix" && enable cross_compile
1592

    
1593
if enabled cross_compile; then
1594
    test -n "$arch" && test -n "$target_os" ||
1595
        die "Must specify target arch and OS when cross-compiling"
1596
fi
1597

    
1598
set_default arch target_os
1599

    
1600
ar_default="${cross_prefix}${ar_default}"
1601
cc_default="${cross_prefix}${cc_default}"
1602
nm_default="${cross_prefix}${nm_default}"
1603
ranlib="${cross_prefix}${ranlib}"
1604
strip_default="${cross_prefix}${strip_default}"
1605

    
1606
sysinclude_default="${sysroot}/usr/include"
1607

    
1608
set_default cc nm strip sysinclude
1609
enabled cross_compile || host_cc_default=$cc
1610
set_default host_cc
1611

    
1612
exesuf() {
1613
    case $1 in
1614
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1615
    esac
1616
}
1617

    
1618
EXESUF=$(exesuf $target_os)
1619
HOSTEXESUF=$(exesuf $host_os)
1620

    
1621
# set temporary file name
1622
: ${TMPDIR:=$TEMPDIR}
1623
: ${TMPDIR:=$TMP}
1624
: ${TMPDIR:=/tmp}
1625

    
1626
if ! check_cmd type mktemp; then
1627
    # simple replacement for missing mktemp
1628
    # NOT SAFE FOR GENERAL USE
1629
    mktemp(){
1630
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1631
    }
1632
fi
1633

    
1634
tmpfile(){
1635
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1636
        (set -C; exec > $tmp) 2>/dev/null ||
1637
        die "Unable to create temporary file in $TMPDIR."
1638
    append TMPFILES $tmp
1639
    eval $1=$tmp
1640
}
1641

    
1642
trap 'rm -f -- $TMPFILES' EXIT
1643
trap exit HUP INT TERM
1644

    
1645
tmpfile TMPC  .c
1646
tmpfile TMPE  $EXESUF
1647
tmpfile TMPH  .h
1648
tmpfile TMPO  .o
1649
tmpfile TMPS  .S
1650
tmpfile TMPV  .ver
1651
tmpfile TMPSH .sh
1652

    
1653
unset -f mktemp
1654

    
1655
# make sure we can execute files in $TMPDIR
1656
cat > $TMPSH 2>> $logfile <<EOF
1657
#! /bin/sh
1658
EOF
1659
chmod +x $TMPSH >> $logfile 2>&1
1660
if ! $TMPSH >> $logfile 2>&1; then
1661
    cat <<EOF
1662
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1663
variable to another directory and make sure that it is not mounted noexec.
1664
EOF
1665
    die "Sanity test failed."
1666
fi
1667

    
1668
filter_cflags=echo
1669
filter_cppflags=echo
1670
filter_asflags=echo
1671

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

    
1807
test -n "$cc_type" && enable $cc_type ||
1808
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1809

    
1810
: ${as_default:=$cc}
1811
: ${dep_cc_default:=$cc}
1812
: ${ld_default:=$cc}
1813
set_default ar as dep_cc ld
1814

    
1815
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1816
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1817

    
1818
add_cflags $extra_cflags
1819
add_asflags $extra_cflags
1820

    
1821
if test -n "$sysroot"; then
1822
    case "$cc_type" in
1823
        gcc)
1824
            add_cppflags --sysroot="$sysroot"
1825
            add_ldflags --sysroot="$sysroot"
1826
        ;;
1827
        tms470)
1828
            add_cppflags -I"$sysinclude"
1829
            add_ldflags  --sysroot="$sysroot"
1830
        ;;
1831
        clang)
1832
            add_cppflags -isysroot "$sysroot"
1833
            add_ldflags -isysroot "$sysroot"
1834
        ;;
1835
    esac
1836
fi
1837

    
1838
if test "$cpu" = host; then
1839
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1840

    
1841
    case "$cc_type" in
1842
        gcc)
1843
            check_native(){
1844
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1845
                sed -n "/$1=/{
1846
                            s/.*$1=\\([^ ]*\\).*/\\1/
1847
                            p
1848
                            q
1849
                        }" $TMPE
1850
            }
1851
            cpu=$(check_native -march || check_native -mcpu)
1852
        ;;
1853
    esac
1854

    
1855
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1856
fi
1857

    
1858
# Deal with common $arch aliases
1859
case "$arch" in
1860
    arm*)
1861
        arch="arm"
1862
    ;;
1863
    mips|mipsel|IP*)
1864
        arch="mips"
1865
    ;;
1866
    mips64*)
1867
        arch="mips"
1868
        subarch="mips64"
1869
    ;;
1870
    parisc|hppa)
1871
        arch="parisc"
1872
    ;;
1873
    parisc64|hppa64)
1874
        arch="parisc"
1875
        subarch="parisc64"
1876
    ;;
1877
    "Power Macintosh"|ppc|powerpc)
1878
        arch="ppc"
1879
    ;;
1880
    ppc64|powerpc64)
1881
        arch="ppc"
1882
        subarch="ppc64"
1883
    ;;
1884
    s390|s390x)
1885
        arch="s390"
1886
    ;;
1887
    sh4|sh)
1888
        arch="sh4"
1889
    ;;
1890
    sun4u|sparc64)
1891
        arch="sparc"
1892
        subarch="sparc64"
1893
    ;;
1894
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1895
        arch="x86"
1896
    ;;
1897
esac
1898

    
1899
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1900
enable $arch
1901

    
1902
# Add processor-specific flags
1903
if test "$cpu" = generic; then
1904
    : do nothing
1905
elif enabled ppc; then
1906

    
1907
    case $(tolower $cpu) in
1908
        601|ppc601|powerpc601)
1909
            cpuflags="-mcpu=601"
1910
            disable altivec
1911
        ;;
1912
        603*|ppc603*|powerpc603*)
1913
            cpuflags="-mcpu=603"
1914
            disable altivec
1915
        ;;
1916
        604*|ppc604*|powerpc604*)
1917
            cpuflags="-mcpu=604"
1918
            disable altivec
1919
        ;;
1920
        g3|75*|ppc75*|powerpc75*)
1921
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1922
            disable altivec
1923
        ;;
1924
        g4|745*|ppc745*|powerpc745*)
1925
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1926
        ;;
1927
        74*|ppc74*|powerpc74*)
1928
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1929
        ;;
1930
        g5|970|ppc970|powerpc970|power4*)
1931
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1932
        ;;
1933
        cell)
1934
            cpuflags="-mcpu=cell"
1935
            enable ldbrx
1936
        ;;
1937
        e500v2)
1938
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1939
            disable altivec
1940
        ;;
1941
        e500)
1942
            cpuflags="-mcpu=8540 -mhard-float"
1943
            disable altivec
1944
        ;;
1945
    esac
1946

    
1947
elif enabled x86; then
1948

    
1949
    case $cpu in
1950
        i[345]86|pentium)
1951
            cpuflags="-march=$cpu"
1952
            disable mmx
1953
        ;;
1954
        # targets that do NOT support conditional mov (cmov)
1955
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1956
            cpuflags="-march=$cpu"
1957
            disable cmov
1958
        ;;
1959
        # targets that do support conditional mov (cmov)
1960
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
1961
            cpuflags="-march=$cpu"
1962
            enable cmov
1963
            enable fast_cmov
1964
        ;;
1965
        # targets that do support conditional mov but on which it's slow
1966
        pentium4|pentium4m|prescott|nocona)
1967
            cpuflags="-march=$cpu"
1968
            enable cmov
1969
            disable fast_cmov
1970
        ;;
1971
    esac
1972

    
1973
elif enabled sparc; then
1974

    
1975
    case $cpu in
1976
        niagara)
1977
            cpuflags="-mcpu=$cpu"
1978
            disable vis
1979
        ;;
1980
        sparc64)
1981
            cpuflags="-mcpu=v9"
1982
        ;;
1983
    esac
1984

    
1985
elif enabled arm; then
1986

    
1987
    case $cpu in
1988
        armv*)
1989
            cpuflags="-march=$cpu"
1990
        ;;
1991
        *)
1992
            cpuflags="-mcpu=$cpu"
1993
        ;;
1994
    esac
1995

    
1996
elif enabled alpha; then
1997

    
1998
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1999

    
2000
elif enabled bfin; then
2001

    
2002
    cpuflags="-mcpu=$cpu"
2003

    
2004
elif enabled mips; then
2005

    
2006
    cpuflags="-march=$cpu"
2007

    
2008
elif enabled avr32; then
2009

    
2010
    case $cpu in
2011
        ap7[02]0[0-2])
2012
            subarch="avr32_ap"
2013
            cpuflags="-mpart=$cpu"
2014
        ;;
2015
        ap)
2016
            subarch="avr32_ap"
2017
            cpuflags="-march=$cpu"
2018
        ;;
2019
        uc3[ab]*)
2020
            subarch="avr32_uc"
2021
            cpuflags="-mcpu=$cpu"
2022
        ;;
2023
        uc)
2024
            subarch="avr32_uc"
2025
            cpuflags="-march=$cpu"
2026
        ;;
2027
    esac
2028

    
2029
fi
2030

    
2031
add_cflags $cpuflags
2032
add_asflags $cpuflags
2033

    
2034
# compiler sanity check
2035
check_exec <<EOF
2036
int main(void){ return 0; }
2037
EOF
2038
if test "$?" != 0; then
2039
    echo "$cc is unable to create an executable file."
2040
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2041
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2042
        echo "Only do this if you know what cross compiling means."
2043
    fi
2044
    die "C compiler test failed."
2045
fi
2046

    
2047
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2048
check_cflags -std=c99
2049
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2050
#include <stdlib.h>
2051
EOF
2052
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2053
#include <stdlib.h>
2054
EOF
2055

    
2056
check_host_cflags -std=c99
2057

    
2058
case "$arch" in
2059
    alpha|ia64|mips|parisc|sparc)
2060
        spic=$shared
2061
    ;;
2062
    x86)
2063
        subarch="x86_32"
2064
        check_cc <<EOF && subarch="x86_64"
2065
        int test[(int)sizeof(char*) - 7];
2066
EOF
2067
        if test "$subarch" = "x86_64"; then
2068
            spic=$shared
2069
        fi
2070
    ;;
2071
esac
2072

    
2073
enable $subarch
2074
enabled spic && enable pic
2075

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

    
2225
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2226

    
2227
set_default $PATHS_LIST
2228

    
2229
add_extralibs $osextralibs
2230

    
2231
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2232
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2233

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

    
2245
disabled static && LIBNAME=""
2246

    
2247
die_license_disabled() {
2248
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2249
}
2250

    
2251
die_license_disabled gpl libx264
2252
die_license_disabled gpl libxvid
2253
die_license_disabled gpl postproc
2254
die_license_disabled gpl x11grab
2255

    
2256
die_license_disabled nonfree libfaac
2257

    
2258
die_license_disabled version3 libopencore_amrnb
2259
die_license_disabled version3 libopencore_amrwb
2260

    
2261
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2262

    
2263
check_deps $ARCH_EXT_LIST
2264

    
2265
disabled optimizations || check_cflags -fomit-frame-pointer
2266

    
2267
enable_pic() {
2268
    enable pic
2269
    add_cppflags -DPIC
2270
    add_cflags   -fPIC
2271
    add_asflags  -fPIC
2272
}
2273

    
2274
enabled pic && enable_pic
2275

    
2276
check_cc <<EOF || die "Symbol mangling check failed."
2277
int ff_extern;
2278
EOF
2279
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2280
extern_prefix=${sym%%ff_extern*}
2281

    
2282
check_cc <<EOF && enable inline_asm
2283
void foo(void) { __asm__ volatile ("" ::); }
2284
EOF
2285

    
2286
_restrict=
2287
for restrict_keyword in restrict __restrict__ __restrict; do
2288
    check_cc <<EOF && _restrict=$restrict_keyword && break
2289
void foo(char * $restrict_keyword p);
2290
EOF
2291
done
2292

    
2293
check_cc <<EOF && enable attribute_packed
2294
struct { int x; } __attribute__((packed)) x;
2295
EOF
2296

    
2297
check_cc <<EOF && enable attribute_may_alias
2298
union { int x; } __attribute__((may_alias)) x;
2299
EOF
2300

    
2301
check_cc <<EOF || die "endian test failed"
2302
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2303
EOF
2304
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2305

    
2306
if enabled alpha; then
2307

    
2308
    check_cflags -mieee
2309

    
2310
elif enabled arm; then
2311

    
2312
    check_cflags -marm
2313

    
2314
    check_ld <<EOF && enable vfp_args
2315
__asm__ (".eabi_attribute 28, 1");
2316
int main(void) { return 0; }
2317
EOF
2318

    
2319
    # We have to check if pld is a nop and disable it.
2320
    check_asm pld '"pld [r0]"'
2321

    
2322
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2323
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2324
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2325
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2326
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2327
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2328

    
2329
    enabled_all armv6t2 shared !pic && enable_pic
2330

    
2331
elif enabled mips; then
2332

    
2333
    check_asm loongson '"dmult.g $1, $2, $3"'
2334
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2335

    
2336
elif enabled ppc; then
2337

    
2338
    enable local_aligned_8 local_aligned_16
2339

    
2340
    check_asm dcbzl     '"dcbzl 0, 1"'
2341
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2342
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2343

    
2344
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2345
    if enabled altivec; then
2346
        check_cflags -maltivec -mabi=altivec &&
2347
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2348
        check_cflags -faltivec
2349

    
2350
        # check if our compiler supports Motorola AltiVec C API
2351
        check_cc <<EOF || disable altivec
2352
$inc_altivec_h
2353
int main(void) {
2354
    vector signed int v1, v2, v3;
2355
    v1 = vec_add(v2,v3);
2356
    return 0;
2357
}
2358
EOF
2359

    
2360
        # check if our compiler supports braces for vector declarations
2361
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2362
$inc_altivec_h
2363
int main (void) { (vector int) {1}; return 0; }
2364
EOF
2365
    fi
2366

    
2367
elif enabled sparc; then
2368

    
2369
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2370
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2371

    
2372
elif enabled x86; then
2373

    
2374
    enable local_aligned_8 local_aligned_16
2375

    
2376
    # check whether EBP is available on x86
2377
    # As 'i' is stored on the stack, this program will crash
2378
    # if the base pointer is used to access it because the
2379
    # base pointer is cleared in the inline assembly code.
2380
    check_exec_crash <<EOF && enable ebp_available
2381
    volatile int i=0;
2382
    __asm__ volatile (
2383
        "xorl %%ebp, %%ebp"
2384
    ::: "%ebp");
2385
    return i;
2386
EOF
2387

    
2388
    # check whether EBX is available on x86
2389
    check_asm ebx_available '""::"b"(0)' &&
2390
        check_asm ebx_available '"":::"%ebx"'
2391

    
2392
    # check whether more than 10 operands are supported
2393
    check_cc <<EOF && enable ten_operands
2394
int main(void) {
2395
    int x=0;
2396
    __asm__ volatile(
2397
        ""
2398
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2399
    );
2400
    return 0;
2401
}
2402
EOF
2403

    
2404
    # check whether binutils is new enough to compile SSSE3/MMX2
2405
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2406
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2407

    
2408
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2409

    
2410
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2411
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2412
    enabled     pic           && append YASMFLAGS "-DPIC"
2413
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2414
    case "$objformat" in
2415
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2416
    esac
2417
    if ! disabled yasm; then
2418
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2419
            warn "yasm not found, performance will suffer"
2420
    fi
2421

    
2422
    case "$cpu" in
2423
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2424
            disable fast_clz
2425
        ;;
2426
    esac
2427

    
2428
fi
2429

    
2430
if check_func dlopen; then
2431
    ldl=
2432
elif check_func dlopen -ldl; then
2433
    ldl=-ldl
2434
fi
2435

    
2436
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2437
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2438

    
2439
check_func  fork
2440
check_func  getaddrinfo $network_extralibs
2441
check_func  gethrtime
2442
check_func  getrusage
2443
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2444
check_func  inet_aton $network_extralibs
2445
check_func  isatty
2446
check_func  ${malloc_prefix}memalign            && enable memalign
2447
check_func  mkstemp
2448
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2449
check_func  setrlimit
2450
check_func  strerror_r
2451
check_func_headers io.h setmode
2452
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2453
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2454
check_func_headers windows.h GetProcessTimes
2455
check_func_headers windows.h VirtualAlloc
2456

    
2457
check_header conio.h
2458
check_header dlfcn.h
2459
check_header dxva2api.h
2460
check_header malloc.h
2461
check_header poll.h
2462
check_header sys/mman.h
2463
check_header sys/resource.h
2464
check_header sys/select.h
2465
check_header termios.h
2466
check_header vdpau/vdpau.h
2467
check_header vdpau/vdpau_x11.h
2468
check_header X11/extensions/XvMClib.h
2469

    
2470
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2471

    
2472
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2473
     enabled_any $need_memalign ; then
2474
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2475
fi
2476

    
2477
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2478
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2479

    
2480
# check for some common methods of building with pthread support
2481
# do this before the optional library checks as some of them require pthreads
2482
if ! disabled pthreads && ! enabled w32threads; then
2483
    enable pthreads
2484
    if check_func pthread_create; then
2485
        :
2486
    elif check_func pthread_create -pthread; then
2487
        add_cflags -pthread
2488
        add_extralibs -pthread
2489
    elif check_func pthread_create -pthreads; then
2490
        add_cflags -pthreads
2491
        add_extralibs -pthreads
2492
    elif check_func pthread_create -lpthreadGC2; then
2493
        add_extralibs -lpthreadGC2
2494
    elif ! check_lib pthread.h pthread_create -lpthread; then
2495
        disable pthreads
2496
    fi
2497
fi
2498

    
2499
for thread in $THREADS_LIST; do
2500
    if enabled $thread; then
2501
        test -n "$thread_type" &&
2502
            die "ERROR: Only one thread type must be selected." ||
2503
            thread_type="$thread"
2504
    fi
2505
done
2506

    
2507
check_lib math.h sin -lm
2508
disabled vaapi || check_lib va/va.h vaInitialize -lva
2509

    
2510
check_mathfunc exp2
2511
check_mathfunc exp2f
2512
check_mathfunc llrint
2513
check_mathfunc llrintf
2514
check_mathfunc log2
2515
check_mathfunc log2f
2516
check_mathfunc lrint
2517
check_mathfunc lrintf
2518
check_mathfunc round
2519
check_mathfunc roundf
2520
check_mathfunc truncf
2521

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

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

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

    
2567
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2568

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

    
2595
check_header linux/videodev.h
2596
check_header linux/videodev2.h
2597
check_header sys/videoio.h
2598

    
2599
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2600

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

    
2610
check_header sys/soundcard.h
2611
check_header soundcard.h
2612

    
2613
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2614

    
2615
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2616

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

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

    
2632
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2633

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

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

    
2655
echo "X{};" > $TMPV
2656
if test_ldflags -Wl,--version-script,$TMPV; then
2657
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2658
    check_cc <<EOF && enable symver_asm_label
2659
void ff_foo(void) __asm__ ("av_foo@VERSION");
2660
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2661
EOF
2662
    check_cc <<EOF && enable symver_gnu_asm
2663
__asm__(".symver ff_foo,av_foo@VERSION");
2664
void ff_foo(void) {}
2665
EOF
2666
fi
2667

    
2668
if enabled small; then
2669
    add_cflags $size_cflags
2670
    optimizations="small"
2671
elif enabled optimizations; then
2672
    add_cflags $speed_cflags
2673
else
2674
    add_cflags $noopt_cflags
2675
fi
2676
check_cflags -fno-math-errno
2677
check_cflags -fno-signed-zeros
2678

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

    
2716
if enabled gprof; then
2717
    add_cflags  -p
2718
    add_ldflags -p
2719
fi
2720

    
2721
enabled_any $THREADS_LIST      && enable threads
2722

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

    
2738
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2739

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

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

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

    
2841
echo "License: $license"
2842

    
2843
echo "Creating config.mak and config.h..."
2844

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

    
2880
enabled stripping || strip="echo skipping strip"
2881

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

    
2954
get_version(){
2955
    name=$1
2956
    file=$source_path/$2
2957
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2958
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2959
    lcname=$(tolower $name)
2960
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2961
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2962
}
2963

    
2964
get_version LIBSWSCALE  libswscale/swscale.h
2965
get_version LIBPOSTPROC libpostproc/postprocess.h
2966
get_version LIBAVCODEC  libavcodec/avcodec.h
2967
get_version LIBAVDEVICE libavdevice/avdevice.h
2968
get_version LIBAVFORMAT libavformat/avformat.h
2969
get_version LIBAVUTIL   libavutil/avutil.h
2970
get_version LIBAVFILTER libavfilter/avfilter.h
2971

    
2972
cat > $TMPH <<EOF
2973
/* Automatically generated by configure - do not modify! */
2974
#ifndef FFMPEG_CONFIG_H
2975
#define FFMPEG_CONFIG_H
2976
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2977
#define FFMPEG_LICENSE "$(c_escape $license)"
2978
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2979
#define CC_TYPE "$cc_type"
2980
#define CC_VERSION $cc_version
2981
#define restrict $_restrict
2982
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
2983
#define EXTERN_PREFIX "${extern_prefix}"
2984
#define EXTERN_ASM ${extern_prefix}
2985
EOF
2986

    
2987
test -n "$malloc_prefix" &&
2988
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2989

    
2990
if enabled small || disabled optimizations; then
2991
    echo "#undef  av_always_inline"  >> $TMPH
2992
    echo "#define av_always_inline"  >> $TMPH
2993
fi
2994

    
2995
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2996
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2997
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2998
                                      $CONFIG_EXTRA      \
2999
                                      $DECODER_LIST      \
3000
                                      $ENCODER_LIST      \
3001
                                      $HWACCEL_LIST      \
3002
                                      $PARSER_LIST       \
3003
                                      $BSF_LIST          \
3004
                                      $DEMUXER_LIST      \
3005
                                      $MUXER_LIST        \
3006
                                      $FILTER_LIST       \
3007
                                      $PROTOCOL_LIST     \
3008
                                      $INDEV_LIST        \
3009
                                      $OUTDEV_LIST       \
3010

    
3011
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3012
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3013

    
3014
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3015
cp_if_changed $TMPH config.h
3016

    
3017
cat > $TMPH <<EOF
3018
/* Generated by ffconf */
3019
#ifndef AVUTIL_AVCONFIG_H
3020
#define AVUTIL_AVCONFIG_H
3021
EOF
3022

    
3023
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3024

    
3025
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3026

    
3027
cp_if_changed $TMPH libavutil/avconfig.h
3028

    
3029
test -n "$WARNINGS" && printf "\n$WARNINGS"
3030

    
3031
# build pkg-config files
3032

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

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

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

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