Statistics
| Branch: | Revision:

ffmpeg / configure @ 0a7ee3ef

History | View | Annotate | Download (74.3 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
FFMPEG_CONFIGURATION="$@"
1224

    
1225
find_things(){
1226
    thing=$1
1227
    pattern=$2
1228
    file=$source_path/$3
1229
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1230
}
1231

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

    
1243
enable $ARCH_EXT_LIST \
1244
       $DECODER_LIST \
1245
       $ENCODER_LIST \
1246
       $PARSER_LIST \
1247
       $BSF_LIST \
1248
       $DEMUXER_LIST \
1249
       $MUXER_LIST \
1250
       $FILTER_LIST \
1251
       $PROTOCOL_LIST \
1252
       $INDEV_LIST \
1253
       $OUTDEV_LIST \
1254

    
1255
die_unknown(){
1256
    echo "Unknown option \"$1\"."
1257
    echo "See $0 --help for available options."
1258
    exit 1
1259
}
1260

    
1261
show_list() {
1262
    suffix=_$1
1263
    shift
1264
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1265
    exit 0
1266
}
1267

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

    
1316
disabled logging && logfile=/dev/null
1317

    
1318
echo "# $0 $@" > $logfile
1319
set >> $logfile
1320

    
1321
test -n "$cross_prefix" && enable cross_compile
1322

    
1323
ar="${cross_prefix}${ar}"
1324
cc_default="${cross_prefix}${cc_default}"
1325
nm_default="${cross_prefix}${nm_default}"
1326
ranlib="${cross_prefix}${ranlib}"
1327
strip="${cross_prefix}${strip}"
1328

    
1329
sysinclude_default="${sysroot}/usr/include"
1330

    
1331
set_default cc nm sysinclude
1332
as_default=$cc
1333
enabled cross_compile || host_cc_default=$cc
1334
set_default host_cc
1335

    
1336
exesuf() {
1337
    case $1 in
1338
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1339
    esac
1340
}
1341

    
1342
EXESUF=$(exesuf $target_os)
1343
HOSTEXESUF=$(exesuf $host_os)
1344

    
1345
# set temporary file name
1346
: ${TMPDIR:=$TEMPDIR}
1347
: ${TMPDIR:=$TMP}
1348
: ${TMPDIR:=/tmp}
1349

    
1350
if ! check_cmd type mktemp; then
1351
    # simple replacement for missing mktemp
1352
    # NOT SAFE FOR GENERAL USE
1353
    mktemp(){
1354
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1355
    }
1356
fi
1357

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

    
1366
trap 'rm -f -- $TMPFILES' EXIT
1367
trap exit HUP INT TERM
1368

    
1369
tmpfile TMPC  .c
1370
tmpfile TMPE  $EXESUF
1371
tmpfile TMPH  .h
1372
tmpfile TMPO  .o
1373
tmpfile TMPS  .S
1374
tmpfile TMPSH .sh
1375

    
1376
unset -f mktemp
1377

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

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

    
1415
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1416

    
1417
set_default as
1418

    
1419
if test -n "$sysroot"; then
1420
    case "$cc_type" in
1421
        gcc)
1422
            add_cflags  --sysroot="$sysroot"
1423
            add_ldflags --sysroot="$sysroot"
1424
        ;;
1425
    esac
1426
fi
1427

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

    
1441
check_cflags -std=c99
1442
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1443
#include <stdlib.h>
1444
EOF
1445
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1446
#include <stdlib.h>
1447
EOF
1448

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

    
1527
enable $arch $subarch
1528

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

    
1670
    *)
1671
        die "Unknown OS '$target_os'."
1672
        ;;
1673
esac
1674

    
1675
set_default $PATHS_LIST
1676

    
1677
add_extralibs $osextralibs
1678

    
1679
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1680
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1681

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

    
1693
disabled static && LIBNAME=""
1694

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

    
1710

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

    
1724
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1725
    die "libamr is nonfree and --enable-nonfree is not specified."
1726
fi
1727

    
1728
check_deps $ARCH_EXT_LIST
1729

    
1730
test -z "$need_memalign" && need_memalign="$mmx"
1731

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

    
1744
disabled optimizations || check_cflags -fomit-frame-pointer
1745

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

    
1825
check_cc <<EOF || die "Symbol mangling check failed."
1826
int ff_extern;
1827
EOF
1828
sym=$($nm -P -g $TMPO | grep ff_extern)
1829
extern_prefix=${sym%%ff_extern*}
1830

    
1831
check_cc <<EOF && enable inline_asm
1832
void foo(void) { __asm__ volatile ("" ::); }
1833
EOF
1834

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

    
1848
    # check wether EBX is available on x86
1849
    check_asm ebx_available '"":::"%ebx"'
1850

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

    
1863
    # check whether binutils is new enough to compile SSSE3/MMX2
