Statistics
| Branch: | Revision:

ffmpeg / configure @ b4f93564

History | View | Annotate | Download (82.7 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
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72
  echo
73
  echo "Configuration options:"
74
  echo "  --disable-static         do not build static libraries [no]"
75
  echo "  --enable-shared          build shared libraries [no]"
76
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77
  echo "                           and binaries will be under GPL [no]"
78
  echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
80
  echo "                           and binaries will be unredistributable [no]"
81
  echo "  --disable-doc            do not build documentation"
82
  echo "  --disable-ffmpeg         disable ffmpeg build"
83
  echo "  --disable-ffplay         disable ffplay build"
84
  echo "  --disable-ffserver       disable ffserver build"
85
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
86
  echo "  --enable-avfilter        video filter support [no]"
87
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
88
  echo "  --enable-beosthreads     use BeOS threads [no]"
89
  echo "  --enable-os2threads      use OS/2 threads [no]"
90
  echo "  --enable-pthreads        use pthreads [no]"
91
  echo "  --enable-w32threads      use Win32 threads [no]"
92
  echo "  --enable-x11grab         enable X11 grabbing [no]"
93
  echo "  --disable-network        disable network support [no]"
94
  echo "  --disable-ipv6           disable IPv6 support [no]"
95
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
96
  echo "  --enable-gray            enable full grayscale support (slower color)"
97
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
98
  echo "  --disable-fastdiv        disable table-based division"
99
  echo "  --enable-small           optimize for size instead of speed"
100
  echo "  --disable-aandct         disable AAN DCT code"
101
  echo "  --disable-fft            disable FFT code"
102
  echo "  --disable-golomb         disable Golomb code"
103
  echo "  --disable-lpc            disable LPC code"
104
  echo "  --disable-mdct           disable MDCT code"
105
  echo "  --disable-rdft           disable RDFT code"
106
  echo "  --disable-vaapi          disable VAAPI code"
107
  echo "  --disable-vdpau          disable VDPAU code"
108
  echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
109
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
110
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
111
  echo "  --enable-beos-netserver  enable BeOS netserver"
112
  echo "  --disable-encoder=NAME   disable encoder NAME"
113
  echo "  --enable-encoder=NAME    enable encoder NAME"
114
  echo "  --disable-encoders       disable all encoders"
115
  echo "  --disable-decoder=NAME   disable decoder NAME"
116
  echo "  --enable-decoder=NAME    enable decoder NAME"
117
  echo "  --disable-decoders       disable all decoders"
118
  echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
119
  echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
120
  echo "  --disable-hwaccels       disable all hwaccels"
121
  echo "  --disable-muxer=NAME     disable muxer NAME"
122
  echo "  --enable-muxer=NAME      enable muxer NAME"
123
  echo "  --disable-muxers         disable all muxers"
124
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
125
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
126
  echo "  --disable-demuxers       disable all demuxers"
127
  echo "  --enable-parser=NAME     enable parser NAME"
128
  echo "  --disable-parser=NAME    disable parser NAME"
129
  echo "  --disable-parsers        disable all parsers"
130
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
131
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
132
  echo "  --disable-bsfs           disable all bitstream filters"
133
  echo "  --enable-protocol=NAME   enable protocol NAME"
134
  echo "  --disable-protocol=NAME  disable protocol NAME"
135
  echo "  --disable-protocols      disable all protocols"
136
  echo "  --disable-indev=NAME     disable input device NAME"
137
  echo "  --disable-outdev=NAME    disable output device NAME"
138
  echo "  --disable-indevs         disable input devices"
139
  echo "  --disable-outdevs        disable output devices"
140
  echo "  --disable-devices        disable all devices"
141
  echo "  --enable-filter=NAME     enable filter NAME"
142
  echo "  --disable-filter=NAME    disable filter NAME"
143
  echo "  --disable-filters        disable all filters"
144
  echo "  --list-decoders          show all available decoders"
145
  echo "  --list-encoders          show all available encoders"
146
  echo "  --list-hwaccels          show all available hardware accelerators"
147
  echo "  --list-muxers            show all available muxers"
148
  echo "  --list-demuxers          show all available demuxers"
149
  echo "  --list-parsers           show all available parsers"
150
  echo "  --list-protocols         show all available protocols"
151
  echo "  --list-bsfs              show all available bitstream filters"
152
  echo "  --list-indevs            show all available input devices"
153
  echo "  --list-outdevs           show all available output devices"
154
  echo "  --list-filters           show all available filters"
155
  echo
156
  echo "External library support:"
157
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
158
  echo "  --enable-bzlib           enable bzlib [autodetect]"
159
  echo "  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
160
  echo "  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
161
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
162
  echo "                           and libraw1394 [no]"
163
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
164
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
165
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
166
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
167
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
168
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
169
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
170
  echo "                           native (de)muxer exists [no]"
171
  echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
172
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
173
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
174
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
175
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
176
  echo "                           native implementation exists [no]"
177
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
178
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
179
  echo "                           native MPEG-4/Xvid encoder exists [no]"
180
  echo "  --enable-mlib            enable Sun medialib [no]"
181
  echo "  --enable-zlib            enable zlib [autodetect]"
182
  echo ""
183
  echo "Advanced options (experts only):"
184
  echo "  --source-path=PATH       path to source code [$source_path]"
185
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
186
  echo "  --enable-cross-compile   assume a cross-compiler is used"
187
  echo "  --sysroot=PATH           root of cross-build tree"
188
  echo "  --sysinclude=PATH        location of cross-build system headers"
189
  echo "  --target-os=OS           compiler targets OS [$target_os]"
190
  echo "  --target-exec=CMD        command to run executables on target"
191
  echo "  --target-path=DIR        path to view of build directory on target"
192
  echo "  --nm=NM                  use nm tool"
193
  echo "  --as=AS                  use assembler AS [$as_default]"
194
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
195
  echo "  --ld=LD                  use linker LD"
196
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
197
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
198
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
199
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
200
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
201
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
202
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
203
  echo "  --extra-version=STRING   version string suffix []"
204
  echo "  --build-suffix=SUFFIX    library name suffix []"
205
  echo "  --arch=ARCH              select architecture [$arch]"
206
  echo "  --cpu=CPU                select the minimum required CPU (affects"
207
  echo "                           instruction selection, may crash on older CPUs)"
208
  echo "  --enable-powerpc-perf    enable performance report on PPC"
209
  echo "                           (requires enabling PMC)"
210
  echo "  --disable-altivec        disable AltiVec optimizations"
211
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
212
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
213
  echo "  --disable-mmx            disable MMX optimizations"
214
  echo "  --disable-mmx2           disable MMX2 optimizations"
215
  echo "  --disable-sse            disable SSE optimizations"
216
  echo "  --disable-ssse3          disable SSSE3 optimizations"
217
  echo "  --disable-armv5te        disable armv5te optimizations"
218
  echo "  --disable-armv6          disable armv6 optimizations"
219
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
220
  echo "  --disable-armvfp         disable ARM VFP optimizations"
221
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
222
  echo "  --disable-mmi            disable MMI optimizations"
223
  echo "  --disable-neon           disable neon optimizations"
224
  echo "  --disable-vis            disable VIS optimizations"
225
  echo "  --disable-yasm           disable use of yasm assembler"
226
  echo "  --enable-pic             build position-independent code"
227
  echo
228
  echo "Developer options (useful when working on FFmpeg itself):"
229
  echo "  --disable-debug          disable debugging symbols"
230
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
231
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
232
  echo "  --disable-optimizations  disable compiler optimizations"
233
  echo "  --enable-extra-warnings  enable more compiler warnings"
234
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
235
  echo ""
236
  echo "NOTE: Object files are built at the place where configure is launched."
237
  exit 0
238
}
239

    
240
log(){
241
    echo "$@" >> $logfile
242
}
243

    
244
log_file(){
245
    log BEGIN $1
246
    pr -n -t $1 >> $logfile
247
    log END $1
248
}
249

    
250
echolog(){
251
    log "$@"
252
    echo "$@"
253
}
254

    
255
die(){
256
    echolog "$@"
257
    cat <<EOF
258

    
259
If you think configure made a mistake, make sure you are using the latest
260
version from SVN.  If the latest version fails, report the problem to the
261
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
262
EOF
263
    if disabled logging; then
264
        cat <<EOF
265
Rerun configure with logging enabled (do not use --disable-logging), and
266
include the log this produces with your report.
267
EOF
268
    else
269
cat <<EOF
270
Include the log file "$logfile" produced by configure as this will help
271
solving the problem.
272
EOF
273
    fi
274
    exit 1
275
}
276

    
277
# Avoid locale weirdness, besides we really just want to translate ASCII.
278
toupper(){
279
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
280
}
281

    
282
tolower(){
283
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
284
}
285

    
286
c_escape(){
287
    echo "$*" | sed 's/["\\]/\\\0/g'
288
}
289

    
290
sh_quote(){
291
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
292
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
293
    echo "$v"
294
}
295

    
296
filter(){
297
    pat=$1
298
    shift
299
    for v; do
300
        eval "case $v in $pat) echo $v ;; esac"
301
    done
302
}
303

    
304
set_all(){
305
    value=$1
306
    shift
307
    for var in $*; do
308
        eval $var=$value
309
    done
310
}
311

    
312
set_weak(){
313
    value=$1
314
    shift
315
    for var; do
316
        eval : \${$var:=$value}
317
    done
318
}
319

    
320
pushvar(){
321
    for var in $*; do
322
        eval level=\${${var}_level:=0}
323
        eval ${var}_${level}="\$$var"
324
        eval ${var}_level=$(($level+1))
325
    done
326
}
327

    
328
popvar(){
329
    for var in $*; do
330
        eval level=\${${var}_level:-0}
331
        test $level = 0 && continue
332
        eval level=$(($level-1))
333
        eval $var="\${${var}_${level}}"
334
        eval ${var}_level=$level
335
        eval unset ${var}_${level}
336
    done
337
}
338

    
339
enable(){
340
    set_all yes $*
341
}
342

    
343
disable(){
344
    set_all no $*
345
}
346

    
347
enable_weak(){
348
    set_weak yes $*
349
}
350

    
351
disable_weak(){
352
    set_weak no $*
353
}
354

    
355
enable_safe(){
356
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
357
}
358

    
359
disable_safe(){
360
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
361
}
362

    
363
do_enable_deep(){
364
    for var; do
365
        enabled $var && continue
366
        eval sel="\$${var}_select"
367
        eval sgs="\$${var}_suggest"
368
        pushvar var sgs
369
        enable_deep $sel
370
        popvar sgs
371
        enable_deep_weak $sgs
372
        popvar var
373
    done
374
}
375

    
376
enable_deep(){
377
    do_enable_deep $*
378
    enable $*
379
}
380

    
381
enable_deep_weak(){
382
    do_enable_deep $*
383
    enable_weak $*
384
}
385

    
386
enabled(){
387
    test "${1#!}" = "$1" && op== || op=!=
388
    eval test "x\$${1#!}" $op "xyes"
389
}
390

    
391
disabled(){
392
    test "${1#!}" = "$1" && op== || op=!=
393
    eval test "x\$${1#!}" $op "xno"
394
}
395

    
396
enabled_all(){
397
    for opt; do
398
        enabled $opt || return 1
399
    done
400
}
401

    
402
disabled_all(){
403
    for opt; do
404
        disabled $opt || return 1
405
    done
406
}
407

    
408
enabled_any(){
409
    for opt; do
410
        enabled $opt && return 0
411
    done
412
}
413

    
414
disabled_any(){
415
    for opt; do
416
        disabled $opt && return 0
417
    done
418
    return 1
419
}
420

    
421
set_default(){
422
    for opt; do
423
        eval : \${$opt:=\$${opt}_default}
424
    done
425
}
426

    
427
is_in(){
428
    value=$1
429
    shift
430
    for var in $*; do
431
        [ $var = $value ] && return 0
432
    done
433
    return 1
434
}
435

    
436
check_deps(){
437
    for cfg; do
438
        cfg="${cfg#!}"
439
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
440
        disabled ${cfg}_checking && continue
441
        enable ${cfg}_checking
442

    
443
        eval dep_all="\$${cfg}_deps"
444
        eval dep_any="\$${cfg}_deps_any"
445
        eval dep_sel="\$${cfg}_select"
446
        eval dep_sgs="\$${cfg}_suggest"
447

    
448
        pushvar cfg dep_all dep_any dep_sel dep_sgs
449
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
450
        popvar cfg dep_all dep_any dep_sel dep_sgs
451

    
452
        enabled_all  $dep_all || disable $cfg
453
        enabled_any  $dep_any || disable $cfg
454
        disabled_any $dep_sel && disable $cfg
455

    
456
        if enabled $cfg; then
457
            eval dep_extralibs="\$${cfg}_extralibs"
458
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
459
            enable_deep $dep_sel
460
            enable_deep_weak $dep_sgs
461
        fi
462

    
463
        disable ${cfg}_checking
464
    done
465
}
466

    
467
print_config(){
468
    pfx=$1
469
    header=$2
470
    makefile=$3
471
    shift 3
472
    for cfg; do
473
        ucname="$(toupper $cfg)"
474
        if enabled $cfg; then
475
            echo "#define ${pfx}${ucname} 1" >> $header
476
            echo "${pfx}${ucname}=yes" >> $makefile
477
        else
478
            echo "#define ${pfx}${ucname} 0" >> $header
479
        fi
480
    done
481
}
482

    
483
flags_saved(){
484
    (: ${SAVE_CFLAGS?}) 2> /dev/null
485
}
486

    
487
save_flags(){
488
    flags_saved && return
489
    SAVE_CFLAGS="$CFLAGS"
490
    SAVE_LDFLAGS="$LDFLAGS"
491
    SAVE_extralibs="$extralibs"
492
}
493

    
494
restore_flags(){
495
    flags_saved || return
496
    CFLAGS="$SAVE_CFLAGS"
497
    LDFLAGS="$SAVE_LDFLAGS"
498
    extralibs="$SAVE_extralibs"
499
    unset SAVE_CFLAGS
500
    unset SAVE_LDFLAGS
501
    unset SAVE_extralibs
502
}
503

    
504
temp_cflags(){
505
    save_flags
506
    CFLAGS="$CFLAGS $*"
507
}
508

    
509
temp_ldflags(){
510
    save_flags
511
    LDFLAGS="$LDFLAGS $*"
512
}
513

    
514
temp_extralibs(){
515
    save_flags
516
    extralibs="$extralibs $*"
517
}
518

    
519
append(){
520
    var=$1
521
    shift
522
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
523
    eval "$var=\"\$$var $*\""
524
}
525

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

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

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

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

    
542
add_extralibs(){
543
    append extralibs "$@"
544
}
545

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

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

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

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

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

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

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

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

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

    
618
check_ldflags(){
619
    log check_ldflags "$@"
620
    check_ld "$@" <<EOF && add_ldflags "$@"
621
int main(void){ return 0; }
622
EOF
623
}
624

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

    
636
check_func(){
637
    log check_func "$@"
638
    func=$1
639
    shift
640
    disable $func
641
    check_ld "$@" <<EOF && enable $func
642
extern int $func();
643
int main(void){ $func(); }
644
EOF
645
}
646

    
647
check_func_headers(){
648
    log check_func_headers "$@"
649
    headers=$1
650
    func=$2
651
    shift 2
652
    disable $func
653
    incs=""
654
    for hdr in $headers; do
655
        incs="$incs
656
#include <$hdr>"
657
    done
658
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
659
$incs
660
int main(int argc, char **argv){
661
    return (long) $func;
662
}
663
EOF
664
}
665

    
666
check_cpp_condition(){
667
    log check_cpp_condition "$@"
668
    header=$1
669
    condition=$2
670
    check_cpp <<EOF
671
#include <$header>
672
#if !($condition)
673
#error "unsatisfied condition: $condition"
674
#endif
675
EOF
676
}
677

    
678
check_lib(){
679
    log check_lib "$@"
680
    header="$1"
681
    func="$2"
682
    shift 2
683
    temp_extralibs "$@"
684
    check_header $header && check_func $func && add_extralibs "$@"
685
    err=$?
686
    restore_flags
687
    return $err
688
}
689

    
690
check_lib2(){
691
    log check_lib2 "$@"
692
    headers="$1"
693
    func="$2"
694
    shift 2
695
    temp_extralibs "$@"
696
    check_func_headers "$headers" $func && add_extralibs "$@"
697
    err=$?
698
    restore_flags
699
    return $err
700
}
701

    
702
check_exec(){
703
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
704
}
705

    
706
check_exec_crash(){
707
    code=$(cat)
708

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

    
715
    (check_exec "$@") >> $logfile 2>&1 <<EOF
716
#include <signal.h>
717
static void sighandler(int sig){
718
    raise(SIGTERM);
719
}
720
int main(void){
721
    signal(SIGILL, sighandler);
722
    signal(SIGFPE, sighandler);
723
    signal(SIGSEGV, sighandler);
724
#ifdef SIGBUS
725
    signal(SIGBUS, sighandler);
726
#endif
727
    { $code }
728
}
729
EOF
730
}
731

    
732
check_type(){
733
    log check_type "$@"
734
    headers=$1
735
    type=$2
736
    shift 2
737
    disable $type
738
    incs=""
739
    for hdr in $headers; do
740
        incs="$incs
741
#include <$hdr>"
742
    done
743
    check_cc "$@" <<EOF && enable $type
744
$incs
745
$type v;
746
EOF
747
}
748

    
749
require(){
750
    name="$1"
751
    header="$2"
752
    func="$3"
753
    shift 3
754
    check_lib $header $func "$@" || die "ERROR: $name not found"
755
}
756

    
757
require2(){
758
    name="$1"
759
    headers="$2"
760
    func="$3"
761
    shift 3
762
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
763
}
764

    
765
check_foo_config(){
766
    cfg=$1
767
    pkg=$2
768
    header=$3
769
    func=$4
770
    shift 4
771
    disable $cfg
772
    check_cmd ${pkg}-config --version
773
    err=$?
774
    if test "$err" = 0; then
775
        temp_cflags $(${pkg}-config --cflags)
776
        temp_extralibs $(${pkg}-config --libs)
777
        check_lib "$@" $header $func && enable $cfg
778
    fi
779
    return $err
780
}
781

    
782
check_host_cc(){
783
    log check_host_cc "$@"
784
    cat > $TMPC
785
    log_file $TMPC
786
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
787
}
788

    
789
check_host_cflags(){
790
    log check_host_cflags "$@"
791
    check_host_cc "$@" <<EOF && append host_cflags "$@"
792
int x;
793
EOF
794
}
795

    
796
apply(){
797
    file=$1
798
    shift
799
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
800
}
801

    
802
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
803
# system-dependent things.
804

    
805
COMPONENT_LIST="
806
    bsfs
