Statistics
| Branch: | Revision:

ffmpeg / configure @ ad4d974c

History | View | Annotate | Download (87.2 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
251
quotes='""'
252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
516
flags_saved(){
517
    (: ${SAVE_CFLAGS?}) 2> /dev/null
518
}
519

    
520
save_flags(){
521
    flags_saved && return
522
    SAVE_CFLAGS="$CFLAGS"
523
    SAVE_LDFLAGS="$LDFLAGS"
524
    SAVE_extralibs="$extralibs"
525
}
526

    
527
restore_flags(){
528
    flags_saved || return
529
    CFLAGS="$SAVE_CFLAGS"
530
    LDFLAGS="$SAVE_LDFLAGS"
531
    extralibs="$SAVE_extralibs"
532
    unset SAVE_CFLAGS
533
    unset SAVE_LDFLAGS
534
    unset SAVE_extralibs
535
}
536

    
537
temp_cflags(){
538
    save_flags
539
    CFLAGS="$CFLAGS $*"
540
}
541

    
542
temp_ldflags(){
543
    save_flags
544
    LDFLAGS="$LDFLAGS $*"
545
}
546

    
547
temp_extralibs(){
548
    save_flags
549
    extralibs="$extralibs $*"
550
}
551

    
552
append(){
553
    var=$1
554
    shift
555
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
556
    eval "$var=\"\$$var $*\""
557
}
558

    
559
add_cppflags(){
560
    append CPPFLAGS $($filter_cppflags "$@")
561
}
562

    
563
add_cflags(){
564
    append CFLAGS $($filter_cflags "$@")
565
}
566

    
567
add_asflags(){
568
    append ASFLAGS $($filter_asflags "$@")
569
}
570

    
571
add_ldflags(){
572
    append LDFLAGS "$@"
573
}
574

    
575
add_extralibs(){
576
    append extralibs "$@"
577
}
578

    
579
check_cmd(){
580
    log "$@"
581
    "$@" >> $logfile 2>&1
582
}
583

    
584
check_cc(){
585
    log check_cc "$@"
586
    cat > $TMPC
587
    log_file $TMPC
588
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
589
}
590

    
591
check_cpp(){
592
    log check_cpp "$@"
593
    cat > $TMPC
594
    log_file $TMPC
595
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
596
}
597

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

    
605
check_asm(){
606
    log check_asm "$@"
607
    name="$1"
608
    code="$2"
609
    shift 2
610
    disable $name
611
    check_as "$@" <<EOF && enable $name
612
void foo(void){ __asm__ volatile($code); }
613
EOF
614
}
615

    
616
check_yasm(){
617
    log check_yasm "$@"
618
    echo "$1" > $TMPS
619
    log_file $TMPS
620
    shift 1
621
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
622
}
623

    
624
check_ld(){
625
    log check_ld "$@"
626
    flags=''
627
    libs=''
628
    for f; do
629
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
630
    done
631
    check_cc $($filter_cflags $flags) || return
632
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
633
}
634

    
635
check_cppflags(){
636
    log check_cppflags "$@"
637
    set -- $($filter_cppflags "$@")
638
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
639
int x;
640
EOF
641
}
642

    
643
check_cflags(){
644
    log check_cflags "$@"
645
    set -- $($filter_cflags "$@")
646
    check_cc "$@" <<EOF && append CFLAGS "$@"
647
int x;
648
EOF
649
}
650

    
651
test_ldflags(){
652
    log test_ldflags "$@"
653
    check_ld "$@" <<EOF
654
int main(void){ return 0; }
655
EOF
656
}
657

    
658
check_ldflags(){
659
    log check_ldflags "$@"
660
    test_ldflags "$@" && add_ldflags "$@"
661
}
662

    
663
check_header(){
664
    log check_header "$@"
665
    header=$1
666
    shift
667
    disable_safe $header
668
    check_cpp "$@" <<EOF && enable_safe $header
669
#include <$header>
670
int x;
671
EOF
672
}
673

    
674
check_func(){
675
    log check_func "$@"
676
    func=$1
677
    shift
678
    disable $func
679
    check_ld "$@" <<EOF && enable $func
680
extern int $func();
681
int main(void){ $func(); }
682
EOF
683
}
684

    
685
check_mathfunc(){
686
    log check_mathfunc "$@"
687
    func=$1
688
    shift
689
    disable $func
690
    check_ld "$@" <<EOF && enable $func
691
#include <math.h>
692
float foo(float f) { return $func(f); }
693
int main(void){ return 0; }
694
EOF
695
}
696

    
697
check_func_headers(){
698
    log check_func_headers "$@"
699
    headers=$1
700
    func=$2
701
    shift 2
702
    disable $func
703
    incs=""
704
    for hdr in $headers; do
705
        incs="$incs
706
#include <$hdr>"
707
    done
708
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
709
$incs
710
int main(int argc, char **argv){
711
    return (long) $func;
712
}
713
EOF
714
}
715

    
716
check_cpp_condition(){
717
    log check_cpp_condition "$@"
718
    header=$1
719
    condition=$2
720
    shift 2
721
    check_cpp $($filter_cppflags "$@") <<EOF
722
#include <$header>
723
#if !($condition)
724
#error "unsatisfied condition: $condition"
725
#endif
726
EOF
727
}
728

    
729
check_lib(){
730
    log check_lib "$@"
731
    header="$1"
732
    func="$2"
733
    shift 2
734
    temp_extralibs "$@"
735
    check_header $header && check_func $func && add_extralibs "$@"
736
    err=$?
737
    restore_flags
738
    return $err
739
}
740

    
741
check_lib2(){
742
    log check_lib2 "$@"
743
    headers="$1"
744
    func="$2"
745
    shift 2
746
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
747
}
748

    
749
check_exec(){
750
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
751
}
752

    
753
check_exec_crash(){
754
    code=$(cat)
755

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

    
762
    (check_exec "$@") >> $logfile 2>&1 <<EOF
763
#include <signal.h>
764
static void sighandler(int sig){
765
    raise(SIGTERM);
766
}
767
int main(void){
768
    signal(SIGILL, sighandler);
769
    signal(SIGFPE, sighandler);
770
    signal(SIGSEGV, sighandler);
771
#ifdef SIGBUS
772
    signal(SIGBUS, sighandler);
773
#endif
774
    { $code }
775
}
776
EOF
777
}
778

    
779
check_type(){
780
    log check_type "$@"
781
    headers=$1
782
    type=$2
783
    shift 2
784
    disable_safe "$type"
785
    incs=""
786
    for hdr in $headers; do
787
        incs="$incs
788
#include <$hdr>"
789
    done
790
    check_cc "$@" <<EOF && enable_safe "$type"
791
$incs
792
$type v;
793
EOF
794
}
795

    
796
check_struct(){
797
    log check_type "$@"
798
    headers=$1
799
    struct=$2
800
    member=$3
801
    shift 3
802
    disable_safe "${struct}_${member}"
803
    incs=""
804
    for hdr in $headers; do
805
        incs="$incs
806
#include <$hdr>"
807
    done
808
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
809
$incs
810
const void *p = &(($struct *)0)->$member;
811
EOF
812
}
813

    
814
require(){
815
    name="$1"
816
    header="$2"
817
    func="$3"
818
    shift 3
819
    check_lib $header $func "$@" || die "ERROR: $name not found"
820
}
821

    
822
require2(){
823
    name="$1"
824
    headers="$2"
825
    func="$3"
826
    shift 3
827
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
828
}
829

    
830
check_host_cc(){
831
    log check_host_cc "$@"
832
    cat > $TMPC
833
    log_file $TMPC
834
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
835
}
836

    
837
check_host_cflags(){
838
    log check_host_cflags "$@"
839
    check_host_cc "$@" <<EOF && append host_cflags "$@"
840
int x;
841
EOF
842
}
843

    
844
apply(){
845
    file=$1
846
    shift
847
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
848
}
849

    
850
cp_if_changed(){
851
    cmp -s "$1" "$2" &&
852
        echo "$2 is unchanged" ||
853
        cp -f "$1" "$2"
854
}
855

    
856
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
857
# system-dependent things.
858

    
859
COMPONENT_LIST="
860
    bsfs
861
    decoders
862
    demuxers
863
    encoders
864
    filters
865
    hwaccels
866
    indevs
867
    muxers
868
    outdevs
869
    parsers
870
    protocols
871
"
872

    
873
CONFIG_LIST="
874
    $COMPONENT_LIST
875
    aandct
876
    avcodec
877
    avdevice
878
    avfilter
879
    avfilter_lavf
880
    avformat
881
    avisynth
882
    bzlib
883
    dct
884
    doc
885
    dwt
886
    dxva2
887
    fastdiv
888
    ffmpeg
889
    ffplay
890
    ffprobe
891
    ffserver
892
    fft
893
    golomb
894
    gpl
895
    gprof
896
    gray
897
    h264dsp
898
    hardcoded_tables
899
    libdc1394
900
    libdirac
901
    libfaac
902
    libgsm
903
    libmp3lame
904
    libnut
905
    libopencore_amrnb
906
    libopencore_amrwb
907
    libopenjpeg
908
    librtmp
909
    libschroedinger
910
    libspeex
911
    libtheora
912
    libvorbis
913
    libvpx
914
    libx264
915
    libxvid
916
    lpc
917
    lsp
918
    mdct
919
    memalign_hack
920
    mlib
921
    mpegaudio_hp
922
    network
923
    nonfree
924
    pic
925
    postproc
926
    powerpc_perf
927
    rdft
928
    runtime_cpudetect
929
    shared
930
    small
931
    sram
932
    static
933
    swscale
934
    swscale_alpha
935
    vaapi
936
    vdpau
937
    version3
938
    x11grab
939
    zlib
940
"
941

    
942
THREADS_LIST='
943
    pthreads
944
    w32threads
945
'
946

    
947
ARCH_LIST='
948
    alpha
949
    arm
950
    avr32
951
    avr32_ap
952
    avr32_uc
953
    bfin
954
    ia64
955
    m68k
956
    mips
957
    mips64
958
    parisc
959
    ppc
960
    ppc64
961
    s390
962
    sh4
963
    sparc
964
    sparc64
965
    tomi
966
    x86
967
    x86_32
968
    x86_64
969
'
970

    
971
ARCH_EXT_LIST='
972
    altivec
973
    amd3dnow
974
    amd3dnowext
975
    armv5te
976
    armv6
977
    armv6t2
978
    armvfp
979
    iwmmxt
980
    mmi
981
    mmx
982
    mmx2
983
    neon
984
    ppc4xx
985
    sse
986
    ssse3
987
    vis
988
'
989

    
990
HAVE_LIST_PUB='
991
    bigendian
992
'
993

    
994
HAVE_LIST="
995
    $ARCH_EXT_LIST
996
    $HAVE_LIST_PUB
997
    $THREADS_LIST
998
    alsa_asoundlib_h
999
    altivec_h
1000
    arpa_inet_h
1001
    attribute_may_alias
1002
    attribute_packed
1003
    bswap
1004
    closesocket
1005
    cmov
1006
    conio_h
1007
    dcbzl
1008
    dev_bktr_ioctl_bt848_h
1009
    dev_bktr_ioctl_meteor_h
1010
    dev_ic_bt8xx_h
1011
    dev_video_meteor_ioctl_meteor_h
1012
    dev_video_bktr_ioctl_bt848_h
1013
    dlfcn_h
1014
    dlopen
1015
    dos_paths
1016
    ebp_available
1017
    ebx_available
1018
    exp2
1019
    exp2f
1020
    fast_64bit
1021
    fast_clz
1022
    fast_cmov
1023
    fast_unaligned
1024
    fork
1025
    getaddrinfo
1026
    gethrtime
1027
    GetProcessMemoryInfo
1028
    GetProcessTimes
1029
    getrusage
1030
    struct_rusage_ru_maxrss
1031
    inet_aton
1032
    inline_asm
1033
    isatty
1034
    ldbrx
1035
    libdc1394_1
1036
    libdc1394_2
1037
    llrint
1038
    llrintf
1039
    local_aligned_16
1040
    local_aligned_8
1041
    log2
1042
    log2f
1043
    loongson
1044
    lrint
1045
    lrintf
1046
    lzo1x_999_compress
1047
    machine_ioctl_bt848_h
1048
    machine_ioctl_meteor_h
1049
    malloc_h
1050
    memalign
1051
    mkstemp
1052
    pld
1053
    posix_memalign
1054
    round
1055
    roundf
1056
    sdl
1057
    sdl_video_size
1058
    setmode
1059
    socklen_t
1060
    soundcard_h
1061
    poll_h
1062
    setrlimit
1063
    strerror_r
1064
    struct_addrinfo
1065
    struct_ipv6_mreq
1066
    struct_sockaddr_in6
1067
    struct_sockaddr_sa_len
1068
    struct_sockaddr_storage
1069
    symver
1070
    symver_gnu_asm
1071
    symver_asm_label
1072
    sys_mman_h
1073
    sys_resource_h
1074
    sys_select_h
1075
    sys_soundcard_h
1076
    sys_videoio_h
1077
    ten_operands
1078
    termios_h
1079
    threads
1080
    truncf
1081
    vfp_args
1082
    VirtualAlloc
1083
    winsock2_h
1084
    xform_asm
1085
    yasm
1086
"
1087

    
1088
# options emitted with CONFIG_ prefix but not available on command line
1089
CONFIG_EXTRA="
1090
    avutil
1091
    gplv3
1092
    lgplv3
1093
"
1094

    
1095
CMDLINE_SELECT="
1096
    $ARCH_EXT_LIST
1097
    $CONFIG_LIST
1098
    $THREADS_LIST
1099
    asm
1100
    cross_compile
1101
    debug
1102
    extra_warnings
1103
    logging
1104
    optimizations
1105
    stripping
1106
    yasm
1107
"
1108

    
1109
PATHS_LIST='
1110
    bindir
1111
    datadir
1112
    incdir
1113
    libdir
1114
    mandir
1115
    prefix
1116
    shlibdir
1117
'
1118

    
1119
CMDLINE_SET="
1120
    $PATHS_LIST
1121
    ar
1122
    arch
1123
    as
1124
    build_suffix
1125
    cc
1126
    cpu
1127
    cross_prefix
1128
    dep_cc
1129
    extra_version
1130
    host_cc
1131
    host_cflags
1132
    host_ldflags
1133
    host_libs
1134
    host_os
1135
    ld
1136
    logfile
1137
    malloc_prefix
1138
    nm
1139
    samples
1140
    source_path
1141
    strip
1142
    sysinclude
1143
    sysroot
1144
    target_exec
1145
    target_os
1146
    target_path
1147
"
1148

    
1149
CMDLINE_APPEND="
1150
    extra_cflags
1151
"
1152

    
1153
# code dependency declarations
1154

    
1155
# architecture extensions
1156

    
1157
armv5te_deps="arm"
1158
armv6_deps="arm"
1159
armv6t2_deps="arm"
1160
armvfp_deps="arm"
1161
iwmmxt_deps="arm"
1162
neon_deps="arm"
1163

    
1164
mmi_deps="mips"
1165

    
1166
altivec_deps="ppc"
1167
ppc4xx_deps="ppc"
1168

    
1169
vis_deps="sparc"
1170

    
1171
x86_64_suggest="cmov fast_cmov"
1172
amd3dnow_deps="mmx"
1173
amd3dnowext_deps="amd3dnow"
1174
mmx_deps="x86"
1175
mmx2_deps="mmx"
1176
sse_deps="mmx"
1177
ssse3_deps="sse"
1178

    
1179
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1180
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1181
fast_unaligned_if_any="armv6 ppc x86"
1182

    
1183
need_memalign="altivec neon sse"
1184
inline_asm_deps="!tms470"
1185

    
1186
symver_if_any="symver_asm_label symver_gnu_asm"
1187

    
1188
# subsystems
1189
mdct_select="fft"
1190
rdft_select="fft"
1191

    
1192
# decoders / encoders / hardware accelerators
1193
aac_decoder_select="mdct rdft aac_parser"
1194
aac_encoder_select="mdct"
1195
ac3_decoder_select="mdct ac3_parser"
1196
alac_encoder_select="lpc"
1197
amrnb_decoder_select="lsp"
1198
atrac1_decoder_select="mdct"
1199
atrac3_decoder_select="mdct"
1200
binkaudio_dct_decoder_select="mdct rdft dct"
1201
binkaudio_rdft_decoder_select="mdct rdft"
1202
cavs_decoder_select="golomb"
1203
cook_decoder_select="mdct"
1204
cscd_decoder_suggest="zlib"
1205
dca_decoder_select="mdct"
1206
dnxhd_encoder_select="aandct"
1207
dxa_decoder_select="zlib"
1208
eac3_decoder_select="ac3_decoder"
1209
eamad_decoder_select="aandct"
1210
eatgq_decoder_select="aandct"
1211
eatqi_decoder_select="aandct"
1212
ffv1_decoder_select="golomb"
1213
flac_decoder_select="golomb"
1214
flac_encoder_select="golomb lpc"
1215
flashsv_decoder_select="zlib"
1216
flashsv_encoder_select="zlib"
1217
flv_decoder_select="h263_decoder"
1218
flv_encoder_select="h263_encoder"
1219
h261_encoder_select="aandct"
1220
h263_decoder_select="h263_parser"
1221
h263_encoder_select="aandct"
1222
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1223
h263i_decoder_select="h263_decoder"
1224
h263p_encoder_select="h263_encoder"
1225
h264_decoder_select="golomb h264dsp"
1226
h264_dxva2_hwaccel_deps="dxva2api_h"
1227
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1228
h264_vaapi_hwaccel_select="vaapi"
1229
h264_vdpau_decoder_select="vdpau h264_decoder"
1230
imc_decoder_select="fft mdct"
1231
jpegls_decoder_select="golomb"
1232
jpegls_encoder_select="golomb"
1233
ljpeg_encoder_select="aandct"
1234
loco_decoder_select="golomb"
1235
mjpeg_encoder_select="aandct"
1236
mlp_decoder_select="mlp_parser"
1237
mpeg1video_encoder_select="aandct"
1238
mpeg2video_encoder_select="aandct"
1239
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1240
mpeg4_encoder_select="h263_encoder"
1241
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1242
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1243
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1244
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1245
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1246
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1247
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1248
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1249
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1250
msmpeg4v1_decoder_select="h263_decoder"
1251
msmpeg4v1_encoder_select="h263_encoder"
1252
msmpeg4v2_decoder_select="h263_decoder"
1253
msmpeg4v2_encoder_select="h263_encoder"
1254
msmpeg4v3_decoder_select="h263_decoder"
1255
msmpeg4v3_encoder_select="h263_encoder"
1256
nellymoser_decoder_select="mdct"
1257
nellymoser_encoder_select="mdct"
1258
png_decoder_select="zlib"
1259
png_encoder_select="zlib"
1260
qcelp_decoder_select="lsp"
1261
qdm2_decoder_select="mdct rdft"
1262
ra_144_encoder_select="lpc"
1263
rv10_decoder_select="h263_decoder"
1264
rv10_encoder_select="h263_encoder"
1265
rv20_decoder_select="h263_decoder"
1266
rv20_encoder_select="h263_encoder"
1267
rv30_decoder_select="golomb h264dsp"
1268
rv40_decoder_select="golomb h264dsp"
1269
shorten_decoder_select="golomb"
1270
sipr_decoder_select="lsp"
1271
snow_decoder_select="dwt"
1272
snow_encoder_select="aandct dwt"
1273
sonic_decoder_select="golomb"
1274
sonic_encoder_select="golomb"
1275
sonic_ls_encoder_select="golomb"
1276
svq1_encoder_select="aandct"
1277
svq3_decoder_select="golomb h264dsp"
1278
svq3_decoder_suggest="zlib"
1279
theora_decoder_select="vp3_decoder"
1280
tiff_decoder_suggest="zlib"
1281
tiff_encoder_suggest="zlib"
1282
truehd_decoder_select="mlp_decoder"
1283
tscc_decoder_select="zlib"
1284
twinvq_decoder_select="mdct lsp"
1285
vc1_decoder_select="h263_decoder"
1286
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1287
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1288
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1289
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1290
vorbis_decoder_select="mdct"
1291
vorbis_encoder_select="mdct"
1292
vp6a_decoder_select="vp6_decoder"
1293
vp6f_decoder_select="vp6_decoder"
1294
wmapro_decoder_select="mdct"
1295
wmav1_decoder_select="mdct"
1296
wmav1_encoder_select="mdct"
1297
wmav2_decoder_select="mdct"
1298
wmav2_encoder_select="mdct"
1299
wmavoice_decoder_select="lsp rdft dct"
1300
wmv1_decoder_select="h263_decoder"
1301
wmv1_encoder_select="h263_encoder"
1302
wmv2_decoder_select="h263_decoder"
1303
wmv2_encoder_select="h263_encoder"
1304
wmv3_decoder_select="vc1_decoder"
1305
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1306
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1307
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1308
zlib_decoder_select="zlib"
1309
zlib_encoder_select="zlib"
1310
zmbv_decoder_select="zlib"
1311
zmbv_encoder_select="zlib"
1312

    
1313
vaapi_deps="va_va_h"
1314
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1315

    
1316
# parsers
1317
h264_parser_select="golomb h264dsp"
1318

    
1319
# bitstream_filters
1320
aac_adtstoasc_bsf_select="aac_parser"
1321

    
1322
# external libraries
1323
libdirac_decoder_deps="libdirac !libschroedinger"
1324
libdirac_encoder_deps="libdirac"
1325
libfaac_encoder_deps="libfaac"
1326
libgsm_decoder_deps="libgsm"
1327
libgsm_encoder_deps="libgsm"
1328
libgsm_ms_decoder_deps="libgsm"
1329
libgsm_ms_encoder_deps="libgsm"
1330
libmp3lame_encoder_deps="libmp3lame"
1331
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1332
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1333
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1334
libopenjpeg_decoder_deps="libopenjpeg"
1335
libschroedinger_decoder_deps="libschroedinger"
1336
libschroedinger_encoder_deps="libschroedinger"
1337
libspeex_decoder_deps="libspeex"
1338
libtheora_encoder_deps="libtheora"
1339
libvorbis_encoder_deps="libvorbis"
1340
libvpx_decoder_deps="libvpx"
1341
libvpx_encoder_deps="libvpx"
1342
libx264_encoder_deps="libx264"
1343
libxvid_encoder_deps="libxvid"
1344

    
1345
# demuxers / muxers
1346
ac3_demuxer_deps="ac3_parser"
1347
asf_stream_muxer_select="asf_muxer"
1348
avisynth_demuxer_deps="avisynth"
1349
dirac_demuxer_deps="dirac_parser"
1350
eac3_demuxer_select="ac3_parser"
1351
ipod_muxer_select="mov_muxer"
1352
libnut_demuxer_deps="libnut"
1353
libnut_muxer_deps="libnut"
1354
matroska_audio_muxer_select="matroska_muxer"
1355
matroska_demuxer_suggest="zlib bzlib"
1356
mov_demuxer_suggest="zlib"
1357
mp3_demuxer_deps="mpegaudio_parser"
1358
mp4_muxer_select="mov_muxer"
1359
mpegtsraw_demuxer_select="mpegts_demuxer"
1360
mxf_d10_muxer_select="mxf_muxer"
1361
ogg_demuxer_select="golomb"
1362
psp_muxer_select="mov_muxer"
1363
rtsp_demuxer_deps="sdp_demuxer"
1364
rtsp_muxer_deps="sdp_demuxer"
1365
rtsp_muxer_select="rtp_muxer"
1366
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1367
sdp_demuxer_select="asf_demuxer rm_demuxer"
1368
spdif_muxer_select="aac_parser"
1369
tg2_muxer_select="mov_muxer"
1370
tgp_muxer_select="mov_muxer"
1371
w64_demuxer_deps="wav_demuxer"
1372

    
1373
# indevs / outdevs
1374
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1375
alsa_indev_extralibs="-lasound"
1376
alsa_outdev_deps="alsa_asoundlib_h"
1377
alsa_outdev_extralibs="-lasound"
1378
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1379
dv1394_indev_deps="dv1394 dv_demuxer"
1380
jack_indev_deps="jack_jack_h"
1381
jack_indev_extralibs="-ljack"
1382
libdc1394_indev_deps="libdc1394"
1383
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1384
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1385
v4l_indev_deps="linux_videodev_h"
1386
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1387
vfwcap_indev_deps="capCreateCaptureWindow"
1388
vfwcap_indev_extralibs="-lavicap32"
1389
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1390
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1391

    
1392
# protocols
1393
gopher_protocol_deps="network"
1394
http_protocol_deps="network"
1395
http_protocol_select="tcp_protocol"
1396
mmst_protocol_deps="network"
1397
rtmp_protocol_select="tcp_protocol"
1398
rtp_protocol_select="udp_protocol"
1399
tcp_protocol_deps="network"
1400
udp_protocol_deps="network"
1401

    
1402
# filters
1403
movie_filter_deps="avfilter_lavf"
1404
avfilter_lavf_deps="avformat"
1405

    
1406
# libraries
1407
avdevice_deps="avcodec avformat"
1408
avformat_deps="avcodec"
1409

    
1410
# programs
1411
ffmpeg_deps="avcodec avformat swscale"
1412
ffmpeg_select="buffer_filter"
1413
ffplay_deps="avcodec avformat swscale sdl"
1414
ffplay_select="rdft"
1415
ffprobe_deps="avcodec avformat"
1416
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1417
ffserver_extralibs='$ldl'
1418

    
1419
doc_deps="texi2html"
1420

    
1421
# default parameters
1422

    
1423
logfile="config.log"
1424

    
1425
# installation paths
1426
prefix_default="/usr/local"
1427
bindir_default='${prefix}/bin'
1428
datadir_default='${prefix}/share/ffmpeg'
1429
incdir_default='${prefix}/include'
1430
libdir_default='${prefix}/lib'
1431
mandir_default='${prefix}/share/man'
1432
shlibdir_default="$libdir_default"
1433

    
1434
# toolchain
1435
ar_default="ar"
1436
cc_default="gcc"
1437
cc_version=\"unknown\"
1438
host_cc_default="gcc"
1439
ln_s="ln -sf"
1440
nm_default="nm"
1441
objformat="elf"
1442
ranlib="ranlib"
1443
strip_default="strip"
1444
yasmexe="yasm"
1445

    
1446
nm_opts='-g'
1447

    
1448
# machine
1449
arch_default=$(uname -m)
1450
cpu="generic"
1451

    
1452
# OS
1453
target_os_default=$(tolower $(uname -s))
1454
host_os=$target_os_default
1455

    
1456
# configurable options
1457
enable avcodec
1458
enable avdevice
1459
enable avfilter
1460
enable avformat
1461
enable avutil
1462
enable asm
1463
enable debug
1464
enable doc
1465
enable fastdiv
1466
enable ffmpeg
1467
enable ffplay
1468
enable ffprobe
1469
enable ffserver
1470
enable mpegaudio_hp
1471
enable network
1472
enable optimizations
1473
enable protocols
1474
enable static
1475
enable stripping
1476
enable swscale
1477
enable swscale_alpha
1478

    
1479
# build settings
1480
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1481
FFSERVERLDFLAGS=-Wl,-E
1482
LIBPREF="lib"
1483
LIBSUF=".a"
1484
FULLNAME='$(NAME)$(BUILDSUF)'
1485
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1486
SLIBPREF="lib"
1487
SLIBSUF=".so"
1488
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1489
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1490
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1491
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1492

    
1493
CC_O='-o $@'
1494

    
1495
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1496
host_libs='-lm'
1497

    
1498
target_path='$(CURDIR)'
1499

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

    
1505
# find source path
1506
source_path="$(dirname "$0")"
1507
enable source_path_used
1508
if test -f configure; then
1509
    source_path="$(pwd)"
1510
    disable source_path_used
1511
else
1512
    source_path="$(cd "$source_path"; pwd)"
1513
    echo "$source_path" | grep -q '[[:blank:]]' &&
1514
        die "Out of tree builds are impossible with whitespace in source path."
1515
    test -e "$source_path/config.h" &&
1516
        die "Out of tree builds are impossible with config.h in source dir."
1517
fi
1518

    
1519
for v in "$@"; do
1520
    r=${v#*=}
1521
    l=${v%"$r"}
1522
    r=$(sh_quote "$r")
1523
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1524
done
1525

    
1526
find_things(){
1527
    thing=$1
1528
    pattern=$2
1529
    file=$source_path/$3
1530
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1531
}
1532

    
1533
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1534
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1535
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1536
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1537
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1538
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1539
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1540
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1541
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1542
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1543
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1544

    
1545
for n in $COMPONENT_LIST; do
1546
    v=$(toupper ${n%s})_LIST
1547
    eval enable \$$v
1548
    eval ${n}_if_any="\$$v"
1549
done
1550

    
1551
enable $ARCH_EXT_LIST
1552

    
1553
die_unknown(){
1554
    echo "Unknown option \"$1\"."
1555
    echo "See $0 --help for available options."
1556
    exit 1
1557
}
1558

    
1559
show_list() {
1560
    suffix=_$1
1561
    shift
1562
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1563
    exit 0
1564
}
1565

    
1566
for opt do
1567
    optval="${opt#*=}"
1568
    case "$opt" in
1569
    --extra-ldflags=*) add_ldflags $optval
1570
    ;;
1571
    --extra-libs=*) add_extralibs $optval
