Statistics
| Branch: | Revision:

ffmpeg / configure @ 85dd97ad

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

    
231
log(){
232
    echo "$@" >> $logfile
233
}
234

    
235
log_file(){
236
    log BEGIN $1
237
    pr -n -t $1 >> $logfile
238
    log END $1
239
}
240

    
241
echolog(){
242
    log "$@"
243
    echo "$@"
244
}
245

    
246
die(){
247
    echolog "$@"
248
    cat <<EOF
249

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

    
268
# Avoid locale weirdness, besides we really just want to translate ASCII.
269
toupper(){
270
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
271
}
272

    
273
tolower(){
274
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
275
}
276

    
277
c_escape(){
278
    echo "$*" | sed 's/["\\]/\\\0/g'
279
}
280

    
281
set_all(){
282
    value=$1
283
    shift
284
    for var in $*; do
285
        eval $var=$value
286
    done
287
}
288

    
289
set_weak(){
290
    value=$1
291
    shift
292
    for var; do
293
        eval : \${$var:=$value}
294
    done
295
}
296

    
297
pushvar(){
298
    for var in $*; do
299
        eval level=\${${var}_level:=0}
300
        eval ${var}_${level}="\$$var"
301
        eval ${var}_level=$(($level+1))
302
    done
303
}
304

    
305
popvar(){
306
    for var in $*; do
307
        eval level=\${${var}_level:-0}
308
        test $level = 0 && continue
309
        eval level=$(($level-1))
310
        eval $var="\${${var}_${level}}"
311
        eval ${var}_level=$level
312
        eval unset ${var}_${level}
313
    done
314
}
315

    
316
enable(){
317
    set_all yes $*
318
}
319

    
320
disable(){
321
    set_all no $*
322
}
323

    
324
enable_weak(){
325
    set_weak yes $*
326
}
327

    
328
disable_weak(){
329
    set_weak no $*
330
}
331

    
332
enable_safe(){
333
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
334
}
335

    
336
disable_safe(){
337
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
338
}
339

    
340
do_enable_deep(){
341
    for var; do
342
        enabled $var && continue
343
        eval sel="\$${var}_select"
344
        eval sgs="\$${var}_suggest"
345
        pushvar var sgs
346
        enable_deep $sel
347
        popvar sgs
348
        enable_deep_weak $sgs
349
        popvar var
350
    done
351
}
352

    
353
enable_deep(){
354
    do_enable_deep $*
355
    enable $*
356
}
357

    
358
enable_deep_weak(){
359
    do_enable_deep $*
360
    enable_weak $*
361
}
362

    
363
enabled(){
364
    test "${1#!}" = "$1" && op== || op=!=
365
    eval test "x\$${1#!}" $op "xyes"
366
}
367

    
368
disabled(){
369
    test "${1#!}" = "$1" && op== || op=!=
370
    eval test "x\$${1#!}" $op "xno"
371
}
372

    
373
enabled_all(){
374
    for opt; do
375
        enabled $opt || return 1
376
    done
377
}
378

    
379
disabled_all(){
380
    for opt; do
381
        disabled $opt || return 1
382
    done
383
}
384

    
385
enabled_any(){
386
    for opt; do
387
        enabled $opt && return 0
388
    done
389
}
390

    
391
disabled_any(){
392
    for opt; do
393
        disabled $opt && return 0
394
    done
395
    return 1
396
}
397

    
398
set_default(){
399
    for opt; do
400
        eval : \${$opt:=\$${opt}_default}
401
    done
402
}
403

    
404
is_in(){
405
    value=$1
406
    shift
407
    for var in $*; do
408
        [ $var = $value ] && return 0
409
    done
410
    return 1
411
}
412

    
413
check_deps(){
414
    for cfg; do
415
        cfg="${cfg#!}"
416
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
417
        disabled ${cfg}_checking && continue
418
        enable ${cfg}_checking
419

    
420
        eval dep_all="\$${cfg}_deps"
421
        eval dep_any="\$${cfg}_deps_any"
422
        eval dep_sel="\$${cfg}_select"
423
        eval dep_sgs="\$${cfg}_suggest"
424

    
425
        pushvar cfg dep_all dep_any dep_sel dep_sgs
426
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
427
        popvar cfg dep_all dep_any dep_sel dep_sgs
428

    
429
        enabled_all  $dep_all || disable $cfg
430
        enabled_any  $dep_any || disable $cfg
431
        disabled_any $dep_sel && disable $cfg
432

    
433
        if enabled $cfg; then
434
            eval dep_extralibs="\$${cfg}_extralibs"
435
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
436
            enable_deep $dep_sel
437
            enable_deep_weak $dep_sgs
438
        fi
439

    
440
        disable ${cfg}_checking
441
    done
442
}
443

    
444
print_config(){
445
    pfx=$1
446
    header=$2
447
    makefile=$3
448
    shift 3
449
    for cfg; do
450
        ucname="$(toupper $cfg)"
451
        if enabled $cfg; then
452
            echo "#define ${pfx}${ucname} 1" >> $header
453
            echo "${pfx}${ucname}=yes" >> $makefile
454
        else
455
            echo "#define ${pfx}${ucname} 0" >> $header
456
        fi
457
    done
458
}
459

    
460
flags_saved(){
461
    (: ${SAVE_CFLAGS?}) 2> /dev/null
462
}
463

    
464
save_flags(){
465
    flags_saved && return
466
    SAVE_CFLAGS="$CFLAGS"
467
    SAVE_LDFLAGS="$LDFLAGS"
468
    SAVE_extralibs="$extralibs"
469
}
470

    
471
restore_flags(){
472
    flags_saved || return
473
    CFLAGS="$SAVE_CFLAGS"
474
    LDFLAGS="$SAVE_LDFLAGS"
475
    extralibs="$SAVE_extralibs"
476
    unset SAVE_CFLAGS
477
    unset SAVE_LDFLAGS
478
    unset SAVE_extralibs
479
}
480

    
481
temp_cflags(){
482
    save_flags
483
    CFLAGS="$CFLAGS $*"
484
}
485

    
486
temp_ldflags(){
487
    save_flags
488
    LDFLAGS="$LDFLAGS $*"
489
}
490

    
491
temp_extralibs(){
492
    save_flags
493
    extralibs="$extralibs $*"
494
}
495

    
496
append(){
497
    var=$1
498
    shift
499
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
500
    eval "$var=\"\$$var $*\""
501
}
502

    
503
add_cflags(){
504
    append CFLAGS "$@"
505
}
506

    
507
add_ldflags(){
508
    append LDFLAGS "$@"
509
}
510

    
511
add_extralibs(){
512
    append extralibs "$@"
513
}
514

    
515
check_cmd(){
516
    log "$@"
517
    "$@" >> $logfile 2>&1
518
}
519

    
520
check_cc(){
521
    log check_cc "$@"
522
    cat > $TMPC
523
    log_file $TMPC
524
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
525
}
526

    
527
check_cpp(){
528
    log check_cpp "$@"
529
    cat > $TMPC
530
    log_file $TMPC
531
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
532
}
533

    
534
check_as(){
535
    log check_as "$@"
536
    cat > $TMPC
537
    log_file $TMPC
538
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
539
}
540

    
541
check_asm(){
542
    log check_asm "$@"
543
    name="$1"
544
    asm="$2"
545
    shift 2
546
    check_as "$@" <<EOF && enable $name || disable $name
547
void foo(void){ __asm__ volatile($asm); }
548
EOF
549
}
550

    
551
check_yasm(){
552
    log check_yasm "$@"
553
    echo "$1" > $TMPS
554
    log_file $TMPS
555
    shift 1
556
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
557
}
558

    
559
check_ld(){
560
    log check_ld "$@"
561
    check_cc || return
562
    flags=''
563
    libs=''
564
    for f; do
565
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
566
    done
567
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
568
}
569

    
570
check_cflags(){
571
    log check_cflags "$@"
572
    check_cc "$@" <<EOF && add_cflags "$@"
573
int x;
574
EOF
575
}
576

    
577
check_ldflags(){
578
    log check_ldflags "$@"
579
    check_ld "$@" <<EOF && add_ldflags "$@"
580
int main(void){ return 0; }
581
EOF
582
}
583

    
584
check_header(){
585
    log check_header "$@"
586
    header=$1
587
    shift
588
    disable_safe $header
589
    check_cpp "$@" <<EOF && enable_safe $header
590
#include <$header>
591
int x;
592
EOF
593
}
594

    
595
check_func(){
596
    log check_func "$@"
597
    func=$1
598
    shift
599
    disable $func
600
    check_ld "$@" <<EOF && enable $func
601
extern int $func();
602
int main(void){ $func(); }
603
EOF
604
}
605

    
606
check_func_headers(){
607
    log check_func_headers "$@"
608
    headers=$1
609
    func=$2
610
    shift 2
611
    disable $func
612
    incs=""
613
    for hdr in $headers; do
614
        incs="$incs
615
#include <$hdr>"
616
    done
617
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
618
$incs
619
int main(int argc, char **argv){
620
    (void) $func;
621
    return 0;
622
}
623
EOF
624
}
625

    
626
check_cpp_condition(){
627
    log check_cpp_condition "$@"
628
    header=$1
629
    condition=$2
630
    check_cpp <<EOF
631
#include <$header>
632
#if !($condition)
633
#error "unsatisfied condition: $condition"
634
#endif
635
EOF
636
}
637

    
638
check_lib(){
639
    log check_lib "$@"
640
    header="$1"
641
    func="$2"
642
    shift 2
643
    temp_extralibs "$@"
644
    check_header $header && check_func $func && add_extralibs "$@"
645
    err=$?
646
    restore_flags
647
    return $err
648
}
649

    
650
check_lib2(){
651
    log check_lib2 "$@"
652
    headers="$1"
653
    func="$2"
654
    shift 2
655
    temp_extralibs "$@"
656
    check_func_headers "$headers" $func && add_extralibs "$@"
657
    err=$?
658
    restore_flags
659
    return $err
660
}
661

    
662
check_exec(){
663
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
664
}
665

    
666
check_exec_crash(){
667
    code=$(cat)
668

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

    
675
    (check_exec "$@") >> $logfile 2>&1 <<EOF
676
#include <signal.h>
677
static void sighandler(int sig){
678
    raise(SIGTERM);
679
}
680
int main(void){
681
    signal(SIGILL, sighandler);
682
    signal(SIGFPE, sighandler);
683
    signal(SIGSEGV, sighandler);
684
#ifdef SIGBUS
685
    signal(SIGBUS, sighandler);
686
#endif
687
    { $code }
688
}
689
EOF
690
}
691

    
692
check_type(){
693
    log check_type "$@"
694
    headers=$1
695
    type=$2
696
    shift 2
697
    disable $type
698
    incs=""
699
    for hdr in $headers; do
700
        incs="$incs
701
#include <$hdr>"
702
    done
703
    check_cc "$@" <<EOF && enable $type
704
$incs
705
$type v;
706
EOF
707
}
708

    
709
require(){
710
    name="$1"
711
    header="$2"
712
    func="$3"
713
    shift 3
714
    check_lib $header $func "$@" || die "ERROR: $name not found"
715
}
716

    
717
require2(){
718
    name="$1"
719
    headers="$2"
720
    func="$3"
721
    shift 3
722
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
723
}
724

    
725
check_foo_config(){
726
    cfg=$1
727
    pkg=$2
728
    header=$3
729
    func=$4
730
    shift 4
731
    disable $cfg
732
    check_cmd ${pkg}-config --version
733
    err=$?
734
    if test "$err" = 0; then
735
        temp_cflags $(${pkg}-config --cflags)
736
        temp_extralibs $(${pkg}-config --libs)
737
        check_lib "$@" $header $func && enable $cfg
738
    fi
739
    return $err
740
}
741

    
742
apply(){
743
    file=$1
744
    shift
745
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
746
}
747

    
748
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
749
# system-dependent things.
750

    
751
COMPONENT_LIST="
752
    bsfs
753
    decoders
754
    demuxers
755
    encoders
756
    filters
757
    hwaccels
758
    indevs
759
    muxers
760
    outdevs
761
    parsers
762
    protocols
763
"
764

    
765
CONFIG_LIST="
766
    $COMPONENT_LIST
767
    aandct
768
    avfilter
769
    avfilter_lavf
770
    avisynth
771
    beos_netserver
772
    bzlib
773
    fastdiv
774
    ffmpeg
775
    ffplay
776
    ffserver
777
    fft
778
    golomb
779
    gpl
780
    gprof
781
    gray
782
    hardcoded_tables
783
    ipv6
784
    libamr_nb
785
    libamr_wb
786
    libdc1394
787
    libdirac
788
    libfaac
789
    libfaad
790
    libfaadbin
791
    libgsm
792
    libmp3lame
793
    libnut
794
    libopenjpeg
795
    libschroedinger
796
    libspeex
797
    libtheora
798
    libvorbis
799
    libx264
800
    libxvid
801
    mdct
802
    memalign_hack
803
    mlib
804
    mpegaudio_hp
805
    network
806
    nonfree
807
    postproc
808
    powerpc_perf
809
    rdft
810
    runtime_cpudetect
811
    shared
812
    small
813
    static
814
    swscale_alpha
815
    x11grab
816
    zlib
817
"
818

    
819
THREADS_LIST='
820
    beosthreads
821
    os2threads
822
    pthreads
823
    w32threads
824
'
825

    
826
ARCH_LIST='
827
    alpha
828
    arm
829
    bfin
830
    ia64
831
    m68k
832
    mips
833
    mips64
834
    parisc
835
    ppc
836
    ppc64
837
    s390
838
    sh4
839
    sparc
840
    sparc64
841
    x86
842
    x86_32
843
    x86_64
844
'
845

    
846
ARCH_EXT_LIST='
847
    altivec
848
    amd3dnow
849
    amd3dnowext
850
    armv5te
851
    armv6
852
    armv6t2
853
    armvfp
854
    iwmmxt
855
    mmi
856
    mmx
857
    mmx2
858
    neon
859
    ppc4xx
860
    sse
861
    ssse3
862
    vis
863
'
864

    
865
HAVE_LIST="
866
    $ARCH_EXT_LIST
867
    $THREADS_LIST
868
    alsa_asoundlib_h
869
    altivec_h
870
    arpa_inet_h
871
    bigendian
872
    bswap
873
    closesocket
874
    cmov
875
    conio_h
876
    dcbzl
877
    dev_bktr_ioctl_bt848_h
878
    dev_bktr_ioctl_meteor_h
879
    dev_ic_bt8xx_h
880
    dev_video_meteor_ioctl_meteor_h
881
    dev_video_bktr_ioctl_bt848_h
882
    dlfcn_h
883
    dlopen
884
    dos_paths
885
    ebp_available
886
    ebx_available
887
    fast_64bit
888
    fast_cmov
889
    fast_unaligned
890
    fork
891
    gethrtime
892
    GetProcessTimes
893
    getrusage
894
    inet_aton
895
    inline_asm
896
    ldbrx
897
    libdc1394_1
898
    libdc1394_2
899
    llrint
900
    loongson
901
    lrint
902
    lrintf
903
    lzo1x_999_compress
904
    machine_ioctl_bt848_h
905
    machine_ioctl_meteor_h
906
    malloc_h
907
    memalign
908
    mkstemp
909
    pld
910
    posix_memalign
911
    round
912
    roundf
913
    sdl
914
    sdl_video_size
915
    setmode
916
    socklen_t
917
    soundcard_h
918
    poll_h
919
    sys_mman_h
920
    sys_resource_h
921
    sys_select_h
922
    sys_soundcard_h
923
    sys_videoio_h
924
    ten_operands
925
    termios_h
926
    threads
927
    truncf
928
    VirtualAlloc
929
    winsock2_h
930
    xform_asm
931
    yasm
932
"
933

    
934
# options emitted with CONFIG_ prefix but not available on command line
935
CONFIG_EXTRA="
936
"
937

    
938
CMDLINE_SELECT="
939
    $ARCH_EXT_LIST
940
    $CONFIG_LIST
941
    $THREADS_LIST
942
    cross_compile
943
    debug
944
    extra_warnings
945
    logging
946
    optimizations
947
    stripping
948
    yasm
949
"
950

    
951
PATHS_LIST='
952
    bindir
953
    datadir
954
    incdir
955
    libdir
956
    mandir
957
    prefix
958
    shlibdir
959
'
960

    
961
CMDLINE_SET="
962
    $PATHS_LIST
963
    arch
964
    as
965
    build_suffix
966
    cc
967
    cpu
968
    cross_prefix
969
    extra_version
970
    host_cc
971
    host_cflags
972
    host_ldflags
973
    host_libs
974
    host_os
975
    logfile
976
    nm
977
    source_path
978
    sysinclude
979
    sysroot
980
    target_exec
981
    target_os
982
    target_path
983
"
984

    
985
# code dependency declarations
986

    
987
# architecture extensions
988
altivec_deps="ppc"
989
amd3dnow_deps="mmx"
990
amd3dnowext_deps="amd3dnow"
991
armv5te_deps="arm"
992
armv6_deps="arm"
993
armv6t2_deps="arm"
994
armvfp_deps="arm"
995
iwmmxt_deps="arm"
996
mmi_deps="mips"
997
mmx_deps="x86"
998
mmx2_deps="mmx"
999
neon_deps="arm"
1000
ppc4xx_deps="ppc"
1001
sse_deps="mmx"
1002
ssse3_deps="sse"
1003
vis_deps="sparc"
1004

    
1005
# decoders / encoders / hardware accelerators
1006
aac_decoder_select="fft mdct"
1007
ac3_decoder_select="fft mdct"
1008
atrac3_decoder_select="fft mdct"
1009
cavs_decoder_select="golomb"
1010
cook_decoder_select="fft mdct"
1011
cscd_decoder_suggest="zlib"
1012
dca_decoder_select="fft mdct"
1013
dnxhd_encoder_select="aandct"
1014
dxa_decoder_select="zlib"
1015
eac3_decoder_select="fft mdct"
1016
eatgq_decoder_select="aandct"
1017
eatqi_decoder_select="aandct"
1018
ffv1_decoder_select="golomb"
1019
flac_decoder_select="golomb"
1020
flac_encoder_select="golomb"
1021
flashsv_decoder_select="zlib"
1022
flashsv_encoder_select="zlib"
1023
flv_encoder_select="aandct"
1024
h261_encoder_select="aandct"
1025
h263_encoder_select="aandct"
1026
h263_vaapi_hwaccel_deps="va_va_h"
1027
h263p_encoder_select="aandct"
1028
h264_decoder_select="golomb"
1029
h264_vaapi_hwaccel_deps="va_va_h"
1030
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1031
imc_decoder_select="fft mdct"
1032
jpegls_decoder_select="golomb"
1033
jpegls_encoder_select="golomb"
1034
ljpeg_encoder_select="aandct"
1035
loco_decoder_select="golomb"
1036
mjpeg_encoder_select="aandct"
1037
mpeg1video_encoder_select="aandct"
1038
mpeg2video_encoder_select="aandct"
1039
mpeg4_encoder_select="aandct"
1040
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1041
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1042
mpeg2_vaapi_hwaccel_deps="va_va_h"
1043
mpeg4_vaapi_hwaccel_deps="va_va_h"
1044
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1045
msmpeg4v1_encoder_select="aandct"
1046
msmpeg4v2_encoder_select="aandct"
1047
msmpeg4v3_encoder_select="aandct"
1048
nellymoser_decoder_select="fft mdct"
1049
nellymoser_encoder_select="fft mdct"
1050
png_decoder_select="zlib"
1051
png_encoder_select="zlib"
1052
qdm2_decoder_select="fft mdct rdft"
1053
rv10_encoder_select="aandct"
1054
rv20_encoder_select="aandct"
1055
rv30_decoder_select="golomb"
1056
rv40_decoder_select="golomb"
1057
shorten_decoder_select="golomb"
1058
sonic_decoder_select="golomb"
1059
sonic_encoder_select="golomb"
1060
sonic_ls_encoder_select="golomb"
1061
svq3_decoder_select="golomb"
1062
svq3_decoder_suggest="zlib"
1063
tiff_decoder_suggest="zlib"
1064
tiff_encoder_suggest="zlib"
1065
tscc_decoder_select="zlib"
1066
vc1_vaapi_hwaccel_deps="va_va_h"
1067
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1068
vorbis_decoder_select="fft mdct"
1069
vorbis_encoder_select="fft mdct"
1070
wmav1_decoder_select="fft mdct"
1071
wmav1_encoder_select="fft mdct"
1072
wmav2_decoder_select="fft mdct"
1073
wmav2_encoder_select="fft mdct"
1074
wmv1_encoder_select="aandct"
1075
wmv2_encoder_select="aandct"
1076
wmv3_vaapi_hwaccel_deps="va_va_h"
1077
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1078
zlib_decoder_select="zlib"
1079
zlib_encoder_select="zlib"
1080
zmbv_decoder_select="zlib"
1081
zmbv_encoder_select="zlib"
1082

    
1083
# external libraries
1084
libamr_nb_decoder_deps="libamr_nb"
1085
libamr_nb_encoder_deps="libamr_nb"
1086
libamr_wb_decoder_deps="libamr_wb"
1087
libamr_wb_encoder_deps="libamr_wb"
1088
libdirac_decoder_deps="libdirac !libschroedinger"
1089
libdirac_encoder_deps="libdirac"
1090
libfaac_encoder_deps="libfaac"
1091
libfaad_decoder_deps="libfaad"
1092
libfaadbin_decoder_extralibs='$ldl'
1093
libgsm_decoder_deps="libgsm"
1094
libgsm_encoder_deps="libgsm"
1095
libgsm_ms_decoder_deps="libgsm"
1096
libgsm_ms_encoder_deps="libgsm"
1097
libmp3lame_encoder_deps="libmp3lame"
1098
libopenjpeg_decoder_deps="libopenjpeg"
1099
libschroedinger_decoder_deps="libschroedinger"
1100
libschroedinger_encoder_deps="libschroedinger"
1101
libspeex_decoder_deps="libspeex"
1102
libtheora_encoder_deps="libtheora"
1103
libvorbis_encoder_deps="libvorbis"
1104
libx264_encoder_deps="libx264"
1105
libxvid_encoder_deps="libxvid"
1106

    
1107
# demuxers / muxers
1108
ac3_demuxer_deps="ac3_parser"
1109
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1110
alsa_demuxer_extralibs="-lasound"
1111
alsa_muxer_deps="alsa_asoundlib_h"
1112
alsa_muxer_extralibs="-lasound"
1113
audio_beos_demuxer_deps="audio_beos"
1114
audio_beos_demuxer_extralibs="-lmedia -lbe"
1115
audio_beos_muxer_deps="audio_beos"
1116
audio_beos_muxer_extralibs="-lmedia -lbe"
1117
avisynth_demuxer_deps="avisynth"
1118
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1119
dirac_demuxer_deps="dirac_parser"
1120
dv1394_demuxer_deps="dv1394 dv_demuxer"
1121
jack_demuxer_deps="jack_jack_h"
1122
jack_demuxer_extralibs="-ljack"
1123
libdc1394_demuxer_deps="libdc1394"
1124
libnut_demuxer_deps="libnut"
1125
libnut_muxer_deps="libnut"
1126
matroska_demuxer_suggest="zlib bzlib"
1127
mov_demuxer_suggest="zlib"
1128
mp3_demuxer_deps="mpegaudio_parser"
1129
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1130
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1131
redir_demuxer_deps="network"
1132
rtp_muxer_deps="network rtp_protocol"
1133
rtsp_demuxer_deps="sdp_demuxer"
1134
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1135
v4l_demuxer_deps="linux_videodev_h"
1136
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1137
vfwcap_demuxer_deps="capCreateCaptureWindow"
1138
vfwcap_demuxer_extralibs="-lvfw32"
1139
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1140
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1141

    
1142
# protocols
1143
gopher_protocol_deps="network"
1144
http_protocol_deps="network"
1145
rtp_protocol_deps="udp_protocol"
1146
tcp_protocol_deps="network"
1147
udp_protocol_deps="network"
1148

    
1149
# filters
1150
movie_filter_deps="avfilter_lavf"
1151

    
1152
# programs
1153
ffplay_deps="sdl"
1154
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1155
ffserver_extralibs='$ldl'
1156

    
1157

    
1158
# default parameters
1159

    
1160
logfile="config.err"
1161

    
1162
# installation paths
1163
prefix_default="/usr/local"
1164
bindir_default='${prefix}/bin'
1165
datadir_default='${prefix}/share/ffmpeg'
1166
incdir_default='${prefix}/include'
1167
libdir_default='${prefix}/lib'
1168
mandir_default='${prefix}/share/man'
1169
shlibdir_default="$libdir_default"
1170

    
1171
# toolchain
1172
ar="ar"
1173
cc_default="gcc"
1174
host_cc_default="gcc"
1175
ln_s="ln -sf"
1176
nm_default="nm"
1177
objformat="elf"
1178
ranlib="ranlib"
1179
strip="strip"
1180
yasmexe="yasm"
1181

    
1182
# machine
1183
arch=$(uname -m)
1184
cpu="generic"
1185

    
1186
# OS
1187
target_os=$(tolower $(uname -s))
1188
host_os=$target_os
1189

    
1190
# configurable options
1191
enable debug
1192
enable fastdiv
1193
enable ffmpeg
1194
enable ffplay
1195
enable ffserver
1196
enable ipv6
1197
enable mpegaudio_hp
1198
enable network
1199
enable optimizations
1200
enable protocols
1201
enable static
1202
enable stripping
1203
enable swscale_alpha
1204

    
1205
# build settings
1206
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1207
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1208
FFSERVERLDFLAGS=-Wl,-E
1209
LIBPREF="lib"
1210
LIBSUF=".a"
1211
FULLNAME='$(NAME)$(BUILDSUF)'
1212
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1213
SLIBPREF="lib"
1214
SLIBSUF=".so"
1215
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1216
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1217
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1218
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1219

    
1220
host_cflags='-O3 -g -Wall'
1221
host_libs='-lm'
1222

    
1223
target_path='.'
1224

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

    
1229
# find source path
1230
source_path="$(dirname "$0")"
1231
enable source_path_used
1232
if test -z "$source_path" -o "$source_path" = "." ; then
1233
    source_path="$(pwd)"
1234
    disable source_path_used
1235
else
1236
    source_path="$(cd "$source_path"; pwd)"
1237
    echo "$source_path" | grep -q '[[:blank:]]' &&
1238
        die "Out of tree builds are impossible with whitespace in source path."
1239
    test -e "$source_path/config.h" &&
1240
        die "Out of tree builds are impossible with config.h in source dir."
1241
fi
1242

    
1243
for v in "$@"; do
1244
    r="${v#*=}"
1245
    l="${v%$r}"
1246
    test "$r" = "${r#* }" || r="'$r'"
1247
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1248
done
1249

    
1250
find_things(){
1251
    thing=$1
1252
    pattern=$2
1253
    file=$source_path/$3
1254
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1255
}
1256

    
1257
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1258
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1259
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1260
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1261
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1262
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1263
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1264
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1265
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1266
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1267
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1268

    
1269
enable $ARCH_EXT_LIST \
1270
       $DECODER_LIST \
1271
       $ENCODER_LIST \
1272
       $HWACCEL_LIST \
1273
       $PARSER_LIST \
1274
       $BSF_LIST \
1275
       $DEMUXER_LIST \
1276
       $MUXER_LIST \
1277
       $FILTER_LIST \
1278
       $PROTOCOL_LIST \
1279
       $INDEV_LIST \
1280
       $OUTDEV_LIST \
1281

    
1282
die_unknown(){
1283
    echo "Unknown option \"$1\"."
1284
    echo "See $0 --help for available options."
1285
    exit 1
1286
}
1287

    
1288
show_list() {
1289
    suffix=_$1
1290
    shift
1291
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1292
    exit 0
1293
}
1294

    
1295
for opt do
1296
    optval="${opt#*=}"
1297
    case "$opt" in
1298
    --extra-cflags=*) add_cflags $optval
