Statistics
| Branch: | Revision:

ffmpeg / configure @ f054aaf7

History | View | Annotate | Download (87 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
  --disable-asm            disable all assembler optimizations
215
  --disable-altivec        disable AltiVec optimizations
216
  --disable-amd3dnow       disable 3DNow! optimizations
217
  --disable-amd3dnowext    disable 3DNow! extended optimizations
218
  --disable-mmx            disable MMX optimizations
219
  --disable-mmx2           disable MMX2 optimizations
220
  --disable-sse            disable SSE optimizations
221
  --disable-ssse3          disable SSSE3 optimizations
222
  --disable-armv5te        disable armv5te optimizations
223
  --disable-armv6          disable armv6 optimizations
224
  --disable-armv6t2        disable armv6t2 optimizations
225
  --disable-armvfp         disable ARM VFP optimizations
226
  --disable-iwmmxt         disable iwmmxt optimizations
227
  --disable-mmi            disable MMI optimizations
228
  --disable-neon           disable neon optimizations
229
  --disable-vis            disable VIS optimizations
230
  --disable-yasm           disable use of yasm assembler
231
  --enable-pic             build position-independent code
232
  --malloc-prefix=PFX      prefix malloc and related names with PFX
233
  --enable-sram            allow use of on-chip SRAM
234

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

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

    
248
quotes='""'
249

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

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

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

    
265
warn(){
266
    log "WARNING: $*"
267
    WARNINGS="${WARNINGS}WARNING: $*\n"
268
}
269

    
270
die(){
271
    echolog "$@"
272
    cat <<EOF
273

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

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

    
297
tolower(){
298
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
299
}
300

    
301
c_escape(){
302
    echo "$*" | sed 's/["\\]/\\\0/g'
303
}
304

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

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

    
319
map(){
320
    m=$1
321
    shift
322
    for v; do eval $m; done
323
}
324

    
325
set_all(){
326
    value=$1
327
    shift
328
    for var in $*; do
329
        eval $var=$value
330
    done
331
}
332

    
333
set_weak(){
334
    value=$1
335
    shift
336
    for var; do
337
        eval : \${$var:=$value}
338
    done
339
}
340

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

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

    
360
enable(){
361
    set_all yes $*
362
}
363

    
364
disable(){
365
    set_all no $*
366
}
367

    
368
enable_weak(){
369
    set_weak yes $*
370
}
371

    
372
disable_weak(){
373
    set_weak no $*
374
}
375

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

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

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

    
401
enable_deep(){
402
    do_enable_deep $*
403
    enable $*
404
}
405

    
406
enable_deep_weak(){
407
    do_enable_deep $*
408
    enable_weak $*
409
}
410

    
411
enabled(){
412
    test "${1#!}" = "$1" && op== || op=!=
413
    eval test "x\$${1#!}" $op "xyes"
414
}
415

    
416
disabled(){
417
    test "${1#!}" = "$1" && op== || op=!=
418
    eval test "x\$${1#!}" $op "xno"
419
}
420

    
421
enabled_all(){
422
    for opt; do
423
        enabled $opt || return 1
424
    done
425
}
426

    
427
disabled_all(){
428
    for opt; do
429
        disabled $opt || return 1
430
    done
431
}
432

    
433
enabled_any(){
434
    for opt; do
435
        enabled $opt && return 0
436
    done
437
}
438

    
439
disabled_any(){
440
    for opt; do
441
        disabled $opt && return 0
442
    done
443
    return 1
444
}
445

    
446
set_default(){
447
    for opt; do
448
        eval : \${$opt:=\$${opt}_default}
449
    done
450
}
451

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

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

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

    
475
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
476
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
477
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
478

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

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

    
492
        disable ${cfg}_checking
493
    done
494
}
495

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

    
513
append(){
514
    var=$1
515
    shift
516
    eval "$var=\"\$$var $*\""
517
}
518

    
519
prepend(){
520
    var=$1
521
    shift
522
    eval "$var=\"$* \$$var\""
523
}
524

    
525
add_cppflags(){
526
    append CPPFLAGS $($filter_cppflags "$@")
527
}
528

    
529
add_cflags(){
530
    append CFLAGS $($filter_cflags "$@")
531
}
532

    
533
add_asflags(){
534
    append ASFLAGS $($filter_asflags "$@")
535
}
536

    
537
add_ldflags(){
538
    append LDFLAGS "$@"
539
}
540

    
541
add_extralibs(){
542
    prepend extralibs "$@"
543
}
544

    
545
check_cmd(){
546
    log "$@"
547
    "$@" >> $logfile 2>&1
548
}
549

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

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

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

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

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

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

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

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

    
617
test_ldflags(){
618
    log test_ldflags "$@"
619
    check_ld "$@" <<EOF
620
int main(void){ return 0; }
621
EOF
622
}
623

    
624
check_ldflags(){
625
    log check_ldflags "$@"
626
    test_ldflags "$@" && add_ldflags "$@"
627
}
628

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

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

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

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

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

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

    
703
check_lib2(){
704
    log check_lib2 "$@"
705
    headers="$1"
706
    func="$2"
707
    shift 2
708
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
709
}
710

    
711
check_exec(){
712
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
713
}
714

    
715
check_exec_crash(){
716
    code=$(cat)
717

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

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

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

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

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

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

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

    
799
check_host_cflags(){
800
    log check_host_cflags "$@"
801
    check_host_cc "$@" <<EOF && append host_cflags "$@"
802
int x;
803
EOF
804
}
805

    
806
apply(){
807
    file=$1
808
    shift
809
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
810
}
811

    
812
cp_if_changed(){
813
    cmp -s "$1" "$2" &&
814
        echo "$2 is unchanged" ||
815
        cp -f "$1" "$2"
816
}
817

    
818
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
819
# system-dependent things.
820

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

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

    
902
THREADS_LIST='
903
    pthreads
904
    w32threads
905
'
906

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

    
931
ARCH_EXT_LIST='
932
    altivec
933
    amd3dnow
934
    amd3dnowext
935
    armv5te
936
    armv6
937
    armv6t2
938
    armvfp
939
    iwmmxt
940
    mmi
941
    mmx
942
    mmx2
943
    neon
944
    ppc4xx
945
    sse
946
    ssse3
947
    vis
948
'
949

    
950
HAVE_LIST_PUB='
951
    bigendian
952
'
953

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

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

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

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

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

    
1112
CMDLINE_APPEND="
1113
    extra_cflags
1114
"
1115

    
1116
# code dependency declarations
1117

    
1118
# architecture extensions
1119

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

    
1127
mmi_deps="mips"
1128

    
1129
altivec_deps="ppc"
1130
ppc4xx_deps="ppc"
1131

    
1132
vis_deps="sparc"
1133

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

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

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

    
1149
symver_if_any="symver_asm_label symver_gnu_asm"
1150

    
1151
# subsystems
1152
mdct_select="fft"
1153
rdft_select="fft"
1154

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

    
1282
vaapi_deps="va_va_h"
1283
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1284

    
1285
# parsers
1286
h264_parser_select="golomb h264dsp"
1287

    
1288
# bitstream_filters
1289
aac_adtstoasc_bsf_select="aac_parser"
1290

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

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

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

    
1361
# protocols
1362
gopher_protocol_deps="network"
1363
http_protocol_deps="network"
1364
http_protocol_select="tcp_protocol"
1365
mmst_protocol_deps="network"
1366
rtmp_protocol_select="tcp_protocol"
1367
rtp_protocol_select="udp_protocol"
1368
tcp_protocol_deps="network"
1369
udp_protocol_deps="network"
1370

    
1371
# filters
1372
movie_filter_deps="avfilter_lavf"
1373
avfilter_lavf_deps="avformat"
1374

    
1375
# libraries
1376
avdevice_deps="avcodec avformat"
1377
avformat_deps="avcodec"
1378

    
1379
# programs
1380
ffmpeg_deps="avcodec avformat swscale"
1381
ffmpeg_select="buffer_filter"
1382
ffplay_deps="avcodec avformat swscale sdl"
1383
ffplay_select="rdft"
1384
ffprobe_deps="avcodec avformat"
1385
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1386
ffserver_extralibs='$ldl'
1387

    
1388
doc_deps="texi2html"
1389

    
1390
# default parameters
1391

    
1392
logfile="config.log"
1393

    
1394
# installation paths
1395
prefix_default="/usr/local"
1396
bindir_default='${prefix}/bin'
1397
datadir_default='${prefix}/share/ffmpeg'
1398
incdir_default='${prefix}/include'
1399
libdir_default='${prefix}/lib'
1400
mandir_default='${prefix}/share/man'
1401
shlibdir_default="$libdir_default"
1402

    
1403
# toolchain
1404
ar_default="ar"
1405
cc_default="gcc"
1406
cc_version=\"unknown\"
1407
host_cc_default="gcc"
1408
ln_s="ln -sf"
1409
nm_default="nm"
1410
objformat="elf"
1411
ranlib="ranlib"
1412
strip_default="strip"
1413
yasmexe="yasm"
1414
nogas=":"
1415

    
1416
nm_opts='-g'
1417

    
1418
# machine
1419
arch_default=$(uname -m)
1420
cpu="generic"
1421

    
1422
# OS
1423
target_os_default=$(tolower $(uname -s))
1424
host_os=$target_os_default
1425

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

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

    
1463
CC_O='-o $@'
1464

    
1465
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1466
host_libs='-lm'
1467

    
1468
target_path='$(CURDIR)'
1469

    
1470
# since the object filename is not given with the -MM flag, the compiler
1471
# is only able to print the basename, and we must add the path ourselves
1472
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1473
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1474

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

    
1489
for v in "$@"; do
1490
    r=${v#*=}
1491
    l=${v%"$r"}
1492
    r=$(sh_quote "$r")
1493
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1494
done
1495

    
1496
find_things(){
1497
    thing=$1
1498
    pattern=$2
1499
    file=$source_path/$3
1500
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1501
}
1502

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

    
1515
for n in $COMPONENT_LIST; do
1516
    v=$(toupper ${n%s})_LIST
1517
    eval enable \$$v
1518
    eval ${n}_if_any="\$$v"
1519
done
1520

    
1521
enable $ARCH_EXT_LIST
1522

    
1523
die_unknown(){
1524
    echo "Unknown option \"$1\"."
1525
    echo "See $0 --help for available options."
1526
    exit 1
1527
}
1528

    
1529
show_list() {
1530
    suffix=_$1
1531
    shift
1532
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1533
    exit 0
1534
}
1535

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

    
1591
disabled logging && logfile=/dev/null
1592

    
1593
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1594
set >> $logfile
1595

    
1596
test -n "$cross_prefix" && enable cross_compile
1597

    
1598
if enabled cross_compile; then
1599
    test -n "$arch" && test -n "$target_os" ||
1600
        die "Must specify target arch and OS when cross-compiling"
1601
fi
1602

    
1603
set_default arch target_os
1604

    
1605
ar_default="${cross_prefix}${ar_default}"
1606
cc_default="${cross_prefix}${cc_default}"
1607
nm_default="${cross_prefix}${nm_default}"
1608
ranlib="${cross_prefix}${ranlib}"
1609
strip_default="${cross_prefix}${strip_default}"
1610

    
1611
sysinclude_default="${sysroot}/usr/include"
1612

    
1613
set_default cc nm strip sysinclude
1614
enabled cross_compile || host_cc_default=$cc
1615
set_default host_cc
1616

    
1617
exesuf() {
1618
    case $1 in
1619
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1620
    esac
1621
}
1622

    
1623
EXESUF=$(exesuf $target_os)
1624
HOSTEXESUF=$(exesuf $host_os)
1625

    
1626
# set temporary file name
1627
: ${TMPDIR:=$TEMPDIR}
1628
: ${TMPDIR:=$TMP}
1629
: ${TMPDIR:=/tmp}
1630

    
1631
if ! check_cmd type mktemp; then
1632
    # simple replacement for missing mktemp
1633
    # NOT SAFE FOR GENERAL USE
1634
    mktemp(){
1635
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1636
    }
1637
fi
1638

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

    
1647
trap 'rm -f -- $TMPFILES' EXIT
1648
trap exit HUP INT TERM
1649

    
1650
tmpfile TMPC  .c
1651
tmpfile TMPE  $EXESUF
1652
tmpfile TMPH  .h
1653
tmpfile TMPO  .o
1654
tmpfile TMPS  .S
1655
tmpfile TMPV  .ver
1656
tmpfile TMPSH .sh
1657

    
1658
unset -f mktemp
1659

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

    
1673
filter_cflags=echo
1674
filter_cppflags=echo
1675
filter_asflags=echo
1676

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

    
1813
test -n "$cc_type" && enable $cc_type ||
1814
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1815

    
1816
: ${as_default:=$cc}
1817
: ${dep_cc_default:=$cc}
1818
: ${ld_default:=$cc}
1819
set_default ar as dep_cc ld
1820

    
1821
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1822
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1823

    
1824
add_cflags $extra_cflags
1825
add_asflags $extra_cflags
1826

    
1827
if test -n "$sysroot"; then
1828
    case "$cc_type" in
1829
        gcc)
1830
            add_cppflags --sysroot="$sysroot"
1831
            add_ldflags --sysroot="$sysroot"
1832
        ;;
1833
        tms470)
1834
            add_cppflags -I"$sysinclude"
1835
            add_ldflags  --sysroot="$sysroot"
1836
        ;;
1837
        clang)