1572
    ;;
1573
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1574
    ;;
1575
    --enable-debug=*) debuglevel="$optval"
1576
    ;;
1577
    --disable-everything)
1578
    map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1579
    ;;
1580
    --enable-*=*|--disable-*=*)
1581
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1582
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1583
    eval list=\$$(toupper $thing)_LIST
1584
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1585
    $action $(filter "$name" $list)
1586
    ;;
1587
    --enable-?*|--disable-?*)
1588
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1589
    if is_in $option $COMPONENT_LIST; then
1590
        test $action = disable && action=unset
1591
        eval $action \$$(toupper ${option%s})_LIST
1592
    elif is_in $option $CMDLINE_SELECT; then
1593
        $action $option
1594
    else
1595
        die_unknown $opt
1596
    fi
1597
    ;;
1598
    --list-*)
1599
        NAME="${opt#--list-}"
1600
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1601
        NAME=${NAME%s}
1602
        eval show_list $NAME \$$(toupper $NAME)_LIST
1603
    ;;
1604
    --help|-h) show_help
1605
    ;;
1606
    *)
1607
    optname="${opt%%=*}"
1608
    optname="${optname#--}"
1609
    optname=$(echo "$optname" | sed 's/-/_/g')
1610
    if is_in $optname $CMDLINE_SET; then
