Statistics
| Branch: | Revision:

ffmpeg / configure @ 3fff6382

History | View | Annotate | Download (73.4 KB)

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

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

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

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

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

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

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

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

    
224
log(){
225
    echo "$@" >> $logfile
226
}
227

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

    
234
echolog(){
235
    log "$@"
236
    echo "$@"
237
}
238

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

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

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

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

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

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

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

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

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

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

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

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

    
325
do_enable_deep(){
326
    for var; do
327
        enabled $var && continue
328
        eval sel="\$${var}_select"
329
        eval sgs="\$${var}_suggest"
330
        pushvar var sgs
331
        enable_deep $sel
332
        popvar sgs
333
        enable_deep_weak $sgs
334
        popvar var
335
    done
336
}
337

    
338
enable_deep(){
339
    do_enable_deep $*
340
    enable $*
341
}
342

    
343
enable_deep_weak(){
344
    do_enable_deep $*
345
    enable_weak $*
346
}
347

    
348
enabled(){
349
    test "${1#!}" = "$1" && op== || op=!=
350
    eval test "x\$${1#!}" $op "xyes"
351
}
352

    
353
disabled(){
354
    test "${1#!}" = "$1" && op== || op=!=
355
    eval test "x\$${1#!}" $op "xno"
356
}
357

    
358
enabled_all(){
359
    for opt; do
360
        enabled $opt || return 1
361
    done
362
}
363

    
364
disabled_all(){
365
    for opt; do
366
        disabled $opt || return 1
367
    done
368
}
369

    
370
enabled_any(){
371
    for opt; do
372
        enabled $opt && return 0
373
    done
374
}
375

    
376
disabled_any(){
377
    for opt; do
378
        disabled $opt && return 0
379
    done
380
    return 1
381
}
382

    
383
set_default(){
384
    for opt; do
385
        eval : \${$opt:=\$${opt}_default}
386
    done
387
}
388

    
389
is_in(){
390
    value=$1
391
    shift
392
    for var in $*; do
393
        [ $var = $value ] && return 0
394
    done
395
    return 1
396
}
397

    
398
check_deps(){
399
    for cfg; do
400
        cfg="${cfg#!}"
401
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
402
        disabled ${cfg}_checking && continue
403
        enable ${cfg}_checking
404

    
405
        eval dep_all="\$${cfg}_deps"
406
        eval dep_any="\$${cfg}_deps_any"
407
        eval dep_sel="\$${cfg}_select"
408
        eval dep_sgs="\$${cfg}_suggest"
409

    
410
        pushvar cfg dep_all dep_any dep_sel dep_sgs
411
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
412
        popvar cfg dep_all dep_any dep_sel dep_sgs
413

    
414
        enabled_all  $dep_all || disable $cfg
415
        enabled_any  $dep_any || disable $cfg
416
        disabled_any $dep_sel && disable $cfg
417

    
418
        if enabled $cfg; then
419
            eval dep_extralibs="\$${cfg}_extralibs"
420
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
421
            enable_deep $dep_sel
422
            enable_deep_weak $dep_sgs
423
        fi
424

    
425
        disable ${cfg}_checking
426
    done
427
}
428

    
429
print_config(){
430
    pfx=$1
431
    header=$2
432
    makefile=$3
433
    shift 3
434
    for cfg; do
435
        ucname="`toupper $cfg`"
436
        if enabled $cfg; then
437
            echo "#define ${pfx}${ucname} 1" >> $header
438
            echo "${pfx}${ucname}=yes" >> $makefile
439
        else
440
            echo "#define ${pfx}${ucname} 0" >> $header
441
        fi
442
    done
443
}
444

    
445
flags_saved(){
446
    (: ${SAVE_CFLAGS?}) 2> /dev/null
447
}
448

    
449
save_flags(){
450
    flags_saved && return
451
    SAVE_CFLAGS="$CFLAGS"
452
    SAVE_LDFLAGS="$LDFLAGS"
453
    SAVE_extralibs="$extralibs"
454
}
455

    
456
restore_flags(){
457
    flags_saved || return
458
    CFLAGS="$SAVE_CFLAGS"
459
    LDFLAGS="$SAVE_LDFLAGS"
460
    extralibs="$SAVE_extralibs"
461
    unset SAVE_CFLAGS
462
    unset SAVE_LDFLAGS
463
    unset SAVE_extralibs
464
}
465

    
466
temp_cflags(){
467
    save_flags
468
    CFLAGS="$CFLAGS $*"
469
}
470

    
471
temp_ldflags(){
472
    save_flags
473
    LDFLAGS="$LDFLAGS $*"
474
}
475

    
476
temp_extralibs(){
477
    save_flags
478
    extralibs="$extralibs $*"
479
}
480

    
481
append(){
482
    var=$1
483
    shift
484
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
485
    eval "$var=\"\$$var $*\""
486
}
487

    
488
add_cflags(){
489
    append CFLAGS "$@"
490
}
491

    
492
add_ldflags(){
493
    append LDFLAGS "$@"
494
}
495

    
496
add_extralibs(){
497
    append extralibs "$@"
498
}
499

    
500
check_cmd(){
501
    log "$@"
502
    "$@" >> $logfile 2>&1
503
}
504

    
505
check_cc(){
506
    log check_cc "$@"
507
    cat > $TMPC
508
    log_file $TMPC
509
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
510
}
511

    
512
check_cpp(){
513
    log check_cpp "$@"
514
    cat > $TMPC
515
    log_file $TMPC
516
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
517
}
518

    
519
check_asm(){
520
    log check_asm "$@"
521
    name="$1"
522
    asm="$2"
523
    shift 2
524
    check_cc "$@" <<EOF && enable $name || disable $name
525
void foo(void){ __asm__ volatile($asm); }
526
EOF
527
}
528

    
529
check_yasm(){
530
    log check_yasm "$@"
531
    echo "$1" > $TMPS
532
    log_file $TMPS
533
    shift 1
534
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
535
}
536

    
537
check_ld(){
538
    log check_ld "$@"
539
    check_cc || return
540
    flags=''
541
    libs=''
542
    for f; do
543
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
544
    done
545
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
546
}
547

    
548
check_cflags(){
549
    log check_cflags "$@"
550
    check_cc "$@" <<EOF && add_cflags "$@"
551
int x;
552
EOF
553
}
554

    
555
check_ldflags(){
556
    log check_ldflags "$@"
557
    check_ld "$@" <<EOF && add_ldflags "$@"
558
int main(void){ return 0; }
559
EOF
560
}
561

    
562
check_header(){
563
    log check_header "$@"
564
    header=$1
565
    shift
566
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
567
    disable $var
568
    check_cpp "$@" <<EOF && enable $var
569
#include <$header>
570
int x;
571
EOF
572
}
573

    
574
check_func(){
575
    log check_func "$@"
576
    func=$1
577
    shift
578
    disable $func
579
    check_ld "$@" <<EOF && enable $func
580
extern int $func();
581
int main(void){ $func(); }
582
EOF
583
}
584

    
585
check_func_headers(){
586
    log check_func_headers "$@"
587
    headers=$1
588
    func=$2
589
    shift 2
590
    disable $func
591
    incs=""
592
    for hdr in $headers; do
593
        incs="$incs
594
#include <$hdr>"
595
    done
596
    check_ld "$@" <<EOF && enable $func
597
$incs
598
int main(int argc, char **argv){
599
    (void) $func;
600
    return 0;
601
}
602
EOF
603
}
604

    
605
check_cpp_condition(){
606
    log check_cpp_condition "$@"
607
    header=$1
608
    condition=$2
609
    check_cpp <<EOF
610
#include <$header>
611
#if !($condition)
612
#error "unsatisfied condition: $condition"
613
#endif
614
EOF
615
}
616

    
617
check_lib(){
618
    log check_lib "$@"
619
    header="$1"
620
    func="$2"
621
    shift 2
622
    temp_extralibs "$@"
623
    check_header $header && check_func $func && add_extralibs "$@"
624
    err=$?
625
    restore_flags
626
    return $err
627
}
628

    
629
check_lib2(){
630
    log check_lib2 "$@"
631
    headers="$1"
632
    func="$2"
633
    shift 2
634
    temp_extralibs "$@"
635
    check_func_headers "$headers" $func && add_extralibs "$@"
636
    err=$?
637
    restore_flags
638
    return $err
639
}
640

    
641
check_exec(){
642
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
643
}
644

    
645
check_exec_crash(){
646
    code=`cat`
647

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

    
654
    (check_exec "$@") >> $logfile 2>&1 <<EOF
655
#include <signal.h>
656
static void sighandler(int sig){
657
    raise(SIGTERM);
658
}
659
int main(void){
660
    signal(SIGILL, sighandler);
661
    signal(SIGFPE, sighandler);
662
    signal(SIGSEGV, sighandler);
663
#ifdef SIGBUS
664
    signal(SIGBUS, sighandler);
665
#endif
666
    { $code }
667
}
668
EOF
669
}
670

    
671
check_type(){
672
    log check_type "$@"
673
    headers=$1
674
    type=$2
675
    shift 2
676
    disable $type
677
    incs=""
678
    for hdr in $headers; do
679
        incs="$incs
680
#include <$hdr>"
681
    done
682
    check_cc "$@" <<EOF && enable $type
683
$incs
684
$type v;
685
EOF
686
}
687

    
688
require(){
689
    name="$1"
690
    header="$2"
691
    func="$3"
692
    shift 3
693
    check_lib $header $func "$@" || die "ERROR: $name not found"
694
}
695

    
696
require2(){
697
    name="$1"
698
    headers="$2"
699
    func="$3"
700
    shift 3
701
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
702
}
703

    
704
check_foo_config(){
705
    cfg=$1
706
    pkg=$2
707
    header=$3
708
    func=$4
709
    shift 4
710
    disable $cfg
711
    check_cmd ${pkg}-config --version
712
    err=$?
713
    if test "$err" = 0; then
714
        temp_cflags `${pkg}-config --cflags`
715
        temp_extralibs `${pkg}-config --libs`
716
        check_lib "$@" $header $func && enable $cfg
717
    fi
718
    return $err
719
}
720

    
721
apply(){
722
    file=$1
723
    shift
724
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
725
}
726

    
727
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
728
# system-dependent things.
729

    
730
COMPONENT_LIST="
731
    bsfs