1838
            add_cppflags -isysroot "$sysroot"
1839
            add_ldflags -isysroot "$sysroot"
1840
        ;;
1841
    esac
1842
fi
1843

    
1844
if test "$cpu" = host; then
1845
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1846

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

    
1861
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1862
fi
1863

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

    
1905
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1906
enable $arch
1907

    
1908
# Add processor-specific flags
1909
if test "$cpu" = generic; then
1910
    : do nothing
1911
elif enabled ppc; then
1912

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

    
1953
elif enabled x86; then
1954

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

    
1979
elif enabled sparc; then
1980

    
1981
    case $cpu in
1982
        niagara)
1983
            cpuflags="-mcpu=$cpu"
1984
            disable vis
1985
        ;;
1986
        sparc64)
1987
            cpuflags="-mcpu=v9"
1988
        ;;
1989
    esac
1990

    
1991
elif enabled arm; then
1992

    
1993
    case $cpu in
1994
        armv*)
1995
            cpuflags="-march=$cpu"
1996
        ;;
1997
        *)
1998
            cpuflags="-mcpu=$cpu"
1999
        ;;
2000
    esac
2001

    
2002
elif enabled alpha; then
2003

    
2004
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2005

    
2006
elif enabled bfin; then
2007

    
2008
    cpuflags="-mcpu=$cpu"