1611
        eval $optname='$optval'
1612
    elif is_in $optname $CMDLINE_APPEND; then
1613
        append $optname "$optval"
1614
    else
1615
         die_unknown $opt
1616
    fi
1617
    ;;
1618
    esac
1619
done
1620

    
1621
disabled logging && logfile=/dev/null
1622

    
1623
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1624
set >> $logfile
1625

    
1626
test -n "$cross_prefix" && enable cross_compile
1627

    
1628
if enabled cross_compile; then
1629
    test -n "$arch" && test -n "$target_os" ||
1630
        die "Must specify target arch and OS when cross-compiling"
1631
fi
1632

    
1633
set_default arch target_os
1634

    
1635
ar_default="${cross_prefix}${ar_default}"
1636
cc_default="${cross_prefix}${cc_default}"
1637
nm_default="${cross_prefix}${nm_default}"
1638
ranlib="${cross_prefix}${ranlib}"
1639
strip_default="${cross_prefix}${strip_default}"
1640

    
1641
sysinclude_default="${sysroot}/usr/include"
1642

    
1643
set_default cc nm strip sysinclude
1644
enabled cross_compile || host_cc_default=$cc
1645
set_default host_cc
1646

    
1647
exesuf() {
1648
    case $1 in
1649
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1650
    esac
1651
}
1652

    
1653
EXESUF=$(exesuf $target_os)
1654
HOSTEXESUF=$(exesuf $host_os)
1655

    
1656
# set temporary file name
1657
: ${TMPDIR:=$TEMPDIR}
1658
: ${TMPDIR:=$TMP}
1659
: ${TMPDIR:=/tmp}
1660

    
1661
if ! check_cmd type mktemp; then
1662
    # simple replacement for missing mktemp
