Statistics
| Branch: | Revision:

ffmpeg / configure @ 13cbe2c0

History | View | Annotate | Download (74.6 KB)

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

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

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

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

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

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

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

    
57
show_help(){
58
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72
  echo
73
  echo "Configuration options:"
74
  echo "  --disable-static         do not build static libraries [no]"
75
  echo "  --enable-shared          build shared libraries [no]"
76
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77
  echo "                           and binaries will be under GPL [no]"
78
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
79
  echo "                           and binaries will be unredistributable [no]"
80
  echo "  --disable-ffmpeg         disable ffmpeg build"
81
  echo "  --disable-ffplay         disable ffplay build"
82
  echo "  --disable-ffserver       disable ffserver build"
83
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
84
  echo "  --enable-avfilter        video filter support [no]"
85
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
86
  echo "  --enable-beosthreads     use BeOS threads [no]"
87
  echo "  --enable-os2threads      use OS/2 threads [no]"
88
  echo "  --enable-pthreads        use pthreads [no]"
89
  echo "  --enable-w32threads      use Win32 threads [no]"
90
  echo "  --enable-x11grab         enable X11 grabbing [no]"
91
  echo "  --disable-network        disable network support [no]"
92
  echo "  --disable-ipv6           disable IPv6 support [no]"
93
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
94
  echo "  --enable-gray            enable full grayscale support (slower color)"
95
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
96
  echo "  --disable-fastdiv        disable table-based division"
97
  echo "  --enable-small           optimize for size instead of speed"
98
  echo "  --disable-aandct         disable AAN DCT code"
99
  echo "  --disable-fft            disable FFT code"
100
  echo "  --disable-golomb         disable Golomb code"
101
  echo "  --disable-mdct           disable MDCT code"
102
  echo "  --disable-rdft           disable RDFT code"
103
  echo "  --enable-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
    swscale_alpha
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
    VirtualAlloc
916
    winsock2_h
917
    yasm
918
"
919

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

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

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

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

    
971
# code dependency declarations
972

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

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

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

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

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

    
1129
# filters
1130
movie_filter_deps="avfilter_lavf"
1131

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

    
1137

    
1138
# default parameters
1139

    
1140
logfile="config.err"
1141

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

    
1151
# toolchain
1152
ar="ar"
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
host_os=$target_os
1169

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

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

    
1200
host_cflags='-O3 -g -Wall'
1201
host_libs='-lm'
1202

    
1203
target_path='.'
1204

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

    
1209
# find source path
1210
source_path="$(dirname "$0")"
1211
enable source_path_used
1212
if test -z "$source_path" -o "$source_path" = "." ; then
1213
    source_path="$(pwd)"
1214
    disable source_path_used
1215
else
1216
    source_path="$(cd "$source_path"; pwd)"
1217
    echo "$source_path" | grep -q '[[:blank:]]' &&
1218
        die "Out of tree builds are impossible with whitespace in source path."
1219
    test -e "$source_path/config.h" &&
1220
        die "Out of tree builds are impossible with config.h in source dir."
1221
fi
1222

    
1223
for v in "$@"; do
1224
    r="${v#*=}"
1225
    l="${v%$r}"
1226
    test "$r" = "${r#* }" || r="'$r'"
1227
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1228
done
1229

    
1230
find_things(){
1231
    thing=$1
1232
    pattern=$2
1233
    file=$source_path/$3
1234
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1235
}
1236

    
1237
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1238
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1239
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1240
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1241
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1242
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1243
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1244
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1245
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1246
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1247

    
1248
enable $ARCH_EXT_LIST \
1249
       $DECODER_LIST \
1250
       $ENCODER_LIST \
1251
       $PARSER_LIST \
1252
       $BSF_LIST \
1253
       $DEMUXER_LIST \
1254
       $MUXER_LIST \
1255
       $FILTER_LIST \
1256
       $PROTOCOL_LIST \
1257
       $INDEV_LIST \
1258
       $OUTDEV_LIST \
1259

    
1260
die_unknown(){
1261
    echo "Unknown option \"$1\"."
1262
    echo "See $0 --help for available options."
1263
    exit 1
1264
}
1265

    
1266
show_list() {
1267
    suffix=_$1
1268
    shift
1269
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1270
    exit 0
1271
}
1272

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

    
1321
disabled logging && logfile=/dev/null
1322

    
1323
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1324
set >> $logfile
1325

    
1326
test -n "$cross_prefix" && enable cross_compile
1327

    
1328
ar="${cross_prefix}${ar}"
1329
cc_default="${cross_prefix}${cc_default}"
1330
nm_default="${cross_prefix}${nm_default}"
1331
ranlib="${cross_prefix}${ranlib}"
1332
strip="${cross_prefix}${strip}"
1333

    
1334
sysinclude_default="${sysroot}/usr/include"
1335

    
1336
set_default cc nm sysinclude
1337
as_default=$cc
1338
enabled cross_compile || host_cc_default=$cc
1339
set_default host_cc
1340

    
1341
exesuf() {
1342
    case $1 in
1343
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1344
    esac
1345
}
1346

    
1347
EXESUF=$(exesuf $target_os)
1348
HOSTEXESUF=$(exesuf $host_os)
1349

    
1350
# set temporary file name
1351
: ${TMPDIR:=$TEMPDIR}
1352
: ${TMPDIR:=$TMP}
1353
: ${TMPDIR:=/tmp}
1354

    
1355
if ! check_cmd type mktemp; then
1356
    # simple replacement for missing mktemp
1357
    # NOT SAFE FOR GENERAL USE
1358
    mktemp(){
1359
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1360
    }
1361
fi
1362

    
1363
tmpfile(){
1364
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1365
        (set -C; exec > $tmp) 2>/dev/null ||
1366
        die "Unable to create temoporary file in $TMPDIR."
1367
    append TMPFILES $tmp
1368
    eval $1=$tmp
1369
}
1370

    
1371
trap 'rm -f -- $TMPFILES' EXIT
1372
trap exit HUP INT TERM
1373

    
1374
tmpfile TMPC  .c
1375
tmpfile TMPE  $EXESUF
1376
tmpfile TMPH  .h
1377
tmpfile TMPO  .o
1378
tmpfile TMPS  .S
1379
tmpfile TMPSH .sh
1380

    
1381
unset -f mktemp
1382

    
1383
# make sure we can execute files in $TMPDIR
1384
cat > $TMPSH 2>> $logfile <<EOF
1385
#! /bin/sh
1386
EOF
1387
chmod +x $TMPSH >> $logfile 2>&1
1388
if ! $TMPSH >> $logfile 2>&1; then
1389
    cat <<EOF
1390
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1391
variable to another directory and make sure that it is not mounted noexec.
1392
EOF
1393
    die "Sanity test failed."
1394
fi
1395

    
1396
if   $cc --version 2>/dev/null | grep -qi gcc; then
1397
    cc_type=gcc
1398
elif $cc --version 2>/dev/null | grep -q Intel; then
1399
    cc_type=icc
1400
elif $cc -v 2>&1 | grep -q xlc; then
1401
    cc_type=xlc
1402
elif $cc -V 2>/dev/null | grep -q Compaq; then
1403
    cc_type=ccc
1404
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1405
    debuglevel=3
1406
    add_ldflags -Wl,-z,now # calls to libots crash without this
1407
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1408
    test -d "$sysroot" || die "No valid sysroot specified."
1409
    cc_type=armcc
1410
    armcc_conf="$PWD/armcc.conf"
1411
    $cc --arm_linux_configure                 \
1412
        --arm_linux_config_file="$armcc_conf" \
1413
        --configure_sysroot="$sysroot"        \
1414
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1415
        die "Error creating armcc configuration file."
1416
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1417
    as_default="${cross_prefix}gcc"
1418
fi
1419

    
1420
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1421

    
1422
set_default as
1423

    
1424
if test -n "$sysroot"; then
1425
    case "$cc_type" in
1426
        gcc)
