Statistics
| Branch: | Revision:

ffmpeg / configure @ 03e37762

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

    
226
log(){
227
    echo "$@" >> $logfile
228
}
229

    
230
log_file(){
231
    log BEGIN $1
232
    pr -n -t $1 >> $logfile
233
    log END $1
234
}
235

    
236
echolog(){
237
    log "$@"
238
    echo "$@"
239
}
240

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

    
262
# Avoid locale weirdness, besides we really just want to translate ASCII.
263
toupper(){
264
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
265
}
266

    
267
tolower(){
268
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
269
}
270

    
271
c_escape(){
272
    echo "$*" | sed 's/["\\]/\\\0/g'
273
}
274

    
275
set_all(){
276
    value=$1
277
    shift
278
    for var in $*; do
279
        eval $var=$value
280
    done
281
}
282

    
283
set_weak(){
284
    value=$1
285
    shift
286
    for var; do
287
        eval : \${$var:=$value}
288
    done
289
}
290

    
291
pushvar(){
292
    for var in $*; do
293
        eval level=\${${var}_level:=0}
294
        eval ${var}_${level}="\$$var"
295
        eval ${var}_level=$(($level+1))
296
    done
297
}
298

    
299
popvar(){
300
    for var in $*; do
301
        eval level=\${${var}_level:-0}
302
        test $level = 0 && continue
303
        eval level=$(($level-1))
304
        eval $var="\${${var}_${level}}"
305
        eval ${var}_level=$level
306
        eval unset ${var}_${level}
307
    done
308
}
309

    
310
enable(){
311
    set_all yes $*
312
}
313

    
314
disable(){
315
    set_all no $*
316
}
317

    
318
enable_weak(){
319
    set_weak yes $*
320
}
321

    
322
disable_weak(){
323
    set_weak no $*
324
}
325

    
326
enable_safe(){
327
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
328
}
329

    
330
disable_safe(){
331
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
332
}
333

    
334
do_enable_deep(){
335
    for var; do
336
        enabled $var && continue
337
        eval sel="\$${var}_select"
338
        eval sgs="\$${var}_suggest"
339
        pushvar var sgs
340
        enable_deep $sel
341
        popvar sgs
342
        enable_deep_weak $sgs
343
        popvar var
344
    done
345
}
346

    
347
enable_deep(){
348
    do_enable_deep $*
349
    enable $*
350
}
351

    
352
enable_deep_weak(){
353
    do_enable_deep $*
354
    enable_weak $*
355
}
356

    
357
enabled(){
358
    test "${1#!}" = "$1" && op== || op=!=
359
    eval test "x\$${1#!}" $op "xyes"
360
}
361

    
362
disabled(){
363
    test "${1#!}" = "$1" && op== || op=!=
364
    eval test "x\$${1#!}" $op "xno"
365
}
366

    
367
enabled_all(){
368
    for opt; do
369
        enabled $opt || return 1
370
    done
371
}
372

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

    
379
enabled_any(){
380
    for opt; do
381
        enabled $opt && return 0
382
    done
383
}
384

    
385
disabled_any(){
386
    for opt; do
387
        disabled $opt && return 0
388
    done
389
    return 1
390
}
391

    
392
set_default(){
393
    for opt; do
394
        eval : \${$opt:=\$${opt}_default}
395
    done
396
}
397

    
398
is_in(){
399
    value=$1
400
    shift
401
    for var in $*; do
402
        [ $var = $value ] && return 0
403
    done
404
    return 1
405
}
406

    
407
check_deps(){
408
    for cfg; do
409
        cfg="${cfg#!}"
410
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
411
        disabled ${cfg}_checking && continue
412
        enable ${cfg}_checking
413

    
414
        eval dep_all="\$${cfg}_deps"
415
        eval dep_any="\$${cfg}_deps_any"
416
        eval dep_sel="\$${cfg}_select"
417
        eval dep_sgs="\$${cfg}_suggest"
418

    
419
        pushvar cfg dep_all dep_any dep_sel dep_sgs
420
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
421
        popvar cfg dep_all dep_any dep_sel dep_sgs
422

    
423
        enabled_all  $dep_all || disable $cfg
424
        enabled_any  $dep_any || disable $cfg
425
        disabled_any $dep_sel && disable $cfg
426

    
427
        if enabled $cfg; then
428
            eval dep_extralibs="\$${cfg}_extralibs"
429
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
430
            enable_deep $dep_sel
431
            enable_deep_weak $dep_sgs
432
        fi
433

    
434
        disable ${cfg}_checking
435
    done
436
}
437

    
438
print_config(){
439
    pfx=$1
440
    header=$2
441
    makefile=$3
442
    shift 3
443
    for cfg; do
444
        ucname="`toupper $cfg`"
445
        if enabled $cfg; then
446
            echo "#define ${pfx}${ucname} 1" >> $header
447
            echo "${pfx}${ucname}=yes" >> $makefile
448
        else
449
            echo "#define ${pfx}${ucname} 0" >> $header
450
        fi
451
    done
452
}
453

    
454
flags_saved(){
455
    (: ${SAVE_CFLAGS?}) 2> /dev/null
456
}
457

    
458
save_flags(){
459
    flags_saved && return
460
    SAVE_CFLAGS="$CFLAGS"
461
    SAVE_LDFLAGS="$LDFLAGS"
462
    SAVE_extralibs="$extralibs"
463
}
464

    
465
restore_flags(){
466
    flags_saved || return
467
    CFLAGS="$SAVE_CFLAGS"
468
    LDFLAGS="$SAVE_LDFLAGS"
469
    extralibs="$SAVE_extralibs"
470
    unset SAVE_CFLAGS
471
    unset SAVE_LDFLAGS
472
    unset SAVE_extralibs
473
}
474

    
475
temp_cflags(){
476
    save_flags
477
    CFLAGS="$CFLAGS $*"
478
}
479

    
480
temp_ldflags(){
481
    save_flags
482
    LDFLAGS="$LDFLAGS $*"
483
}
484

    
485
temp_extralibs(){
486
    save_flags
487
    extralibs="$extralibs $*"
488
}
489

    
490
append(){
491
    var=$1
492
    shift
493
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
494
    eval "$var=\"\$$var $*\""
495
}
496

    
497
add_cflags(){
498
    append CFLAGS "$@"
499
}
500

    
501
add_ldflags(){
502
    append LDFLAGS "$@"
503
}
504

    
505
add_extralibs(){
506
    append extralibs "$@"
507
}
508

    
509
check_cmd(){
510
    log "$@"
511
    "$@" >> $logfile 2>&1
512
}
513

    
514
check_cc(){
515
    log check_cc "$@"
516
    cat > $TMPC
517
    log_file $TMPC
518
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
519
}
520

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

    
528
check_as(){
529
    log check_as "$@"
530
    cat > $TMPC
531
    log_file $TMPC
532
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
533
}
534

    
535
check_asm(){
536
    log check_asm "$@"
537
    name="$1"
538
    asm="$2"
539
    shift 2
540
    check_as "$@" <<EOF && enable $name || disable $name
541
void foo(void){ __asm__ volatile($asm); }
542
EOF
543
}
544

    
545
check_yasm(){
546
    log check_yasm "$@"
547
    echo "$1" > $TMPS
548
    log_file $TMPS
549
    shift 1
550
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
551
}
552

    
553
check_ld(){
554
    log check_ld "$@"
555
    check_cc || return
556
    flags=''
557
    libs=''
558
    for f; do
559
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
560
    done
561
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
562
}
563

    
564
check_cflags(){
565
    log check_cflags "$@"
566
    check_cc "$@" <<EOF && add_cflags "$@"
567
int x;
568
EOF
569
}
570

    
571
check_ldflags(){
572
    log check_ldflags "$@"
573
    check_ld "$@" <<EOF && add_ldflags "$@"
574
int main(void){ return 0; }
575
EOF
576
}
577

    
578
check_header(){
579
    log check_header "$@"
580
    header=$1
581
    shift
582
    disable_safe $header
583
    check_cpp "$@" <<EOF && enable_safe $header
584
#include <$header>
585
int x;
586
EOF
587
}
588

    
589
check_func(){
590
    log check_func "$@"
591
    func=$1
592
    shift
593
    disable $func
594
    check_ld "$@" <<EOF && enable $func
595
extern int $func();
596
int main(void){ $func(); }
597
EOF
598
}
599

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

    
620
check_cpp_condition(){
621
    log check_cpp_condition "$@"
622
    header=$1
623
    condition=$2
624
    check_cpp <<EOF
625
#include <$header>
626
#if !($condition)
627
#error "unsatisfied condition: $condition"
628
#endif
629
EOF
630
}
631

    
632
check_lib(){
633
    log check_lib "$@"
634
    header="$1"
635
    func="$2"
636
    shift 2
637
    temp_extralibs "$@"
638
    check_header $header && check_func $func && add_extralibs "$@"
639
    err=$?
640
    restore_flags
641
    return $err
642
}
643

    
644
check_lib2(){
645
    log check_lib2 "$@"
646
    headers="$1"
647
    func="$2"
648
    shift 2
649
    temp_extralibs "$@"
650
    check_func_headers "$headers" $func && add_extralibs "$@"
651
    err=$?
652
    restore_flags
653
    return $err
654
}
655

    
656
check_exec(){
657
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
658
}
659

    
660
check_exec_crash(){
661
    code=`cat`
662

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

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

    
686
check_type(){
687
    log check_type "$@"
688
    headers=$1
689
    type=$2
690
    shift 2
691
    disable $type
692
    incs=""
693
    for hdr in $headers; do
694
        incs="$incs
695
#include <$hdr>"
696
    done
697
    check_cc "$@" <<EOF && enable $type
698
$incs
699
$type v;
700
EOF
701
}
702

    
703
require(){
704
    name="$1"
705
    header="$2"
706
    func="$3"
707
    shift 3
708
    check_lib $header $func "$@" || die "ERROR: $name not found"
709
}
710

    
711
require2(){
712
    name="$1"
713
    headers="$2"
714
    func="$3"
715
    shift 3
716
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
717
}
718

    
719
check_foo_config(){
720
    cfg=$1
721
    pkg=$2
722
    header=$3
723
    func=$4
724
    shift 4
725
    disable $cfg
726
    check_cmd ${pkg}-config --version
727
    err=$?
728
    if test "$err" = 0; then
729
        temp_cflags `${pkg}-config --cflags`
730
        temp_extralibs `${pkg}-config --libs`
731
        check_lib "$@" $header $func && enable $cfg
732
    fi
733
    return $err
734
}
735

    
736
apply(){
737
    file=$1
738
    shift
739
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
740
}
741

    
742
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
743
# system-dependent things.
744

    
745
COMPONENT_LIST="
746
    bsfs
747
    decoders
748
    demuxers
749
    encoders
750
    filters
751
    indevs
752
    muxers
753
    outdevs
754
    parsers
755
    protocols
756
"
757

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

    
811
THREADS_LIST='
812
    beosthreads
813
    os2threads
814
    pthreads
815
    w32threads
816
'
817

    
818
ARCH_LIST='
819
    alpha
820
    arm
821
    bfin
822
    ia64
823
    m68k
824
    mips
825
    parisc
826
    ppc
827
    s390
828
    sh4
829
    sparc
830
    sparc64
831
    x86
832
    x86_32
833
    x86_64
834
'
835

    
836
ARCH_EXT_LIST='
837
    altivec
838
    amd3dnow
839
    amd3dnowext
840
    armv5te
841
    armv6
842
    armv6t2
843
    armvfp
844
    iwmmxt
845
    mmi
846
    mmx
847
    mmx2
848
    neon
849
    ppc4xx
850
    sse
851
    ssse3
852
    vis
853
'
854

    
855
HAVE_LIST="
856
    $ARCH_EXT_LIST
857
    $THREADS_LIST
858
    alsa_asoundlib_h
859
    altivec_h
860
    arpa_inet_h
861
    bswap
862
    closesocket
863
    cmov
864
    conio_h
865
    dcbzl
866
    dev_bktr_ioctl_bt848_h
867
    dev_bktr_ioctl_meteor_h
868
    dev_ic_bt8xx_h
869
    dev_video_meteor_ioctl_meteor_h
870
    dev_video_bktr_ioctl_bt848_h
871
    dlfcn_h
872
    dlopen
873
    dos_paths
874
    ebp_available
875
    ebx_available
876
    fast_64bit
877
    fast_cmov
878
    fast_unaligned
879
    fork
880
    gethrtime
881
    GetProcessTimes
882
    getrusage
883
    inet_aton
884
    inline_asm
885
    libdc1394_1
886
    libdc1394_2
887
    llrint
888
    lrint
889
    lrintf
890
    machine_ioctl_bt848_h
891
    machine_ioctl_meteor_h
892
    malloc_h
893
    memalign
894
    mkstemp
895
    pld
896
    posix_memalign
897
    ppc64
898
    round
899
    roundf
900
    sdl
901
    sdl_video_size
902
    setmode
903
    socklen_t
904
    soundcard_h
905
    poll_h
906
    sys_mman_h
907
    sys_resource_h
908
    sys_select_h
909
    sys_soundcard_h
910
    sys_videoio_h
911
    ten_operands
912
    termios_h
913
    threads
914
    truncf
915
    winsock2_h
916
    yasm
917
"
918

    
919
# options emitted with CONFIG_ prefix but not available on command line
920
CONFIG_EXTRA="
921
"
922

    
923
CMDLINE_SELECT="
924
    $ARCH_EXT_LIST
925
    $CONFIG_LIST
926
    $THREADS_LIST
927
    cross_compile
928
    debug
929
    extra_warnings
930
    logging
931
    optimizations
932
    stripping
933
    yasm
934
"
935

    
936
PATHS_LIST='
937
    bindir
938
    datadir
939
    incdir
940
    libdir
941
    mandir
942
    prefix
943
    shlibdir
944
'
945

    
946
CMDLINE_SET="
947
    $PATHS_LIST
948
    arch
949
    as
950
    build_suffix
951
    cc
952
    cpu
953
    cross_prefix
954
    extra_version
955
    host_cc
956
    host_cflags
957
    host_ldflags
958
    host_libs
959
    logfile
960
    nm
961
    source_path
962
    sysinclude
963
    sysroot
964
    target_exec
965
    target_os
966
    target_path
967
"
968

    
969
# code dependency declarations
970

    
971
# architecture extensions
972
altivec_deps="ppc"
973
amd3dnow_deps="mmx"
974
amd3dnowext_deps="amd3dnow"
975
armv5te_deps="arm"
976
armv6_deps="arm"
977
armv6t2_deps="arm"
978
armvfp_deps="arm"
979
iwmmxt_deps="arm"
980
mmi_deps="mips"
981
mmx_deps="x86"
982
mmx2_deps="mmx"
983
neon_deps="arm"
984
ppc4xx_deps="ppc"
985
sse_deps="mmx"
986
ssse3_deps="sse"
987
vis_deps="sparc"
988

    
989
# decoders / encoders
990
aac_decoder_select="fft mdct"
991
ac3_decoder_deps="gpl"
992
ac3_decoder_select="fft mdct"
993
atrac3_decoder_select="fft mdct"
994
cavs_decoder_select="golomb"
995
cook_decoder_select="fft mdct"
996
cscd_decoder_suggest="zlib"
997
dca_decoder_select="fft mdct"
998
dnxhd_encoder_select="aandct"
999
dxa_decoder_select="zlib"
1000
eac3_decoder_deps="gpl"
1001
eac3_decoder_select="fft mdct"
1002
eatgq_decoder_select="aandct"
1003
eatqi_decoder_select="aandct"
1004
ffv1_decoder_select="golomb"
1005
flac_decoder_select="golomb"
1006
flac_encoder_select="golomb"
1007
flashsv_decoder_select="zlib"
1008
flashsv_encoder_select="zlib"
1009
flv_encoder_select="aandct"
1010
h261_encoder_select="aandct"
1011
h263_encoder_select="aandct"
1012
h263p_encoder_select="aandct"
1013
h264_decoder_select="golomb"
1014
h264_vdpau_decoder_deps="vdpau"
1015
imc_decoder_select="fft mdct"
1016
jpegls_decoder_select="golomb"
1017
jpegls_encoder_select="golomb"
1018
ljpeg_encoder_select="aandct"
1019
loco_decoder_select="golomb"
1020
mjpeg_encoder_select="aandct"
1021
mpeg1video_encoder_select="aandct"
1022
mpeg2video_encoder_select="aandct"
1023
mpeg4_encoder_select="aandct"
1024
mpeg_vdpau_decoder_deps="vdpau"
1025
mpeg1_vdpau_decoder_deps="vdpau"
1026
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1027
msmpeg4v1_encoder_select="aandct"
1028
msmpeg4v2_encoder_select="aandct"
1029
msmpeg4v3_encoder_select="aandct"
1030
nellymoser_decoder_select="fft mdct"
1031
nellymoser_encoder_select="fft mdct"
1032
png_decoder_select="zlib"
1033
png_encoder_select="zlib"
1034
qdm2_decoder_select="fft mdct rdft"
1035
rv10_encoder_select="aandct"
1036
rv20_encoder_select="aandct"
1037
rv30_decoder_select="golomb"
1038
rv40_decoder_select="golomb"
1039
shorten_decoder_select="golomb"
1040
sonic_decoder_select="golomb"
1041
sonic_encoder_select="golomb"
1042
sonic_ls_encoder_select="golomb"
1043
svq3_decoder_select="golomb"
1044
svq3_decoder_suggest="zlib"
1045
tiff_decoder_suggest="zlib"
1046
tiff_encoder_suggest="zlib"
1047
tscc_decoder_select="zlib"
1048
vc1_vdpau_decoder_deps="vdpau"
1049
vorbis_decoder_select="fft mdct"
1050
vorbis_encoder_select="fft mdct"
1051
wmav1_decoder_select="fft mdct"
1052
wmav1_encoder_select="fft mdct"
1053
wmav2_decoder_select="fft mdct"
1054
wmav2_encoder_select="fft mdct"
1055
wmv1_encoder_select="aandct"
1056
wmv2_encoder_select="aandct"
1057
wmv3_vdpau_decoder_deps="vdpau"
1058
zlib_decoder_select="zlib"
1059
zlib_encoder_select="zlib"
1060
zmbv_decoder_select="zlib"
1061
zmbv_encoder_select="zlib"
1062

    
1063
# external libraries
1064
libamr_nb_decoder_deps="libamr_nb"
1065
libamr_nb_encoder_deps="libamr_nb"
1066
libamr_wb_decoder_deps="libamr_wb"
1067
libamr_wb_encoder_deps="libamr_wb"
1068
libdirac_decoder_deps="libdirac !libschroedinger"
1069
libdirac_encoder_deps="libdirac"
1070
libfaac_encoder_deps="libfaac"
1071
libfaad_decoder_deps="libfaad"
1072
libfaadbin_decoder_extralibs='$ldl'
1073
libgsm_decoder_deps="libgsm"
1074
libgsm_encoder_deps="libgsm"
1075
libgsm_ms_decoder_deps="libgsm"
1076
libgsm_ms_encoder_deps="libgsm"
1077
libmp3lame_encoder_deps="libmp3lame"
1078
libopenjpeg_decoder_deps="libopenjpeg"
1079
libschroedinger_decoder_deps="libschroedinger"
1080
libschroedinger_encoder_deps="libschroedinger"
1081
libspeex_decoder_deps="libspeex"
1082
libtheora_encoder_deps="libtheora"
1083
libvorbis_encoder_deps="libvorbis"
1084
libx264_encoder_deps="libx264"
1085
libxvid_encoder_deps="libxvid"
1086
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1087

    
1088
# demuxers / muxers
1089
ac3_demuxer_deps="ac3_parser"
1090
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1091
alsa_demuxer_extralibs="-lasound"
1092
alsa_muxer_deps="alsa_asoundlib_h"
1093
alsa_muxer_extralibs="-lasound"
1094
audio_beos_demuxer_deps="audio_beos"
1095
audio_beos_demuxer_extralibs="-lmedia -lbe"
1096
audio_beos_muxer_deps="audio_beos"
1097
audio_beos_muxer_extralibs="-lmedia -lbe"
1098
avisynth_demuxer_deps="avisynth"
1099
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1100
dirac_demuxer_deps="dirac_parser"
1101
dv1394_demuxer_deps="dv1394 dv_demuxer"
1102
libdc1394_demuxer_deps="libdc1394"
1103
libnut_demuxer_deps="libnut"
1104
libnut_muxer_deps="libnut"
1105
matroska_demuxer_suggest="zlib bzlib"
1106
mov_demuxer_suggest="zlib"
1107
mp3_demuxer_deps="mpegaudio_parser"
1108
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1109
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1110
redir_demuxer_deps="network"
1111
rtp_muxer_deps="network rtp_protocol"
1112
rtsp_demuxer_deps="sdp_demuxer"
1113
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1114
v4l_demuxer_deps="linux_videodev_h"
1115
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1116
vfwcap_demuxer_deps="capCreateCaptureWindow"
1117
vfwcap_demuxer_extralibs="-lvfw32"
1118
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1119
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1120

    
1121
# protocols
1122
gopher_protocol_deps="network"
1123
http_protocol_deps="network"
1124
rtp_protocol_deps="udp_protocol"
1125
tcp_protocol_deps="network"
1126
udp_protocol_deps="network"
1127

    
1128
# filters
1129
movie_filter_deps="avfilter_lavf"
1130

    
1131
# programs
1132
ffplay_deps="sdl"
1133
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1134
ffserver_extralibs='$ldl'
1135

    
1136

    
1137
# default parameters
1138

    
1139
logfile="config.err"
1140

    
1141
# installation paths
1142
prefix_default="/usr/local"
1143
bindir_default='${prefix}/bin'
1144
datadir_default='${prefix}/share/ffmpeg'
1145
incdir_default='${prefix}/include'
1146
libdir_default='${prefix}/lib'
1147
mandir_default='${prefix}/share/man'
1148
shlibdir_default="$libdir_default"
1149

    
1150
# toolchain
1151
ar="ar"
1152
as_default="gcc"
1153
cc_default="gcc"
1154
host_cc_default="gcc"
1155
ln_s="ln -sf"
1156
nm_default="nm"
1157
objformat="elf"
1158
ranlib="ranlib"
1159
strip="strip"
1160
yasmexe="yasm"
1161

    
1162
# machine
1163
arch=`uname -m`
1164
cpu="generic"
1165

    
1166
# OS
1167
target_os=$(tolower $(uname -s))
1168

    
1169
# configurable options
1170
enable debug
1171
enable ffmpeg
1172
enable ffplay
1173
enable ffserver
1174
enable ipv6
1175
enable mpegaudio_hp
1176
enable network
1177
enable optimizations
1178
enable protocols
1179
enable static
1180
enable stripping
1181

    
1182
# build settings
1183
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1184
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1185
FFSERVERLDFLAGS=-Wl,-E
1186
LIBPREF="lib"
1187
LIBSUF=".a"
1188
FULLNAME='$(NAME)$(BUILDSUF)'
1189
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1190
SLIBPREF="lib"
1191
SLIBSUF=".so"
1192
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1193
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1194
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1195
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1196

    
1197
host_cflags='-O3 -g -Wall'
1198
host_libs='-lm'
1199

    
1200
target_path='.'
1201

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

    
1206
# find source path
1207
source_path="`dirname \"$0\"`"
1208
enable source_path_used
1209
if test -z "$source_path" -o "$source_path" = "." ; then
1210
    source_path="`pwd`"
1211
    disable source_path_used
1212
else
1213
    source_path="`cd \"$source_path\"; pwd`"
1214
    echo "$source_path" | grep -q '[[:blank:]]' &&
1215
        die "Out of tree builds are impossible with whitespace in source path."
1216
fi
1217

    
1218
FFMPEG_CONFIGURATION="$@"
1219

    
1220
find_things(){
1221
    thing=$1
1222
    pattern=$2
1223
    file=$source_path/$3
1224
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1225
}
1226

    
1227
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1228
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1229
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1230
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1231
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1232
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1233
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1234
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1235
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1236
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1237

    
1238
enable $ARCH_EXT_LIST \
1239
       $DECODER_LIST \
1240
       $ENCODER_LIST \
1241
       $PARSER_LIST \
1242
       $BSF_LIST \
1243
       $DEMUXER_LIST \
1244
       $MUXER_LIST \
1245
       $FILTER_LIST \
1246
       $PROTOCOL_LIST \
1247
       $INDEV_LIST \
1248
       $OUTDEV_LIST \
1249

    
1250
die_unknown(){
1251
    echo "Unknown option \"$1\"."
1252
    echo "See $0 --help for available options."
1253
    exit 1
1254
}
1255

    
1256
show_list() {
1257
    suffix=_$1
1258
    shift
1259
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1260
    exit 0
1261
}
1262

    
1263
for opt do
1264
    optval="${opt#*=}"
1265
    case "$opt" in
1266
    --extra-cflags=*) add_cflags $optval