1299
    ;;
1300
    --extra-ldflags=*) add_ldflags $optval
1301
    ;;
1302
    --extra-libs=*) add_extralibs $optval
1303
    ;;
1304
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1305
    ;;
1306
    --enable-debug=*) debuglevel="$optval"
1307
    ;;
1308
    --enable-*=*|--disable-*=*)
1309
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1310
    case "$thing" in
1311
        encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1312
        *) die_unknown "$opt" ;;
1313
    esac
1314
    ;;
1315
    --enable-?*|--disable-?*)
1316
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1317
    if is_in $option $COMPONENT_LIST; then
1318
        eval $action \$$(toupper ${option%s})_LIST
1319
    elif is_in $option $CMDLINE_SELECT; then
1320
        $action $option
1321
    else
1322
        die_unknown $opt
1323
    fi
1324
    ;;
1325
    --list-*)
1326
        NAME="${opt#--list-}"
1327
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1328
        NAME=${NAME%s}
1329
        eval show_list $NAME \$$(toupper $NAME)_LIST
1330
    ;;
1331
    --help|-h) show_help
1332
    ;;
1333
    *)
1334
    optname="${opt%%=*}"
1335
    optname="${optname#--}"
1336
    optname=$(echo "$optname" | sed 's/-/_/g')
