Statistics
| Branch: | Revision:

ffmpeg / configure @ a5b64584

History | View | Annotate | Download (101 KB)

1
#!/bin/sh
2
#
3
# Libav 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 LIBAV, 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 Libav."
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
  --disable-pthreads       disable pthreads [auto]
94
  --enable-w32threads      use Win32 threads [no]
95
  --enable-x11grab         enable X11 grabbing [no]
96
  --disable-network        disable network support [no]
97
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
98
  --enable-gray            enable full grayscale support (slower color)
99
  --disable-swscale-alpha  disable alpha channel support in swscale
100
  --disable-fastdiv        disable table-based division
101
  --enable-small           optimize for size instead of speed
102
  --disable-aandct         disable AAN DCT code
103
  --disable-dct            disable DCT code
104
  --disable-fft            disable FFT code
105
  --disable-golomb         disable Golomb code
106
  --disable-huffman        disable Huffman 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-frei0r          enable frei0r video filtering
165
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167
  --enable-libopencv       enable video filtering via libopencv [no]
168
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
169
                           and libraw1394 [no]
170
  --enable-libdirac        enable Dirac support via libdirac [no]
171
  --enable-libfaac         enable FAAC support via libfaac [no]
172
  --enable-libfreetype     enable libfreetype [no]
173
  --enable-libgsm          enable GSM support via libgsm [no]
174
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
175
  --enable-libnut          enable NUT (de)muxing via libnut,
176
                           native (de)muxer exists [no]
177
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
178
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
179
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
180
  --enable-libspeex        enable Speex decoding via libspeex [no]
181
  --enable-libtheora       enable Theora encoding via libtheora [no]
182
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
183
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
184
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
185
                           native implementation exists [no]
186
  --enable-libvpx          enable VP8 support via libvpx [no]
187
  --enable-libx264         enable H.264 encoding via x264 [no]
188
  --enable-libxavs         enable AVS encoding via xavs [no]
189
  --enable-libxvid         enable Xvid encoding via xvidcore,
190
                           native MPEG-4/Xvid encoder exists [no]
191
  --enable-mlib            enable Sun medialib [no]
192
  --enable-zlib            enable zlib [autodetect]
193

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

    
243
Developer options (useful when working on Libav itself):
244
  --disable-debug          disable debugging symbols
245
  --enable-debug=LEVEL     set the debug level [$debuglevel]
246
  --disable-optimizations  disable compiler optimizations
247
  --enable-extra-warnings  enable more compiler warnings
248
  --samples=PATH           location of test samples for FATE, if not set use
249
                           \$FATE_SAMPLES at make invocation time.
250

    
251
NOTE: Object files are built at the place where configure is launched.
252
EOF
253
  exit 0