1663
    # NOT SAFE FOR GENERAL USE
1664
    mktemp(){
1665
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1666
    }
1667
fi
1668

    
1669
tmpfile(){
1670
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1671
        (set -C; exec > $tmp) 2>/dev/null ||
1672
        die "Unable to create temporary file in $TMPDIR."
1673
    append TMPFILES $tmp
1674
    eval $1=$tmp
1675
}
1676

    
1677
trap 'rm -f -- $TMPFILES' EXIT
1678
trap exit HUP INT TERM
1679

    
1680
tmpfile TMPC  .c
1681
tmpfile TMPE  $EXESUF
1682
tmpfile TMPH  .h
1683
tmpfile TMPO  .o
1684
tmpfile TMPS  .S
1685
tmpfile TMPV  .ver
1686
tmpfile TMPSH .sh
1687

    
1688
unset -f mktemp
1689

    
1690
# make sure we can execute files in $TMPDIR
1691
cat > $TMPSH 2>> $logfile <<EOF
1692
#! /bin/sh
1693
EOF
1694
chmod +x $TMPSH >> $logfile 2>&1
1695
if ! $TMPSH >> $logfile 2>&1; then
1696
    cat <<EOF
1697
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1698
variable to another directory and make sure that it is not mounted noexec.
1699
EOF
1700
    die "Sanity test failed."
