Statistics
| Branch: | Revision:

ffmpeg / configure @ 50a334e4

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

    
236
log(){
237
    echo "$@" >> $logfile
238
}
239

    
240
log_file(){
241
    log BEGIN $1
242
    pr -n -t $1 >> $logfile
243
    log END $1
244
}
245

    
246
echolog(){
247
    log "$@"
248
    echo "$@"
249
}
250

    
251
die(){
252
    echolog "$@"
253
    cat <<EOF
254

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

    
273
# Avoid locale weirdness, besides we really just want to translate ASCII.
274
toupper(){
275
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
276
}
277

    
278
tolower(){
279
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
280
}
281

    
282
c_escape(){
283
    echo "$*" | sed 's/["\\]/\\\0/g'
284
}
285

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

    
292
set_all(){
293
    value=$1
294
    shift
295
    for var in $*; do
296
        eval $var=$value
297
    done
298
}
299

    
300
set_weak(){
301
    value=$1
302
    shift
303
    for var; do
304
        eval : \${$var:=$value}
305
    done
306
}
307

    
308
pushvar(){
309
    for var in $*; do
310
        eval level=\${${var}_level:=0}
311
        eval ${var}_${level}="\$$var"
312
        eval ${var}_level=$(($level+1))
313
    done
314
}
315

    
316
popvar(){
317
    for var in $*; do
318
        eval level=\${${var}_level:-0}
319
        test $level = 0 && continue
320
        eval level=$(($level-1))
321
        eval $var="\${${var}_${level}}"
322
        eval ${var}_level=$level
323
        eval unset ${var}_${level}
324
    done
325
}
326

    
327
enable(){
328
    set_all yes $*
329
}
330

    
331
disable(){
332
    set_all no $*
333
}
334

    
335
enable_weak(){
336
    set_weak yes $*
337
}
338

    
339
disable_weak(){
340
    set_weak no $*
341
}
342

    
343
enable_safe(){
344
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
345
}
346

    
347
disable_safe(){
348
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
349
}
350

    
351
do_enable_deep(){
352
    for var; do
353
        enabled $var && continue
354
        eval sel="\$${var}_select"
355
        eval sgs="\$${var}_suggest"
356
        pushvar var sgs
357
        enable_deep $sel
358
        popvar sgs
359
        enable_deep_weak $sgs
360
        popvar var
361
    done
362
}
363

    
364
enable_deep(){
365
    do_enable_deep $*
366
    enable $*
367
}
368

    
369
enable_deep_weak(){
370
    do_enable_deep $*
371
    enable_weak $*
372
}
373

    
374
enabled(){
375
    test "${1#!}" = "$1" && op== || op=!=
376
    eval test "x\$${1#!}" $op "xyes"
377
}
378

    
379
disabled(){
380
    test "${1#!}" = "$1" && op== || op=!=
381
    eval test "x\$${1#!}" $op "xno"
382
}
383

    
384
enabled_all(){
385
    for opt; do
386
        enabled $opt || return 1
387
    done
388
}
389

    
390
disabled_all(){
391
    for opt; do
392
        disabled $opt || return 1
393
    done
394
}
395

    
396
enabled_any(){
397
    for opt; do
398
        enabled $opt && return 0
399
    done
400
}
401

    
402
disabled_any(){
403
    for opt; do
404
        disabled $opt && return 0
405
    done
406
    return 1
407
}
408

    
409
set_default(){
410
    for opt; do
411
        eval : \${$opt:=\$${opt}_default}
412
    done
413
}
414

    
415
is_in(){
416
    value=$1
417
    shift
418
    for var in $*; do
419
        [ $var = $value ] && return 0
420
    done
421
    return 1
422
}
423

    
424
check_deps(){
425
    for cfg; do
426
        cfg="${cfg#!}"
427
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
428
        disabled ${cfg}_checking && continue
429
        enable ${cfg}_checking
430

    
431
        eval dep_all="\$${cfg}_deps"
432
        eval dep_any="\$${cfg}_deps_any"
433
        eval dep_sel="\$${cfg}_select"
434
        eval dep_sgs="\$${cfg}_suggest"
435

    
436
        pushvar cfg dep_all dep_any dep_sel dep_sgs
437
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
438
        popvar cfg dep_all dep_any dep_sel dep_sgs
439

    
440
        enabled_all  $dep_all || disable $cfg
441
        enabled_any  $dep_any || disable $cfg
442
        disabled_any $dep_sel && disable $cfg
443

    
444
        if enabled $cfg; then
445
            eval dep_extralibs="\$${cfg}_extralibs"
446
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
447
            enable_deep $dep_sel
448
            enable_deep_weak $dep_sgs
449
        fi
450

    
451
        disable ${cfg}_checking
452
    done
453
}
454

    
455
print_config(){
456
    pfx=$1
457
    header=$2
458
    makefile=$3
459
    shift 3
460
    for cfg; do
461
        ucname="$(toupper $cfg)"
462
        if enabled $cfg; then
463
            echo "#define ${pfx}${ucname} 1" >> $header
464
            echo "${pfx}${ucname}=yes" >> $makefile
465
        else
466
            echo "#define ${pfx}${ucname} 0" >> $header
467
        fi
468
    done
469
}
470

    
471
flags_saved(){
472
    (: ${SAVE_CFLAGS?}) 2> /dev/null
473
}
474

    
475
save_flags(){
476
    flags_saved && return
477
    SAVE_CFLAGS="$CFLAGS"
478
    SAVE_LDFLAGS="$LDFLAGS"
479
    SAVE_extralibs="$extralibs"
480
}
481

    
482
restore_flags(){
483
    flags_saved || return
484
    CFLAGS="$SAVE_CFLAGS"
485
    LDFLAGS="$SAVE_LDFLAGS"
486
    extralibs="$SAVE_extralibs"
487
    unset SAVE_CFLAGS
488
    unset SAVE_LDFLAGS
489
    unset SAVE_extralibs
490
}
491

    
492
temp_cflags(){
493
    save_flags
494
    CFLAGS="$CFLAGS $*"
495
}
496

    
497
temp_ldflags(){
498
    save_flags
499
    LDFLAGS="$LDFLAGS $*"
500
}
501

    
502
temp_extralibs(){
503
    save_flags
504
    extralibs="$extralibs $*"
505
}
506

    
507
append(){
508
    var=$1
509
    shift
510
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
511
    eval "$var=\"\$$var $*\""
512
}
513

    
514
add_cppflags(){
515
    append CPPFLAGS "$@"
516
}
517

    
518
add_cflags(){
519
    append CFLAGS "$@"
520
}
521

    
522
add_ldflags(){
523
    append LDFLAGS "$@"
524
}
525

    
526
add_extralibs(){
527
    append extralibs "$@"
528
}
529

    
530
check_cmd(){
531
    log "$@"
532
    "$@" >> $logfile 2>&1
533
}
534

    
535
check_cc(){
536
    log check_cc "$@"
537
    cat > $TMPC
538
    log_file $TMPC
539
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
540
}
541

    
542
check_cpp(){
543
    log check_cpp "$@"
544
    cat > $TMPC
545
    log_file $TMPC
546
    check_cmd $cc $CPPFLAGS "$@" -E -o $TMPO $TMPC
547
}
548

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

    
556
check_asm(){
557
    log check_asm "$@"
558
    name="$1"
559
    asm="$2"
560
    shift 2
561
    check_as "$@" <<EOF && enable $name || disable $name
562
void foo(void){ __asm__ volatile($asm); }
563
EOF
564
}
565

    
566
check_yasm(){
567
    log check_yasm "$@"
568
    echo "$1" > $TMPS
569
    log_file $TMPS
570
    shift 1
571
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
572
}
573

    
574
check_ld(){
575
    log check_ld "$@"
576
    check_cc || return
577
    flags=''
578
    libs=''
579
    for f; do
580
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
581
    done
582
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
583
}
584

    
585
check_cppflags(){
586
    log check_cppflags "$@"
587
    check_cc "$@" <<EOF && add_cppflags "$@"
588
int x;
589
EOF
590
}
591

    
592
check_cflags(){
593
    log check_cflags "$@"
594
    check_cc "$@" <<EOF && add_cflags "$@"
595
int x;
596
EOF
597
}
598

    
599
check_ldflags(){
600
    log check_ldflags "$@"
601
    check_ld "$@" <<EOF && add_ldflags "$@"
602
int main(void){ return 0; }
603
EOF
604
}
605

    
606
check_header(){
607
    log check_header "$@"
608
    header=$1
609
    shift
610
    disable_safe $header
611
    check_cpp "$@" <<EOF && enable_safe $header
612
#include <$header>
613
int x;
614
EOF
615
}
616

    
617
check_func(){
618
    log check_func "$@"
619
    func=$1
620
    shift
621
    disable $func
622
    check_ld "$@" <<EOF && enable $func
623
extern int $func();
624
int main(void){ $func(); }
625
EOF
626
}
627

    
628
check_func_headers(){
629
    log check_func_headers "$@"
630
    headers=$1
631
    func=$2
632
    shift 2
633
    disable $func
634
    incs=""
635
    for hdr in $headers; do
636
        incs="$incs
637
#include <$hdr>"
638
    done
639
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
640
$incs
641
int main(int argc, char **argv){
642
    (void) $func;
643
    return 0;
644
}
645
EOF
646
}
647

    
648
check_cpp_condition(){
649
    log check_cpp_condition "$@"
650
    header=$1
651
    condition=$2
652
    check_cpp <<EOF
653
#include <$header>
654
#if !($condition)
655
#error "unsatisfied condition: $condition"
656
#endif
657
EOF
658
}
659

    
660
check_lib(){
661
    log check_lib "$@"
662
    header="$1"
663
    func="$2"
664
    shift 2
665
    temp_extralibs "$@"
666
    check_header $header && check_func $func && add_extralibs "$@"
667
    err=$?
668
    restore_flags
669
    return $err
670
}
671

    
672
check_lib2(){
673
    log check_lib2 "$@"
674
    headers="$1"
675
    func="$2"
676
    shift 2
677
    temp_extralibs "$@"
678
    check_func_headers "$headers" $func && add_extralibs "$@"
679
    err=$?
680
    restore_flags
681
    return $err
682
}
683

    
684
check_exec(){
685
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
686
}
687

    
688
check_exec_crash(){
689
    code=$(cat)
690

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

    
697
    (check_exec "$@") >> $logfile 2>&1 <<EOF
698
#include <signal.h>
699
static void sighandler(int sig){
700
    raise(SIGTERM);
701
}
702
int main(void){
703
    signal(SIGILL, sighandler);
704
    signal(SIGFPE, sighandler);
705
    signal(SIGSEGV, sighandler);
706
#ifdef SIGBUS
707
    signal(SIGBUS, sighandler);
708
#endif
709
    { $code }
710
}
711
EOF
712
}
713

    
714
check_type(){
715
    log check_type "$@"
716
    headers=$1
717
    type=$2
718
    shift 2
719
    disable $type
720
    incs=""
721
    for hdr in $headers; do
722
        incs="$incs
723
#include <$hdr>"
724
    done
725
    check_cc "$@" <<EOF && enable $type
726
$incs
727
$type v;
728
EOF
729
}
730

    
731
require(){
732
    name="$1"
733
    header="$2"
734
    func="$3"
735
    shift 3
736
    check_lib $header $func "$@" || die "ERROR: $name not found"
737
}
738

    
739
require2(){
740
    name="$1"
741
    headers="$2"
742
    func="$3"
743
    shift 3
744
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
745
}
746

    
747
check_foo_config(){
748
    cfg=$1
749
    pkg=$2
750
    header=$3
751
    func=$4
752
    shift 4
753
    disable $cfg
754
    check_cmd ${pkg}-config --version
755
    err=$?
756
    if test "$err" = 0; then
757
        temp_cflags $(${pkg}-config --cflags)
758
        temp_extralibs $(${pkg}-config --libs)
759
        check_lib "$@" $header $func && enable $cfg
760
    fi
761
    return $err
762
}
763

    
764
apply(){
765
    file=$1
766
    shift
767
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
768
}
769

    
770
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
771
# system-dependent things.
772

    
773
COMPONENT_LIST="
774
    bsfs
775
    decoders
776
    demuxers
777
    encoders
778
    filters
779
    hwaccels
780
    indevs
781
    muxers
782
    outdevs
783
    parsers
784
    protocols
785
"
786

    
787
CONFIG_LIST="
788
    $COMPONENT_LIST
789
    aandct
790
    avfilter
791
    avfilter_lavf
792
    avisynth
793
    beos_netserver
794
    bzlib
795
    fastdiv
796
    ffmpeg
797
    ffplay
798
    ffserver
799
    fft
800
    golomb
801
    gpl
802
    gprof
803
    gray
804
    hardcoded_tables
805
    ipv6
806
    libdc1394
807
    libdirac
808
    libfaac
809
    libfaad
810
    libfaadbin
811
    libgsm
812
    libmp3lame
813
    libnut
814
    libopencore_amrnb
815
    libopencore_amrwb
816
    libopenjpeg
817
    libschroedinger
818
    libspeex
819
    libtheora
820
    libvorbis
821
    libx264
822
    libxvid
823
    mdct
824
    memalign_hack
825
    mlib
826
    mpegaudio_hp
827
    network
828
    nonfree
829
    postproc
830
    powerpc_perf
831
    rdft
832
    runtime_cpudetect
833
    shared
834
    small
835
    static
836
    swscale_alpha
837
    vaapi
838
    vdpau
839
    version3
840
    x11grab
841
    zlib
842
"
843

    
844
THREADS_LIST='
845
    beosthreads
846
    os2threads
847
    pthreads
848
    w32threads
849
'
850

    
851
ARCH_LIST='
852
    alpha
853
    arm
854
    bfin
855
    ia64
856
    m68k
857
    mips
858
    mips64
859
    parisc
860
    ppc
861
    ppc64
862
    s390
863
    sh4
864
    sparc
865
    sparc64
866
    x86
867
    x86_32
868
    x86_64
869
'
870

    
871
ARCH_EXT_LIST='
872
    altivec
873
    amd3dnow
874
    amd3dnowext
875
    armv5te
876
    armv6
877
    armv6t2
878
    armvfp
879
    iwmmxt
880
    mmi
881
    mmx
882
    mmx2
883
    neon
884
    ppc4xx
885
    sse
886
    ssse3
887
    vis
888
'
889

    
890
HAVE_LIST="
891
    $ARCH_EXT_LIST
892
    $THREADS_LIST
893
    alsa_asoundlib_h
894
    altivec_h
895
    arpa_inet_h
896
    bigendian
897
    bswap
898
    closesocket
899
    cmov
900
    conio_h
901
    dcbzl
902
    dev_bktr_ioctl_bt848_h
903
    dev_bktr_ioctl_meteor_h
904
    dev_ic_bt8xx_h
905
    dev_video_meteor_ioctl_meteor_h
906
    dev_video_bktr_ioctl_bt848_h
907
    dlfcn_h
908
    dlopen
909
    dos_paths
910
    ebp_available
911
    ebx_available
912
    fast_64bit
913
    fast_cmov
914
    fast_unaligned
915
    fork
916
    gethrtime
917
    GetProcessTimes
918
    getrusage
919
    inet_aton
920
    inline_asm
921
    ldbrx
922
    libdc1394_1
923
    libdc1394_2
924
    llrint
925
    log2
926
    loongson
927
    lrint
928
    lrintf
929
    lzo1x_999_compress
930
    machine_ioctl_bt848_h
931
    machine_ioctl_meteor_h
932
    malloc_h
933
    memalign
934
    mkstemp
935
    pld
936
    posix_memalign
937
    round
938
    roundf
939
    sdl
940
    sdl_video_size
941
    setmode
942
    socklen_t
943
    soundcard_h
944
    poll_h
945
    sys_mman_h
946
    sys_resource_h
947
    sys_select_h
948
    sys_soundcard_h
949
    sys_videoio_h
950
    ten_operands
951
    termios_h
952
    threads
953
    truncf
954
    VirtualAlloc
955
    winsock2_h
956
    xform_asm
957
    yasm
958
"
959

    
960
# options emitted with CONFIG_ prefix but not available on command line
961
CONFIG_EXTRA="
962
    gplv3
963
    lgplv3
964
"
965

    
966
CMDLINE_SELECT="
967
    $ARCH_EXT_LIST
968
    $CONFIG_LIST
969
    $THREADS_LIST
970
    cross_compile
971
    debug
972
    extra_warnings
973
    logging
974
    optimizations
975
    stripping
976
    yasm
977
"
978

    
979
PATHS_LIST='
980
    bindir
981
    datadir
982
    incdir
983
    libdir
984
    mandir
985
    prefix
986
    shlibdir
987
'
988

    
989
CMDLINE_SET="
990
    $PATHS_LIST
991
    arch
992
    as
993
    build_suffix
994
    cc
995
    cpu
996
    cross_prefix
997
    extra_version
998
    host_cc
999
    host_cflags
1000
    host_ldflags
1001
    host_libs
1002
    host_os
1003
    logfile
1004
    nm
1005
    source_path
1006
    sysinclude
1007
    sysroot
1008
    target_exec
1009
    target_os
1010
    target_path
1011
"
1012

    
1013
# code dependency declarations
1014

    
1015
# architecture extensions
1016
altivec_deps="ppc"
1017
amd3dnow_deps="mmx"
1018
amd3dnowext_deps="amd3dnow"
1019
armv5te_deps="arm"
1020
armv6_deps="arm"
1021
armv6t2_deps="arm"
1022
armvfp_deps="arm"
1023
iwmmxt_deps="arm"
1024
mmi_deps="mips"
1025
mmx_deps="x86"
1026
mmx2_deps="mmx"
1027
neon_deps="arm"
1028
ppc4xx_deps="ppc"
1029
sse_deps="mmx"
1030
ssse3_deps="sse"
1031
vis_deps="sparc"
1032

    
1033
# decoders / encoders / hardware accelerators
1034
aac_decoder_select="fft mdct"
1035
ac3_decoder_select="fft mdct"
1036
atrac3_decoder_select="fft mdct"
1037
cavs_decoder_select="golomb"
1038
cook_decoder_select="fft mdct"
1039
cscd_decoder_suggest="zlib"
1040
dca_decoder_select="fft mdct"
1041
dnxhd_encoder_select="aandct"
1042
dxa_decoder_select="zlib"
1043
eac3_decoder_select="fft mdct"
1044
eatgq_decoder_select="aandct"
1045
eatqi_decoder_select="aandct"
1046
ffv1_decoder_select="golomb"
1047
flac_decoder_select="golomb"
1048
flac_encoder_select="golomb"
1049
flashsv_decoder_select="zlib"
1050
flashsv_encoder_select="zlib"
1051
flv_encoder_select="aandct"
1052
h261_encoder_select="aandct"
1053
h263_encoder_select="aandct"
1054
h263_vaapi_hwaccel_deps="va_va_h"
1055
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1056
h263p_encoder_select="aandct"
1057
h264_decoder_select="golomb"
1058
h264_vaapi_hwaccel_deps="va_va_h"
1059
h264_vaapi_hwaccel_select="vaapi"
1060
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1061
h264_vdpau_decoder_select="vdpau h264_decoder"
1062
imc_decoder_select="fft mdct"
1063
jpegls_decoder_select="golomb"
1064
jpegls_encoder_select="golomb"
1065
ljpeg_encoder_select="aandct"
1066
loco_decoder_select="golomb"
1067
mjpeg_encoder_select="aandct"
1068
mpeg1video_encoder_select="aandct"
1069
mpeg2video_encoder_select="aandct"
1070
mpeg4_encoder_select="aandct"
1071
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1072
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1073
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1074
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1075
mpeg2_vaapi_hwaccel_deps="va_va_h"
1076
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1077
mpeg4_vaapi_hwaccel_deps="va_va_h"
1078
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1079
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1080
msmpeg4v1_encoder_select="aandct"
1081
msmpeg4v2_encoder_select="aandct"
1082
msmpeg4v3_encoder_select="aandct"
1083
nellymoser_decoder_select="fft mdct"
1084
nellymoser_encoder_select="fft mdct"
1085
png_decoder_select="zlib"
1086
png_encoder_select="zlib"
1087
qdm2_decoder_select="fft mdct rdft"
1088
rv10_encoder_select="aandct"
1089
rv20_encoder_select="aandct"
1090
rv30_decoder_select="golomb"
1091
rv40_decoder_select="golomb"
1092
shorten_decoder_select="golomb"
1093
sonic_decoder_select="golomb"
1094
sonic_encoder_select="golomb"
1095
sonic_ls_encoder_select="golomb"
1096
svq3_decoder_select="golomb"
1097
svq3_decoder_suggest="zlib"
1098
tiff_decoder_suggest="zlib"
1099
tiff_encoder_suggest="zlib"
1100
tscc_decoder_select="zlib"
1101
vc1_vaapi_hwaccel_deps="va_va_h"
1102
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1103
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1104
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1105
vorbis_decoder_select="fft mdct"
1106
vorbis_encoder_select="fft mdct"
1107
wmav1_decoder_select="fft mdct"
1108
wmav1_encoder_select="fft mdct"
1109
wmav2_decoder_select="fft mdct"
1110
wmav2_encoder_select="fft mdct"
1111
wmv1_encoder_select="aandct"
1112
wmv2_encoder_select="aandct"
1113
wmv3_vaapi_hwaccel_deps="va_va_h"
1114
wmv3_vaapi_hwaccel_select="vaapi wmv3_decoder"
1115
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1116
wmv3_vdpau_decoder_select="vdpau wmv3_decoder"
1117
zlib_decoder_select="zlib"
1118
zlib_encoder_select="zlib"
1119
zmbv_decoder_select="zlib"
1120
zmbv_encoder_select="zlib"
1121

    
1122
# parsers
1123
h264_parser_select="golomb"
1124

    
1125
# external libraries
1126
libdirac_decoder_deps="libdirac !libschroedinger"
1127
libdirac_encoder_deps="libdirac"
1128
libfaac_encoder_deps="libfaac"
1129
libfaad_decoder_deps="libfaad"
1130
libfaadbin_decoder_extralibs='$ldl'
1131
libgsm_decoder_deps="libgsm"
1132
libgsm_encoder_deps="libgsm"
1133
libgsm_ms_decoder_deps="libgsm"
1134
libgsm_ms_encoder_deps="libgsm"
1135
libmp3lame_encoder_deps="libmp3lame"
1136
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1137
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1138
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1139
libopenjpeg_decoder_deps="libopenjpeg"
1140
libschroedinger_decoder_deps="libschroedinger"
1141
libschroedinger_encoder_deps="libschroedinger"
1142
libspeex_decoder_deps="libspeex"
1143
libtheora_encoder_deps="libtheora"
1144
libvorbis_encoder_deps="libvorbis"
1145
libx264_encoder_deps="libx264"
1146
libxvid_encoder_deps="libxvid"
1147

    
1148
# demuxers / muxers
1149
ac3_demuxer_deps="ac3_parser"
1150
avisynth_demuxer_deps="avisynth"
1151
dirac_demuxer_deps="dirac_parser"
1152
libnut_demuxer_deps="libnut"
1153
libnut_muxer_deps="libnut"
1154
matroska_demuxer_suggest="zlib bzlib"
1155
mov_demuxer_suggest="zlib"
1156
mp3_demuxer_deps="mpegaudio_parser"
1157
redir_demuxer_deps="network"
1158
rtp_muxer_deps="network rtp_protocol"
1159
rtsp_demuxer_deps="sdp_demuxer"
1160
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1161

    
1162
# indevs / outdevs
1163
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1164
alsa_indev_extralibs="-lasound"
1165
alsa_outdev_deps="alsa_asoundlib_h"
1166
alsa_outdev_extralibs="-lasound"
1167
audio_beos_indev_deps="audio_beos"
1168
audio_beos_indev_extralibs="-lmedia -lbe"
1169
audio_beos_outdev_deps="audio_beos"
1170
audio_beos_outdev_extralibs="-lmedia -lbe"
1171
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1172
dv1394_indev_deps="dv1394 dv_demuxer"
1173
jack_indev_deps="jack_jack_h"
1174
jack_indev_extralibs="-ljack"
1175
libdc1394_indev_deps="libdc1394"
1176
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1177
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1178
v4l_indev_deps="linux_videodev_h"
1179
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1180
vfwcap_indev_deps="capCreateCaptureWindow"
1181
vfwcap_indev_extralibs="-lvfw32"
1182
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1183
x11_grab_device_indev_extralibs="-lX11 -lXext"
1184

    
1185
# protocols
1186
gopher_protocol_deps="network"
1187
http_protocol_deps="network"
1188
rtp_protocol_deps="udp_protocol"
1189
tcp_protocol_deps="network"
1190
udp_protocol_deps="network"
1191

    
1192
# filters
1193
movie_filter_deps="avfilter_lavf"
1194

    
1195
# programs
1196
ffplay_deps="sdl"
1197
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1198
ffserver_extralibs='$ldl'
1199

    
1200

    
1201
# default parameters
1202

    
1203
logfile="config.err"
1204

    
1205
# installation paths
1206
prefix_default="/usr/local"
1207
bindir_default='${prefix}/bin'
1208
datadir_default='${prefix}/share/ffmpeg'
1209
incdir_default='${prefix}/include'
1210
libdir_default='${prefix}/lib'
1211
mandir_default='${prefix}/share/man'
1212
shlibdir_default="$libdir_default"
1213

    
1214
# toolchain
1215
ar="ar"
1216
cc_default="gcc"
1217
host_cc_default="gcc"
1218
ln_s="ln -sf"
1219
nm_default="nm"
1220
objformat="elf"
1221
ranlib="ranlib"
1222
strip="strip"
1223
yasmexe="yasm"
1224

    
1225
# machine
1226
arch=$(uname -m)
1227
cpu="generic"
1228

    
1229
# OS
1230
target_os=$(tolower $(uname -s))
1231
host_os=$target_os
1232

    
1233
# configurable options
1234
enable debug
1235
enable fastdiv
1236
enable ffmpeg
1237
enable ffplay
1238
enable ffserver
1239
enable ipv6
1240
enable mpegaudio_hp
1241
enable network
1242
enable optimizations
1243
enable protocols
1244
enable static
1245
enable stripping
1246
enable swscale_alpha
1247

    
1248
# build settings
1249
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1250
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1251
FFSERVERLDFLAGS=-Wl,-E
1252
LIBPREF="lib"
1253
LIBSUF=".a"
1254
FULLNAME='$(NAME)$(BUILDSUF)'
1255
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1256
SLIBPREF="lib"
1257
SLIBSUF=".so"
1258
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1259
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1260
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1261
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1262

    
1263
host_cflags='-O3 -g -Wall'
1264
host_libs='-lm'
1265

    
1266
target_path='.'
1267

    
1268
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1269
# full relative path for objects in subdirectories for non-recursive Make.
1270
DEPEND_CMD='$(CC) $(CPPFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1271

    
1272
# find source path
1273
source_path="$(dirname "$0")"
1274
enable source_path_used
1275
if test -z "$source_path" -o "$source_path" = "." ; then
1276
    source_path="$(pwd)"
1277
    disable source_path_used
1278
else
1279
    source_path="$(cd "$source_path"; pwd)"
1280
    echo "$source_path" | grep -q '[[:blank:]]' &&
1281
        die "Out of tree builds are impossible with whitespace in source path."
1282
    test -e "$source_path/config.h" &&
1283
        die "Out of tree builds are impossible with config.h in source dir."
1284
fi
1285

    
1286
for v in "$@"; do
1287
    r=${v#*=}
1288
    l=${v%"$r"}
1289
    r=$(sh_quote "$r")
1290
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1291
done
1292

    
1293
find_things(){
1294
    thing=$1
1295
    pattern=$2
1296
    file=$source_path/$3
1297
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1298
}
1299

    
1300
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1301
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1302
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1303
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1304
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1305
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1306
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1307
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1308
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1309
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1310
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1311

    
1312
enable $ARCH_EXT_LIST \
1313
       $DECODER_LIST \
1314
       $ENCODER_LIST \
1315
       $HWACCEL_LIST \
1316
       $PARSER_LIST \
1317
       $BSF_LIST \
1318
       $DEMUXER_LIST \
1319
       $MUXER_LIST \
1320
       $FILTER_LIST \
1321
       $PROTOCOL_LIST \
1322
       $INDEV_LIST \
1323
       $OUTDEV_LIST \
1324

    
1325
die_unknown(){
1326
    echo "Unknown option \"$1\"."
1327
    echo "See $0 --help for available options."
1328
    exit 1
1329
}
1330

    
1331
show_list() {
1332
    suffix=_$1
1333
    shift
1334
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1335
    exit 0
1336
}
1337

    
1338
for opt do
1339
    optval="${opt#*=}"
1340
    case "$opt" in
1341
    --extra-cflags=*) add_cflags $optval
1342
    ;;
1343
    --extra-ldflags=*) add_ldflags $optval