254
}
255

    
256
quotes='""'
257

    
258
log(){
259
    echo "$@" >> $logfile
260
}
261

    
262
log_file(){
263
    log BEGIN $1
264
    pr -n -t $1 >> $logfile
265
    log END $1
266
}
267

    
268
echolog(){
269
    log "$@"
270
    echo "$@"
271
}
272

    
273
warn(){
274
    log "WARNING: $*"
275
    WARNINGS="${WARNINGS}WARNING: $*\n"
276
}
277

    
278
die(){
279
    echolog "$@"
280
    cat <<EOF
281

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

    
300
# Avoid locale weirdness, besides we really just want to translate ASCII.
301
toupper(){
302
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
303
}
304

    
305
tolower(){
306
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
307
}
308

    
309
c_escape(){
310
    echo "$*" | sed 's/["\\]/\\\0/g'
311
}
312

    
313
sh_quote(){
314
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
315
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
316
    echo "$v"
317
}
318

    
319
cleanws(){
320
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
321
}
322

    
323
filter(){
324
    pat=$1
325
    shift
326
    for v; do
327
        eval "case $v in $pat) echo $v ;; esac"
328
    done
329
}
330

    
331
filter_out(){
332
    pat=$1
333
    shift
334
    for v; do
335
        eval "case $v in $pat) ;; *) echo $v ;; esac"
336
    done
337
}
338

    
339
map(){
340
    m=$1
341
    shift
342
    for v; do eval $m; done
343
}
344

    
345
set_all(){
346
    value=$1
347
    shift
348
    for var in $*; do
349
        eval $var=$value
350
    done
351
}
352

    
353
set_weak(){
354
    value=$1
355
    shift
356
    for var; do
357
        eval : \${$var:=$value}
358
    done
359
}
360

    
361
set_safe(){
362
    var=$1
363
    shift
364
    eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
365
}
366

    
367
get_safe(){
368
    eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
369
}
370

    
371
pushvar(){
372
    for var in $*; do
373
        eval level=\${${var}_level:=0}
374
        eval ${var}_${level}="\$$var"
375
        eval ${var}_level=$(($level+1))
376
    done
377
}
378

    
379
popvar(){
380
    for var in $*; do
381
        eval level=\${${var}_level:-0}
382
        test $level = 0 && continue
383
        eval level=$(($level-1))
384
        eval $var="\${${var}_${level}}"
385
        eval ${var}_level=$level
386
        eval unset ${var}_${level}
387
    done
388
}
389

    
390
enable(){
391
    set_all yes $*
392
}
393

    
394
disable(){
395
    set_all no $*
396
}
397

    
398
enable_weak(){
399
    set_weak yes $*
400
}
401

    
402
disable_weak(){
403
    set_weak no $*
404
}
405

    
406
enable_safe(){
407
    for var; do
408
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
409
    done
410
}
411

    
412
disable_safe(){
413
    for var; do
414
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
415
    done
416
}
417

    
418
do_enable_deep(){
419
    for var; do
420
        enabled $var && continue
421
        eval sel="\$${var}_select"
422
        eval sgs="\$${var}_suggest"
423
        pushvar var sgs
424
        enable_deep $sel
425
        popvar sgs
426
        enable_deep_weak $sgs
427
        popvar var
428
    done
429
}
430

    
431
enable_deep(){
432
    do_enable_deep $*
433
    enable $*
434
}
435

    
436
enable_deep_weak(){
437
    do_enable_deep $*
438
    enable_weak $*
439
}
440

    
441
enabled(){
442
    test "${1#!}" = "$1" && op== || op=!=
443
    eval test "x\$${1#!}" $op "xyes"
444
}
445

    
446
disabled(){
447
    test "${1#!}" = "$1" && op== || op=!=
448
    eval test "x\$${1#!}" $op "xno"
449
}
450

    
451
enabled_all(){
452
    for opt; do
453
        enabled $opt || return 1
454
    done
455
}
456

    
457
disabled_all(){
458
    for opt; do
459
        disabled $opt || return 1
460
    done
461
}
462

    
463
enabled_any(){
464
    for opt; do
465
        enabled $opt && return 0
466
    done
467
}
468

    
469
disabled_any(){
470
    for opt; do
471
        disabled $opt && return 0
472
    done
473
    return 1
474
}
475

    
476
set_default(){
477
    for opt; do
478
        eval : \${$opt:=\$${opt}_default}
479
    done
480
}
481

    
482
is_in(){
483
    value=$1
484
    shift
485
    for var in $*; do
486
        [ $var = $value ] && return 0
487
    done
488
    return 1
489
}
490

    
491
check_deps(){
492
    for cfg; do
493
        cfg="${cfg#!}"
494
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
495
        disabled ${cfg}_checking && continue
496
        enable ${cfg}_checking
497

    
498
        eval dep_all="\$${cfg}_deps"
499
        eval dep_any="\$${cfg}_deps_any"
500
        eval dep_sel="\$${cfg}_select"
501
        eval dep_sgs="\$${cfg}_suggest"
502
        eval dep_ifa="\$${cfg}_if"
503
        eval dep_ifn="\$${cfg}_if_any"
504

    
505
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
506
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
507
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
508

    
509
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
510
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
511
        enabled_all  $dep_all || disable $cfg
512
        enabled_any  $dep_any || disable $cfg
513
        disabled_any $dep_sel && disable $cfg
514

    
515
        if enabled $cfg; then
516
            eval dep_extralibs="\$${cfg}_extralibs"
517
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
518
            enable_deep $dep_sel
519
            enable_deep_weak $dep_sgs
520
        fi
521

    
522
        disable ${cfg}_checking
523
    done
524
}
525

    
526
print_config_h(){
527
    enabled $1 && v=1 || v=0
528
    echo "#define $2 $v"
529
}
530

    
531
print_config_mak(){
532
    enabled $1 && v= || v=!
533
    echo "$v$2=yes"
534
}
535

    
536
print_config_asm(){
537
    enabled $1 && echo "%define $2"
538
}
539

    
540
print_config(){
541
    pfx=$1
542
    files=$2
543
    shift 2
544
    for cfg; do
545
        ucname="$(toupper $cfg)"
546
        for f in $files; do
547
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
548
        done
549
    done
550
}
551

    
552
print_enabled(){
553
    test "$1" = -n && end=" " && shift || end="\n"
554
    suf=$1
555
    shift
556
    for v; do
557
        enabled $v && printf "%s$end" ${v%$suf};
558
    done
559
}
560

    
561
append(){
562
    var=$1
563
    shift
564
    eval "$var=\"\$$var $*\""
565
}
566

    
567
prepend(){
568
    var=$1
569
    shift
570
    eval "$var=\"$* \$$var\""
571
}
572

    
573
add_cppflags(){
574
    append CPPFLAGS $($filter_cppflags "$@")
575
}
576

    
577
add_cflags(){
578
    append CFLAGS $($filter_cflags "$@")
579
}
580

    
581
add_asflags(){
582
    append ASFLAGS $($filter_asflags "$@")
583
}
584

    
585
add_ldflags(){
586
    append LDFLAGS "$@"
587
}
588

    
589
add_extralibs(){
590
    prepend extralibs "$@"
591
}
592

    
593
check_cmd(){
594
    log "$@"
595
    "$@" >> $logfile 2>&1
596
}
597

    
598
check_cc(){
599
    log check_cc "$@"
600
    cat > $TMPC
601
    log_file $TMPC
602
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
603
}
604

    
605
check_cpp(){
606
    log check_cpp "$@"
607
    cat > $TMPC
608
    log_file $TMPC
609
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
610
}
611

    
612
check_as(){
613
    log check_as "$@"
614
    cat > $TMPC
615
    log_file $TMPC
616
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
617
}
618

    
619
check_asm(){
620
    log check_asm "$@"
621
    name="$1"
622
    code="$2"
623
    shift 2
624
    disable $name
625
    check_as "$@" <<EOF && enable $name
626
void foo(void){ __asm__ volatile($code); }
627
EOF
628
}
629

    
630
check_yasm(){
631
    log check_yasm "$@"
632
    echo "$1" > $TMPS
633
    log_file $TMPS
634
    shift 1
635
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
636
}
637

    
638
check_ld(){
639
    log check_ld "$@"
640
    flags=''
641
    libs=''
642
    for f; do
643
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
644
    done
645
    check_cc $($filter_cflags $flags) || return
646
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
647
}
648

    
649
check_cppflags(){
650
    log check_cppflags "$@"
651
    set -- $($filter_cppflags "$@")
652
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
653
int x;
654
EOF
655
}
656

    
657
check_cflags(){
658
    log check_cflags "$@"
659
    set -- $($filter_cflags "$@")
660
    check_cc "$@" <<EOF && append CFLAGS "$@"
661
int x;
662
EOF
663
}
664

    
665
test_ldflags(){
666
    log test_ldflags "$@"
667
    check_ld "$@" <<EOF
668
int main(void){ return 0; }
669
EOF
670
}
671

    
672
check_ldflags(){
673
    log check_ldflags "$@"
674
    test_ldflags "$@" && add_ldflags "$@"
675
}
676

    
677
check_header(){
678
    log check_header "$@"
679
    header=$1
680
    shift
681
    disable_safe $header
682
    check_cpp "$@" <<EOF && enable_safe $header
683
#include <$header>
684
int x;
685
EOF
686
}
687

    
688
check_func(){
689
    log check_func "$@"
690
    func=$1
691
    shift
692
    disable $func
693
    check_ld "$@" <<EOF && enable $func
694
extern int $func();
695
int main(void){ $func(); }
696
EOF
697
}
698

    
699
check_mathfunc(){
700
    log check_mathfunc "$@"
701
    func=$1
702
    shift
703
    disable $func
704
    check_ld "$@" <<EOF && enable $func
705
#include <math.h>
706
float foo(float f) { return $func(f); }
707
int main(void){ return 0; }
708
EOF
709
}
710

    
711
check_func_headers(){
712
    log check_func_headers "$@"
713
    headers=$1
714
    funcs=$2
715
    shift 2
716
    {
717
        for hdr in $headers; do
718
            echo "#include <$hdr>"
719
        done
720
        for func in $funcs; do
721
            echo "long check_$func(void) { return (long) $func; }"
722
        done
723
        echo "int main(void) { return 0; }"
724
    } | check_ld "$@" && enable $funcs && enable_safe $headers
725
}
726

    
727
check_cpp_condition(){
728
    log check_cpp_condition "$@"
729
    header=$1
730
    condition=$2
731
    shift 2
732
    check_cpp $($filter_cppflags "$@") <<EOF
733
#include <$header>
734
#if !($condition)
735
#error "unsatisfied condition: $condition"
736
#endif
737
EOF
738
}
739

    
740
check_lib(){
741
    log check_lib "$@"
742
    header="$1"
743
    func="$2"
744
    shift 2
745
    check_header $header && check_func $func "$@" && add_extralibs "$@"
746
}
747

    
748
check_lib2(){
749
    log check_lib2 "$@"
750
    headers="$1"
751
    funcs="$2"
752
    shift 2
753
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
754
}
755

    
756
check_pkg_config(){
757
    log check_pkg_config "$@"
758
    pkg="$1"
759
    headers="$2"
760
    funcs="$3"
761
    shift 3
762
    $pkg_config --exists $pkg || return
763
    pkg_cflags=$($pkg_config --cflags $pkg)
764
    pkg_libs=$($pkg_config --libs $pkg)
765
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
766
        set_safe ${pkg}_cflags $pkg_cflags   &&
767
        set_safe ${pkg}_libs   $pkg_libs
768
}
769

    
770
check_exec(){
771
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
772
}
773

    
774
check_exec_crash(){
775
    code=$(cat)
776

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

    
783
    (check_exec "$@") >> $logfile 2>&1 <<EOF
784
#include <signal.h>
785
static void sighandler(int sig){
786
    raise(SIGTERM);
787
}
788
int main(void){
789
    signal(SIGILL, sighandler);
790
    signal(SIGFPE, sighandler);
791
    signal(SIGSEGV, sighandler);
792
#ifdef SIGBUS
793
    signal(SIGBUS, sighandler);
794
#endif
795
    { $code }
796
}
797
EOF
798
}
799

    
800
check_type(){
801
    log check_type "$@"
802
    headers=$1
803
    type=$2
804
    shift 2
805
    disable_safe "$type"
806
    incs=""
807
    for hdr in $headers; do
808
        incs="$incs
809
#include <$hdr>"
810
    done
811
    check_cc "$@" <<EOF && enable_safe "$type"
812
$incs
813
$type v;
814
EOF
815
}
816

    
817
check_struct(){
818
    log check_type "$@"
819
    headers=$1
820
    struct=$2
821
    member=$3
822
    shift 3
823
    disable_safe "${struct}_${member}"
824
    incs=""
825
    for hdr in $headers; do
826
        incs="$incs
827
#include <$hdr>"
828
    done
829
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
830
$incs
831
const void *p = &(($struct *)0)->$member;
832
EOF
833
}
834

    
835
require(){
836
    name="$1"
837
    header="$2"
838
    func="$3"
839
    shift 3
840
    check_lib $header $func "$@" || die "ERROR: $name not found"
841
}
842

    
843
require2(){
844
    name="$1"
845
    headers="$2"
846
    func="$3"
847
    shift 3
848
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
849
}
850

    
851
require_pkg_config(){
852
    pkg="$1"
853
    check_pkg_config "$@" || die "ERROR: $pkg not found"
854
    add_cflags    $(get_safe ${pkg}_cflags)
855
    add_extralibs $(get_safe ${pkg}_libs)
856
}
857

    
858
check_host_cc(){
859
    log check_host_cc "$@"
860
    cat > $TMPC
861
    log_file $TMPC
862
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
863
}
864

    
865
check_host_cflags(){
866
    log check_host_cflags "$@"
867
    check_host_cc "$@" <<EOF && append host_cflags "$@"
868
int x;
869
EOF
870
}
871

    
872
apply(){
873
    file=$1
874
    shift
875
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
876
}
877

    
878
cp_if_changed(){
879
    cmp -s "$1" "$2" &&
880
        echo "$2 is unchanged" ||
881
        cp -f "$1" "$2"
882
}
883

    
884
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
885
# system-dependent things.
886

    
887
COMPONENT_LIST="
888
    bsfs
889
    decoders
890
    demuxers
891
    encoders
892
    filters
893
    hwaccels
894
    indevs
895
    muxers
896
    outdevs
897
    parsers
898
    protocols
899
"
900

    
901
CONFIG_LIST="
902
    $COMPONENT_LIST
903
    aandct
904
    ac3dsp
905
    avcodec
906
    avdevice
907
    avfilter
908
    avformat
909
    avisynth
910
    bzlib
911
    dct
912
    doc
913
    dwt
914
    dxva2
915
    fastdiv
916
    ffmpeg
917
    ffplay
918
    ffprobe
919
    ffserver
920
    fft
921
    frei0r
922
    golomb
923
    gpl
924
    gray
925
    h264dsp
926
    h264pred
927
    hardcoded_tables
928
    huffman
929
    libdc1394
930
    libdirac
931
    libfaac
932
    libfreetype
933
    libgsm
934
    libmp3lame
935
    libnut
936
    libopencore_amrnb
937
    libopencore_amrwb
938
    libopencv
939
    libopenjpeg
940
    librtmp
941
    libschroedinger
942
    libspeex
943
    libtheora
944
    libvo_aacenc
945
    libvo_amrwbenc
946
    libvorbis
947
    libvpx
948
    libx264
949
    libxavs
950
    libxvid
951
    lpc
952
    lsp
953
    mdct
954
    memalign_hack
955
    mlib
956
    mpegaudio_hp
957
    network
958
    nonfree
959
    pic
960
    postproc
961
    rdft
962
    rtpdec
963
    runtime_cpudetect
964
    shared
965
    sinewin
966
    small
967
    sram
968
    static
969
    swscale
970
    swscale_alpha
971
    vaapi
972
    vdpau
973
    version3
974
    x11grab
975
    zlib
976
"
977

    
978
THREADS_LIST='
979
    pthreads
980
    w32threads
981
'
982

    
983
ARCH_LIST='
984
    alpha
985
    arm
986
    avr32
987
    avr32_ap
988
    avr32_uc
989
    bfin
990
    ia64
991
    m68k
992
    mips
993
    mips64
994
    parisc
995
    ppc
996
    ppc64
997
    s390
998
    sh4
999
    sparc
1000
    sparc64
1001
    tomi
1002
    x86
1003
    x86_32
1004
    x86_64
1005
'
1006

    
1007
ARCH_EXT_LIST='
1008
    altivec
1009
    amd3dnow
1010
    amd3dnowext
1011
    armv5te
1012
    armv6
1013
    armv6t2
1014
    armvfp
1015
    avx
1016
    iwmmxt
1017
    mmi
1018
    mmx
1019
    mmx2
1020
    neon
1021
    ppc4xx
1022
    sse
1023
    ssse3
1024
    vis
1025
'
1026

    
1027
HAVE_LIST_PUB='
1028
    bigendian
1029
    fast_unaligned
1030
'
1031

    
1032
HAVE_LIST="
1033
    $ARCH_EXT_LIST
1034
    $HAVE_LIST_PUB
1035
    $THREADS_LIST
1036
    aligned_stack
1037
    alsa_asoundlib_h
1038
    altivec_h
1039
    arpa_inet_h
1040
    attribute_may_alias
1041
    attribute_packed
1042
    bswap
1043
    closesocket
1044
    cmov
1045
    dcbzl
1046
    dev_bktr_ioctl_bt848_h
1047
    dev_bktr_ioctl_meteor_h
1048
    dev_ic_bt8xx_h
1049
    dev_video_meteor_ioctl_meteor_h
1050
    dev_video_bktr_ioctl_bt848_h
1051
    dlfcn_h
1052
    dlopen
1053
    dos_paths
1054
    ebp_available
1055
    ebx_available
1056
    exp2
1057
    exp2f
1058
    fast_64bit
1059
    fast_clz
1060
    fast_cmov
1061
    fcntl
1062
    fork
1063
    getaddrinfo
1064
    gethrtime
1065
    GetProcessMemoryInfo
1066
    GetProcessTimes
1067
    getrusage
1068
    gnu_as
1069
    struct_rusage_ru_maxrss
1070
    ibm_asm
1071
    inet_aton
1072
    inline_asm
1073
    isatty
1074
    kbhit
1075
    ldbrx
1076
    libdc1394_1
1077
    libdc1394_2
1078
    llrint
1079
    llrintf
1080
    local_aligned_16
1081
    local_aligned_8
1082
    localtime_r
1083
    log2
1084
    log2f
1085
    loongson
1086
    lrint
1087
    lrintf
1088
    lzo1x_999_compress
1089
    machine_ioctl_bt848_h
1090
    machine_ioctl_meteor_h
1091
    malloc_h
1092
    MapViewOfFile
1093
    memalign
1094
    mkstemp
1095
    mmap
1096
    pld
1097
    posix_memalign
1098
    round
1099
    roundf
1100
    sdl
1101
    sdl_video_size
1102
    setmode
1103
    sndio_h
1104
    socklen_t
1105
    soundcard_h
1106
    poll_h
1107
    setrlimit
1108
    strerror_r
1109
    strtok_r
1110
    struct_addrinfo
1111
    struct_ipv6_mreq
1112
    struct_sockaddr_in6
1113
    struct_sockaddr_sa_len
1114
    struct_sockaddr_storage
1115
    symver
1116
    symver_gnu_asm
1117
    symver_asm_label
1118
    sys_mman_h
1119
    sys_resource_h
1120
    sys_select_h
1121
    sys_soundcard_h
1122
    sys_videoio_h
1123
    ten_operands
1124
    threads
1125
    trunc
1126
    truncf
1127
    vfp_args
1128
    VirtualAlloc
1129
    winsock2_h
1130
    xform_asm
1131
    xmm_clobbers
1132
    yasm
1133
"
1134

    
1135
# options emitted with CONFIG_ prefix but not available on command line
1136
CONFIG_EXTRA="
1137
    avutil
1138
    gplv3
1139
    lgplv3
1140
"
1141

    
1142
CMDLINE_SELECT="
1143
    $ARCH_EXT_LIST
1144
    $CONFIG_LIST
1145
    $THREADS_LIST
1146
    asm
1147
    cross_compile
1148
    debug
1149
    extra_warnings
1150
    logging
1151
    optimizations
1152
    symver
1153
    yasm
1154
"
1155

    
1156
PATHS_LIST='
1157
    bindir
1158
    datadir
1159
    incdir
1160
    libdir
1161
    mandir
1162
    prefix
1163
    shlibdir
1164
'
1165

    
1166
CMDLINE_SET="
1167
    $PATHS_LIST
1168
    ar
1169
    arch
1170
    as
1171
    build_suffix
1172
    cc
1173
    cpu
1174
    cross_prefix
1175
    dep_cc
1176
    extra_version
1177
    host_cc
1178
    host_cflags
1179
    host_ldflags
1180
    host_libs
1181
    host_os
1182
    ld
1183
    logfile
1184
    malloc_prefix
1185
    nm
1186
    pkg_config
1187
    samples
1188
    source_path
1189
    sysinclude
1190
    sysroot
1191
    target_exec
1192
    target_os
1193
    target_path
1194
"
1195

    
1196
CMDLINE_APPEND="
1197
    extra_cflags
1198
"
1199

    
1200
# code dependency declarations
1201

    
1202
# architecture extensions
1203

    
1204
armv5te_deps="arm"
1205
armv6_deps="arm"
1206
armv6t2_deps="arm"
1207
armvfp_deps="arm"
1208
iwmmxt_deps="arm"
1209
neon_deps="arm"
1210

    
1211
mmi_deps="mips"
1212

    
1213
altivec_deps="ppc"
1214
ppc4xx_deps="ppc"
1215

    
1216
vis_deps="sparc"
1217

    
1218
x86_64_suggest="cmov fast_cmov"
1219
amd3dnow_deps="mmx"
1220
amd3dnowext_deps="amd3dnow"
1221
mmx_deps="x86"
1222
mmx2_deps="mmx"
1223
sse_deps="mmx"
1224
ssse3_deps="sse"
1225
avx_deps="ssse3"
1226

    
1227
aligned_stack_if_any="ppc x86"
1228
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1229
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1230
fast_unaligned_if_any="armv6 ppc x86"
1231

    
1232
need_memalign="altivec neon sse"
1233
inline_asm_deps="!tms470"
1234

    
1235
symver_if_any="symver_asm_label symver_gnu_asm"
1236

    
1237
# subsystems
1238
dct_select="rdft"
1239
mdct_select="fft"
1240
rdft_select="fft"
1241

    
1242
# decoders / encoders / hardware accelerators
1243
aac_decoder_select="mdct sinewin"
1244
aac_encoder_select="mdct sinewin"
1245
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1246
ac3_decoder_select="mdct ac3dsp ac3_parser"
1247
ac3_encoder_select="mdct ac3dsp"
1248
ac3_fixed_encoder_select="mdct ac3dsp"
1249
alac_encoder_select="lpc"
1250
amrnb_decoder_select="lsp"
1251
amrwb_decoder_select="lsp"
1252
atrac1_decoder_select="mdct sinewin"
1253
atrac3_decoder_select="mdct"
1254
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1255
binkaudio_rdft_decoder_select="mdct rdft sinewin"
1256
cavs_decoder_select="golomb"
1257
cook_decoder_select="mdct sinewin"
1258
cscd_decoder_suggest="zlib"
1259
dca_decoder_select="mdct"
1260
dnxhd_encoder_select="aandct"
1261
dxa_decoder_select="zlib"
1262
eac3_decoder_select="ac3_decoder"
1263
eamad_decoder_select="aandct"
1264
eatgq_decoder_select="aandct"
1265
eatqi_decoder_select="aandct"
1266
ffv1_decoder_select="golomb"
1267
flac_decoder_select="golomb"
1268
flac_encoder_select="golomb lpc"
1269
flashsv_decoder_select="zlib"
1270
flashsv_encoder_select="zlib"
1271
flv_decoder_select="h263_decoder"
1272
flv_encoder_select="h263_encoder"
1273
fraps_decoder_select="huffman"
1274
h261_encoder_select="aandct"
1275
h263_decoder_select="h263_parser"
1276
h263_encoder_select="aandct"
1277
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1278
h263i_decoder_select="h263_decoder"
1279
h263p_encoder_select="h263_encoder"
1280
h264_decoder_select="golomb h264dsp h264pred"
1281
h264_dxva2_hwaccel_deps="dxva2api_h"
1282
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1283
h264_vaapi_hwaccel_select="vaapi"
1284
h264_vdpau_decoder_select="vdpau h264_decoder"
1285
imc_decoder_select="fft mdct sinewin"
1286
jpegls_decoder_select="golomb"
1287
jpegls_encoder_select="golomb"
1288
ljpeg_encoder_select="aandct"
1289
loco_decoder_select="golomb"
1290
mjpeg_encoder_select="aandct"
1291
mlp_decoder_select="mlp_parser"
1292
mp1float_decoder_select="dct"
1293
mp2float_decoder_select="dct"
1294
mp3adufloat_decoder_select="dct"
1295
mp3float_decoder_select="dct"
1296
mp3on4float_decoder_select="dct"
1297
mpeg1video_encoder_select="aandct"
1298
mpeg2video_encoder_select="aandct"
1299
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1300
mpeg4_encoder_select="h263_encoder"
1301
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1302
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1303
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1304
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1305
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1306
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1307
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1308
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1309
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1310
msmpeg4v1_decoder_select="h263_decoder"
1311
msmpeg4v1_encoder_select="h263_encoder"
1312
msmpeg4v2_decoder_select="h263_decoder"
1313
msmpeg4v2_encoder_select="h263_encoder"
1314
msmpeg4v3_decoder_select="h263_decoder"
1315
msmpeg4v3_encoder_select="h263_encoder"
1316
nellymoser_decoder_select="mdct sinewin"
1317
nellymoser_encoder_select="mdct sinewin"
1318
png_decoder_select="zlib"
1319
png_encoder_select="zlib"
1320
qcelp_decoder_select="lsp"
1321
qdm2_decoder_select="mdct rdft"
1322
ra_144_encoder_select="lpc"
1323
rv10_decoder_select="h263_decoder"
1324
rv10_encoder_select="h263_encoder"
1325
rv20_decoder_select="h263_decoder"
1326
rv20_encoder_select="h263_encoder"
1327
rv30_decoder_select="golomb h264pred"
1328
rv40_decoder_select="golomb h264pred"
1329
shorten_decoder_select="golomb"
1330
sipr_decoder_select="lsp"
1331
snow_decoder_select="dwt"
1332
snow_encoder_select="aandct dwt"
1333
svq1_encoder_select="aandct"
1334
svq3_decoder_select="golomb h264dsp h264pred"
1335
svq3_decoder_suggest="zlib"
1336
theora_decoder_select="vp3_decoder"
1337
tiff_decoder_suggest="zlib"
1338
tiff_encoder_suggest="zlib"
1339
truehd_decoder_select="mlp_decoder"
1340
tscc_decoder_select="zlib"
1341
twinvq_decoder_select="mdct lsp sinewin"
1342
vc1_decoder_select="h263_decoder"
1343
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1344
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1345
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1346
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1347
vorbis_decoder_select="mdct"
1348
vorbis_encoder_select="mdct"
1349
vp6_decoder_select="huffman"
1350
vp6a_decoder_select="vp6_decoder"
1351
vp6f_decoder_select="vp6_decoder"
1352
vp8_decoder_select="h264pred"
1353
wmapro_decoder_select="mdct sinewin"
1354
wmav1_decoder_select="mdct sinewin"
1355
wmav1_encoder_select="mdct sinewin"
1356
wmav2_decoder_select="mdct sinewin"
1357
wmav2_encoder_select="mdct sinewin"
1358
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1359
wmv1_decoder_select="h263_decoder"
1360
wmv1_encoder_select="h263_encoder"
1361
wmv2_decoder_select="h263_decoder"
1362
wmv2_encoder_select="h263_encoder"
1363
wmv3_decoder_select="vc1_decoder"
1364
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1365
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1366
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1367
zlib_decoder_select="zlib"
1368
zlib_encoder_select="zlib"
1369
zmbv_decoder_select="zlib"
1370
zmbv_encoder_select="zlib"
1371

    
1372
vaapi_deps="va_va_h"
1373
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1374

    
1375
# parsers
1376
h264_parser_select="golomb h264dsp h264pred"
1377

    
1378
# external libraries
1379
libdirac_decoder_deps="libdirac !libschroedinger"
1380
libdirac_encoder_deps="libdirac"
1381
libfaac_encoder_deps="libfaac"
1382
libgsm_decoder_deps="libgsm"
1383
libgsm_encoder_deps="libgsm"
1384
libgsm_ms_decoder_deps="libgsm"
1385
libgsm_ms_encoder_deps="libgsm"
1386
libmp3lame_encoder_deps="libmp3lame"
1387
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1388
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1389
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1390
libopenjpeg_decoder_deps="libopenjpeg"
1391
libschroedinger_decoder_deps="libschroedinger"
1392
libschroedinger_encoder_deps="libschroedinger"
1393
libspeex_decoder_deps="libspeex"
1394
libtheora_encoder_deps="libtheora"
1395
libvo_aacenc_encoder_deps="libvo_aacenc"
1396
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1397
libvorbis_encoder_deps="libvorbis"
1398
libvpx_decoder_deps="libvpx"
1399
libvpx_encoder_deps="libvpx"
1400
libx264_encoder_deps="libx264"
1401
libxavs_encoder_deps="libxavs"
1402
libxvid_encoder_deps="libxvid"
1403

    
1404
# demuxers / muxers
1405
ac3_demuxer_select="ac3_parser"
1406
asf_stream_muxer_select="asf_muxer"
1407
avisynth_demuxer_deps="avisynth"
1408
dirac_demuxer_select="dirac_parser"
1409
eac3_demuxer_select="ac3_parser"
1410
flac_demuxer_select="flac_parser"
1411
ipod_muxer_select="mov_muxer"
1412
libnut_demuxer_deps="libnut"
1413
libnut_muxer_deps="libnut"
1414
matroska_audio_muxer_select="matroska_muxer"
1415
matroska_demuxer_suggest="zlib bzlib"
1416
mov_demuxer_suggest="zlib"
1417
mp3_demuxer_select="mpegaudio_parser"
1418
mp4_muxer_select="mov_muxer"
1419
mpegtsraw_demuxer_select="mpegts_demuxer"
1420
mxf_d10_muxer_select="mxf_muxer"
1421
ogg_demuxer_select="golomb"
1422
psp_muxer_select="mov_muxer"
1423
rtp_demuxer_select="sdp_demuxer"
1424
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1425
rtsp_demuxer_select="http_protocol rtpdec"
1426
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1427
sap_demuxer_select="sdp_demuxer"
1428
sap_muxer_select="rtp_muxer rtp_protocol"
1429
sdp_demuxer_select="rtpdec"
1430
spdif_muxer_select="aac_parser"
1431
tg2_muxer_select="mov_muxer"
1432
tgp_muxer_select="mov_muxer"
1433
w64_demuxer_deps="wav_demuxer"
1434

    
1435
# indevs / outdevs
1436
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1437
alsa_outdev_deps="alsa_asoundlib_h"
1438
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1439
dv1394_indev_deps="dv1394 dv_demuxer"
1440
fbdev_indev_deps="linux_fb_h"
1441
jack_indev_deps="jack_jack_h"
1442
libdc1394_indev_deps="libdc1394"
1443
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1444
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1445
sndio_indev_deps="sndio_h"
1446
sndio_outdev_deps="sndio_h"
1447
v4l_indev_deps="linux_videodev_h"
1448
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1449
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1450
vfwcap_indev_extralibs="-lavicap32"
1451
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1452
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1453

    
1454
# protocols
1455
gopher_protocol_deps="network"
1456
http_protocol_deps="network"
1457
http_protocol_select="tcp_protocol"
1458
mmsh_protocol_select="http_protocol"
1459
mmst_protocol_deps="network"
1460
rtmp_protocol_select="tcp_protocol"
1461
rtp_protocol_select="udp_protocol"
1462
tcp_protocol_deps="network"
1463
udp_protocol_deps="network"
1464

    
1465
# filters
1466
blackframe_filter_deps="gpl"
1467
cropdetect_filter_deps="gpl"
1468
drawtext_filter_deps="libfreetype"
1469
frei0r_filter_deps="frei0r dlopen strtok_r"
1470
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1471
hqdn3d_filter_deps="gpl"
1472
scale_filter_deps="swscale"
1473
ocv_filter_deps="libopencv"
1474
yadif_filter_deps="gpl"
1475

    
1476
# libraries
1477
avdevice_deps="avcodec avformat"
1478
avformat_deps="avcodec"
1479

    
1480
# programs
1481
ffmpeg_deps="avcodec avformat swscale"
1482
ffmpeg_select="buffer_filter"
1483
ffplay_deps="avcodec avformat swscale sdl"
1484
ffplay_select="rdft"
1485
ffprobe_deps="avcodec avformat"
1486
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1487
ffserver_extralibs='$ldl'
1488

    
1489
doc_deps="texi2html"
1490

    
1491
# tests
1492

    
1493
test_deps(){
1494
    suf1=$1
1495
    suf2=$2
1496
    shift 2
1497
    for v; do
1498
        dep=${v%=*}
1499
        tests=${v#*=}
1500
        for name in ${tests}; do
1501
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1502
        done
1503
    done
1504
}
1505

    
1506
set_ne_test_deps(){
1507
    eval ${1}_be_test_deps="bigendian"
1508
    eval ${1}_le_test_deps="!bigendian"
1509
}
1510

    
1511
test_deps _encoder _decoder                                             \
1512
    adpcm_g726=g726                                                     \
1513
    adpcm_ima_qt                                                        \
1514
    adpcm_ima_wav                                                       \
1515
    adpcm_ms                                                            \
1516
    adpcm_swf                                                           \
1517
    adpcm_yamaha=adpcm_yam                                              \
1518
    alac                                                                \
1519
    asv1                                                                \
1520
    asv2                                                                \
1521
    bmp                                                                 \
1522
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1523
    dvvideo="dv dv50"                                                   \
1524
    ffv1                                                                \
1525
    flac                                                                \
1526
    flashsv                                                             \
1527
    flv                                                                 \
1528
    gif                                                                 \
1529
    h261                                                                \
1530
    h263="h263 h263p"                                                   \
1531
    huffyuv                                                             \
1532
    jpegls                                                              \
1533
    mjpeg="jpg mjpeg ljpeg"                                             \
1534
    mp2                                                                 \
1535
    mpeg1video="mpeg mpeg1b"                                            \
1536
    mpeg2video="mpeg2 mpeg2thread"                                      \
1537
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1538
    msmpeg4v3=msmpeg4                                                   \
1539
    msmpeg4v2                                                           \
1540
    pbm=pbmpipe                                                         \
1541
    pcx                                                                 \
1542
    pgm="pgm pgmpipe"                                                   \
1543
    png                                                                 \
1544
    ppm="ppm ppmpipe"                                                   \
1545
    rawvideo="rgb yuv"                                                  \
1546
    roq                                                                 \
1547
    rv10                                                                \
1548
    rv20                                                                \
1549
    sgi                                                                 \
1550
    snow="snow snowll"                                                  \
1551
    svq1                                                                \
1552
    targa=tga                                                           \
1553
    tiff                                                                \
1554
    wmav1                                                               \
1555
    wmav2                                                               \
1556
    wmv1                                                                \
1557
    wmv2                                                                \
1558

    
1559
test_deps _muxer _demuxer                                               \
1560
    aiff                                                                \
1561
    pcm_alaw=alaw                                                       \
1562
    asf                                                                 \
1563
    au                                                                  \
1564
    avi                                                                 \
1565
    dv=dv_fmt                                                           \
1566
    ffm                                                                 \
1567
    flv=flv_fmt                                                         \
1568
    gxf                                                                 \
1569
    matroska=mkv                                                        \
1570
    mmf                                                                 \
1571
    mov                                                                 \
1572
    pcm_mulaw=mulaw                                                     \
1573
    mxf                                                                 \
1574
    nut                                                                 \
1575
    ogg                                                                 \
1576
    rawvideo=pixfmt                                                     \
1577
    rm                                                                  \
1578
    swf                                                                 \
1579
    mpegts=ts                                                           \
1580
    voc                                                                 \
1581
    wav                                                                 \
1582
    yuv4mpegpipe=yuv4mpeg                                               \
1583

    
1584
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1585
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1586

    
1587
set_ne_test_deps pixdesc
1588
set_ne_test_deps pixfmts_copy
1589
set_ne_test_deps pixfmts_crop
1590
set_ne_test_deps pixfmts_hflip
1591
set_ne_test_deps pixfmts_null
1592
set_ne_test_deps pixfmts_pad
1593
set_ne_test_deps pixfmts_scale
1594
set_ne_test_deps pixfmts_vflip
1595

    
1596
# default parameters
1597

    
1598
logfile="config.log"
1599

    
1600
# installation paths
1601
prefix_default="/usr/local"
1602
bindir_default='${prefix}/bin'
1603
datadir_default='${prefix}/share/ffmpeg'
1604
incdir_default='${prefix}/include'
1605
libdir_default='${prefix}/lib'
1606
mandir_default='${prefix}/share/man'
1607
shlibdir_default="$libdir_default"
1608

    
1609
# toolchain
1610
ar_default="ar"
1611
cc_default="gcc"
1612
cc_version=\"unknown\"
1613
host_cc_default="gcc"
1614
ln_s="ln -sf"
1615
nm_default="nm"
1616
objformat="elf"
1617
pkg_config_default=pkg-config
1618
ranlib="ranlib"
1619
yasmexe="yasm"
1620
nogas=":"
1621

    
1622
nm_opts='-g'
1623

    
1624
# machine
1625
arch_default=$(uname -m)
1626
cpu="generic"
1627

    
1628
# OS
1629
target_os_default=$(tolower $(uname -s))
1630
host_os=$target_os_default
1631

    
1632
# configurable options
1633
enable avcodec
1634
enable avdevice
1635
enable avfilter
1636
enable avformat
1637
enable avutil
1638
enable asm
1639
enable debug
1640
enable doc
1641
enable fastdiv
1642
enable ffmpeg
1643
enable ffplay
1644
enable ffprobe
1645
enable ffserver
1646
enable mpegaudio_hp
1647
enable network
1648
enable optimizations
1649
enable protocols
1650
enable static
1651
enable swscale
1652
enable swscale_alpha
1653

    
1654
# build settings
1655
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1656
FFSERVERLDFLAGS=-Wl,-E
1657
LIBPREF="lib"
1658
LIBSUF=".a"
1659
FULLNAME='$(NAME)$(BUILDSUF)'
1660
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1661
SLIBPREF="lib"
1662
SLIBSUF=".so"
1663
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1664
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1665
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1666
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1667

    
1668
CC_O='-o $@'
1669

    
1670
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1671
host_libs='-lm'
1672

    
1673
target_path='$(CURDIR)'
1674

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

    
1680
# find source path
1681
source_path="$(dirname "$0")"
1682
enable source_path_used
1683
if test -f configure; then
1684
    source_path="$(pwd)"
1685
    disable source_path_used
1686
else
1687
    source_path="$(cd "$source_path"; pwd)"
1688
    echo "$source_path" | grep -q '[[:blank:]]' &&
1689
        die "Out of tree builds are impossible with whitespace in source path."
1690
    test -e "$source_path/config.h" &&
1691
        die "Out of tree builds are impossible with config.h in source dir."
1692
fi
1693

    
1694
for v in "$@"; do
1695
    r=${v#*=}
1696
    l=${v%"$r"}
1697
    r=$(sh_quote "$r")
1698
    LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1699
done
1700

    
1701
find_things(){
1702
    thing=$1
1703
    pattern=$2
1704
    file=$source_path/$3
1705
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1706
}
1707

    
1708
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1709
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1710
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1711
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1712
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1713
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1714
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1715
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1716
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1717
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1718
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1719

    
1720
find_tests(){
1721
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1722
}
1723

    
1724
ACODEC_TESTS=$(find_tests acodec)
1725
VCODEC_TESTS=$(find_tests vsynth1)
1726
LAVF_TESTS=$(find_tests lavf)
1727
LAVFI_TESTS=$(find_tests lavfi)
1728
SEEK_TESTS=$(find_tests seek seek_)
1729

    
1730
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1731

    
1732
for n in $COMPONENT_LIST; do
1733
    v=$(toupper ${n%s})_LIST
1734
    eval enable \$$v
1735
    eval ${n}_if_any="\$$v"
1736
done
1737

    
1738
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1739

    
1740
die_unknown(){
1741
    echo "Unknown option \"$1\"."
1742
    echo "See $0 --help for available options."
1743
    exit 1
1744
}
1745

    
1746
show_list() {
1747
    suffix=_$1
1748
    shift
1749
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1750
    exit 0
1751
}
1752

    
1753
for opt do
1754
    optval="${opt#*=}"
1755
    case "$opt" in
1756
    --extra-ldflags=*) add_ldflags $optval
1757
    ;;
1758
    --extra-libs=*) add_extralibs $optval
1759
    ;;
1760
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1761
    ;;
1762
    --enable-debug=*) debuglevel="$optval"