1864
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1865
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1866

    
1867
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1868

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

    
1880
# check for assembler specific support
1881

    
1882
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1883
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1884

    
1885
# check for SIMD availability
1886

    
1887
# AltiVec flags: The FSF version of GCC differs from the Apple version
1888
if enabled altivec; then
1889
    check_cflags -maltivec -mabi=altivec &&
1890
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1891
        check_cflags -faltivec
1892

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

    
1903
    # check if our compiler supports braces for vector declarations
1904
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1905
$inc_altivec_h
1906
int main (void) { (vector int) {1}; return 0; }
1907
EOF
1908
fi
1909

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

    
1921
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1922

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

    
1930
# ---
1931
# check availability of some header files
1932

    
1933
if check_func dlopen; then
1934
    ldl=
1935
elif check_func dlopen -ldl; then
1936
    ldl=-ldl
1937
fi
1938

    
1939
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1940
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1941

    
1942
check_func  fork
1943
check_func  gethrtime
1944
check_func  getrusage
1945
check_func  inet_aton $network_extralibs
1946
check_func  memalign
1947
check_func  mkstemp
1948
check_func  posix_memalign
1949
check_func_headers io.h setmode
1950
check_func_headers windows.h GetProcessTimes
1951
check_func_headers windows.h VirtualAlloc
1952

    
1953
check_header conio.h
1954
check_header dlfcn.h
1955
check_header malloc.h
1956
check_header poll.h
1957
check_header sys/mman.h
1958
check_header sys/resource.h
1959
check_header sys/select.h
1960
check_header termios.h
1961
check_header vdpau/vdpau.h
1962
check_header vdpau/vdpau_x11.h
1963
check_header X11/extensions/XvMClib.h
1964

    
1965
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1966
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1967
fi
1968

    
1969
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1970
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1971

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

    
1990
for thread in $THREADS_LIST; do
1991
    if enabled $thread; then
1992
        test -n "$thread_type" &&
1993
            die "ERROR: Only one thread type must be selected." ||
1994
            thread_type="$thread"
1995
    fi
1996
done
1997

    
1998
check_lib math.h sin -lm
1999

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

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

    
2032
# libdc1394 check
2033
if enabled libdc1394; then
2034
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2035
        enable libdc1394_2; } ||
2036
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2037
        enable libdc1394_1; } ||
2038
    die "ERROR: No version of libdc1394 found "
2039
fi
2040

    
2041

    
2042
_restrict=
2043
for restrict_keyword in restrict __restrict__ __restrict; do
2044
    check_cc <<EOF && _restrict=$restrict_keyword && break
2045
void foo(char * $restrict_keyword p);
2046
EOF
2047
done
2048

    
2049
##########################################
2050
# SDL check
2051

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

    
2078
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2079

    
2080
##########################################
2081
# Network check
2082

    
2083
if enabled network; then
2084
    check_type "sys/types.h sys/socket.h" socklen_t
2085
    # Prefer arpa/inet.h over winsock2
2086
    if check_header arpa/inet.h ; then
2087
        check_func closesocket
2088
    elif check_header winsock2.h ; then
2089
        network_extralibs="-lws2_32"
2090
        check_type ws2tcpip.h socklen_t
2091
        check_func_headers winsock2.h closesocket
2092
    fi
2093
fi
2094

    
2095
##########################################
2096
# IPv6 check
2097

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

    
2112
check_header linux/videodev.h
2113
check_header linux/videodev2.h
2114
check_header sys/videoio.h
2115

    
2116
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2117

    
2118
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2119
{ check_header dev/bktr/ioctl_meteor.h &&
2120
  check_header dev/bktr/ioctl_bt848.h; } ||
2121
{ check_header machine/ioctl_meteor.h &&
2122
  check_header machine/ioctl_bt848.h; } ||