1427
            add_cflags  --sysroot="$sysroot"
1428
            add_ldflags --sysroot="$sysroot"
1429
        ;;
1430
    esac
1431
fi
1432

    
1433
# compiler sanity check
1434
check_exec <<EOF
1435
int main(void){ return 0; }
1436
EOF
1437
if test "$?" != 0; then
1438
    echo "$cc is unable to create an executable file."
1439
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1440
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1441
        echo "Only do this if you know what cross compiling means."
1442
    fi
1443
    die "C compiler test failed."
1444
fi
1445

    
1446
check_cflags -std=c99
1447
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1448
#include <stdlib.h>
1449
EOF
1450
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1451
#include <stdlib.h>
1452
EOF
1453

    
1454
case "$arch" in
1455
    alpha)
1456
        arch="alpha"
1457
        enable fast_64bit
1458
        check_cflags -mieee
1459
    ;;
1460
    arm|armv[4567]*l)
1461
        arch="arm"
1462
    ;;
1463
    avr32)
1464
    ;;
1465
    bfin)
1466
        arch="bfin"
1467
    ;;
1468
    ia64)
1469
        arch="ia64"
1470
        enable fast_64bit
1471
    ;;
1472
    m68k)
1473
        arch="m68k"
1474
    ;;
1475
    mips|mipsel|IP*)