1763
    ;;
1764
    --disable-everything)
1765
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1766
    ;;
1767
    --enable-*=*|--disable-*=*)
1768
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1769
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1770
    eval list=\$$(toupper $thing)_LIST
1771
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1772
    $action $(filter "$name" $list)
1773
    ;;
1774
    --enable-?*|--disable-?*)
1775
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1776
    if is_in $option $COMPONENT_LIST; then
1777
        test $action = disable && action=unset
1778
        eval $action \$$(toupper ${option%s})_LIST
1779
    elif is_in $option $CMDLINE_SELECT; then
1780
        $action $option
1781
    else
1782
        die_unknown $opt
1783
    fi
1784
    ;;
1785
    --list-*)
1786
        NAME="${opt#--list-}"
1787
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1788
        NAME=${NAME%s}
1789
        eval show_list $NAME \$$(toupper $NAME)_LIST
1790
    ;;
1791
    --help|-h) show_help
1792
    ;;
1793
    *)
1794
    optname="${opt%%=*}"
1795
    optname="${optname#--}"
1796
    optname=$(echo "$optname" | sed 's/-/_/g')
1797
    if is_in $optname $CMDLINE_SET; then
1798
        eval $optname='$optval'
1799
    elif is_in $optname $CMDLINE_APPEND; then
