Statistics
| Branch: | Revision:

ffmpeg / configure @ 47b1860e

History | View | Annotate | Download (88.4 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
266
die(){
267
    echolog "$@"
268
    cat <<EOF
269

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

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

    
293
tolower(){
294
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
295
}
296

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

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

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

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

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

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

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

    
350
enable(){
351
    set_all yes $*
352
}
353

    
354
disable(){
355
    set_all no $*
356
}
357

    
358
enable_weak(){
359
    set_weak yes $*
360
}
361

    
362
disable_weak(){
363
    set_weak no $*
364
}
365

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

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

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

    
391
enable_deep(){
392
    do_enable_deep $*
393
    enable $*
394
}
395

    
396
enable_deep_weak(){
397
    do_enable_deep $*
398
    enable_weak $*
399
}
400

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

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

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

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

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

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

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

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

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

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

    
465
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
466
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
467
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
468

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

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

    
482
        disable ${cfg}_checking
483
    done
484
}
485

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

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

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

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

    
524
temp_cflags(){
525
    save_flags
526
    CFLAGS="$CFLAGS $*"
527
}
528

    
529
temp_ldflags(){
530
    save_flags
531
    LDFLAGS="$LDFLAGS $*"
532
}
533

    
534
temp_extralibs(){
535
    save_flags
536
    extralibs="$extralibs $*"
537
}
538

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

    
546
add_cppflags(){
547
    append CPPFLAGS $($filter_cppflags "$@")
548
}
549

    
550
add_cflags(){
551
    append CFLAGS $($filter_cflags "$@")
552
}
553

    
554
add_asflags(){
555
    append ASFLAGS $($filter_asflags "$@")
556
}
557

    
558
add_ldflags(){
559
    append LDFLAGS "$@"
560
}
561

    
562
add_extralibs(){
563
    append extralibs "$@"
564
}
565

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

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

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

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

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

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

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

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

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

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

    
645
check_ldflags(){
646
    log check_ldflags "$@"
647
    test_ldflags "$@" && add_ldflags "$@"
648
}
649

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

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

    
672
check_mathfunc(){
673
    log check_mathfunc "$@"
674
    func=$1
675
    shift
676
    disable $func
677
    check_ld "$@" <<EOF && enable $func
678
#include <math.h>
679
float foo(float f) { return $func(f); }
680
int main(void){ return 0; }
681
EOF
682
}
683

    
684
check_func_headers(){
685
    log check_func_headers "$@"
686
    headers=$1
687
    func=$2
688
    shift 2
689
    disable $func
690
    incs=""
691
    for hdr in $headers; do
692
        incs="$incs
693
#include <$hdr>"
694
    done
695
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
696
$incs
697
int main(int argc, char **argv){
698
    return (long) $func;
699
}
700
EOF
701
}
702

    
703
check_cpp_condition(){
704
    log check_cpp_condition "$@"
705
    header=$1
706
    condition=$2
707
    shift 2
708
    check_cpp $($filter_cppflags "$@") <<EOF
709
#include <$header>
710
#if !($condition)
711
#error "unsatisfied condition: $condition"
712
#endif
713
EOF
714
}
715

    
716
check_lib(){
717
    log check_lib "$@"
718
    header="$1"
719
    func="$2"
720
    shift 2
721
    temp_extralibs "$@"
722
    check_header $header && check_func $func && add_extralibs "$@"
723
    err=$?
724
    restore_flags
725
    return $err
726
}
727

    
728
check_lib2(){
729
    log check_lib2 "$@"
730
    headers="$1"
731
    func="$2"
732
    shift 2
733
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
734
}
735

    
736
check_exec(){
737
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
738
}
739

    
740
check_exec_crash(){
741
    code=$(cat)
742

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

    
749
    (check_exec "$@") >> $logfile 2>&1 <<EOF
750
#include <signal.h>
751
static void sighandler(int sig){
752
    raise(SIGTERM);
753
}
754
int main(void){
755
    signal(SIGILL, sighandler);
756
    signal(SIGFPE, sighandler);
757
    signal(SIGSEGV, sighandler);
758
#ifdef SIGBUS
759
    signal(SIGBUS, sighandler);
760
#endif
761
    { $code }
762
}
763
EOF
764
}
765

    
766
check_type(){
767
    log check_type "$@"
768
    headers=$1
769
    type=$2
770
    shift 2
771
    disable_safe "$type"
772
    incs=""
773
    for hdr in $headers; do
774
        incs="$incs
775
#include <$hdr>"
776
    done
777
    check_cc "$@" <<EOF && enable_safe "$type"
778
$incs
779
$type v;
780
EOF
781
}
782

    
783
check_struct(){
784
    log check_type "$@"
785
    headers=$1
786
    struct=$2
787
    member=$3
788
    shift 3
789
    disable_safe "${struct}_${member}"
790
    incs=""
791
    for hdr in $headers; do
792
        incs="$incs
793
#include <$hdr>"
794
    done
795
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
796
$incs
797
const void *p = &(($struct *)0)->$member;
798
EOF
799
}
800

    
801
require(){
802
    name="$1"
803
    header="$2"
804
    func="$3"
805
    shift 3
806
    check_lib $header $func "$@" || die "ERROR: $name not found"
807
}
808

    
809
require2(){
810
    name="$1"
811
    headers="$2"
812
    func="$3"
813
    shift 3
814
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
815
}
816

    
817
check_foo_config(){
818
    cfg=$1
819
    pkg=$2
820
    header=$3
821
    func=$4
822
    shift 4
823
    disable $cfg
824
    check_cmd ${pkg}-config --version
825
    err=$?
826
    if test "$err" = 0; then
827
        temp_cflags $(${pkg}-config --cflags)
828
        temp_extralibs $(${pkg}-config --libs)
829
        check_lib "$@" $header $func && enable $cfg
830
    fi
831
    return $err
832
}
833

    
834
check_host_cc(){
835
    log check_host_cc "$@"
836
    cat > $TMPC
837
    log_file $TMPC
838
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
839
}
840

    
841
check_host_cflags(){
842
    log check_host_cflags "$@"
843
    check_host_cc "$@" <<EOF && append host_cflags "$@"
844
int x;
845
EOF
846
}
847

    
848
apply(){
849
    file=$1
850
    shift
851
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
852
}
853

    
854
cp_if_changed(){
855
    cmp -s "$1" "$2" &&
856
        echo "$2 is unchanged" ||
857
        cp -f "$1" "$2"
858
}
859

    
860
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
861
# system-dependent things.
862

    
863
COMPONENT_LIST="
864
    bsfs
865
    decoders
866
    demuxers
867
    encoders
868
    filters
869
    hwaccels
870
    indevs
871
    muxers
872
    outdevs
873
    parsers
874
    protocols
875
"
876

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

    
945
THREADS_LIST='
946
    beosthreads
947
    os2threads
948
    pthreads
949
    w32threads
950
'
951

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

    
976
ARCH_EXT_LIST='
977
    altivec
978
    amd3dnow
979
    amd3dnowext
980
    armv5te
981
    armv6
982
    armv6t2
983
    armvfp
984
    iwmmxt
985
    mmi
986
    mmx
987
    mmx2
988
    neon
989
    ppc4xx
990
    sse
991
    ssse3
992
    vis
993
'
994

    
995
HAVE_LIST_PUB='
996
    bigendian
997
'
998

    
999
HAVE_LIST="
1000
    $ARCH_EXT_LIST
1001
    $HAVE_LIST_PUB
1002
    $THREADS_LIST
1003
    alsa_asoundlib_h
1004
    altivec_h
1005
    arpa_inet_h
1006
    attribute_may_alias
1007
    attribute_packed
1008
    bswap
1009
    closesocket
1010
    cmov
1011
    conio_h
1012
    dcbzl
1013
    dev_bktr_ioctl_bt848_h
1014
    dev_bktr_ioctl_meteor_h
1015
    dev_ic_bt8xx_h
1016
    dev_video_meteor_ioctl_meteor_h
1017
    dev_video_bktr_ioctl_bt848_h
1018
    dlfcn_h
1019
    dlopen
1020
    dos_paths
1021
    ebp_available
1022
    ebx_available
1023
    exp2
1024
    exp2f
1025
    fast_64bit
1026
    fast_clz
1027
    fast_cmov
1028
    fast_unaligned
1029
    fork
1030
    getaddrinfo
1031
    gethrtime
1032
    GetProcessMemoryInfo
1033
    GetProcessTimes
1034
    getrusage
1035
    struct_rusage_ru_maxrss
1036
    inet_aton
1037
    inline_asm
1038
    isatty
1039
    ldbrx
1040
    libdc1394_1
1041
    libdc1394_2
1042
    llrint
1043
    local_aligned_16
1044
    local_aligned_8
1045
    log2
1046
    log2f
1047
    loongson
1048
    lrint
1049
    lrintf
1050
    lzo1x_999_compress
1051
    machine_ioctl_bt848_h
1052
    machine_ioctl_meteor_h
1053
    malloc_h
1054
    memalign
1055
    mkstemp
1056
    pld
1057
    posix_memalign
1058
    round
1059
    roundf
1060
    sdl
1061
    sdl_video_size
1062
    setmode
1063
    socklen_t
1064
    soundcard_h
1065
    poll_h
1066
    setrlimit
1067
    struct_addrinfo
1068
    struct_ipv6_mreq
1069
    struct_sockaddr_in6
1070
    struct_sockaddr_sa_len
1071
    struct_sockaddr_storage
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
    arch
1122
    as
1123
    build_suffix
1124
    cc
1125
    cpu
1126
    cross_prefix
1127
    dep_cc
1128
    extra_version
1129
    host_cc
1130
    host_cflags
1131
    host_ldflags
1132
    host_libs
1133
    host_os
1134
    ld
1135
    logfile
1136
    malloc_prefix
1137
    nm
1138
    source_path
1139
    strip
1140
    sysinclude
1141
    sysroot
1142
    target_exec
1143
    target_os
1144
    target_path
1145
"
1146

    
1147
CMDLINE_APPEND="
1148
    extra_cflags
1149
"
1150

    
1151
# code dependency declarations
1152

    
1153
# architecture extensions
1154

    
1155
armv5te_deps="arm"
1156
armv6_deps="arm"
1157
armv6t2_deps="arm"
1158
armvfp_deps="arm"
1159
iwmmxt_deps="arm"
1160
neon_deps="arm"
1161

    
1162
mmi_deps="mips"
1163

    
1164
altivec_deps="ppc"
1165
ppc4xx_deps="ppc"
1166

    
1167
vis_deps="sparc"
1168

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

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

    
1181
need_memalign="altivec neon sse"
1182
inline_asm_deps="!tms470"
1183

    
1184
# subsystems
1185
mdct_select="fft"
1186
rdft_select="fft"
1187

    
1188
# decoders / encoders / hardware accelerators
1189
aac_decoder_select="mdct rdft aac_parser"
1190
aac_encoder_select="mdct"
1191
ac3_decoder_select="mdct ac3_parser"
1192
alac_encoder_select="lpc"
1193
amrnb_decoder_select="lsp"
1194
atrac1_decoder_select="mdct"
1195
atrac3_decoder_select="mdct"
1196
binkaudio_dct_decoder_select="mdct rdft dct"
1197
binkaudio_rdft_decoder_select="mdct rdft"
1198
cavs_decoder_select="golomb"
1199
cook_decoder_select="mdct"
1200
cscd_decoder_suggest="zlib"
1201
dca_decoder_select="mdct"
1202
dnxhd_encoder_select="aandct"
1203
dxa_decoder_select="zlib"
1204
eac3_decoder_select="ac3_decoder"
1205
eamad_decoder_select="aandct"
1206
eatgq_decoder_select="aandct"
1207
eatqi_decoder_select="aandct"
1208
ffv1_decoder_select="golomb"
1209
flac_decoder_select="golomb"
1210
flac_encoder_select="golomb lpc"
1211
flashsv_decoder_select="zlib"
1212
flashsv_encoder_select="zlib"
1213
flv_decoder_select="h263_decoder"
1214
flv_encoder_select="h263_encoder"
1215
h261_encoder_select="aandct"
1216
h263_decoder_select="h263_parser"
1217
h263_encoder_select="aandct"
1218
h263_vaapi_hwaccel_deps="va_va_h"
1219
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1220
h263i_decoder_select="h263_decoder"
1221
h263p_encoder_select="h263_encoder"
1222
h264_decoder_select="golomb"
1223
h264_dxva2_hwaccel_deps="dxva2api_h"
1224
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1225
h264_vaapi_hwaccel_deps="va_va_h"
1226
h264_vaapi_hwaccel_select="vaapi"
1227
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1228
h264_vdpau_decoder_select="vdpau h264_decoder"
1229
imc_decoder_select="fft mdct"
1230
jpegls_decoder_select="golomb"
1231
jpegls_encoder_select="golomb"
1232
ljpeg_encoder_select="aandct"
1233
loco_decoder_select="golomb"
1234
mjpeg_encoder_select="aandct"
1235
mlp_decoder_select="mlp_parser"
1236
mpeg1video_encoder_select="aandct"
1237
mpeg2video_encoder_select="aandct"
1238
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1239
mpeg4_encoder_select="h263_encoder"
1240
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1241
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1242
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1243
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1244
mpeg2_vaapi_hwaccel_deps="va_va_h"
1245
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1246
mpeg4_vaapi_hwaccel_deps="va_va_h"
1247
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1248
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1249
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1250
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1251
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1252
msmpeg4v1_decoder_select="h263_decoder"
1253
msmpeg4v1_encoder_select="h263_encoder"
1254
msmpeg4v2_decoder_select="h263_decoder"
1255
msmpeg4v2_encoder_select="h263_encoder"
1256
msmpeg4v3_decoder_select="h263_decoder"
1257
msmpeg4v3_encoder_select="h263_encoder"
1258
nellymoser_decoder_select="mdct"
1259
nellymoser_encoder_select="mdct"
1260
png_decoder_select="zlib"
1261
png_encoder_select="zlib"
1262
qcelp_decoder_select="lsp"
1263
qdm2_decoder_select="mdct rdft"
1264
rv10_decoder_select="h263_decoder"
1265
rv10_encoder_select="h263_encoder"
1266
rv20_decoder_select="h263_decoder"
1267
rv20_encoder_select="h263_encoder"
1268
rv30_decoder_select="golomb"
1269
rv40_decoder_select="golomb"
1270
shorten_decoder_select="golomb"
1271
sipr_decoder_select="lsp"
1272
snow_encoder_select="aandct"
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"
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_deps="va_va_h"
1289
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1290
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1291
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1292
vorbis_decoder_select="mdct"
1293
vorbis_encoder_select="mdct"
1294
vp6a_decoder_select="vp6_decoder"
1295
vp6f_decoder_select="vp6_decoder"
1296
wmapro_decoder_select="mdct"
1297
wmav1_decoder_select="mdct"
1298
wmav1_encoder_select="mdct"
1299
wmav2_decoder_select="mdct"
1300
wmav2_encoder_select="mdct"
1301
wmavoice_decoder_select="lsp"
1302
wmv1_decoder_select="h263_decoder"
1303
wmv1_encoder_select="h263_encoder"
1304
wmv2_decoder_select="h263_decoder"
1305
wmv2_encoder_select="h263_encoder"
1306
wmv3_decoder_select="vc1_decoder"
1307
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1308
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1309
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1310
zlib_decoder_select="zlib"
1311
zlib_encoder_select="zlib"
1312
zmbv_decoder_select="zlib"
1313
zmbv_encoder_select="zlib"
1314

    
1315
# parsers
1316
h264_parser_select="golomb"
1317

    
1318
# bitstream_filters
1319
aac_adtstoasc_bsf_select="aac_parser"
1320

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

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

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

    
1394
# protocols
1395
gopher_protocol_deps="network"
1396
http_protocol_deps="network"
1397
http_protocol_select="tcp_protocol"
1398
rtmp_protocol_deps="tcp_protocol"
1399
rtp_protocol_deps="udp_protocol"
1400
tcp_protocol_deps="network"
1401
udp_protocol_deps="network"
1402

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

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

    
1411
# programs
1412
ffmpeg_deps="avcodec avformat swscale"
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.err"
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="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 avformat
1460
enable avutil
1461
enable asm
1462
enable debug
1463
enable doc
1464
enable fastdiv
1465
enable ffmpeg
1466
enable ffplay
1467
enable ffprobe
1468
enable ffserver
1469
enable mpegaudio_hp
1470
enable network
1471
enable optimizations
1472
enable protocols
1473
enable static
1474
enable stripping
1475
enable swscale
1476
enable swscale_alpha
1477

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

    
1492
CC_O='-o $@'
1493

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

    
1497
target_path='$(CURDIR)'
1498

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

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

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

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

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

    
1544
enable $ARCH_EXT_LIST \
1545
       $DECODER_LIST \
1546
       $ENCODER_LIST \
1547
       $HWACCEL_LIST \
1548
       $PARSER_LIST \
1549
       $BSF_LIST \
1550
       $DEMUXER_LIST \
1551
       $MUXER_LIST \
1552
       $FILTER_LIST \
1553
       $PROTOCOL_LIST \
1554
       $INDEV_LIST \
1555
       $OUTDEV_LIST \
1556

    
1557
die_unknown(){
1558
    echo "Unknown option \"$1\"."
1559
    echo "See $0 --help for available options."
1560
    exit 1
1561
}
1562

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

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

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

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

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

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

    
1634
set_default arch target_os
1635

    
1636
ar="${cross_prefix}${ar}"
1637
cc_default="${cross_prefix}${cc_default}"
1638
nm_default="${cross_prefix}${nm_default}"
1639
ranlib="${cross_prefix}${ranlib}"
1640
strip_default="${cross_prefix}${strip_default}"
1641

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

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

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

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

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

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

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

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

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

    
1689
unset -f mktemp
1690

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

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

    
1708
if   $cc -v 2>&1 | grep -qi ^gcc; then
1709
    cc_type=gcc
1710
    cc_version=__VERSION__
1711
    if ! $cc -dumpversion | grep -q '^2\.'; then
1712
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1713
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1714
    fi
1715
    speed_cflags='-O3'
1716
    size_cflags='-Os'
1717
elif $cc --version 2>/dev/null | grep -q Intel; then
1718
    cc_type=icc
1719
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1720
    CC_DEPFLAGS='-MMD'
1721
    AS_DEPFLAGS='-MMD'
1722
    speed_cflags='-O3'
1723
    size_cflags='-Os'
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)                       echo -xarch=sparc          ;;
1814
                        ultrasparc)               echo -xarch=sparcvis       ;;