2009

    
2010
elif enabled mips; then
2011

    
2012
    cpuflags="-march=$cpu"
2013

    
2014
elif enabled avr32; then
2015

    
2016
    case $cpu in
2017
        ap7[02]0[0-2])
2018
            subarch="avr32_ap"
2019
            cpuflags="-mpart=$cpu"
2020
        ;;
2021
        ap)
2022
            subarch="avr32_ap"
2023
            cpuflags="-march=$cpu"
2024
        ;;
2025
        uc3[ab]*)
2026
            subarch="avr32_uc"
2027
            cpuflags="-mcpu=$cpu"
2028
        ;;
2029
        uc)
2030
            subarch="avr32_uc"
2031
            cpuflags="-march=$cpu"
2032
        ;;
2033
    esac
2034

    
2035
fi
2036

    
2037
add_cflags $cpuflags
2038
add_asflags $cpuflags
2039

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

    
2053
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2054
check_cflags -std=c99
2055
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2056
#include <stdlib.h>
2057
EOF
2058
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2059
#include <stdlib.h>
2060
EOF
2061

    
2062
check_host_cflags -std=c99
2063

    
2064
case "$arch" in
2065
    alpha|ia64|mips|parisc|sparc)
2066
        spic=$shared
2067
    ;;
2068
    x86)