1337
    is_in $optname $CMDLINE_SET || die_unknown $opt
1338
    eval $optname='$optval'
1339
    ;;
1340
    esac
1341
done
1342

    
1343
disabled logging && logfile=/dev/null
1344

    
1345
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1346
set >> $logfile
1347

    
1348
test -n "$cross_prefix" && enable cross_compile
1349

    
1350
ar="${cross_prefix}${ar}"
1351
cc_default="${cross_prefix}${cc_default}"
1352
nm_default="${cross_prefix}${nm_default}"
1353
ranlib="${cross_prefix}${ranlib}"
1354
strip="${cross_prefix}${strip}"
1355

    
1356
sysinclude_default="${sysroot}/usr/include"
1357

    
1358
set_default cc nm sysinclude
1359
as_default=$cc
1360
enabled cross_compile || host_cc_default=$cc
1361
set_default host_cc
1362

    
1363
exesuf() {
1364
    case $1 in
1365
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1366
    esac
1367
}
1368

    
1369
EXESUF=$(exesuf $target_os)
1370
HOSTEXESUF=$(exesuf $host_os)
1371

    
1372
# set temporary file name
1373
: ${TMPDIR:=$TEMPDIR}
1374
: ${TMPDIR:=$TMP}
1375
: ${TMPDIR:=/tmp}
1376

    
1377
if ! check_cmd type mktemp; then
1378
    # simple replacement for missing mktemp