1815
                        ultrasparc3|niagara*)     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 || echolog "Unknown C compiler $cc"
1843

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

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

    
1852
add_cflags $extra_cflags
1853
add_asflags $extra_cflags
1854

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

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

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

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

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

    
1933
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1934
enable $arch
1935

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

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

    
1981
elif enabled x86; then
1982

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

    
2007
elif enabled sparc; then
2008

    
2009
    case $cpu in
2010
        sparc64)
2011
            cpuflags="-mcpu=v9"
2012
        ;;
2013
    esac
2014

    
2015
elif enabled arm; then
2016

    
2017
    case $cpu in
2018
        armv*)
2019
            cpuflags="-march=$cpu"
2020
        ;;
2021
        *)
2022
            cpuflags="-mcpu=$cpu"
2023
        ;;
2024
    esac
2025

    
2026
elif enabled alpha; then
2027

    
2028
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2029

    
2030
elif enabled bfin; then
2031

    
2032
    cpuflags="-mcpu=$cpu"
2033

    
2034
elif enabled mips; then
2035

    
2036
    cpuflags="-march=$cpu"
2037

    
2038
elif enabled avr32; then
2039

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

    
2059
fi
2060

    
2061
add_cflags $cpuflags
2062
add_asflags $cpuflags
2063

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

    
2077
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2078
check_cflags -std=c99
2079
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2080
#include <stdlib.h>
2081
EOF
2082
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2083
#include <stdlib.h>
2084
EOF
2085

    
2086
check_host_cflags -std=c99
2087

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

    
2103
enable $subarch
2104
enabled spic && enable pic
2105
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2106

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

    
2275
set_default $PATHS_LIST
2276

    
2277
add_extralibs $osextralibs
2278

    
2279
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2280
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2281

    
2282
# we need to build at least one lib type
2283
if ! enabled_any static shared; then
2284
    cat <<EOF