732
    decoders
733
    demuxers
734
    encoders
735
    filters
736
    indevs
737
    muxers
738
    outdevs
739
    parsers
740
    protocols
741
"
742

    
743
CONFIG_LIST="
744
    $COMPONENT_LIST
745
    aandct
746
    avfilter
747
    avfilter_lavf
748
    avisynth
749
    beos_netserver
750
    bzlib
751
    fastdiv
752
    ffmpeg
753
    ffplay
754
    ffserver
755
    fft
756
    golomb
757
    gpl
758
    gprof
759
    gray
760
    hardcoded_tables
761
    ipv6
762
    libamr_nb
763
    libamr_wb
764
    libdc1394
765
    libdirac
766
    libfaac
767
    libfaad
768
    libfaadbin
769
    libgsm
770
    libmp3lame
771
    libnut
772
    libopenjpeg
773
    libschroedinger
774
    libspeex
775
    libtheora
776
    libvorbis
777
    libx264
778
    libxvid
779
    mdct
780
    memalign_hack
781
    mlib
782
    mpegaudio_hp
783
    network
784
    nonfree
785
    postproc
786
    powerpc_perf
787
    rdft
788
    shared
789
    small
790
    static
791
    swscale
792
    vdpau
793
    vhook
794
    x11grab
795
    zlib
796
"
797

    
798
THREADS_LIST='
799
    beosthreads
800
    os2threads
801
    pthreads
802
    w32threads
803
'
804

    
805
ARCH_LIST='
806
    alpha
807
    arm
808
    bfin
809
    ia64
810
    m68k
811
    mips
812
    parisc
813
    ppc
814
    s390
815
    sh4
816
    sparc
817
    sparc64
818
    x86
819
    x86_32
820
    x86_64
821
'
822

    
823
ARCH_EXT_LIST='
824
    altivec
825
    amd3dnow
826
    armv5te
827
    armv6
828
    armv6t2
829
    armvfp
830
    iwmmxt
831
    mmi
832
    mmx
833
    mmx2
834
    neon
835
    ppc4xx
836
    sse
837
    ssse3
838
    vis
839
'
840

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

    
907
# options emitted with CONFIG_ prefix but not available on command line
908
CONFIG_EXTRA="
909
    fft_mmx
910
    oldscaler
911
"
912

    
913
CMDLINE_SELECT="
914
    $ARCH_EXT_LIST
915
    $CONFIG_LIST
916
    $THREADS_LIST
917
    cross_compile
918
    debug
919
    extra_warnings
920
    logging
921
    optimizations
922
    stripping
923
    yasm
924
"
925

    
926
PATHS_LIST='
927
    bindir
928
    datadir
929
    incdir
930
    libdir
931
    mandir
932
    prefix
933
    shlibdir
934
'
935

    
936
CMDLINE_SET="
937
    $PATHS_LIST
938
    arch
939
    build_suffix
940
    cc
941
    cpu
942
    cross_prefix
943
    extra_version
944
    host_cc
945
    host_cflags
946
    host_ldflags
947
    host_libs
948
    logfile
949
    nm
950
    source_path
951
    target_exec
952
    target_os
953
    target_path