807
    decoders
808
    demuxers
809
    encoders
810
    filters
811
    hwaccels
812
    indevs
813
    muxers
814
    outdevs
815
    parsers
816
    protocols
817
"
818

    
819
CONFIG_LIST="
820
    $COMPONENT_LIST
821
    aandct
822
    avfilter
823
    avfilter_lavf
824
    avisynth
825
    beos_netserver
826
    bzlib
827
    doc
828
    fastdiv
829
    ffmpeg
830
    ffplay
831
    ffserver
832
    fft
833
    golomb
834
    gpl
835
    gprof
836
    gray
837
    hardcoded_tables
838
    ipv6
839
    libdc1394
840
    libdirac
841
    libfaac
842
    libfaad
843
    libfaadbin
844
    libgsm
845
    libmp3lame
846
    libnut
847
    libopencore_amrnb
848
    libopencore_amrwb
849
    libopenjpeg
850
    libschroedinger
851
    libspeex
852
    libtheora
853
    libvorbis
854
    libx264
855
    libxvid
856
    lpc
857
    mdct
858
    memalign_hack
859
    mlib
860
    mpegaudio_hp
861
    network
862
    nonfree
863
    pic
864
    postproc
865
    powerpc_perf
866
    rdft
867
    runtime_cpudetect
868
    shared
869
    small
870
    static
871
    swscale_alpha
872
    vaapi
873
    vdpau
874
    version3
875
    x11grab
876
    zlib
877
"
878

    
879
THREADS_LIST='
880
    beosthreads
881
    os2threads
882
    pthreads
883
    w32threads
884
'
885

    
886
ARCH_LIST='
887
    alpha
888
    arm
889
    avr32
890
    avr32_ap
891
    avr32_uc
892
    bfin
893
    ia64
894
    m68k
895
    mips
896
    mips64
897
    parisc
898
    ppc
899
    ppc64
900
    s390
901
    sh4
902
    sparc
903
    sparc64
904
    x86
905
    x86_32
906
    x86_64
907
'
908

    
909
ARCH_EXT_LIST='
910
    altivec
911
    amd3dnow
912
    amd3dnowext
913
    armv5te
914
    armv6
915
    armv6t2