2069
        subarch="x86_32"
2070
        check_cc <<EOF && subarch="x86_64"
2071
        int test[(int)sizeof(char*) - 7];
2072
EOF
2073
        if test "$subarch" = "x86_64"; then
2074
            spic=$shared
2075
        fi
2076
    ;;
2077
esac
2078

    
2079
enable $subarch
2080
enabled spic && enable pic
2081

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

    
2233
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2234

    
2235
set_default $PATHS_LIST
2236

    
2237
add_extralibs $osextralibs
2238

    
2239
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2240
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2241

    
2242
# we need to build at least one lib type
2243
if ! enabled_any static shared; then
2244
    cat <<EOF
2245
At least one library type must be built.
2246
Specify --enable-static to build the static libraries or --enable-shared to
2247
build the shared libraries as well. To only build the shared libraries specify
2248
--disable-static in addition to --enable-shared.
2249
EOF
2250
    exit 1;
2251
fi
2252

    
2253
disabled static && LIBNAME=""
2254

    
2255
die_license_disabled() {
2256
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2257
}
2258

    
2259
die_license_disabled gpl libx264
2260
die_license_disabled gpl libxvid
2261
die_license_disabled gpl postproc
2262
die_license_disabled gpl x11grab
2263

    
2264
die_license_disabled nonfree libfaac
2265

    
2266
die_license_disabled version3 libopencore_amrnb
2267
die_license_disabled version3 libopencore_amrwb
2268

    
2269
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2270

    
2271
check_deps $ARCH_EXT_LIST
2272

    
2273
disabled optimizations || check_cflags -fomit-frame-pointer
2274

    
2275
enable_pic() {
2276
    enable pic
2277
    add_cppflags -DPIC
2278
    add_cflags   -fPIC
2279
    add_asflags  -fPIC
2280
}
2281

    
2282
enabled pic && enable_pic
2283

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

    
2290
check_cc <<EOF && enable inline_asm
2291
void foo(void) { __asm__ volatile ("" ::); }
2292
EOF
2293

    
2294
_restrict=
2295
for restrict_keyword in restrict __restrict__ __restrict; do
2296
    check_cc <<EOF && _restrict=$restrict_keyword && break