1800
        append $optname "$optval"
1801
    else
1802
         die_unknown $opt
1803
    fi
1804
    ;;
1805
    esac
1806
done
1807

    
1808
disabled logging && logfile=/dev/null
1809

    
1810
echo "# $0 $LIBAV_CONFIGURATION" > $logfile
1811
set >> $logfile
1812

    
1813
test -n "$cross_prefix" && enable cross_compile
1814

    
1815
if enabled cross_compile; then
1816
    test -n "$arch" && test -n "$target_os" ||
1817
        die "Must specify target arch and OS when cross-compiling"
1818
fi
1819

    
1820
set_default arch target_os
1821

    
1822
ar_default="${cross_prefix}${ar_default}"
1823
cc_default="${cross_prefix}${cc_default}"
1824
nm_default="${cross_prefix}${nm_default}"
1825
pkg_config_default="${cross_prefix}${pkg_config_default}"
1826
ranlib="${cross_prefix}${ranlib}"
1827

    
1828
sysinclude_default="${sysroot}/usr/include"
1829

    
1830
set_default cc nm pkg_config sysinclude
1831
enabled cross_compile || host_cc_default=$cc
1832
set_default host_cc
1833

    
1834
if ! $pkg_config --version >/dev/null 2>&1; then
1835
    warn "$pkg_config not found, library detection may fail."
1836
    pkg_config=false
1837
fi
1838

    
1839
exesuf() {
1840
    case $1 in
1841
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1842
    esac
1843
}
1844

    
1845
EXESUF=$(exesuf $target_os)
1846
HOSTEXESUF=$(exesuf $host_os)
1847

    
1848
# set temporary file name
1849
: ${TMPDIR:=$TEMPDIR}
1850
: ${TMPDIR:=$TMP}
1851
: ${TMPDIR:=/tmp}
1852

    
1853
if ! check_cmd mktemp -u XXXXXX; then
1854
    # simple replacement for missing mktemp
1855
    # NOT SAFE FOR GENERAL USE
1856
    mktemp(){
1857
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1858
    }
1859
fi
1860

    
1861
tmpfile(){
1862
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1863
        (set -C; exec > $tmp) 2>/dev/null ||
1864
        die "Unable to create temporary file in $TMPDIR."
1865
    append TMPFILES $tmp
1866
    eval $1=$tmp
1867
}
1868

    
1869
trap 'rm -f -- $TMPFILES' EXIT
1870

    
1871
tmpfile TMPC  .c
1872
tmpfile TMPE  $EXESUF
1873
tmpfile TMPH  .h
1874
tmpfile TMPO  .o
1875
tmpfile TMPS  .S
1876
tmpfile TMPV  .ver
1877
tmpfile TMPSH .sh
1878
tmpfile TMPASM .asm
1879

    
1880
unset -f mktemp
1881

    
1882
chmod +x $TMPE
1883

    
1884
# make sure we can execute files in $TMPDIR
1885
cat > $TMPSH 2>> $logfile <<EOF
1886
#! /bin/sh
1887
EOF
1888
chmod +x $TMPSH >> $logfile 2>&1
1889
if ! $TMPSH >> $logfile 2>&1; then
1890
    cat <<EOF
1891
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1892
variable to another directory and make sure that it is not mounted noexec.
1893
EOF
1894
    die "Sanity test failed."
1895
fi
1896

    
1897
filter_cflags=echo
1898
filter_cppflags=echo
1899
filter_asflags=echo
1900

    
1901
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1902
    cc_type=llvm_gcc
1903
    cc_version=__VERSION__
1904
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1905
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1906
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1907
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1908
    speed_cflags='-O3'
1909
    size_cflags='-Os'
1910
elif $cc -v 2>&1 | grep -qi ^gcc; then
1911
    cc_type=gcc
1912
    cc_version=__VERSION__
1913
    gcc_version=$($cc --version | head -n1)
1914
    gcc_basever=$($cc -dumpversion)
1915
    gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
1916
    gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1917
    cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
1918
    if ! $cc -dumpversion | grep -q '^2\.'; then
1919
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1920
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1921
    fi
1922
    speed_cflags='-O3'
1923
    size_cflags='-Os'