916
    armvfp
917
    iwmmxt
918
    mmi
919
    mmx
920
    mmx2
921
    neon
922
    ppc4xx
923
    sse
924
    ssse3
925
    vis
926
'
927

    
928
HAVE_LIST="
929
    $ARCH_EXT_LIST
930
    $THREADS_LIST
931
    alsa_asoundlib_h
932
    altivec_h
933
    arpa_inet_h
934
    attribute_packed
935
    bigendian
936
    bswap
937
    closesocket
938
    cmov
939
    conio_h
940
    dcbzl
941
    dev_bktr_ioctl_bt848_h
942
    dev_bktr_ioctl_meteor_h
943
    dev_ic_bt8xx_h
944
    dev_video_meteor_ioctl_meteor_h
945
    dev_video_bktr_ioctl_bt848_h
946
    dlfcn_h
947
    dlopen
948
    dos_paths
949
    ebp_available
950
    ebx_available
951
    fast_64bit
952
    fast_cmov
953
    fast_unaligned
954
    fork
955
    gethrtime
956
    GetProcessTimes
957
    getrusage
958
    inet_aton
959
    inline_asm
960
    isatty
961
    ldbrx
962
    libdc1394_1
963
    libdc1394_2
964
    llrint
965
    log2
966
    loongson
967
    lrint
968
    lrintf
969
    lzo1x_999_compress
970
    machine_ioctl_bt848_h
971
    machine_ioctl_meteor_h
972
    malloc_h
973
    memalign
974
    mkstemp
975
    pld
976
    posix_memalign
977
    round
978
    roundf
979
    sdl
980
    sdl_video_size
981
    setmode
982
    socklen_t
983
    soundcard_h
984
    poll_h
985
    sys_mman_h
986
    sys_resource_h
987
    sys_select_h
988
    sys_soundcard_h
989
    sys_videoio_h
990
    ten_operands
991
    termios_h
992
    threads
993
    truncf
994
    vfp_args
995
    VirtualAlloc
996
    winsock2_h
997
    xform_asm
998
    yasm
999
"
1000

    
1001
# options emitted with CONFIG_ prefix but not available on command line
1002
CONFIG_EXTRA="
1003
    gplv3
1004
    lgplv3
1005
"
1006

    
1007
CMDLINE_SELECT="
1008
    $ARCH_EXT_LIST
1009
    $CONFIG_LIST
1010
    $THREADS_LIST
1011
    cross_compile
1012
    debug
1013
    extra_warnings
1014
    logging
1015
    optimizations
1016
    stripping
1017
    yasm
1018
"
1019

    
1020
PATHS_LIST='
1021
    bindir
1022
    datadir
1023
    incdir
1024
    libdir
1025
    mandir
1026
    prefix
1027
    shlibdir
1028
'
1029

    
1030
CMDLINE_SET="
1031
    $PATHS_LIST
1032
    arch
1033
    as
1034
    build_suffix
1035
    cc
1036
    cpu
1037
    cross_prefix
1038
    dep_cc
1039
    extra_version
1040
    host_cc
1041
    host_cflags
1042
    host_ldflags
1043
    host_libs
1044
    host_os
1045
    ld
1046
    logfile
1047
    nm
1048
    source_path
1049
    sysinclude
1050
    sysroot
1051
    target_exec
1052
    target_os
1053
    target_path
1054
"
1055

    
1056
CMDLINE_APPEND="
1057
    extra_cflags
1058
"
1059

    
1060
# code dependency declarations
1061

    
1062
# architecture extensions
1063
altivec_deps="ppc"
1064
amd3dnow_deps="mmx"
1065
amd3dnowext_deps="amd3dnow"
1066
armv5te_deps="arm"
1067
armv6_deps="arm"
1068
armv6t2_deps="arm"
1069
armvfp_deps="arm"
1070
iwmmxt_deps="arm"
1071
mmi_deps="mips"
1072
mmx_deps="x86"
1073
mmx2_deps="mmx"
1074
neon_deps="arm"
1075
ppc4xx_deps="ppc"
1076
sse_deps="mmx"
1077
ssse3_deps="sse"
1078
vis_deps="sparc"
1079

    
1080
need_memalign="altivec neon sse"
1081
inline_asm_deps="!tms470"
1082

    
1083
# decoders / encoders / hardware accelerators
1084
aac_decoder_select="fft mdct"
1085
aac_encoder_select="fft mdct"
1086
ac3_decoder_select="fft mdct"
1087
alac_encoder_select="lpc"
1088
atrac3_decoder_select="fft mdct"
1089
cavs_decoder_select="golomb"
1090
cook_decoder_select="fft mdct"
1091
cscd_decoder_suggest="zlib"
1092
dca_decoder_select="fft mdct"
1093
dnxhd_encoder_select="aandct"
1094
dxa_decoder_select="zlib"
1095
eac3_decoder_select="ac3_decoder"
1096
eamad_decoder_select="aandct"
1097
eatgq_decoder_select="aandct"
1098
eatqi_decoder_select="aandct"
1099
ffv1_decoder_select="golomb"
1100
flac_decoder_select="golomb"
1101
flac_encoder_select="golomb lpc"
1102
flashsv_decoder_select="zlib"
1103
flashsv_encoder_select="zlib"
1104
flv_encoder_select="h263_encoder"
1105
h261_encoder_select="aandct"
1106
h263_encoder_select="aandct"
1107
h263_vaapi_hwaccel_deps="va_va_h"
1108
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1109
h263p_encoder_select="h263_encoder"
1110
h264_decoder_select="golomb"
1111
h264_vaapi_hwaccel_deps="va_va_h"
1112
h264_vaapi_hwaccel_select="vaapi"
1113
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1114
h264_vdpau_decoder_select="vdpau h264_decoder"
1115
imc_decoder_select="fft mdct"
1116
jpegls_decoder_select="golomb"
1117
jpegls_encoder_select="golomb"
1118
ljpeg_encoder_select="aandct"
1119
loco_decoder_select="golomb"
1120
mjpeg_encoder_select="aandct"
1121
mpeg1video_encoder_select="aandct"
1122
mpeg2video_encoder_select="aandct"
1123
mpeg4_encoder_select="h263_encoder"
1124
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1125
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1126
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1127
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1128
mpeg2_vaapi_hwaccel_deps="va_va_h"
1129
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1130
mpeg4_vaapi_hwaccel_deps="va_va_h"
1131
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1132
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1133
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1134
msmpeg4v1_encoder_select="h263_encoder"
1135
msmpeg4v2_encoder_select="h263_encoder"
1136
msmpeg4v3_encoder_select="h263_encoder"
1137
nellymoser_decoder_select="fft mdct"
1138
nellymoser_encoder_select="fft mdct"
1139
png_decoder_select="zlib"
1140
png_encoder_select="zlib"
1141
qdm2_decoder_select="fft mdct rdft"
1142
rv10_encoder_select="h263_encoder"
1143
rv20_encoder_select="h263_encoder"
1144
rv30_decoder_select="golomb"
1145
rv40_decoder_select="golomb"
1146
shorten_decoder_select="golomb"
1147
sonic_decoder_select="golomb"
1148
sonic_encoder_select="golomb"
1149
sonic_ls_encoder_select="golomb"
1150
svq3_decoder_select="golomb"
1151
svq3_decoder_suggest="zlib"
1152
theora_decoder_select="vp3_decoder"
1153
tiff_decoder_suggest="zlib"
1154
tiff_encoder_suggest="zlib"
1155
tscc_decoder_select="zlib"
1156
vc1_vaapi_hwaccel_deps="va_va_h"
1157
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1158
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1159
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1160
vorbis_decoder_select="fft mdct"
1161
vorbis_encoder_select="fft mdct"
1162
vp6a_decoder_select="vp6_decoder"
1163
vp6f_decoder_select="vp6_decoder"
1164
wmav1_decoder_select="fft mdct"
1165
wmav1_encoder_select="fft mdct"
1166
wmav2_decoder_select="fft mdct"
1167
wmav2_encoder_select="fft mdct"
1168
wmv1_encoder_select="h263_encoder"
1169
wmv2_encoder_select="h263_encoder"
1170
wmv3_decoder_select="vc1_decoder"
1171
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1172
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1173
zlib_decoder_select="zlib"
1174
zlib_encoder_select="zlib"
1175
zmbv_decoder_select="zlib"
1176
zmbv_encoder_select="zlib"
1177

    
1178
# parsers
1179
h264_parser_select="golomb"
1180

    
1181
# external libraries
1182
libdirac_decoder_deps="libdirac !libschroedinger"
1183
libdirac_encoder_deps="libdirac"
1184
libfaac_encoder_deps="libfaac"
1185
libfaad_decoder_deps="libfaad"
1186
libfaadbin_decoder_extralibs='$ldl'
1187
libgsm_decoder_deps="libgsm"
1188
libgsm_encoder_deps="libgsm"
1189
libgsm_ms_decoder_deps="libgsm"
1190
libgsm_ms_encoder_deps="libgsm"
1191
libmp3lame_encoder_deps="libmp3lame"
1192
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1193
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1194
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1195
libopenjpeg_decoder_deps="libopenjpeg"
1196
libschroedinger_decoder_deps="libschroedinger"
1197
libschroedinger_encoder_deps="libschroedinger"
1198
libspeex_decoder_deps="libspeex"
1199
libtheora_encoder_deps="libtheora"
1200
libvorbis_encoder_deps="libvorbis"
1201
libx264_encoder_deps="libx264"
1202
libxvid_encoder_deps="libxvid"
1203

    
1204
# demuxers / muxers
1205
ac3_demuxer_deps="ac3_parser"
1206
asf_stream_muxer_select="asf_muxer"
1207
avisynth_demuxer_deps="avisynth"
1208
dirac_demuxer_deps="dirac_parser"
1209
ipod_muxer_select="mov_muxer"
1210
libnut_demuxer_deps="libnut"
1211
libnut_muxer_deps="libnut"
1212
matroska_audio_muxer_select="matroska_muxer"
1213
matroska_demuxer_suggest="zlib bzlib"
1214
mov_demuxer_suggest="zlib"
1215
mp3_demuxer_deps="mpegaudio_parser"
1216
mp4_muxer_select="mov_muxer"
1217
mpegtsraw_demuxer_select="mpegts_demuxer"
1218
mxf_d10_muxer_select="mxf_muxer"
1219
psp_muxer_select="mov_muxer"
1220
rtp_muxer_deps="network rtp_protocol"
1221
rtsp_demuxer_deps="sdp_demuxer"
1222
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1223
tg2_muxer_select="mov_muxer"
1224
tgp_muxer_select="mov_muxer"
1225
w64_demuxer_deps="wav_demuxer"
1226

    
1227
# indevs / outdevs
1228
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1229
alsa_indev_extralibs="-lasound"
1230
alsa_outdev_deps="alsa_asoundlib_h"
1231
alsa_outdev_extralibs="-lasound"
1232
audio_beos_indev_deps="audio_beos"
1233
audio_beos_indev_extralibs="-lmedia -lbe"
1234
audio_beos_outdev_deps="audio_beos"
1235
audio_beos_outdev_extralibs="-lmedia -lbe"
1236
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1237
dv1394_indev_deps="dv1394 dv_demuxer"
1238
jack_indev_deps="jack_jack_h"
1239
jack_indev_extralibs="-ljack"
1240
libdc1394_indev_deps="libdc1394"
1241
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1242
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1243
v4l_indev_deps="linux_videodev_h"
1244
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1245
vfwcap_indev_deps="capCreateCaptureWindow"
1246
vfwcap_indev_extralibs="-lvfw32"
1247
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1248
x11_grab_device_indev_extralibs="-lX11 -lXext"
1249

    
1250
# protocols
1251
gopher_protocol_deps="network"
1252
http_protocol_deps="network"
1253
rtmp_protocol_deps="tcp_protocol"
1254
rtp_protocol_deps="udp_protocol"
1255
tcp_protocol_deps="network"
1256
udp_protocol_deps="network"
1257

    
1258
# filters
1259
movie_filter_deps="avfilter_lavf"
1260

    
1261
# programs
1262
ffplay_deps="sdl"
1263
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1264
ffserver_extralibs='$ldl'
1265

    
1266
doc_deps="texi2html"
1267

    
1268
# default parameters
1269

    
1270
logfile="config.err"
1271

    
1272
# installation paths
1273
prefix_default="/usr/local"
1274
bindir_default='${prefix}/bin'
1275
datadir_default='${prefix}/share/ffmpeg'
1276
incdir_default='${prefix}/include'
1277
libdir_default='${prefix}/lib'
1278
mandir_default='${prefix}/share/man'
1279
shlibdir_default="$libdir_default"
1280

    
1281
# toolchain
1282
ar="ar"
1283
cc_default="gcc"
1284
cc_version=\"unknown\"
1285
host_cc_default="gcc"
1286
ln_s="ln -sf"
1287
nm_default="nm"
1288
objformat="elf"
1289
ranlib="ranlib"
1290
strip="strip"
1291
yasmexe="yasm"
1292

    
1293
# machine
1294
arch=$(uname -m)
1295
cpu="generic"
1296

    
1297
# OS
1298
target_os=$(tolower $(uname -s))
1299
host_os=$target_os
1300

    
1301
# configurable options
1302
enable debug
1303
enable doc
1304
enable fastdiv
1305
enable ffmpeg
1306
enable ffplay
1307
enable ffserver
1308
enable ipv6
1309
enable mpegaudio_hp
1310
enable network
1311
enable optimizations
1312
enable protocols
1313
enable static
1314
enable stripping
1315
enable swscale_alpha
1316

    
1317
# build settings
1318
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1319
FFSERVERLDFLAGS=-Wl,-E
1320
LIBPREF="lib"
1321
LIBSUF=".a"
1322
FULLNAME='$(NAME)$(BUILDSUF)'
1323
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1324
SLIBPREF="lib"
1325
SLIBSUF=".so"
1326
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1327
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1328
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1329
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1330

    
1331
CC_O='-o $@'
1332

    
1333
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1334
host_libs='-lm'
1335

    
1336
target_path='.'
1337

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

    
1343
# find source path
1344
source_path="$(dirname "$0")"
1345
enable source_path_used
1346
if test -f configure; then
1347
    source_path="$(pwd)"