2285
At least one library type must be built.
2286
Specify --enable-static to build the static libraries or --enable-shared to
2287
build the shared libraries as well. To only build the shared libraries specify
2288
--disable-static in addition to --enable-shared.
2289
EOF
2290
    exit 1;
2291
fi
2292

    
2293
disabled static && LIBNAME=""
2294

    
2295
if enabled_any libfaad libfaadbin ; then
2296
    if check_header faad.h; then
2297
        check_cc <<EOF
2298
#include <faad.h>
2299
#ifndef FAAD2_VERSION
2300
ok faad1
2301
#endif
2302
int main(void) { return 0; }
2303
EOF
2304
        test $? = 0 && enable libfaad2
2305
    else
2306
        die "FAAD test failed."
2307
    fi
2308
fi
2309

    
2310

    
2311
die_license_disabled() {
2312
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2313
}
2314

    
2315
die_license_disabled gpl libfaad2
2316
die_license_disabled gpl libx264
2317
die_license_disabled gpl libxvid
2318
die_license_disabled gpl postproc
2319
die_license_disabled gpl x11grab
2320

    
2321
die_license_disabled nonfree libfaac
2322

    
2323
die_license_disabled version3 libopencore_amrnb
2324
die_license_disabled version3 libopencore_amrwb
2325

    
2326
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2327

    
2328
check_deps $ARCH_EXT_LIST
2329

    
2330
disabled optimizations || check_cflags -fomit-frame-pointer
2331

    
2332
enable_pic() {
2333
    enable pic
2334
    add_cppflags -DPIC
2335
    add_cflags   -fPIC
2336
    add_asflags  -fPIC
2337
}
2338

    
2339
enabled pic && enable_pic
2340

    
2341
check_cc <<EOF || die "Symbol mangling check failed."
2342
int ff_extern;
2343
EOF
2344
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2345
extern_prefix=${sym%%ff_extern*}
2346

    
2347
check_cc <<EOF && enable inline_asm
2348
void foo(void) { __asm__ volatile ("" ::); }
2349
EOF
2350

    
2351
_restrict=
2352
for restrict_keyword in restrict __restrict__ __restrict; do
2353
    check_cc <<EOF && _restrict=$restrict_keyword && break