1344
    ;;
1345
    --extra-libs=*) add_extralibs $optval
1346
    ;;
1347
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1348
    ;;
1349
    --enable-debug=*) debuglevel="$optval"
1350
    ;;
1351
    --enable-*=*|--disable-*=*)
1352
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1353
    case "$thing" in
1354
        encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1355
        *) die_unknown "$opt" ;;
1356
    esac
1357
    ;;
1358
    --enable-?*|--disable-?*)
1359
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1360
    if is_in $option $COMPONENT_LIST; then
1361
        test $action = disable && action=unset
1362
        eval $action \$$(toupper ${option%s})_LIST
1363
    elif is_in $option $CMDLINE_SELECT; then
1364
        $action $option
1365
    else
1366
        die_unknown $opt
1367
    fi
1368
    ;;
1369
    --list-*)
1370
        NAME="${opt#--list-}"
1371
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1372
        NAME=${NAME%s}
1373
        eval show_list $NAME \$$(toupper $NAME)_LIST
1374
    ;;
1375
    --help|-h) show_help
1376
    ;;
1377
    *)
1378
    optname="${opt%%=*}"
1379
    optname="${optname#--}"
1380
    optname=$(echo "$optname" | sed 's/-/_/g')
1381
    is_in $optname $CMDLINE_SET || die_unknown $opt