1379
    # NOT SAFE FOR GENERAL USE
1380
    mktemp(){
1381
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1382
    }
1383
fi
1384

    
1385
tmpfile(){
1386
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1387
        (set -C; exec > $tmp) 2>/dev/null ||
1388
        die "Unable to create temoporary file in $TMPDIR."
1389
    append TMPFILES $tmp
1390
    eval $1=$tmp
1391
}
1392

    
1393
trap 'rm -f -- $TMPFILES' EXIT
1394
trap exit HUP INT TERM
1395

    
1396
tmpfile TMPC  .c
1397
tmpfile TMPE  $EXESUF
1398
tmpfile TMPH  .h
1399
tmpfile TMPO  .o
1400
tmpfile TMPS  .S
1401
tmpfile TMPSH .sh
1402

    
1403
unset -f mktemp
1404

    
1405
# make sure we can execute files in $TMPDIR
1406
cat > $TMPSH 2>> $logfile <<EOF
1407
#! /bin/sh
1408
EOF
1409
chmod +x $TMPSH >> $logfile 2>&1
1410
if ! $TMPSH >> $logfile 2>&1; then
1411
    cat <<EOF
1412
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1413
variable to another directory and make sure that it is not mounted noexec.
1414
EOF
1415
    die "Sanity test failed."
1416
fi
1417

    
1418
if   $cc --version 2>/dev/null | grep -qi gcc; then
1419
    cc_type=gcc
1420
elif $cc --version 2>/dev/null | grep -q Intel; then
1421
    cc_type=icc
1422
elif $cc -v 2>&1 | grep -q xlc; then
1423
    cc_type=xlc
1424
elif $cc -V 2>/dev/null | grep -q Compaq; then
1425
    cc_type=ccc
1426
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1427
    debuglevel=3
1428
    add_ldflags -Wl,-z,now # calls to libots crash without this
1429
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1430
    test -d "$sysroot" || die "No valid sysroot specified."
1431
    cc_type=armcc
1432
    armcc_conf="$PWD/armcc.conf"
1433
    $cc --arm_linux_configure                 \
1434
        --arm_linux_config_file="$armcc_conf" \
1435
        --configure_sysroot="$sysroot"        \
1436
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1437
        die "Error creating armcc configuration file."
1438
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1439
    as_default="${cross_prefix}gcc"
1440
fi
1441

    
1442
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1443

    
1444
set_default as
1445

    
1446
if test -n "$sysroot"; then
1447
    case "$cc_type" in
1448
        gcc)
1449
            add_cflags  --sysroot="$sysroot"
1450
            add_ldflags --sysroot="$sysroot"
1451
        ;;
1452
    esac
1453
fi
1454

    
1455
# compiler sanity check
1456
check_exec <<EOF
1457
int main(void){ return 0; }
1458
EOF
1459
if test "$?" != 0; then
1460
    echo "$cc is unable to create an executable file."
1461
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1462
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1463
        echo "Only do this if you know what cross compiling means."
1464
    fi
1465
    die "C compiler test failed."
1466
fi
1467

    
1468
check_cflags -std=c99
1469
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1470
#include <stdlib.h>
1471
EOF
1472
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1473
#include <stdlib.h>
1474
EOF
1475

    
1476
case "$arch" in
1477
    alpha)
1478
        arch="alpha"
1479
        enable fast_64bit
1480
        check_cflags -mieee
1481
    ;;
1482
    arm|armv[4567]*l)
1483
        arch="arm"
1484
    ;;
1485
    avr32)
1486
    ;;
1487
    bfin)
1488
        arch="bfin"
1489
    ;;
1490
    ia64)
1491
        arch="ia64"
1492
        enable fast_64bit
1493
    ;;
1494
    m68k)
1495
        arch="m68k"
1496
    ;;
1497
    mips|mipsel|IP*)
1498
        arch="mips"
1499
    ;;
1500
    mips64)
1501
        arch="mips"
1502
        subarch="mips64"
1503
        enable fast_64bit
1504
    ;;
1505
    parisc|hppa)
1506
        arch="parisc"
1507
    ;;
1508
    parisc64|hppa64)
1509
        arch="parisc"
1510
        enable fast_64bit
1511
    ;;
1512
    "Power Macintosh"|ppc|powerpc)
1513
        arch="ppc"
1514
        enable fast_unaligned
1515
    ;;
1516
    ppc64)
1517
        arch="ppc"
1518
        subarch="ppc64"
1519
        enable fast_64bit
1520
        enable fast_unaligned
1521
    ;;
1522
    s390|s390x)
1523
        arch="s390"
1524
    ;;
1525
    sh4|sh)
1526
        arch="sh4"
1527
    ;;
1528
    sparc)
1529
        arch="sparc"
1530
    ;;
1531
    sun4u|sparc64)
1532
        arch="sparc"
1533
        subarch="sparc64"