2354
void foo(char * $restrict_keyword p);
2355
EOF
2356
done
2357

    
2358
check_cc <<EOF && enable attribute_packed
2359
struct { int x; } __attribute__((packed)) x;
2360
EOF
2361

    
2362
check_cc <<EOF && enable attribute_may_alias
2363
union { int x; } __attribute__((may_alias)) x;
2364
EOF
2365

    
2366
check_cc <<EOF || die "endian test failed"
2367
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2368
EOF
2369
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2370

    
2371
if enabled alpha; then
2372

    
2373
    check_cflags -mieee
2374

    
2375
elif enabled arm; then
2376

    
2377
    check_cflags -marm
2378

    
2379
    check_ld <<EOF && enable vfp_args
2380
__asm__ (".eabi_attribute 28, 1");
2381
int main(void) { return 0; }
2382
EOF
2383

    
2384
    # We have to check if pld is a nop and disable it.
2385
    check_asm pld '"pld [r0]"'
2386

    
2387
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2388
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2389
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2390
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2391
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2392
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2393

    
2394
    enabled_all armv6t2 shared !pic && enable_pic
2395

    
2396
elif enabled ia64; then
2397

    
2398
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2399
    enabled shared && enable_weak hardcoded_tables
2400

    
2401
elif enabled mips; then
2402

    
2403
    check_asm loongson '"dmult.g $1, $2, $3"'
2404
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2405

    
2406
elif enabled ppc; then
2407

    
2408
    enable local_aligned_8 local_aligned_16
2409

    
2410
    check_asm dcbzl     '"dcbzl 0, 1"'
2411
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2412
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2413

    
2414
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2415
    if enabled altivec; then
2416
        check_cflags -maltivec -mabi=altivec &&
2417
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2418
        check_cflags -faltivec
2419

    
2420
        # check if our compiler supports Motorola AltiVec C API
2421
        check_cc <<EOF || disable altivec
2422
$inc_altivec_h
2423
int main(void) {
2424
    vector signed int v1, v2, v3;
2425
    v1 = vec_add(v2,v3);
2426
    return 0;
2427
}
2428
EOF
2429

    
2430
        # check if our compiler supports braces for vector declarations