1382
    eval $optname='$optval'
1383
    ;;
1384
    esac
1385
done
1386

    
1387
disabled logging && logfile=/dev/null
1388

    
1389
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1390
set >> $logfile
1391

    
1392
test -n "$cross_prefix" && enable cross_compile
1393

    
1394
ar="${cross_prefix}${ar}"
1395
cc_default="${cross_prefix}${cc_default}"
1396
nm_default="${cross_prefix}${nm_default}"
1397
ranlib="${cross_prefix}${ranlib}"
1398
strip="${cross_prefix}${strip}"
1399

    
1400
sysinclude_default="${sysroot}/usr/include"
1401

    
1402
set_default cc nm sysinclude
1403
as_default=$cc
1404
enabled cross_compile || host_cc_default=$cc
1405
set_default host_cc
1406

    
1407
exesuf() {
1408
    case $1 in
1409
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1410
    esac
1411
}
1412

    
1413
EXESUF=$(exesuf $target_os)
1414
HOSTEXESUF=$(exesuf $host_os)
1415

    
1416
# set temporary file name
1417
: ${TMPDIR:=$TEMPDIR}
1418
: ${TMPDIR:=$TMP}
1419
: ${TMPDIR:=/tmp}
1420

    
1421
if ! check_cmd type mktemp; then
1422
    # simple replacement for missing mktemp