1476
        arch="mips"
1477
    ;;
1478
    mips64)
1479
        arch="mips"
1480
        enable fast_64bit
1481
    ;;
1482
    parisc|hppa)
1483
        arch="parisc"
1484
    ;;
1485
    parisc64|hppa64)
1486
        arch="parisc"
1487
        enable fast_64bit
1488
    ;;
1489
    "Power Macintosh"|ppc|powerpc)
1490
        arch="ppc"
1491
        enable fast_unaligned
1492
    ;;
1493
    ppc64)
1494
        arch="ppc"
1495
        enable fast_64bit
1496
        enable fast_unaligned
1497
    ;;
1498
    s390|s390x)
1499
        arch="s390"
1500
    ;;
1501
    sh4|sh)
1502
        arch="sh4"
1503
    ;;
1504
    sparc)
1505
        arch="sparc"
1506
    ;;
1507
    sun4u|sparc64)
1508
        arch="sparc"
1509
        subarch="sparc64"
1510
        enable fast_64bit
1511
    ;;
1512
    i386|i486|i586|i686|i86pc|BePC)
1513
        arch="x86"
1514
        subarch="x86_32"
1515
        enable fast_unaligned
1516
    ;;
1517
    x86_64|amd64)
1518
        arch="x86"
1519
        subarch="x86_32"
1520
        enable cmov
1521
        enable fast_cmov
1522
        enable fast_unaligned
1523
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1524
        int test[sizeof(char*) - 7];
1525
EOF
1526
    ;;
1527
    *)
1528
        arch="unknown"
1529
    ;;
1530
esac
1531

    
1532
enable $arch $subarch
1533

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

    
1675
    *)
1676
        die "Unknown OS '$target_os'."
1677
        ;;
1678
esac
1679

    
1680
set_default $PATHS_LIST
1681

    
1682
add_extralibs $osextralibs
1683

    
1684
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1685
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1686

    
1687
# we need to build at least one lib type
1688
if ! enabled_any static shared; then
1689
    cat <<EOF
1690
At least one library type must be built.
1691
Specify --enable-static to build the static libraries or --enable-shared to
1692
build the shared libraries as well. To only build the shared libraries specify
1693
--disable-static in addition to --enable-shared.
1694
EOF
1695
    exit 1;
1696
fi
1697

    
1698
disabled static && LIBNAME=""
1699

    
1700
if enabled_any libfaad libfaadbin ; then
1701
    if check_header faad.h; then
1702
        check_cc <<EOF
1703
#include <faad.h>
1704
#ifndef FAAD2_VERSION
1705
ok faad1
1706
#endif
1707
int main(void) { return 0; }
1708
EOF
1709
        test $? = 0 && enable libfaad2
1710
    else
1711
        die "FAAD test failed."
1712
    fi
1713
fi
1714

    
1715

    
1716
if ! enabled gpl; then
1717
    die_gpl_disabled(){
1718
        name=$1
1719
        shift
1720
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1721
    }
1722
    die_gpl_disabled "The Postprocessing code" postproc
1723
    die_gpl_disabled "libx264"                 libx264
1724
    die_gpl_disabled "libxvidcore"             libxvid
1725
    die_gpl_disabled "FAAD2"                   libfaad2
1726
    die_gpl_disabled "The X11 grabber"         x11grab
1727
fi
1728

    
1729
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1730
    die "libamr is nonfree and --enable-nonfree is not specified."
1731
fi
1732

    
1733
check_deps $ARCH_EXT_LIST
1734

    
1735
test -z "$need_memalign" && need_memalign="$mmx"
1736

    
1737
#Darwin CC versions
1738
if test $target_os = darwin; then
1739
    if enabled xlc; then
1740
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1741
    else
1742
        add_cflags -pipe
1743
        check_cflags -force_cpusubtype_ALL
1744
        check_cflags -Wno-sign-compare