1348
    disable source_path_used
1349
else
1350
    source_path="$(cd "$source_path"; pwd)"
1351
    echo "$source_path" | grep -q '[[:blank:]]' &&
1352
        die "Out of tree builds are impossible with whitespace in source path."
1353
    test -e "$source_path/config.h" &&
1354
        die "Out of tree builds are impossible with config.h in source dir."
1355
fi
1356

    
1357
for v in "$@"; do
1358
    r=${v#*=}
1359
    l=${v%"$r"}
1360
    r=$(sh_quote "$r")
1361
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1362
done
1363

    
1364
find_things(){
1365
    thing=$1
1366
    pattern=$2
1367
    file=$source_path/$3
1368
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1369
}
1370

    
1371
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1372
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1373
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1374
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1375
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1376
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1377
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1378
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1379
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1380
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1381
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1382

    
1383
enable $ARCH_EXT_LIST \
1384
       $DECODER_LIST \
1385
       $ENCODER_LIST \
1386
       $HWACCEL_LIST \
1387
       $PARSER_LIST \
1388
       $BSF_LIST \
1389
       $DEMUXER_LIST \
1390
       $MUXER_LIST \
1391
       $FILTER_LIST \
1392
       $PROTOCOL_LIST \
1393
       $INDEV_LIST \
1394
       $OUTDEV_LIST \
1395

    
1396
die_unknown(){
1397
    echo "Unknown option \"$1\"."
1398
    echo "See $0 --help for available options."
1399
    exit 1
1400
}
1401

    
1402
show_list() {
1403
    suffix=_$1
1404
    shift
1405
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1406
    exit 0
1407
}
1408

    
1409
for opt do
1410
    optval="${opt#*=}"
1411
    case "$opt" in
1412
    --extra-ldflags=*) add_ldflags $optval
1413
    ;;
1414
    --extra-libs=*) add_extralibs $optval
1415
    ;;
1416
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1417
    ;;
1418
    --enable-debug=*) debuglevel="$optval"
1419
    ;;
1420
    --enable-*=*|--disable-*=*)
1421
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1422
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1423
    eval list=\$$(toupper $thing)_LIST
1424
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1425
    $action $(filter "$name" $list)
1426
    ;;
1427
    --enable-?*|--disable-?*)
1428
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1429
    if is_in $option $COMPONENT_LIST; then
1430
        test $action = disable && action=unset
1431
        eval $action \$$(toupper ${option%s})_LIST
1432
    elif is_in $option $CMDLINE_SELECT; then
1433
        $action $option
1434
    else
1435
        die_unknown $opt
1436
    fi
1437
    ;;
1438
    --list-*)
1439
        NAME="${opt#--list-}"
1440
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1441
        NAME=${NAME%s}
1442
        eval show_list $NAME \$$(toupper $NAME)_LIST
1443
    ;;
1444
    --help|-h) show_help
1445
    ;;
1446
    *)
1447
    optname="${opt%%=*}"
1448
    optname="${optname#--}"
1449
    optname=$(echo "$optname" | sed 's/-/_/g')
1450
    if is_in $optname $CMDLINE_SET; then
1451
        eval $optname='$optval'
1452
    elif is_in $optname $CMDLINE_APPEND; then
1453
        append $optname "$optval"
1454
    else
1455
         die_unknown $opt
1456
    fi
1457
    ;;
1458
    esac
1459
done
1460

    
1461
disabled logging && logfile=/dev/null
1462

    
1463
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1464
set >> $logfile
1465

    
1466
test -n "$cross_prefix" && enable cross_compile
1467

    
1468
ar="${cross_prefix}${ar}"
1469
cc_default="${cross_prefix}${cc_default}"
1470
nm_default="${cross_prefix}${nm_default}"
1471
ranlib="${cross_prefix}${ranlib}"
1472
strip="${cross_prefix}${strip}"
1473

    
1474
sysinclude_default="${sysroot}/usr/include"
1475

    
1476
set_default cc nm sysinclude
1477
enabled cross_compile || host_cc_default=$cc
1478
set_default host_cc
1479

    
1480
exesuf() {
1481
    case $1 in
1482
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1483
    esac
1484
}
1485

    
1486
EXESUF=$(exesuf $target_os)
1487
HOSTEXESUF=$(exesuf $host_os)
1488

    
1489
# set temporary file name
1490
: ${TMPDIR:=$TEMPDIR}
1491
: ${TMPDIR:=$TMP}
1492
: ${TMPDIR:=/tmp}
1493

    
1494
if ! check_cmd type mktemp; then
1495
    # simple replacement for missing mktemp
1496
    # NOT SAFE FOR GENERAL USE
1497
    mktemp(){
1498
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1499
    }
1500
fi
1501

    
1502
tmpfile(){
1503
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1504
        (set -C; exec > $tmp) 2>/dev/null ||
1505
        die "Unable to create temporary file in $TMPDIR."
1506
    append TMPFILES $tmp
1507
    eval $1=$tmp
1508
}
1509

    
1510
trap 'rm -f -- $TMPFILES' EXIT
1511
trap exit HUP INT TERM
1512

    
1513
tmpfile TMPC  .c
1514
tmpfile TMPE  $EXESUF
1515
tmpfile TMPH  .h
1516
tmpfile TMPO  .o
1517
tmpfile TMPS  .S
1518
tmpfile TMPSH .sh
1519

    
1520
unset -f mktemp
1521

    
1522
# make sure we can execute files in $TMPDIR
1523
cat > $TMPSH 2>> $logfile <<EOF
1524
#! /bin/sh
1525
EOF
1526
chmod +x $TMPSH >> $logfile 2>&1
1527
if ! $TMPSH >> $logfile 2>&1; then
1528
    cat <<EOF
1529
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1530
variable to another directory and make sure that it is not mounted noexec.
1531
EOF
1532
    die "Sanity test failed."
1533
fi
1534

    
1535
filter_cflags=echo
1536
filter_cppflags=echo
1537
filter_asflags=echo
1538

    
1539
if   $cc -v 2>&1 | grep -qi ^gcc; then
1540
    cc_type=gcc
1541
    cc_version=__VERSION__
1542
    if ! $cc -dumpversion | grep -q '^2\.'; then
1543
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1544
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1545
    fi
1546
elif $cc --version 2>/dev/null | grep -q Intel; then
1547
    cc_type=icc
1548
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1549
    CC_DEPFLAGS='-MMD'
1550
    AS_DEPFLAGS='-MMD'
1551
elif $cc -v 2>&1 | grep -q xlc; then
1552
    cc_type=xlc
1553
    cc_version="AV_STRINGIFY(__IBMC__)"
1554
elif $cc -V 2>/dev/null | grep -q Compaq; then
1555
    cc_type=ccc
1556
    cc_version="AV_STRINGIFY(__DECC_VER)"
1557
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1558
    debuglevel=3