2297
void foo(char * $restrict_keyword p);
2298
EOF
2299
done
2300

    
2301
check_cc <<EOF && enable attribute_packed
2302
struct { int x; } __attribute__((packed)) x;
2303
EOF
2304

    
2305
check_cc <<EOF && enable attribute_may_alias
2306
union { int x; } __attribute__((may_alias)) x;
2307
EOF
2308

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

    
2314
if enabled alpha; then
2315

    
2316
    check_cflags -mieee
2317

    
2318
elif enabled arm; then
2319

    
2320
    check_cflags -marm
2321
    nogas=die
2322

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

    
2328
    # We have to check if pld is a nop and disable it.
2329
    check_asm pld '"pld [r0]"'
2330

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

    
2338
    enabled_all armv6t2 shared !pic && enable_pic
2339

    
2340
elif enabled mips; then
2341

    
2342
    check_asm loongson '"dmult.g $1, $2, $3"'
2343
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2344

    
2345
elif enabled ppc; then
2346

    
2347
    enable local_aligned_8 local_aligned_16
2348

    
2349
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2350
    check_asm ibm_asm   '"add 0, 0, 0"'
2351
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2352
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2353

    
2354
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2355
    if enabled altivec; then
2356
        nogas=warn
2357
        check_cflags -maltivec -mabi=altivec &&
2358
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2359
        check_cflags -faltivec
2360

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

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

    
2378
elif enabled sparc; then
2379

    
2380
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2381
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2382

    
2383
elif enabled x86; then
2384

    
2385
    enable local_aligned_8 local_aligned_16
2386

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

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

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

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

    
2419
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2420

    
2421
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2422
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2423
    enabled     pic           && append YASMFLAGS "-DPIC"
2424
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2425
    case "$objformat" in
2426
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2427
    esac
2428
    if ! disabled yasm; then
2429
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2430
            warn "yasm not found, performance will suffer"
2431
    fi
2432

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

    
2439
fi
2440

    
2441
if enabled asm; then
2442
    as=${gas:=$as}
2443
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2444
        $nogas "GNU assembler not found, install gas-preprocessor"
2445
fi
2446

    
2447
if check_func dlopen; then
2448
    ldl=
2449
elif check_func dlopen -ldl; then
2450
    ldl=-ldl
2451
fi
2452

    
2453
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2454
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2455

    
2456
check_func  fcntl
2457
check_func  fork
2458
check_func  getaddrinfo $network_extralibs
2459
check_func  gethrtime
2460
check_func  getrusage
2461
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2462
check_func  inet_aton $network_extralibs
2463
check_func  isatty
2464
check_func  ${malloc_prefix}memalign            && enable memalign
2465
check_func  mkstemp
2466
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2467
check_func  setrlimit
2468
check_func  strerror_r
2469
check_func_headers io.h setmode
2470
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2471
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2472
check_func_headers windows.h GetProcessTimes
2473
check_func_headers windows.h VirtualAlloc
2474

    
2475
check_header conio.h
2476
check_header dlfcn.h
2477
check_header dxva2api.h
2478
check_header malloc.h
2479
check_header poll.h
2480
check_header sys/mman.h
2481
check_header sys/resource.h
2482
check_header sys/select.h
2483
check_header termios.h
2484
check_header vdpau/vdpau.h
2485
check_header vdpau/vdpau_x11.h
2486
check_header X11/extensions/XvMClib.h
2487

    
2488
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2489

    
2490
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2491
     enabled_any $need_memalign ; then
2492
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2493
fi
2494

    
2495
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2496
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2497

    
2498
# check for some common methods of building with pthread support
2499
# do this before the optional library checks as some of them require pthreads
2500
if ! disabled pthreads && ! enabled w32threads; then
2501
    enable pthreads
2502
    if check_func pthread_create; then
2503
        :
2504
    elif check_func pthread_create -pthread; then
2505
        add_cflags -pthread
2506
        add_extralibs -pthread
2507
    elif check_func pthread_create -pthreads; then
2508
        add_cflags -pthreads
2509
        add_extralibs -pthreads
2510
    elif check_func pthread_create -lpthreadGC2; then
2511
        add_extralibs -lpthreadGC2
2512
    elif ! check_lib pthread.h pthread_create -lpthread; then
2513
        disable pthreads
2514
    fi
2515
fi
2516

    
2517
for thread in $THREADS_LIST; do
2518
    if enabled $thread; then
2519
        test -n "$thread_type" &&
2520
            die "ERROR: Only one thread type must be selected." ||
2521
            thread_type="$thread"
2522
    fi