1924
elif $cc --version 2>/dev/null | grep -q Intel; then
1925
    cc_type=icc
1926
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1927
    cc_ident=$($cc --version | head -n1)
1928
    icc_version=$($cc -dumpversion)
1929
    CC_DEPFLAGS='-MMD'
1930
    AS_DEPFLAGS='-MMD'
1931
    speed_cflags='-O3'
1932
    size_cflags='-Os'
1933
    noopt_cflags='-O1'
1934
elif $cc -v 2>&1 | grep -q xlc; then
1935
    cc_type=xlc
1936
    cc_version="AV_STRINGIFY(__IBMC__)"
1937
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1938
    speed_cflags='-O5'
1939
    size_cflags='-O5 -qcompact'
1940
elif $cc -V 2>/dev/null | grep -q Compaq; then
1941
    cc_type=ccc
1942
    cc_version="AV_STRINGIFY(__DECC_VER)"
1943
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1944
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1945
    debuglevel=3
1946
    add_ldflags -Wl,-z,now # calls to libots crash without this
1947
    speed_cflags='-fast'
1948
    size_cflags='-O1'
1949
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1950
    test -d "$sysroot" || die "No valid sysroot specified."
1951
    cc_type=armcc
1952
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1953
    cc_ident=$($cc --vsn | head -n1)
1954
    armcc_conf="$PWD/armcc.conf"
1955
    $cc --arm_linux_configure                 \
1956
        --arm_linux_config_file="$armcc_conf" \
1957
        --configure_sysroot="$sysroot"        \
1958
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1959
        die "Error creating armcc configuration file."
1960
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1961
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1962
    as_default="${cross_prefix}gcc"
1963
    CC_DEPFLAGS='-MMD'
1964
    AS_DEPFLAGS='-MMD'
1965
    speed_cflags='-O3'
1966
    size_cflags='-Os'
1967
    filter_asflags="filter_out -W${armcc_opt}*"
1968
elif $cc -version 2>/dev/null | grep -q TMS470; then
1969
    cc_type=tms470
1970
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1971
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1972
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1973
    CC_O='-fr=$(@D)'
1974
    as_default="${cross_prefix}gcc"
1975
    ld_default="${cross_prefix}gcc"
1976
    TMPO=$(basename $TMPC .c).o
1977
    append TMPFILES $TMPO
1978
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1979
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1980
    AS_DEPFLAGS='-MMD'
1981
    speed_cflags='-O3 -mf=5'
1982
    size_cflags='-O3 -mf=2'
1983
    filter_cflags=tms470_flags
1984
    tms470_flags(){
1985
        for flag; do
1986
            case $flag in
1987
                -march=*|-mcpu=*)
1988
                    case "${flag#*=}" in
1989
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1990
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1991
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1992
                        armv6*|arm11*)          echo -mv=6   ;;
1993
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1994
                                                echo -mv=5e  ;;
1995
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1996
                    esac
1997
                    ;;
1998
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1999
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
2000
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2001
                -msoft-float)   echo --float_support=vfplib       ;;
2002
                -O[0-3]|-mf=*)  echo $flag                        ;;
2003
                -g)             echo -g -mn                       ;;
2004
                -pds=*)         echo $flag                        ;;
2005
            esac
2006
        done
2007
    }
2008
elif $cc -v 2>&1 | grep -q clang; then
2009
    cc_type=clang
2010
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
2011
        cc_version=__clang_version__ || cc_version=__VERSION__
2012
    cc_ident=$($cc --version | head -n1)
2013
    CC_DEPFLAGS='-MMD'
2014
    AS_DEPFLAGS='-MMD'
2015
    speed_cflags='-O3'
2016
    size_cflags='-Os'
2017
elif $cc -V 2>&1 | grep -q Sun; then
2018
    cc_type=suncc
2019
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
2020
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2021
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2022
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2023
    speed_cflags='-O5'
2024
    size_cflags='-O5 -xspace'
2025
    filter_cflags=suncc_flags
2026
    suncc_flags(){
2027
        for flag; do
2028
            case $flag in
2029
                -march=*|-mcpu=*)
2030
                    case "${flag#*=}" in
2031
                        native)                   echo -xtarget=native       ;;
2032
                        v9|niagara)               echo -xarch=sparc          ;;
2033
                        ultrasparc)               echo -xarch=sparcvis       ;;
2034
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2035
                        i586|pentium)             echo -xchip=pentium        ;;
2036
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2037
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2038
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2039
                        pentium4*)          echo -xtarget=pentium4           ;;
2040
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2041
                        *-sse3)             echo -xarch=sse3                 ;;
2042
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
2043
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2044
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2045
                        k8|opteron|athlon64|athlon-fx)
2046
                                                  echo -xarch=sse2a          ;;
2047
                        athlon*)                  echo -xarch=pentium_proa   ;;
2048
                    esac
2049
                    ;;
2050
                -std=c99)             echo -xc99              ;;
2051
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
2052
                -fPIC)                echo -KPIC -xcode=pic32 ;;
2053
                -W*,*)                echo $flag              ;;
2054
                -f*-*|-W*)                                    ;;
2055
                *)                    echo $flag              ;;
2056
            esac
2057
        done
2058
    }
2059
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2060
    cc_type=pathscale
2061
    cc_version=__PATHSCALE__
2062
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2063
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2064
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2065
    speed_cflags='-O2'
2066
    size_cflags='-Os'
2067
elif $cc -v 2>&1 | grep -q Open64; then
2068
    cc_type=open64
2069
    cc_version=__OPEN64__
2070
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2071
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2072
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2073
    speed_cflags='-O2'
2074
    size_cflags='-Os'
2075
fi
2076

    
2077
test -n "$cc_type" && enable $cc_type ||
2078
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2079

    
2080
: ${as_default:=$cc}
2081
: ${dep_cc_default:=$cc}
2082
: ${ld_default:=$cc}
2083
set_default ar as dep_cc ld
2084

    
2085
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2086
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2087

    
2088
add_cflags $extra_cflags
2089
add_asflags $extra_cflags
2090

    
2091
if test -n "$sysroot"; then
2092
    case "$cc_type" in
2093
        gcc|llvm_gcc|clang)
2094
            add_cppflags --sysroot="$sysroot"
2095
            add_ldflags --sysroot="$sysroot"
2096
        ;;
2097
        tms470)
2098
            add_cppflags -I"$sysinclude"
2099
            add_ldflags  --sysroot="$sysroot"
2100
        ;;
2101
    esac
2102
fi
2103

    
2104
if test "$cpu" = host; then
2105
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2106

    
2107
    case "$cc_type" in
2108
        gcc|llvm_gcc)
2109
            check_native(){
2110
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2111
                sed -n "/$1=/{
2112
                            s/.*$1=\\([^ ]*\\).*/\\1/
2113
                            p
2114
                            q
2115
                        }" $TMPE
2116
            }
2117
            cpu=$(check_native -march || check_native -mcpu)
2118
        ;;
2119
    esac
2120

    
2121
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2122
fi
2123

    
2124
# Deal with common $arch aliases
2125
case "$arch" in
2126
    arm*)
2127
        arch="arm"
2128
    ;;
2129
    mips|mipsel|IP*)
2130
        arch="mips"
2131
    ;;
2132
    mips64*)
2133
        arch="mips"
2134
        subarch="mips64"
2135
    ;;
2136
    parisc|hppa)
2137
        arch="parisc"
2138
    ;;
2139
    parisc64|hppa64)
2140
        arch="parisc"
2141
        subarch="parisc64"
2142
    ;;
2143
    "Power Macintosh"|ppc|powerpc)
2144
        arch="ppc"
2145
    ;;
2146
    ppc64|powerpc64)
2147
        arch="ppc"
2148
        subarch="ppc64"
2149
    ;;
2150
    s390|s390x)
2151
        arch="s390"
2152
    ;;
2153
    sh4|sh)
2154
        arch="sh4"
2155
    ;;
2156
    sun4u|sparc64)
2157
        arch="sparc"
2158
        subarch="sparc64"
2159
    ;;
2160
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2161
        arch="x86"
2162
    ;;
2163
esac
2164

    
2165
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2166
enable $arch
2167

    
2168
# Add processor-specific flags
2169
if test "$cpu" = generic; then
2170
    : do nothing
2171
elif enabled ppc; then
2172

    
2173
    case $(tolower $cpu) in
2174
        601|ppc601|powerpc601)
2175
            cpuflags="-mcpu=601"
2176
            disable altivec
2177
        ;;
2178
        603*|ppc603*|powerpc603*)
2179
            cpuflags="-mcpu=603"
2180
            disable altivec
2181
        ;;
2182
        604*|ppc604*|powerpc604*)
2183
            cpuflags="-mcpu=604"
2184
            disable altivec
2185
        ;;
2186
        g3|75*|ppc75*|powerpc75*)
2187
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2188
            disable altivec
2189
        ;;
2190
        g4|745*|ppc745*|powerpc745*)
2191
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2192
        ;;
2193
        74*|ppc74*|powerpc74*)
2194
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2195
        ;;
2196
        g5|970|ppc970|powerpc970|power4*)
2197
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2198
        ;;
2199
        cell)
2200
            cpuflags="-mcpu=cell"
2201
            enable ldbrx
2202
        ;;
2203
        e500v2)
2204
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2205
            disable altivec
2206
        ;;
2207
        e500)
2208
            cpuflags="-mcpu=8540 -mhard-float"
2209
            disable altivec
2210
        ;;
2211
    esac
2212

    
2213
elif enabled x86; then
2214

    
2215
    case $cpu in
2216
        i[345]86|pentium)
2217
            cpuflags="-march=$cpu"
2218
            disable mmx
2219
        ;;
2220
        # targets that do NOT support conditional mov (cmov)
2221
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2222
            cpuflags="-march=$cpu"
2223
            disable cmov
2224
        ;;
2225
        # targets that do support conditional mov (cmov)
2226
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2227
            cpuflags="-march=$cpu"
2228
            enable cmov
2229
            enable fast_cmov
2230
        ;;
2231
        # targets that do support conditional mov but on which it's slow
2232
        pentium4|pentium4m|prescott|nocona)
2233
            cpuflags="-march=$cpu"
2234
            enable cmov
2235
            disable fast_cmov
2236
        ;;
2237
    esac
2238

    
2239
elif enabled sparc; then
2240

    
2241
    case $cpu in
2242
        niagara)
2243
            cpuflags="-mcpu=$cpu"
2244
            disable vis
2245
        ;;
2246
        sparc64)
2247
            cpuflags="-mcpu=v9"
2248
        ;;
2249
    esac
2250

    
2251
elif enabled arm; then
2252

    
2253
    case $cpu in
2254
        armv*)
2255
            cpuflags="-march=$cpu"
2256
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2257
        ;;
2258
        *)
2259
            cpuflags="-mcpu=$cpu"
2260
            case $cpu in
2261
                cortex-a*)                               subarch=armv7a  ;;
2262
                cortex-r*)                               subarch=armv7r  ;;
2263
                cortex-m*)                               subarch=armv7m  ;;
2264
                arm11*)                                  subarch=armv6   ;;
2265
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2266
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2267
            esac
2268
        ;;
2269
    esac
2270

    
2271
elif enabled alpha; then
2272

    
2273
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2274

    
2275
elif enabled bfin; then
2276

    
2277
    cpuflags="-mcpu=$cpu"
2278

    
2279
elif enabled mips; then
2280

    
2281
    cpuflags="-march=$cpu"
2282

    
2283
elif enabled avr32; then
2284

    
2285
    case $cpu in
2286
        ap7[02]0[0-2])
2287
            subarch="avr32_ap"
2288
            cpuflags="-mpart=$cpu"
2289
        ;;
2290
        ap)
2291
            subarch="avr32_ap"
2292
            cpuflags="-march=$cpu"
2293
        ;;
2294
        uc3[ab]*)
2295
            subarch="avr32_uc"
2296
            cpuflags="-mcpu=$cpu"
2297
        ;;
2298
        uc)
2299
            subarch="avr32_uc"
2300
            cpuflags="-march=$cpu"
2301
        ;;
2302
    esac
2303

    
2304
fi
2305

    
2306
add_cflags $cpuflags
2307
add_asflags $cpuflags
2308

    
2309
# compiler sanity check
2310
check_exec <<EOF
2311
int main(void){ return 0; }
2312
EOF
2313
if test "$?" != 0; then
2314
    echo "$cc is unable to create an executable file."
2315
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2316
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2317
        echo "Only do this if you know what cross compiling means."