2431
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2432
$inc_altivec_h
2433
int main (void) { (vector int) {1}; return 0; }
2434
EOF
2435
    fi
2436

    
2437
elif enabled sparc; then
2438

    
2439
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2440
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2441

    
2442
elif enabled x86; then
2443

    
2444
    enable local_aligned_8 local_aligned_16
2445

    
2446
    # check whether EBP is available on x86
2447
    # As 'i' is stored on the stack, this program will crash
2448
    # if the base pointer is used to access it because the
2449
    # base pointer is cleared in the inline assembly code.
2450
    check_exec_crash <<EOF && enable ebp_available
2451
    volatile int i=0;
2452
    __asm__ volatile (
2453
        "xorl %%ebp, %%ebp"
2454
    ::: "%ebp");
2455
    return i;
2456
EOF
2457

    
2458
    # check whether EBX is available on x86
2459
    check_asm ebx_available '""::"b"(0)' &&
2460
        check_asm ebx_available '"":::"%ebx"'
2461

    
2462
    # check whether more than 10 operands are supported
2463
    check_cc <<EOF && enable ten_operands
2464
int main(void) {
2465
    int x=0;
2466
    __asm__ volatile(
2467
        ""
2468
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2469
    );
2470
    return 0;
2471
}
2472
EOF
2473

    
2474
    # check whether binutils is new enough to compile SSSE3/MMX2
2475
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2476
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2477

    
2478
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2479

    
2480
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2481
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2482
    enabled     pic           && append YASMFLAGS "-DPIC"
2483
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2484
    case "$objformat" in
2485
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2486
    esac
2487
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2488

    
2489
    case "$cpu" in
2490
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2491
            disable fast_clz
2492
        ;;
2493
    esac
2494

    
2495
fi
2496

    
2497
if check_func dlopen; then
2498
    ldl=
2499
elif check_func dlopen -ldl; then
2500
    ldl=-ldl
2501
fi
2502

    
2503
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2504
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2505

    
2506
check_func  fork
2507
check_func  getaddrinfo $network_extralibs
2508
check_func  gethrtime
2509
check_func  getrusage
2510
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2511
check_func  inet_aton $network_extralibs
2512
check_func  isatty
2513
check_func  ${malloc_prefix}memalign            && enable memalign
2514
check_func  mkstemp
2515
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2516
check_func  setrlimit
2517
check_func_headers io.h setmode
2518
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2519
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2520
check_func_headers windows.h GetProcessTimes
2521
check_func_headers windows.h VirtualAlloc
2522

    
2523
check_header conio.h
2524
check_header dlfcn.h
2525
check_header dxva2api.h
2526
check_header malloc.h
2527
check_header poll.h
2528
check_header sys/mman.h
2529
check_header sys/resource.h
2530
check_header sys/select.h
2531
check_header termios.h
2532
check_header vdpau/vdpau.h
2533
check_header vdpau/vdpau_x11.h
2534
check_header X11/extensions/XvMClib.h
2535

    
2536
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2537

    
2538
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2539
     enabled_any $need_memalign ; then
2540
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2541
fi
2542

    
2543
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2544
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2545

    
2546
# check for some common methods of building with pthread support
2547
# do this before the optional library checks as some of them require pthreads
2548
if enabled pthreads; then
2549
    if check_func pthread_create; then
2550
        :
2551
    elif check_func pthread_create -pthread; then
2552
        add_cflags -pthread
2553
        add_extralibs -pthread
2554
    elif check_func pthread_create -pthreads; then
2555
        add_cflags -pthreads
2556
        add_extralibs -pthreads
2557
    elif check_func pthread_create -lpthreadGC2; then
2558
        add_extralibs -lpthreadGC2
2559
    elif ! check_lib pthread.h pthread_create -lpthread; then
2560
        die "ERROR: can't find pthreads library"
2561
    fi
2562
fi
2563

    
2564
for thread in $THREADS_LIST; do
2565
    if enabled $thread; then
2566
        test -n "$thread_type" &&
2567
            die "ERROR: Only one thread type must be selected." ||
2568
            thread_type="$thread"
2569
    fi
2570
done
2571

    
2572
check_lib math.h sin -lm
2573
check_lib va/va.h vaInitialize -lva
2574

    
2575
check_mathfunc exp2
2576
check_mathfunc exp2f
2577
check_mathfunc llrint
2578
check_mathfunc log2
2579
check_mathfunc log2f
2580
check_mathfunc lrint
2581
check_mathfunc lrintf
2582
check_mathfunc round
2583
check_mathfunc roundf
2584
check_mathfunc truncf
2585

    
2586
# these are off by default, so fail if requested and not available
2587
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2588
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2589
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2590
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2591
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2592
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2593
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2594
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2595
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2596
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2597
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2598
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2599
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2600
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2601
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2602
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2603
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2604
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2605
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2606
                        die "ERROR: libx264 version must be >= 0.83."; }
2607
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2608
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2609

    
2610
# libdc1394 check
2611
if enabled libdc1394; then
2612
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2613
        enable libdc1394_2; } ||
2614
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2615
        enable libdc1394_1; } ||
2616
    die "ERROR: No version of libdc1394 found "
2617
fi
2618

    
2619
SDL_CONFIG="${cross_prefix}sdl-config"
2620
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2621
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2622
    sdl_libs=$("${SDL_CONFIG}" --libs)
2623
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2624
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2625
    enable sdl &&
2626
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2627
fi
2628

    
2629
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2630

    
2631
if enabled network; then
2632
    check_type "sys/types.h sys/socket.h" socklen_t
2633
    check_type netdb.h "struct addrinfo"
2634
    check_type netinet/in.h "struct ipv6_mreq"
2635
    check_type netinet/in.h "struct sockaddr_in6"
2636
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2637
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2638
    # Prefer arpa/inet.h over winsock2
2639
    if check_header arpa/inet.h ; then
2640
        check_func closesocket
2641
    elif check_header winsock2.h ; then
2642
        check_func_headers winsock2.h closesocket -lws2 && \
2643
            network_extralibs="-lws2" || \
2644
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2645
            network_extralibs="-lws2_32"; }
2646
        check_type ws2tcpip.h socklen_t
2647
        check_type ws2tcpip.h "struct addrinfo"
2648
        check_type ws2tcpip.h "struct ipv6_mreq"