1423
    # NOT SAFE FOR GENERAL USE
1424
    mktemp(){
1425
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1426
    }
1427
fi
1428

    
1429
tmpfile(){
1430
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1431
        (set -C; exec > $tmp) 2>/dev/null ||
1432
        die "Unable to create temoporary file in $TMPDIR."
1433
    append TMPFILES $tmp
1434
    eval $1=$tmp
1435
}
1436

    
1437
trap 'rm -f -- $TMPFILES' EXIT
1438
trap exit HUP INT TERM
1439

    
1440
tmpfile TMPC  .c
1441
tmpfile TMPE  $EXESUF
1442
tmpfile TMPH  .h
1443
tmpfile TMPO  .o
1444
tmpfile TMPS  .S
1445
tmpfile TMPSH .sh
1446

    
1447
unset -f mktemp
1448

    
1449
# make sure we can execute files in $TMPDIR
1450
cat > $TMPSH 2>> $logfile <<EOF
1451
#! /bin/sh
1452
EOF
1453
chmod +x $TMPSH >> $logfile 2>&1
1454
if ! $TMPSH >> $logfile 2>&1; then
1455
    cat <<EOF
1456
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1457
variable to another directory and make sure that it is not mounted noexec.
1458
EOF
1459
    die "Sanity test failed."
1460
fi
1461

    
1462
if   $cc --version 2>/dev/null | grep -qi gcc; then
1463
    cc_type=gcc
1464
elif $cc --version 2>/dev/null | grep -q Intel; then
1465
    cc_type=icc
1466
elif $cc -v 2>&1 | grep -q xlc; then
1467
    cc_type=xlc
1468
elif $cc -V 2>/dev/null | grep -q Compaq; then
1469
    cc_type=ccc
1470
    DEPEND_CMD='$(CC) $(CPPFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1471
    debuglevel=3
1472
    add_ldflags -Wl,-z,now # calls to libots crash without this
1473
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1474
    test -d "$sysroot" || die "No valid sysroot specified."
1475
    cc_type=armcc
1476
    armcc_conf="$PWD/armcc.conf"
1477
    $cc --arm_linux_configure                 \
1478
        --arm_linux_config_file="$armcc_conf" \
1479
        --configure_sysroot="$sysroot"        \
1480
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1481
        die "Error creating armcc configuration file."
1482
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1483
    as_default="${cross_prefix}gcc"
1484
fi
1485

    
1486
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1487

    
1488
set_default as
1489

    
1490
if test -n "$sysroot"; then
1491
    case "$cc_type" in
1492
        gcc)
1493
            add_cflags  --sysroot="$sysroot"
1494
            add_ldflags --sysroot="$sysroot"
1495
        ;;
1496
    esac
1497
fi
1498

    
1499
# compiler sanity check
1500
check_exec <<EOF
1501
int main(void){ return 0; }
1502
EOF
1503
if test "$?" != 0; then
1504
    echo "$cc is unable to create an executable file."
1505
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1506
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1507
        echo "Only do this if you know what cross compiling means."
1508
    fi
1509
    die "C compiler test failed."
1510
fi
1511

    
1512
check_cflags -std=c99
1513
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1514
#include <stdlib.h>
1515
EOF
1516
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1517
#include <stdlib.h>
1518
EOF
1519

    
1520
case "$arch" in
1521
    alpha)
1522
        arch="alpha"
1523
        enable fast_64bit
1524
        check_cflags -mieee
1525
    ;;
1526
    arm|armv[4567]*l)
1527
        arch="arm"
1528
    ;;
1529
    avr32)
1530
    ;;
1531
    bfin)
1532
        arch="bfin"
1533
    ;;
1534
    ia64)
1535
        arch="ia64"
1536
        enable fast_64bit
1537
    ;;
1538
    m68k)
1539
        arch="m68k"
1540
    ;;
1541
    mips|mipsel|IP*)
1542
        arch="mips"
1543
    ;;
1544
    mips64)
1545
        arch="mips"
1546
        subarch="mips64"
1547
        enable fast_64bit
1548
    ;;
1549
    parisc|hppa)
1550
        arch="parisc"
1551
    ;;
1552
    parisc64|hppa64)
1553
        arch="parisc"
1554
        enable fast_64bit
1555
    ;;
1556
    "Power Macintosh"|ppc|powerpc)
1557
        arch="ppc"
1558
        enable fast_unaligned
1559
    ;;
1560
    ppc64)
1561
        arch="ppc"
1562
        subarch="ppc64"
1563
        enable fast_64bit
1564
        enable fast_unaligned