2318
    fi
2319
    die "C compiler test failed."
2320
fi
2321

    
2322
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2323
check_cflags -std=c99
2324
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2325
#include <stdlib.h>
2326
EOF
2327
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2328
#include <stdlib.h>
2329
EOF
2330

    
2331
check_host_cflags -std=c99
2332

    
2333
case "$arch" in
2334
    alpha|ia64|mips|parisc|sparc)
2335
        spic=$shared
2336
    ;;
2337
    x86)
2338
        subarch="x86_32"
2339
        check_cc <<EOF && subarch="x86_64"
2340
        int test[(int)sizeof(char*) - 7];
2341
EOF
2342
        if test "$subarch" = "x86_64"; then
2343
            spic=$shared
2344
        fi
2345
    ;;
2346
esac
2347

    
2348
enable $subarch
2349
enabled spic && enable pic
2350

    
2351
# OS specific
2352
case $target_os in
2353
    haiku)
2354
        prefix_default="/boot/common"
2355
        network_extralibs="-lnetwork"
2356
        host_libs=
2357
        ;;
2358
    sunos)
2359
        FFSERVERLDFLAGS=""
2360
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2361
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2362
        network_extralibs="-lsocket -lnsl"
2363
        add_cppflags -D__EXTENSIONS__
2364
        nm_opts='-P -g'
2365
        ;;
2366
    netbsd)
2367
        disable symver
2368
        oss_indev_extralibs="-lossaudio"
2369
        oss_outdev_extralibs="-lossaudio"
2370
        add_cppflags -D_XOPEN_SOURCE=600
2371
        ;;
2372
    openbsd)
2373
        enable malloc_aligned
2374
        # On OpenBSD 4.5. the compiler does not use PIC unless
2375
        # explicitly using -fPIC. Libav builds fine without PIC,
2376
        # however the generated executable will not do anything
2377
        # (simply quits with exit-code 1, no crash, no output).
2378
        # Thus explicitly enable PIC here.
2379
        enable pic
2380
        disable symver
2381
        SHFLAGS='-shared'
2382
        oss_indev_extralibs="-lossaudio"
2383
        oss_outdev_extralibs="-lossaudio"
2384
        ;;
2385
    dragonfly)
2386
        enable malloc_aligned
2387
        disable symver
2388
        ;;
2389
    freebsd)
2390
        enable malloc_aligned
2391
        ;;
2392
    bsd/os)
2393
        add_extralibs -lpoll -lgnugetopt
2394
        ;;
2395
    darwin)
2396
        enable malloc_aligned
2397
        gas="gas-preprocessor.pl $cc"
2398
        enabled ppc && add_asflags -force_cpusubtype_ALL
2399
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2400
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2401
        add_ldflags -Wl,-dynamic,-search_paths_first
2402
        SLIBSUF=".dylib"
2403
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2404
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2405
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2406
        objformat="macho"
2407
        enabled x86_64 && objformat="macho64"
2408
        enabled_any pic shared ||
2409
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2410
        ;;
2411
    mingw32*)
2412
        if test $target_os = "mingw32ce"; then
2413
            disable network
2414
        else
2415
            target_os=mingw32
2416
        fi
2417
        LIBTARGET=i386
2418
        if enabled x86_64; then
2419
            enable malloc_aligned
2420
            LIBTARGET="i386:x86-64"
2421
        elif enabled arm; then
2422
            LIBTARGET=arm-wince
2423
        fi
2424
        shlibdir_default="$bindir_default"
2425
        SLIBPREF=""
2426
        SLIBSUF=".dll"
2427
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2428
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2429
        SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2430
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2431
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2432
            install -d "$(LIBDIR)"; \
2433
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2434
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2435
        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'
2436
        objformat="win32"
2437
        dlltool="${cross_prefix}dlltool"
2438
        enable dos_paths
2439
        check_cflags -fno-common
2440
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2441
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2442
                die "ERROR: MinGW runtime version must be >= 3.15."
2443
        add_cppflags -U__STRICT_ANSI__
2444
        ;;
2445
    cygwin*)
2446
        target_os=cygwin
2447
        shlibdir_default="$bindir_default"
2448
        SLIBPREF="cyg"
2449
        SLIBSUF=".dll"
2450
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2451
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2452
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2453
        objformat="win32"
2454
        enable dos_paths
2455
        check_cflags -fno-common
2456
        ;;
2457
    *-dos|freedos|opendos)
2458
        network_extralibs="-lsocket"
2459
        objformat="coff"
2460
        enable dos_paths
2461
        ;;
2462
    linux)
2463
        enable dv1394
2464
        ;;
2465
    irix*)
2466
        target_os=irix
2467
        ranlib="echo ignoring ranlib"
2468
        ;;
2469
    os/2*)
2470
        ln_s="cp -f"
2471
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2472
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2473
        FFSERVERLDFLAGS=""
2474
        LIBSUF="_s.a"
2475
        SLIBPREF=""
2476
        SLIBSUF=".dll"
2477
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2478
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2479
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2480
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2481
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2482
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2483
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2484
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2485
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2486
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2487
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2488
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2489
        enable dos_paths
2490
        ;;
2491
    gnu/kfreebsd)
2492
        ;;
2493
    gnu)
2494
        ;;
2495
    qnx)
2496
        add_cppflags -D_QNX_SOURCE
2497
        network_extralibs="-lsocket"
2498
        ;;
2499
    symbian)
2500
        SLIBSUF=".dll"
2501
        enable dos_paths
2502
        add_cflags --include=$sysinclude/gcce/gcce.h
2503
        ;;
2504
    none)
2505
        ;;
2506
    *)
2507
        die "Unknown OS '$target_os'."
2508
        ;;
2509
esac
2510

    
2511
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
2512

    
2513
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2514

    
2515
set_default $PATHS_LIST
2516

    
2517
# we need to build at least one lib type
2518
if ! enabled_any static shared; then
2519
    cat <<EOF
2520
At least one library type must be built.
2521
Specify --enable-static to build the static libraries or --enable-shared to
2522
build the shared libraries as well. To only build the shared libraries specify
2523
--disable-static in addition to --enable-shared.
2524
EOF
2525
    exit 1;
2526
fi
2527

    
2528
disabled static && LIBNAME=""
2529

    
2530
die_license_disabled() {
2531
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2532
}
2533

    
2534
die_license_disabled gpl libx264
2535
die_license_disabled gpl libxavs
2536
die_license_disabled gpl libxvid
2537
die_license_disabled gpl postproc
2538
die_license_disabled gpl x11grab
2539

    
2540
die_license_disabled nonfree libfaac
2541

    
2542
die_license_disabled version3 libopencore_amrnb
2543
die_license_disabled version3 libopencore_amrwb
2544
die_license_disabled version3 libvo_aacenc
2545
die_license_disabled version3 libvo_amrwbenc
2546

    
2547
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2548

    
2549
disabled optimizations || check_cflags -fomit-frame-pointer
2550

    
2551
enable_pic() {
2552
    enable pic
2553
    add_cppflags -DPIC
2554
    add_cflags   -fPIC
2555
    add_asflags  -fPIC
2556
}
2557

    
2558
enabled pic && enable_pic
2559

    
2560
check_cc <<EOF || die "Symbol mangling check failed."
2561
int ff_extern;
2562
EOF
2563
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2564
extern_prefix=${sym%%ff_extern*}
2565

    
2566
check_cc <<EOF && enable inline_asm
2567
void foo(void) { __asm__ volatile ("" ::); }
2568
EOF
2569

    
2570
_restrict=
2571
for restrict_keyword in restrict __restrict__ __restrict; do
2572
    check_cc <<EOF && _restrict=$restrict_keyword && break
2573
void foo(char * $restrict_keyword p);
2574
EOF
2575
done
2576

    
2577
check_cc <<EOF && enable attribute_packed
2578
struct { int x; } __attribute__((packed)) x;
2579
EOF
2580

    
2581
check_cc <<EOF && enable attribute_may_alias
2582
union { int x; } __attribute__((may_alias)) x;
2583
EOF
2584

    
2585
check_cc <<EOF || die "endian test failed"
2586
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2587
EOF
2588
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2589

    
2590
if enabled alpha; then
2591

    
2592
    check_cflags -mieee
2593

    
2594
elif enabled arm; then
2595

    
2596
    check_cflags -marm
2597
    nogas=die
2598

    
2599
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2600
        enable vfp_args
2601
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2602
        case "${cross_prefix:-$cc}" in
2603
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2604
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2605
__asm__ (".eabi_attribute 28, 1");
2606
int main(void) { return 0; }
2607
EOF
2608
        esac
2609
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2610
    fi
2611

    
2612
    # We have to check if pld is a nop and disable it.
2613
    check_asm pld '"pld [r0]"'
2614

    
2615
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2616
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2617
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2618
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2619
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2620
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2621

    
2622
    enabled_all armv6t2 shared !pic && enable_pic
2623

    
2624
elif enabled mips; then
2625

    
2626
    check_asm loongson '"dmult.g $1, $2, $3"'
2627
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2628

    
2629
elif enabled ppc; then
2630

    
2631
    enable local_aligned_8 local_aligned_16
2632

    
2633
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2634
    check_asm ibm_asm   '"add 0, 0, 0"'
2635
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2636
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2637

    
2638
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2639
    if enabled altivec; then
2640
        nogas=warn
2641
        check_cflags -maltivec -mabi=altivec &&
2642
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2643
        check_cflags -faltivec
2644

    
2645
        # check if our compiler supports Motorola AltiVec C API
2646
        check_cc <<EOF || disable altivec
2647
$inc_altivec_h
2648
int main(void) {
2649
    vector signed int v1, v2, v3;
2650
    v1 = vec_add(v2,v3);
2651
    return 0;
2652
}
2653
EOF
2654

    
2655
        # check if our compiler supports braces for vector declarations
2656
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2657
$inc_altivec_h
2658
int main (void) { (vector int) {1}; return 0; }
2659
EOF
2660
    fi
2661

    
2662
elif enabled sparc; then
2663

    
2664
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2665
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2666

    
2667
elif enabled x86; then
2668

    
2669
    enable local_aligned_8 local_aligned_16
2670

    
2671
    # check whether EBP is available on x86
2672
    # As 'i' is stored on the stack, this program will crash
2673
    # if the base pointer is used to access it because the
2674
    # base pointer is cleared in the inline assembly code.
2675
    check_exec_crash <<EOF && enable ebp_available
2676
    volatile int i=0;
2677
    __asm__ volatile (
2678
        "xorl %%ebp, %%ebp"
2679
    ::: "%ebp");
2680
    return i;
2681
EOF
2682

    
2683
    # check whether EBX is available on x86
2684
    check_asm ebx_available '""::"b"(0)' &&
2685
        check_asm ebx_available '"":::"%ebx"'
2686

    
2687
    # check whether xmm clobbers are supported
2688
    check_asm xmm_clobbers '"":::"%xmm0"'
2689

    
2690
    # check whether more than 10 operands are supported
2691
    check_cc <<EOF && enable ten_operands
2692
int main(void) {
2693
    int x=0;
2694
    __asm__ volatile(
2695
        ""
2696
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2697
    );
2698
    return 0;
2699
}
2700
EOF
2701

    
2702
    # check whether binutils is new enough to compile SSSE3/MMX2
2703
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2704
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2705

    
2706
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2707

    
2708
    if ! disabled_any asm mmx yasm; then
2709
        if check_cmd $yasmexe --version; then
2710
            enabled x86_64 && yasm_extra="-m amd64"
2711
            yasm_debug="-g dwarf2"
2712
        elif check_cmd nasm -v; then
2713
            yasmexe=nasm
2714
            yasm_debug="-g -F dwarf"
2715
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2716
        fi
2717

    
2718
        YASMFLAGS="-f $objformat $yasm_extra"
2719
        enabled pic               && append YASMFLAGS "-DPIC"
2720
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2721
        case "$objformat" in
2722
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2723
        esac
2724

    
2725
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2726
            die "yasm not found, use --disable-yasm for a crippled build"
2727
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2728
    fi
2729

    
2730
    case "$cpu" in
2731
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2732
            disable fast_clz
2733
        ;;
2734
    esac
2735

    
2736
fi
2737

    
2738
if enabled asm; then
2739
    as=${gas:=$as}
2740
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2741
        $nogas "GNU assembler not found, install gas-preprocessor"
2742
fi
2743

    
2744
check_ldflags -Wl,--as-needed
2745

    
2746
if check_func dlopen; then
2747
    ldl=