1534
        enable fast_64bit
1535
    ;;
1536
    i386|i486|i586|i686|i86pc|BePC)
1537
        arch="x86"
1538
        subarch="x86_32"
1539
        enable fast_unaligned
1540
    ;;
1541
    x86_64|amd64)
1542
        arch="x86"
1543
        subarch="x86_32"
1544
        enable cmov
1545
        enable fast_cmov
1546
        enable fast_unaligned
1547
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1548
        int test[sizeof(char*) - 7];
1549
EOF
1550
    ;;
1551
    *)
1552
        arch="unknown"
1553
    ;;
1554
esac
1555

    
1556
enable $arch $subarch
1557

    
1558
# OS specific
1559
case $target_os in
1560
    beos|haiku|zeta)
1561
        prefix_default="$HOME/config"
1562
        # helps building libavcodec
1563
        add_cflags -DPIC -fomit-frame-pointer
1564
        # 3 gcc releases known for BeOS, each with ugly bugs
1565
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1566
        case "$gcc_version" in
1567
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1568
            disable mmx
1569
            ;;
1570
          *20010315*) echo "BeBits gcc"
1571
            add_cflags -fno-expensive-optimizations
1572
            ;;
1573
        esac
1574
        SHFLAGS=-nostart
1575
        # enable BeOS things
1576
        enable audio_beos
1577
        # no need for libm, but the inet stuff
1578
        # Check for BONE
1579
        # XXX: actually should check for NOT net_server
1580
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1581
            network_extralibs="-lbind -lsocket"
1582
        else
1583
            enable beos_netserver
1584
            network_extralibs="-lnet"
1585
        fi ;;
1586
    sunos)
1587
        FFSERVERLDFLAGS=""
1588
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1589
        network_extralibs="-lsocket -lnsl"
1590
        add_cflags -D__EXTENSIONS__
1591
        ;;
1592
    netbsd)
1593
        oss_demuxer_extralibs="-lossaudio"
1594
        oss_muxer_extralibs="-lossaudio"
1595
        ;;
1596
    openbsd)
1597
        disable need_memalign
1598
        LIBOBJFLAGS='$(PIC)'
1599
        SHFLAGS='-shared'
1600
        oss_demuxer_extralibs="-lossaudio"
1601
        oss_muxer_extralibs="-lossaudio"
1602
        ;;
1603
    freebsd)
1604
        disable need_memalign
1605
        ;;
1606
    bsd/os)
1607
        osextralibs="-lpoll -lgnugetopt"
1608
        strip="strip -d"
1609
        ;;
1610
    darwin)
1611
        disable need_memalign
1612
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1613
        strip="strip -x"
1614
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1615
        SLIBSUF=".dylib"
1616
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1617
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1618
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1619
        objformat="macho"
1620
        enabled x86_64 && objformat="macho64"
1621
        ;;
1622
    mingw32*)
1623
        target_os=mingw32
1624
        LIBTARGET=i386
1625
        if enabled x86_64; then
1626
            disable need_memalign
1627
            LIBTARGET=x64
1628
        fi
1629
        shlibdir_default="$bindir_default"
1630
        disable ffserver
1631
        SLIBPREF=""
1632
        SLIBSUF=".dll"
1633
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1634
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1635
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1636
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1637
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1638
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1639
        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'
1640
        objformat="win32"
1641
        enable dos_paths
1642
        check_cflags -fno-common
1643
        if ! enabled x86_64; then
1644
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1645
                die "ERROR: MinGW runtime version must be >= 3.15."
1646
            enabled_any avisynth vfwcap_demuxer &&
1647
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1648
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1649
            fi
1650
        ;;
1651
    cygwin*)
1652
        target_os=cygwin
1653
        shlibdir_default="$bindir_default"
1654
        SLIBPREF="cyg"
1655
        SLIBSUF=".dll"
1656
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1657
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1658
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1659
        objformat="win32"
1660
        enable dos_paths
1661
        check_cflags -fno-common
1662
        ;;
1663
    *-dos|freedos|opendos)
1664
        disable ffplay ffserver
1665
        disable $INDEV_LIST $OUTDEV_LIST
1666
        network_extralibs="-lsocket"
1667
        objformat="coff"
1668
        enable dos_paths
1669
        ;;
1670
    linux)
1671
        enable dv1394
1672
        ;;
1673
    irix*)
1674
        target_os=irix
1675
        ranlib="echo ignoring ranlib"
1676
        ;;
1677
    os/2*)
1678
        strip="lxlite"
1679
        ln_s="cp -f"
1680
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1681
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1682
        FFSERVERLDFLAGS=""
1683
        LIBSUF="_s.a"
1684
        SLIBPREF=""
1685
        SLIBSUF=".dll"
1686
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1687
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1688
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1689
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1690
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1691
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1692
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1693
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1694
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1695
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1696
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1697
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1698
        enable dos_paths
1699
        ;;
1700
    gnu/kfreebsd)
1701
        ;;
1702
    gnu)
1703
        ;;
1704

    
1705
    *)
1706
        die "Unknown OS '$target_os'."
1707
        ;;
1708
esac
1709

    
1710
set_default $PATHS_LIST
1711

    
1712
add_extralibs $osextralibs
1713

    
1714
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1715
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1716

    
1717
# we need to build at least one lib type
1718
if ! enabled_any static shared; then
1719
    cat <<EOF
1720
At least one library type must be built.
1721
Specify --enable-static to build the static libraries or --enable-shared to
1722
build the shared libraries as well. To only build the shared libraries specify
1723
--disable-static in addition to --enable-shared.
1724
EOF
1725
    exit 1;
1726
fi
1727

    
1728
disabled static && LIBNAME=""
1729

    
1730
if enabled_any libfaad libfaadbin ; then
1731
    if check_header faad.h; then
1732
        check_cc <<EOF
1733
#include <faad.h>
1734
#ifndef FAAD2_VERSION
1735
ok faad1
1736
#endif
1737
int main(void) { return 0; }
1738
EOF
1739
        test $? = 0 && enable libfaad2
1740
    else
1741
        die "FAAD test failed."
1742
    fi
1743
fi
1744

    
1745

    
1746
die_license_disabled() {
1747
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1748
}
1749

    
1750
die_license_disabled gpl libfaad2
1751
die_license_disabled gpl libx264
1752
die_license_disabled gpl libxvid
1753
die_license_disabled gpl postproc
1754
die_license_disabled gpl x11grab
1755

    
1756
die_license_disabled nonfree libamr_nb
1757
die_license_disabled nonfree libamr_wb
1758
die_license_disabled nonfree libfaac
1759

    
1760

    
1761
check_deps $ARCH_EXT_LIST
1762

    
1763
test -z "$need_memalign" && need_memalign="$mmx"
1764

    
1765
#Darwin CC versions
1766
if test $target_os = darwin; then
1767
    if enabled xlc; then
1768
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1769
    else
1770
        add_cflags -pipe
1771
        check_cflags -force_cpusubtype_ALL
1772
        check_cflags -Wno-sign-compare
1773
        enabled shared || check_cflags -mdynamic-no-pic
1774
    fi
1775
fi
1776

    
1777
disabled optimizations || check_cflags -fomit-frame-pointer
1778

    
1779
# Add processor-specific flags
1780
if test $cpu != "generic"; then
1781
    warn_altivec(){
1782
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1783
    }
1784
    case $cpu in
1785
        601|ppc601|PowerPC601)
1786
            add_cflags -mcpu=601
1787
            warn_altivec enabled PPC601
1788
        ;;
1789
        603*|ppc603*|PowerPC603*)
1790
            add_cflags -mcpu=603
1791
            warn_altivec enabled PPC603
1792
        ;;
1793
        604*|ppc604*|PowerPC604*)
1794
            add_cflags -mcpu=604
1795
            warn_altivec enabled PPC604
1796
        ;;
1797
        G3|g3|75*|ppc75*|PowerPC75*)
1798
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1799
            warn_altivec enabled PPC75x
1800
        ;;
1801
        G4|g4|745*|ppc745*|PowerPC745*)
1802
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1803
            warn_altivec disabled PPC745x
1804
        ;;
1805
        74*|ppc74*|PowerPC74*)
1806
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1807
            warn_altivec disabled PPC74xx
1808
        ;;
1809
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1810
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1811
            warn_altivec disabled PPC970
1812
        ;;
1813
        Cell|CELL|cell)
1814
            add_cflags -mcpu=cell
1815
            warn_altivec disabled Cell
1816
            enable ldbrx
1817
        ;;
1818
        # targets that do NOT support conditional mov (cmov)
1819
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1820
            add_cflags -march=$cpu
1821
            disable cmov
1822
        ;;
1823
        # targets that do support conditional mov (cmov)
1824
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1825
            add_cflags -march=$cpu
1826
            enable cmov
1827
            enable fast_cmov
1828
        ;;
1829
        # targets that do support conditional mov but on which it's slow
1830
        pentium4|pentium4m|prescott|nocona)
1831
            add_cflags -march=$cpu