1267
    ;;
1268
    --extra-ldflags=*) add_ldflags $optval
1269
    ;;
1270
    --extra-libs=*) add_extralibs $optval
1271
    ;;
1272
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1273
    ;;
1274
    --enable-debug=*) debuglevel="$optval"
1275
    ;;
1276
    --enable-*=*|--disable-*=*)
1277
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1278
    case "$thing" in
1279
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1280
        *) die_unknown "$opt" ;;
1281
    esac
1282
    ;;
1283
    --enable-?*|--disable-?*)
1284
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1285
    if is_in $option $COMPONENT_LIST; then
1286
        eval $action \$$(toupper ${option%s})_LIST
1287
    elif is_in $option $CMDLINE_SELECT; then
1288
        $action $option
1289
    else
1290
        die_unknown $opt
1291
    fi
1292
    ;;
1293
    --list-*)
1294
        NAME="${opt#--list-}"
1295
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1296
        NAME=${NAME%s}
1297
        eval show_list $NAME \$$(toupper $NAME)_LIST
1298
    ;;
1299
    --help|-h) show_help
1300
    ;;
1301
    *)
1302
    optname="${opt%%=*}"
1303
    optname="${optname#--}"
1304
    optname=$(echo "$optname" | sed 's/-/_/g')
1305
    is_in $optname $CMDLINE_SET || die_unknown $opt