2123
{ check_header dev/video/meteor/ioctl_meteor.h &&
2124
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2125
check_header dev/ic/bt8xx.h
2126

    
2127
check_header sys/soundcard.h
2128
check_header soundcard.h
2129

    
2130
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2131

    
2132
# deal with the X11 frame grabber
2133
enabled x11grab                         &&
2134
check_header X11/Xlib.h                 &&
2135
check_header X11/extensions/XShm.h      &&
2136
check_func XOpenDisplay -lX11           &&
2137
check_func XShmCreateImage -lX11 -lXext
2138

    
2139
enabled debug && add_cflags -g"$debuglevel"
2140

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

    
2155
# add some linker flags
2156
check_ldflags -Wl,--warn-common
2157
check_ldflags -Wl,--as-needed
2158
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'
2159
check_ldflags -Wl,-Bsymbolic
2160

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

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

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

    
2213
if enabled gprof; then
2214
    add_cflags  -p
2215
    add_ldflags -p
2216
fi
2217

    
2218
# Find out if the .align argument is a power of two or not.
2219
check_asm asmalign_pot '".align 3"'
2220

    
2221
enabled_any $DECODER_LIST      && enable decoders
2222
enabled_any $ENCODER_LIST      && enable encoders
2223
enabled_any $BSF_LIST          && enable bsfs
2224
enabled_any $DEMUXER_LIST      && enable demuxers
2225
enabled_any $MUXER_LIST        && enable muxers
2226
enabled_any $FILTER_LIST       && enable filters
2227
enabled_any $INDEV_LIST        && enable demuxers
2228
enabled_any $OUTDEV_LIST       && enable muxers
2229
enabled_any $PROTOCOL_LIST     && enable protocols
2230

    
2231
enabled_any $THREADS_LIST      && enable threads
2232

    
2233
check_deps $CONFIG_LIST       \
2234
           $CONFIG_EXTRA      \
2235
           $HAVE_LIST         \
2236
           $DECODER_LIST      \
2237
           $ENCODER_LIST      \
2238
           $PARSER_LIST       \
2239
           $BSF_LIST          \
2240
           $DEMUXER_LIST      \
2241
           $MUXER_LIST        \
2242
           $FILTER_LIST       \
2243
           $INDEV_LIST        \
2244
           $OUTDEV_LIST       \
2245
           $PROTOCOL_LIST     \
2246

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

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

    
2343
license="LGPL"
2344
if enabled nonfree; then
2345
    license="unredistributable"
2346
elif enabled gpl; then
2347
    license="GPL"
2348
fi
2349

    
2350
echo "License: $license"
2351

    
2352
echo "Creating config.mak and config.h..."
2353

    
2354
echo "# Automatically generated by configure - do not modify!" > config.mak
2355
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2356
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2357
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2358
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2359
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2360

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

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

    
2407
if enabled bigendian; then
2408
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2409
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2410
fi
2411

    
2412
if enabled sdl; then
2413
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2414
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2415
fi
2416
if enabled texi2html; then
2417
    echo "BUILD_DOC=yes" >> config.mak
2418
fi
2419

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

    
2430
get_version LIBSWSCALE  libswscale/swscale.h
2431
get_version LIBPOSTPROC libpostproc/postprocess.h
2432
get_version LIBAVCODEC  libavcodec/avcodec.h
2433
get_version LIBAVDEVICE libavdevice/avdevice.h
2434
get_version LIBAVFORMAT libavformat/avformat.h
2435
get_version LIBAVUTIL   libavutil/avutil.h
2436
get_version LIBAVFILTER libavfilter/avfilter.h
2437

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

    
2453
echo "ARCH=$arch" >> config.mak
2454

    
2455
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2456
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2457
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2458
                                      $CONFIG_EXTRA      \
2459
                                      $DECODER_LIST      \
2460
                                      $ENCODER_LIST      \
2461
                                      $PARSER_LIST       \
2462
                                      $BSF_LIST          \
2463
                                      $DEMUXER_LIST      \
2464
                                      $MUXER_LIST        \
2465
                                      $FILTER_LIST       \
2466
                                      $PROTOCOL_LIST     \
2467
                                      $INDEV_LIST        \
2468
                                      $OUTDEV_LIST       \
2469

    
2470
echo "#define restrict $_restrict" >> $TMPH
2471

    
2472
if enabled small; then
2473
    echo "#define av_always_inline"  >> $TMPH
2474
fi
2475

    
2476

    
2477
# Apparently it's not possible to portably echo a backslash.
2478
enabled asmalign_pot &&
2479
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2480
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2481

    
2482
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2483

    
2484
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2485

    
2486
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2487
cmp -s $TMPH config.h &&
2488
    echo "config.h is unchanged" ||
2489
    mv -f $TMPH config.h
2490

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

    
2534

    
2535
# build pkg-config files
2536

    
2537
pkgconfig_generate(){
2538
name=$1
2539
shortname=${name#lib}${build_suffix}
2540
comment=$2
2541
version=$3
2542
libs=$4
2543
requires=$5
2544
cat <<EOF > $name/$name.pc
2545
prefix=$prefix
2546
exec_prefix=\${prefix}
2547
libdir=$libdir
2548
includedir=$incdir
2549

    
2550
Name: $name
2551
Description: $comment
2552
Version: $version
2553
Requires: $(disabled shared && echo $requires)
2554
Requires.private: $(enabled shared && echo $requires)
2555
Conflicts:
2556
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2557
Libs.private: $(enabled shared && echo $libs)
2558
Cflags: -I\${includedir}
2559
EOF
2560
cat <<EOF > $name/$name-uninstalled.pc
2561
prefix=
2562
exec_prefix=
2563
libdir=\${pcfiledir}
2564
includedir=${source_path}
2565

    
2566
Name: $name
2567
Description: $comment
2568
Version: $version
2569
Requires: $requires
2570
Conflicts:
2571
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2572
Cflags: -I\${includedir}
2573
EOF
2574
}
2575

    
2576
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2577
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2578
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2579
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2580
enabled avfilter &&
2581
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2582
enabled postproc &&
2583
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2584
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"