954
"
955

    
956
# code dependency declarations
957

    
958
# architecture extensions
959
altivec_deps="ppc"
960
amd3dnow_deps="mmx"
961
armv5te_deps="arm"
962
armv6_deps="arm"
963
armv6t2_deps="arm"
964
armvfp_deps="arm"
965
iwmmxt_deps="arm"
966
mmi_deps="mips"
967
mmx_deps="x86"
968
mmx2_deps="mmx"
969
neon_deps="arm"
970
ppc4xx_deps="ppc"
971
sse_deps="mmx"
972
ssse3_deps="sse"
973
vis_deps="sparc"
974

    
975
# common features
976
fft_suggest="fft_mmx"
977
fft_mmx_deps="mmx yasm"
978
oldscaler_deps="!swscale"
979

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

    
1051
# external libraries
1052
libamr_nb_decoder_deps="libamr_nb"
1053
libamr_nb_encoder_deps="libamr_nb"
1054
libamr_wb_decoder_deps="libamr_wb"
1055
libamr_wb_encoder_deps="libamr_wb"
1056
libdirac_decoder_deps="libdirac !libschroedinger"
1057
libdirac_encoder_deps="libdirac"
1058
libfaac_encoder_deps="libfaac"
1059
libfaad_decoder_deps="libfaad"
1060
libfaadbin_decoder_extralibs='$ldl'
1061
libgsm_decoder_deps="libgsm"
1062
libgsm_encoder_deps="libgsm"
1063
libgsm_ms_decoder_deps="libgsm"
1064
libgsm_ms_encoder_deps="libgsm"
1065
libmp3lame_encoder_deps="libmp3lame"
1066
libopenjpeg_decoder_deps="libopenjpeg"
1067
libschroedinger_decoder_deps="libschroedinger"
1068
libschroedinger_encoder_deps="libschroedinger"
1069
libspeex_decoder_deps="libspeex"
1070
libtheora_encoder_deps="libtheora"
1071
libvorbis_encoder_deps="libvorbis"
1072
libx264_encoder_deps="libx264"
1073
libxvid_encoder_deps="libxvid"
1074
mpeg4aac_decoder_deps="libfaad"
1075
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1076

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

    
1110
# protocols
1111
gopher_protocol_deps="network"
1112
http_protocol_deps="network"
1113
rtp_protocol_deps="udp_protocol"
1114
tcp_protocol_deps="network"
1115
udp_protocol_deps="network"
1116

    
1117
# filters
1118
movie_filter_deps="avfilter_lavf"
1119

    
1120
# programs
1121
ffplay_deps="sdl"
1122
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1123
ffserver_extralibs='$ldl'
1124
vhook_extralibs='$ldl'
1125

    
1126

    
1127
# default parameters
1128

    
1129
logfile="config.err"
1130

    
1131
# installation paths
1132
prefix_default="/usr/local"
1133
bindir_default='${prefix}/bin'
1134
datadir_default='${prefix}/share/ffmpeg'
1135
incdir_default='${prefix}/include'
1136
libdir_default='${prefix}/lib'
1137
mandir_default='${prefix}/share/man'
1138
shlibdir_default="$libdir_default"
1139

    
1140
# toolchain
1141
ar="ar"
1142
cc_default="gcc"
1143
host_cc_default="gcc"
1144
ln_s="ln -sf"
1145
nm_default="nm"
1146
objformat="elf"
1147
ranlib="ranlib"
1148
strip="strip"
1149
yasmexe="yasm"
1150

    
1151
# machine
1152
arch=`uname -m`
1153
cpu="generic"
1154

    
1155
# OS
1156
target_os=$(tolower $(uname -s))
1157

    
1158
# configurable options
1159
enable debug
1160
enable ffmpeg
1161
enable ffplay
1162
enable ffserver
1163
enable ipv6
1164
enable mpegaudio_hp
1165
enable network
1166
enable oldscaler
1167
enable optimizations
1168
enable protocols
1169
enable static
1170
enable stripping
1171
vhook="default"
1172

    
1173
# build settings
1174
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1175
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1176
VHOOKSHFLAGS='$(SHFLAGS)'
1177
FFSERVERLDFLAGS=-Wl,-E
1178
LIBPREF="lib"
1179
LIBSUF=".a"
1180
FULLNAME='$(NAME)$(BUILDSUF)'
1181
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1182
SLIBPREF="lib"
1183
SLIBSUF=".so"
1184
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1185
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1186
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1187
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1188

    
1189
host_cflags='-O3 -g -Wall'
1190
host_libs='-lm'
1191

    
1192
target_path='.'
1193

    
1194
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1195
# full relative path for objects in subdirectories for non-recursive Make.
1196
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1197

    
1198
# find source path
1199
source_path="`dirname \"$0\"`"
1200
enable source_path_used
1201
if test -z "$source_path" -o "$source_path" = "." ; then
1202
    source_path="`pwd`"
1203
    disable source_path_used
1204
else
1205
    source_path="`cd \"$source_path\"; pwd`"
1206
    echo "$source_path" | grep -q '[[:blank:]]' &&
1207
        die "Out of tree builds are impossible with whitespace in source path."
1208
fi
1209

    
1210
FFMPEG_CONFIGURATION="$@"
1211

    
1212
find_things(){
1213
    thing=$1
1214
    pattern=$2
1215
    file=$source_path/$3
1216
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1217
}
1218

    
1219
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1220
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1221
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1222
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1223
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1224
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1225
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1226
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1227
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1228
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1229

    
1230
enable $ARCH_EXT_LIST \
1231
       $DECODER_LIST \
1232
       $ENCODER_LIST \
1233
       $PARSER_LIST \
1234
       $BSF_LIST \
1235
       $DEMUXER_LIST \
1236
       $MUXER_LIST \
1237
       $FILTER_LIST \
1238
       $PROTOCOL_LIST \
1239
       $INDEV_LIST \
1240
       $OUTDEV_LIST \
1241

    
1242
die_unknown(){
1243
    echo "Unknown option \"$1\"."
1244
    echo "See $0 --help for available options."
1245
    exit 1
1246
}
1247

    
1248
show_list() {
1249
    suffix=_$1
1250
    shift
1251
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1252
    exit 0
1253
}
1254

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

    
1303
disabled logging && logfile=/dev/null
1304

    
1305
echo "# $0 $@" > $logfile
1306
set >> $logfile
1307

    
1308
test -n "$cross_prefix" && enable cross_compile
1309

    
1310
ar="${cross_prefix}${ar}"
1311
cc_default="${cross_prefix}${cc_default}"
1312
nm_default="${cross_prefix}${nm_default}"
1313
ranlib="${cross_prefix}${ranlib}"
1314
strip="${cross_prefix}${strip}"
1315

    
1316
set_default cc nm
1317
enabled cross_compile || host_cc_default=$cc
1318
set_default host_cc
1319

    
1320
case $target_os in
1321
    mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1322
esac
1323

    
1324
# set temporary file name
1325
: ${TMPDIR:=$TEMPDIR}
1326
: ${TMPDIR:=$TMP}
1327
: ${TMPDIR:=/tmp}
1328

    
1329
TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1330
TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1331
TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1332
TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1333
TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1334
TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1335

    
1336
# make sure we can execute files in $TMPDIR
1337
cat > $TMPSH 2>> $logfile <<EOF
1338
#! /bin/sh
1339
EOF
1340
chmod +x $TMPSH >> $logfile 2>&1
1341
if ! $TMPSH >> $logfile 2>&1; then
1342
    cat <<EOF
1343
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1344
variable to another directory and make sure that it is not mounted noexec.
1345
EOF
1346
    die "Sanity test failed."
1347
fi
1348
rm $TMPSH
1349

    
1350
# compiler sanity check
1351
check_exec <<EOF
1352
int main(void){ return 0; }
1353
EOF
1354
if test "$?" != 0; then
1355
    echo "$cc is unable to create an executable file."
1356
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1357
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1358
        echo "Only do this if you know what cross compiling means."
1359
    fi
1360
    die "C compiler test failed."
1361
fi
1362

    
1363
check_cflags -std=c99
1364

    
1365
case "$arch" in
1366
    i386|i486|i586|i686|i86pc|BePC)
1367
        arch="x86"
1368
        subarch="x86_32"
1369
        enable fast_unaligned
1370
    ;;
1371
    x86_64|amd64)
1372
        arch="x86"
1373
        subarch="x86_32"
1374
        enable cmov
1375
        enable fast_cmov
1376
        enable fast_unaligned
1377
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1378
        int test[sizeof(char*) - 7];
1379
EOF
1380
    ;;
1381
    arm|armv[4567]*l)
1382
        arch="arm"