1565
    ;;
1566
    s390|s390x)
1567
        arch="s390"
1568
    ;;
1569
    sh4|sh)
1570
        arch="sh4"
1571
    ;;
1572
    sparc)
1573
        arch="sparc"
1574
    ;;
1575
    sun4u|sparc64)
1576
        arch="sparc"
1577
        subarch="sparc64"
1578
        enable fast_64bit
1579
    ;;
1580
    i386|i486|i586|i686|i86pc|BePC)
1581
        arch="x86"
1582
        subarch="x86_32"
1583
        enable fast_unaligned
1584
    ;;
1585
    x86_64|amd64)
1586
        arch="x86"
1587
        subarch="x86_32"
1588
        enable cmov
1589
        enable fast_cmov
1590
        enable fast_unaligned
1591
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1592
        int test[sizeof(char*) - 7];
1593
EOF
1594
    ;;
1595
    *)
1596
        arch="unknown"
1597
    ;;
1598
esac
1599

    
1600
enable $arch $subarch
1601

    
1602
# OS specific
1603
case $target_os in
1604
    beos|haiku|zeta)
1605
        prefix_default="$HOME/config"
1606
        # helps building libavcodec
1607
        add_cppflags -DPIC
1608
        add_cflags -fomit-frame-pointer
1609
        # 3 gcc releases known for BeOS, each with ugly bugs
1610
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1611
        case "$gcc_version" in
1612
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1613
            disable mmx
1614
            ;;
1615
          *20010315*) echo "BeBits gcc"
1616
            add_cflags -fno-expensive-optimizations
1617
            ;;
1618
        esac
1619
        SHFLAGS=-nostart
1620
        # enable BeOS things
1621
        enable audio_beos
1622
        # no need for libm, but the inet stuff
1623
        # Check for BONE
1624
        # XXX: actually should check for NOT net_server
1625
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1626
            network_extralibs="-lbind -lsocket"
1627
        else
1628
            enable beos_netserver
1629
            network_extralibs="-lnet"
1630
        fi ;;
1631
    sunos)
1632
        FFSERVERLDFLAGS=""
1633
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1634
        network_extralibs="-lsocket -lnsl"
1635
        add_cppflags -D__EXTENSIONS__
1636
        ;;
1637
    netbsd)
1638
        oss_indev_extralibs="-lossaudio"
1639
        oss_outdev_extralibs="-lossaudio"
1640
        ;;
1641
    openbsd)
1642
        disable need_memalign
1643
        LIBOBJFLAGS='$(PIC)'
1644
        SHFLAGS='-shared'
1645
        oss_indev_extralibs="-lossaudio"
1646
        oss_outdev_extralibs="-lossaudio"
1647
        ;;
1648
    freebsd|dragonfly)
1649
        disable need_memalign
1650
        ;;
1651
    bsd/os)
1652
        osextralibs="-lpoll -lgnugetopt"
1653
        strip="strip -d"
1654
        ;;
1655
    darwin)
1656
        disable need_memalign
1657
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1658
        strip="strip -x"
1659
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1660
        SLIBSUF=".dylib"
1661
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1662
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1663
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1664
        objformat="macho"
1665
        enabled x86_64 && objformat="macho64"
1666
        ;;
1667
    mingw32*)
1668
        target_os=mingw32
1669
        LIBTARGET=i386
1670
        if enabled x86_64; then
1671
            disable need_memalign
1672
            LIBTARGET=x64
1673
        fi
1674
        shlibdir_default="$bindir_default"
1675
        disable ffserver
1676
        SLIBPREF=""
1677
        SLIBSUF=".dll"
1678
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1679
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1680
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1681
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1682
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1683
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1684
        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'
1685
        objformat="win32"
1686
        enable dos_paths
1687
        check_cflags -fno-common
1688
        if ! enabled x86_64; then
1689
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1690
                die "ERROR: MinGW runtime version must be >= 3.15."
1691
            enabled_any avisynth vfwcap_demuxer &&
1692
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1693
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1694
            fi
1695
        ;;
1696
    cygwin*)
1697
        target_os=cygwin
1698
        shlibdir_default="$bindir_default"
1699
        SLIBPREF="cyg"
1700
        SLIBSUF=".dll"
1701
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1702
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1703
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1704
        objformat="win32"
1705
        enable dos_paths
1706
        check_cflags -fno-common
1707
        ;;
1708
    *-dos|freedos|opendos)
1709
        disable ffplay ffserver
1710
        disable $INDEV_LIST $OUTDEV_LIST
1711
        network_extralibs="-lsocket"
1712
        objformat="coff"
1713
        enable dos_paths
1714
        ;;
1715
    linux)
1716
        enable dv1394
1717
        ;;
1718
    irix*)
1719
        target_os=irix
1720
        ranlib="echo ignoring ranlib"
1721
        ;;
1722
    os/2*)
1723
        strip="lxlite"
1724
        ln_s="cp -f"
1725
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1726
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1727
        FFSERVERLDFLAGS=""
1728
        LIBSUF="_s.a"
1729
        SLIBPREF=""
1730
        SLIBSUF=".dll"
1731
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1732
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1733
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1734
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1735
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1736
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1737
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1738
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1739
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1740
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1741
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1742
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1743
        enable dos_paths
1744
        ;;
1745
    gnu/kfreebsd)
1746
        ;;
1747
    gnu)
1748
        ;;
1749

    
1750
    *)
1751
        die "Unknown OS '$target_os'."
1752
        ;;
1753
esac
1754

    
1755
set_default $PATHS_LIST
1756

    
1757
add_extralibs $osextralibs
1758

    
1759
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1760
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1761

    
1762
# we need to build at least one lib type
1763
if ! enabled_any static shared; then
1764
    cat <<EOF
1765
At least one library type must be built.
1766
Specify --enable-static to build the static libraries or --enable-shared to
1767
build the shared libraries as well. To only build the shared libraries specify
1768
--disable-static in addition to --enable-shared.
1769
EOF
1770
    exit 1;
1771
fi
1772

    
1773
disabled static && LIBNAME=""
1774

    
1775
if enabled_any libfaad libfaadbin ; then
1776
    if check_header faad.h; then
1777
        check_cc <<EOF
1778
#include <faad.h>
1779
#ifndef FAAD2_VERSION
1780
ok faad1
1781
#endif
1782
int main(void) { return 0; }
1783
EOF
1784
        test $? = 0 && enable libfaad2
1785
    else
1786
        die "FAAD test failed."
1787
    fi
1788
fi
1789

    
1790

    
1791
die_license_disabled() {
1792
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1793
}
1794

    
1795
die_license_disabled gpl libfaad2
1796
die_license_disabled gpl libx264
1797
die_license_disabled gpl libxvid
1798
die_license_disabled gpl postproc
1799
die_license_disabled gpl x11grab
1800

    
1801
die_license_disabled nonfree libfaac
1802

    
1803
die_license_disabled version3 libopencore_amrnb
1804
die_license_disabled version3 libopencore_amrwb
1805

    
1806
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1807

    
1808
check_deps $ARCH_EXT_LIST
1809

    
1810
test -z "$need_memalign" && need_memalign="$mmx"
1811

    
1812
#Darwin CC versions
1813
if test $target_os = darwin; then
1814
    if enabled xlc; then
1815
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1816
    else
1817
        add_cflags -pipe
1818
        check_cflags -force_cpusubtype_ALL
1819
        check_cflags -Wno-sign-compare
1820
        enabled shared || check_cflags -mdynamic-no-pic
1821
    fi
1822
fi
1823

    
1824
disabled optimizations || check_cflags -fomit-frame-pointer
1825

    
1826
# Add processor-specific flags
1827
if test $cpu != "generic"; then
1828
    warn_altivec(){
1829
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1830
    }
1831
    case $cpu in
1832
        601|ppc601|PowerPC601)
1833
            add_cflags -mcpu=601
1834
            warn_altivec enabled PPC601
1835
        ;;
1836
        603*|ppc603*|PowerPC603*)
1837
            add_cflags -mcpu=603
1838
            warn_altivec enabled PPC603
1839
        ;;
1840
        604*|ppc604*|PowerPC604*)
1841
            add_cflags -mcpu=604
1842
            warn_altivec enabled PPC604
1843
        ;;
1844
        G3|g3|75*|ppc75*|PowerPC75*)
1845
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1846
            warn_altivec enabled PPC75x
1847
        ;;
1848
        G4|g4|745*|ppc745*|PowerPC745*)
1849
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1850
            warn_altivec disabled PPC745x
1851
        ;;
1852
        74*|ppc74*|PowerPC74*)
1853
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1854
            warn_altivec disabled PPC74xx
1855
        ;;
1856
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1857
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1858
            warn_altivec disabled PPC970
1859
        ;;
1860
        Cell|CELL|cell)
1861
            add_cflags -mcpu=cell
1862
            warn_altivec disabled Cell
1863
            enable ldbrx
1864
        ;;
1865
        # targets that do NOT support conditional mov (cmov)
1866
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1867
            add_cflags -march=$cpu
1868
            disable cmov
1869
        ;;
1870
        # targets that do support conditional mov (cmov)