1306
    eval $optname='$optval'
1307
    ;;
1308
    esac
1309
done
1310

    
1311
disabled logging && logfile=/dev/null
1312

    
1313
echo "# $0 $@" > $logfile
1314
set >> $logfile
1315

    
1316
test -n "$cross_prefix" && enable cross_compile
1317

    
1318
ar="${cross_prefix}${ar}"
1319
as_default="${cross_prefix}${as_default}"
1320
cc_default="${cross_prefix}${cc_default}"
1321
nm_default="${cross_prefix}${nm_default}"
1322
ranlib="${cross_prefix}${ranlib}"
1323
strip="${cross_prefix}${strip}"
1324

    
1325
sysinclude_default="${sysroot}/usr/include"
1326

    
1327
set_default as cc nm sysinclude
1328
enabled cross_compile || host_cc_default=$cc
1329
set_default host_cc
1330

    
1331
case $target_os in
1332
    mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1333
esac
1334

    
1335
# set temporary file name
1336
: ${TMPDIR:=$TEMPDIR}
1337
: ${TMPDIR:=$TMP}
1338
: ${TMPDIR:=/tmp}
1339

    
1340
if ! check_cmd type mktemp; then
1341
    # simple replacement for missing mktemp
1342
    # NOT SAFE FOR GENERAL USE