1383
    ;;
1384
    alpha)
1385
        arch="alpha"
1386
        enable fast_64bit
1387
        check_cflags -mieee
1388
    ;;
1389
    "Power Macintosh"|ppc|powerpc)
1390
        arch="ppc"
1391
        enable fast_unaligned
1392
    ;;
1393
    ppc64)
1394
        arch="ppc"
1395
        enable fast_64bit
1396
        enable fast_unaligned
1397
    ;;
1398
    mips|mipsel|IP*)
1399
        arch="mips"
1400
    ;;
1401
    mips64)
1402
        arch="mips"
1403
        enable fast_64bit
1404
    ;;
1405
    sun4u|sparc64)
1406
        arch="sparc"
1407
        subarch="sparc64"
1408
        enable fast_64bit
1409
    ;;
1410
    sparc)
1411
        arch="sparc"
1412
    ;;
1413
    sh4|sh)
1414
        arch="sh4"
1415
    ;;
1416
    parisc|hppa)
1417
        arch="parisc"
1418
    ;;
1419
    parisc64|hppa64)
1420
        arch="parisc"
1421
        enable fast_64bit
1422
    ;;
1423
    s390|s390x)
1424
        arch="s390"
1425
    ;;
1426
    m68k)
1427
        arch="m68k"
1428
    ;;
1429
    ia64)
1430
        arch="ia64"
1431
        enable fast_64bit
1432
    ;;
1433
    bfin)
1434
        arch="bfin"
1435
    ;;
1436
    *)
1437
        arch="unknown"
1438
    ;;
1439
esac
1440

    
1441
enable $arch $subarch
1442

    
1443
# OS specific
1444
case $target_os in
1445
    beos|haiku|zeta)
1446
        prefix_default="$HOME/config"
1447
        # helps building libavcodec
1448
        add_cflags -DPIC -fomit-frame-pointer
1449
        # 3 gcc releases known for BeOS, each with ugly bugs
1450
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1451
        case "$gcc_version" in
1452
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1453
            disable mmx
1454
            ;;
1455
          *20010315*) echo "BeBits gcc"
1456
            add_cflags -fno-expensive-optimizations
1457
            ;;
1458
        esac
1459
        SHFLAGS=-nostart
1460
        # enable BeOS things
1461
        enable audio_beos
1462
        # no need for libm, but the inet stuff
1463
        # Check for BONE
1464
        # XXX: actually should check for NOT net_server
1465
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1466
            network_extralibs="-lbind -lsocket"
1467
        else
1468
            enable beos_netserver
1469
            network_extralibs="-lnet"
1470
        fi ;;
1471
    sunos)
1472
        FFSERVERLDFLAGS=""
1473
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1474
        network_extralibs="-lsocket -lnsl"
1475
        add_cflags -D__EXTENSIONS__
1476
        ;;
1477
    netbsd)
1478
        oss_demuxer_extralibs="-lossaudio"
1479
        oss_muxer_extralibs="-lossaudio"
1480
        ;;
1481
    openbsd)
1482
        disable need_memalign
1483
        LIBOBJFLAGS='$(PIC)'
1484
        SHFLAGS='-shared'
1485
        oss_demuxer_extralibs="-lossaudio"
1486
        oss_muxer_extralibs="-lossaudio"
1487
        ;;
1488
    freebsd)
1489
        disable need_memalign
1490
        ;;
1491
    bsd/os)
1492
        osextralibs="-lpoll -lgnugetopt"
1493
        strip="strip -d"
1494
        ;;
1495
    darwin)
1496
        disable need_memalign
1497
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1498
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1499
        strip="strip -x"
1500
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1501
        SLIBSUF=".dylib"
1502
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1503
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1504
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1505
        objformat="macho"
1506
        enabled x86_64 && objformat="macho64"
1507
        ;;
1508
    mingw32*)
1509
        target_os=mingw32
1510
        LIBTARGET=i386
1511
        if enabled x86_64; then
1512
            disable need_memalign
1513
            LIBTARGET=x64
1514
        fi
1515
        shlibdir_default="$bindir_default"
1516
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1517
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1518
        if enabled swscale; then
1519
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1520
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1521
        fi
1522
        disable ffserver
1523
        SLIBPREF=""
1524
        SLIBSUF=".dll"
1525
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1526
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1527
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1528
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1529
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1530
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1531
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1532
        objformat="win32"
1533
        enable dos_paths
1534
        if ! enabled x86_64; then
1535
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1536
                die "ERROR: MinGW runtime version must be >= 3.15."
1537
            enabled_any avisynth vfwcap_demuxer &&
1538
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1539
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1540
            fi
1541
        ;;
1542
    cygwin*)
1543
        target_os=cygwin
1544
        shlibdir_default="$bindir_default"
1545
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1546
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1547
        if enabled swscale; then
1548
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1549
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1550
        fi
1551
        SLIBPREF="cyg"
1552
        SLIBSUF=".dll"
1553
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1554
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1555
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1556
        objformat="win32"
1557
        enable dos_paths
1558
        ;;
1559
    *-dos|freedos|opendos)
1560
        disable ffplay ffserver vhook
1561
        disable $INDEV_LIST $OUTDEV_LIST
1562
        network_extralibs="-lsocket"
1563
        objformat="coff"
1564
        enable dos_paths
1565
        ;;
1566
    linux)
1567
        enable dv1394
1568
        ;;
1569
    irix*)
1570
        target_os=irix
1571
        ranlib="echo ignoring ranlib"
1572
        ;;
1573
    os/2*)
1574
        strip="lxlite"
1575
        ln_s="cp -f"
1576
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1577
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1578
        FFSERVERLDFLAGS=""
1579
        LIBSUF="_s.a"
1580
        SLIBPREF=""
1581
        SLIBSUF=".dll"
1582
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1583
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1584
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1585
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1586
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1587
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1588
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1589
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1590
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1591
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1592
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1593
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1594
        disable vhook
1595
        enable dos_paths
1596
        ;;
1597
    interix)
1598
        disable vhook
1599
        ;;
1600

    
1601
    *)
1602
        die "Unknown OS '$target_os'."
1603
        ;;
1604
esac
1605

    
1606
set_default $PATHS_LIST
1607

    
1608
add_extralibs $osextralibs
1609

    
1610
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1611
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1612

    
1613
# we need to build at least one lib type
1614
if ! enabled_any static shared; then
1615
    cat <<EOF
1616
At least one library type must be built.
1617
Specify --enable-static to build the static libraries or --enable-shared to
1618
build the shared libraries as well. To only build the shared libraries specify
1619
--disable-static in addition to --enable-shared.
1620
EOF
1621
    exit 1;
1622
fi
1623

    
1624
disabled static && LIBNAME=""
1625

    
1626
if enabled_any libfaad libfaadbin ; then
1627
    if check_header faad.h; then
1628
        check_cc <<EOF
1629
#include <faad.h>
1630
#ifndef FAAD2_VERSION
1631
ok faad1
1632
#endif
1633
int main(void) { return 0; }
1634
EOF
1635
        test $? = 0 && enable libfaad2
1636
    else
1637
        die "FAAD test failed."
1638
    fi
1639
fi
1640

    
1641

    
1642
if ! enabled gpl; then
1643
    die_gpl_disabled(){
1644
        name=$1
1645
        shift
1646
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1647
    }
1648
    die_gpl_disabled "The Postprocessing code" postproc