1832
            enable cmov
1833
            disable fast_cmov
1834
        ;;
1835
        sparc64)
1836
            add_cflags -mcpu=v9
1837
        ;;
1838
        arm11*|cortex*)
1839
            add_cflags -mcpu=$cpu
1840
            enable fast_unaligned
1841
        ;;
1842
        armv*)
1843
            add_cflags -march=$cpu
1844
        ;;
1845
        arm*)
1846
            add_cflags -mcpu=$cpu
1847
        ;;
1848
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1849
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1850
        ;;
1851
        bf*)
1852
            add_cflags -mcpu=$cpu
1853
        ;;
1854
        mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1855
            add_cflags -march=$cpu
1856
        ;;
1857
        *)
1858
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1859
        ;;
1860
    esac
1861
fi
1862

    
1863
check_cc <<EOF || die "Symbol mangling check failed."
1864
int ff_extern;
1865
EOF
1866
sym=$($nm -P -g $TMPO | grep ff_extern)
1867
extern_prefix=${sym%%ff_extern*}
1868

    
1869
check_cc <<EOF && enable inline_asm
1870
void foo(void) { __asm__ volatile ("" ::); }
1871
EOF
1872

    
1873
if enabled x86; then
1874
    # check whether EBP is available on x86
1875
    # As 'i' is stored on the stack, this program will crash
1876
    # if the base pointer is used to access it because the
1877
    # base pointer is cleared in the inline assembly code.
1878
    check_exec_crash <<EOF && enable ebp_available
1879
    volatile int i=0;
1880
    __asm__ volatile (
1881
        "xorl %%ebp, %%ebp"
1882
    ::: "%ebp");
1883
    return i;
1884
EOF
1885

    
1886
    # check wether EBX is available on x86
1887
    check_asm ebx_available '"":::"%ebx"'
1888

    
1889
    # check whether more than 10 operands are supported
1890
    check_cc <<EOF && enable ten_operands
1891
int main(void) {
1892
    int x=0;
1893
    __asm__ volatile(
1894
        ""
1895
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1896
    );
1897
    return 0;
1898
}
1899
EOF
1900

    
1901
    # check whether binutils is new enough to compile SSSE3/MMX2
1902
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1903
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1904

    
1905
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1906

    
1907
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1908
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1909
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1910
    case "$objformat" in
1911
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1912
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1913
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1914
    esac
1915
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1916
fi
1917

    
1918
# check for assembler specific support
1919

    
1920
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1921

    
1922
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1923
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1924
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1925

    
1926
# check for SIMD availability
1927

    
1928
# AltiVec flags: The FSF version of GCC differs from the Apple version
1929
if enabled altivec; then
1930
    check_cflags -maltivec -mabi=altivec &&
1931
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1932
        check_cflags -faltivec
1933

    
1934
    # check if our compiler supports Motorola AltiVec C API
1935
    check_cc <<EOF || disable altivec
1936
$inc_altivec_h
1937
int main(void) {
1938
    vector signed int v1, v2, v3;
1939
    v1 = vec_add(v2,v3);
1940
    return 0;
1941
}
1942
EOF
1943

    
1944
    # check if our compiler supports braces for vector declarations
1945
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1946
$inc_altivec_h
1947
int main (void) { (vector int) {1}; return 0; }
1948
EOF
1949
fi
1950

    
1951
# We have to check if pld is a nop and disable it.
1952
enabled arm     && check_asm pld     '"pld [r0]"'
1953
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1954
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1955
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1956
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1957
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1958
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1959
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1960
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1961

    
1962
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1963

    
1964
# ---
1965
# big/little-endian test
1966
check_cc <<EOF || die "endian test failed"
1967
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1968
EOF
1969
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1970

    
1971
# ---
1972
# check availability of some header files
1973

    
1974
if check_func dlopen; then
1975
    ldl=
1976
elif check_func dlopen -ldl; then
1977
    ldl=-ldl
1978
fi
1979

    
1980
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1981
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1982

    
1983
check_func  fork
1984
check_func  gethrtime
1985
check_func  getrusage
1986
check_func  inet_aton $network_extralibs
1987
check_func  memalign
1988
check_func  mkstemp
1989
check_func  posix_memalign
1990
check_func_headers io.h setmode
1991
check_func_headers lzo/lzo1x.h lzo1x_999_compress
1992
check_func_headers windows.h GetProcessTimes
1993
check_func_headers windows.h VirtualAlloc
1994

    
1995
check_header conio.h
1996
check_header dlfcn.h
1997
check_header malloc.h
1998
check_header poll.h
1999
check_header sys/mman.h
2000
check_header sys/resource.h
2001
check_header sys/select.h
2002
check_header termios.h
2003
check_header vdpau/vdpau.h
2004
check_header vdpau/vdpau_x11.h
2005
check_header X11/extensions/XvMClib.h
2006

    
2007
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2008
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2009
fi
2010

    
2011
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2012
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2013

    
2014
# check for some common methods of building with pthread support
2015
# do this before the optional library checks as some of them require pthreads
2016
if enabled pthreads; then
2017
    if check_func pthread_create; then
2018
        :
2019
    elif check_func pthread_create -pthread; then
2020
        add_cflags -pthread
2021
        add_extralibs -pthread
2022
    elif check_func pthread_create -pthreads; then
2023
        add_cflags -pthreads
2024
        add_extralibs -pthreads
2025
    elif check_func pthread_create -lpthreadGC2; then
2026
        add_extralibs -lpthreadGC2
2027
    elif ! check_lib pthread.h pthread_create -lpthread; then
2028
        die "ERROR: can't find pthreads library"
2029
    fi
2030
fi
2031

    
2032
for thread in $THREADS_LIST; do
2033
    if enabled $thread; then
2034
        test -n "$thread_type" &&
2035
            die "ERROR: Only one thread type must be selected." ||
2036
            thread_type="$thread"
2037
    fi
2038
done
2039

    
2040
check_lib math.h sin -lm
2041
check_lib va/va.h vaInitialize -lva
2042

    
2043
# test for C99 functions in math.h
2044
for func in llrint lrint lrintf round roundf truncf; do
2045
    check_exec <<EOF && enable $func || disable $func
2046
#include <math.h>
2047
int main(void) { return ($func(3.999f) > 0)?0:1; }
2048
EOF
2049
done
2050

    
2051
# these are off by default, so fail if requested and not available
2052
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2053
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2054
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2055
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2056
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2057
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2058
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2059
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2060
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2061
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2062
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2063
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2064
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2065
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2066
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2067
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2068
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2069
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2070
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2071
                        die "ERROR: libx264 version must be >= 0.65."; }
2072
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2073
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2074

    
2075
# libdc1394 check
2076
if enabled libdc1394; then
2077
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2078
        enable libdc1394_2; } ||
2079
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2080
        enable libdc1394_1; } ||
2081
    die "ERROR: No version of libdc1394 found "
2082
fi
2083

    
2084

    
2085
_restrict=
2086
for restrict_keyword in restrict __restrict__ __restrict; do
2087
    check_cc <<EOF && _restrict=$restrict_keyword && break
2088
void foo(char * $restrict_keyword p);
2089
EOF
2090
done
2091

    
2092
##########################################
2093
# SDL check
2094

    
2095
disable sdl_too_old
2096
disable sdl
2097
SDL_CONFIG="${cross_prefix}sdl-config"
2098
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2099
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2100
    temp_cflags $sdl_cflags
2101
    temp_extralibs $("${SDL_CONFIG}" --libs)
2102
    if check_lib2 SDL.h SDL_Init; then
2103
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2104
        if test "$_sdlversion" -lt 121 ; then
2105
            enable sdl_too_old
2106
        else
2107
            enable sdl
2108
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2109
#include <SDL.h>
2110
int main(int argc, char **argv){
2111
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2112
    int w = vi->current_w;
2113
    return 0;
2114
}
2115
EOF
2116
        fi
2117
    fi
2118
    restore_flags
2119
fi
2120

    
2121
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2122

    
2123
##########################################
2124
# Network check
2125

    
2126
if enabled network; then
2127
    check_type "sys/types.h sys/socket.h" socklen_t
2128
    # Prefer arpa/inet.h over winsock2
2129
    if check_header arpa/inet.h ; then
2130
        check_func closesocket
2131
    elif check_header winsock2.h ; then
2132
        network_extralibs="-lws2_32"
2133
        check_type ws2tcpip.h socklen_t
2134
        check_func_headers winsock2.h closesocket
2135
    fi
2136
fi
2137

    
2138
##########################################
2139
# IPv6 check
2140

    
2141
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2142
#include <sys/types.h>
2143
#include <sys/socket.h>
2144
#include <netinet/in.h>
2145
#include <netdb.h>
2146
int main(void) {
2147
    struct sockaddr_storage saddr;
2148
    struct ipv6_mreq mreq6;
2149
    getaddrinfo(0,0,0,0);
2150
    getnameinfo(0,0,0,0,0,0,0);
2151
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2152
}
2153
EOF
2154

    
2155
check_header linux/videodev.h
2156
check_header linux/videodev2.h
2157
check_header sys/videoio.h
2158

    
2159
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2160

    
2161
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2162
{ check_header dev/bktr/ioctl_meteor.h &&
2163
  check_header dev/bktr/ioctl_bt848.h; } ||