1745
        enabled shared || check_cflags -mdynamic-no-pic
1746
    fi
1747
fi
1748

    
1749
disabled optimizations || check_cflags -fomit-frame-pointer
1750

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

    
1830
check_cc <<EOF || die "Symbol mangling check failed."
1831
int ff_extern;
1832
EOF
1833
sym=$($nm -P -g $TMPO | grep ff_extern)
1834
extern_prefix=${sym%%ff_extern*}
1835

    
1836
check_cc <<EOF && enable inline_asm
1837
void foo(void) { __asm__ volatile ("" ::); }
1838
EOF
1839

    
1840
if enabled x86; then
1841
    # check whether EBP is available on x86
1842
    # As 'i' is stored on the stack, this program will crash
1843
    # if the base pointer is used to access it because the
1844
    # base pointer is cleared in the inline assembly code.
1845
    check_exec_crash <<EOF && enable ebp_available
1846
    volatile int i=0;
1847
    __asm__ volatile (
1848
        "xorl %%ebp, %%ebp"
1849
    ::: "%ebp");
1850
    return i;
1851
EOF
1852

    
1853
    # check wether EBX is available on x86
1854
    check_asm ebx_available '"":::"%ebx"'
1855

    
1856
    # check whether more than 10 operands are supported
1857
    check_cc <<EOF && enable ten_operands
1858
int main(void) {
1859
    int x=0;
1860
    __asm__ volatile(
1861
        ""
1862
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1863
    );
1864
    return 0;
1865
}
1866
EOF
1867

    
1868
    # check whether binutils is new enough to compile SSSE3/MMX2
1869
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1870
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1871

    
1872
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1873

    
1874
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1875
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1876
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1877
    case "$objformat" in
1878
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1879
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1880
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1881
    esac
1882
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1883
fi
1884

    
1885
# check for assembler specific support
1886

    
1887
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1888
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1889

    
1890
# check for SIMD availability
1891

    
1892
# AltiVec flags: The FSF version of GCC differs from the Apple version
1893
if enabled altivec; then
1894
    check_cflags -maltivec -mabi=altivec &&
1895
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1896
        check_cflags -faltivec
1897

    
1898
    # check if our compiler supports Motorola AltiVec C API
1899
    check_cc <<EOF || disable altivec
1900
$inc_altivec_h
1901
int main(void) {
1902
    vector signed int v1, v2, v3;
1903
    v1 = vec_add(v2,v3);
1904
    return 0;
1905
}
1906
EOF
1907

    
1908
    # check if our compiler supports braces for vector declarations
1909
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1910
$inc_altivec_h
1911
int main (void) { (vector int) {1}; return 0; }
1912
EOF
1913
fi
1914

    
1915
# We have to check if pld is a nop and disable it.
1916
enabled arm     && check_asm pld     '"pld [r0]"'
1917
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1918
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1919
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1920
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1921
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1922
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1923
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1924
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1925

    
1926
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1927

    
1928
# ---
1929
# big/little-endian test
1930
check_cc <<EOF || die "endian test failed"
1931
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1932
EOF
1933
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1934

    
1935
# ---
1936
# check availability of some header files
1937

    
1938
if check_func dlopen; then
1939
    ldl=
1940
elif check_func dlopen -ldl; then
1941
    ldl=-ldl
1942
fi
1943

    
1944
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1945
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1946

    
1947
check_func  fork
1948
check_func  gethrtime
1949
check_func  getrusage
1950
check_func  inet_aton $network_extralibs
1951
check_func  memalign
1952
check_func  mkstemp
1953
check_func  posix_memalign
1954
check_func_headers io.h setmode
1955
check_func_headers windows.h GetProcessTimes
1956
check_func_headers windows.h VirtualAlloc
1957

    
1958
check_header conio.h
1959
check_header dlfcn.h
1960
check_header malloc.h
1961
check_header poll.h
1962
check_header sys/mman.h
1963
check_header sys/resource.h
1964
check_header sys/select.h
1965
check_header termios.h
1966
check_header vdpau/vdpau.h
1967
check_header vdpau/vdpau_x11.h
1968
check_header X11/extensions/XvMClib.h
1969

    
1970
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1971
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1972
fi
1973

    
1974
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1975
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1976

    
1977
# check for some common methods of building with pthread support
1978
# do this before the optional library checks as some of them require pthreads
1979
if enabled pthreads; then
1980
    if check_func pthread_create; then