1559
    add_ldflags -Wl,-z,now # calls to libots crash without this
1560
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1561
    test -d "$sysroot" || die "No valid sysroot specified."
1562
    cc_type=armcc
1563
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1564
    armcc_conf="$PWD/armcc.conf"
1565
    $cc --arm_linux_configure                 \
1566
        --arm_linux_config_file="$armcc_conf" \
1567
        --configure_sysroot="$sysroot"        \
1568
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1569
        die "Error creating armcc configuration file."
1570
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1571
    as_default="${cross_prefix}gcc"
1572
    CC_DEPFLAGS='-MMD'
1573
    AS_DEPFLAGS='-MMD'
1574
elif $cc -version 2>/dev/null | grep -q TMS470; then
1575
    cc_type=tms470
1576
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1577
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1578
    CC_O='-fr=$(@D)'
1579
    as_default="${cross_prefix}gcc"
1580
    ld_default="${cross_prefix}gcc"
1581
    TMPO=$(basename $TMPC .c).o
1582
    append TMPFILES $TMPO
1583
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1584
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1585
    AS_DEPFLAGS='-MMD'
1586
    filter_cflags=tms470_flags
1587
    tms470_flags(){
1588
        for flag; do
1589
            case $flag in
1590
                -march=*|-mcpu=*)
1591
                    case "${flag#*=}" in
1592
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1593
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1594
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1595
                        armv6*|arm11*)          echo -mv=6   ;;
1596
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1597
                                                echo -mv=5e  ;;
1598
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1599
                    esac
1600
                    ;;
1601
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1602
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1603
                -msoft-float)   echo --float_support=vfplib       ;;
1604
                -Os)            echo -O3 -mf=2                    ;;
1605
                -O[0-3])        echo $flag -mf=5                  ;;
1606
                -g)             echo -g -mn                       ;;
1607
            esac
1608
        done
1609
    }
1610
elif $cc -v 2>&1 | grep -q clang; then
1611
    cc_type=clang
1612
    cc_version=__VERSION__
1613
    CC_DEPFLAGS='-MMD'
1614
    AS_DEPFLAGS='-MMD'
1615
elif $cc -V 2>&1 | grep -q Sun; then
1616
    cc_type=suncc
1617
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1618
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\\\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1619
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1620
fi
1621

    
1622
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1623

    
1624
: ${as_default:=$cc}
1625
: ${dep_cc_default:=$cc}
1626
: ${ld_default:=$cc}
1627
set_default as dep_cc ld
1628

    
1629
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1630
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1631

    
1632
add_cflags $extra_cflags
1633
add_asflags $extra_cflags
1634

    
1635
if test -n "$sysroot"; then
1636
    case "$cc_type" in
1637
        gcc)
1638
            add_cppflags --sysroot="$sysroot"
1639
            add_ldflags --sysroot="$sysroot"
1640
        ;;
1641
        tms470)
1642
            add_cppflags -I"$sysinclude"
1643
            add_ldflags  --sysroot="$sysroot"
1644
        ;;
1645
        clang)
1646
            add_cppflags -isysroot="$sysroot"
1647
            add_ldflags -isysroot="$sysroot"
1648
        ;;
1649
    esac
1650
fi
1651

    
1652
if test "$cpu" = host; then
1653
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1654

    
1655
    case "$cc_type" in
1656
        gcc)
1657
            check_native(){
1658
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1659
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1660
            }
1661
            cpu=$(check_native -march || check_native -mcpu)
1662
        ;;
1663
    esac
1664

    
1665
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1666
fi
1667

    
1668
# Add processor-specific flags
1669
case $cpu in
1670
    601|ppc601|PowerPC601)
1671
        cpuflags="-mcpu=601"
1672
    ;;
1673
    603*|ppc603*|PowerPC603*)
1674
        cpuflags="-mcpu=603"
1675
    ;;
1676
    604*|ppc604*|PowerPC604*)
1677
        cpuflags="-mcpu=604"
1678
    ;;
1679
    G3|g3|75*|ppc75*|PowerPC75*)
1680
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1681
    ;;
1682
    G4|g4|745*|ppc745*|PowerPC745*)
1683
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1684
    ;;
1685
    74*|ppc74*|PowerPC74*)
1686
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1687
    ;;
1688
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1689
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1690
    ;;
1691
    Cell|CELL|cell)
1692
        cpuflags="-mcpu=cell"
1693
        enable ldbrx
1694
    ;;
1695
    # targets that do NOT support conditional mov (cmov)
1696
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1697
        cpuflags="-march=$cpu"
1698
        disable cmov
1699
    ;;
1700
    # targets that do support conditional mov (cmov)
1701
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1702
        cpuflags="-march=$cpu"
1703
        enable cmov
1704
        enable fast_cmov
1705
    ;;
1706
    # targets that do support conditional mov but on which it's slow
1707
    pentium4|pentium4m|prescott|nocona)
1708
        cpuflags="-march=$cpu"
1709
        enable cmov
1710
        disable fast_cmov
1711
    ;;
1712
    sparc64)
1713
        cpuflags="-mcpu=v9"
1714
    ;;
1715
    arm11*|cortex*)
1716
        cpuflags="-mcpu=$cpu"
1717
        enable fast_unaligned
1718
    ;;
1719
    armv[67]*)
1720
        cpuflags="-march=$cpu"
1721
        enable fast_unaligned
1722
    ;;
1723
    armv*)
1724
        cpuflags="-march=$cpu"
1725
    ;;
1726
    arm*)
1727
        cpuflags="-mcpu=$cpu"
1728
    ;;
1729
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1730
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1731
    ;;
1732
    bf*)
1733
        cpuflags="-mcpu=$cpu"
1734
    ;;
1735
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1736
        cpuflags="-march=$cpu"
1737
    ;;
1738
    ap7[02]0[0-2])
1739
        subarch="avr32_ap"
1740
        cpuflags="-mpart=$cpu"
1741
    ;;
1742
    ap)
1743
        subarch="avr32_ap"
1744
        cpuflags="-march=$cpu"
1745
    ;;
1746
    uc3[ab]*)
1747
        subarch="avr32_uc"
1748
        cpuflags="-mcpu=$cpu"
1749
    ;;
1750
    uc)
1751
        subarch="avr32_uc"
1752
        cpuflags="-march=$cpu"
1753
    ;;
1754
    generic)
1755
    ;;
1756
    *)
1757
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1758
    ;;
1759
esac
1760

    
1761
add_cflags $cpuflags
1762
add_asflags $cpuflags
1763

    
1764
# compiler sanity check
1765
check_exec <<EOF
1766
int main(void){ return 0; }
1767
EOF
1768
if test "$?" != 0; then
1769
    echo "$cc is unable to create an executable file."
1770
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1771
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1772
        echo "Only do this if you know what cross compiling means."
1773
    fi
1774
    die "C compiler test failed."
1775
fi
1776

    
1777
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1778
check_cflags -std=c99
1779
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1780
#include <stdlib.h>
1781
EOF
1782
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1783
#include <stdlib.h>
1784
EOF
1785

    
1786
check_host_cflags -std=c99
1787

    
1788
case "$arch" in
1789
    alpha)
1790
        arch="alpha"
1791
        enable fast_64bit
1792
        check_cflags -mieee
1793
        spic=$shared
1794
    ;;
1795
    arm|armv[4567]*l)
1796
        arch="arm"
1797
    ;;
1798
    avr32)
1799
    ;;
1800
    bfin)
1801
        arch="bfin"
1802
    ;;
1803
    ia64)
1804
        arch="ia64"
1805
        enable fast_64bit
1806
        spic=$shared
1807
        # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1808
        enabled shared && enable hardcoded_tables
1809
    ;;
1810
    m68k)
1811
        arch="m68k"
1812
    ;;
1813
    mips|mipsel|IP*)
1814
        arch="mips"
1815
        spic=$shared
1816
    ;;
1817
    mips64)
1818
        arch="mips"
1819
        subarch="mips64"
1820
        enable fast_64bit
1821
        spic=$shared
1822
    ;;
1823
    parisc|hppa)
1824
        arch="parisc"
1825
        spic=$shared
1826
    ;;
1827
    parisc64|hppa64)
1828
        arch="parisc"
1829
        enable fast_64bit
1830
        spic=$shared
1831
    ;;
1832
    "Power Macintosh"|ppc|powerpc)
1833
        arch="ppc"
1834
        enable fast_unaligned
1835
    ;;
1836
    ppc64)
1837
        arch="ppc"
1838
        subarch="ppc64"
1839
        enable fast_64bit
1840
        enable fast_unaligned
1841
    ;;
1842
    s390|s390x)
1843
        arch="s390"
1844
    ;;
1845
    sh4|sh)
1846
        arch="sh4"
1847
    ;;
1848
    sparc)
1849
        arch="sparc"
1850
        spic=$shared
1851
    ;;
1852
    sun4u|sparc64)
1853
        arch="sparc"
1854
        subarch="sparc64"
1855
        enable fast_64bit
1856
        spic=$shared
1857
    ;;
1858
    i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1859
        arch="x86"
1860
        subarch="x86_32"
1861
        enable fast_unaligned
1862
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1863
        int test[sizeof(char*) - 7];
1864
EOF
1865
        if test "$subarch" = "x86_64"; then
1866
            enable cmov
1867
            enable fast_cmov
1868
        fi
1869
    ;;
1870
    *)
1871
        arch="unknown"
1872
    ;;
1873
esac
1874

    
1875
enable $arch $subarch
1876
enabled spic && enable pic
1877

    
1878
# OS specific
1879
case $target_os in
1880
    beos|haiku|zeta)
1881
        prefix_default="$HOME/config"
1882
        # helps building libavcodec
1883
        add_cppflags -DPIC
1884
        add_cflags -fomit-frame-pointer
1885
        # 3 gcc releases known for BeOS, each with ugly bugs
1886
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1887
        case "$gcc_version" in
1888
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1889
            disable mmx
1890
            ;;
1891
          *20010315*) echo "BeBits gcc"
1892
            add_cflags -fno-expensive-optimizations
1893
            ;;
1894
        esac
1895
        SHFLAGS=-nostart
1896
        # enable BeOS things
1897
        enable audio_beos
1898
        # no need for libm, but the inet stuff
1899
        # Check for BONE
1900
        # XXX: actually should check for NOT net_server
1901
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1902
            network_extralibs="-lbind -lsocket"
1903
        else
1904
            enable beos_netserver
1905
            network_extralibs="-lnet"
1906
        fi ;;
1907
    sunos)
1908
        FFSERVERLDFLAGS=""