1701
fi
1702

    
1703
filter_cflags=echo
1704
filter_cppflags=echo
1705
filter_asflags=echo
1706

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

    
1842
test -n "$cc_type" && enable $cc_type ||
1843
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1844

    
1845
: ${as_default:=$cc}
1846
: ${dep_cc_default:=$cc}
1847
: ${ld_default:=$cc}
1848
set_default ar as dep_cc ld
1849

    
1850
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1851
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1852

    
1853
add_cflags $extra_cflags
1854
add_asflags $extra_cflags
1855

    
1856
if test -n "$sysroot"; then
1857
    case "$cc_type" in
1858
        gcc)
1859
            add_cppflags --sysroot="$sysroot"
1860
            add_ldflags --sysroot="$sysroot"
1861
        ;;
1862
        tms470)
1863
            add_cppflags -I"$sysinclude"
1864
            add_ldflags  --sysroot="$sysroot"
1865
        ;;
1866
        clang)
1867
            add_cppflags -isysroot "$sysroot"
1868
            add_ldflags -isysroot "$sysroot"
1869
        ;;
1870
    esac
1871
fi
1872

    
1873
if test "$cpu" = host; then
1874
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1875

    
1876
    case "$cc_type" in
1877
        gcc)
1878
            check_native(){
1879
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1880
                sed -n "/$1=/{
1881
                            s/.*$1=\\([^ ]*\\).*/\\1/
1882
                            p
1883
                            q
1884
                        }" $TMPE
1885
            }
1886
            cpu=$(check_native -march || check_native -mcpu)
1887
        ;;
1888
    esac
1889

    
1890
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1891
fi
1892

    
1893
# Deal with common $arch aliases
1894
case "$arch" in
1895
    arm*)
1896
        arch="arm"
1897
    ;;
1898
    mips|mipsel|IP*)
1899
        arch="mips"
1900
    ;;
1901
    mips64*)
1902
        arch="mips"
1903
        subarch="mips64"
1904
    ;;
1905
    parisc|hppa)
1906
        arch="parisc"
1907
    ;;
1908
    parisc64|hppa64)
1909
        arch="parisc"
1910
        subarch="parisc64"
1911
    ;;
1912
    "Power Macintosh"|ppc|powerpc)
1913
        arch="ppc"
1914
    ;;
1915
    ppc64|powerpc64)
1916
        arch="ppc"
1917
        subarch="ppc64"
1918
    ;;
1919
    s390|s390x)
1920
        arch="s390"
1921
    ;;
1922
    sh4|sh)
1923
        arch="sh4"
1924
    ;;
1925
    sun4u|sparc64)
1926
        arch="sparc"
1927
        subarch="sparc64"
1928
    ;;
1929
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1930
        arch="x86"
1931
    ;;
1932
esac
1933

    
1934
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1935
enable $arch
1936

    
1937
# Add processor-specific flags
1938
if test "$cpu" = generic; then
1939
    : do nothing
1940
elif enabled ppc; then
1941

    
1942
    case $(tolower $cpu) in
1943
        601|ppc601|powerpc601)
1944
            cpuflags="-mcpu=601"
1945
            disable altivec
1946
        ;;
1947
        603*|ppc603*|powerpc603*)
1948
            cpuflags="-mcpu=603"
1949
            disable altivec
1950
        ;;
1951
        604*|ppc604*|powerpc604*)
1952
            cpuflags="-mcpu=604"
1953
            disable altivec
1954
        ;;
1955
        g3|75*|ppc75*|powerpc75*)
1956
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1957
            disable altivec
1958
        ;;
1959
        g4|745*|ppc745*|powerpc745*)
1960
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1961
        ;;
1962
        74*|ppc74*|powerpc74*)
1963
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1964
        ;;
1965
        g5|970|ppc970|powerpc970|power4*)
1966
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1967
        ;;
1968
        cell)
1969
            cpuflags="-mcpu=cell"
1970
            enable ldbrx
1971
        ;;
1972
        e500v2)
1973
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1974
            disable altivec
1975
        ;;
1976
        e500)
1977
            cpuflags="-mcpu=8540 -mhard-float"
1978
            disable altivec
1979
        ;;
1980
    esac
1981

    
1982
elif enabled x86; then
1983

    
1984
    case $cpu in
1985
        i[345]86|pentium)
1986
            cpuflags="-march=$cpu"
1987
            disable mmx
1988
        ;;
1989
        # targets that do NOT support conditional mov (cmov)
1990
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1991
            cpuflags="-march=$cpu"
1992
            disable cmov
1993
        ;;
1994
        # targets that do support conditional mov (cmov)
1995
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
1996
            cpuflags="-march=$cpu"
1997
            enable cmov
1998
            enable fast_cmov
1999
        ;;
2000
        # targets that do support conditional mov but on which it's slow
2001
        pentium4|pentium4m|prescott|nocona)
2002
            cpuflags="-march=$cpu"
2003
            enable cmov
2004
            disable fast_cmov
2005
        ;;
2006
    esac
2007

    
2008
elif enabled sparc; then
2009

    
2010
    case $cpu in
2011
        niagara)
2012
            cpuflags="-mcpu=$cpu"
2013
            disable vis
2014
        ;;
2015
        sparc64)
2016
            cpuflags="-mcpu=v9"
2017
        ;;
2018
    esac
2019

    
2020
elif enabled arm; then
2021

    
2022
    case $cpu in
2023
        armv*)
2024
            cpuflags="-march=$cpu"
2025
        ;;
2026
        *)
2027
            cpuflags="-mcpu=$cpu"
2028
        ;;
2029
    esac
2030

    
2031
elif enabled alpha; then
2032

    
2033
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2034

    
2035
elif enabled bfin; then
2036

    
2037
    cpuflags="-mcpu=$cpu"
2038

    
2039
elif enabled mips; then
2040

    
2041
    cpuflags="-march=$cpu"
2042

    
2043
elif enabled avr32; then
2044

    
2045
    case $cpu in
2046
        ap7[02]0[0-2])
2047
            subarch="avr32_ap"
2048
            cpuflags="-mpart=$cpu"
2049
        ;;
2050
        ap)
2051
            subarch="avr32_ap"
2052
            cpuflags="-march=$cpu"
2053
        ;;
2054
        uc3[ab]*)
2055
            subarch="avr32_uc"
2056
            cpuflags="-mcpu=$cpu"
2057
        ;;
2058
        uc)
2059
            subarch="avr32_uc"
2060
            cpuflags="-march=$cpu"
2061
        ;;
2062
    esac
2063

    
2064
fi
2065

    
2066
add_cflags $cpuflags
2067
add_asflags $cpuflags
2068

    
2069
# compiler sanity check
2070
check_exec <<EOF
2071
int main(void){ return 0; }
2072
EOF
2073
if test "$?" != 0; then
2074
    echo "$cc is unable to create an executable file."
2075
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2076
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2077
        echo "Only do this if you know what cross compiling means."
2078
    fi
2079
    die "C compiler test failed."
2080
fi
2081

    
2082
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2083
check_cflags -std=c99
2084
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2085
#include <stdlib.h>
2086
EOF
2087
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2088
#include <stdlib.h>
2089
EOF
2090

    
2091
check_host_cflags -std=c99
2092

    
2093
case "$arch" in
2094
    alpha|ia64|mips|parisc|sparc)
2095
        spic=$shared
2096
    ;;
2097
    x86)
2098
        subarch="x86_32"
2099
        check_cc <<EOF && subarch="x86_64"
2100
        int test[(int)sizeof(char*) - 7];
2101
EOF
2102
        if test "$subarch" = "x86_64"; then