1981
        :
1982
    elif check_func pthread_create -pthread; then
1983
        add_cflags -pthread
1984
        add_extralibs -pthread
1985
    elif check_func pthread_create -pthreads; then
1986
        add_cflags -pthreads
1987
        add_extralibs -pthreads
1988
    elif check_func pthread_create -lpthreadGC2; then
1989
        add_extralibs -lpthreadGC2
1990
    elif ! check_lib pthread.h pthread_create -lpthread; then
1991
        die "ERROR: can't find pthreads library"
1992
    fi
1993
fi
1994

    
1995
for thread in $THREADS_LIST; do
1996
    if enabled $thread; then
1997
        test -n "$thread_type" &&
1998
            die "ERROR: Only one thread type must be selected." ||
1999
            thread_type="$thread"
2000
    fi
2001
done
2002

    
2003
check_lib math.h sin -lm
2004

    
2005
# test for C99 functions in math.h
2006
for func in llrint lrint lrintf round roundf truncf; do
2007
    check_exec <<EOF && enable $func || disable $func
2008
#include <math.h>
2009
int main(void) { return ($func(3.999f) > 0)?0:1; }
2010
EOF
2011
done
2012

    
2013
# these are off by default, so fail if requested and not available
2014
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2015
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2016
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2017
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2018
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2019
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2020
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2021
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2022
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2023
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2024
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2025
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2026
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2027
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2028
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2029
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2030
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2031
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2032
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2033
                        die "ERROR: libx264 version must be >= 0.65."; }
2034
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2035
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2036

    
2037
# libdc1394 check
2038
if enabled libdc1394; then
2039
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2040
        enable libdc1394_2; } ||
2041
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2042
        enable libdc1394_1; } ||
2043
    die "ERROR: No version of libdc1394 found "
2044
fi
2045

    
2046

    
2047
_restrict=
2048
for restrict_keyword in restrict __restrict__ __restrict; do
2049
    check_cc <<EOF && _restrict=$restrict_keyword && break
2050
void foo(char * $restrict_keyword p);
2051
EOF
2052
done
2053

    
2054
##########################################
2055
# SDL check
2056

    
2057
disable sdl_too_old
2058
disable sdl
2059
SDL_CONFIG="${cross_prefix}sdl-config"
2060
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2061
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2062
    temp_cflags $sdl_cflags
2063
    temp_extralibs $("${SDL_CONFIG}" --libs)
2064
    if check_lib2 SDL.h SDL_Init; then
2065
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2066
        if test "$_sdlversion" -lt 121 ; then
2067
            enable sdl_too_old
2068
        else
2069
            enable sdl
2070
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2071
#include <SDL.h>
2072
int main(int argc, char **argv){
2073
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2074
    int w = vi->current_w;
2075
    return 0;
2076
}
2077
EOF
2078
        fi
2079
    fi
2080
    restore_flags
2081
fi
2082

    
2083
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2084

    
2085
##########################################
2086
# Network check
2087

    
2088
if enabled network; then
2089
    check_type "sys/types.h sys/socket.h" socklen_t
2090
    # Prefer arpa/inet.h over winsock2
2091
    if check_header arpa/inet.h ; then
2092
        check_func closesocket
2093
    elif check_header winsock2.h ; then
2094
        network_extralibs="-lws2_32"
2095
        check_type ws2tcpip.h socklen_t
2096
        check_func_headers winsock2.h closesocket
2097
    fi
2098
fi
2099

    
2100
##########################################
2101
# IPv6 check
2102

    
2103
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2104
#include <sys/types.h>
2105
#include <sys/socket.h>
2106
#include <netinet/in.h>
2107
#include <netdb.h>
2108
int main(void) {
2109
    struct sockaddr_storage saddr;
2110
    struct ipv6_mreq mreq6;
2111
    getaddrinfo(0,0,0,0);
2112
    getnameinfo(0,0,0,0,0,0,0);
2113
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2114
}
2115
EOF
2116

    
2117
check_header linux/videodev.h
2118
check_header linux/videodev2.h
2119
check_header sys/videoio.h
2120

    
2121
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2122

    
2123
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2124
{ check_header dev/bktr/ioctl_meteor.h &&
2125
  check_header dev/bktr/ioctl_bt848.h; } ||
2126
{ check_header machine/ioctl_meteor.h &&
2127
  check_header machine/ioctl_bt848.h; } ||