1343
    mktemp(){
1344
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1345
    }
1346
fi
1347

    
1348
tmpfile(){
1349
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1350
        (set -C; exec > $tmp) 2>/dev/null ||
1351
        die "Unable to create temoporary file in $TMPDIR."
1352
    append TMPFILES $tmp
1353
    eval $1=$tmp
1354
}
1355

    
1356
trap 'rm -f -- $TMPFILES' EXIT
1357
trap exit HUP INT TERM
1358

    
1359
tmpfile TMPC  .c
1360
tmpfile TMPE  $EXESUF
1361
tmpfile TMPH  .h
1362
tmpfile TMPO  .o
1363
tmpfile TMPS  .S
1364
tmpfile TMPSH .sh
1365

    
1366
unset -f mktemp
1367

    
1368
# make sure we can execute files in $TMPDIR
1369
cat > $TMPSH 2>> $logfile <<EOF
1370
#! /bin/sh
1371
EOF
1372
chmod +x $TMPSH >> $logfile 2>&1
1373
if ! $TMPSH >> $logfile 2>&1; then
1374
    cat <<EOF
1375
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1376
variable to another directory and make sure that it is not mounted noexec.
1377
EOF
1378
    die "Sanity test failed."
1379
fi
1380

    
1381
if   $cc --version 2>/dev/null | grep -qi gcc; then
1382
    cc_type=gcc
1383
elif $cc --version 2>/dev/null | grep -q Intel; then
1384
    cc_type=icc
1385
elif $cc -v 2>&1 | grep -q xlc; then
1386
    cc_type=xlc
1387
elif $cc -V 2>/dev/null | grep -q Compaq; then
1388
    cc_type=ccc
1389
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1390
    debuglevel=3
1391
    add_ldflags -Wl,-z,now # calls to libots crash without this
1392
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1393
    test -d "$sysroot" || die "No valid sysroot specified."
1394
    cc_type=armcc
1395
    armcc_conf="$PWD/armcc.conf"
1396
    $cc --arm_linux_configure                 \
1397
        --arm_linux_config_file="$armcc_conf" \
1398
        --configure_sysroot="$sysroot"        \
1399
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1400
        die "Error creating armcc configuration file."
1401
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1402
fi
1403

    
1404
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1405

    
1406
if test -n "$sysroot"; then
1407
    case "$cc_type" in
1408
        gcc)
1409
            add_cflags  --sysroot="$sysroot"
1410
            add_ldflags --sysroot="$sysroot"
1411
        ;;
1412
    esac
1413
fi
1414

    
1415
# compiler sanity check
1416
check_exec <<EOF
1417
int main(void){ return 0; }
1418
EOF
1419
if test "$?" != 0; then
1420
    echo "$cc is unable to create an executable file."
1421
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1422
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1423
        echo "Only do this if you know what cross compiling means."
1424
    fi
1425
    die "C compiler test failed."
1426
fi
1427

    
1428
check_cflags -std=c99
1429
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1430
#include <stdlib.h>
1431
EOF
1432
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1433
#include <stdlib.h>
1434
EOF
1435

    
1436
case "$arch" in
1437
    alpha)
1438
        arch="alpha"
1439
        enable fast_64bit
1440
        check_cflags -mieee
1441
    ;;
1442
    arm|armv[4567]*l)
1443
        arch="arm"
1444
    ;;
1445
    avr32)
1446
    ;;
1447
    bfin)
1448
        arch="bfin"
1449
    ;;
1450
    ia64)
1451
        arch="ia64"
1452
        enable fast_64bit
1453
    ;;
1454
    m68k)
1455
        arch="m68k"
1456
    ;;
1457
    mips|mipsel|IP*)
1458
        arch="mips"
1459
    ;;
1460
    mips64)
1461
        arch="mips"
1462
        enable fast_64bit
1463
    ;;
1464
    parisc|hppa)
1465
        arch="parisc"
1466
    ;;
1467
    parisc64|hppa64)
1468
        arch="parisc"
1469
        enable fast_64bit
1470
    ;;
1471
    "Power Macintosh"|ppc|powerpc)
1472
        arch="ppc"
1473
        enable fast_unaligned
1474
    ;;
1475
    ppc64)
1476
        arch="ppc"
1477
        enable fast_64bit
1478
        enable fast_unaligned
1479
    ;;
1480
    s390|s390x)
1481
        arch="s390"
1482
    ;;
1483
    sh4|sh)
1484
        arch="sh4"
1485
    ;;
1486
    sparc)
1487
        arch="sparc"
1488
    ;;
1489
    sun4u|sparc64)
1490
        arch="sparc"
1491
        subarch="sparc64"
1492
        enable fast_64bit
1493
    ;;
1494
    i386|i486|i586|i686|i86pc|BePC)
1495
        arch="x86"
1496
        subarch="x86_32"
1497
        enable fast_unaligned
1498
    ;;
1499
    x86_64|amd64)
1500
        arch="x86"
1501
        subarch="x86_32"
1502
        enable cmov
1503
        enable fast_cmov
1504
        enable fast_unaligned
1505
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1506
        int test[sizeof(char*) - 7];
1507
EOF
1508
    ;;
1509
    *)
1510
        arch="unknown"
1511
    ;;
1512
esac
1513

    
1514
enable $arch $subarch
1515

    
1516
# OS specific
1517
case $target_os in
1518
    beos|haiku|zeta)
1519
        prefix_default="$HOME/config"
1520
        # helps building libavcodec
1521
        add_cflags -DPIC -fomit-frame-pointer
1522
        # 3 gcc releases known for BeOS, each with ugly bugs
1523
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1524
        case "$gcc_version" in
1525
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1526
            disable mmx
1527
            ;;
1528
          *20010315*) echo "BeBits gcc"
1529
            add_cflags -fno-expensive-optimizations
1530
            ;;
1531
        esac
1532
        SHFLAGS=-nostart