2649
        check_type ws2tcpip.h "struct sockaddr_in6"
2650
        check_type ws2tcpip.h "struct sockaddr_storage"
2651
        check_struct winsock2.h "struct sockaddr" sa_len
2652
    else
2653
        disable network
2654
    fi
2655
fi
2656

    
2657
check_header linux/videodev.h
2658
check_header linux/videodev2.h
2659
check_header sys/videoio.h
2660

    
2661
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2662

    
2663
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2664
{ check_header dev/bktr/ioctl_meteor.h &&
2665
  check_header dev/bktr/ioctl_bt848.h; } ||
2666
{ check_header machine/ioctl_meteor.h &&
2667
  check_header machine/ioctl_bt848.h; } ||
2668
{ check_header dev/video/meteor/ioctl_meteor.h &&
2669
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2670
check_header dev/ic/bt8xx.h
2671

    
2672
check_header sys/soundcard.h
2673
check_header soundcard.h
2674

    
2675
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2676

    
2677
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2678

    
2679
enabled x11grab                         &&
2680
check_header X11/Xlib.h                 &&
2681
check_header X11/extensions/XShm.h      &&
2682
check_header X11/extensions/Xfixes.h    &&
2683
check_func XOpenDisplay -lX11           &&
2684
check_func XShmCreateImage -lX11 -lXext &&
2685
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2686

    
2687
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2688
check_cpp_condition \
2689
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2690
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2691
      disable vdpau; }
2692
fi
2693

    
2694
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2695

    
2696
# add some useful compiler flags if supported
2697
check_cflags -Wdeclaration-after-statement
2698
check_cflags -Wall
2699
check_cflags -Wno-switch
2700
check_cflags -Wdisabled-optimization
2701
check_cflags -Wpointer-arith
2702
check_cflags -Wredundant-decls
2703
check_cflags -Wno-pointer-sign
2704
check_cflags -Wcast-qual
2705
check_cflags -Wwrite-strings
2706
check_cflags -Wtype-limits
2707
check_cflags -Wundef
2708
check_cflags -Wmissing-prototypes
2709
enabled extra_warnings && check_cflags -Winline
2710

    
2711
# add some linker flags
2712
check_ldflags -Wl,--warn-common
2713
check_ldflags -Wl,--as-needed
2714
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'
2715
check_ldflags -Wl,-Bsymbolic
2716

    
2717
echo "X{};" > $TMPV
2718
test_ldflags -Wl,--version-script,$TMPV &&
2719
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2720

    
2721
if enabled small; then
2722
    add_cflags $size_cflags
2723
    optimizations="small"
2724
elif enabled optimizations; then
2725
    add_cflags $speed_cflags
2726
fi
2727
check_cflags -fno-math-errno
2728
check_cflags -fno-signed-zeros
2729

    
2730
if enabled icc; then
2731
    # Just warnings, no remarks
2732
    check_cflags -w1
2733
    # -wd: Disable following warnings
2734
    # 144, 167, 556: -Wno-pointer-sign
2735
    # 10006: ignoring unknown option -fno-signed-zeros
2736
    # 10156: ignoring option '-W'; no argument required
2737
    check_cflags -wd144,167,556,10006,10156
2738
    # 11030: Warning unknown option --as-needed
2739
    # 10156: ignoring option '-export'; no argument required
2740
    check_ldflags -wd10156,11030
2741
    # Allow to compile with optimizations
2742
    check_ldflags -march=$cpu
2743
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2744
    enable ebp_available
2745
elif enabled ccc; then
2746
    # disable some annoying warnings
2747
    add_cflags -msg_disable cvtu32to64
2748
    add_cflags -msg_disable embedcomment
2749
    add_cflags -msg_disable needconstext
2750
    add_cflags -msg_disable nomainieee
2751
    add_cflags -msg_disable ptrmismatch1
2752
    add_cflags -msg_disable unreachcode
2753
elif enabled gcc; then
2754
    check_cflags -fno-tree-vectorize
2755
    check_cflags -Werror=implicit
2756
    check_cflags -Werror=missing-prototypes
2757
elif enabled clang; then
2758
    check_cflags -Qunused-arguments
2759
elif enabled armcc; then
2760
    # 2523: use of inline assembler is deprecated
2761
    add_cflags -Wrvct,--diag_suppress=2523
2762
    add_cflags -Wrvct,--diag_suppress=1207
2763
elif enabled tms470; then
2764
    add_cflags -pds=824 -pds=837
2765
fi
2766

    
2767
if enabled gprof; then
2768
    add_cflags  -p
2769
    add_ldflags -p
2770
fi
2771

    
2772
# Find out if the .align argument is a power of two or not.
2773
check_asm asmalign_pot '".align 3"'
2774

    
2775
enabled_any $DECODER_LIST      && enable decoders
2776
enabled_any $ENCODER_LIST      && enable encoders
2777
enabled_any $HWACCEL_LIST      && enable hwaccels
2778
enabled_any $BSF_LIST          && enable bsfs
2779
enabled_any $DEMUXER_LIST      && enable demuxers
2780
enabled_any $MUXER_LIST        && enable muxers
2781
enabled_any $FILTER_LIST       && enable filters
2782
enabled_any $INDEV_LIST        && enable indevs
2783
enabled_any $OUTDEV_LIST       && enable outdevs
2784
enabled_any $PROTOCOL_LIST     && enable protocols
2785

    
2786
enabled_any $THREADS_LIST      && enable threads
2787

    
2788
check_deps $CONFIG_LIST       \
2789
           $CONFIG_EXTRA      \
2790
           $HAVE_LIST         \
2791
           $DECODER_LIST      \
2792
           $ENCODER_LIST      \
2793
           $HWACCEL_LIST      \
2794
           $PARSER_LIST       \
2795
           $BSF_LIST          \
2796
           $DEMUXER_LIST      \
2797
           $MUXER_LIST        \
2798
           $FILTER_LIST       \
2799
           $INDEV_LIST        \
2800
           $OUTDEV_LIST       \
2801
           $PROTOCOL_LIST     \
2802

    
2803
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2804

    
2805
echo "install prefix            $prefix"
2806
echo "source path               $source_path"
2807
echo "C compiler                $cc"
2808
echo ".align is power-of-two    $asmalign_pot"
2809
echo "ARCH                      $arch ($cpu)"
2810
if test "$build_suffix" != ""; then
2811
    echo "build suffix              $build_suffix"