2103
            spic=$shared
2104
        fi
2105
    ;;
2106
esac
2107

    
2108
enable $subarch
2109
enabled spic && enable pic
2110

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

    
2260
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2261

    
2262
set_default $PATHS_LIST
2263

    
2264
add_extralibs $osextralibs
2265

    
2266
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2267
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2268

    
2269
# we need to build at least one lib type
2270
if ! enabled_any static shared; then
2271
    cat <<EOF
2272
At least one library type must be built.
2273
Specify --enable-static to build the static libraries or --enable-shared to
2274
build the shared libraries as well. To only build the shared libraries specify
2275
--disable-static in addition to --enable-shared.
2276
EOF
2277
    exit 1;
2278
fi
2279

    
2280
disabled static && LIBNAME=""
2281

    
2282
die_license_disabled() {
2283
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2284
}
2285

    
2286
die_license_disabled gpl libx264
2287
die_license_disabled gpl libxvid
2288
die_license_disabled gpl postproc
2289
die_license_disabled gpl x11grab
2290

    
2291
die_license_disabled nonfree libfaac
2292

    
2293
die_license_disabled version3 libopencore_amrnb
2294
die_license_disabled version3 libopencore_amrwb
2295

    
2296
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2297

    
2298
check_deps $ARCH_EXT_LIST
2299

    
2300
disabled optimizations || check_cflags -fomit-frame-pointer
2301

    
2302
enable_pic() {
2303
    enable pic
2304
    add_cppflags -DPIC
2305
    add_cflags   -fPIC
2306
    add_asflags  -fPIC
2307
}
2308

    
2309
enabled pic && enable_pic
2310

    
2311
check_cc <<EOF || die "Symbol mangling check failed."
2312
int ff_extern;
2313
EOF
2314
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2315
extern_prefix=${sym%%ff_extern*}
2316

    
2317
check_cc <<EOF && enable inline_asm
2318
void foo(void) { __asm__ volatile ("" ::); }
2319
EOF
2320

    
2321
_restrict=
2322
for restrict_keyword in restrict __restrict__ __restrict; do
2323
    check_cc <<EOF && _restrict=$restrict_keyword && break
2324
void foo(char * $restrict_keyword p);
2325
EOF
2326
done
2327

    
2328
check_cc <<EOF && enable attribute_packed
2329
struct { int x; } __attribute__((packed)) x;
2330
EOF
2331

    
2332
check_cc <<EOF && enable attribute_may_alias
2333
union { int x; } __attribute__((may_alias)) x;
2334
EOF
2335

    
2336
check_cc <<EOF || die "endian test failed"
2337
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2338
EOF
2339
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2340

    
2341
if enabled alpha; then
2342

    
2343
    check_cflags -mieee
2344

    
2345
elif enabled arm; then
2346

    
2347
    check_cflags -marm
2348

    
2349
    check_ld <<EOF && enable vfp_args
2350
__asm__ (".eabi_attribute 28, 1");
2351
int main(void) { return 0; }
2352
EOF
2353

    
2354
    # We have to check if pld is a nop and disable it.
2355
    check_asm pld '"pld [r0]"'
2356

    
2357
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2358
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2359
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2360
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2361
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2362
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2363

    
2364
    enabled_all armv6t2 shared !pic && enable_pic
2365

    
2366
elif enabled mips; then
2367

    
2368
    check_asm loongson '"dmult.g $1, $2, $3"'
2369
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2370

    
2371
elif enabled ppc; then
2372

    
2373
    enable local_aligned_8 local_aligned_16
2374

    
2375
    check_asm dcbzl     '"dcbzl 0, 1"'
2376
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2377
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2378

    
2379
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2380
    if enabled altivec; then
2381
        check_cflags -maltivec -mabi=altivec &&
2382
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2383
        check_cflags -faltivec
2384

    
2385
        # check if our compiler supports Motorola AltiVec C API
2386
        check_cc <<EOF || disable altivec
2387
$inc_altivec_h
2388
int main(void) {
2389
    vector signed int v1, v2, v3;
2390
    v1 = vec_add(v2,v3);
2391
    return 0;
2392
}
2393
EOF
2394

    
2395
        # check if our compiler supports braces for vector declarations
2396
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2397
$inc_altivec_h
2398
int main (void) { (vector int) {1}; return 0; }
2399
EOF
2400
    fi
2401

    
2402
elif enabled sparc; then
2403

    
2404
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2405
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2406

    
2407
elif enabled x86; then
2408

    
2409
    enable local_aligned_8 local_aligned_16
2410

    
2411
    # check whether EBP is available on x86
2412
    # As 'i' is stored on the stack, this program will crash
2413
    # if the base pointer is used to access it because the
2414
    # base pointer is cleared in the inline assembly code.
2415
    check_exec_crash <<EOF && enable ebp_available
2416
    volatile int i=0;
2417
    __asm__ volatile (
2418
        "xorl %%ebp, %%ebp"
2419
    ::: "%ebp");
2420
    return i;
2421
EOF
2422

    
2423
    # check whether EBX is available on x86
2424
    check_asm ebx_available '""::"b"(0)' &&
2425
        check_asm ebx_available '"":::"%ebx"'
2426

    
2427
    # check whether more than 10 operands are supported
2428
    check_cc <<EOF && enable ten_operands
2429
int main(void) {
2430
    int x=0;
2431
    __asm__ volatile(
2432
        ""
2433
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2434
    );
2435
    return 0;
2436
}
2437
EOF
2438

    
2439
    # check whether binutils is new enough to compile SSSE3/MMX2
2440
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2441
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2442

    
2443
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2444

    
2445
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2446
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2447
    enabled     pic           && append YASMFLAGS "-DPIC"
2448
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2449
    case "$objformat" in
2450
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2451
    esac
2452
    if ! disabled yasm; then
2453
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2454
            warn "yasm not found, performance will suffer"
2455
    fi
2456

    
2457
    case "$cpu" in
2458
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2459
            disable fast_clz
2460
        ;;
2461
    esac
2462

    
2463
fi
2464

    
2465
if check_func dlopen; then
2466
    ldl=
2467
elif check_func dlopen -ldl; then
2468
    ldl=-ldl
2469
fi
2470

    
2471
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2472
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2473

    
2474
check_func  fork
2475
check_func  getaddrinfo $network_extralibs
2476
check_func  gethrtime
2477
check_func  getrusage
2478
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2479
check_func  inet_aton $network_extralibs
2480
check_func  isatty
2481
check_func  ${malloc_prefix}memalign            && enable memalign
2482
check_func  mkstemp
2483
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2484
check_func  setrlimit
2485
check_func  strerror_r
2486
check_func_headers io.h setmode
2487
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2488
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2489
check_func_headers windows.h GetProcessTimes
2490
check_func_headers windows.h VirtualAlloc
2491

    
2492
check_header conio.h
2493
check_header dlfcn.h
2494
check_header dxva2api.h
2495
check_header malloc.h
2496
check_header poll.h
2497
check_header sys/mman.h
2498
check_header sys/resource.h
2499
check_header sys/select.h
2500
check_header termios.h
2501
check_header vdpau/vdpau.h
2502
check_header vdpau/vdpau_x11.h
2503
check_header X11/extensions/XvMClib.h
2504

    
2505
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2506

    
2507
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2508
     enabled_any $need_memalign ; then
2509
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2510
fi
2511

    
2512
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2513
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2514

    
2515
# check for some common methods of building with pthread support
2516
# do this before the optional library checks as some of them require pthreads
2517
if ! disabled pthreads && ! enabled w32threads; then
2518
    enable pthreads
2519
    if check_func pthread_create; then
2520
        :
2521
    elif check_func pthread_create -pthread; then
2522
        add_cflags -pthread
2523
        add_extralibs -pthread
2524
    elif check_func pthread_create -pthreads; then
2525
        add_cflags -pthreads
2526
        add_extralibs -pthreads
2527
    elif check_func pthread_create -lpthreadGC2; then
2528
        add_extralibs -lpthreadGC2
2529
    elif ! check_lib pthread.h pthread_create -lpthread; then
2530
        disable pthreads
2531
    fi
2532
fi
2533

    
2534
for thread in $THREADS_LIST; do
2535
    if enabled $thread; then
2536
        test -n "$thread_type" &&
2537
            die "ERROR: Only one thread type must be selected." ||
2538
            thread_type="$thread"
2539
    fi