2748
elif check_func dlopen -ldl; then
2749
    ldl=-ldl
2750
fi
2751

    
2752
if enabled network; then
2753
    check_type "sys/types.h sys/socket.h" socklen_t
2754
    check_type netdb.h "struct addrinfo"
2755
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2756
    check_type netinet/in.h "struct sockaddr_in6"
2757
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2758
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2759
    # Prefer arpa/inet.h over winsock2
2760
    if check_header arpa/inet.h ; then
2761
        check_func closesocket
2762
    elif check_header winsock2.h ; then
2763
        check_func_headers winsock2.h closesocket -lws2 && \
2764
            network_extralibs="-lws2" || \
2765
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2766
            network_extralibs="-lws2_32"; }
2767
        check_type ws2tcpip.h socklen_t
2768
        check_type ws2tcpip.h "struct addrinfo"
2769
        check_type ws2tcpip.h "struct ipv6_mreq"
2770
        check_type ws2tcpip.h "struct sockaddr_in6"
2771
        check_type ws2tcpip.h "struct sockaddr_storage"
2772
        check_struct winsock2.h "struct sockaddr" sa_len
2773
    else
2774
        disable network
2775
    fi
2776
fi
2777

    
2778
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2779
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2780

    
2781
check_func  fcntl
2782
check_func  fork
2783
check_func  getaddrinfo $network_extralibs
2784
check_func  gethrtime
2785
check_func  getrusage
2786
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2787
check_func  inet_aton $network_extralibs
2788
check_func  isatty
2789
check_func  localtime_r
2790
check_func  ${malloc_prefix}memalign            && enable memalign
2791
check_func  mkstemp
2792
check_func  mmap
2793
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2794
check_func  setrlimit
2795
check_func  strerror_r
2796
check_func  strtok_r
2797
check_func_headers conio.h kbhit
2798
check_func_headers io.h setmode
2799
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2800
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2801
check_func_headers windows.h GetProcessTimes
2802
check_func_headers windows.h MapViewOfFile
2803
check_func_headers windows.h VirtualAlloc
2804

    
2805
check_header dlfcn.h
2806
check_header dxva2api.h
2807
check_header malloc.h
2808
check_header poll.h
2809
check_header sys/mman.h
2810
check_header sys/resource.h
2811
check_header sys/select.h
2812
check_header vdpau/vdpau.h
2813
check_header vdpau/vdpau_x11.h
2814
check_header X11/extensions/XvMClib.h
2815

    
2816
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2817

    
2818
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2819
     enabled_any $need_memalign ; then
2820
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2821
fi
2822

    
2823
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2824
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2825

    
2826
# check for some common methods of building with pthread support
2827
# do this before the optional library checks as some of them require pthreads
2828
if ! disabled pthreads && ! enabled w32threads; then
2829
    enable pthreads
2830
    if check_func pthread_create; then
2831
        :
2832
    elif check_func pthread_create -pthread; then
2833
        add_cflags -pthread
2834
        add_extralibs -pthread
2835
    elif check_func pthread_create -pthreads; then
2836
        add_cflags -pthreads
2837
        add_extralibs -pthreads
2838
    elif check_func pthread_create -lpthreadGC2; then
2839
        add_extralibs -lpthreadGC2
2840
    elif ! check_lib pthread.h pthread_create -lpthread; then
2841
        disable pthreads
2842
    fi
2843
fi
2844

    
2845
for thread in $THREADS_LIST; do
2846
    if enabled $thread; then
2847
        test -n "$thread_type" &&
2848
            die "ERROR: Only one thread type must be selected." ||
2849
            thread_type="$thread"
2850
    fi
2851
done
2852

    
2853
check_lib math.h sin -lm && LIBM="-lm"
2854
enabled vaapi && require vaapi va/va.h vaInitialize -lva
2855

    
2856
check_mathfunc exp2
2857
check_mathfunc exp2f
2858
check_mathfunc llrint
2859
check_mathfunc llrintf
2860
check_mathfunc log2
2861
check_mathfunc log2f
2862
check_mathfunc lrint
2863
check_mathfunc lrintf
2864
check_mathfunc round
2865
check_mathfunc roundf
2866
check_mathfunc trunc
2867
check_mathfunc truncf
2868

    
2869
# these are off by default, so fail if requested and not available
2870
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2871
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2872
enabled libdirac   && require_pkg_config dirac                          \
2873
    "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
2874
    "dirac_decoder_init dirac_encoder_init"
2875
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2876
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
2877
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2878
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2879
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2880
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2881
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2882
enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2883
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2884
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2885
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2886
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2887
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2888
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
2889
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2890
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2891
enabled libvpx     && {
2892
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2893
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2894
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2895
                                die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2896
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2897
                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2898
                        die "ERROR: libx264 version must be >= 0.99."; }
2899
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2900
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2901
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2902

    
2903
# libdc1394 check
2904
if enabled libdc1394; then
2905
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2906
        enable libdc1394_2; } ||
2907
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2908
        enable libdc1394_1; } ||
2909
    die "ERROR: No version of libdc1394 found "
2910
fi
2911

    
2912
if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2913
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2914
    enable sdl &&
2915
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2916
fi
2917

    
2918
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2919

    
2920
check_header linux/fb.h
2921
check_header linux/videodev.h
2922
check_header linux/videodev2.h
2923
check_header sys/videoio.h
2924

    
2925
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2926
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2927
# w32api 3.12 had it defined wrong
2928
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2929

    
2930
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2931
{ check_header dev/bktr/ioctl_meteor.h &&
2932
  check_header dev/bktr/ioctl_bt848.h; } ||
2933
{ check_header machine/ioctl_meteor.h &&
2934
  check_header machine/ioctl_bt848.h; } ||
2935
{ check_header dev/video/meteor/ioctl_meteor.h &&
2936
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2937
check_header dev/ic/bt8xx.h
2938

    
2939
check_header sndio.h
2940
check_header sys/soundcard.h
2941
check_header soundcard.h
2942

    
2943
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2944

    
2945
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2946

    
2947
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2948

    
2949
enabled x11grab                         &&
2950
check_header X11/Xlib.h                 &&
2951
check_header X11/extensions/XShm.h      &&
2952
check_header X11/extensions/Xfixes.h    &&
2953
check_func XOpenDisplay -lX11           &&
2954
check_func XShmCreateImage -lX11 -lXext &&
2955
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2956

    
2957
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2958
check_cpp_condition \
2959
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2960
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2961
      disable vdpau; }
2962
fi
2963

    
2964
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2965

    
2966
# add some useful compiler flags if supported
2967
check_cflags -Wdeclaration-after-statement
2968
check_cflags -Wall
2969
check_cflags -Wno-parentheses
2970
check_cflags -Wno-switch
2971
check_cflags -Wdisabled-optimization
2972
check_cflags -Wpointer-arith
2973
check_cflags -Wredundant-decls
2974
check_cflags -Wno-pointer-sign
2975
check_cflags -Wcast-qual
2976
check_cflags -Wwrite-strings
2977
check_cflags -Wtype-limits
2978
check_cflags -Wundef
2979
check_cflags -Wmissing-prototypes
2980
enabled extra_warnings && check_cflags -Winline
2981

    
2982
# add some linker flags
2983
check_ldflags -Wl,--warn-common
2984
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'
2985
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2986

    
2987
echo "X{};" > $TMPV
2988
if test_ldflags -Wl,--version-script,$TMPV; then
2989
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2990
    check_cc <<EOF && enable symver_asm_label
2991
void ff_foo(void) __asm__ ("av_foo@VERSION");
2992
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2993
EOF
2994
    check_cc <<EOF && enable symver_gnu_asm
2995
__asm__(".symver ff_foo,av_foo@VERSION");
2996
void ff_foo(void) {}
2997
EOF
2998
fi
2999

    
3000
if enabled small; then
3001
    add_cflags $size_cflags
3002
    optimizations="small"
3003
elif enabled optimizations; then
3004
    add_cflags $speed_cflags
3005
else
3006
    add_cflags $noopt_cflags
3007
fi
3008
check_cflags -fno-math-errno
3009
check_cflags -fno-signed-zeros
3010

    
3011
if enabled icc; then
3012
    # Just warnings, no remarks
3013
    check_cflags -w1
3014
    # -wd: Disable following warnings
3015
    # 144, 167, 556: -Wno-pointer-sign
3016
    # 1292: attribute "foo" ignored
3017
    # 10006: ignoring unknown option -fno-signed-zeros
3018
    # 10148: ignoring unknown option -Wno-parentheses
3019
    # 10156: ignoring option '-W'; no argument required
3020
    check_cflags -wd144,167,556,1292,10006,10148,10156
3021
    # 11030: Warning unknown option --as-needed
3022
    # 10156: ignoring option '-export'; no argument required
3023
    check_ldflags -wd10156,11030
3024
    # Allow to compile with optimizations
3025
    check_ldflags -march=$cpu
3026
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3027
    enable ebp_available
3028
    if enabled x86_32; then
3029
        test ${icc_version%%.*} -ge 11 && \
3030
            check_cflags -falign-stack=maintain-16-byte || \
3031
            disable aligned_stack
3032
    fi
3033
elif enabled ccc; then
3034
    # disable some annoying warnings
3035
    add_cflags -msg_disable cvtu32to64
3036
    add_cflags -msg_disable embedcomment
3037
    add_cflags -msg_disable needconstext
3038
    add_cflags -msg_disable nomainieee
3039
    add_cflags -msg_disable ptrmismatch1
3040
    add_cflags -msg_disable unreachcode
3041
elif enabled gcc; then
3042
    check_cflags -fno-tree-vectorize
3043
    check_cflags -Werror=implicit-function-declaration
3044
    check_cflags -Werror=missing-prototypes
3045
elif enabled llvm_gcc; then
3046
    check_cflags -mllvm -stack-alignment=16
3047
elif enabled clang; then
3048
    check_cflags -mllvm -stack-alignment=16
3049
    check_cflags -Qunused-arguments
3050
elif enabled armcc; then
3051
    # 2523: use of inline assembler is deprecated
3052
    add_cflags -W${armcc_opt},--diag_suppress=2523
3053
    add_cflags -W${armcc_opt},--diag_suppress=1207
3054
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3055
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3056
elif enabled tms470; then
3057
    add_cflags -pds=824 -pds=837
3058
elif enabled pathscale; then
3059
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3060
fi
3061

    
3062
enabled_any $THREADS_LIST      && enable threads
3063

    
3064
check_deps $CONFIG_LIST       \
3065
           $CONFIG_EXTRA      \
3066
           $HAVE_LIST         \
3067
           $DECODER_LIST      \
3068
           $ENCODER_LIST      \
3069
           $HWACCEL_LIST      \
3070
           $PARSER_LIST       \
3071
           $BSF_LIST          \
3072
           $DEMUXER_LIST      \
3073
           $MUXER_LIST        \
3074
           $FILTER_LIST       \
3075
           $INDEV_LIST        \
3076
           $OUTDEV_LIST       \
3077
           $PROTOCOL_LIST     \
3078
           $ACODEC_TESTS      \
3079
           $VCODEC_TESTS      \
3080
           $LAVF_TESTS        \
3081
           $LAVFI_TESTS       \
3082
           $SEEK_TESTS        \
3083

    
3084
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3085

    
3086
echo "install prefix            $prefix"
3087
echo "source path               $source_path"
3088
echo "C compiler                $cc"
3089
echo "ARCH                      $arch ($cpu)"
3090
if test "$build_suffix" != ""; then
3091
    echo "build suffix              $build_suffix"
3092
fi
3093
if test "$extra_version" != ""; then
3094
    echo "version string suffix     $extra_version"
3095
fi
3096
echo "big-endian                ${bigendian-no}"
3097
echo "runtime cpu detection     ${runtime_cpudetect-no}"
3098
if enabled x86; then
3099
    echo "yasm                      ${yasm-no}"
3100
    echo "MMX enabled               ${mmx-no}"
3101
    echo "MMX2 enabled              ${mmx2-no}"
3102
    echo "3DNow! enabled            ${amd3dnow-no}"
3103
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
3104
    echo "SSE enabled               ${sse-no}"
3105
    echo "SSSE3 enabled             ${ssse3-no}"
3106
    echo "CMOV enabled              ${cmov-no}"
3107
    echo "CMOV is fast              ${fast_cmov-no}"
3108
    echo "EBX available             ${ebx_available-no}"