1533
        # enable BeOS things
1534
        enable audio_beos
1535
        # no need for libm, but the inet stuff
1536
        # Check for BONE
1537
        # XXX: actually should check for NOT net_server
1538
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1539
            network_extralibs="-lbind -lsocket"
1540
        else
1541
            enable beos_netserver
1542
            network_extralibs="-lnet"
1543
        fi ;;
1544
    sunos)
1545
        FFSERVERLDFLAGS=""
1546
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1547
        network_extralibs="-lsocket -lnsl"
1548
        add_cflags -D__EXTENSIONS__
1549
        ;;
1550
    netbsd)
1551
        oss_demuxer_extralibs="-lossaudio"
1552
        oss_muxer_extralibs="-lossaudio"
1553
        ;;
1554
    openbsd)
1555
        disable need_memalign
1556
        LIBOBJFLAGS='$(PIC)'
1557
        SHFLAGS='-shared'
1558
        oss_demuxer_extralibs="-lossaudio"
1559
        oss_muxer_extralibs="-lossaudio"
1560
        ;;
1561
    freebsd)
1562
        disable need_memalign
1563
        ;;
1564
    bsd/os)
1565
        osextralibs="-lpoll -lgnugetopt"
1566
        strip="strip -d"
1567
        ;;
1568
    darwin)
1569
        disable need_memalign
1570
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1571
        strip="strip -x"
1572
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1573
        SLIBSUF=".dylib"
1574
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1575
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1576
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1577
        objformat="macho"
1578
        enabled x86_64 && objformat="macho64"
1579
        ;;
1580
    mingw32*)
1581
        target_os=mingw32
1582
        LIBTARGET=i386
1583
        if enabled x86_64; then
1584
            disable need_memalign
1585
            LIBTARGET=x64
1586
        fi
1587
        shlibdir_default="$bindir_default"
1588
        disable ffserver
1589
        SLIBPREF=""
1590
        SLIBSUF=".dll"
1591
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1592
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1593
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1594
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1595
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1596
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1597
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1598
        objformat="win32"
1599
        enable dos_paths
1600
        if ! enabled x86_64; then
1601
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1602
                die "ERROR: MinGW runtime version must be >= 3.15."
1603
            enabled_any avisynth vfwcap_demuxer &&
1604
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1605
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1606
            fi
1607
        ;;
1608
    cygwin*)
1609
        target_os=cygwin
1610
        shlibdir_default="$bindir_default"
1611
        SLIBPREF="cyg"
1612
        SLIBSUF=".dll"
1613
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1614
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1615
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1616
        objformat="win32"
1617
        enable dos_paths
1618
        ;;
1619
    *-dos|freedos|opendos)
1620
        disable ffplay ffserver
1621
        disable $INDEV_LIST $OUTDEV_LIST
1622
        network_extralibs="-lsocket"
1623
        objformat="coff"
1624
        enable dos_paths
1625
        ;;
1626
    linux)
1627
        enable dv1394
1628
        ;;
1629
    irix*)
1630
        target_os=irix
1631
        ranlib="echo ignoring ranlib"
1632
        ;;
1633
    os/2*)
1634
        strip="lxlite"
1635
        ln_s="cp -f"
1636
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1637
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1638
        FFSERVERLDFLAGS=""
1639
        LIBSUF="_s.a"
1640
        SLIBPREF=""
1641
        SLIBSUF=".dll"
1642
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1643
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1644
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1645
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1646
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1647
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1648
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1649
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1650
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1651
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1652
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1653
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1654
        enable dos_paths
1655
        ;;
1656

    
1657
    *)
1658
        die "Unknown OS '$target_os'."
1659
        ;;
1660
esac
1661

    
1662
set_default $PATHS_LIST
1663

    
1664
add_extralibs $osextralibs
1665

    
1666
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1667
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1668

    
1669
# we need to build at least one lib type
1670
if ! enabled_any static shared; then
1671
    cat <<EOF
1672
At least one library type must be built.
1673
Specify --enable-static to build the static libraries or --enable-shared to
1674
build the shared libraries as well. To only build the shared libraries specify
1675
--disable-static in addition to --enable-shared.
1676
EOF
1677
    exit 1;
1678
fi
1679

    
1680
disabled static && LIBNAME=""
1681

    
1682
if enabled_any libfaad libfaadbin ; then
1683
    if check_header faad.h; then
1684
        check_cc <<EOF
1685
#include <faad.h>
1686
#ifndef FAAD2_VERSION
1687
ok faad1
1688
#endif
1689
int main(void) { return 0; }
1690
EOF
1691
        test $? = 0 && enable libfaad2
1692
    else
1693
        die "FAAD test failed."
1694
    fi
1695
fi
1696

    
1697

    
1698
if ! enabled gpl; then
1699
    die_gpl_disabled(){
1700
        name=$1
1701
        shift
1702
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1703
    }
1704
    die_gpl_disabled "The Postprocessing code" postproc
1705
    die_gpl_disabled "libx264"                 libx264
1706
    die_gpl_disabled "libxvidcore"             libxvid
1707
    die_gpl_disabled "FAAD2"                   libfaad2
1708
    die_gpl_disabled "The X11 grabber"         x11grab
1709
fi
1710

    
1711
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1712
    die "libamr is nonfree and --enable-nonfree is not specified."
1713
fi
1714

    
1715
check_deps $ARCH_EXT_LIST
1716

    
1717
test -z "$need_memalign" && need_memalign="$mmx"
1718

    
1719
#Darwin CC versions
1720
if test $target_os = darwin; then
1721
    if enabled xlc; then
1722
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1723
    else
1724
        add_cflags -pipe
1725
        check_cflags -force_cpusubtype_ALL
1726
        check_cflags -Wno-sign-compare
1727
        enabled shared || check_cflags -mdynamic-no-pic
1728
    fi
1729
fi
1730

    
1731
disabled optimizations || check_cflags -fomit-frame-pointer
1732

    
1733
# Add processor-specific flags
1734
if test $cpu != "generic"; then
1735
    warn_altivec(){
1736
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1737
    }
1738
    case $cpu in
1739
        601|ppc601|PowerPC601)
1740
            add_cflags -mcpu=601
1741
            warn_altivec enabled PPC601
1742
        ;;
1743
        603*|ppc603*|PowerPC603*)
1744
            add_cflags -mcpu=603
1745
            warn_altivec enabled PPC603
1746
        ;;
1747
        604*|ppc604*|PowerPC604*)
1748
            add_cflags -mcpu=604
1749
            warn_altivec enabled PPC604
1750
        ;;
1751
        G3|g3|75*|ppc75*|PowerPC75*)
1752
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1753
            warn_altivec enabled PPC75x
1754
        ;;
1755
        G4|g4|745*|ppc745*|PowerPC745*)
1756
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1757
            warn_altivec disabled PPC745x
1758
        ;;
1759
        74*|ppc74*|PowerPC74*)
1760
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1761
            warn_altivec disabled PPC74xx
1762
        ;;
1763
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1764
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1765
            warn_altivec disabled PPC970
1766
            enable ppc64
1767
        ;;
1768
        Cell|CELL|cell)
1769
            add_cflags -mcpu=cell
1770
            warn_altivec disabled Cell
1771
            enable ppc64
1772
        ;;
1773
        # targets that do NOT support conditional mov (cmov)
1774
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1775
            add_cflags -march=$cpu
1776
            disable cmov
1777
        ;;
1778
        # targets that do support conditional mov (cmov)
1779
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1780
            add_cflags -march=$cpu
1781
            enable cmov
1782
            enable fast_cmov
1783
        ;;
1784
        # targets that do support conditional mov but on which it's slow
1785
        pentium4|pentium4m|prescott|nocona)
1786
            add_cflags -march=$cpu
1787
            enable cmov
1788
            disable fast_cmov
1789
        ;;
1790
        sparc64)
1791
            add_cflags -mcpu=v9
1792
        ;;
1793
        arm11*|cortex*)
1794
            add_cflags -mcpu=$cpu
1795
            enable fast_unaligned
1796
        ;;
1797
        armv*)
1798
            add_cflags -march=$cpu
1799
        ;;
1800
        arm*)
1801
            add_cflags -mcpu=$cpu
1802
        ;;
1803
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1804
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1805
        ;;
1806
        *)
1807
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1808
        ;;
1809
    esac