2540
done
2541

    
2542
check_lib math.h sin -lm
2543
disabled vaapi || check_lib va/va.h vaInitialize -lva
2544

    
2545
check_mathfunc exp2
2546
check_mathfunc exp2f
2547
check_mathfunc llrint
2548
check_mathfunc llrintf
2549
check_mathfunc log2
2550
check_mathfunc log2f
2551
check_mathfunc lrint
2552
check_mathfunc lrintf
2553
check_mathfunc round
2554
check_mathfunc roundf
2555
check_mathfunc truncf
2556

    
2557
# these are off by default, so fail if requested and not available
2558
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2559
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2560
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2561
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2562
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2563
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2564
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2565
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2566
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2567
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2568
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2569
enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
2570
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2571
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2572
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2573
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2574
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2575
enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2576
                      require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2577
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2578
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2579
                        die "ERROR: libx264 version must be >= 0.98."; }
2580
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2581
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2582

    
2583
# libdc1394 check
2584
if enabled libdc1394; then
2585
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2586
        enable libdc1394_2; } ||
2587
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2588
        enable libdc1394_1; } ||
2589
    die "ERROR: No version of libdc1394 found "
2590
fi
2591

    
2592
SDL_CONFIG="${cross_prefix}sdl-config"
2593
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2594
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2595
    sdl_libs=$("${SDL_CONFIG}" --libs)
2596
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2597
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2598
    enable sdl &&
2599
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2600
fi
2601

    
2602
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2603

    
2604
if enabled network; then
2605
    check_type "sys/types.h sys/socket.h" socklen_t
2606
    check_type netdb.h "struct addrinfo"
2607
    check_type netinet/in.h "struct ipv6_mreq"
2608
    check_type netinet/in.h "struct sockaddr_in6"
2609
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2610
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2611
    # Prefer arpa/inet.h over winsock2
2612
    if check_header arpa/inet.h ; then
2613
        check_func closesocket
2614
    elif check_header winsock2.h ; then
2615
        check_func_headers winsock2.h closesocket -lws2 && \
2616
            network_extralibs="-lws2" || \
2617
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2618
            network_extralibs="-lws2_32"; }
2619
        check_type ws2tcpip.h socklen_t
2620
        check_type ws2tcpip.h "struct addrinfo"
2621
        check_type ws2tcpip.h "struct ipv6_mreq"
2622
        check_type ws2tcpip.h "struct sockaddr_in6"
2623
        check_type ws2tcpip.h "struct sockaddr_storage"
2624
        check_struct winsock2.h "struct sockaddr" sa_len
2625
    else
2626
        disable network
2627
    fi
2628
fi
2629

    
2630
check_header linux/videodev.h
2631
check_header linux/videodev2.h
2632
check_header sys/videoio.h
2633

    
2634
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2635

    
2636
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2637
{ check_header dev/bktr/ioctl_meteor.h &&
2638
  check_header dev/bktr/ioctl_bt848.h; } ||
2639
{ check_header machine/ioctl_meteor.h &&
2640
  check_header machine/ioctl_bt848.h; } ||
2641
{ check_header dev/video/meteor/ioctl_meteor.h &&
2642
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2643
check_header dev/ic/bt8xx.h
2644

    
2645
check_header sys/soundcard.h
2646
check_header soundcard.h
2647

    
2648
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2649

    
2650
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2651

    
2652
enabled x11grab                         &&
2653
check_header X11/Xlib.h                 &&
2654
check_header X11/extensions/XShm.h      &&
2655
check_header X11/extensions/Xfixes.h    &&
2656
check_func XOpenDisplay -lX11           &&
2657
check_func XShmCreateImage -lX11 -lXext &&
2658
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2659

    
2660
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2661
check_cpp_condition \
2662
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2663
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2664
      disable vdpau; }
2665
fi
2666

    
2667
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2668

    
2669
# add some useful compiler flags if supported
2670
check_cflags -Wdeclaration-after-statement
2671
check_cflags -Wall
2672
check_cflags -Wno-switch
2673
check_cflags -Wdisabled-optimization
2674
check_cflags -Wpointer-arith
2675
check_cflags -Wredundant-decls
2676
check_cflags -Wno-pointer-sign
2677
check_cflags -Wcast-qual
2678
check_cflags -Wwrite-strings
2679
check_cflags -Wtype-limits
2680
check_cflags -Wundef
2681
check_cflags -Wmissing-prototypes
2682
enabled extra_warnings && check_cflags -Winline
2683

    
2684
# add some linker flags
2685
check_ldflags -Wl,--warn-common
2686
check_ldflags -Wl,--as-needed
2687
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'
2688
check_ldflags -Wl,-Bsymbolic
2689

    
2690
echo "X{};" > $TMPV
2691
if test_ldflags -Wl,--version-script,$TMPV; then
2692
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2693
    check_cc <<EOF && enable symver_asm_label
2694
void ff_foo(void) __asm__ ("av_foo@VERSION");
2695
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2696
EOF
2697
    check_cc <<EOF && enable symver_gnu_asm
2698
__asm__(".symver ff_foo,av_foo@VERSION");
2699
void ff_foo(void) {}
2700
EOF
2701
fi
2702

    
2703
if enabled small; then
2704
    add_cflags $size_cflags
2705
    optimizations="small"
2706
elif enabled optimizations; then
2707
    add_cflags $speed_cflags
2708
else
2709
    add_cflags $noopt_cflags
2710
fi
2711
check_cflags -fno-math-errno
2712
check_cflags -fno-signed-zeros
2713

    
2714
if enabled icc; then
2715
    # Just warnings, no remarks
2716
    check_cflags -w1
2717
    # -wd: Disable following warnings
2718
    # 144, 167, 556: -Wno-pointer-sign
2719
    # 10006: ignoring unknown option -fno-signed-zeros
2720
    # 10156: ignoring option '-W'; no argument required
2721
    check_cflags -wd144,167,556,10006,10156
2722
    # 11030: Warning unknown option --as-needed
2723
    # 10156: ignoring option '-export'; no argument required
2724
    check_ldflags -wd10156,11030
2725
    # Allow to compile with optimizations
2726
    check_ldflags -march=$cpu
2727
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2728
    enable ebp_available
2729
elif enabled ccc; then
2730
    # disable some annoying warnings
2731
    add_cflags -msg_disable cvtu32to64
2732
    add_cflags -msg_disable embedcomment
2733
    add_cflags -msg_disable needconstext
2734
    add_cflags -msg_disable nomainieee
2735
    add_cflags -msg_disable ptrmismatch1
2736
    add_cflags -msg_disable unreachcode
2737
elif enabled gcc; then
2738
    check_cflags -fno-tree-vectorize
2739
    check_cflags -Werror=implicit
2740
    check_cflags -Werror=missing-prototypes
2741
elif enabled clang; then
2742
    check_cflags -Qunused-arguments
2743
elif enabled armcc; then
2744
    # 2523: use of inline assembler is deprecated
2745
    add_cflags -Wrvct,--diag_suppress=2523
2746
    add_cflags -Wrvct,--diag_suppress=1207
2747
elif enabled tms470; then
2748
    add_cflags -pds=824 -pds=837
2749
fi
2750

    
2751
if enabled gprof; then
2752
    add_cflags  -p
2753
    add_ldflags -p
2754
fi
2755

    
2756
enabled_any $THREADS_LIST      && enable threads
2757

    
2758
check_deps $CONFIG_LIST       \
2759
           $CONFIG_EXTRA      \
2760
           $HAVE_LIST         \
2761
           $DECODER_LIST      \
2762
           $ENCODER_LIST      \
2763
           $HWACCEL_LIST      \
2764
           $PARSER_LIST       \
2765
           $BSF_LIST          \
2766
           $DEMUXER_LIST      \
2767
           $MUXER_LIST        \
2768
           $FILTER_LIST       \
2769
           $INDEV_LIST        \
2770
           $OUTDEV_LIST       \
2771
           $PROTOCOL_LIST     \
2772

    
2773
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2774

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

    
2856
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2857
    echo "Enabled ${type}s:"
2858
    eval list=\$$(toupper $type)_LIST
2859
    for part in $list; do
2860
        enabled $part && echo ${part%_*}
2861
    done | sort | pr -3 -t
2862
    echo
2863
done
2864

    
2865
license="LGPL version 2.1 or later"
2866
if enabled nonfree; then
2867
    license="nonfree and unredistributable"