1649
    die_gpl_disabled "libx264"                 libx264
1650
    die_gpl_disabled "libxvidcore"             libxvid
1651
    die_gpl_disabled "FAAD2"                   libfaad2
1652
    die_gpl_disabled "The X11 grabber"         x11grab
1653
    die_gpl_disabled "The software scaler"     swscale
1654
fi
1655

    
1656
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1657
    die "libamr is nonfree and --enable-nonfree is not specified."
1658
fi
1659

    
1660
check_deps $ARCH_EXT_LIST
1661

    
1662
test -z "$need_memalign" && need_memalign="$mmx"
1663

    
1664
#Darwin CC versions
1665
if test $target_os = darwin; then
1666
    if $cc -v 2>&1 | grep -q xlc; then
1667
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1668
    else
1669
        add_cflags -pipe
1670
        check_cflags -force_cpusubtype_ALL
1671
        check_cflags -Wno-sign-compare
1672
        enabled shared || check_cflags -mdynamic-no-pic
1673
    fi
1674
fi
1675

    
1676
disabled optimizations || check_cflags -fomit-frame-pointer
1677

    
1678
# Add processor-specific flags
1679
if test $cpu != "generic"; then
1680
    warn_altivec(){
1681
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1682
    }
1683
    case $cpu in
1684
        601|ppc601|PowerPC601)
1685
            add_cflags -mcpu=601
1686
            warn_altivec enabled PPC601
1687
        ;;
1688
        603*|ppc603*|PowerPC603*)
1689
            add_cflags -mcpu=603
1690
            warn_altivec enabled PPC603
1691
        ;;
1692
        604*|ppc604*|PowerPC604*)
1693
            add_cflags -mcpu=604
1694
            warn_altivec enabled PPC604
1695
        ;;
1696
        G3|g3|75*|ppc75*|PowerPC75*)
1697
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1698
            warn_altivec enabled PPC75x
1699
        ;;
1700
        G4|g4|745*|ppc745*|PowerPC745*)
1701
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1702
            warn_altivec disabled PPC745x
1703
        ;;
1704
        74*|ppc74*|PowerPC74*)
1705
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1706
            warn_altivec disabled PPC74xx
1707
        ;;
1708
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1709
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1710
            warn_altivec disabled PPC970
1711
            enable ppc64
1712
        ;;
1713
        Cell|CELL|cell)
1714
            add_cflags -mcpu=cell
1715
            warn_altivec disabled Cell
1716
            enable ppc64
1717
        ;;
1718
        # targets that do NOT support conditional mov (cmov)
1719
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1720
            add_cflags -march=$cpu
1721
            disable cmov
1722
        ;;
1723
        # targets that do support conditional mov (cmov)
1724
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1725
            add_cflags -march=$cpu
1726
            enable cmov
1727
            enable fast_cmov
1728
        ;;
1729
        # targets that do support conditional mov but on which it's slow
1730
        pentium4|pentium4m|prescott|nocona)
1731
            add_cflags -march=$cpu
1732
            enable cmov
1733
            disable fast_cmov
1734
        ;;
1735
        sparc64)
1736
            add_cflags -mcpu=v9
1737
        ;;
1738
        arm11*|cortex*)
1739
            add_cflags -mcpu=$cpu
1740
            enable fast_unaligned
1741
        ;;
1742
        armv*)
1743
            add_cflags -march=$cpu
1744
        ;;
1745
        arm*)
1746
            add_cflags -mcpu=$cpu
1747
        ;;
1748
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1749
            add_cflags -mcpu=$cpu
1750
        ;;
1751
        *)
1752
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1753
        ;;
1754
    esac
1755
fi
1756

    
1757
check_cc <<EOF || die "Symbol mangling check failed."
1758
int ff_extern;
1759
EOF
1760
sym=$($nm -P -g $TMPO | grep ff_extern)
1761
extern_prefix=${sym%%ff_extern*}
1762

    
1763
check_asm inline_asm '""'
1764

    
1765
if enabled x86; then
1766
    # check whether EBP is available on x86
1767
    # As 'i' is stored on the stack, this program will crash
1768
    # if the base pointer is used to access it because the
1769
    # base pointer is cleared in the inline assembly code.
1770
    check_exec_crash <<EOF && enable ebp_available
1771
    volatile int i=0;
1772
    __asm__ volatile (
1773
        "xorl %%ebp, %%ebp"
1774
    ::: "%ebp");
1775
    return i;
1776
EOF
1777

    
1778
    # check wether EBX is available on x86
1779
    check_asm ebx_available '"":::"%ebx"'
1780

    
1781
    # check whether more than 10 operands are supported
1782
    check_cc <<EOF && enable ten_operands
1783
int main(void) {
1784
    int x=0;
1785
    __asm__ volatile(
1786
        ""
1787
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1788
    );
1789
    return 0;
1790
}
1791
EOF
1792

    
1793
    # check whether binutils is new enough to compile SSSE3/MMX2
1794
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1795
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1796

    
1797
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1798

    
1799
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1800
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1801
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1802
    case "$objformat" in
1803
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1804
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1805
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1806
    esac
1807
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1808
fi
1809

    
1810
# check for assembler specific support
1811

    
1812
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1813
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1814

    
1815
# check for SIMD availability
1816

    
1817
# AltiVec flags: The FSF version of GCC differs from the Apple version
1818
if enabled altivec; then
1819
    check_cflags -maltivec -mabi=altivec &&
1820
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1821
        check_cflags -faltivec
1822

    
1823
    # check if our compiler supports Motorola AltiVec C API
1824
    check_cc <<EOF || disable altivec
1825
$inc_altivec_h
1826
int main(void) {
1827
    vector signed int v1, v2, v3;
1828
    v1 = vec_add(v2,v3);
1829
    return 0;
1830
}
1831
EOF
1832

    
1833
    # check if our compiler supports braces for vector declarations
1834
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1835
$inc_altivec_h
1836
int main (void) { (vector int) {1}; return 0; }
1837
EOF
1838
fi
1839

    
1840
# We have to check if pld is a nop and disable it.
1841
enabled arm     && check_asm pld     '"pld [r0]"'
1842
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1843
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1844
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1845
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1846
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1847
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1848
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1849
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1850

    
1851
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1852

    
1853
# ---
1854
# big/little-endian test
1855
check_cc <<EOF || die "endian test failed"
1856
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1857
EOF
1858
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1859

    
1860
# ---
1861
# check availability of some header files
1862

    
1863
if check_func dlopen; then
1864
    ldl=
1865
elif check_func dlopen -ldl; then
1866
    ldl=-ldl
1867
fi
1868

    
1869
check_func  fork
1870
check_func  gethrtime
1871
check_func  getrusage
1872
check_func  inet_aton $network_extralibs
1873
check_func  memalign
1874
check_func  mkstemp
1875
check_func  posix_memalign
1876
check_func_headers io.h setmode
1877
check_func_headers windows.h GetProcessTimes
1878

    
1879
check_header conio.h
1880
check_header dlfcn.h
1881
check_header malloc.h
1882
check_header poll.h
1883
check_header sys/mman.h
1884
check_header sys/resource.h
1885
check_header sys/select.h
1886
check_header termios.h
1887
check_header vdpau/vdpau.h
1888
check_header vdpau/vdpau_x11.h
1889
check_header X11/extensions/XvMClib.h
1890

    
1891
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1892
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1893
fi
1894

    
1895
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1896
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1897

    
1898
# check for some common methods of building with pthread support
1899
# do this before the optional library checks as some of them require pthreads
1900
if enabled pthreads; then
1901
    if check_func pthread_create; then