1909
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1910
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1911
        network_extralibs="-lsocket -lnsl"
1912
        add_cppflags -D__EXTENSIONS__
1913
        ;;
1914
    netbsd)
1915
        oss_indev_extralibs="-lossaudio"
1916
        oss_outdev_extralibs="-lossaudio"
1917
        ;;
1918
    openbsd)
1919
        enable malloc_aligned
1920
        enable pic
1921
        SHFLAGS='-shared'
1922
        oss_indev_extralibs="-lossaudio"
1923
        oss_outdev_extralibs="-lossaudio"
1924
        ;;
1925
    freebsd|dragonfly)
1926
        enable malloc_aligned
1927
        ;;
1928
    bsd/os)
1929
        osextralibs="-lpoll -lgnugetopt"
1930
        strip="strip -d"
1931
        ;;
1932
    darwin)
1933
        enable malloc_aligned
1934
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1935
        strip="strip -x"
1936
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1937
        SLIBSUF=".dylib"
1938
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1939
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1940
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1941
        objformat="macho"
1942
        enabled x86_64 && objformat="macho64"
1943
        enabled_any pic shared ||
1944
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1945
        ;;
1946
    mingw32*)
1947
        if test $target_os = "mingw32ce"; then
1948
            disable network
1949
        else
1950
            target_os=mingw32
1951
        fi
1952
        LIBTARGET=i386
1953
        if enabled x86_64; then
1954
            enable malloc_aligned
1955
            LIBTARGET=x64
1956
        elif enabled arm; then
1957
            LIBTARGET=arm
1958
        fi
1959
        shlibdir_default="$bindir_default"
1960
        disable ffserver
1961
        SLIBPREF=""
1962
        SLIBSUF=".dll"
1963
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1964
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1965
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1966
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1967
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1968
            install -d "$(LIBDIR)"; \
1969
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1970
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1971
        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'
1972
        objformat="win32"
1973
        enable dos_paths
1974
        check_cflags -fno-common
1975
        if ! enabled x86_64; then
1976
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1977
                die "ERROR: MinGW runtime version must be >= 3.15."
1978
            enabled_any avisynth vfwcap_indev &&
1979
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1980
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1981
            fi
1982
        ;;
1983
    cygwin*)
1984
        target_os=cygwin
1985
        shlibdir_default="$bindir_default"
1986
        SLIBPREF="cyg"
1987
        SLIBSUF=".dll"
1988
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1989
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1990
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1991
        objformat="win32"
1992
        enable dos_paths
1993
        check_cflags -fno-common
1994
        ;;
1995
    *-dos|freedos|opendos)
1996
        disable ffplay ffserver
1997
        disable $INDEV_LIST $OUTDEV_LIST
1998
        network_extralibs="-lsocket"
1999
        objformat="coff"
2000
        enable dos_paths
2001
        ;;
2002
    linux)
2003
        enable dv1394
2004
        ;;
2005
    irix*)
2006
        target_os=irix
2007
        ranlib="echo ignoring ranlib"
2008
        ;;
2009
    os/2*)
2010
        strip="lxlite"
2011
        ln_s="cp -f"
2012
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2013
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2014
        FFSERVERLDFLAGS=""
2015
        LIBSUF="_s.a"
2016
        SLIBPREF=""
2017
        SLIBSUF=".dll"
2018
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2019
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2020
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2021
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2022
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2023
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2024
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2025
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2026
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2027
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2028
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2029
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2030
        enable dos_paths
2031
        ;;
2032
    gnu/kfreebsd)
2033
        ;;
2034
    gnu)
2035
        ;;
2036

    
2037
    *)
2038
        die "Unknown OS '$target_os'."
2039
        ;;
2040
esac
2041

    
2042
set_default $PATHS_LIST
2043

    
2044
add_extralibs $osextralibs
2045

    
2046
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2047
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2048

    
2049
# we need to build at least one lib type
2050
if ! enabled_any static shared; then
2051
    cat <<EOF
2052
At least one library type must be built.
2053
Specify --enable-static to build the static libraries or --enable-shared to
2054
build the shared libraries as well. To only build the shared libraries specify
2055
--disable-static in addition to --enable-shared.
2056
EOF
2057
    exit 1;
2058
fi
2059

    
2060
disabled static && LIBNAME=""
2061

    
2062
if enabled_any libfaad libfaadbin ; then
2063
    if check_header faad.h; then
2064
        check_cc <<EOF
2065
#include <faad.h>
2066
#ifndef FAAD2_VERSION
2067
ok faad1
2068
#endif
2069
int main(void) { return 0; }
2070
EOF
2071
        test $? = 0 && enable libfaad2
2072
    else
2073
        die "FAAD test failed."
2074
    fi
2075
fi
2076

    
2077

    
2078
die_license_disabled() {
2079
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2080
}
2081

    
2082
die_license_disabled gpl libfaad2
2083
die_license_disabled gpl libx264
2084
die_license_disabled gpl libxvid
2085
die_license_disabled gpl postproc
2086
die_license_disabled gpl x11grab
2087

    
2088
die_license_disabled nonfree libfaac
2089

    
2090
die_license_disabled version3 libopencore_amrnb
2091
die_license_disabled version3 libopencore_amrwb
2092

    
2093
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2094

    
2095
check_deps $ARCH_EXT_LIST
2096

    
2097
disabled optimizations || check_cflags -fomit-frame-pointer
2098

    
2099
enable_pic() {
2100
    enable pic
2101
    add_cppflags -DPIC
2102
    add_cflags   -fPIC
2103
    add_asflags  -fPIC
2104
}
2105

    
2106
enabled pic && enable_pic
2107

    
2108
check_cc <<EOF || die "Symbol mangling check failed."
2109
int ff_extern;
2110
EOF
2111
sym=$($nm -P -g $TMPO | grep ff_extern)
2112
extern_prefix=${sym%%ff_extern*}
2113

    
2114
check_cc <<EOF && enable inline_asm
2115
void foo(void) { __asm__ volatile ("" ::); }
2116
EOF
2117

    
2118
_restrict=
2119
for restrict_keyword in restrict __restrict__ __restrict; do
2120
    check_cc <<EOF && _restrict=$restrict_keyword && break
2121
void foo(char * $restrict_keyword p);
2122
EOF
2123
done
2124

    
2125
check_cc <<EOF && enable attribute_packed
2126
struct { int x; } __attribute__((packed)) x;
2127
EOF
2128

    
2129
check_cc <<EOF || die "endian test failed"
2130
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2131
EOF
2132
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2133

    
2134
if enabled arm; then
2135

    
2136
    check_cflags -marm
2137

    
2138
    check_ld <<EOF && enable vfp_args
2139
__asm__ (".eabi_attribute 28, 1");
2140
int main(void) { return 0; }
2141
EOF
2142

    
2143
    # We have to check if pld is a nop and disable it.
2144
    check_asm pld '"pld [r0]"'
2145

    
2146
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2147
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2148
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2149
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2150
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2151
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2152

    
2153
    enabled_all armv6t2 shared !pic && enable_pic
2154

    
2155
elif enabled mips; then
2156

    
2157
    check_asm loongson '"dmult.g $1, $2, $3"'
2158
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2159

    
2160
elif enabled ppc; then
2161

    
2162
    check_asm dcbzl     '"dcbzl 0, 1"'
2163
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2164
    check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2165

    
2166
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2167
    if enabled altivec; then
2168
        check_cflags -maltivec -mabi=altivec &&
2169
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2170
        check_cflags -faltivec
2171

    
2172
        # check if our compiler supports Motorola AltiVec C API
2173
        check_cc <<EOF || disable altivec
2174
$inc_altivec_h
2175
int main(void) {
2176
    vector signed int v1, v2, v3;
2177
    v1 = vec_add(v2,v3);
2178
    return 0;
2179
}
2180
EOF
2181

    
2182
        # check if our compiler supports braces for vector declarations
2183
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2184
$inc_altivec_h
2185
int main (void) { (vector int) {1}; return 0; }
2186
EOF
2187
    fi
2188

    
2189
elif enabled sparc; then
2190

    
2191
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2192
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2193

    
2194
elif enabled x86; then
2195

    
2196
    # check whether EBP is available on x86
2197
    # As 'i' is stored on the stack, this program will crash
2198
    # if the base pointer is used to access it because the
2199
    # base pointer is cleared in the inline assembly code.
2200
    check_exec_crash <<EOF && enable ebp_available
2201
    volatile int i=0;
2202
    __asm__ volatile (
2203
        "xorl %%ebp, %%ebp"
2204
    ::: "%ebp");
2205
    return i;
2206
EOF
2207

    
2208
    # check whether EBX is available on x86
2209
    check_asm ebx_available '""::"b"(0)' &&
2210
        check_asm ebx_available '"":::"%ebx"'
2211

    
2212
    # check whether more than 10 operands are supported
2213
    check_cc <<EOF && enable ten_operands
2214
int main(void) {
2215
    int x=0;
2216
    __asm__ volatile(
2217
        ""
2218
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2219
    );
2220
    return 0;
2221
}
2222
EOF
2223

    
2224
    # check whether binutils is new enough to compile SSSE3/MMX2
2225
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2226
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2227

    
2228
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2229

    
2230
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2231
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2232
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2233
    case "$objformat" in
2234
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2235
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2236
        *)                    append YASMFLAGS "-DPREFIX"  ;;
2237
    esac
2238
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2239

    
2240
fi
2241

    
2242
if check_func dlopen; then
2243
    ldl=
2244
elif check_func dlopen -ldl; then
2245
    ldl=-ldl
2246
fi
2247

    
2248
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2249
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2250

    
2251
check_func  fork
2252
check_func  gethrtime
2253
check_func  getrusage
2254
check_func  inet_aton $network_extralibs
2255
check_func  isatty
2256
check_func  memalign
2257
check_func  mkstemp
2258
check_func  posix_memalign
2259
check_func_headers io.h setmode
2260
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2261
check_func_headers windows.h GetProcessTimes
2262
check_func_headers windows.h VirtualAlloc
2263

    
2264
check_header conio.h
2265
check_header dlfcn.h
2266
check_header malloc.h
2267
check_header poll.h
2268
check_header sys/mman.h
2269
check_header sys/resource.h
2270
check_header sys/select.h
2271
check_header termios.h
2272
check_header vdpau/vdpau.h
2273
check_header vdpau/vdpau_x11.h
2274
check_header X11/extensions/XvMClib.h
2275

    
2276
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2277
     enabled_any $need_memalign ; then