2868
elif enabled gplv3; then
2869
    license="GPL version 3 or later"
2870
elif enabled lgplv3; then
2871
    license="LGPL version 3 or later"
2872
elif enabled gpl; then
2873
    license="GPL version 2 or later"
2874
fi
2875

    
2876
echo "License: $license"
2877

    
2878
echo "Creating config.mak and config.h..."
2879

    
2880
# build tree in object directory if source path is different from current one
2881
if enabled source_path_used; then
2882
    DIRS="
2883
        doc
2884
        libavcodec
2885
        libavcodec/$arch
2886
        libavdevice
2887
        libavfilter
2888
        libavformat
2889
        libavutil
2890
        libavutil/$arch
2891
        libpostproc
2892
        libswscale
2893
        libswscale/$arch
2894
        tests
2895
        tools
2896
    "
2897
    FILES="
2898
        Makefile
2899
        common.mak
2900
        subdir.mak
2901
        doc/texi2pod.pl
2902
        libavcodec/Makefile
2903
        libavcodec/${arch}/Makefile
2904
        libavdevice/Makefile
2905
        libavfilter/Makefile
2906
        libavformat/Makefile
2907
        libavutil/Makefile
2908
        libpostproc/Makefile
2909
        libswscale/Makefile
2910
    "
2911
    map 'mkdir -p $v' $DIRS;
2912
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2913
fi
2914

    
2915
enabled stripping || strip="echo skipping strip"
2916

    
2917
cat > config.mak <<EOF
2918
# Automatically generated by configure - do not modify!
2919
ifndef FFMPEG_CONFIG_MAK
2920
FFMPEG_CONFIG_MAK=1
2921
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2922
prefix=$prefix
2923
LIBDIR=\$(DESTDIR)$libdir
2924
SHLIBDIR=\$(DESTDIR)$shlibdir
2925
INCDIR=\$(DESTDIR)$incdir
2926
BINDIR=\$(DESTDIR)$bindir
2927
DATADIR=\$(DESTDIR)$datadir
2928
MANDIR=\$(DESTDIR)$mandir
2929
SRC_PATH="$source_path"
2930
SRC_PATH_BARE=$source_path
2931
BUILD_ROOT="$PWD"
2932
ARCH=$arch
2933
CC=$cc
2934
AS=$as
2935
LD=$ld
2936
DEPCC=$dep_cc
2937
YASM=$yasmexe
2938
YASMDEP=$yasmexe
2939
AR=$ar
2940
RANLIB=$ranlib
2941
CP=cp -p
2942
LN_S=$ln_s
2943
STRIP=$strip
2944
CPPFLAGS=$CPPFLAGS
2945
CFLAGS=$CFLAGS
2946
ASFLAGS=$ASFLAGS
2947
CC_O=$CC_O
2948
LDFLAGS=$LDFLAGS
2949
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2950
SHFLAGS=$SHFLAGS
2951
YASMFLAGS=$YASMFLAGS
2952
BUILDSUF=$build_suffix
2953
FULLNAME=$FULLNAME
2954
LIBPREF=$LIBPREF
2955
LIBSUF=$LIBSUF
2956
LIBNAME=$LIBNAME
2957
SLIBPREF=$SLIBPREF
2958
SLIBSUF=$SLIBSUF
2959
EXESUF=$EXESUF
2960
EXTRA_VERSION=$extra_version
2961
DEPFLAGS=$DEPFLAGS
2962
CCDEP=$CCDEP
2963
ASDEP=$ASDEP
2964
CC_DEPFLAGS=$CC_DEPFLAGS
2965
AS_DEPFLAGS=$AS_DEPFLAGS
2966
HOSTCC=$host_cc
2967
HOSTCFLAGS=$host_cflags
2968
HOSTEXESUF=$HOSTEXESUF
2969
HOSTLDFLAGS=$host_ldflags
2970
HOSTLIBS=$host_libs
2971
TARGET_EXEC=$target_exec
2972
TARGET_PATH=$target_path
2973
SDL_LIBS=$sdl_libs
2974
SDL_CFLAGS=$sdl_cflags
2975
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2976
EXTRALIBS=$extralibs
2977
INSTALL=install
2978
LIBTARGET=${LIBTARGET}
2979
SLIBNAME=${SLIBNAME}
2980
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2981
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2982
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2983
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2984
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2985
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2986
SAMPLES=$samples
2987
EOF
2988

    
2989
get_version(){
2990
    name=$1
2991
    file=$source_path/$2
2992
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2993
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2994
    lcname=$(tolower $name)
2995
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2996
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2997
}
2998

    
2999
get_version LIBSWSCALE  libswscale/swscale.h
3000
get_version LIBPOSTPROC libpostproc/postprocess.h
3001
get_version LIBAVCODEC  libavcodec/avcodec.h
3002
get_version LIBAVDEVICE libavdevice/avdevice.h
3003
get_version LIBAVFORMAT libavformat/avformat.h
3004
get_version LIBAVUTIL   libavutil/avutil.h
3005
get_version LIBAVFILTER libavfilter/avfilter.h
3006

    
3007
cat > $TMPH <<EOF
3008
/* Automatically generated by configure - do not modify! */
3009
#ifndef FFMPEG_CONFIG_H
3010
#define FFMPEG_CONFIG_H
3011
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3012
#define FFMPEG_LICENSE "$(c_escape $license)"
3013
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3014
#define CC_TYPE "$cc_type"
3015
#define CC_VERSION $cc_version
3016
#define restrict $_restrict
3017
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3018
#define EXTERN_PREFIX "${extern_prefix}"
3019
#define EXTERN_ASM ${extern_prefix}
3020
EOF
3021

    
3022
test -n "$malloc_prefix" &&
3023
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3024

    
3025
if enabled small || disabled optimizations; then
3026
    echo "#undef  av_always_inline"  >> $TMPH
3027
    echo "#define av_always_inline"  >> $TMPH
3028
fi
3029

    
3030
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3031
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3032
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3033
                                      $CONFIG_EXTRA      \
3034
                                      $DECODER_LIST      \
3035
                                      $ENCODER_LIST      \
3036
                                      $HWACCEL_LIST      \
3037
                                      $PARSER_LIST       \
3038
                                      $BSF_LIST          \
3039
                                      $DEMUXER_LIST      \
3040
                                      $MUXER_LIST        \
3041
                                      $FILTER_LIST       \
3042
                                      $PROTOCOL_LIST     \
3043
                                      $INDEV_LIST        \
3044
                                      $OUTDEV_LIST       \
3045

    
3046
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3047
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3048

    
3049
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3050
cp_if_changed $TMPH config.h
3051

    
3052
cat > $TMPH <<EOF
3053
/* Generated by ffconf */
3054
#ifndef AVUTIL_AVCONFIG_H
3055
#define AVUTIL_AVCONFIG_H
3056
EOF
3057

    
3058
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3059

    
3060
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3061

    
3062
cp_if_changed $TMPH libavutil/avconfig.h
3063

    
3064
test -n "$WARNINGS" && printf "\n$WARNINGS"
3065

    
3066
# build pkg-config files
3067

    
3068
pkgconfig_generate(){
3069
name=$1
3070
shortname=${name#lib}${build_suffix}
3071
comment=$2
3072
version=$3
3073
libs=$4
3074
requires=$5
3075
cat <<EOF > $name/$name.pc
3076
prefix=$prefix
3077
exec_prefix=\${prefix}
3078
libdir=$libdir
3079
includedir=$incdir
3080

    
3081
Name: $name
3082
Description: $comment
3083
Version: $version
3084
Requires: $(enabled shared || echo $requires)
3085
Requires.private: $(enabled shared && echo $requires)
3086
Conflicts:
3087
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3088
Libs.private: $(enabled shared && echo $libs)
3089
Cflags: -I\${includedir}
3090
EOF
3091
cat <<EOF > $name/$name-uninstalled.pc
3092
prefix=
3093
exec_prefix=
3094
libdir=\${pcfiledir}
3095
includedir=${source_path}
3096

    
3097
Name: $name
3098
Description: $comment
3099
Version: $version
3100
Requires: $requires
3101
Conflicts:
3102
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3103
Cflags: -I\${includedir}
3104
EOF
3105
}
3106

    
3107
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3108
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3109
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3110
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3111
enabled avfilter &&
3112
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3113
enabled postproc &&
3114
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3115
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"