2812
fi
2813
if test "$extra_version" != ""; then
2814
    echo "version string suffix     $extra_version"
2815
fi
2816
echo "big-endian                ${bigendian-no}"
2817
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2818
if enabled x86; then
2819
    echo "yasm                      ${yasm-no}"
2820
    echo "MMX enabled               ${mmx-no}"
2821
    echo "MMX2 enabled              ${mmx2-no}"
2822
    echo "3DNow! enabled            ${amd3dnow-no}"
2823
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2824
    echo "SSE enabled               ${sse-no}"
2825
    echo "SSSE3 enabled             ${ssse3-no}"
2826
    echo "CMOV enabled              ${cmov-no}"
2827
    echo "CMOV is fast              ${fast_cmov-no}"
2828
    echo "EBX available             ${ebx_available-no}"
2829
    echo "EBP available             ${ebp_available-no}"
2830
    echo "10 operands supported     ${ten_operands-no}"
2831
fi
2832
if enabled arm; then
2833
    echo "ARMv5TE enabled           ${armv5te-no}"
2834
    echo "ARMv6 enabled             ${armv6-no}"
2835
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2836
    echo "ARM VFP enabled           ${armvfp-no}"
2837
    echo "IWMMXT enabled            ${iwmmxt-no}"
2838
    echo "NEON enabled              ${neon-no}"
2839
fi
2840
if enabled mips; then
2841
    echo "MMI enabled               ${mmi-no}"
2842
fi
2843
if enabled ppc; then
2844
    echo "AltiVec enabled           ${altivec-no}"
2845
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2846
    echo "dcbzl available           ${dcbzl-no}"
2847
    echo "performance report        ${powerpc_perf-no}"
2848
fi
2849
if enabled sparc; then
2850
    echo "VIS enabled               ${vis-no}"
2851
fi
2852
echo "gprof enabled             ${gprof-no}"
2853
echo "debug symbols             ${debug-no}"
2854
echo "strip symbols             ${stripping-no}"
2855
echo "optimizations             ${optimizations-no}"
2856
echo "static                    ${static-no}"
2857
echo "shared                    ${shared-no}"
2858
echo "postprocessing support    ${postproc-no}"
2859
echo "new filter support        ${avfilter-no}"
2860
echo "filters using lavformat   ${avfilter_lavf-no}"
2861
echo "network support           ${network-no}"
2862
echo "threading support         ${thread_type-no}"
2863
echo "SDL support               ${sdl-no}"
2864
echo "Sun medialib support      ${mlib-no}"
2865
echo "AVISynth enabled          ${avisynth-no}"
2866
echo "libdc1394 support         ${libdc1394-no}"
2867
echo "libdirac enabled          ${libdirac-no}"
2868
echo "libfaac enabled           ${libfaac-no}"
2869
echo "libfaad enabled           ${libfaad-no}"
2870
echo "libfaad dlopened          ${libfaadbin-no}"
2871
echo "libgsm enabled            ${libgsm-no}"
2872
echo "libmp3lame enabled        ${libmp3lame-no}"
2873
echo "libnut enabled            ${libnut-no}"
2874
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2875
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2876
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2877
echo "libschroedinger enabled   ${libschroedinger-no}"
2878
echo "libspeex enabled          ${libspeex-no}"
2879
echo "libtheora enabled         ${libtheora-no}"
2880
echo "libvorbis enabled         ${libvorbis-no}"
2881
echo "libx264 enabled           ${libx264-no}"
2882
echo "libxvid enabled           ${libxvid-no}"
2883
echo "zlib enabled              ${zlib-no}"
2884
echo "bzlib enabled             ${bzlib-no}"
2885
echo
2886

    
2887
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2888
    echo "Enabled ${type}s:"
2889
    eval list=\$$(toupper $type)_LIST
2890
    for part in $list; do
2891
        enabled $part && echo ${part%_*}
2892
    done | sort | pr -3 -t
2893
    echo
2894
done
2895

    
2896
license="LGPL version 2.1 or later"
2897
if enabled nonfree; then
2898
    license="nonfree and unredistributable"
2899
elif enabled gplv3; then
2900
    license="GPL version 3 or later"
2901
elif enabled lgplv3; then
2902
    license="LGPL version 3 or later"
2903
elif enabled gpl; then
2904
    license="GPL version 2 or later"
2905
fi
2906

    
2907
echo "License: $license"
2908

    
2909
echo "Creating config.mak and config.h..."
2910

    
2911
# build tree in object directory if source path is different from current one
2912
if enabled source_path_used; then
2913
    DIRS="
2914
        doc
2915
        libavcodec
2916
        libavcodec/$arch
2917
        libavdevice
2918
        libavfilter
2919
        libavformat
2920
        libavutil
2921
        libavutil/$arch
2922
        libpostproc
2923
        libswscale
2924
        libswscale/$arch
2925
        tests
2926
        tools
2927
    "
2928
    FILES="
2929
        Makefile
2930
        common.mak
2931
        subdir.mak
2932
        doc/texi2pod.pl
2933
        libavcodec/Makefile
2934
        libavdevice/Makefile
2935
        libavfilter/Makefile
2936
        libavformat/Makefile
2937
        libavutil/Makefile
2938
        libpostproc/Makefile
2939
        libswscale/Makefile
2940
    "
2941
    for dir in $DIRS ; do
2942
        mkdir -p $dir
2943
    done
2944
    for f in $FILES ; do
2945
        $ln_s "$source_path/$f" $f
2946
    done