1871
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1872
            add_cflags -march=$cpu
1873
            enable cmov
1874
            enable fast_cmov
1875
        ;;
1876
        # targets that do support conditional mov but on which it's slow
1877
        pentium4|pentium4m|prescott|nocona)
1878
            add_cflags -march=$cpu
1879
            enable cmov
1880
            disable fast_cmov
1881
        ;;
1882
        sparc64)
1883
            add_cflags -mcpu=v9
1884
        ;;
1885
        arm11*|cortex*)
1886
            add_cflags -mcpu=$cpu
1887
            enable fast_unaligned
1888
        ;;
1889
        armv[67]*)
1890
            add_cflags -march=$cpu
1891
            enable fast_unaligned
1892
        ;;
1893
        armv*)
1894
            add_cflags -march=$cpu
1895
        ;;
1896
        arm*)
1897
            add_cflags -mcpu=$cpu
1898
        ;;
1899
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1900
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1901
        ;;
1902
        bf*)
1903
            add_cflags -mcpu=$cpu
1904
        ;;
1905
        mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1906
            add_cflags -march=$cpu
1907
        ;;
1908
        *)
1909
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1910
        ;;
1911
    esac
1912
fi
1913

    
1914
check_cc <<EOF || die "Symbol mangling check failed."
1915
int ff_extern;
1916
EOF
1917
sym=$($nm -P -g $TMPO | grep ff_extern)
1918
extern_prefix=${sym%%ff_extern*}
1919

    
1920
check_cc <<EOF && enable inline_asm
1921
void foo(void) { __asm__ volatile ("" ::); }
1922
EOF
1923

    
1924
if enabled x86; then
1925
    # check whether EBP is available on x86
1926
    # As 'i' is stored on the stack, this program will crash
1927
    # if the base pointer is used to access it because the
1928
    # base pointer is cleared in the inline assembly code.
1929
    check_exec_crash <<EOF && enable ebp_available
1930
    volatile int i=0;
1931
    __asm__ volatile (
1932
        "xorl %%ebp, %%ebp"
1933
    ::: "%ebp");
1934
    return i;
1935
EOF
1936

    
1937
    # check wether EBX is available on x86
1938
    check_asm ebx_available '"":::"%ebx"'
1939

    
1940
    # check whether more than 10 operands are supported
1941
    check_cc <<EOF && enable ten_operands
1942
int main(void) {
1943
    int x=0;
1944
    __asm__ volatile(
1945
        ""
1946
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1947
    );
1948
    return 0;
1949
}
1950
EOF
1951

    
1952
    # check whether binutils is new enough to compile SSSE3/MMX2
1953
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1954
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1955

    
1956
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1957

    
1958
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1959
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1960
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1961
    case "$objformat" in
1962
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1963
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1964
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1965
    esac
1966
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1967
fi
1968

    
1969
# check for assembler specific support
1970

    
1971
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1972

    
1973
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1974
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1975
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1976

    
1977
# check for SIMD availability
1978

    
1979
# AltiVec flags: The FSF version of GCC differs from the Apple version
1980
if enabled altivec; then
1981
    check_cflags -maltivec -mabi=altivec &&
1982
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1983
        check_cflags -faltivec
1984

    
1985
    # check if our compiler supports Motorola AltiVec C API
1986
    check_cc <<EOF || disable altivec
1987
$inc_altivec_h
1988
int main(void) {
1989
    vector signed int v1, v2, v3;
1990
    v1 = vec_add(v2,v3);
1991
    return 0;
1992
}
1993
EOF
1994

    
1995
    # check if our compiler supports braces for vector declarations
1996
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1997
$inc_altivec_h
1998
int main (void) { (vector int) {1}; return 0; }
1999
EOF
2000
fi
2001

    
2002
# We have to check if pld is a nop and disable it.
2003
enabled arm     && check_asm pld     '"pld [r0]"'
2004
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2005
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2006
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2007
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2008
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2009
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2010
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2011
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2012

    
2013
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2014

    
2015
# ---
2016
# big/little-endian test
2017
check_cc <<EOF || die "endian test failed"
2018
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2019
EOF
2020
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2021

    
2022
# ---
2023
# check availability of some header files
2024

    
2025
if check_func dlopen; then
2026
    ldl=
2027
elif check_func dlopen -ldl; then
2028
    ldl=-ldl
2029
fi
2030

    
2031
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2032
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2033

    
2034
check_func  fork
2035
check_func  gethrtime
2036
check_func  getrusage
2037
check_func  inet_aton $network_extralibs
2038
check_func  memalign
2039
check_func  mkstemp
2040
check_func  posix_memalign
2041
check_func_headers io.h setmode
2042
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2043
check_func_headers windows.h GetProcessTimes
2044
check_func_headers windows.h VirtualAlloc
2045

    
2046
check_header conio.h
2047
check_header dlfcn.h
2048
check_header malloc.h
2049
check_header poll.h
2050
check_header sys/mman.h
2051
check_header sys/resource.h
2052
check_header sys/select.h
2053
check_header termios.h
2054
check_header vdpau/vdpau.h
2055
check_header vdpau/vdpau_x11.h
2056
check_header X11/extensions/XvMClib.h
2057

    
2058
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2059
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2060
fi
2061

    
2062
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2063
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2064

    
2065
# check for some common methods of building with pthread support
2066
# do this before the optional library checks as some of them require pthreads
2067
if enabled pthreads; then
2068
    if check_func pthread_create; then
2069
        :
2070
    elif check_func pthread_create -pthread; then
2071
        add_cflags -pthread
2072
        add_extralibs -pthread
2073
    elif check_func pthread_create -pthreads; then
2074
        add_cflags -pthreads
2075
        add_extralibs -pthreads
2076
    elif check_func pthread_create -lpthreadGC2; then
2077
        add_extralibs -lpthreadGC2
2078
    elif ! check_lib pthread.h pthread_create -lpthread; then
2079
        die "ERROR: can't find pthreads library"
2080
    fi
2081
fi
2082

    
2083
for thread in $THREADS_LIST; do
2084
    if enabled $thread; then
2085
        test -n "$thread_type" &&
2086
            die "ERROR: Only one thread type must be selected." ||
2087
            thread_type="$thread"
2088
    fi
2089
done
2090

    
2091
check_lib math.h sin -lm
2092
check_lib va/va.h vaInitialize -lva
2093

    
2094
# test for C99 functions in math.h
2095
for func in llrint log2 lrint lrintf round roundf truncf; do
2096
    check_exec <<EOF && enable $func || disable $func
2097
#include <math.h>
2098
int main(void) { return ($func(3.999f) > 0)?0:1; }
2099
EOF
2100
done
2101

    
2102
# these are off by default, so fail if requested and not available
2103
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2104
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2105
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2106
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2107
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2108
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2109
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2110
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2111
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2112
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2113
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2114
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2115
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2116
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2117
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2118
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2119
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2120
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2121
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2122
                        die "ERROR: libx264 version must be >= 0.65."; }
2123
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2124
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2125

    
2126
# libdc1394 check
2127
if enabled libdc1394; then
2128
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2129
        enable libdc1394_2; } ||
2130
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2131
        enable libdc1394_1; } ||
2132
    die "ERROR: No version of libdc1394 found "
2133
fi
2134

    
2135

    
2136
_restrict=
2137
for restrict_keyword in restrict __restrict__ __restrict; do
2138
    check_cc <<EOF && _restrict=$restrict_keyword && break
2139
void foo(char * $restrict_keyword p);
2140
EOF
2141
done
2142

    
2143
##########################################
2144
# SDL check
2145

    
2146
disable sdl_too_old
2147
disable sdl
2148
SDL_CONFIG="${cross_prefix}sdl-config"
2149
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2150
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2151
    temp_cflags $sdl_cflags
2152
    temp_extralibs $("${SDL_CONFIG}" --libs)
2153
    if check_lib2 SDL.h SDL_Init; then
2154
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2155
        if test "$_sdlversion" -lt 121 ; then
2156
            enable sdl_too_old
2157
        else
2158
            enable sdl
2159
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2160
#include <SDL.h>
2161
int main(int argc, char **argv){
2162
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2163
    int w = vi->current_w;
2164
    return 0;
2165
}
2166
EOF
2167
        fi
2168
    fi
2169
    restore_flags
2170
fi
2171

    
2172
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2173

    
2174
##########################################
2175
# Network check
2176

    
2177
if enabled network; then
2178
    check_type "sys/types.h sys/socket.h" socklen_t
2179
    # Prefer arpa/inet.h over winsock2
2180
    if check_header arpa/inet.h ; then
2181
        check_func closesocket
2182
    elif check_header winsock2.h ; then
2183
        network_extralibs="-lws2_32"
2184
        check_type ws2tcpip.h socklen_t
2185
        check_func_headers winsock2.h closesocket
2186
    else
2187
        disable network
2188
    fi