2278
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2279
fi
2280

    
2281
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2282
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2283

    
2284
# check for some common methods of building with pthread support
2285
# do this before the optional library checks as some of them require pthreads
2286
if enabled pthreads; then
2287
    if check_func pthread_create; then
2288
        :
2289
    elif check_func pthread_create -pthread; then
2290
        add_cflags -pthread
2291
        add_extralibs -pthread
2292
    elif check_func pthread_create -pthreads; then
2293
        add_cflags -pthreads
2294
        add_extralibs -pthreads
2295
    elif check_func pthread_create -lpthreadGC2; then
2296
        add_extralibs -lpthreadGC2
2297
    elif ! check_lib pthread.h pthread_create -lpthread; then
2298
        die "ERROR: can't find pthreads library"
2299
    fi
2300
fi
2301

    
2302
for thread in $THREADS_LIST; do
2303
    if enabled $thread; then
2304
        test -n "$thread_type" &&
2305
            die "ERROR: Only one thread type must be selected." ||
2306
            thread_type="$thread"
2307
    fi
2308
done
2309

    
2310
check_lib math.h sin -lm
2311
check_lib va/va.h vaInitialize -lva
2312

    
2313
check_func llrint
2314
check_func log2
2315
check_func lrint
2316
check_func lrintf
2317
check_func round
2318
check_func roundf
2319
check_func truncf
2320

    
2321
# these are off by default, so fail if requested and not available
2322
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2323
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2324
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2325
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2326
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2327
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2328
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2329
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2330
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2331
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2332
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2333
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2334
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2335
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2336
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2337
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2338
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2339
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2340
                      { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2341
                        die "ERROR: libx264 version must be >= 0.78."; }
2342
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2343
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2344

    
2345
# libdc1394 check
2346
if enabled libdc1394; then
2347
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2348
        enable libdc1394_2; } ||
2349
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2350
        enable libdc1394_1; } ||
2351
    die "ERROR: No version of libdc1394 found "
2352
fi
2353

    
2354
disable sdl_too_old
2355
disable sdl
2356
SDL_CONFIG="${cross_prefix}sdl-config"
2357
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2358
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2359
    sdl_libs=$("${SDL_CONFIG}" --libs)
2360
    temp_cflags $sdl_cflags
2361
    temp_extralibs $sdl_libs
2362
    if check_lib2 SDL.h SDL_Init; then
2363
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2364
        if test "$_sdlversion" -lt 121 ; then
2365
            enable sdl_too_old
2366
        else
2367
            enable sdl
2368
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2369
#include <SDL.h>
2370
int main(int argc, char **argv){
2371
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2372
    int w = vi->current_w;
2373
    return 0;
2374
}
2375
EOF
2376
        fi
2377
    fi
2378
    restore_flags
2379
fi
2380

    
2381
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2382

    
2383
if enabled network; then
2384
    check_type "sys/types.h sys/socket.h" socklen_t
2385
    # Prefer arpa/inet.h over winsock2
2386
    if check_header arpa/inet.h ; then
2387
        check_func closesocket
2388
    elif check_header winsock2.h ; then
2389
        check_func_headers winsock2.h closesocket -lws2 && \
2390
            network_extralibs="-lws2" || \
2391
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2392
            network_extralibs="-lws2_32"; }
2393
        check_type ws2tcpip.h socklen_t
2394
    else
2395
        disable network
2396
    fi
2397
fi
2398

    
2399
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2400
#include <sys/types.h>
2401
#include <sys/socket.h>
2402
#include <netinet/in.h>
2403
#include <netdb.h>
2404
int main(void) {
2405
    struct sockaddr_storage saddr;
2406
    struct ipv6_mreq mreq6;
2407
    getaddrinfo(0,0,0,0);
2408
    getnameinfo(0,0,0,0,0,0,0);
2409
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2410
}
2411
EOF
2412

    
2413
check_header linux/videodev.h
2414
check_header linux/videodev2.h
2415
check_header sys/videoio.h
2416

    
2417
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2418

    
2419
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2420
{ check_header dev/bktr/ioctl_meteor.h &&
2421
  check_header dev/bktr/ioctl_bt848.h; } ||
2422
{ check_header machine/ioctl_meteor.h &&
2423
  check_header machine/ioctl_bt848.h; } ||