2947
fi
2948

    
2949
enabled stripping || strip="echo skipping strip"
2950

    
2951
cat > config.mak <<EOF
2952
# Automatically generated by configure - do not modify!
2953
ifndef FFMPEG_CONFIG_MAK
2954
FFMPEG_CONFIG_MAK=1
2955
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2956
prefix=$prefix
2957
LIBDIR=\$(DESTDIR)$libdir
2958
SHLIBDIR=\$(DESTDIR)$shlibdir
2959
INCDIR=\$(DESTDIR)$incdir
2960
BINDIR=\$(DESTDIR)$bindir
2961
DATADIR=\$(DESTDIR)$datadir
2962
MANDIR=\$(DESTDIR)$mandir
2963
SRC_PATH="$source_path"
2964
SRC_PATH_BARE=$source_path
2965
BUILD_ROOT="$PWD"
2966
ARCH=$arch
2967
CC=$cc
2968
AS=$as
2969
LD=$ld
2970
DEPCC=$dep_cc
2971
YASM=$yasmexe
2972
YASMDEP=$yasmexe
2973
AR=$ar
2974
RANLIB=$ranlib
2975
CP=cp -p
2976
LN_S=$ln_s
2977
STRIP=$strip
2978
CPPFLAGS=$CPPFLAGS
2979
CFLAGS=$CFLAGS
2980
ASFLAGS=$ASFLAGS
2981
CC_O=$CC_O
2982
LDFLAGS=$LDFLAGS
2983
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2984
SHFLAGS=$SHFLAGS
2985
YASMFLAGS=$YASMFLAGS
2986
BUILDSUF=$build_suffix
2987
FULLNAME=$FULLNAME
2988
LIBPREF=$LIBPREF
2989
LIBSUF=$LIBSUF
2990
LIBNAME=$LIBNAME
2991
SLIBPREF=$SLIBPREF
2992
SLIBSUF=$SLIBSUF
2993
EXESUF=$EXESUF
2994
EXTRA_VERSION=$extra_version
2995
DEPFLAGS=$DEPFLAGS
2996
CCDEP=$CCDEP
2997
ASDEP=$ASDEP
2998
CC_DEPFLAGS=$CC_DEPFLAGS
2999
AS_DEPFLAGS=$AS_DEPFLAGS
3000
HOSTCC=$host_cc
3001
HOSTCFLAGS=$host_cflags
3002
HOSTEXESUF=$HOSTEXESUF
3003
HOSTLDFLAGS=$host_ldflags
3004
HOSTLIBS=$host_libs
3005
TARGET_EXEC=$target_exec
3006
TARGET_PATH=$target_path
3007
SDL_LIBS=$sdl_libs
3008
SDL_CFLAGS=$sdl_cflags
3009
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3010
EXTRALIBS=$extralibs
3011
INSTALL=install
3012
LIBTARGET=${LIBTARGET}
3013
SLIBNAME=${SLIBNAME}
3014
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3015
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3016
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3017
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3018
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3019
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3020
EOF
3021

    
3022
get_version(){
3023
    name=$1
3024
    file=$source_path/$2
3025
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3026
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3027
    lcname=$(tolower $name)
3028
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3029
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3030
}
3031

    
3032
get_version LIBSWSCALE  libswscale/swscale.h
3033
get_version LIBPOSTPROC libpostproc/postprocess.h
3034
get_version LIBAVCODEC  libavcodec/avcodec.h
3035
get_version LIBAVDEVICE libavdevice/avdevice.h
3036
get_version LIBAVFORMAT libavformat/avformat.h
3037
get_version LIBAVUTIL   libavutil/avutil.h
3038
get_version LIBAVFILTER libavfilter/avfilter.h
3039

    
3040
enabled asmalign_pot || align_shift="1 <<"
3041

    
3042
cat > $TMPH <<EOF
3043
/* Automatically generated by configure - do not modify! */
3044
#ifndef FFMPEG_CONFIG_H
3045
#define FFMPEG_CONFIG_H
3046
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3047
#define FFMPEG_LICENSE "$(c_escape $license)"
3048
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3049
#define CC_TYPE "$cc_type"
3050
#define CC_VERSION $cc_version
3051
#define restrict $_restrict
3052
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3053
#define EXTERN_PREFIX "${extern_prefix}"
3054
#define EXTERN_ASM ${extern_prefix}
3055
EOF
3056

    
3057
test -n "$malloc_prefix" &&
3058
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3059

    
3060
if enabled small || disabled optimizations; then
3061
    echo "#undef  av_always_inline"  >> $TMPH
3062
    echo "#define av_always_inline"  >> $TMPH
3063
fi
3064

    
3065
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3066
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3067
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3068
                                      $CONFIG_EXTRA      \
3069
                                      $DECODER_LIST      \
3070
                                      $ENCODER_LIST      \
3071
                                      $HWACCEL_LIST      \
3072
                                      $PARSER_LIST       \
3073
                                      $BSF_LIST          \
3074
                                      $DEMUXER_LIST      \
3075
                                      $MUXER_LIST        \
3076
                                      $FILTER_LIST       \
3077
                                      $PROTOCOL_LIST     \
3078
                                      $INDEV_LIST        \
3079
                                      $OUTDEV_LIST       \
3080

    
3081
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3082
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3083

    
3084
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3085
cp_if_changed $TMPH config.h
3086

    
3087
cat > $TMPH <<EOF
3088
/* Generated by ffconf */
3089
#ifndef AVUTIL_AVCONFIG_H
3090
#define AVUTIL_AVCONFIG_H
3091
EOF
3092

    
3093
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3094

    
3095
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3096

    
3097
cp_if_changed $TMPH libavutil/avconfig.h
3098

    
3099
# build pkg-config files
3100

    
3101
pkgconfig_generate(){
3102
name=$1
3103
shortname=${name#lib}${build_suffix}
3104
comment=$2
3105
version=$3
3106
libs=$4
3107
requires=$5
3108
cat <<EOF > $name/$name.pc
3109
prefix=$prefix
3110
exec_prefix=\${prefix}
3111
libdir=$libdir
3112
includedir=$incdir
3113

    
3114
Name: $name
3115
Description: $comment
3116
Version: $version
3117
Requires: $(enabled shared || echo $requires)
3118
Requires.private: $(enabled shared && echo $requires)
3119
Conflicts:
3120
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3121
Libs.private: $(enabled shared && echo $libs)
3122
Cflags: -I\${includedir}
3123
EOF
3124
cat <<EOF > $name/$name-uninstalled.pc
3125
prefix=
3126
exec_prefix=
3127
libdir=\${pcfiledir}
3128
includedir=${source_path}
3129

    
3130
Name: $name
3131
Description: $comment
3132
Version: $version
3133
Requires: $requires
3134
Conflicts:
3135
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3136
Cflags: -I\${includedir}
3137
EOF
3138
}
3139

    
3140
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3141
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3142
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3143
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3144
enabled avfilter &&
3145
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3146
enabled postproc &&
3147
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3148
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"