2189
fi
2190

    
2191
##########################################
2192
# IPv6 check
2193

    
2194
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2195
#include <sys/types.h>
2196
#include <sys/socket.h>
2197
#include <netinet/in.h>
2198
#include <netdb.h>
2199
int main(void) {
2200
    struct sockaddr_storage saddr;
2201
    struct ipv6_mreq mreq6;
2202
    getaddrinfo(0,0,0,0);
2203
    getnameinfo(0,0,0,0,0,0,0);
2204
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2205
}
2206
EOF
2207

    
2208
check_header linux/videodev.h
2209
check_header linux/videodev2.h
2210
check_header sys/videoio.h
2211

    
2212
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2213

    
2214
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2215
{ check_header dev/bktr/ioctl_meteor.h &&
2216
  check_header dev/bktr/ioctl_bt848.h; } ||
2217
{ check_header machine/ioctl_meteor.h &&
2218
  check_header machine/ioctl_bt848.h; } ||
2219
{ check_header dev/video/meteor/ioctl_meteor.h &&
2220
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2221
check_header dev/ic/bt8xx.h
2222

    
2223
check_header sys/soundcard.h
2224
check_header soundcard.h
2225

    
2226
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2227

    
2228
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2229

    
2230
# deal with the X11 frame grabber
2231
enabled x11grab                         &&
2232
check_header X11/Xlib.h                 &&
2233
check_header X11/extensions/XShm.h      &&
2234
check_func XOpenDisplay -lX11           &&
2235
check_func XShmCreateImage -lX11 -lXext
2236

    
2237
enabled debug && add_cflags -g"$debuglevel"
2238

    
2239
# add some useful compiler flags if supported
2240
check_cflags -Wdeclaration-after-statement
2241
check_cflags -Wall
2242
check_cflags -Wno-switch
2243
check_cflags -Wdisabled-optimization
2244
check_cflags -Wpointer-arith
2245
check_cflags -Wredundant-decls
2246
check_cflags -Wno-pointer-sign
2247
check_cflags -Wcast-qual
2248
check_cflags -Wwrite-strings
2249
check_cflags -Wtype-limits
2250
check_cflags -Wundef
2251
enabled extra_warnings && check_cflags -Winline
2252

    
2253
# add some linker flags
2254
check_ldflags -Wl,--warn-common
2255
check_ldflags -Wl,--as-needed
2256
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'
2257
check_ldflags -Wl,-Bsymbolic
2258

    
2259
if enabled small; then
2260
    check_cflags -Os            # not all compilers support -Os
2261
    optimizations="small"
2262
elif enabled optimizations; then
2263
    if enabled xlc; then
2264
        add_cflags  -O5
2265
        add_ldflags -O5
2266
    elif enabled ccc; then
2267
        add_cflags -fast
2268
    else
2269
        add_cflags -O3
2270
    fi
2271
fi
2272
check_cflags -fno-math-errno
2273
check_cflags -fno-signed-zeros
2274

    
2275
# add some flags for Intel C Compiler
2276
if enabled icc; then
2277
    # Just warnings, no remarks
2278
    check_cflags -w1
2279
    # -wd: Disable following warnings
2280
    # 144, 167, 556: -Wno-pointer-sign
2281
    # 10006: ignoring unknown option -fno-signed-zeros
2282
    # 10156: ignoring option '-W'; no argument required
2283
    check_cflags -wd144,167,556,10006,10156
2284
    # 11030: Warning unknown option --as-needed
2285
    # 10156: ignoring option '-export'; no argument required
2286
    check_ldflags -wd10156,11030
2287
    # Allow to compile with optimizations
2288
    check_ldflags -march=$cpu
2289
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2290
    enable ebp_available
2291
elif enabled ccc; then
2292
    # disable some annoying warnings
2293
    add_cflags -msg_disable cvtu32to64
2294
    add_cflags -msg_disable embedcomment
2295
    add_cflags -msg_disable needconstext
2296
    add_cflags -msg_disable nomainieee
2297
    add_cflags -msg_disable ptrmismatch1
2298
    add_cflags -msg_disable unreachcode
2299
fi
2300

    
2301
# PIC flags for shared library objects where they are needed
2302
if enabled shared; then
2303
    # LIBOBJFLAGS may have already been set in the OS configuration
2304
    if test -z "$LIBOBJFLAGS" ; then
2305
        case "${subarch-$arch}" in
2306
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2307
        esac
2308
    fi
2309
fi
2310

    
2311
if enabled gprof; then
2312
    add_cflags  -p
2313
    add_ldflags -p
2314
fi
2315

    
2316
# Find out if the .align argument is a power of two or not.
2317
check_asm asmalign_pot '".align 3"'
2318

    
2319
enabled_any $DECODER_LIST      && enable decoders
2320
enabled_any $ENCODER_LIST      && enable encoders
2321
enabled_any $HWACCEL_LIST      && enable hwaccels
2322
enabled_any $BSF_LIST          && enable bsfs
2323
enabled_any $DEMUXER_LIST      && enable demuxers
2324
enabled_any $MUXER_LIST        && enable muxers
2325
enabled_any $FILTER_LIST       && enable filters
2326
enabled_any $INDEV_LIST        && enable demuxers
2327
enabled_any $OUTDEV_LIST       && enable muxers
2328
enabled_any $PROTOCOL_LIST     && enable protocols
2329

    
2330
enabled_any $THREADS_LIST      && enable threads
2331

    
2332
check_deps $CONFIG_LIST       \
2333
           $CONFIG_EXTRA      \
2334
           $HAVE_LIST         \
2335
           $DECODER_LIST      \
2336
           $ENCODER_LIST      \
2337
           $HWACCEL_LIST      \
2338
           $PARSER_LIST       \
2339
           $BSF_LIST          \
2340
           $DEMUXER_LIST      \
2341
           $MUXER_LIST        \
2342
           $FILTER_LIST       \
2343
           $INDEV_LIST        \
2344
           $OUTDEV_LIST       \
2345
           $PROTOCOL_LIST     \
2346

    
2347
echo "install prefix            $prefix"
2348
echo "source path               $source_path"
2349
echo "C compiler                $cc"
2350
echo ".align is power-of-two    $asmalign_pot"
2351
echo "ARCH                      $arch ($cpu)"
2352
if test "$build_suffix" != ""; then
2353
    echo "build suffix              $build_suffix"
2354
fi
2355
if test "$extra_version" != ""; then
2356
    echo "version string suffix     $extra_version"
2357
fi
2358
echo "big-endian                ${bigendian-no}"
2359
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2360
if enabled x86; then
2361
    echo "yasm                      ${yasm-no}"
2362
    echo "MMX enabled               ${mmx-no}"
2363
    echo "MMX2 enabled              ${mmx2-no}"
2364
    echo "3DNow! enabled            ${amd3dnow-no}"
2365
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2366
    echo "SSE enabled               ${sse-no}"
2367
    echo "SSSE3 enabled             ${ssse3-no}"
2368
    echo "CMOV enabled              ${cmov-no}"
2369
    echo "CMOV is fast              ${fast_cmov-no}"
2370
    echo "EBX available             ${ebx_available-no}"
2371
    echo "EBP available             ${ebp_available-no}"
2372
    echo "10 operands supported     ${ten_operands-no}"
2373
fi
2374
if enabled arm; then
2375
    echo "ARMv5TE enabled           ${armv5te-no}"
2376
    echo "ARMv6 enabled             ${armv6-no}"
2377
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2378
    echo "ARM VFP enabled           ${armvfp-no}"
2379
    echo "IWMMXT enabled            ${iwmmxt-no}"
2380
    echo "NEON enabled              ${neon-no}"
2381
fi
2382
if enabled mips; then
2383
    echo "MMI enabled               ${mmi-no}"
2384
fi
2385
if enabled ppc; then
2386
    echo "AltiVec enabled           ${altivec-no}"
2387
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2388
    echo "dcbzl available           ${dcbzl-no}"
2389
    echo "performance report        ${powerpc_perf-no}"
2390
fi
2391
if enabled sparc; then
2392
    echo "VIS enabled               ${vis-no}"
2393
fi
2394
echo "gprof enabled             ${gprof-no}"
2395
echo "debug symbols             ${debug-no}"
2396
echo "strip symbols             ${stripping-no}"
2397
echo "optimizations             ${optimizations-no}"
2398
echo "static                    ${static-no}"
2399
echo "shared                    ${shared-no}"
2400
echo "postprocessing support    ${postproc-no}"
2401
echo "new filter support        ${avfilter-no}"
2402
echo "filters using lavformat   ${avfilter_lavf-no}"
2403
echo "network support           ${network-no}"
2404
if enabled network; then
2405
    echo "IPv6 support              ${ipv6-no}"
2406
fi
2407
echo "threading support         ${thread_type-no}"
2408
echo "SDL support               ${sdl-no}"
2409
if enabled sdl_too_old; then
2410
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2411
fi
2412
echo "Sun medialib support      ${mlib-no}"
2413
echo "AVISynth enabled          ${avisynth-no}"
2414
echo "libdc1394 support         ${libdc1394-no}"
2415
echo "libdirac enabled          ${libdirac-no}"
2416
echo "libfaac enabled           ${libfaac-no}"
2417
echo "libfaad enabled           ${libfaad-no}"
2418
echo "libfaad dlopened          ${libfaadbin-no}"
2419
echo "libgsm enabled            ${libgsm-no}"
2420
echo "libmp3lame enabled        ${libmp3lame-no}"
2421
echo "libnut enabled            ${libnut-no}"
2422
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2423
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2424
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2425
echo "libschroedinger enabled   ${libschroedinger-no}"
2426
echo "libspeex enabled          ${libspeex-no}"
2427
echo "libtheora enabled         ${libtheora-no}"
2428
echo "libvorbis enabled         ${libvorbis-no}"
2429
echo "libx264 enabled           ${libx264-no}"
2430
echo "libxvid enabled           ${libxvid-no}"
2431
echo "zlib enabled              ${zlib-no}"
2432
echo "bzlib enabled             ${bzlib-no}"
2433
echo
2434

    
2435
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2436
    echo "Enabled ${type}s:"
2437
    eval list=\$$(toupper $type)_LIST
2438
    for part in $list; do
2439
        enabled $part && echo ${part%_*}
2440
    done | sort | pr -3 -t
2441
    echo
2442
done
2443

    
2444
license="LGPL version 2.1 or later"
2445
if enabled nonfree; then
2446
    license="nonfree and unredistributable"
2447
elif enabled gplv3; then
2448
    license="GPL version 3 or later"
2449
elif enabled lgplv3; then
2450
    license="LGPL version 3 or later"
2451
elif enabled gpl; then
2452
    license="GPL version 2 or later"
2453
fi
2454

    
2455
echo "License: $license"
2456

    
2457
echo "Creating config.mak and config.h..."
2458

    
2459
echo "# Automatically generated by configure - do not modify!" > config.mak
2460
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2461
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2462
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2463
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2464
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2465

    
2466
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2467
echo "prefix=$prefix" >> config.mak
2468
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2469
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2470
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2471
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2472
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2473
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2474
echo "SRC_PATH=\"$source_path\"" >> config.mak
2475
echo "SRC_PATH_BARE=$source_path" >> config.mak
2476
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2477
echo "CC=$cc" >> config.mak
2478
echo "AS=$as" >> config.mak
2479
echo "YASM=$yasmexe" >> config.mak
2480
echo "AR=$ar" >> config.mak
2481
echo "RANLIB=$ranlib" >> config.mak
2482
echo "LN_S=$ln_s" >> config.mak
2483
enabled stripping &&
2484
    echo "STRIP=$strip" >> config.mak ||
2485
    echo "STRIP=echo ignoring strip" >> config.mak
2486

    
2487
echo "CPPFLAGS?=$CPPFLAGS" >> config.mak
2488
echo "OPTFLAGS=$CFLAGS" >> config.mak
2489
echo "LDFLAGS=$LDFLAGS" >> config.mak
2490
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2491
echo "SHFLAGS=$SHFLAGS" >> config.mak
2492
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2493
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2494
echo "BUILD_STATIC=$static" >> config.mak
2495
echo "BUILDSUF=$build_suffix" >> config.mak
2496
echo "FULLNAME=$FULLNAME" >> config.mak
2497
echo "LIBPREF=$LIBPREF" >> config.mak
2498
echo "LIBSUF=$LIBSUF" >> config.mak
2499
echo "LIBNAME=$LIBNAME" >> config.mak
2500
echo "SLIBPREF=$SLIBPREF" >> config.mak
2501
echo "SLIBSUF=$SLIBSUF" >> config.mak
2502
echo "EXESUF=$EXESUF" >> config.mak
2503
echo "EXTRA_VERSION=$extra_version" >> config.mak
2504
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2505
echo "HOSTCC=$host_cc" >> config.mak
2506
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2507
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2508
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2509
echo "HOSTLIBS=$host_libs" >> config.mak
2510
echo "TARGET_EXEC=$target_exec" >> config.mak
2511
echo "TARGET_PATH=$target_path" >> config.mak
2512

    
2513
if enabled bigendian; then
2514
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2515
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2516
fi
2517

    
2518
if enabled sdl; then
2519
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2520
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2521
fi
2522
if enabled texi2html; then
2523
    echo "BUILD_DOC=yes" >> config.mak
2524
fi
2525

    
2526
get_version(){
2527
    name=$1
2528
    file=$source_path/$2
2529
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2530
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2531
    lcname=$(tolower $name)
2532
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2533
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2534
}
2535

    
2536
get_version LIBSWSCALE  libswscale/swscale.h
2537
get_version LIBPOSTPROC libpostproc/postprocess.h
2538
get_version LIBAVCODEC  libavcodec/avcodec.h
2539
get_version LIBAVDEVICE libavdevice/avdevice.h
2540
get_version LIBAVFORMAT libavformat/avformat.h
2541
get_version LIBAVUTIL   libavutil/avutil.h
2542
get_version LIBAVFILTER libavfilter/avfilter.h
2543

    
2544
if enabled shared; then
2545
    echo "BUILD_SHARED=yes" >> config.mak
2546
    echo "PIC=-fPIC -DPIC" >> config.mak
2547
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2548
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2549
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2550
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2551
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2552
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2553
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2554
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2555
fi
2556
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2557
echo "EXTRALIBS=$extralibs" >> config.mak
2558

    
2559
echo "ARCH=$arch" >> config.mak
2560

    
2561
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2562
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2563
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2564
                                      $CONFIG_EXTRA      \
2565
                                      $DECODER_LIST      \
2566
                                      $ENCODER_LIST      \
2567
                                      $HWACCEL_LIST      \
2568
                                      $PARSER_LIST       \
2569
                                      $BSF_LIST          \
2570
                                      $DEMUXER_LIST      \
2571
                                      $MUXER_LIST        \
2572
                                      $FILTER_LIST       \
2573
                                      $PROTOCOL_LIST     \
2574
                                      $INDEV_LIST        \
2575
                                      $OUTDEV_LIST       \
2576

    
2577
echo "#define restrict $_restrict" >> $TMPH
2578

    
2579
if enabled small; then
2580
    echo "#define av_always_inline"  >> $TMPH
2581
fi
2582

    
2583

    
2584
# Apparently it's not possible to portably echo a backslash.
2585
enabled asmalign_pot &&
2586
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2587
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2588

    
2589
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2590

    
2591
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2592

    
2593
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2594
cmp -s $TMPH config.h &&
2595
    echo "config.h is unchanged" ||
2596
    mv -f $TMPH config.h
2597

    
2598
# build tree in object directory if source path is different from current one
2599
if enabled source_path_used; then
2600
    DIRS="\
2601
        doc               \
2602
        libavcodec        \
2603
        libavcodec/alpha  \
2604
        libavcodec/arm    \
2605
        libavcodec/bfin   \
2606
        libavcodec/mlib   \
2607
        libavcodec/ppc    \
2608
        libavcodec/sh4    \
2609
        libavcodec/sparc  \
2610
        libavcodec/x86    \
2611
        libavdevice       \
2612
        libavfilter       \
2613
        libavformat       \
2614
        libavutil         \
2615
        libpostproc       \
2616
        libswscale        \
2617
        libswscale/bfin   \
2618
        libswscale/mlib   \
2619
        libswscale/ppc    \
2620
        libswscale/sparc  \
2621
        libswscale/x86    \
2622
        tests             \
2623
        tools             \
2624
        "
2625
    FILES="\
2626
        Makefile             \
2627
        common.mak           \
2628
        subdir.mak           \
2629
        doc/texi2pod.pl      \
2630
        libavcodec/Makefile  \
2631
        libavdevice/Makefile \
2632
        libavfilter/Makefile \
2633
        libavformat/Makefile \
2634
        libavutil/Makefile   \
2635
        libpostproc/Makefile \
2636
        libswscale/Makefile  \
2637
        "
2638
    for dir in $DIRS ; do
2639
        mkdir -p $dir
2640
    done
2641
    for f in $FILES ; do
2642
        $ln_s "$source_path/$f" $f
2643
    done
2644
fi
2645

    
2646

    
2647
# build pkg-config files
2648

    
2649
pkgconfig_generate(){
2650
name=$1
2651
shortname=${name#lib}${build_suffix}
2652
comment=$2
2653
version=$3
2654
libs=$4
2655
requires=$5
2656
cat <<EOF > $name/$name.pc
2657
prefix=$prefix
2658
exec_prefix=\${prefix}
2659
libdir=$libdir
2660
includedir=$incdir
2661

    
2662
Name: $name
2663
Description: $comment
2664
Version: $version
2665
Requires: $(disabled shared && echo $requires)
2666
Requires.private: $(enabled shared && echo $requires)
2667
Conflicts:
2668
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2669
Libs.private: $(enabled shared && echo $libs)
2670
Cflags: -I\${includedir}
2671
EOF
2672
cat <<EOF > $name/$name-uninstalled.pc
2673
prefix=
2674
exec_prefix=
2675
libdir=\${pcfiledir}
2676
includedir=${source_path}
2677

    
2678
Name: $name
2679
Description: $comment
2680
Version: $version
2681
Requires: $requires
2682
Conflicts:
2683
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2684
Cflags: -I\${includedir}
2685
EOF
2686
}
2687

    
2688
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2689
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2690
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2691
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2692
enabled avfilter &&
2693
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2694
enabled postproc &&
2695
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2696
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"