1902
        :
1903
    elif check_func pthread_create -pthread; then
1904
        add_cflags -pthread
1905
        add_extralibs -pthread
1906
    elif check_func pthread_create -pthreads; then
1907
        add_cflags -pthreads
1908
        add_extralibs -pthreads
1909
    elif check_func pthread_create -lpthreadGC2; then
1910
        add_extralibs -lpthreadGC2
1911
    elif ! check_lib pthread.h pthread_create -lpthread; then
1912
        die "ERROR: can't find pthreads library"
1913
    fi
1914
fi
1915

    
1916
for thread in $THREADS_LIST; do
1917
    if enabled $thread; then
1918
        test -n "$thread_type" &&
1919
            die "ERROR: Only one thread type must be selected." ||
1920
            thread_type="$thread"
1921
    fi
1922
done
1923

    
1924
check_lib math.h sin -lm
1925

    
1926
# test for C99 functions in math.h
1927
for func in llrint lrint lrintf round roundf truncf; do
1928
    check_exec <<EOF && enable $func || disable $func
1929
#include <math.h>
1930
int main(void) { return ($func(3.999f) > 0)?0:1; }
1931
EOF
1932
done
1933

    
1934
# these are off by default, so fail if requested and not available
1935
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1936
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1937
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1938
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1939
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1940
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1941
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1942
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1943
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1944
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1945
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1946
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1947
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1948
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1949
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1950
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1951
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1952
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1953
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1954
                        die "ERROR: libx264 version must be >= 0.65."; }
1955
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1956
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1957

    
1958
# libdc1394 check
1959
if enabled libdc1394; then
1960
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1961
        enable libdc1394_2; } ||
1962
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1963
        enable libdc1394_1; } ||
1964
    die "ERROR: No version of libdc1394 found "
1965
fi
1966

    
1967

    
1968
_restrict=
1969
for restrict_keyword in restrict __restrict__ __restrict; do
1970
    check_cc <<EOF && _restrict=$restrict_keyword && break
1971
void foo(char * $restrict_keyword p);
1972
EOF
1973
done
1974

    
1975
test "$vhook" = "default" && vhook="$dlopen"
1976

    
1977
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1978
    disable vhook
1979
    echo
1980
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1981
    echo "Patches welcome."
1982
    echo
1983
fi
1984

    
1985
if enabled vhook; then
1986
    check_ldflags -rdynamic
1987
    check_ldflags -export-dynamic
1988
fi
1989

    
1990
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1991
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1992

    
1993
##########################################
1994
# SDL check
1995

    
1996
disable sdl_too_old
1997
disable sdl
1998
SDL_CONFIG="${cross_prefix}sdl-config"
1999
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2000
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
2001
    temp_cflags $sdl_cflags
2002
    temp_extralibs `"${SDL_CONFIG}" --libs`
2003
    if check_lib2 SDL.h SDL_Init; then
2004
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2005
        if test "$_sdlversion" -lt 121 ; then
2006
            enable sdl_too_old
2007
        else
2008
            enable sdl
2009
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2010
#include <SDL.h>
2011
int main(int argc, char **argv){
2012
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2013
    int w = vi->current_w;
2014
    return 0;
2015
}
2016
EOF
2017
        fi
2018
    fi
2019
    restore_flags
2020
fi
2021

    
2022
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2023

    
2024
##########################################
2025
# Network check
2026

    
2027
if enabled network; then
2028
    check_type "sys/types.h sys/socket.h" socklen_t
2029
    # Prefer arpa/inet.h over winsock2
2030
    if check_header arpa/inet.h ; then
2031
        check_func closesocket
2032
    elif check_header winsock2.h ; then
2033
        network_extralibs="-lws2_32"
2034
        check_type ws2tcpip.h socklen_t
2035
        check_func_headers winsock2.h closesocket
2036
    fi
2037
fi
2038

    
2039
##########################################
2040
# IPv6 check
2041

    
2042
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2043
#include <sys/types.h>
2044
#include <sys/socket.h>
2045
#include <netinet/in.h>
2046
#include <netdb.h>
2047
int main(void) {
2048
    struct sockaddr_storage saddr;
2049
    struct ipv6_mreq mreq6;
2050
    getaddrinfo(0,0,0,0);
2051
    getnameinfo(0,0,0,0,0,0,0);
2052
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2053
}
2054
EOF
2055

    
2056
check_header linux/videodev.h
2057
check_header linux/videodev2.h
2058
check_header sys/videoio.h
2059

    
2060
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2061

    
2062
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2063
{ check_header dev/bktr/ioctl_meteor.h &&
2064
  check_header dev/bktr/ioctl_bt848.h; } ||
2065
{ check_header machine/ioctl_meteor.h &&
2066
  check_header machine/ioctl_bt848.h; } ||