1810
fi
1811

    
1812
check_cc <<EOF || die "Symbol mangling check failed."
1813
int ff_extern;
1814
EOF
1815
sym=$($nm -P -g $TMPO | grep ff_extern)
1816
extern_prefix=${sym%%ff_extern*}
1817

    
1818
check_cc <<EOF && enable inline_asm
1819
void foo(void) { __asm__ volatile ("" ::); }
1820
EOF
1821

    
1822
if enabled x86; then
1823
    # check whether EBP is available on x86
1824
    # As 'i' is stored on the stack, this program will crash
1825
    # if the base pointer is used to access it because the
1826
    # base pointer is cleared in the inline assembly code.
1827
    check_exec_crash <<EOF && enable ebp_available
1828
    volatile int i=0;
1829
    __asm__ volatile (
1830
        "xorl %%ebp, %%ebp"
1831
    ::: "%ebp");
1832
    return i;
1833
EOF
1834

    
1835
    # check wether EBX is available on x86
1836
    check_asm ebx_available '"":::"%ebx"'
1837

    
1838
    # check whether more than 10 operands are supported
1839
    check_cc <<EOF && enable ten_operands
1840
int main(void) {
1841
    int x=0;
1842
    __asm__ volatile(
1843
        ""
1844
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1845
    );
1846
    return 0;
1847
}
1848
EOF
1849

    
1850
    # check whether binutils is new enough to compile SSSE3/MMX2
1851
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1852
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1853

    
1854
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1855

    
1856
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1857
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1858
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1859
    case "$objformat" in
1860
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1861
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1862
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1863
    esac
1864
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1865
fi
1866

    
1867
# check for assembler specific support
1868

    
1869
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1870
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1871

    
1872
# check for SIMD availability
1873

    
1874
# AltiVec flags: The FSF version of GCC differs from the Apple version
1875
if enabled altivec; then
1876
    check_cflags -maltivec -mabi=altivec &&
1877
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1878
        check_cflags -faltivec
1879

    
1880
    # check if our compiler supports Motorola AltiVec C API
1881
    check_cc <<EOF || disable altivec
1882
$inc_altivec_h
1883
int main(void) {
1884
    vector signed int v1, v2, v3;
1885
    v1 = vec_add(v2,v3);
1886
    return 0;
1887
}
1888
EOF
1889

    
1890
    # check if our compiler supports braces for vector declarations
1891
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1892
$inc_altivec_h
1893
int main (void) { (vector int) {1}; return 0; }
1894
EOF
1895
fi
1896

    
1897
# We have to check if pld is a nop and disable it.
1898
enabled arm     && check_asm pld     '"pld [r0]"'
1899
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1900
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1901
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1902
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1903
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1904
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1905
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1906
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1907

    
1908
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1909

    
1910
# ---
1911
# big/little-endian test
1912
check_cc <<EOF || die "endian test failed"
1913
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1914
EOF
1915
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1916

    
1917
# ---
1918
# check availability of some header files
1919

    
1920
if check_func dlopen; then
1921
    ldl=
1922
elif check_func dlopen -ldl; then
1923
    ldl=-ldl
1924
fi
1925

    
1926
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1927
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1928

    
1929
check_func  fork
1930
check_func  gethrtime
1931
check_func  getrusage
1932
check_func  inet_aton $network_extralibs
1933
check_func  memalign
1934
check_func  mkstemp
1935
check_func  posix_memalign
1936
check_func_headers io.h setmode
1937
check_func_headers windows.h GetProcessTimes
1938

    
1939
check_header conio.h
1940
check_header dlfcn.h
1941
check_header malloc.h
1942
check_header poll.h
1943
check_header sys/mman.h
1944
check_header sys/resource.h
1945
check_header sys/select.h
1946
check_header termios.h
1947
check_header vdpau/vdpau.h
1948
check_header vdpau/vdpau_x11.h
1949
check_header X11/extensions/XvMClib.h
1950

    
1951
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1952
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1953
fi
1954

    
1955
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1956
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1957

    
1958
# check for some common methods of building with pthread support
1959
# do this before the optional library checks as some of them require pthreads
1960
if enabled pthreads; then
1961
    if check_func pthread_create; then
1962
        :
1963
    elif check_func pthread_create -pthread; then
1964
        add_cflags -pthread
1965
        add_extralibs -pthread
1966
    elif check_func pthread_create -pthreads; then
1967
        add_cflags -pthreads
1968
        add_extralibs -pthreads
1969
    elif check_func pthread_create -lpthreadGC2; then
1970
        add_extralibs -lpthreadGC2
1971
    elif ! check_lib pthread.h pthread_create -lpthread; then
1972
        die "ERROR: can't find pthreads library"
1973
    fi
1974
fi
1975

    
1976
for thread in $THREADS_LIST; do
1977
    if enabled $thread; then
1978
        test -n "$thread_type" &&
1979
            die "ERROR: Only one thread type must be selected." ||
1980
            thread_type="$thread"
1981
    fi
1982
done
1983

    
1984
check_lib math.h sin -lm
1985

    
1986
# test for C99 functions in math.h
1987
for func in llrint lrint lrintf round roundf truncf; do
1988
    check_exec <<EOF && enable $func || disable $func
1989
#include <math.h>
1990
int main(void) { return ($func(3.999f) > 0)?0:1; }
1991
EOF
1992
done
1993

    
1994
# these are off by default, so fail if requested and not available
1995
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1996
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1997
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1998
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1999
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2000
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2001
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2002
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2003
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2004
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2005
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2006
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2007
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2008
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2009
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2010
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2011
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2012
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2013
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2014
                        die "ERROR: libx264 version must be >= 0.65."; }
2015
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2016
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2017

    
2018
# libdc1394 check
2019
if enabled libdc1394; then
2020
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2021
        enable libdc1394_2; } ||
2022
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2023
        enable libdc1394_1; } ||
2024
    die "ERROR: No version of libdc1394 found "
2025
fi
2026

    
2027

    
2028
_restrict=
2029
for restrict_keyword in restrict __restrict__ __restrict; do
2030
    check_cc <<EOF && _restrict=$restrict_keyword && break
2031
void foo(char * $restrict_keyword p);
2032
EOF
2033
done
2034

    
2035
##########################################
2036
# SDL check
2037

    
2038
disable sdl_too_old
2039
disable sdl
2040
SDL_CONFIG="${cross_prefix}sdl-config"
2041
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2042
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
2043
    temp_cflags $sdl_cflags
2044
    temp_extralibs `"${SDL_CONFIG}" --libs`
2045
    if check_lib2 SDL.h SDL_Init; then
2046
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2047
        if test "$_sdlversion" -lt 121 ; then
2048
            enable sdl_too_old
2049
        else
2050
            enable sdl
2051
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2052
#include <SDL.h>
2053
int main(int argc, char **argv){
2054
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2055
    int w = vi->current_w;
2056
    return 0;
2057
}
2058
EOF
2059
        fi
2060
    fi
2061
    restore_flags
2062
fi
2063

    
2064
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2065

    
2066
##########################################
2067
# Network check
2068

    
2069
if enabled network; then
2070
    check_type "sys/types.h sys/socket.h" socklen_t
2071
    # Prefer arpa/inet.h over winsock2
2072
    if check_header arpa/inet.h ; then
2073
        check_func closesocket
2074
    elif check_header winsock2.h ; then
2075
        network_extralibs="-lws2_32"
2076
        check_type ws2tcpip.h socklen_t
2077
        check_func_headers winsock2.h closesocket
2078
    fi
2079
fi
2080

    
2081
##########################################
2082
# IPv6 check
2083

    
2084
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2085
#include <sys/types.h>
2086
#include <sys/socket.h>
2087
#include <netinet/in.h>
2088
#include <netdb.h>
2089
int main(void) {
2090
    struct sockaddr_storage saddr;
2091
    struct ipv6_mreq mreq6;
2092
    getaddrinfo(0,0,0,0);
2093
    getnameinfo(0,0,0,0,0,0,0);
2094
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2095
}
2096
EOF
2097

    
2098
check_header linux/videodev.h
2099
check_header linux/videodev2.h
2100
check_header sys/videoio.h
2101

    
2102
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2103

    
2104
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2105
{ check_header dev/bktr/ioctl_meteor.h &&
2106
  check_header dev/bktr/ioctl_bt848.h; } ||
2107
{ check_header machine/ioctl_meteor.h &&
2108
  check_header machine/ioctl_bt848.h; } ||