2523
done
2524

    
2525
check_lib math.h sin -lm
2526
disabled vaapi || check_lib va/va.h vaInitialize -lva
2527

    
2528
check_mathfunc exp2
2529
check_mathfunc exp2f
2530
check_mathfunc llrint
2531
check_mathfunc llrintf
2532
check_mathfunc log2
2533
check_mathfunc log2f
2534
check_mathfunc lrint
2535
check_mathfunc lrintf
2536
check_mathfunc round
2537
check_mathfunc roundf
2538
check_mathfunc truncf
2539

    
2540
# these are off by default, so fail if requested and not available
2541
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2542
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2543
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2544
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2545
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2546
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2547
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2548
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2549
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2550
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2551
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2552
enabled librtmp    && check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2553
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"
2554
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2555
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2556
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2557
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2558
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2559
enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2560
                      require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2561
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2562
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2563
                        die "ERROR: libx264 version must be >= 0.98."; }
2564
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2565
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2566

    
2567
# libdc1394 check
2568
if enabled libdc1394; then
2569
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2570
        enable libdc1394_2; } ||
2571
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2572
        enable libdc1394_1; } ||
2573
    die "ERROR: No version of libdc1394 found "
2574
fi
2575

    
2576
SDL_CONFIG="${cross_prefix}sdl-config"
2577
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2578
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2579
    sdl_libs=$("${SDL_CONFIG}" --libs)
2580
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2581
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2582
    enable sdl &&
2583
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2584
fi
2585

    
2586
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2587

    
2588
if enabled network; then
2589
    check_type "sys/types.h sys/socket.h" socklen_t
2590
    check_type netdb.h "struct addrinfo"
2591
    check_type netinet/in.h "struct ipv6_mreq"
2592
    check_type netinet/in.h "struct sockaddr_in6"
2593
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2594
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2595
    # Prefer arpa/inet.h over winsock2
2596
    if check_header arpa/inet.h ; then
2597
        check_func closesocket
2598
    elif check_header winsock2.h ; then
2599
        check_func_headers winsock2.h closesocket -lws2 && \
2600
            network_extralibs="-lws2" || \
2601
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2602
            network_extralibs="-lws2_32"; }
2603
        check_type ws2tcpip.h socklen_t
2604
        check_type ws2tcpip.h "struct addrinfo"
2605
        check_type ws2tcpip.h "struct ipv6_mreq"
2606
        check_type ws2tcpip.h "struct sockaddr_in6"
2607
        check_type ws2tcpip.h "struct sockaddr_storage"
2608
        check_struct winsock2.h "struct sockaddr" sa_len
2609
    else
2610
        disable network
2611
    fi
2612
fi
2613

    
2614
check_header linux/videodev.h
2615
check_header linux/videodev2.h
2616
check_header sys/videoio.h
2617

    
2618
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2619

    
2620
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2621
{ check_header dev/bktr/ioctl_meteor.h &&
2622
  check_header dev/bktr/ioctl_bt848.h; } ||
2623
{ check_header machine/ioctl_meteor.h &&
2624
  check_header machine/ioctl_bt848.h; } ||
2625
{ check_header dev/video/meteor/ioctl_meteor.h &&
2626
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2627
check_header dev/ic/bt8xx.h
2628

    
2629
check_header sys/soundcard.h
2630
check_header soundcard.h
2631

    
2632
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2633

    
2634
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2635

    
2636
enabled x11grab                         &&
2637
check_header X11/Xlib.h                 &&
2638
check_header X11/extensions/XShm.h      &&
2639
check_header X11/extensions/Xfixes.h    &&
2640
check_func XOpenDisplay -lX11           &&
2641
check_func XShmCreateImage -lX11 -lXext &&
2642
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2643

    
2644
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2645
check_cpp_condition \
2646
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2647
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2648
      disable vdpau; }
2649
fi
2650

    
2651
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2652

    
2653
# add some useful compiler flags if supported
2654
check_cflags -Wdeclaration-after-statement
2655
check_cflags -Wall
2656
check_cflags -Wno-switch
2657
check_cflags -Wdisabled-optimization
2658
check_cflags -Wpointer-arith
2659
check_cflags -Wredundant-decls
2660
check_cflags -Wno-pointer-sign
2661
check_cflags -Wcast-qual
2662
check_cflags -Wwrite-strings
2663
check_cflags -Wtype-limits
2664
check_cflags -Wundef
2665
check_cflags -Wmissing-prototypes
2666
enabled extra_warnings && check_cflags -Winline
2667

    
2668
# add some linker flags
2669
check_ldflags -Wl,--warn-common
2670
check_ldflags -Wl,--as-needed
2671
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'
2672
check_ldflags -Wl,-Bsymbolic
2673

    
2674
echo "X{};" > $TMPV
2675
if test_ldflags -Wl,--version-script,$TMPV; then
2676
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2677
    check_cc <<EOF && enable symver_asm_label