2164
{ check_header machine/ioctl_meteor.h &&
2165
  check_header machine/ioctl_bt848.h; } ||
2166
{ check_header dev/video/meteor/ioctl_meteor.h &&
2167
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2168
check_header dev/ic/bt8xx.h
2169

    
2170
check_header sys/soundcard.h
2171
check_header soundcard.h
2172

    
2173
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2174

    
2175
check_lib2 jack/jack.h jack_client_open -ljack
2176

    
2177
# deal with the X11 frame grabber
2178
enabled x11grab                         &&
2179
check_header X11/Xlib.h                 &&
2180
check_header X11/extensions/XShm.h      &&
2181
check_func XOpenDisplay -lX11           &&
2182
check_func XShmCreateImage -lX11 -lXext
2183

    
2184
enabled debug && add_cflags -g"$debuglevel"
2185

    
2186
# add some useful compiler flags if supported
2187
check_cflags -Wdeclaration-after-statement
2188
check_cflags -Wall
2189
check_cflags -Wno-switch
2190
check_cflags -Wdisabled-optimization
2191
check_cflags -Wpointer-arith
2192
check_cflags -Wredundant-decls
2193
check_cflags -Wno-pointer-sign
2194
check_cflags -Wcast-qual
2195
check_cflags -Wwrite-strings
2196
check_cflags -Wtype-limits
2197
check_cflags -Wundef
2198
enabled extra_warnings && check_cflags -Winline
2199

    
2200
# add some linker flags
2201
check_ldflags -Wl,--warn-common
2202
check_ldflags -Wl,--as-needed
2203
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'
2204
check_ldflags -Wl,-Bsymbolic
2205

    
2206
if enabled small; then
2207
    check_cflags -Os            # not all compilers support -Os
2208
    optimizations="small"
2209
elif enabled optimizations; then
2210
    if enabled xlc; then
2211
        add_cflags  -O5
2212
        add_ldflags -O5
2213
    elif enabled ccc; then
2214
        add_cflags -fast
2215
    else
2216
        add_cflags -O3
2217
    fi
2218
fi
2219
check_cflags -fno-math-errno
2220
check_cflags -fno-signed-zeros
2221

    
2222
# add some flags for Intel C Compiler
2223
if enabled icc; then
2224
    # Just warnings, no remarks
2225
    check_cflags -w1
2226
    # -wd: Disable following warnings
2227
    # 144, 167, 556: -Wno-pointer-sign
2228
    # 10006: ignoring unknown option -fno-signed-zeros
2229
    # 10156: ignoring option '-W'; no argument required
2230
    check_cflags -wd144,167,556,10006,10156
2231
    # 11030: Warning unknown option --as-needed
2232
    # 10156: ignoring option '-export'; no argument required
2233
    check_ldflags -wd10156,11030
2234
    # Allow to compile with optimizations
2235
    check_ldflags -march=$cpu
2236
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2237
    enable ebp_available
2238
elif enabled ccc; then
2239
    # disable some annoying warnings
2240
    add_cflags -msg_disable cvtu32to64
2241
    add_cflags -msg_disable embedcomment
2242
    add_cflags -msg_disable needconstext
2243
    add_cflags -msg_disable nomainieee
2244
    add_cflags -msg_disable ptrmismatch1
2245
    add_cflags -msg_disable unreachcode
2246
fi
2247

    
2248
# PIC flags for shared library objects where they are needed
2249
if enabled shared; then
2250
    # LIBOBJFLAGS may have already been set in the OS configuration
2251
    if test -z "$LIBOBJFLAGS" ; then
2252
        case "${subarch-$arch}" in
2253
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2254
        esac
2255
    fi
2256
fi
2257

    
2258
if enabled gprof; then
2259
    add_cflags  -p
2260
    add_ldflags -p
2261
fi
2262

    
2263
# Find out if the .align argument is a power of two or not.
2264
check_asm asmalign_pot '".align 3"'
2265

    
2266
enabled_any $DECODER_LIST      && enable decoders
2267
enabled_any $ENCODER_LIST      && enable encoders
2268
enabled_any $HWACCEL_LIST      && enable hwaccels
2269
enabled_any $BSF_LIST          && enable bsfs
2270
enabled_any $DEMUXER_LIST      && enable demuxers
2271
enabled_any $MUXER_LIST        && enable muxers
2272
enabled_any $FILTER_LIST       && enable filters
2273
enabled_any $INDEV_LIST        && enable demuxers
2274
enabled_any $OUTDEV_LIST       && enable muxers
2275
enabled_any $PROTOCOL_LIST     && enable protocols
2276

    
2277
enabled_any $THREADS_LIST      && enable threads
2278

    
2279
check_deps $CONFIG_LIST       \
2280
           $CONFIG_EXTRA      \
2281
           $HAVE_LIST         \
2282
           $DECODER_LIST      \
2283
           $ENCODER_LIST      \
2284
           $HWACCEL_LIST      \
2285
           $PARSER_LIST       \
2286
           $BSF_LIST          \
2287
           $DEMUXER_LIST      \
2288
           $MUXER_LIST        \
2289
           $FILTER_LIST       \
2290
           $INDEV_LIST        \
2291
           $OUTDEV_LIST       \
2292
           $PROTOCOL_LIST     \
2293

    
2294
echo "install prefix            $prefix"
2295
echo "source path               $source_path"
2296
echo "C compiler                $cc"
2297
echo ".align is power-of-two    $asmalign_pot"
2298
echo "ARCH                      $arch ($cpu)"
2299
if test "$build_suffix" != ""; then
2300
    echo "build suffix              $build_suffix"
2301
fi
2302
if test "$extra_version" != ""; then
2303
    echo "version string suffix     $extra_version"
2304
fi
2305
echo "big-endian                ${bigendian-no}"
2306
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2307
if enabled x86; then
2308
    echo "yasm                      ${yasm-no}"
2309
    echo "MMX enabled               ${mmx-no}"
2310
    echo "MMX2 enabled              ${mmx2-no}"
2311
    echo "3DNow! enabled            ${amd3dnow-no}"
2312
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2313
    echo "SSE enabled               ${sse-no}"
2314
    echo "SSSE3 enabled             ${ssse3-no}"
2315
    echo "CMOV enabled              ${cmov-no}"
2316
    echo "CMOV is fast              ${fast_cmov-no}"
2317
    echo "EBX available             ${ebx_available-no}"
2318
    echo "EBP available             ${ebp_available-no}"
2319
    echo "10 operands supported     ${ten_operands-no}"
2320
fi
2321
if enabled arm; then
2322
    echo "ARMv5TE enabled           ${armv5te-no}"
2323
    echo "ARMv6 enabled             ${armv6-no}"
2324
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2325
    echo "ARM VFP enabled           ${armvfp-no}"
2326
    echo "IWMMXT enabled            ${iwmmxt-no}"
2327
    echo "NEON enabled              ${neon-no}"
2328
fi
2329
if enabled mips; then
2330
    echo "MMI enabled               ${mmi-no}"
2331
fi
2332
if enabled ppc; then
2333
    echo "AltiVec enabled           ${altivec-no}"
2334
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2335
    echo "dcbzl available           ${dcbzl-no}"
2336
    echo "performance report        ${powerpc_perf-no}"
2337
fi
2338
if enabled sparc; then
2339
    echo "VIS enabled               ${vis-no}"
2340
fi
2341
echo "gprof enabled             ${gprof-no}"
2342
echo "debug symbols             ${debug-no}"
2343
echo "strip symbols             ${stripping-no}"
2344
echo "optimizations             ${optimizations-no}"
2345
echo "static                    ${static-no}"
2346
echo "shared                    ${shared-no}"
2347
echo "postprocessing support    ${postproc-no}"
2348
echo "new filter support        ${avfilter-no}"
2349
echo "filters using lavformat   ${avfilter_lavf-no}"
2350
echo "network support           ${network-no}"
2351
if enabled network; then
2352
    echo "IPv6 support              ${ipv6-no}"
2353
fi
2354
echo "threading support         ${thread_type-no}"
2355
echo "SDL support               ${sdl-no}"
2356
if enabled sdl_too_old; then
2357
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2358
fi
2359
echo "Sun medialib support      ${mlib-no}"
2360
echo "AVISynth enabled          ${avisynth-no}"
2361
echo "libamr-nb support         ${libamr_nb-no}"
2362
echo "libamr-wb support         ${libamr_wb-no}"
2363
echo "libdc1394 support         ${libdc1394-no}"
2364
echo "libdirac enabled          ${libdirac-no}"
2365
echo "libfaac enabled           ${libfaac-no}"
2366
echo "libfaad enabled           ${libfaad-no}"
2367
echo "libfaad dlopened          ${libfaadbin-no}"
2368
echo "libgsm enabled            ${libgsm-no}"
2369
echo "libmp3lame enabled        ${libmp3lame-no}"
2370
echo "libnut enabled            ${libnut-no}"
2371
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2372
echo "libschroedinger enabled   ${libschroedinger-no}"
2373
echo "libspeex enabled          ${libspeex-no}"
2374
echo "libtheora enabled         ${libtheora-no}"
2375
echo "libvorbis enabled         ${libvorbis-no}"
2376
echo "libx264 enabled           ${libx264-no}"
2377
echo "libxvid enabled           ${libxvid-no}"
2378
echo "zlib enabled              ${zlib-no}"
2379
echo "bzlib enabled             ${bzlib-no}"
2380
echo
2381

    
2382
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2383
    echo "Enabled ${type}s:"
2384
    eval list=\$$(toupper $type)_LIST
2385
    for part in $list; do
2386
        enabled $part && echo ${part%_*}
2387
    done | sort | pr -3 -t
2388
    echo
2389
done
2390

    
2391
license="LGPL version 2.1 or later"
2392
if enabled nonfree; then
2393
    license="nonfree and unredistributable"
2394
elif enabled gpl; then
2395
    license="GPL version 2 or later"
2396
fi
2397

    
2398
echo "License: $license"
2399

    
2400
echo "Creating config.mak and config.h..."
2401

    
2402
echo "# Automatically generated by configure - do not modify!" > config.mak
2403
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2404
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2405
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2406
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2407
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2408

    
2409
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2410
echo "prefix=$prefix" >> config.mak
2411
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2412
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2413
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2414
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2415
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2416
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2417
echo "SRC_PATH=\"$source_path\"" >> config.mak
2418
echo "SRC_PATH_BARE=$source_path" >> config.mak
2419
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2420
echo "CC=$cc" >> config.mak
2421
echo "AS=$as" >> config.mak
2422
echo "YASM=$yasmexe" >> config.mak
2423
echo "AR=$ar" >> config.mak
2424
echo "RANLIB=$ranlib" >> config.mak
2425
echo "LN_S=$ln_s" >> config.mak
2426
enabled stripping &&
2427
    echo "STRIP=$strip" >> config.mak ||
2428
    echo "STRIP=echo ignoring strip" >> config.mak
2429

    
2430
echo "OPTFLAGS=$CFLAGS" >> config.mak
2431
echo "LDFLAGS=$LDFLAGS" >> config.mak
2432
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2433
echo "SHFLAGS=$SHFLAGS" >> config.mak
2434
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2435
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2436
echo "BUILD_STATIC=$static" >> config.mak
2437
echo "BUILDSUF=$build_suffix" >> config.mak
2438
echo "FULLNAME=$FULLNAME" >> config.mak
2439
echo "LIBPREF=$LIBPREF" >> config.mak
2440
echo "LIBSUF=$LIBSUF" >> config.mak
2441
echo "LIBNAME=$LIBNAME" >> config.mak
2442
echo "SLIBPREF=$SLIBPREF" >> config.mak
2443
echo "SLIBSUF=$SLIBSUF" >> config.mak
2444
echo "EXESUF=$EXESUF" >> config.mak
2445
echo "EXTRA_VERSION=$extra_version" >> config.mak
2446
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2447
echo "HOSTCC=$host_cc" >> config.mak
2448
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2449
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2450
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2451
echo "HOSTLIBS=$host_libs" >> config.mak
2452
echo "TARGET_EXEC=$target_exec" >> config.mak
2453
echo "TARGET_PATH=$target_path" >> config.mak
2454

    
2455
if enabled bigendian; then
2456
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2457
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2458
fi
2459

    
2460
if enabled sdl; then
2461
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2462
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2463
fi
2464
if enabled texi2html; then
2465
    echo "BUILD_DOC=yes" >> config.mak
2466
fi
2467

    
2468
get_version(){
2469
    name=$1
2470
    file=$source_path/$2
2471
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2472
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2473
    lcname=$(tolower $name)
2474
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2475
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2476
}
2477

    
2478
get_version LIBSWSCALE  libswscale/swscale.h
2479
get_version LIBPOSTPROC libpostproc/postprocess.h
2480
get_version LIBAVCODEC  libavcodec/avcodec.h
2481
get_version LIBAVDEVICE libavdevice/avdevice.h
2482
get_version LIBAVFORMAT libavformat/avformat.h
2483
get_version LIBAVUTIL   libavutil/avutil.h
2484
get_version LIBAVFILTER libavfilter/avfilter.h
2485

    
2486
if enabled shared; then
2487
    echo "BUILD_SHARED=yes" >> config.mak
2488
    echo "PIC=-fPIC -DPIC" >> config.mak
2489
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2490
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2491
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2492
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2493
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2494
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2495
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2496
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2497
fi
2498
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2499
echo "EXTRALIBS=$extralibs" >> config.mak
2500

    
2501
echo "ARCH=$arch" >> config.mak
2502

    
2503
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2504
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2505
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2506
                                      $CONFIG_EXTRA      \
2507
                                      $DECODER_LIST      \
2508
                                      $ENCODER_LIST      \
2509
                                      $HWACCEL_LIST      \
2510
                                      $PARSER_LIST       \
2511
                                      $BSF_LIST          \
2512
                                      $DEMUXER_LIST      \
2513
                                      $MUXER_LIST        \
2514
                                      $FILTER_LIST       \
2515
                                      $PROTOCOL_LIST     \
2516
                                      $INDEV_LIST        \
2517
                                      $OUTDEV_LIST       \
2518

    
2519
echo "#define restrict $_restrict" >> $TMPH
2520

    
2521
if enabled small; then
2522
    echo "#define av_always_inline"  >> $TMPH
2523
fi
2524

    
2525

    
2526
# Apparently it's not possible to portably echo a backslash.
2527
enabled asmalign_pot &&
2528
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2529
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2530

    
2531
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2532

    
2533
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2534

    
2535
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2536
cmp -s $TMPH config.h &&
2537
    echo "config.h is unchanged" ||
2538
    mv -f $TMPH config.h
2539

    
2540
# build tree in object directory if source path is different from current one
2541
if enabled source_path_used; then
2542
    DIRS="\
2543
        doc               \
2544
        libavcodec        \
2545
        libavcodec/alpha  \
2546
        libavcodec/arm    \
2547
        libavcodec/bfin   \
2548
        libavcodec/mlib   \
2549
        libavcodec/ppc    \
2550
        libavcodec/sh4    \
2551
        libavcodec/sparc  \
2552
        libavcodec/x86    \
2553
        libavdevice       \
2554
        libavfilter       \
2555
        libavformat       \
2556
        libavutil         \
2557
        libpostproc       \
2558
        libswscale        \
2559
        libswscale/bfin   \
2560
        libswscale/mlib   \
2561
        libswscale/ppc    \
2562
        libswscale/sparc  \
2563
        libswscale/x86    \
2564
        tests             \
2565
        tools             \
2566
        "
2567
    FILES="\
2568
        Makefile             \
2569
        common.mak           \
2570
        subdir.mak           \
2571
        doc/texi2pod.pl      \
2572
        libavcodec/Makefile  \
2573
        libavdevice/Makefile \
2574
        libavfilter/Makefile \
2575
        libavformat/Makefile \
2576
        libavutil/Makefile   \
2577
        libpostproc/Makefile \
2578
        libswscale/Makefile  \
2579
        "
2580
    for dir in $DIRS ; do
2581
        mkdir -p $dir
2582
    done
2583
    for f in $FILES ; do
2584
        $ln_s "$source_path/$f" $f
2585
    done
2586
fi
2587

    
2588

    
2589
# build pkg-config files
2590

    
2591
pkgconfig_generate(){
2592
name=$1
2593
shortname=${name#lib}${build_suffix}
2594
comment=$2
2595
version=$3
2596
libs=$4
2597
requires=$5
2598
cat <<EOF > $name/$name.pc
2599
prefix=$prefix
2600
exec_prefix=\${prefix}
2601
libdir=$libdir
2602
includedir=$incdir
2603

    
2604
Name: $name
2605
Description: $comment
2606
Version: $version
2607
Requires: $(disabled shared && echo $requires)
2608
Requires.private: $(enabled shared && echo $requires)
2609
Conflicts:
2610
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2611
Libs.private: $(enabled shared && echo $libs)
2612
Cflags: -I\${includedir}
2613
EOF
2614
cat <<EOF > $name/$name-uninstalled.pc
2615
prefix=
2616
exec_prefix=
2617
libdir=\${pcfiledir}
2618
includedir=${source_path}
2619

    
2620
Name: $name
2621
Description: $comment
2622
Version: $version
2623
Requires: $requires
2624
Conflicts:
2625
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2626
Cflags: -I\${includedir}
2627
EOF
2628
}
2629

    
2630
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2631
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2632
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2633
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2634
enabled avfilter &&
2635
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2636
enabled postproc &&
2637
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2638
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"