3109
    echo "EBP available             ${ebp_available-no}"
3110
    echo "10 operands supported     ${ten_operands-no}"
3111
fi
3112
if enabled arm; then
3113
    echo "ARMv5TE enabled           ${armv5te-no}"
3114
    echo "ARMv6 enabled             ${armv6-no}"
3115
    echo "ARMv6T2 enabled           ${armv6t2-no}"
3116
    echo "ARM VFP enabled           ${armvfp-no}"
3117
    echo "IWMMXT enabled            ${iwmmxt-no}"
3118
    echo "NEON enabled              ${neon-no}"
3119
fi
3120
if enabled mips; then
3121
    echo "MMI enabled               ${mmi-no}"
3122
fi
3123
if enabled ppc; then
3124
    echo "AltiVec enabled           ${altivec-no}"
3125
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
3126
    echo "dcbzl available           ${dcbzl-no}"
3127
fi
3128
if enabled sparc; then
3129
    echo "VIS enabled               ${vis-no}"
3130
fi
3131
echo "debug symbols             ${debug-no}"
3132
echo "optimizations             ${optimizations-no}"
3133
echo "static                    ${static-no}"
3134
echo "shared                    ${shared-no}"
3135
echo "postprocessing support    ${postproc-no}"
3136
echo "new filter support        ${avfilter-no}"
3137
echo "network support           ${network-no}"
3138
echo "threading support         ${thread_type-no}"
3139
echo "SDL support               ${sdl-no}"
3140
echo "Sun medialib support      ${mlib-no}"
3141
echo "AVISynth enabled          ${avisynth-no}"
3142
echo "frei0r enabled            ${frei0r-no}"
3143
echo "libdc1394 support         ${libdc1394-no}"
3144
echo "libdirac enabled          ${libdirac-no}"
3145
echo "libfaac enabled           ${libfaac-no}"
3146
echo "libgsm enabled            ${libgsm-no}"
3147
echo "libmp3lame enabled        ${libmp3lame-no}"
3148
echo "libnut enabled            ${libnut-no}"
3149
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3150
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3151
echo "libopencv support         ${libopencv-no}"
3152
echo "libopenjpeg enabled       ${libopenjpeg-no}"
3153
echo "librtmp enabled           ${librtmp-no}"
3154
echo "libschroedinger enabled   ${libschroedinger-no}"
3155
echo "libspeex enabled          ${libspeex-no}"
3156
echo "libtheora enabled         ${libtheora-no}"
3157
echo "libva enabled             ${vaapi-no}"
3158
echo "libvo-aacenc support      ${libvo_aacenc-no}"
3159
echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3160
echo "libvorbis enabled         ${libvorbis-no}"
3161
echo "libvpx enabled            ${libvpx-no}"
3162
echo "libx264 enabled           ${libx264-no}"
3163
echo "libxavs enabled           ${libxavs-no}"
3164
echo "libxvid enabled           ${libxvid-no}"
3165
echo "zlib enabled              ${zlib-no}"
3166
echo "bzlib enabled             ${bzlib-no}"
3167
echo
3168

    
3169
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3170
    echo "Enabled ${type}s:"
3171
    eval list=\$$(toupper $type)_LIST
3172
    print_enabled '_*' $list | sort | pr -r -3 -t
3173
    echo
3174
done
3175

    
3176
license="LGPL version 2.1 or later"
3177
if enabled nonfree; then
3178
    license="nonfree and unredistributable"
3179
elif enabled gplv3; then
3180
    license="GPL version 3 or later"
3181
elif enabled lgplv3; then
3182
    license="LGPL version 3 or later"
3183
elif enabled gpl; then
3184
    license="GPL version 2 or later"
3185
fi
3186

    
3187
echo "License: $license"
3188

    
3189
echo "Creating config.mak and config.h..."
3190

    
3191
# build tree in object directory if source path is different from current one
3192
if enabled source_path_used; then
3193
    DIRS="
3194
        doc
3195
        libavcodec
3196
        libavcodec/$arch
3197
        libavdevice
3198
        libavfilter
3199
        libavfilter/$arch
3200
        libavformat
3201
        libavutil
3202
        libavutil/$arch
3203
        libpostproc
3204
        libswscale
3205
        libswscale/$arch
3206
        tests
3207
        tools
3208
    "
3209
    FILES="
3210
        Makefile
3211
        common.mak
3212
        subdir.mak
3213
        doc/texi2pod.pl
3214
        libavcodec/Makefile
3215
        libavcodec/${arch}/Makefile
3216
        libavdevice/Makefile
3217
        libavfilter/Makefile
3218
        libavfilter/${arch}/Makefile
3219
        libavformat/Makefile
3220
        libavutil/Makefile
3221
        libpostproc/Makefile
3222
        libswscale/Makefile
3223
    "
3224
    map 'mkdir -p $v' $DIRS;
3225
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3226
fi
3227

    
3228
config_files="$TMPH config.mak"
3229

    
3230
cat > config.mak <<EOF
3231
# Automatically generated by configure - do not modify!
3232
ifndef LIBAV_CONFIG_MAK
3233
LIBAV_CONFIG_MAK=1
3234
LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3235
prefix=$prefix
3236
LIBDIR=\$(DESTDIR)$libdir
3237
SHLIBDIR=\$(DESTDIR)$shlibdir
3238
INCDIR=\$(DESTDIR)$incdir
3239
BINDIR=\$(DESTDIR)$bindir
3240
DATADIR=\$(DESTDIR)$datadir
3241
MANDIR=\$(DESTDIR)$mandir
3242
SRC_PATH="$source_path"
3243
SRC_PATH_BARE=$source_path
3244
BUILD_ROOT="$PWD"
3245
CC_IDENT=$cc_ident
3246
ARCH=$arch
3247
CC=$cc
3248
AS=$as
3249
LD=$ld
3250
DEPCC=$dep_cc
3251
YASM=$yasmexe
3252
YASMDEP=$yasmexe
3253
AR=$ar
3254
RANLIB=$ranlib
3255
LN_S=$ln_s
3256
CPPFLAGS=$CPPFLAGS
3257
CFLAGS=$CFLAGS
3258
ASFLAGS=$ASFLAGS
3259
CC_O=$CC_O
3260
DLLTOOL=$dlltool
3261
LDFLAGS=$LDFLAGS
3262
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3263
SHFLAGS=$SHFLAGS
3264
YASMFLAGS=$YASMFLAGS
3265
BUILDSUF=$build_suffix
3266
FULLNAME=$FULLNAME
3267
LIBPREF=$LIBPREF
3268
LIBSUF=$LIBSUF
3269
LIBNAME=$LIBNAME
3270
SLIBPREF=$SLIBPREF
3271
SLIBSUF=$SLIBSUF
3272
EXESUF=$EXESUF
3273
EXTRA_VERSION=$extra_version
3274
DEPFLAGS=$DEPFLAGS
3275
CCDEP=$CCDEP
3276
ASDEP=$ASDEP
3277
CC_DEPFLAGS=$CC_DEPFLAGS
3278
AS_DEPFLAGS=$AS_DEPFLAGS
3279
HOSTCC=$host_cc
3280
HOSTCFLAGS=$host_cflags
3281
HOSTEXESUF=$HOSTEXESUF
3282
HOSTLDFLAGS=$host_ldflags
3283
HOSTLIBS=$host_libs
3284
TARGET_EXEC=$target_exec
3285
TARGET_PATH=$target_path
3286
SDL_LIBS=$sdl_libs
3287
SDL_CFLAGS=$sdl_cflags
3288
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3289
EXTRALIBS=$extralibs
3290
INSTALL=install
3291
LIBTARGET=${LIBTARGET}
3292
SLIBNAME=${SLIBNAME}
3293
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3294
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3295
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3296
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3297
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3298
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3299
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3300
EOF
3301

    
3302
get_version(){
3303
    name=$1
3304
    file=$source_path/$2
3305
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3306
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3307
    lcname=$(tolower $name)
3308
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3309
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3310
}
3311

    
3312
get_version LIBSWSCALE  libswscale/swscale.h
3313
get_version LIBPOSTPROC libpostproc/postprocess.h
3314
get_version LIBAVCODEC  libavcodec/version.h
3315
get_version LIBAVDEVICE libavdevice/avdevice.h
3316
get_version LIBAVFORMAT libavformat/version.h
3317
get_version LIBAVUTIL   libavutil/avutil.h
3318
get_version LIBAVFILTER libavfilter/avfilter.h
3319

    
3320
cat > $TMPH <<EOF
3321
/* Automatically generated by configure - do not modify! */
3322
#ifndef LIBAV_CONFIG_H
3323
#define LIBAV_CONFIG_H
3324
#define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3325
#define LIBAV_LICENSE "$(c_escape $license)"
3326
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3327
#define CC_TYPE "$cc_type"
3328
#define CC_VERSION $cc_version
3329
#define restrict $_restrict
3330
#define EXTERN_PREFIX "${extern_prefix}"
3331
#define EXTERN_ASM ${extern_prefix}
3332
#define SLIBSUF "$SLIBSUF"
3333
EOF
3334

    
3335
test -n "$malloc_prefix" &&
3336
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3337

    
3338
if enabled small || disabled optimizations; then
3339
    echo "#undef  av_always_inline"  >> $TMPH
3340
    if enabled small; then
3341
        echo "#define av_always_inline inline"  >> $TMPH
3342
    else
3343
        echo "#define av_always_inline av_unused"  >> $TMPH
3344
    fi
3345
fi
3346

    
3347
if enabled yasm; then
3348
    append config_files $TMPASM
3349
    printf '' >$TMPASM
3350
fi
3351

    
3352
print_config ARCH_   "$config_files" $ARCH_LIST
3353
print_config HAVE_   "$config_files" $HAVE_LIST
3354
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3355
                                     $CONFIG_EXTRA      \
3356
                                     $DECODER_LIST      \
3357
                                     $ENCODER_LIST      \
3358
                                     $HWACCEL_LIST      \
3359
                                     $PARSER_LIST       \
3360
                                     $BSF_LIST          \
3361
                                     $DEMUXER_LIST      \
3362
                                     $MUXER_LIST        \
3363
                                     $FILTER_LIST       \
3364
                                     $PROTOCOL_LIST     \
3365
                                     $INDEV_LIST        \
3366
                                     $OUTDEV_LIST       \
3367

    
3368
cat >>config.mak <<EOF
3369
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3370
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3371
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3372
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3373
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3374
EOF
3375

    
3376
echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3377
echo "endif # LIBAV_CONFIG_MAK" >> config.mak
3378

    
3379
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3380
cp_if_changed $TMPH config.h
3381
touch .config
3382

    
3383
enabled yasm && cp_if_changed $TMPASM config.asm
3384

    
3385
cat > $TMPH <<EOF
3386
/* Generated by ffconf */
3387
#ifndef AVUTIL_AVCONFIG_H
3388
#define AVUTIL_AVCONFIG_H
3389
EOF
3390

    
3391
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3392

    
3393
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3394

    
3395
cp_if_changed $TMPH libavutil/avconfig.h
3396

    
3397
test -n "$WARNINGS" && printf "\n$WARNINGS"
3398

    
3399
# build pkg-config files
3400

    
3401
pkgconfig_generate(){
3402
name=$1
3403
shortname=${name#lib}${build_suffix}
3404
comment=$2
3405
version=$3
3406
libs=$4
3407
requires=$5
3408
enabled ${name#lib} || return 0
3409
cat <<EOF > $name/$name.pc
3410
prefix=$prefix
3411
exec_prefix=\${prefix}
3412
libdir=$libdir
3413
includedir=$incdir
3414

    
3415
Name: $name
3416
Description: $comment
3417
Version: $version
3418
Requires: $(enabled shared || echo $requires)
3419
Requires.private: $(enabled shared && echo $requires)
3420
Conflicts:
3421
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3422
Libs.private: $(enabled shared && echo $libs)
3423
Cflags: -I\${includedir}
3424
EOF
3425
cat <<EOF > $name/$name-uninstalled.pc
3426
prefix=
3427
exec_prefix=
3428
libdir=\${pcfiledir}
3429
includedir=${source_path}
3430

    
3431
Name: $name
3432
Description: $comment
3433
Version: $version
3434
Requires: $requires
3435
Conflicts:
3436
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3437
Cflags: -I\${includedir}
3438
EOF
3439
}
3440

    
3441
pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3442
pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3443
pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3444
pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3445
pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3446
pkgconfig_generate libpostproc "Libav post processing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3447
pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"