2678
void ff_foo(void) __asm__ ("av_foo@VERSION");
2679
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2680
EOF
2681
    check_cc <<EOF && enable symver_gnu_asm
2682
__asm__(".symver ff_foo,av_foo@VERSION");
2683
void ff_foo(void) {}
2684
EOF
2685
fi
2686

    
2687
if enabled small; then
2688
    add_cflags $size_cflags
2689
    optimizations="small"
2690
elif enabled optimizations; then
2691
    add_cflags $speed_cflags
2692
else
2693
    add_cflags $noopt_cflags
2694
fi
2695
check_cflags -fno-math-errno
2696
check_cflags -fno-signed-zeros
2697

    
2698
if enabled icc; then
2699
    # Just warnings, no remarks
2700
    check_cflags -w1
2701
    # -wd: Disable following warnings
2702
    # 144, 167, 556: -Wno-pointer-sign
2703
    # 10006: ignoring unknown option -fno-signed-zeros
2704
    # 10156: ignoring option '-W'; no argument required
2705
    check_cflags -wd144,167,556,10006,10156
2706
    # 11030: Warning unknown option --as-needed
2707
    # 10156: ignoring option '-export'; no argument required
2708
    check_ldflags -wd10156,11030
2709
    # Allow to compile with optimizations
2710
    check_ldflags -march=$cpu
2711
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2712
    enable ebp_available
2713
elif enabled ccc; then
2714
    # disable some annoying warnings
2715
    add_cflags -msg_disable cvtu32to64
2716
    add_cflags -msg_disable embedcomment
2717
    add_cflags -msg_disable needconstext
2718
    add_cflags -msg_disable nomainieee
2719
    add_cflags -msg_disable ptrmismatch1
2720
    add_cflags -msg_disable unreachcode
2721
elif enabled gcc; then
2722
    check_cflags -fno-tree-vectorize
2723
    check_cflags -Werror=implicit-function-declaration
2724
    check_cflags -Werror=missing-prototypes
2725
elif enabled clang; then
2726
    check_cflags -Qunused-arguments
2727
elif enabled armcc; then
2728
    # 2523: use of inline assembler is deprecated
2729
    add_cflags -Wrvct,--diag_suppress=2523
2730
    add_cflags -Wrvct,--diag_suppress=1207
2731
elif enabled tms470; then
2732
    add_cflags -pds=824 -pds=837
2733
fi
2734

    
2735
enabled_any $THREADS_LIST      && enable threads
2736

    
2737
check_deps $CONFIG_LIST       \
2738
           $CONFIG_EXTRA      \
2739
           $HAVE_LIST         \
2740
           $DECODER_LIST      \
2741
           $ENCODER_LIST      \
2742
           $HWACCEL_LIST      \
2743
           $PARSER_LIST       \
2744
           $BSF_LIST          \
2745
           $DEMUXER_LIST      \
2746
           $MUXER_LIST        \
2747
           $FILTER_LIST       \
2748
           $INDEV_LIST        \
2749
           $OUTDEV_LIST       \
2750
           $PROTOCOL_LIST     \
2751

    
2752
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2753

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

    
2833
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2834
    echo "Enabled ${type}s:"
2835
    eval list=\$$(toupper $type)_LIST
2836
    for part in $list; do
2837
        enabled $part && echo ${part%_*}
2838
    done | sort | pr -3 -t
2839
    echo
2840
done
2841

    
2842
license="LGPL version 2.1 or later"
2843
if enabled nonfree; then
2844
    license="nonfree and unredistributable"
2845
elif enabled gplv3; then
2846
    license="GPL version 3 or later"
2847
elif enabled lgplv3; then
2848
    license="LGPL version 3 or later"
2849
elif enabled gpl; then
2850
    license="GPL version 2 or later"
2851
fi
2852

    
2853
echo "License: $license"
2854

    
2855
echo "Creating config.mak and config.h..."
2856

    
2857
# build tree in object directory if source path is different from current one
2858
if enabled source_path_used; then
2859
    DIRS="
2860
        doc
2861
        libavcodec
2862
        libavcodec/$arch
2863
        libavdevice
2864
        libavfilter
2865
        libavformat
2866
        libavutil
2867
        libavutil/$arch
2868
        libpostproc
2869
        libswscale
2870
        libswscale/$arch
2871
        tests
2872
        tools
2873
    "
2874
    FILES="
2875
        Makefile
2876
        common.mak