2424
{ check_header dev/video/meteor/ioctl_meteor.h &&
2425
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2426
check_header dev/ic/bt8xx.h
2427

    
2428
check_header sys/soundcard.h
2429
check_header soundcard.h
2430

    
2431
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2432

    
2433
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2434

    
2435
enabled x11grab                         &&
2436
check_header X11/Xlib.h                 &&
2437
check_header X11/extensions/XShm.h      &&
2438
check_func XOpenDisplay -lX11           &&
2439
check_func XShmCreateImage -lX11 -lXext
2440

    
2441
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2442

    
2443
# add some useful compiler flags if supported
2444
check_cflags -Wdeclaration-after-statement
2445
check_cflags -Wall
2446
check_cflags -Wno-switch
2447
check_cflags -Wdisabled-optimization
2448
check_cflags -Wpointer-arith
2449
check_cflags -Wredundant-decls
2450
check_cflags -Wno-pointer-sign
2451
check_cflags -Wcast-qual
2452
check_cflags -Wwrite-strings
2453
check_cflags -Wtype-limits
2454
check_cflags -Wundef
2455
enabled extra_warnings && check_cflags -Winline
2456

    
2457
# add some linker flags
2458
check_ldflags -Wl,--warn-common
2459
check_ldflags -Wl,--as-needed
2460
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'
2461
check_ldflags -Wl,-Bsymbolic
2462

    
2463
if enabled small; then
2464
    check_cflags -Os            # not all compilers support -Os
2465
    optimizations="small"
2466
elif enabled optimizations; then
2467
    if enabled xlc; then
2468
        add_cflags  -O5
2469
        add_ldflags -O5
2470
    elif enabled ccc; then
2471
        add_cflags -fast
2472
    else
2473
        add_cflags -O3
2474
    fi
2475
fi
2476
check_cflags -fno-math-errno
2477
check_cflags -fno-signed-zeros
2478

    
2479
if enabled icc; then
2480
    # Just warnings, no remarks
2481
    check_cflags -w1
2482
    # -wd: Disable following warnings
2483
    # 144, 167, 556: -Wno-pointer-sign
2484
    # 10006: ignoring unknown option -fno-signed-zeros
2485
    # 10156: ignoring option '-W'; no argument required
2486
    check_cflags -wd144,167,556,10006,10156
2487
    # 11030: Warning unknown option --as-needed
2488
    # 10156: ignoring option '-export'; no argument required
2489
    check_ldflags -wd10156,11030
2490
    # Allow to compile with optimizations
2491
    check_ldflags -march=$cpu
2492
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2493
    enable ebp_available
2494
elif enabled ccc; then
2495
    # disable some annoying warnings
2496
    add_cflags -msg_disable cvtu32to64
2497
    add_cflags -msg_disable embedcomment
2498
    add_cflags -msg_disable needconstext
2499
    add_cflags -msg_disable nomainieee
2500
    add_cflags -msg_disable ptrmismatch1
2501
    add_cflags -msg_disable unreachcode
2502
elif enabled gcc; then
2503
    check_cflags -fno-tree-vectorize
2504
elif enabled clang; then
2505
    check_cflags -Qunused-arguments
2506
fi
2507

    
2508
if enabled gprof; then
2509
    add_cflags  -p
2510
    add_ldflags -p
2511
fi
2512

    
2513
# Find out if the .align argument is a power of two or not.
2514
check_asm asmalign_pot '".align 3"'
2515

    
2516
enabled_any $DECODER_LIST      && enable decoders
2517
enabled_any $ENCODER_LIST      && enable encoders
2518
enabled_any $HWACCEL_LIST      && enable hwaccels
2519
enabled_any $BSF_LIST          && enable bsfs
2520
enabled_any $DEMUXER_LIST      && enable demuxers
2521
enabled_any $MUXER_LIST        && enable muxers
2522
enabled_any $FILTER_LIST       && enable filters
2523
enabled_any $INDEV_LIST        && enable indevs
2524
enabled_any $OUTDEV_LIST       && enable outdevs
2525
enabled_any $PROTOCOL_LIST     && enable protocols
2526

    
2527
enabled_any $THREADS_LIST      && enable threads
2528

    
2529
check_deps $CONFIG_LIST       \
2530
           $CONFIG_EXTRA      \
2531
           $HAVE_LIST         \
2532
           $DECODER_LIST      \
2533
           $ENCODER_LIST      \
2534
           $HWACCEL_LIST      \
2535
           $PARSER_LIST       \
2536
           $BSF_LIST          \
2537
           $DEMUXER_LIST      \
2538
           $MUXER_LIST        \
2539
           $FILTER_LIST       \
2540
           $INDEV_LIST        \
2541
           $OUTDEV_LIST       \
2542
           $PROTOCOL_LIST     \
2543

    
2544
echo "install prefix            $prefix"
2545
echo "source path               $source_path"
2546
echo "C compiler                $cc"
2547
echo ".align is power-of-two    $asmalign_pot"
2548
echo "ARCH                      $arch ($cpu)"
2549
if test "$build_suffix" != ""; then
2550
    echo "build suffix              $build_suffix"
2551
fi
2552
if test "$extra_version" != ""; then
2553
    echo "version string suffix     $extra_version"
2554
fi
2555
echo "big-endian                ${bigendian-no}"
2556
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2557
if enabled x86; then
2558
    echo "yasm                      ${yasm-no}"
2559
    echo "MMX enabled               ${mmx-no}"
2560
    echo "MMX2 enabled              ${mmx2-no}"
2561
    echo "3DNow! enabled            ${amd3dnow-no}"
2562
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2563
    echo "SSE enabled               ${sse-no}"
2564
    echo "SSSE3 enabled             ${ssse3-no}"
2565
    echo "CMOV enabled              ${cmov-no}"
2566
    echo "CMOV is fast              ${fast_cmov-no}"
2567
    echo "EBX available             ${ebx_available-no}"
2568
    echo "EBP available             ${ebp_available-no}"
2569
    echo "10 operands supported     ${ten_operands-no}"
2570
fi
2571
if enabled arm; then
2572
    echo "ARMv5TE enabled           ${armv5te-no}"
2573
    echo "ARMv6 enabled             ${armv6-no}"
2574
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2575
    echo "ARM VFP enabled           ${armvfp-no}"
2576
    echo "IWMMXT enabled            ${iwmmxt-no}"
2577
    echo "NEON enabled              ${neon-no}"
2578
fi
2579
if enabled mips; then
2580
    echo "MMI enabled               ${mmi-no}"
2581
fi
2582
if enabled ppc; then
2583
    echo "AltiVec enabled           ${altivec-no}"
2584
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2585
    echo "dcbzl available           ${dcbzl-no}"
2586
    echo "performance report        ${powerpc_perf-no}"
2587
fi
2588
if enabled sparc; then
2589
    echo "VIS enabled               ${vis-no}"
2590
fi
2591
echo "gprof enabled             ${gprof-no}"
2592
echo "debug symbols             ${debug-no}"
2593
echo "strip symbols             ${stripping-no}"
2594
echo "optimizations             ${optimizations-no}"
2595
echo "static                    ${static-no}"
2596
echo "shared                    ${shared-no}"
2597
echo "postprocessing support    ${postproc-no}"
2598
echo "new filter support        ${avfilter-no}"
2599
echo "filters using lavformat   ${avfilter_lavf-no}"
2600
echo "network support           ${network-no}"
2601
if enabled network; then
2602
    echo "IPv6 support              ${ipv6-no}"
2603
fi
2604
echo "threading support         ${thread_type-no}"
2605
echo "SDL support               ${sdl-no}"
2606
if enabled sdl_too_old; then
2607
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2608
fi
2609
echo "Sun medialib support      ${mlib-no}"
2610
echo "AVISynth enabled          ${avisynth-no}"
2611
echo "libdc1394 support         ${libdc1394-no}"
2612
echo "libdirac enabled          ${libdirac-no}"
2613
echo "libfaac enabled           ${libfaac-no}"
2614
echo "libfaad enabled           ${libfaad-no}"
2615
echo "libfaad dlopened          ${libfaadbin-no}"
2616
echo "libgsm enabled            ${libgsm-no}"
2617
echo "libmp3lame enabled        ${libmp3lame-no}"
2618
echo "libnut enabled            ${libnut-no}"
2619
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2620
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2621
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2622
echo "libschroedinger enabled   ${libschroedinger-no}"
2623
echo "libspeex enabled          ${libspeex-no}"
2624
echo "libtheora enabled         ${libtheora-no}"
2625
echo "libvorbis enabled         ${libvorbis-no}"
2626
echo "libx264 enabled           ${libx264-no}"
2627
echo "libxvid enabled           ${libxvid-no}"
2628
echo "zlib enabled              ${zlib-no}"
2629
echo "bzlib enabled             ${bzlib-no}"
2630
echo
2631

    
2632
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2633
    echo "Enabled ${type}s:"
2634
    eval list=\$$(toupper $type)_LIST
2635
    for part in $list; do
2636
        enabled $part && echo ${part%_*}
2637
    done | sort | pr -3 -t
2638
    echo
2639
done
2640

    
2641
license="LGPL version 2.1 or later"
2642
if enabled nonfree; then
2643
    license="nonfree and unredistributable"
2644
elif enabled gplv3; then
2645
    license="GPL version 3 or later"
2646
elif enabled lgplv3; then
2647
    license="LGPL version 3 or later"
2648
elif enabled gpl; then
2649
    license="GPL version 2 or later"
2650
fi
2651

    
2652
echo "License: $license"
2653

    
2654
echo "Creating config.mak and config.h..."
2655

    
2656
enabled stripping || strip="echo skipping strip"
2657

    
2658
echo "# Automatically generated by configure - do not modify!" > config.mak
2659
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2660
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2661

    
2662
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2663
echo "prefix=$prefix" >> config.mak
2664
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2665
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2666
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2667
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2668
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2669
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2670
echo "SRC_PATH=\"$source_path\"" >> config.mak
2671
echo "SRC_PATH_BARE=$source_path" >> config.mak
2672
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2673
echo "CC=$cc" >> config.mak
2674
echo "AS=$as" >> config.mak
2675
echo "LD=$ld" >> config.mak
2676
echo "DEPCC=$dep_cc" >> config.mak
2677
echo "YASM=$yasmexe" >> config.mak
2678
echo "AR=$ar" >> config.mak
2679
echo "RANLIB=$ranlib" >> config.mak
2680
echo "LN_S=$ln_s" >> config.mak
2681
echo "STRIP=$strip" >> config.mak
2682
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2683
echo "CFLAGS=$CFLAGS" >> config.mak
2684
echo "ASFLAGS=$ASFLAGS" >> config.mak
2685
echo "CC_O=$CC_O" >> config.mak
2686
echo "LDFLAGS=$LDFLAGS" >> config.mak
2687
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2688
echo "SHFLAGS=$SHFLAGS" >> config.mak
2689
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2690
echo "BUILDSUF=$build_suffix" >> config.mak
2691
echo "FULLNAME=$FULLNAME" >> config.mak
2692
echo "LIBPREF=$LIBPREF" >> config.mak
2693
echo "LIBSUF=$LIBSUF" >> config.mak
2694
echo "LIBNAME=$LIBNAME" >> config.mak
2695
echo "SLIBPREF=$SLIBPREF" >> config.mak
2696
echo "SLIBSUF=$SLIBSUF" >> config.mak
2697
echo "EXESUF=$EXESUF" >> config.mak
2698
echo "EXTRA_VERSION=$extra_version" >> config.mak
2699
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2700
echo "CCDEP=$CCDEP" >> config.mak
2701
echo "ASDEP=$ASDEP" >> config.mak
2702
echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2703
echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2704
echo "HOSTCC=$host_cc" >> config.mak
2705
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2706
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2707
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2708
echo "HOSTLIBS=$host_libs" >> config.mak
2709
echo "TARGET_EXEC=$target_exec" >> config.mak
2710
echo "TARGET_PATH=$target_path" >> config.mak
2711
echo "SDL_LIBS=$sdl_libs" >> config.mak
2712
echo "SDL_CFLAGS=$sdl_cflags" >> config.mak
2713

    
2714
get_version(){
2715
    name=$1
2716
    file=$source_path/$2
2717
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2718
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2719
    lcname=$(tolower $name)
2720
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2721
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2722
}
2723

    
2724
get_version LIBSWSCALE  libswscale/swscale.h
2725
get_version LIBPOSTPROC libpostproc/postprocess.h
2726
get_version LIBAVCODEC  libavcodec/avcodec.h
2727
get_version LIBAVDEVICE libavdevice/avdevice.h
2728
get_version LIBAVFORMAT libavformat/avformat.h
2729
get_version LIBAVUTIL   libavutil/avutil.h
2730
get_version LIBAVFILTER libavfilter/avfilter.h
2731

    
2732
if enabled shared; then
2733
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2734
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2735
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2736
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2737
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2738
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2739
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2740
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2741
fi
2742
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2743
echo "EXTRALIBS=$extralibs" >> config.mak
2744

    
2745
echo "ARCH=$arch" >> config.mak
2746

    
2747

    
2748
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2749
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2750
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2751
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2752
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2753

    
2754
echo "#define CC_TYPE \"$cc_type\"" >> $TMPH
2755
echo "#define CC_VERSION $cc_version" >> $TMPH
2756
echo "#define restrict $_restrict" >> $TMPH
2757

    
2758
if enabled small || disabled optimizations; then
2759
    echo "#define av_always_inline"  >> $TMPH
2760
fi
2761

    
2762

    
2763
# Apparently it's not possible to portably echo a backslash.
2764
enabled asmalign_pot &&
2765
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2766
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2767

    
2768
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2769
echo "#define EXTERN_ASM ${extern_prefix}" >> $TMPH
2770

    
2771
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2772
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2773
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2774
                                      $CONFIG_EXTRA      \
2775
                                      $DECODER_LIST      \
2776
                                      $ENCODER_LIST      \
2777
                                      $HWACCEL_LIST      \
2778
                                      $PARSER_LIST       \
2779
                                      $BSF_LIST          \
2780
                                      $DEMUXER_LIST      \
2781
                                      $MUXER_LIST        \
2782
                                      $FILTER_LIST       \
2783
                                      $PROTOCOL_LIST     \
2784
                                      $INDEV_LIST        \
2785
                                      $OUTDEV_LIST       \
2786

    
2787
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2788
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2789

    
2790
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2791
cmp -s $TMPH config.h &&
2792
    echo "config.h is unchanged" ||
2793
    mv -f $TMPH config.h
2794

    
2795
# build tree in object directory if source path is different from current one
2796
if enabled source_path_used; then
2797
    DIRS="
2798
        doc
2799
        libavcodec
2800
        libavcodec/$arch
2801
        libavdevice
2802
        libavfilter
2803
        libavformat
2804
        libavutil
2805
        libavutil/$arch
2806
        libpostproc
2807
        libswscale
2808
        libswscale/$arch
2809
        tests
2810
        tools
2811
    "
2812
    FILES="
2813
        Makefile
2814
        common.mak
2815
        subdir.mak
2816
        doc/texi2pod.pl
2817
        libavcodec/Makefile
2818
        libavdevice/Makefile
2819
        libavfilter/Makefile
2820
        libavformat/Makefile
2821
        libavutil/Makefile
2822
        libpostproc/Makefile
2823
        libswscale/Makefile
2824
    "
2825
    for dir in $DIRS ; do
2826
        mkdir -p $dir
2827
    done
2828
    for f in $FILES ; do
2829
        $ln_s "$source_path/$f" $f
2830
    done
2831
fi
2832

    
2833

    
2834
# build pkg-config files
2835

    
2836
pkgconfig_generate(){
2837
name=$1
2838
shortname=${name#lib}${build_suffix}
2839
comment=$2
2840
version=$3
2841
libs=$4
2842
requires=$5
2843
cat <<EOF > $name/$name.pc
2844
prefix=$prefix
2845
exec_prefix=\${prefix}
2846
libdir=$libdir
2847
includedir=$incdir
2848

    
2849
Name: $name
2850
Description: $comment
2851
Version: $version
2852
Requires: $(enabled shared || echo $requires)
2853
Requires.private: $(enabled shared && echo $requires)
2854
Conflicts:
2855
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2856
Libs.private: $(enabled shared && echo $libs)
2857
Cflags: -I\${includedir}
2858
EOF
2859
cat <<EOF > $name/$name-uninstalled.pc
2860
prefix=
2861
exec_prefix=
2862
libdir=\${pcfiledir}
2863
includedir=${source_path}
2864

    
2865
Name: $name
2866
Description: $comment
2867
Version: $version
2868
Requires: $requires
2869
Conflicts:
2870
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2871
Cflags: -I\${includedir}
2872
EOF
2873
}
2874

    
2875
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2876
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2877
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2878
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2879
enabled avfilter &&
2880
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2881
enabled postproc &&
2882
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2883
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"