2067
{ check_header dev/video/meteor/ioctl_meteor.h &&
2068
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2069
check_header dev/ic/bt8xx.h
2070

    
2071
check_header sys/soundcard.h
2072
check_header soundcard.h
2073

    
2074
check_header alsa/asoundlib.h &&
2075
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2076

    
2077
# deal with the X11 frame grabber
2078
enabled x11grab                         &&
2079
check_header X11/Xlib.h                 &&
2080
check_header X11/extensions/XShm.h      &&
2081
check_func XOpenDisplay -lX11           &&
2082
check_func XShmCreateImage -lX11 -lXext
2083

    
2084
enabled debug && add_cflags -g"$debuglevel"
2085

    
2086
# add some useful compiler flags if supported
2087
check_cflags -Wdeclaration-after-statement
2088
check_cflags -Wall
2089
check_cflags -Wno-switch
2090
check_cflags -Wdisabled-optimization
2091
check_cflags -Wpointer-arith
2092
check_cflags -Wredundant-decls
2093
check_cflags -Wno-pointer-sign
2094
check_cflags -Wcast-qual
2095
check_cflags -Wwrite-strings
2096
check_cflags -Wtype-limits
2097
check_cflags -Wundef
2098
enabled extra_warnings && check_cflags -Winline
2099

    
2100
# add some linker flags
2101
check_ldflags -Wl,--warn-common
2102
check_ldflags -Wl,--as-needed
2103
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'
2104
check_ldflags -Wl,-Bsymbolic
2105

    
2106
if enabled small; then
2107
    check_cflags -Os            # not all compilers support -Os
2108
    optimizations="small"
2109
elif enabled optimizations; then
2110
    if $cc -v 2>&1 | grep -q xlc; then
2111
        add_cflags  -O5
2112
        add_ldflags -O5
2113
    else
2114
        add_cflags -O3
2115
    fi
2116
fi
2117
check_cflags -fno-math-errno
2118
check_cflags -fno-signed-zeros
2119

    
2120
# add some flags for Intel C Compiler
2121
if $cc --version 2> /dev/null | grep -q Intel; then
2122
  # Just warnings, no remarks
2123
  check_cflags -w1
2124
  # -wd: Disable following warnings
2125
  # 144, 167, 556: -Wno-pointer-sign
2126
  # 10006: ignoring unknown option -fno-signed-zeros
2127
  # 10156: ignoring option '-W'; no argument required
2128
  check_cflags -wd144,167,556,10006,10156
2129
  # 11030: Warning unknown option --as-needed
2130
  # 10156: ignoring option '-export'; no argument required
2131
  check_ldflags -wd10156,11030
2132
  # Allow to compile with optimizations
2133
  check_ldflags -march=$cpu
2134
fi
2135

    
2136
# PIC flags for shared library objects where they are needed
2137
if enabled shared; then
2138
    # LIBOBJFLAGS may have already been set in the OS configuration
2139
    if test -z "$LIBOBJFLAGS" ; then
2140
        case "${subarch-$arch}" in
2141
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2142
        esac
2143
    fi
2144
fi
2145

    
2146
if enabled gprof; then
2147
    add_cflags  -p
2148
    add_ldflags -p
2149
fi
2150

    
2151
VHOOKCFLAGS="-fPIC"
2152

    
2153
# Find out if the .align argument is a power of two or not.
2154
check_asm asmalign_pot '".align 3"'
2155

    
2156
enabled_any $DECODER_LIST      && enable decoders
2157
enabled_any $ENCODER_LIST      && enable encoders
2158
enabled_any $BSF_LIST          && enable bsfs
2159
enabled_any $DEMUXER_LIST      && enable demuxers
2160
enabled_any $MUXER_LIST        && enable muxers
2161
enabled_any $FILTER_LIST       && enable filters
2162
enabled_any $INDEV_LIST        && enable demuxers
2163
enabled_any $OUTDEV_LIST       && enable muxers
2164
enabled_any $PROTOCOL_LIST     && enable protocols
2165

    
2166
enabled_any $THREADS_LIST      && enable threads
2167

    
2168
check_deps $CONFIG_LIST       \
2169
           $CONFIG_EXTRA      \
2170
           $HAVE_LIST         \
2171
           $DECODER_LIST      \
2172
           $ENCODER_LIST      \
2173
           $PARSER_LIST       \
2174
           $BSF_LIST          \
2175
           $DEMUXER_LIST      \
2176
           $MUXER_LIST        \
2177
           $FILTER_LIST       \
2178
           $INDEV_LIST        \
2179
           $OUTDEV_LIST       \
2180
           $PROTOCOL_LIST     \
2181

    
2182
echo "install prefix            $prefix"
2183
echo "source path               $source_path"
2184
echo "C compiler                $cc"
2185
echo ".align is power-of-two    $asmalign_pot"
2186
echo "ARCH                      $arch ($cpu)"
2187
if test "$build_suffix" != ""; then
2188
    echo "build suffix              $build_suffix"
2189
fi
2190
if test "$extra_version" != ""; then
2191
    echo "version string suffix     $extra_version"
2192
fi
2193
echo "big-endian                ${bigendian-no}"
2194
if enabled x86; then
2195
    echo "yasm                      ${yasm-no}"
2196
    echo "MMX enabled               ${mmx-no}"
2197
    echo "MMX2 enabled              ${mmx2-no}"
2198
    echo "3DNow! enabled            ${amd3dnow-no}"
2199
    echo "SSE enabled               ${sse-no}"
2200
    echo "SSSE3 enabled             ${ssse3-no}"
2201
    echo "CMOV enabled              ${cmov-no}"
2202
    echo "CMOV is fast              ${fast_cmov-no}"
2203
    echo "EBX available             ${ebx_available-no}"
2204
    echo "EBP available             ${ebp_available-no}"
2205
    echo "10 operands supported     ${ten_operands-no}"
2206
fi
2207
if enabled arm; then
2208
    echo "ARMv5TE enabled           ${armv5te-no}"
2209
    echo "ARMv6 enabled             ${armv6-no}"
2210
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2211
    echo "ARM VFP enabled           ${armvfp-no}"
2212
    echo "IWMMXT enabled            ${iwmmxt-no}"
2213
    echo "NEON enabled              ${neon-no}"
2214
fi
2215
if enabled mips; then
2216
    echo "MMI enabled               ${mmi-no}"
2217
fi
2218
if enabled ppc; then
2219
    echo "AltiVec enabled           ${altivec-no}"
2220
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2221
    echo "dcbzl available           ${dcbzl-no}"
2222
    echo "performance report        ${powerpc_perf-no}"
2223
fi
2224
if enabled sparc; then
2225
    echo "VIS enabled               ${vis-no}"
2226
fi
2227
echo "gprof enabled             ${gprof-no}"
2228
echo "debug symbols             ${debug-no}"
2229
echo "strip symbols             ${stripping-no}"
2230
echo "optimizations             ${optimizations-no}"
2231
echo "static                    ${static-no}"
2232
echo "shared                    ${shared-no}"
2233
echo "postprocessing support    ${postproc-no}"
2234
echo "software scaler enabled   ${swscale-no}"
2235
echo "new filter support        ${avfilter-no}"
2236
echo "filters using lavformat   ${avfilter_lavf-no}"
2237
echo "video hooking             ${vhook-no}"
2238
if enabled vhook; then
2239
    echo "Imlib2 support            ${imlib2-no}"
2240
    echo "FreeType support          ${freetype2-no}"
2241
fi
2242
echo "network support           ${network-no}"
2243
if enabled network; then
2244
    echo "IPv6 support              ${ipv6-no}"
2245
fi
2246
echo "threading support         ${thread_type-no}"
2247
echo "SDL support               ${sdl-no}"
2248
if enabled sdl_too_old; then
2249
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2250
fi
2251
echo "Sun medialib support      ${mlib-no}"
2252
echo "AVISynth enabled          ${avisynth-no}"
2253
echo "libamr-nb support         ${libamr_nb-no}"
2254
echo "libamr-wb support         ${libamr_wb-no}"
2255
echo "libdc1394 support         ${libdc1394-no}"
2256
echo "libdirac enabled          ${libdirac-no}"
2257
echo "libfaac enabled           ${libfaac-no}"
2258
echo "libfaad enabled           ${libfaad-no}"
2259
echo "libfaad dlopened          ${libfaadbin-no}"
2260
echo "libgsm enabled            ${libgsm-no}"
2261
echo "libmp3lame enabled        ${libmp3lame-no}"
2262
echo "libnut enabled            ${libnut-no}"
2263
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2264
echo "libschroedinger enabled   ${libschroedinger-no}"
2265
echo "libspeex enabled          ${libspeex-no}"
2266
echo "libtheora enabled         ${libtheora-no}"
2267
echo "libvorbis enabled         ${libvorbis-no}"
2268
echo "libx264 enabled           ${libx264-no}"
2269
echo "libxvid enabled           ${libxvid-no}"
2270
echo "vdpau enabled             ${vdpau-no}"
2271
echo "zlib enabled              ${zlib-no}"
2272
echo "bzlib enabled             ${bzlib-no}"
2273
echo
2274

    
2275
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2276
    echo "Enabled ${type}s:"
2277
    eval list=\$$(toupper $type)_LIST
2278
    for part in $list; do
2279
        enabled $part && echo ${part%_*}
2280
    done | sort | pr -3 -t
2281
    echo
2282
done
2283

    
2284
license="LGPL"
2285
if enabled nonfree; then
2286
    license="unredistributable"
2287
elif enabled gpl; then
2288
    license="GPL"
2289
fi
2290

    
2291
echo "License: $license"
2292

    
2293
echo "Creating config.mak and config.h..."
2294

    
2295
echo "# Automatically generated by configure - do not modify!" > config.mak
2296
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2297
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2298
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2299
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2300
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2301

    
2302
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2303
echo "prefix=$prefix" >> config.mak
2304
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2305
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2306
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2307
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2308
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2309
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2310
echo "CC=$cc" >> config.mak
2311
echo "YASM=$yasmexe" >> config.mak
2312
echo "AR=$ar" >> config.mak
2313
echo "RANLIB=$ranlib" >> config.mak
2314
echo "LN_S=$ln_s" >> config.mak
2315
enabled stripping &&
2316
    echo "STRIP=$strip" >> config.mak ||
2317
    echo "STRIP=echo ignoring strip" >> config.mak
2318

    
2319
echo "OPTFLAGS=$CFLAGS" >> config.mak
2320
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2321
echo "LDFLAGS=$LDFLAGS" >> config.mak
2322
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2323
echo "SHFLAGS=$SHFLAGS" >> config.mak
2324
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2325
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2326
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2327
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2328
echo "BUILD_STATIC=$static" >> config.mak
2329
echo "BUILDSUF=$build_suffix" >> config.mak
2330
echo "FULLNAME=$FULLNAME" >> config.mak
2331
echo "LIBPREF=$LIBPREF" >> config.mak
2332
echo "LIBSUF=$LIBSUF" >> config.mak
2333
echo "LIBNAME=$LIBNAME" >> config.mak
2334
echo "SLIBPREF=$SLIBPREF" >> config.mak
2335
echo "SLIBSUF=$SLIBSUF" >> config.mak
2336
echo "EXESUF=$EXESUF" >> config.mak
2337
echo "EXTRA_VERSION=$extra_version" >> config.mak
2338
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2339
echo "HOSTCC=$host_cc" >> config.mak
2340
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2341
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2342
echo "HOSTLIBS=$host_libs" >> config.mak
2343
echo "TARGET_EXEC=$target_exec" >> config.mak
2344
echo "TARGET_PATH=$target_path" >> config.mak
2345

    
2346
if enabled bigendian; then
2347
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2348
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2349
fi
2350

    
2351
if enabled sdl; then
2352
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2353
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2354
fi
2355
if enabled texi2html; then
2356
    echo "BUILD_DOC=yes" >> config.mak
2357
fi
2358

    
2359
get_version(){
2360
    name=$1
2361
    file=$source_path/$2
2362
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2363
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2364
    lcname=$(tolower $name)
2365
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2366
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2367
}
2368

    
2369
get_version LIBSWSCALE  libswscale/swscale.h
2370
get_version LIBPOSTPROC libpostproc/postprocess.h
2371
get_version LIBAVCODEC  libavcodec/avcodec.h
2372
get_version LIBAVDEVICE libavdevice/avdevice.h
2373
get_version LIBAVFORMAT libavformat/avformat.h
2374
get_version LIBAVUTIL   libavutil/avutil.h
2375
get_version LIBAVFILTER libavfilter/avfilter.h
2376

    
2377
if enabled shared; then
2378
    echo "BUILD_SHARED=yes" >> config.mak
2379
    echo "PIC=-fPIC -DPIC" >> config.mak
2380
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2381
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2382
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2383
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2384
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2385
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2386
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2387
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2388
fi
2389
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2390
echo "EXTRALIBS=$extralibs" >> config.mak
2391

    
2392
echo "ARCH=$arch" >> config.mak
2393

    
2394
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2395
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2396
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2397
                                      $CONFIG_EXTRA      \
2398
                                      $DECODER_LIST      \
2399
                                      $ENCODER_LIST      \
2400
                                      $PARSER_LIST       \
2401
                                      $BSF_LIST          \
2402
                                      $DEMUXER_LIST      \
2403
                                      $MUXER_LIST        \
2404
                                      $FILTER_LIST       \
2405
                                      $PROTOCOL_LIST     \
2406
                                      $INDEV_LIST        \
2407
                                      $OUTDEV_LIST       \
2408

    
2409
echo "#define restrict $_restrict" >> $TMPH
2410

    
2411
if enabled small; then
2412
    echo "#define av_always_inline"  >> $TMPH
2413
fi
2414

    
2415
echo "SRC_PATH=\"$source_path\"" >> config.mak
2416
echo "SRC_PATH_BARE=$source_path" >> config.mak
2417
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2418

    
2419
# Apparently it's not possible to portably echo a backslash.
2420
enabled asmalign_pot &&
2421
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2422
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2423

    
2424
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2425

    
2426
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2427

    
2428
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2429
cmp -s $TMPH config.h &&
2430
    echo "config.h is unchanged" ||
2431
    mv -f $TMPH config.h
2432

    
2433
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2434

    
2435
# build tree in object directory if source path is different from current one
2436
if enabled source_path_used; then
2437
    DIRS="\
2438
        doc               \
2439
        libavcodec        \
2440
        libavcodec/alpha  \
2441
        libavcodec/arm    \
2442
        libavcodec/bfin   \
2443
        libavcodec/mlib   \
2444
        libavcodec/ppc    \
2445
        libavcodec/sh4    \
2446
        libavcodec/sparc  \
2447
        libavcodec/x86    \
2448
        libavdevice       \
2449
        libavfilter       \
2450
        libavformat       \
2451
        libavutil         \
2452
        libpostproc       \
2453
        libswscale        \
2454
        tests             \
2455
        tools             \
2456
        vhook             \
2457
        "
2458
    FILES="\
2459
        Makefile             \
2460
        common.mak           \
2461
        subdir.mak           \
2462
        doc/texi2pod.pl      \
2463
        libavcodec/Makefile  \
2464
        libavdevice/Makefile \
2465
        libavfilter/Makefile \
2466
        libavformat/Makefile \
2467
        libavutil/Makefile   \
2468
        libpostproc/Makefile \
2469
        libswscale/Makefile  \
2470
        "
2471
    for dir in $DIRS ; do
2472
        mkdir -p $dir
2473
    done
2474
    for f in $FILES ; do
2475
        $ln_s "$source_path/$f" $f
2476
    done
2477
fi
2478

    
2479

    
2480
# build pkg-config files
2481

    
2482
pkgconfig_generate(){
2483
name=$1
2484
shortname=${name#lib}${build_suffix}
2485
comment=$2
2486
version=$3
2487
libs=$4
2488
requires=$5
2489
cat <<EOF > $name/$name.pc
2490
prefix=$prefix
2491
exec_prefix=\${prefix}
2492
libdir=$libdir
2493
includedir=$incdir
2494

    
2495
Name: $name
2496
Description: $comment
2497
Version: $version
2498
Requires: $(disabled shared && echo $requires)
2499
Requires.private: $(enabled shared && echo $requires)
2500
Conflicts:
2501
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2502
Libs.private: $(enabled shared && echo $libs)
2503
Cflags: -I\${includedir}
2504
EOF
2505
cat <<EOF > $name/$name-uninstalled.pc
2506
prefix=
2507
exec_prefix=
2508
libdir=\${pcfiledir}
2509
includedir=${source_path}
2510

    
2511
Name: $name
2512
Description: $comment
2513
Version: $version
2514
Requires: $requires
2515
Conflicts:
2516
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2517
Cflags: -I\${includedir}
2518
EOF
2519
}
2520

    
2521
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2522
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2523
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2524
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2525
enabled avfilter &&
2526
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2527
enabled postproc &&
2528
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2529
if enabled swscale; then
2530
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2531
else
2532
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2533
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2534
fi