2877
        subdir.mak
2878
        doc/texi2pod.pl
2879
        libavcodec/Makefile
2880
        libavcodec/${arch}/Makefile
2881
        libavdevice/Makefile
2882
        libavfilter/Makefile
2883
        libavformat/Makefile
2884
        libavutil/Makefile
2885
        libpostproc/Makefile
2886
        libswscale/Makefile
2887
    "
2888
    map 'mkdir -p $v' $DIRS;
2889
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2890
fi
2891

    
2892
enabled stripping || strip="echo skipping strip"
2893

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

    
2966
get_version(){
2967
    name=$1
2968
    file=$source_path/$2
2969
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2970
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2971
    lcname=$(tolower $name)
2972
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2973
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2974
}
2975

    
2976
get_version LIBSWSCALE  libswscale/swscale.h
2977
get_version LIBPOSTPROC libpostproc/postprocess.h
2978
get_version LIBAVCODEC  libavcodec/avcodec.h
2979
get_version LIBAVDEVICE libavdevice/avdevice.h
2980
get_version LIBAVFORMAT libavformat/avformat.h
2981
get_version LIBAVUTIL   libavutil/avutil.h
2982
get_version LIBAVFILTER libavfilter/avfilter.h
2983

    
2984
cat > $TMPH <<EOF
2985
/* Automatically generated by configure - do not modify! */
2986
#ifndef FFMPEG_CONFIG_H
2987
#define FFMPEG_CONFIG_H
2988
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2989
#define FFMPEG_LICENSE "$(c_escape $license)"
2990
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2991
#define CC_TYPE "$cc_type"
2992
#define CC_VERSION $cc_version
2993
#define restrict $_restrict
2994
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
2995
#define EXTERN_PREFIX "${extern_prefix}"
2996
#define EXTERN_ASM ${extern_prefix}
2997
EOF
2998

    
2999
test -n "$malloc_prefix" &&
3000
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3001

    
3002
if enabled small || disabled optimizations; then
3003
    echo "#undef  av_always_inline"  >> $TMPH
3004
    echo "#define av_always_inline"  >> $TMPH
3005
fi
3006

    
3007
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3008
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3009
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3010
                                      $CONFIG_EXTRA      \
3011
                                      $DECODER_LIST      \
3012
                                      $ENCODER_LIST      \
3013
                                      $HWACCEL_LIST      \
3014
                                      $PARSER_LIST       \
3015
                                      $BSF_LIST          \
3016
                                      $DEMUXER_LIST      \
3017
                                      $MUXER_LIST        \
3018
                                      $FILTER_LIST       \
3019
                                      $PROTOCOL_LIST     \
3020
                                      $INDEV_LIST        \
3021
                                      $OUTDEV_LIST       \
3022

    
3023
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3024
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3025

    
3026
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3027
cp_if_changed $TMPH config.h
3028

    
3029
cat > $TMPH <<EOF
3030
/* Generated by ffconf */
3031
#ifndef AVUTIL_AVCONFIG_H
3032
#define AVUTIL_AVCONFIG_H
3033
EOF
3034

    
3035
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3036

    
3037
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3038

    
3039
cp_if_changed $TMPH libavutil/avconfig.h
3040

    
3041
test -n "$WARNINGS" && printf "\n$WARNINGS"
3042

    
3043
# build pkg-config files
3044

    
3045
pkgconfig_generate(){
3046
name=$1
3047
shortname=${name#lib}${build_suffix}
3048
comment=$2
3049
version=$3
3050
libs=$4
3051
requires=$5
3052
cat <<EOF > $name/$name.pc
3053
prefix=$prefix
3054
exec_prefix=\${prefix}
3055
libdir=$libdir
3056
includedir=$incdir
3057

    
3058
Name: $name
3059
Description: $comment
3060
Version: $version
3061
Requires: $(enabled shared || echo $requires)
3062
Requires.private: $(enabled shared && echo $requires)
3063
Conflicts:
3064
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3065
Libs.private: $(enabled shared && echo $libs)
3066
Cflags: -I\${includedir}
3067
EOF
3068
cat <<EOF > $name/$name-uninstalled.pc
3069
prefix=
3070
exec_prefix=
3071
libdir=\${pcfiledir}
3072
includedir=${source_path}
3073

    
3074
Name: $name
3075
Description: $comment
3076
Version: $version
3077
Requires: $requires
3078
Conflicts:
3079
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3080
Cflags: -I\${includedir}
3081
EOF
3082
}
3083

    
3084
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3085
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3086
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3087
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3088
enabled avfilter &&
3089
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3090
enabled postproc &&
3091
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3092
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"