2128
{ check_header dev/video/meteor/ioctl_meteor.h &&
2129
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2130
check_header dev/ic/bt8xx.h
2131

    
2132
check_header sys/soundcard.h
2133
check_header soundcard.h
2134

    
2135
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2136

    
2137
# deal with the X11 frame grabber
2138
enabled x11grab                         &&
2139
check_header X11/Xlib.h                 &&
2140
check_header X11/extensions/XShm.h      &&
2141
check_func XOpenDisplay -lX11           &&
2142
check_func XShmCreateImage -lX11 -lXext
2143

    
2144
enabled debug && add_cflags -g"$debuglevel"
2145

    
2146
# add some useful compiler flags if supported
2147
check_cflags -Wdeclaration-after-statement
2148
check_cflags -Wall
2149
check_cflags -Wno-switch
2150
check_cflags -Wdisabled-optimization
2151
check_cflags -Wpointer-arith
2152
check_cflags -Wredundant-decls
2153
check_cflags -Wno-pointer-sign
2154
check_cflags -Wcast-qual
2155
check_cflags -Wwrite-strings
2156
check_cflags -Wtype-limits
2157
check_cflags -Wundef
2158
enabled extra_warnings && check_cflags -Winline
2159

    
2160
# add some linker flags
2161
check_ldflags -Wl,--warn-common
2162
check_ldflags -Wl,--as-needed
2163
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'
2164
check_ldflags -Wl,-Bsymbolic
2165

    
2166
if enabled small; then
2167
    check_cflags -Os            # not all compilers support -Os
2168
    optimizations="small"
2169
elif enabled optimizations; then
2170
    if enabled xlc; then
2171
        add_cflags  -O5
2172
        add_ldflags -O5
2173
    elif enabled ccc; then
2174
        add_cflags -fast
2175
    else
2176
        add_cflags -O3
2177
    fi
2178
fi
2179
check_cflags -fno-math-errno
2180
check_cflags -fno-signed-zeros
2181

    
2182
# add some flags for Intel C Compiler
2183
if enabled icc; then
2184
    # Just warnings, no remarks
2185
    check_cflags -w1
2186
    # -wd: Disable following warnings
2187
    # 144, 167, 556: -Wno-pointer-sign
2188
    # 10006: ignoring unknown option -fno-signed-zeros
2189
    # 10156: ignoring option '-W'; no argument required
2190
    check_cflags -wd144,167,556,10006,10156
2191
    # 11030: Warning unknown option --as-needed
2192
    # 10156: ignoring option '-export'; no argument required
2193
    check_ldflags -wd10156,11030
2194
    # Allow to compile with optimizations
2195
    check_ldflags -march=$cpu
2196
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2197
    enable ebp_available
2198
elif enabled ccc; then
2199
    # disable some annoying warnings
2200
    add_cflags -msg_disable cvtu32to64
2201
    add_cflags -msg_disable embedcomment
2202
    add_cflags -msg_disable needconstext
2203
    add_cflags -msg_disable nomainieee
2204
    add_cflags -msg_disable ptrmismatch1
2205
    add_cflags -msg_disable unreachcode
2206
fi
2207

    
2208
# PIC flags for shared library objects where they are needed
2209
if enabled shared; then
2210
    # LIBOBJFLAGS may have already been set in the OS configuration
2211
    if test -z "$LIBOBJFLAGS" ; then
2212
        case "${subarch-$arch}" in
2213
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2214
        esac
2215
    fi
2216
fi
2217

    
2218
if enabled gprof; then
2219
    add_cflags  -p
2220
    add_ldflags -p
2221
fi
2222

    
2223
# Find out if the .align argument is a power of two or not.
2224
check_asm asmalign_pot '".align 3"'
2225

    
2226
enabled_any $DECODER_LIST      && enable decoders
2227
enabled_any $ENCODER_LIST      && enable encoders
2228
enabled_any $BSF_LIST          && enable bsfs
2229
enabled_any $DEMUXER_LIST      && enable demuxers
2230
enabled_any $MUXER_LIST        && enable muxers
2231
enabled_any $FILTER_LIST       && enable filters
2232
enabled_any $INDEV_LIST        && enable demuxers
2233
enabled_any $OUTDEV_LIST       && enable muxers
2234
enabled_any $PROTOCOL_LIST     && enable protocols
2235

    
2236
enabled_any $THREADS_LIST      && enable threads
2237

    
2238
check_deps $CONFIG_LIST       \
2239
           $CONFIG_EXTRA      \
2240
           $HAVE_LIST         \
2241
           $DECODER_LIST      \
2242
           $ENCODER_LIST      \
2243
           $PARSER_LIST       \
2244
           $BSF_LIST          \
2245
           $DEMUXER_LIST      \
2246
           $MUXER_LIST        \
2247
           $FILTER_LIST       \
2248
           $INDEV_LIST        \
2249
           $OUTDEV_LIST       \
2250
           $PROTOCOL_LIST     \
2251

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

    
2339
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2340
    echo "Enabled ${type}s:"
2341
    eval list=\$$(toupper $type)_LIST
2342
    for part in $list; do
2343
        enabled $part && echo ${part%_*}
2344
    done | sort | pr -3 -t
2345
    echo
2346
done
2347

    
2348
license="LGPL"
2349
if enabled nonfree; then
2350
    license="unredistributable"
2351
elif enabled gpl; then
2352
    license="GPL"
2353
fi
2354

    
2355
echo "License: $license"
2356

    
2357
echo "Creating config.mak and config.h..."
2358

    
2359
echo "# Automatically generated by configure - do not modify!" > config.mak
2360
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2361
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2362
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2363
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2364
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2365

    
2366
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2367
echo "prefix=$prefix" >> config.mak
2368
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2369
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2370
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2371
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2372
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2373
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2374
echo "SRC_PATH=\"$source_path\"" >> config.mak
2375
echo "SRC_PATH_BARE=$source_path" >> config.mak
2376
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2377
echo "CC=$cc" >> config.mak
2378
echo "AS=$as" >> config.mak
2379
echo "YASM=$yasmexe" >> config.mak
2380
echo "AR=$ar" >> config.mak
2381
echo "RANLIB=$ranlib" >> config.mak
2382
echo "LN_S=$ln_s" >> config.mak
2383
enabled stripping &&
2384
    echo "STRIP=$strip" >> config.mak ||
2385
    echo "STRIP=echo ignoring strip" >> config.mak
2386

    
2387
echo "OPTFLAGS=$CFLAGS" >> config.mak
2388
echo "LDFLAGS=$LDFLAGS" >> config.mak
2389
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2390
echo "SHFLAGS=$SHFLAGS" >> config.mak
2391
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2392
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2393
echo "BUILD_STATIC=$static" >> config.mak
2394
echo "BUILDSUF=$build_suffix" >> config.mak
2395
echo "FULLNAME=$FULLNAME" >> config.mak
2396
echo "LIBPREF=$LIBPREF" >> config.mak
2397
echo "LIBSUF=$LIBSUF" >> config.mak
2398
echo "LIBNAME=$LIBNAME" >> config.mak
2399
echo "SLIBPREF=$SLIBPREF" >> config.mak
2400
echo "SLIBSUF=$SLIBSUF" >> config.mak
2401
echo "EXESUF=$EXESUF" >> config.mak
2402
echo "EXTRA_VERSION=$extra_version" >> config.mak
2403
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2404
echo "HOSTCC=$host_cc" >> config.mak
2405
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2406
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2407
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2408
echo "HOSTLIBS=$host_libs" >> config.mak
2409
echo "TARGET_EXEC=$target_exec" >> config.mak
2410
echo "TARGET_PATH=$target_path" >> config.mak
2411

    
2412
if enabled bigendian; then
2413
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2414
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2415
fi
2416

    
2417
if enabled sdl; then
2418
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2419
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2420
fi
2421
if enabled texi2html; then
2422
    echo "BUILD_DOC=yes" >> config.mak
2423
fi
2424

    
2425
get_version(){
2426
    name=$1
2427
    file=$source_path/$2
2428
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2429
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2430
    lcname=$(tolower $name)
2431
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2432
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2433
}
2434

    
2435
get_version LIBSWSCALE  libswscale/swscale.h
2436
get_version LIBPOSTPROC libpostproc/postprocess.h
2437
get_version LIBAVCODEC  libavcodec/avcodec.h
2438
get_version LIBAVDEVICE libavdevice/avdevice.h
2439
get_version LIBAVFORMAT libavformat/avformat.h
2440
get_version LIBAVUTIL   libavutil/avutil.h
2441
get_version LIBAVFILTER libavfilter/avfilter.h
2442

    
2443
if enabled shared; then
2444
    echo "BUILD_SHARED=yes" >> config.mak
2445
    echo "PIC=-fPIC -DPIC" >> config.mak
2446
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2447
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2448
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2449
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2450
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2451
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2452
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2453
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2454
fi
2455
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2456
echo "EXTRALIBS=$extralibs" >> config.mak
2457

    
2458
echo "ARCH=$arch" >> config.mak
2459

    
2460
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2461
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2462
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2463
                                      $CONFIG_EXTRA      \
2464
                                      $DECODER_LIST      \
2465
                                      $ENCODER_LIST      \
2466
                                      $PARSER_LIST       \
2467
                                      $BSF_LIST          \
2468
                                      $DEMUXER_LIST      \
2469
                                      $MUXER_LIST        \
2470
                                      $FILTER_LIST       \
2471
                                      $PROTOCOL_LIST     \
2472
                                      $INDEV_LIST        \
2473
                                      $OUTDEV_LIST       \
2474

    
2475
echo "#define restrict $_restrict" >> $TMPH
2476

    
2477
if enabled small; then
2478
    echo "#define av_always_inline"  >> $TMPH
2479
fi
2480

    
2481

    
2482
# Apparently it's not possible to portably echo a backslash.
2483
enabled asmalign_pot &&
2484
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2485
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2486

    
2487
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2488

    
2489
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2490

    
2491
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2492
cmp -s $TMPH config.h &&
2493
    echo "config.h is unchanged" ||
2494
    mv -f $TMPH config.h
2495

    
2496
# build tree in object directory if source path is different from current one
2497
if enabled source_path_used; then
2498
    DIRS="\
2499
        doc               \
2500
        libavcodec        \
2501
        libavcodec/alpha  \
2502
        libavcodec/arm    \
2503
        libavcodec/bfin   \
2504
        libavcodec/mlib   \
2505
        libavcodec/ppc    \
2506
        libavcodec/sh4    \
2507
        libavcodec/sparc  \
2508
        libavcodec/x86    \
2509
        libavdevice       \
2510
        libavfilter       \
2511
        libavformat       \
2512
        libavutil         \
2513
        libpostproc       \
2514
        libswscale        \
2515
        libswscale/bfin   \
2516
        libswscale/mlib   \
2517
        libswscale/ppc    \
2518
        libswscale/sparc  \
2519
        libswscale/x86    \
2520
        tests             \
2521
        tools             \
2522
        "
2523
    FILES="\
2524
        Makefile             \
2525
        common.mak           \
2526
        subdir.mak           \
2527
        doc/texi2pod.pl      \
2528
        libavcodec/Makefile  \
2529
        libavdevice/Makefile \
2530
        libavfilter/Makefile \
2531
        libavformat/Makefile \
2532
        libavutil/Makefile   \
2533
        libpostproc/Makefile \
2534
        libswscale/Makefile  \
2535
        "
2536
    for dir in $DIRS ; do
2537
        mkdir -p $dir
2538
    done
2539
    for f in $FILES ; do
2540
        $ln_s "$source_path/$f" $f
2541
    done
2542
fi
2543

    
2544

    
2545
# build pkg-config files
2546

    
2547
pkgconfig_generate(){
2548
name=$1
2549
shortname=${name#lib}${build_suffix}
2550
comment=$2
2551
version=$3
2552
libs=$4
2553
requires=$5
2554
cat <<EOF > $name/$name.pc
2555
prefix=$prefix
2556
exec_prefix=\${prefix}
2557
libdir=$libdir
2558
includedir=$incdir
2559

    
2560
Name: $name
2561
Description: $comment
2562
Version: $version
2563
Requires: $(disabled shared && echo $requires)
2564
Requires.private: $(enabled shared && echo $requires)
2565
Conflicts:
2566
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2567
Libs.private: $(enabled shared && echo $libs)
2568
Cflags: -I\${includedir}
2569
EOF
2570
cat <<EOF > $name/$name-uninstalled.pc
2571
prefix=
2572
exec_prefix=
2573
libdir=\${pcfiledir}
2574
includedir=${source_path}
2575

    
2576
Name: $name
2577
Description: $comment
2578
Version: $version
2579
Requires: $requires
2580
Conflicts:
2581
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2582
Cflags: -I\${includedir}
2583
EOF
2584
}
2585

    
2586
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2587
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2588
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2589
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2590
enabled avfilter &&
2591
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2592
enabled postproc &&
2593
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2594
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"