2109
{ check_header dev/video/meteor/ioctl_meteor.h &&
2110
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2111
check_header dev/ic/bt8xx.h
2112

    
2113
check_header sys/soundcard.h
2114
check_header soundcard.h
2115

    
2116
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2117

    
2118
# deal with the X11 frame grabber
2119
enabled x11grab                         &&
2120
check_header X11/Xlib.h                 &&
2121
check_header X11/extensions/XShm.h      &&
2122
check_func XOpenDisplay -lX11           &&
2123
check_func XShmCreateImage -lX11 -lXext
2124

    
2125
enabled debug && add_cflags -g"$debuglevel"
2126

    
2127
# add some useful compiler flags if supported
2128
check_cflags -Wdeclaration-after-statement
2129
check_cflags -Wall
2130
check_cflags -Wno-switch
2131
check_cflags -Wdisabled-optimization
2132
check_cflags -Wpointer-arith
2133
check_cflags -Wredundant-decls
2134
check_cflags -Wno-pointer-sign
2135
check_cflags -Wcast-qual
2136
check_cflags -Wwrite-strings
2137
check_cflags -Wtype-limits
2138
check_cflags -Wundef
2139
enabled extra_warnings && check_cflags -Winline
2140

    
2141
# add some linker flags
2142
check_ldflags -Wl,--warn-common
2143
check_ldflags -Wl,--as-needed
2144
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'
2145
check_ldflags -Wl,-Bsymbolic
2146

    
2147
if enabled small; then
2148
    check_cflags -Os            # not all compilers support -Os
2149
    optimizations="small"
2150
elif enabled optimizations; then
2151
    if enabled xlc; then
2152
        add_cflags  -O5
2153
        add_ldflags -O5
2154
    elif enabled ccc; then
2155
        add_cflags -fast
2156
    else
2157
        add_cflags -O3
2158
    fi
2159
fi
2160
check_cflags -fno-math-errno
2161
check_cflags -fno-signed-zeros
2162

    
2163
# add some flags for Intel C Compiler
2164
if enabled icc; then
2165
    # Just warnings, no remarks
2166
    check_cflags -w1
2167
    # -wd: Disable following warnings
2168
    # 144, 167, 556: -Wno-pointer-sign
2169
    # 10006: ignoring unknown option -fno-signed-zeros
2170
    # 10156: ignoring option '-W'; no argument required
2171
    check_cflags -wd144,167,556,10006,10156
2172
    # 11030: Warning unknown option --as-needed
2173
    # 10156: ignoring option '-export'; no argument required
2174
    check_ldflags -wd10156,11030
2175
    # Allow to compile with optimizations
2176
    check_ldflags -march=$cpu
2177
elif enabled ccc; then
2178
    # disable some annoying warnings
2179
    add_cflags -msg_disable cvtu32to64
2180
    add_cflags -msg_disable embedcomment
2181
    add_cflags -msg_disable needconstext
2182
    add_cflags -msg_disable nomainieee
2183
    add_cflags -msg_disable ptrmismatch1
2184
    add_cflags -msg_disable unreachcode
2185
fi
2186

    
2187
# PIC flags for shared library objects where they are needed
2188
if enabled shared; then
2189
    # LIBOBJFLAGS may have already been set in the OS configuration
2190
    if test -z "$LIBOBJFLAGS" ; then
2191
        case "${subarch-$arch}" in
2192
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2193
        esac
2194
    fi
2195
fi
2196

    
2197
if enabled gprof; then
2198
    add_cflags  -p
2199
    add_ldflags -p
2200
fi
2201

    
2202
# Find out if the .align argument is a power of two or not.
2203
check_asm asmalign_pot '".align 3"'
2204

    
2205
enabled_any $DECODER_LIST      && enable decoders
2206
enabled_any $ENCODER_LIST      && enable encoders
2207
enabled_any $BSF_LIST          && enable bsfs
2208
enabled_any $DEMUXER_LIST      && enable demuxers
2209
enabled_any $MUXER_LIST        && enable muxers
2210
enabled_any $FILTER_LIST       && enable filters
2211
enabled_any $INDEV_LIST        && enable demuxers
2212
enabled_any $OUTDEV_LIST       && enable muxers
2213
enabled_any $PROTOCOL_LIST     && enable protocols
2214

    
2215
enabled_any $THREADS_LIST      && enable threads
2216

    
2217
check_deps $CONFIG_LIST       \
2218
           $CONFIG_EXTRA      \
2219
           $HAVE_LIST         \
2220
           $DECODER_LIST      \
2221
           $ENCODER_LIST      \
2222
           $PARSER_LIST       \
2223
           $BSF_LIST          \
2224
           $DEMUXER_LIST      \
2225
           $MUXER_LIST        \
2226
           $FILTER_LIST       \
2227
           $INDEV_LIST        \
2228
           $OUTDEV_LIST       \
2229
           $PROTOCOL_LIST     \
2230

    
2231
echo "install prefix            $prefix"
2232
echo "source path               $source_path"
2233
echo "C compiler                $cc"
2234
echo ".align is power-of-two    $asmalign_pot"
2235
echo "ARCH                      $arch ($cpu)"
2236
if test "$build_suffix" != ""; then
2237
    echo "build suffix              $build_suffix"
2238
fi
2239
if test "$extra_version" != ""; then
2240
    echo "version string suffix     $extra_version"
2241
fi
2242
echo "big-endian                ${bigendian-no}"
2243
if enabled x86; then
2244
    echo "yasm                      ${yasm-no}"
2245
    echo "MMX enabled               ${mmx-no}"
2246
    echo "MMX2 enabled              ${mmx2-no}"
2247
    echo "3DNow! enabled            ${amd3dnow-no}"
2248
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2249
    echo "SSE enabled               ${sse-no}"
2250
    echo "SSSE3 enabled             ${ssse3-no}"
2251
    echo "CMOV enabled              ${cmov-no}"
2252
    echo "CMOV is fast              ${fast_cmov-no}"
2253
    echo "EBX available             ${ebx_available-no}"
2254
    echo "EBP available             ${ebp_available-no}"
2255
    echo "10 operands supported     ${ten_operands-no}"
2256
fi
2257
if enabled arm; then
2258
    echo "ARMv5TE enabled           ${armv5te-no}"
2259
    echo "ARMv6 enabled             ${armv6-no}"
2260
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2261
    echo "ARM VFP enabled           ${armvfp-no}"
2262
    echo "IWMMXT enabled            ${iwmmxt-no}"
2263
    echo "NEON enabled              ${neon-no}"
2264
fi
2265
if enabled mips; then
2266
    echo "MMI enabled               ${mmi-no}"
2267
fi
2268
if enabled ppc; then
2269
    echo "AltiVec enabled           ${altivec-no}"
2270
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2271
    echo "dcbzl available           ${dcbzl-no}"
2272
    echo "performance report        ${powerpc_perf-no}"
2273
fi
2274
if enabled sparc; then
2275
    echo "VIS enabled               ${vis-no}"
2276
fi
2277
echo "gprof enabled             ${gprof-no}"
2278
echo "debug symbols             ${debug-no}"
2279
echo "strip symbols             ${stripping-no}"
2280
echo "optimizations             ${optimizations-no}"
2281
echo "static                    ${static-no}"
2282
echo "shared                    ${shared-no}"
2283
echo "postprocessing support    ${postproc-no}"
2284
echo "new filter support        ${avfilter-no}"
2285
echo "filters using lavformat   ${avfilter_lavf-no}"
2286
echo "network support           ${network-no}"
2287
if enabled network; then
2288
    echo "IPv6 support              ${ipv6-no}"
2289
fi
2290
echo "threading support         ${thread_type-no}"
2291
echo "SDL support               ${sdl-no}"
2292
if enabled sdl_too_old; then
2293
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2294
fi
2295
echo "Sun medialib support      ${mlib-no}"
2296
echo "AVISynth enabled          ${avisynth-no}"
2297
echo "libamr-nb support         ${libamr_nb-no}"
2298
echo "libamr-wb support         ${libamr_wb-no}"
2299
echo "libdc1394 support         ${libdc1394-no}"
2300
echo "libdirac enabled          ${libdirac-no}"
2301
echo "libfaac enabled           ${libfaac-no}"
2302
echo "libfaad enabled           ${libfaad-no}"
2303
echo "libfaad dlopened          ${libfaadbin-no}"
2304
echo "libgsm enabled            ${libgsm-no}"
2305
echo "libmp3lame enabled        ${libmp3lame-no}"
2306
echo "libnut enabled            ${libnut-no}"
2307
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2308
echo "libschroedinger enabled   ${libschroedinger-no}"
2309
echo "libspeex enabled          ${libspeex-no}"
2310
echo "libtheora enabled         ${libtheora-no}"
2311
echo "libvorbis enabled         ${libvorbis-no}"
2312
echo "libx264 enabled           ${libx264-no}"
2313
echo "libxvid enabled           ${libxvid-no}"
2314
echo "vdpau enabled             ${vdpau-no}"
2315
echo "zlib enabled              ${zlib-no}"
2316
echo "bzlib enabled             ${bzlib-no}"
2317
echo
2318

    
2319
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2320
    echo "Enabled ${type}s:"
2321
    eval list=\$$(toupper $type)_LIST
2322
    for part in $list; do
2323
        enabled $part && echo ${part%_*}
2324
    done | sort | pr -3 -t
2325
    echo
2326
done
2327

    
2328
license="LGPL"
2329
if enabled nonfree; then
2330
    license="unredistributable"
2331
elif enabled gpl; then
2332
    license="GPL"
2333
fi
2334

    
2335
echo "License: $license"
2336

    
2337
echo "Creating config.mak and config.h..."
2338

    
2339
echo "# Automatically generated by configure - do not modify!" > config.mak
2340
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2341
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2342
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2343
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2344
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2345

    
2346
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2347
echo "prefix=$prefix" >> config.mak
2348
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2349
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2350
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2351
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2352
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2353
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2354
echo "CC=$cc" >> config.mak
2355
echo "AS=$as" >> config.mak
2356
echo "YASM=$yasmexe" >> config.mak
2357
echo "AR=$ar" >> config.mak
2358
echo "RANLIB=$ranlib" >> config.mak
2359
echo "LN_S=$ln_s" >> config.mak
2360
enabled stripping &&
2361
    echo "STRIP=$strip" >> config.mak ||
2362
    echo "STRIP=echo ignoring strip" >> config.mak
2363

    
2364
echo "OPTFLAGS=$CFLAGS" >> config.mak
2365
echo "LDFLAGS=$LDFLAGS" >> config.mak
2366
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2367
echo "SHFLAGS=$SHFLAGS" >> config.mak
2368
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2369
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2370
echo "BUILD_STATIC=$static" >> config.mak
2371
echo "BUILDSUF=$build_suffix" >> config.mak
2372
echo "FULLNAME=$FULLNAME" >> config.mak
2373
echo "LIBPREF=$LIBPREF" >> config.mak
2374
echo "LIBSUF=$LIBSUF" >> config.mak
2375
echo "LIBNAME=$LIBNAME" >> config.mak
2376
echo "SLIBPREF=$SLIBPREF" >> config.mak
2377
echo "SLIBSUF=$SLIBSUF" >> config.mak
2378
echo "EXESUF=$EXESUF" >> config.mak
2379
echo "EXTRA_VERSION=$extra_version" >> config.mak
2380
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2381
echo "HOSTCC=$host_cc" >> config.mak
2382
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2383
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2384
echo "HOSTLIBS=$host_libs" >> config.mak
2385
echo "TARGET_EXEC=$target_exec" >> config.mak
2386
echo "TARGET_PATH=$target_path" >> config.mak
2387

    
2388
if enabled bigendian; then
2389
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2390
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2391
fi
2392

    
2393
if enabled sdl; then
2394
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2395
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2396
fi
2397
if enabled texi2html; then
2398
    echo "BUILD_DOC=yes" >> config.mak
2399
fi
2400

    
2401
get_version(){
2402
    name=$1
2403
    file=$source_path/$2
2404
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2405
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2406
    lcname=$(tolower $name)
2407
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2408
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2409
}
2410

    
2411
get_version LIBSWSCALE  libswscale/swscale.h
2412
get_version LIBPOSTPROC libpostproc/postprocess.h
2413
get_version LIBAVCODEC  libavcodec/avcodec.h
2414
get_version LIBAVDEVICE libavdevice/avdevice.h
2415
get_version LIBAVFORMAT libavformat/avformat.h
2416
get_version LIBAVUTIL   libavutil/avutil.h
2417
get_version LIBAVFILTER libavfilter/avfilter.h
2418

    
2419
if enabled shared; then
2420
    echo "BUILD_SHARED=yes" >> config.mak
2421
    echo "PIC=-fPIC -DPIC" >> config.mak
2422
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2423
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2424
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2425
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2426
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2427
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2428
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2429
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2430
fi
2431
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2432
echo "EXTRALIBS=$extralibs" >> config.mak
2433

    
2434
echo "ARCH=$arch" >> config.mak
2435

    
2436
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2437
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2438
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2439
                                      $CONFIG_EXTRA      \
2440
                                      $DECODER_LIST      \
2441
                                      $ENCODER_LIST      \
2442
                                      $PARSER_LIST       \
2443
                                      $BSF_LIST          \
2444
                                      $DEMUXER_LIST      \
2445
                                      $MUXER_LIST        \
2446
                                      $FILTER_LIST       \
2447
                                      $PROTOCOL_LIST     \
2448
                                      $INDEV_LIST        \
2449
                                      $OUTDEV_LIST       \
2450

    
2451
echo "#define restrict $_restrict" >> $TMPH
2452

    
2453
if enabled small; then
2454
    echo "#define av_always_inline"  >> $TMPH
2455
fi
2456

    
2457
echo "SRC_PATH=\"$source_path\"" >> config.mak
2458
echo "SRC_PATH_BARE=$source_path" >> config.mak
2459
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2460

    
2461
# Apparently it's not possible to portably echo a backslash.
2462
enabled asmalign_pot &&
2463
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2464
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2465

    
2466
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2467

    
2468
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2469

    
2470
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2471
cmp -s $TMPH config.h &&
2472
    echo "config.h is unchanged" ||
2473
    mv -f $TMPH config.h
2474

    
2475
# build tree in object directory if source path is different from current one
2476
if enabled source_path_used; then
2477
    DIRS="\
2478
        doc               \
2479
        libavcodec        \
2480
        libavcodec/alpha  \
2481
        libavcodec/arm    \
2482
        libavcodec/bfin   \
2483
        libavcodec/mlib   \
2484
        libavcodec/ppc    \
2485
        libavcodec/sh4    \
2486
        libavcodec/sparc  \
2487
        libavcodec/x86    \
2488
        libavdevice       \
2489
        libavfilter       \
2490
        libavformat       \
2491
        libavutil         \
2492
        libpostproc       \
2493
        libswscale        \
2494
        tests             \
2495
        tools             \
2496
        "
2497
    FILES="\
2498
        Makefile             \
2499
        common.mak           \
2500
        subdir.mak           \
2501
        doc/texi2pod.pl      \
2502
        libavcodec/Makefile  \
2503
        libavdevice/Makefile \
2504
        libavfilter/Makefile \
2505
        libavformat/Makefile \
2506
        libavutil/Makefile   \
2507
        libpostproc/Makefile \
2508
        libswscale/Makefile  \
2509
        "
2510
    for dir in $DIRS ; do
2511
        mkdir -p $dir
2512
    done
2513
    for f in $FILES ; do
2514
        $ln_s "$source_path/$f" $f
2515
    done
2516
fi
2517

    
2518

    
2519
# build pkg-config files
2520

    
2521
pkgconfig_generate(){
2522
name=$1
2523
shortname=${name#lib}${build_suffix}
2524
comment=$2
2525
version=$3
2526
libs=$4
2527
requires=$5
2528
cat <<EOF > $name/$name.pc
2529
prefix=$prefix
2530
exec_prefix=\${prefix}
2531
libdir=$libdir
2532
includedir=$incdir
2533

    
2534
Name: $name
2535
Description: $comment
2536
Version: $version
2537
Requires: $(disabled shared && echo $requires)
2538
Requires.private: $(enabled shared && echo $requires)
2539
Conflicts:
2540
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2541
Libs.private: $(enabled shared && echo $libs)
2542
Cflags: -I\${includedir}
2543
EOF
2544
cat <<EOF > $name/$name-uninstalled.pc
2545
prefix=
2546
exec_prefix=
2547
libdir=\${pcfiledir}
2548
includedir=${source_path}
2549

    
2550
Name: $name
2551
Description: $comment
2552
Version: $version
2553
Requires: $requires
2554
Conflicts:
2555
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2556
Cflags: -I\${includedir}
2557
EOF
2558
}
2559

    
2560
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2561
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2562
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2563
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2564
enabled avfilter &&
2565
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2566
enabled postproc &&
2567
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2568
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"