Statistics
| Branch: | Revision:

ffmpeg / configure @ 7ef3425f

History | View | Annotate | Download (66.9 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 "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71
  echo "  --enable-static          build static libraries [default=yes]"
72
  echo "  --disable-static         do not build static libraries [default=no]"
73
  echo "  --enable-shared          build shared libraries [default=no]"
74
  echo "  --disable-shared         do not build shared libraries [default=yes]"
75
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
76
  echo "                           and ffmpeg will be under GPL [default=no]"
77
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libav*"
78
  echo "                           and ffmpeg will be unredistributable [default=no]"
79
  echo "  --enable-postproc        enable GPLed postprocessing support [default=no]"
80
  echo "  --enable-swscale         software scaler support [default=no]"
81
  echo "  --enable-avfilter        video filter support (replaces vhook) [default=no]"
82
  echo "  --enable-avfilter-lavf   video filters dependant on avformat [default=no]"
83
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
84
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
85
  echo "  --enable-pthreads        use pthreads [default=no]"
86
  echo "  --enable-w32threads      use Win32 threads [default=no]"
87
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
88
  echo
89
  echo "External library support:"
90
  echo "  --enable-mlib            use Sun medialib [default=no]"
91
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
92
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
93
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
94
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
95
  echo "                           and libraw1394 [default=no]"
96
  echo "  --enable-libdirac        enable Dirac support via libdirac [default=no]"
97
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
98
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
99
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
100
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
101
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
102
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
103
  echo "                           native demuxer exists [default=no]"
104
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
105
  echo "  --enable-libspeex        enable Speex decoding via libspeex [default=no]"
106
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
107
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
108
  echo "                           native implementation exists [default=no]"
109
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
110
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
111
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
112
  echo ""
113
  echo "Advanced options (experts only):"
114
  echo "  --source-path=PATH       path to source code [$source_path]"
115
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
116
  echo "  --enable-cross-compile   assume a cross-compiler is used"
117
  echo "  --target-os=OS           compiler targets OS [$target_os]"
118
  echo "  --cc=CC                  use C compiler CC [$cc]"
119
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
120
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
121
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
122
  echo "  --extra-version=STRING   version string suffix []"
123
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
124
  echo "  --arch=ARCH              select architecture  [$arch]"
125
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
126
  echo "                           instruction selection, may crash on older CPUs)"
127
  echo "  --enable-powerpc-perf    enable performance report on PPC"
128
  echo "                           (requires enabling PMC)"
129
  echo "  --disable-mmx            disable MMX usage"
130
  echo "  --disable-mmx2           disable MMX2 usage"
131
  echo "  --disable-ssse3          disable SSSE3 usage"
132
  echo "  --disable-armv5te        disable armv5te usage"
133
  echo "  --disable-armv6          disable armv6 usage"
134
  echo "  --disable-armvfp         disable ARM VFP usage"
135
  echo "  --disable-iwmmxt         disable iwmmxt usage"
136
  echo "  --disable-altivec        disable AltiVec usage"
137
  echo "  --disable-network        disable network support [default=no]"
138
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
139
  echo "  --disable-zlib           disable zlib [default=no]"
140
  echo "  --disable-bzlib          disable bzlib [default=no]"
141
  echo "  --disable-vhook          disable video hooking support"
142
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
143
  echo "                           MPEG audio decoding [default=no]"
144
  echo "  --enable-gray            enable full grayscale support (slower color)"
145
  echo "  --disable-ffmpeg         disable ffmpeg build"
146
  echo "  --disable-ffserver       disable ffserver build"
147
  echo "  --disable-ffplay         disable ffplay build"
148
  echo "  --enable-small           optimize for size instead of speed"
149
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
151
  echo "  --disable-encoder=NAME   disables encoder NAME"
152
  echo "  --enable-encoder=NAME    enables encoder NAME"
153
  echo "  --disable-decoder=NAME   disables decoder NAME"
154
  echo "  --enable-decoder=NAME    enables decoder NAME"
155
  echo "  --disable-encoders       disables all encoders"
156
  echo "  --disable-decoders       disables all decoders"
157
  echo "  --disable-muxer=NAME     disables muxer NAME"
158
  echo "  --enable-muxer=NAME      enables muxer NAME"
159
  echo "  --disable-muxers         disables all muxers"
160
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
161
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
162
  echo "  --disable-demuxers       disables all demuxers"
163
  echo "  --enable-parser=NAME     enables parser NAME"
164
  echo "  --disable-parser=NAME    disables parser NAME"
165
  echo "  --disable-parsers        disables all parsers"
166
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
167
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
168
  echo "  --disable-bsfs           disables all bitstream filters"
169
  echo "  --enable-protocol=NAME   enables protocol NAME"
170
  echo "  --disable-protocol=NAME  disables protocol NAME"
171
  echo "  --disable-protocols      disables all protocols"
172
  echo "  --disable-devices        disables all devices"
173
  echo "  --enable-filter=NAME     enables filter NAME"
174
  echo "  --disable-filter=NAME    disables filter NAME"
175
  echo "  --disable-filters        disables all filters"
176
  echo "  --list-decoders          show all available decoders"
177
  echo "  --list-encoders          show all available encoders"
178
  echo "  --list-muxers            show all available muxers"
179
  echo "  --list-demuxers          show all available demuxers"
180
  echo "  --list-parsers           show all available parsers"
181
  echo "  --list-protocols         show all available protocols"
182
  echo "  --list-bsfs              show all available bitstream filters"
183
  echo "  --list-indevs            show all available input devices"
184
  echo "  --list-outdevs           show all available output devices"
185
  echo "  --list-filters           show all available filters"
186
  echo
187
  echo "Developer options (useful when working on FFmpeg itself):"
188
  echo "  --disable-debug          disable debugging symbols"
189
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
190
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
191
  echo "  --disable-optimizations  disable compiler optimizations"
192
  echo "  --enable-extra-warnings  enable more compiler warnings"
193
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
194
  echo ""
195
  echo "NOTE: Object files are built at the place where configure is launched."
196
  exit 0
197
}
198

    
199
log(){
200
    echo "$@" >> $logfile
201
}
202

    
203
log_file(){
204
    log BEGIN $1
205
    pr -n -t $1 >> $logfile
206
    log END $1
207
}
208

    
209
echolog(){
210
    log "$@"
211
    echo "$@"
212
}
213

    
214
die(){
215
    echolog "$@"
216
    cat <<EOF
217
If you think configure made a mistake, make sure you are using the latest
218
version from SVN.  If the latest version fails, report the problem to the
219
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
220
EOF
221
    if disabled logging; then
222
        cat <<EOF
223
Rerun configure with logging enabled (do not use --disable-logging), and
224
include the log this produces with your report.
225
EOF
226
    else
227
cat <<EOF
228
Include the log file "$logfile" produced by configure as this will help
229
solving the problem.
230
EOF
231
    fi
232
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233
    exit 1
234
}
235

    
236
# Avoid locale weirdness, besides we really just want to translate ASCII.
237
toupper(){
238
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239
}
240

    
241
tolower(){
242
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
243
}
244

    
245
set_all(){
246
    value=$1
247
    shift
248
    for var in $*; do
249
        eval $var=$value
250
    done
251
}
252

    
253
pushvar(){
254
    for var in $*; do
255
        eval level=\${${var}_level:=0}
256
        eval ${var}_${level}="\$$var"
257
        eval ${var}_level=$(($level+1))
258
    done
259
}
260

    
261
popvar(){
262
    for var in $*; do
263
        eval level=\${${var}_level:-0}
264
        test $level = 0 && continue
265
        eval level=$(($level-1))
266
        eval $var="\${${var}_${level}}"
267
        eval ${var}_level=$level
268
        eval unset ${var}_${level}
269
    done
270
}
271

    
272
enable(){
273
    set_all yes $*
274
}
275

    
276
disable(){
277
    set_all no $*
278
}
279

    
280
enabled(){
281
    test "${1#!}" = "$1" && op== || op=!=
282
    eval test "x\$${1#!}" $op "xyes"
283
}
284

    
285
disabled(){
286
    test "${1#!}" = "$1" && op== || op=!=
287
    eval test "x\$${1#!}" $op "xno"
288
}
289

    
290
enabled_all(){
291
    for opt; do
292
        enabled $opt || return 1
293
    done
294
}
295

    
296
disabled_all(){
297
    for opt; do
298
        disabled $opt || return 1
299
    done
300
}
301

    
302
enabled_any(){
303
    for opt; do
304
        enabled $opt && return 0
305
    done
306
}
307

    
308
disabled_any(){
309
    for opt; do
310
        disabled $opt && return 0
311
    done
312
    return 1
313
}
314

    
315
set_default(){
316
    for opt; do
317
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
318
    done
319
}
320

    
321
is_in(){
322
    value=$1
323
    shift
324
    for var in $*; do
325
        [ $var = $value ] && return 0
326
    done
327
    return 1
328
}
329

    
330
check_deps(){
331
    for cfg; do
332
        cfg="${cfg#!}"
333
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
334
        disabled ${cfg}_checking && continue
335
        enable ${cfg}_checking
336

    
337
        eval dep_all="\$${cfg}_deps"
338
        eval dep_any="\$${cfg}_deps_any"
339
        eval dep_sel="\$${cfg}_select"
340

    
341
        pushvar cfg dep_all dep_any dep_sel
342
        check_deps $dep_all $dep_any $dep_sel
343
        popvar cfg dep_all dep_any dep_sel
344

    
345
        enabled_all $dep_all || disable $cfg
346
        enabled_any $dep_any || disable $cfg
347
        disabled_any $dep_sel && disable $cfg
348

    
349
        if enabled $cfg; then
350
            eval dep_extralibs="\$${cfg}_extralibs"
351
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
352
            enable $dep_sel
353
        fi
354

    
355
        disable ${cfg}_checking
356
    done
357
}
358

    
359
print_config(){
360
    pfx=$1
361
    header=$2
362
    makefile=$3
363
    shift 3
364
    for cfg; do
365
        ucname="`toupper $cfg`"
366
        if enabled $cfg; then
367
            echo "#define ${pfx}${ucname} 1" >> $header
368
            echo "#define ENABLE_${ucname} 1" >> $header
369
            echo "${pfx}${ucname}=yes" >> $makefile
370
        else
371
            echo "#define ENABLE_${ucname} 0" >> $header
372
        fi
373
    done
374
}
375

    
376
flags_saved(){
377
    (: ${SAVE_CFLAGS?}) 2> /dev/null
378
}
379

    
380
save_flags(){
381
    flags_saved && return
382
    SAVE_CFLAGS="$CFLAGS"
383
    SAVE_LDFLAGS="$LDFLAGS"
384
    SAVE_extralibs="$extralibs"
385
}
386

    
387
restore_flags(){
388
    flags_saved || return
389
    CFLAGS="$SAVE_CFLAGS"
390
    LDFLAGS="$SAVE_LDFLAGS"
391
    extralibs="$SAVE_extralibs"
392
    unset SAVE_CFLAGS
393
    unset SAVE_LDFLAGS
394
    unset SAVE_extralibs
395
}
396

    
397
temp_cflags(){
398
    save_flags
399
    CFLAGS="$CFLAGS $*"
400
}
401

    
402
temp_ldflags(){
403
    save_flags
404
    LDFLAGS="$LDFLAGS $*"
405
}
406

    
407
temp_extralibs(){
408
    save_flags
409
    extralibs="$extralibs $*"
410
}
411

    
412
append(){
413
    var=$1
414
    shift
415
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
416
    eval "$var=\"\$$var $*\""
417
}
418

    
419
add_cflags(){
420
    append CFLAGS "$@"
421
}
422

    
423
add_ldflags(){
424
    append LDFLAGS "$@"
425
}
426

    
427
add_extralibs(){
428
    append extralibs "$@"
429
}
430

    
431
check_cmd(){
432
    log "$@"
433
    "$@" >> $logfile 2>&1
434
}
435

    
436
check_cc(){
437
    log check_cc "$@"
438
    cat > $TMPC
439
    log_file $TMPC
440
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
441
}
442

    
443
check_cpp(){
444
    log check_cpp "$@"
445
    cat > $TMPC
446
    log_file $TMPC
447
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
448
}
449

    
450
check_asm(){
451
    log check_asm "$@"
452
    name="$1"
453
    asm="$2"
454
    shift 2
455
    check_cc "$@" <<EOF && enable $name || disable $name
456
int foo(void){ __asm__ volatile($asm); }
457
EOF
458
}
459

    
460
check_yasm(){
461
    log check_yasm "$@"
462
    echo "$1" > $TMPS
463
    log_file $TMPS
464
    shift 1
465
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
466
}
467

    
468
check_ld(){
469
    log check_ld "$@"
470
    check_cc || return
471
    flags=''
472
    libs=''
473
    for f; do
474
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
475
    done
476
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
477
}
478

    
479
check_cflags(){
480
    log check_cflags "$@"
481
    check_cc "$@" <<EOF && add_cflags "$@"
482
int x;
483
EOF
484
}
485

    
486
check_ldflags(){
487
    log check_ldflags "$@"
488
    check_ld "$@" <<EOF && add_ldflags "$@"
489
int main(void){ return 0; }
490
EOF
491
}
492

    
493
check_header(){
494
    log check_header "$@"
495
    header=$1
496
    shift
497
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
498
    disable $var
499
    check_cpp "$@" <<EOF && enable $var
500
#include <$header>
501
int x;
502
EOF
503
}
504

    
505
check_func(){
506
    log check_func "$@"
507
    func=$1
508
    shift
509
    disable $func
510
    check_ld "$@" <<EOF && enable $func
511
extern int $func();
512
int main(void){ $func(); }
513
EOF
514
}
515

    
516
check_func_headers(){
517
    log check_func_headers "$@"
518
    headers=$1
519
    func=$2
520
    shift 2
521
    disable $func
522
    incs=""
523
    for hdr in $headers; do
524
        incs="$incs
525
#include <$hdr>"
526
    done
527
    check_ld "$@" <<EOF && enable $func
528
$incs
529
int main(int argc, char **argv){
530
    (void) $func;
531
    return 0;
532
}
533
EOF
534
}
535

    
536
check_cpp_condition(){
537
    log check_cpp_condition "$@"
538
    header=$1
539
    condition=$2
540
    check_cpp <<EOF
541
#include <$header>
542
#if !($condition)
543
#error "unsatisfied condition: $condition"
544
#endif
545
EOF
546
}
547

    
548
check_lib(){
549
    log check_lib "$@"
550
    header="$1"
551
    func="$2"
552
    shift 2
553
    temp_extralibs "$@"
554
    check_header $header && check_func $func && add_extralibs "$@"
555
    err=$?
556
    restore_flags
557
    return $err
558
}
559

    
560
check_lib2(){
561
    log check_lib2 "$@"
562
    headers="$1"
563
    func="$2"
564
    shift 2
565
    temp_extralibs "$@"
566
    check_func_headers "$headers" $func && add_extralibs "$@"
567
    err=$?
568
    restore_flags
569
    return $err
570
}
571

    
572
check_exec(){
573
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
574
}
575

    
576
check_exec_crash(){
577
    code=`cat`
578

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

    
585
    (check_exec "$@") >> $logfile 2>&1 <<EOF
586
#include <signal.h>
587
static void sighandler(int sig){
588
    raise(SIGTERM);
589
}
590
int main(void){
591
    signal(SIGILL, sighandler);
592
    signal(SIGFPE, sighandler);
593
    signal(SIGSEGV, sighandler);
594
#ifdef SIGBUS
595
    signal(SIGBUS, sighandler);
596
#endif
597
    { $code }
598
}
599
EOF
600
}
601

    
602
check_type(){
603
    log check_type "$@"
604
    headers=$1
605
    type=$2
606
    shift 2
607
    disable $type
608
    incs=""
609
    for hdr in $headers; do
610
        incs="$incs
611
#include <$hdr>"
612
    done
613
    check_cc "$@" <<EOF && enable $type
614
$incs
615
$type v;
616
EOF
617
}
618

    
619
require(){
620
    name="$1"
621
    header="$2"
622
    func="$3"
623
    shift 3
624
    check_lib $header $func "$@" || die "ERROR: $name not found"
625
}
626

    
627
require2(){
628
    name="$1"
629
    headers="$2"
630
    func="$3"
631
    shift 3
632
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
633
}
634

    
635
check_foo_config(){
636
    cfg=$1
637
    pkg=$2
638
    header=$3
639
    func=$4
640
    shift 4
641
    disable $cfg
642
    check_cmd ${pkg}-config --version
643
    err=$?
644
    if test "$err" = 0; then
645
        temp_cflags `${pkg}-config --cflags`
646
        temp_extralibs `${pkg}-config --libs`
647
        check_lib "$@" $header $func && enable $cfg
648
    fi
649
    return $err
650
}
651

    
652
apply(){
653
    file=$1
654
    shift
655
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
656
}
657

    
658
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
659
# system-dependent things.
660

    
661
COMPONENT_LIST="
662
    bsfs
663
    decoders
664
    demuxers
665
    encoders
666
    filters
667
    indevs
668
    muxers
669
    outdevs
670
    parsers
671
    protocols
672
"
673

    
674
CONFIG_LIST="
675
    $COMPONENT_LIST
676
    avfilter
677
    avfilter_lavf
678
    avisynth
679
    beos_netserver
680
    bzlib
681
    ffmpeg
682
    ffplay
683
    ffserver
684
    gpl
685
    gprof
686
    gray
687
    hardcoded_tables
688
    ipv6
689
    libamr_nb
690
    libamr_wb
691
    libdc1394
692
    libdirac
693
    libfaac
694
    libfaad
695
    libfaadbin
696
    libgsm
697
    libmp3lame
698
    libnut
699
    libschroedinger
700
    libspeex
701
    libtheora
702
    libvorbis
703
    libx264
704
    libxvid
705
    memalign_hack
706
    mlib
707
    mpegaudio_hp
708
    network
709
    nonfree
710
    postproc
711
    powerpc_perf
712
    small
713
    swscale
714
    vhook
715
    x11grab
716
    zlib
717
"
718

    
719
THREADS_LIST='
720
    beosthreads
721
    os2threads
722
    pthreads
723
    w32threads
724
'
725

    
726
ARCH_LIST='
727
    alpha
728
    armv4l
729
    bfin
730
    ia64
731
    m68k
732
    mips
733
    parisc
734
    powerpc
735
    s390
736
    sh4
737
    sparc
738
    sparc64
739
    x86
740
    x86_32
741
    x86_64
742
'
743

    
744
ARCH_EXT_LIST='
745
    altivec
746
    armv5te
747
    armv6
748
    armvfp
749
    iwmmxt
750
    mmi
751
    mmx
752
    mmx2
753
    neon
754
    ssse3
755
    vis
756
'
757

    
758
HAVE_LIST="
759
    $ARCH_EXT_LIST
760
    $THREADS_LIST
761
    altivec_h
762
    arpa_inet_h
763
    bswap
764
    closesocket
765
    cmov
766
    conio_h
767
    dcbzl
768
    dev_bktr_ioctl_bt848_h
769
    dev_bktr_ioctl_meteor_h
770
    dev_ic_bt8xx_h
771
    dev_video_meteor_ioctl_meteor_h
772
    dev_video_bktr_ioctl_bt848_h
773
    dlfcn_h
774
    dlopen
775
    dos_paths
776
    ebp_available
777
    ebx_available
778
    fast_64bit
779
    fast_cmov
780
    fast_unaligned
781
    fork
782
    freetype2
783
    gethrtime
784
    GetProcessTimes
785
    getrusage
786
    imlib2
787
    inet_aton
788
    inline_asm
789
    libdc1394_1
790
    libdc1394_2
791
    llrint
792
    lrint
793
    lrintf
794
    machine_ioctl_bt848_h
795
    machine_ioctl_meteor_h
796
    malloc_h
797
    memalign
798
    mkstemp
799
    pld
800
    ppc64
801
    round
802
    roundf
803
    sdl
804
    sdl_video_size
805
    socklen_t
806
    soundcard_h
807
    poll_h
808
    sys_mman_h
809
    sys_resource_h
810
    sys_select_h
811
    sys_soundcard_h
812
    sys_videoio_h
813
    termios_h
814
    threads
815
    winsock2_h
816
    yasm
817
"
818

    
819
CMDLINE_SELECT="
820
    $ARCH_EXT_LIST
821
    $CONFIG_LIST
822
    $THREADS_LIST
823
    cross_compile
824
    debug
825
    extra_warnings
826
    logging
827
    optimizations
828
    shared
829
    static
830
    stripping
831
"
832

    
833
PATHS_LIST='
834
    bindir
835
    incdir
836
    libdir
837
    mandir
838
    prefix
839
    shlibdir
840
'
841

    
842
CMDLINE_SET="
843
    $PATHS_LIST
844
    arch
845
    build_suffix
846
    cc
847
    cpu
848
    cross_prefix
849
    extra_version
850
    logfile
851
    source_path
852
    target_os
853
"
854

    
855
# code dependency declarations
856

    
857
# architecture extensions
858
altivec_deps="powerpc"
859
armv5te_deps="armv4l"
860
armv6_deps="armv4l"
861
armvfp_deps="armv4l"
862
iwmmxt_deps="armv4l"
863
mmi_deps="mips"
864
mmx_deps="x86"
865
mmx2_deps="x86 mmx"
866
neon_deps="armv4l"
867
ssse3_deps="x86"
868
vis_deps="sparc"
869

    
870
# decoders / encoders
871
ac3_decoder_deps="gpl"
872
dxa_decoder_deps="zlib"
873
eac3_decoder_deps="gpl"
874
flashsv_decoder_deps="zlib"
875
flashsv_encoder_deps="zlib"
876
mlp_decoder_deps="mlp_parser"
877
mpeg_xvmc_decoder_deps="xvmc"
878
png_decoder_deps="zlib"
879
png_encoder_deps="zlib"
880
zmbv_decoder_deps="zlib"
881
zmbv_encoder_deps="zlib"
882

    
883
# external libraries
884
libamr_nb_decoder_deps="libamr_nb"
885
libamr_nb_encoder_deps="libamr_nb"
886
libamr_wb_decoder_deps="libamr_wb"
887
libamr_wb_encoder_deps="libamr_wb"
888
libdirac_decoder_deps="libdirac !libschroedinger"
889
libdirac_encoder_deps="libdirac"
890
libfaac_encoder_deps="libfaac"
891
libfaad_decoder_deps="libfaad"
892
libfaadbin_decoder_extralibs='$ldl'
893
libgsm_decoder_deps="libgsm"
894
libgsm_encoder_deps="libgsm"
895
libgsm_ms_decoder_deps="libgsm"
896
libgsm_ms_encoder_deps="libgsm"
897
libmp3lame_encoder_deps="libmp3lame"
898
libschroedinger_decoder_deps="libschroedinger"
899
libschroedinger_encoder_deps="libschroedinger"
900
libspeex_decoder_deps="libspeex"
901
libtheora_encoder_deps="libtheora"
902
libvorbis_encoder_deps="libvorbis"
903
libx264_encoder_deps="libx264"
904
libxvid_encoder_deps="libxvid"
905
mpeg4aac_decoder_deps="libfaad"
906

    
907
# demuxers / muxers
908
ac3_demuxer_deps="ac3_parser"
909
audio_beos_demuxer_deps="audio_beos"
910
audio_beos_demuxer_extralibs="-lmedia -lbe"
911
audio_beos_muxer_deps="audio_beos"
912
audio_beos_muxer_extralibs="-lmedia -lbe"
913
avisynth_demuxer_deps="avisynth"
914
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
915
dirac_demuxer_deps="dirac_parser"
916
dv1394_demuxer_deps="dv1394 dv_demuxer"
917
libdc1394_demuxer_deps="libdc1394"
918
libnut_demuxer_deps="libnut"
919
libnut_muxer_deps="libnut"
920
mp3_demuxer_deps="mpegaudio_parser"
921
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
922
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
923
redir_demuxer_deps="network"
924
rtp_muxer_deps="network rtp_protocol"
925
rtsp_demuxer_deps="sdp_demuxer"
926
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
927
v4l_demuxer_deps="linux_videodev_h"
928
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
929
vfwcap_demuxer_deps="capCreateCaptureWindow"
930
vfwcap_demuxer_extralibs="-lvfw32"
931
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
932
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
933

    
934
# protocols
935
http_protocol_deps="network"
936
rtp_protocol_deps="udp_protocol"
937
tcp_protocol_deps="network"
938
udp_protocol_deps="network"
939

    
940
# filters
941
movie_filter_deps="avfilter_lavf"
942

    
943
# programs
944
ffplay_deps="sdl"
945
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
946
ffserver_extralibs='$ldl'
947
vhook_extralibs='$ldl'
948

    
949

    
950
# default parameters
951

    
952
logfile="config.err"
953

    
954
# installation paths
955
prefix_default="/usr/local"
956
bindir_default='${prefix}/bin'
957
incdir_default='${prefix}/include'
958
libdir_default='${prefix}/lib'
959
mandir_default='${prefix}/share/man'
960
shlibdir_default="$libdir_default"
961

    
962
# toolchain
963
cc_default="gcc"
964
yasmexe="yasm"
965
ar="ar"
966
nm="nm"
967
ranlib="ranlib"
968
strip="strip"
969
asmalign_pot="unknown"
970
ln_s="ln -sf"
971
objformat="elf"
972

    
973
# machine
974
arch=`uname -m`
975
cpu="generic"
976

    
977
# OS
978
target_os=$(tolower $(uname -s))
979

    
980
# libraries
981
enable bzlib
982
enable zlib
983

    
984
# configurable options
985
enable debug
986
enable ffmpeg
987
enable ffplay
988
enable ffserver
989
enable ipv6
990
enable mpegaudio_hp
991
enable network
992
enable optimizations
993
enable protocols
994
enable static
995
enable stripping
996
vhook="default"
997

    
998
# build settings
999
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1000
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1001
VHOOKSHFLAGS='$(SHFLAGS)'
1002
FFSERVERLDFLAGS=-Wl,-E
1003
LIBPREF="lib"
1004
LIBSUF=".a"
1005
FULLNAME='$(NAME)$(BUILDSUF)'
1006
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1007
SLIBPREF="lib"
1008
SLIBSUF=".so"
1009
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1010
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1011
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1012
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1013

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

    
1018
# find source path
1019
source_path="`dirname \"$0\"`"
1020
enable source_path_used
1021
if test -z "$source_path" -o "$source_path" = "." ; then
1022
    source_path="`pwd`"
1023
    disable source_path_used
1024
else
1025
    source_path="`cd \"$source_path\"; pwd`"
1026
    echo "$source_path" | grep -q '[[:blank:]]' &&
1027
        die "Out of tree builds are impossible with whitespace in source path."
1028
fi
1029

    
1030
FFMPEG_CONFIGURATION="$@"
1031

    
1032
find_things(){
1033
    thing=$1
1034
    pattern=$2
1035
    file=$source_path/$3
1036
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1037
}
1038

    
1039
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1040
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1041
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1042
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1043
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1044
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1045
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1046
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1047
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1048
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1049

    
1050
enable $ARCH_EXT_LIST \
1051
       $DECODER_LIST \
1052
       $ENCODER_LIST \
1053
       $PARSER_LIST \
1054
       $BSF_LIST \
1055
       $DEMUXER_LIST \
1056
       $MUXER_LIST \
1057
       $FILTER_LIST \
1058
       $PROTOCOL_LIST \
1059
       $INDEV_LIST \
1060
       $OUTDEV_LIST \
1061

    
1062
die_unknown(){
1063
    echo "Unknown option \"$1\"."
1064
    echo "See $0 --help for available options."
1065
    exit 1
1066
}
1067

    
1068
show_list() {
1069
    suffix=_$1
1070
    shift
1071
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1072
    exit 0
1073
}
1074

    
1075
for opt do
1076
    optval="${opt#*=}"
1077
    case "$opt" in
1078
    --extra-cflags=*) add_cflags "$optval"
1079
    ;;
1080
    --extra-ldflags=*) add_ldflags "$optval"
1081
    ;;
1082
    --extra-libs=*) add_extralibs "$optval"
1083
    ;;
1084
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1085
    ;;
1086
    --enable-debug=*) debuglevel="$optval"
1087
    ;;
1088
    --enable-*=*|--disable-*=*)
1089
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1090
    case "$thing" in
1091
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1092
        *) die_unknown "$opt" ;;
1093
    esac
1094
    ;;
1095
    --enable-?*|--disable-?*)
1096
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1097
    if is_in $option $COMPONENT_LIST; then
1098
        eval $action \$$(toupper ${option%s})_LIST
1099
    elif is_in $option $CMDLINE_SELECT; then
1100
        $action $option
1101
    else
1102
        die_unknown $opt
1103
    fi
1104
    ;;
1105
    --list-*)
1106
        NAME="${opt#--list-}"
1107
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1108
        NAME=${NAME%s}
1109
        eval show_list $NAME \$$(toupper $NAME)_LIST
1110
    ;;
1111
    --help|-h) show_help
1112
    ;;
1113
    *)
1114
    optname="${opt%%=*}"
1115
    optname="${optname#--}"
1116
    optname=$(echo "$optname" | sed 's/-/_/g')
1117
    is_in $optname $CMDLINE_SET || die_unknown $opt
1118
    eval $optname='$optval'
1119
    ;;
1120
    esac
1121
done
1122

    
1123
disabled logging && logfile=/dev/null
1124

    
1125
echo "# $0 $@" > $logfile
1126
set >> $logfile
1127

    
1128
cc_default="${cross_prefix}${cc_default}"
1129
yasmexe="${cross_prefix}${yasmexe}"
1130
ar="${cross_prefix}${ar}"
1131
nm="${cross_prefix}${nm}"
1132
ranlib="${cross_prefix}${ranlib}"
1133
strip="${cross_prefix}${strip}"
1134

    
1135
set_default cc
1136

    
1137
# set temporary file name
1138
if test ! -z "$TMPDIR" ; then
1139
    TMPDIR1="${TMPDIR}"
1140
elif test ! -z "$TEMPDIR" ; then
1141
    TMPDIR1="${TEMPDIR}"
1142
else
1143
    TMPDIR1="/tmp"
1144
fi
1145

    
1146
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1147
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1148
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1149
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1150
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1151
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1152

    
1153
check_cflags -std=c99
1154

    
1155
case "$arch" in
1156
    i386|i486|i586|i686|i86pc|BePC)
1157
        arch="x86_32"
1158
        enable fast_unaligned
1159
    ;;
1160
    x86_64|amd64)
1161
        arch="x86_32"
1162
        enable fast_unaligned
1163
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1164
        int test[sizeof(char*) - 7];
1165
EOF
1166
    ;;
1167
    # armv4l is a subset of armv[567]*l
1168
    arm|armv[4567]*l)
1169
        arch="armv4l"
1170
    ;;
1171
    alpha)
1172
        arch="alpha"
1173
        enable fast_64bit
1174
    ;;
1175
    "Power Macintosh"|ppc|powerpc)
1176
        arch="powerpc"
1177
        enable fast_unaligned
1178
    ;;
1179
    ppc64)
1180
        arch="powerpc"
1181
        enable fast_64bit
1182
        enable fast_unaligned
1183
    ;;
1184
    mips|mipsel|IP*)
1185
        arch="mips"
1186
    ;;
1187
    sun4u|sparc64)
1188
        arch="sparc64"
1189
        enable fast_64bit
1190
    ;;
1191
    sparc)
1192
        arch="sparc"
1193
    ;;
1194
    sh4)
1195
        arch="sh4"
1196
    ;;
1197
    parisc)
1198
        arch="parisc"
1199
    ;;
1200
    parisc64)
1201
        arch="parisc"
1202
        enable fast_64bit
1203
    ;;
1204
    s390|s390x)
1205
        arch="s390"
1206
    ;;
1207
    m68k)
1208
        arch="m68k"
1209
    ;;
1210
    ia64)
1211
        arch="ia64"
1212
        enable fast_64bit
1213
    ;;
1214
    bfin)
1215
        arch="bfin"
1216
    ;;
1217
    *)
1218
        arch="unknown"
1219
    ;;
1220
esac
1221

    
1222
enable $arch
1223
enabled_any x86_32 x86_64 && enable x86
1224
enabled     sparc64       && enable sparc
1225

    
1226
# OS specific
1227
case $target_os in
1228
    beos|haiku|zeta)
1229
        prefix_default="$HOME/config"
1230
        # helps building libavcodec
1231
        add_cflags "-DPIC -fomit-frame-pointer"
1232
        # 3 gcc releases known for BeOS, each with ugly bugs
1233
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1234
        case "$gcc_version" in
1235
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1236
            disable mmx
1237
            ;;
1238
          *20010315*) echo "BeBits gcc"
1239
            add_cflags "-fno-expensive-optimizations"
1240
            ;;
1241
        esac
1242
        SHFLAGS=-nostart
1243
        # enable BeOS things
1244
        enable audio_beos
1245
        # no need for libm, but the inet stuff
1246
        # Check for BONE
1247
        # XXX: actually should check for NOT net_server
1248
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1249
            network_extralibs="-lbind -lsocket"
1250
        else
1251
            enable beos_netserver
1252
            network_extralibs="-lnet"
1253
        fi ;;
1254
    sunos)
1255
        FFSERVERLDFLAGS=""
1256
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1257
        network_extralibs="-lsocket -lnsl"
1258
        ;;
1259
    netbsd)
1260
        oss_demuxer_extralibs="-lossaudio"
1261
        oss_muxer_extralibs="-lossaudio"
1262
        ;;
1263
    openbsd)
1264
        disable need_memalign
1265
        LIBOBJFLAGS='$(PIC)'
1266
        SHFLAGS='-shared'
1267
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1268
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1269
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1270
        oss_demuxer_extralibs="-lossaudio"
1271
        oss_muxer_extralibs="-lossaudio"
1272
        ;;
1273
    freebsd)
1274
        disable need_memalign
1275
        ;;
1276
    bsd/os)
1277
        osextralibs="-lpoll -lgnugetopt"
1278
        strip="strip -d"
1279
        ;;
1280
    darwin)
1281
        disable need_memalign
1282
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1283
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1284
        strip="strip -x"
1285
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1286
        SLIBSUF=".dylib"
1287
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1288
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1289
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1290
        objformat="macho"
1291
        enabled x86_64 && objformat="macho64"
1292
        ;;
1293
    mingw32*)
1294
        target_os=mingw32
1295
        LIBTARGET=i386
1296
        if test $arch = x86_64; then
1297
            disable need_memalign
1298
            LIBTARGET=x64
1299
        fi
1300
        shlibdir_default="$bindir_default"
1301
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1302
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1303
        if enabled swscale; then
1304
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1305
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1306
        fi
1307
        disable ffserver
1308
        SLIBPREF=""
1309
        SLIBSUF=".dll"
1310
        EXESUF=".exe"
1311
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1312
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1313
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1314
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1315
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1316
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1317
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1318
        objformat="win32"
1319
        enable dos_paths
1320
        ;;
1321
    cygwin*)
1322
        target_os=cygwin
1323
        shlibdir_default="$bindir_default"
1324
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1325
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1326
        if enabled swscale; then
1327
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1328
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1329
        fi
1330
        EXESUF=".exe"
1331
        SLIBPREF="cyg"
1332
        SLIBSUF=".dll"
1333
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1334
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1335
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1336
        objformat="win32"
1337
        enable dos_paths
1338
        ;;
1339
    *-dos|freedos|opendos)
1340
        disable ffplay ffserver vhook
1341
        disable $INDEV_LIST $OUTDEV_LIST
1342
        network_extralibs="-lsocket"
1343
        EXESUF=".exe"
1344
        objformat="win32"
1345
        enable dos_paths
1346
        ;;
1347
    linux)
1348
        enable dv1394
1349
        ;;
1350
    irix*)
1351
        target_os=irix
1352
        ranlib="echo ignoring ranlib"
1353
        ;;
1354
    os/2*)
1355
        strip="lxlite"
1356
        ln_s="cp -f"
1357
        EXESUF=".exe"
1358
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1359
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1360
        FFSERVERLDFLAGS=""
1361
        LIBSUF="_s.a"
1362
        SLIBPREF=""
1363
        SLIBSUF=".dll"
1364
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1365
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1366
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1367
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1368
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1369
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1370
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1371
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1372
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1373
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1374
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1375
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1376
        disable vhook
1377
        enable dos_paths
1378
        ;;
1379
    interix)
1380
        disable vhook
1381
        ;;
1382

    
1383
    *)
1384
        target_os="${target_os}-UNKNOWN"
1385
        ;;
1386
esac
1387

    
1388
set_default $PATHS_LIST
1389

    
1390
add_extralibs $osextralibs
1391

    
1392
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1393
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1394

    
1395
test -n "$cross_prefix" && enable cross_compile
1396

    
1397
# we need to build at least one lib type
1398
if ! enabled_any static shared; then
1399
    cat <<EOF
1400
At least one library type must be built.
1401
Specify --enable-static to build the static libraries or --enable-shared to
1402
build the shared libraries as well. To only build the shared libraries specify
1403
--disable-static in addition to --enable-shared.
1404
EOF
1405
    exit 1;
1406
fi
1407

    
1408
disabled static && LIBNAME=""
1409

    
1410
if enabled_any libfaad libfaadbin ; then
1411
    if check_header faad.h; then
1412
        check_cc <<EOF
1413
#include <faad.h>
1414
#ifndef FAAD2_VERSION
1415
ok faad1
1416
#endif
1417
int main(void) { return 0; }
1418
EOF
1419
        test $? = 0 && enable libfaad2
1420
    else
1421
        die "FAAD test failed."
1422
    fi
1423
fi
1424

    
1425

    
1426
if ! enabled gpl; then
1427
    die_gpl_disabled(){
1428
        name=$1
1429
        shift
1430
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1431
    }
1432
    die_gpl_disabled "The Postprocessing code" postproc
1433
    die_gpl_disabled "libx264"                 libx264
1434
    die_gpl_disabled "libxvidcore"             libxvid
1435
    die_gpl_disabled "FAAD2"                   libfaad2
1436
    die_gpl_disabled "The X11 grabber"         x11grab
1437
    die_gpl_disabled "The software scaler"     swscale
1438
fi
1439

    
1440
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1441
    die "libamr is nonfree and --enable-nonfree is not specified."
1442
fi
1443

    
1444
check_deps $ARCH_EXT_LIST
1445

    
1446
test -z "$need_memalign" && need_memalign="$mmx"
1447

    
1448
#Darwin CC versions
1449
if test $target_os = darwin; then
1450
    if $cc -v 2>&1 | grep -q xlc; then
1451
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1452
    else
1453
        add_cflags "-pipe"
1454
        check_cflags "-force_cpusubtype_ALL"
1455
        check_cflags "-Wno-sign-compare"
1456
        enabled shared || check_cflags -mdynamic-no-pic
1457
    fi
1458
fi
1459

    
1460
disabled optimizations || check_cflags -fomit-frame-pointer
1461

    
1462
# Add processor-specific flags
1463
if test $cpu != "generic"; then
1464
    warn_altivec(){
1465
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1466
    }
1467
    case $cpu in
1468
        601|ppc601|PowerPC601)
1469
            add_cflags "-mcpu=601"
1470
            warn_altivec enabled PPC601
1471
        ;;
1472
        603*|ppc603*|PowerPC603*)
1473
            add_cflags "-mcpu=603"
1474
            warn_altivec enabled PPC603
1475
        ;;
1476
        604*|ppc604*|PowerPC604*)
1477
            add_cflags "-mcpu=604"
1478
            warn_altivec enabled PPC604
1479
        ;;
1480
        G3|g3|75*|ppc75*|PowerPC75*)
1481
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1482
            warn_altivec enabled PPC75x
1483
        ;;
1484
        G4|g4|745*|ppc745*|PowerPC745*)
1485
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1486
            warn_altivec disabled PPC745x
1487
        ;;
1488
        74*|ppc74*|PowerPC74*)
1489
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1490
            warn_altivec disabled PPC74xx
1491
        ;;
1492
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1493
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1494
            warn_altivec disabled PPC970
1495
            enable ppc64
1496
        ;;
1497
        Cell|CELL|cell)
1498
            add_cflags "-mcpu=cell"
1499
            warn_altivec disabled Cell
1500
            enable ppc64
1501
        ;;
1502
        # targets that do NOT support conditional mov (cmov)
1503
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1504
            add_cflags "-march=$cpu"
1505
            disable cmov
1506
        ;;
1507
        # targets that do support conditional mov (cmov)
1508
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1509
            add_cflags "-march=$cpu"
1510
            enable cmov
1511
            enable fast_cmov
1512
        ;;
1513
        # targets that do support conditional mov but on which it's slow
1514
        pentium4|pentium4m|prescott|nocona)
1515
            add_cflags "-march=$cpu"
1516
            enable cmov
1517
            disable fast_cmov
1518
        ;;
1519
        sparc64)
1520
            add_cflags "-mcpu=v9"
1521
        ;;
1522
        arm11*|cortex*)
1523
            add_cflags "-mcpu=$cpu"
1524
            enable fast_unaligned
1525
        ;;
1526
        armv*)
1527
            add_cflags "-march=$cpu"
1528
        ;;
1529
        arm*)
1530
            add_cflags "-mcpu=$cpu"
1531
        ;;
1532
        *)
1533
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1534
        ;;
1535
    esac
1536
fi
1537

    
1538
# make sure we can execute files in $TMPDIR
1539
cat > $TMPSH 2>> $logfile <<EOF
1540
#! /bin/sh
1541
EOF
1542
chmod +x $TMPSH >> $logfile 2>&1
1543
if ! $TMPSH >> $logfile 2>&1; then
1544
    cat <<EOF
1545
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1546
variable to another directory and make sure that $TMPDIR1 is not mounted
1547
noexec.
1548
EOF
1549
    die "Sanity test failed."
1550
fi
1551
rm $TMPSH
1552

    
1553
# compiler sanity check
1554
check_exec <<EOF
1555
int main(void){ return 0; }
1556
EOF
1557
if test "$?" != 0; then
1558
    echo "$cc is unable to create an executable file."
1559
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1560
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1561
        echo "Only do this if you know what cross compiling means."
1562
    fi
1563
    die "C compiler test failed."
1564
fi
1565

    
1566
check_cc <<EOF || die "Symbol mangling check failed."
1567
int ff_extern;
1568
EOF
1569
sym=$($nm -P -g $TMPO | grep ff_extern)
1570
extern_prefix=${sym%%ff_extern*}
1571

    
1572
check_asm inline_asm '""'
1573

    
1574
if enabled x86; then
1575
    # check whether EBP is available on x86
1576
    # As 'i' is stored on the stack, this program will crash
1577
    # if the base pointer is used to access it because the
1578
    # base pointer is cleared in the inline assembly code.
1579
    check_exec_crash <<EOF && enable ebp_available
1580
    volatile int i=0;
1581
    __asm__ volatile (
1582
        "xorl %%ebp, %%ebp"
1583
    ::: "%ebp");
1584
    return i;
1585
EOF
1586

    
1587
    # check wether EBX is available on x86
1588
    check_asm ebx_available '"":::"%ebx"'
1589

    
1590
    # check whether binutils is new enough to compile SSSE3/MMX2
1591
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1592
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1593

    
1594
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1595

    
1596
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1597
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1598
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1599
    case "$objformat" in
1600
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1601
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1602
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1603
    esac
1604
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1605
fi
1606

    
1607
# check for assembler specific support
1608

    
1609
if test $arch = "powerpc"; then
1610
    check_asm dcbzl '"dcbzl 0, 1"'
1611
fi
1612

    
1613
# check for SIMD availability
1614

    
1615
# AltiVec flags: The FSF version of GCC differs from the Apple version
1616
if enabled altivec; then
1617
    check_cflags -maltivec -mabi=altivec &&
1618
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1619
        check_cflags -faltivec
1620

    
1621
    # check if our compiler supports Motorola AltiVec C API
1622
    check_cc <<EOF || disable altivec
1623
$inc_altivec_h
1624
int main(void) {
1625
    vector signed int v1, v2, v3;
1626
    v1 = vec_add(v2,v3);
1627
    return 0;
1628
}
1629
EOF
1630

    
1631
    # check if our compiler supports braces for vector declarations
1632
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1633
$inc_altivec_h
1634
int main (void) { (vector int) {1}; return 0; }
1635
EOF
1636
fi
1637

    
1638
# We have to check if pld is a nop and disable it.
1639
enabled armv4l  && check_asm pld     '"pld [r0]"'
1640
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1641
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1642
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1643
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1644
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1645
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1646
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1647

    
1648
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1649

    
1650
# ---
1651
# big/little-endian test
1652
check_cc <<EOF || die "endian test failed"
1653
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1654
EOF
1655
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1656

    
1657
# ---
1658
# check availability of some header files
1659

    
1660
if check_func dlopen; then
1661
    ldl=
1662
elif check_func dlopen -ldl; then
1663
    ldl=-ldl
1664
fi
1665

    
1666
check_func  fork
1667
check_func  gethrtime
1668
check_func  getrusage
1669
check_func  inet_aton $network_extralibs
1670
check_func  memalign
1671
check_func  mkstemp
1672
check_func_headers windows.h GetProcessTimes
1673

    
1674
check_header conio.h
1675
check_header dlfcn.h
1676
check_header malloc.h
1677
check_header poll.h
1678
check_header sys/mman.h
1679
check_header sys/resource.h
1680
check_header sys/select.h
1681
check_header termios.h
1682

    
1683
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1684
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1685
fi
1686

    
1687
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1688
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1689

    
1690
# check for some common methods of building with pthread support
1691
# do this before the optional library checks as some of them require pthreads
1692
if enabled pthreads; then
1693
    if check_func pthread_create; then
1694
        :
1695
    elif check_func pthread_create -pthread; then
1696
        add_cflags -pthread
1697
        add_extralibs -pthread
1698
    elif check_func pthread_create -pthreads; then
1699
        add_cflags -pthreads
1700
        add_extralibs -pthreads
1701
    elif check_func pthread_create -lpthreadGC2; then
1702
        add_extralibs -lpthreadGC2
1703
    elif ! check_lib pthread.h pthread_create -lpthread; then
1704
        die "ERROR: can't find pthreads library"
1705
    fi
1706
fi
1707

    
1708
for thread in $THREADS_LIST; do
1709
    if enabled $thread; then
1710
        test -n "$thread_type" &&
1711
            die "ERROR: Only one thread type must be selected." ||
1712
            thread_type="$thread"
1713
    fi
1714
done
1715

    
1716
check_lib math.h sin -lm
1717

    
1718
# test for C99 functions in math.h
1719
for func in llrint lrint lrintf round roundf; do
1720
    check_exec <<EOF && enable $func || disable $func
1721
#include <math.h>
1722
int main(void) { return ($func(3.999f) > 0)?0:1; }
1723
EOF
1724
done
1725

    
1726
# these are off by default, so fail if requested and not available
1727
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1728
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1729
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1730
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1731
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1732
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1733
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1734
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1735
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1736
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1737
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1738
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1739
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1740
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1741
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1742
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1743
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1744
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1745
                        die "ERROR: libx264 version must be >= 0.65."; }
1746
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1747
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1748

    
1749
# libdc1394 check
1750
if enabled libdc1394; then
1751
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1752
        enable libdc1394_2; } ||
1753
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1754
        enable libdc1394_1; } ||
1755
    die "ERROR: No version of libdc1394 found "
1756
fi
1757

    
1758

    
1759
_restrict=
1760
for restrict_keyword in restrict __restrict__ __restrict; do
1761
    check_cc <<EOF && _restrict=$restrict_keyword && break
1762
void foo(char * $restrict_keyword p);
1763
EOF
1764
done
1765

    
1766
test "$vhook" = "default" && vhook="$dlopen"
1767

    
1768
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1769
    disable vhook
1770
    echo
1771
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1772
    echo "Patches welcome."
1773
    echo
1774
fi
1775

    
1776
if enabled vhook; then
1777
    check_ldflags -rdynamic
1778
    check_ldflags -export-dynamic
1779
fi
1780

    
1781
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1782
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1783

    
1784
##########################################
1785
# SDL check
1786

    
1787
disable sdl_too_old
1788
disable sdl
1789
SDL_CONFIG="${cross_prefix}sdl-config"
1790
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1791
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1792
    temp_cflags $sdl_cflags
1793
    temp_extralibs `"${SDL_CONFIG}" --libs`
1794
    if check_lib2 SDL.h SDL_Init; then
1795
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1796
        if test "$_sdlversion" -lt 121 ; then
1797
            enable sdl_too_old
1798
        else
1799
            enable sdl
1800
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1801
#include <SDL.h>
1802
int main(int argc, char **argv){
1803
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1804
    int w = vi->current_w;
1805
    return 0;
1806
}
1807
EOF
1808
        fi
1809
    fi
1810
    restore_flags
1811
fi
1812

    
1813
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1814

    
1815
##########################################
1816
# Network check
1817

    
1818
if enabled network; then
1819
    check_type sys/socket.h socklen_t
1820
    # Prefer arpa/inet.h over winsock2
1821
    if check_header arpa/inet.h ; then
1822
        check_func closesocket
1823
    elif check_header winsock2.h ; then
1824
        network_extralibs="-lws2_32"
1825
        check_type ws2tcpip.h socklen_t
1826
        check_func_headers winsock2.h closesocket
1827
    fi
1828
fi
1829

    
1830
##########################################
1831
# IPv6 check
1832

    
1833
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1834
#include <sys/types.h>
1835
#include <sys/socket.h>
1836
#include <netinet/in.h>
1837
#include <netdb.h>
1838
int main(void) {
1839
    struct sockaddr_storage saddr;
1840
    struct ipv6_mreq mreq6;
1841
    getaddrinfo(0,0,0,0);
1842
    getnameinfo(0,0,0,0,0,0,0);
1843
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1844
}
1845
EOF
1846

    
1847
check_header linux/videodev.h
1848
check_header linux/videodev2.h
1849
check_header sys/videoio.h
1850

    
1851
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1852

    
1853
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1854
{ check_header dev/bktr/ioctl_meteor.h &&
1855
  check_header dev/bktr/ioctl_bt848.h; } ||
1856
{ check_header machine/ioctl_meteor.h &&
1857
  check_header machine/ioctl_bt848.h; } ||
1858
{ check_header dev/video/meteor/ioctl_meteor.h &&
1859
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1860
check_header dev/ic/bt8xx.h
1861

    
1862
check_header sys/soundcard.h
1863
check_header soundcard.h
1864

    
1865
# deal with the X11 frame grabber
1866
enabled x11grab                         &&
1867
check_header X11/Xlib.h                 &&
1868
check_header X11/extensions/XShm.h      &&
1869
check_func XOpenDisplay -lX11           &&
1870
check_func XShmCreateImage -lX11 -lXext
1871

    
1872
enabled debug && add_cflags -g"$debuglevel"
1873

    
1874
# add some useful compiler flags if supported
1875
check_cflags -Wdeclaration-after-statement
1876
check_cflags -Wall
1877
check_cflags -Wno-switch
1878
check_cflags -Wdisabled-optimization
1879
check_cflags -Wpointer-arith
1880
check_cflags -Wredundant-decls
1881
check_cflags -Wno-pointer-sign
1882
check_cflags -Wcast-qual
1883
check_cflags -Wwrite-strings
1884
check_cflags -Wtype-limits
1885
enabled extra_warnings && check_cflags -Winline
1886

    
1887
# add some linker flags
1888
check_ldflags -Wl,--warn-common
1889
check_ldflags -Wl,--as-needed
1890
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'
1891
check_ldflags -Wl,-Bsymbolic
1892

    
1893
if enabled small; then
1894
    check_cflags -Os            # not all compilers support -Os
1895
    optimizations="small"
1896
elif enabled optimizations; then
1897
    if $cc -v 2>&1 | grep -q xlc; then
1898
        add_cflags  "-O5"
1899
        add_ldflags "-O5"
1900
    else
1901
        add_cflags "-O3"
1902
    fi
1903
fi
1904
check_cflags -fno-math-errno
1905
check_cflags -fno-signed-zeros
1906

    
1907
# add some flags for Intel C Compiler
1908
if $cc --version 2> /dev/null | grep -q Intel; then
1909
  # Just warnings, no remarks
1910
  check_cflags -w1
1911
  # -wd: Disable following warnings
1912
  # 144, 167, 556: -Wno-pointer-sign
1913
  # 10006: ignoring unknown option -fno-signed-zeros
1914
  # 10156: ignoring option '-W'; no argument required
1915
  check_cflags -wd144,167,556,10006,10156
1916
  # 11030: Warning unknown option --as-needed
1917
  # 10156: ignoring option '-export'; no argument required
1918
  check_ldflags -wd10156,11030
1919
  # Allow to compile with optimizations
1920
  check_ldflags -march=$cpu
1921
fi
1922

    
1923
# PIC flags for shared library objects where they are needed
1924
if enabled shared; then
1925
    # LIBOBJFLAGS may have already been set in the OS configuration
1926
    if test -z "$LIBOBJFLAGS" ; then
1927
        case "$arch" in
1928
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1929
        esac
1930
    fi
1931
fi
1932

    
1933
if enabled gprof; then
1934
    add_cflags  "-p"
1935
    add_ldflags "-p"
1936
fi
1937

    
1938
VHOOKCFLAGS="-fPIC"
1939

    
1940
# Find out if the .align argument is a power of two or not.
1941
if test $asmalign_pot = "unknown"; then
1942
    disable asmalign_pot
1943
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
1944
fi
1945

    
1946
enabled_any $DECODER_LIST      && enable decoders
1947
enabled_any $ENCODER_LIST      && enable encoders
1948
enabled_any $BSF_LIST          && enable bsfs
1949
enabled_any $DEMUXER_LIST      && enable demuxers
1950
enabled_any $MUXER_LIST        && enable muxers
1951
enabled_any $FILTER_LIST       && enable filters
1952
enabled_any $INDEV_LIST        && enable demuxers
1953
enabled_any $OUTDEV_LIST       && enable muxers
1954
enabled_any $PROTOCOL_LIST     && enable protocols
1955

    
1956
enabled_any $THREADS_LIST      && enable threads
1957

    
1958
check_deps $CONFIG_LIST       \
1959
           $HAVE_LIST         \
1960
           $DECODER_LIST      \
1961
           $ENCODER_LIST      \
1962
           $PARSER_LIST       \
1963
           $BSF_LIST          \
1964
           $DEMUXER_LIST      \
1965
           $MUXER_LIST        \
1966
           $FILTER_LIST       \
1967
           $INDEV_LIST        \
1968
           $OUTDEV_LIST       \
1969
           $PROTOCOL_LIST     \
1970

    
1971
enabled libdc1394 && append pkg_requires "libraw1394"
1972
enabled libdirac  && append pkg_requires "dirac"
1973
enabled libtheora && append pkg_requires "theora"
1974
enabled libvorbis && append pkg_requires "vorbisenc"
1975

    
1976
echo "install prefix            $prefix"
1977
echo "source path               $source_path"
1978
echo "C compiler                $cc"
1979
echo ".align is power-of-two    $asmalign_pot"
1980
echo "ARCH                      $arch ($cpu)"
1981
if test "$build_suffix" != ""; then
1982
    echo "build suffix              $build_suffix"
1983
fi
1984
if test "$extra_version" != ""; then
1985
    echo "version string suffix     $extra_version"
1986
fi
1987
echo "big-endian                ${bigendian-no}"
1988
if test $arch = "x86_32" -o $arch = "x86_64"; then
1989
    echo "yasm                      ${yasm-no}"
1990
    echo "MMX enabled               ${mmx-no}"
1991
    echo "CMOV enabled              ${cmov-no}"
1992
    echo "CMOV is fast              ${fast_cmov-no}"
1993
    echo "EBX available             ${ebx_available-no}"
1994
    echo "EBP available             ${ebp_available-no}"
1995
fi
1996
if test $arch = "armv4l"; then
1997
    echo "ARMv5TE enabled           ${armv5te-no}"
1998
    echo "ARMv6 enabled             ${armv6-no}"
1999
    echo "ARM VFP enabled           ${armvfp-no}"
2000
    echo "IWMMXT enabled            ${iwmmxt-no}"
2001
    echo "NEON enabled              ${neon-no}"
2002
fi
2003
if test $arch = "mips"; then
2004
    echo "MMI enabled               ${mmi-no}"
2005
fi
2006
if test $arch = "powerpc"; then
2007
    echo "AltiVec enabled           ${altivec-no}"
2008
    echo "dcbzl available           ${dcbzl-no}"
2009
fi
2010
echo "gprof enabled             ${gprof-no}"
2011
echo "debug symbols             ${debug-no}"
2012
echo "strip symbols             ${stripping-no}"
2013
echo "optimizations             ${optimizations-no}"
2014
echo "static                    ${static-no}"
2015
echo "shared                    ${shared-no}"
2016
echo "postprocessing support    ${postproc-no}"
2017
echo "software scaler enabled   ${swscale-no}"
2018
echo "new filter support        ${avfilter-no}"
2019
echo "filters using lavformat   ${avfilter_lavf-no}"
2020
echo "video hooking             ${vhook-no}"
2021
if enabled vhook; then
2022
    echo "Imlib2 support            ${imlib2-no}"
2023
    echo "FreeType support          ${freetype2-no}"
2024
fi
2025
echo "network support           ${network-no}"
2026
if enabled network; then
2027
    echo "IPv6 support              ${ipv6-no}"
2028
fi
2029
echo "threading support         ${thread_type-no}"
2030
echo "SDL support               ${sdl-no}"
2031
if enabled sdl_too_old; then
2032
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2033
fi
2034
echo "Sun medialib support      ${mlib-no}"
2035
echo "AVISynth enabled          ${avisynth-no}"
2036
echo "libamr-nb support         ${libamr_nb-no}"
2037
echo "libamr-wb support         ${libamr_wb-no}"
2038
echo "libdc1394 support         ${libdc1394-no}"
2039
echo "libdirac enabled          ${libdirac-no}"
2040
echo "libfaac enabled           ${libfaac-no}"
2041
echo "libfaad enabled           ${libfaad-no}"
2042
echo "libfaad dlopened          ${libfaadbin-no}"
2043
echo "libgsm enabled            ${libgsm-no}"
2044
echo "libmp3lame enabled        ${libmp3lame-no}"
2045
echo "libnut enabled            ${libnut-no}"
2046
echo "libschroedinger enabled   ${libschroedinger-no}"
2047
echo "libspeex enabled          ${libspeex-no}"
2048
echo "libtheora enabled         ${libtheora-no}"
2049
echo "libvorbis enabled         ${libvorbis-no}"
2050
echo "libx264 enabled           ${libx264-no}"
2051
echo "libxvid enabled           ${libxvid-no}"
2052
echo "zlib enabled              ${zlib-no}"
2053
echo "bzlib enabled             ${bzlib-no}"
2054
echo
2055

    
2056
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2057
    echo "Enabled ${type}s:"
2058
    eval list=\$$(toupper $type)_LIST
2059
    for part in $list; do
2060
        enabled $part && echo ${part%_*}
2061
    done | sort | pr -3 -t
2062
    echo
2063
done
2064

    
2065
license="LGPL"
2066
if enabled nonfree; then
2067
    license="unredistributable"
2068
elif enabled gpl; then
2069
    license="GPL"
2070
fi
2071

    
2072
echo "License: $license"
2073

    
2074
echo "Creating config.mak and config.h..."
2075

    
2076
echo "# Automatically generated by configure - do not modify!" > config.mak
2077
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2078
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2079
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2080
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2081

    
2082
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2083
echo "prefix=$prefix" >> config.mak
2084
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2085
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2086
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2087
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2088
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2089
echo "CC=$cc" >> config.mak
2090
echo "YASM=$yasmexe" >> config.mak
2091
echo "AR=$ar" >> config.mak
2092
echo "RANLIB=$ranlib" >> config.mak
2093
echo "LN_S=$ln_s" >> config.mak
2094
enabled stripping &&
2095
    echo "STRIP=$strip" >> config.mak ||
2096
    echo "STRIP=echo ignoring strip" >> config.mak
2097

    
2098
echo "OPTFLAGS=$CFLAGS" >> config.mak
2099
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2100
echo "LDFLAGS=$LDFLAGS" >> config.mak
2101
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2102
echo "SHFLAGS=$SHFLAGS" >> config.mak
2103
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2104
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2105
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2106
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2107
echo "BUILD_STATIC=$static" >> config.mak
2108
echo "BUILDSUF=$build_suffix" >> config.mak
2109
echo "FULLNAME=$FULLNAME" >> config.mak
2110
echo "LIBPREF=$LIBPREF" >> config.mak
2111
echo "LIBSUF=$LIBSUF" >> config.mak
2112
echo "LIBNAME=$LIBNAME" >> config.mak
2113
echo "SLIBPREF=$SLIBPREF" >> config.mak
2114
echo "SLIBSUF=$SLIBSUF" >> config.mak
2115
echo "EXESUF=$EXESUF" >> config.mak
2116
echo "EXTRA_VERSION=$extra_version" >> config.mak
2117
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2118

    
2119
if enabled bigendian; then
2120
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2121
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2122
fi
2123

    
2124
if enabled sdl; then
2125
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2126
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2127
fi
2128
if enabled texi2html; then
2129
    echo "BUILD_DOC=yes" >> config.mak
2130
fi
2131

    
2132
get_version(){
2133
    name=$1
2134
    file=$source_path/$2
2135
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2136
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2137
    lcname=$(tolower $name)
2138
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2139
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2140
}
2141

    
2142
get_version LIBSWSCALE  libswscale/swscale.h
2143
get_version LIBPOSTPROC libpostproc/postprocess.h
2144
get_version LIBAVCODEC  libavcodec/avcodec.h
2145
get_version LIBAVDEVICE libavdevice/avdevice.h
2146
get_version LIBAVFORMAT libavformat/avformat.h
2147
get_version LIBAVUTIL   libavutil/avutil.h
2148
get_version LIBAVFILTER libavfilter/avfilter.h
2149

    
2150
if enabled shared; then
2151
    echo "BUILD_SHARED=yes" >> config.mak
2152
    echo "PIC=-fPIC -DPIC" >> config.mak
2153
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2154
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2155
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2156
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2157
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2158
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2159
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2160
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2161
fi
2162
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2163
echo "EXTRALIBS=$extralibs" >> config.mak
2164

    
2165
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2166
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2167
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2168
                                      $DECODER_LIST      \
2169
                                      $ENCODER_LIST      \
2170
                                      $PARSER_LIST       \
2171
                                      $BSF_LIST          \
2172
                                      $DEMUXER_LIST      \
2173
                                      $MUXER_LIST        \
2174
                                      $FILTER_LIST       \
2175
                                      $PROTOCOL_LIST     \
2176
                                      $INDEV_LIST        \
2177
                                      $OUTDEV_LIST       \
2178

    
2179
echo "#define restrict $_restrict" >> $TMPH
2180

    
2181
if enabled small; then
2182
    echo "#define av_always_inline"  >> $TMPH
2183
fi
2184

    
2185
echo "SRC_PATH=\"$source_path\"" >> config.mak
2186
echo "SRC_PATH_BARE=$source_path" >> config.mak
2187
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2188

    
2189
# Apparently it's not possible to portably echo a backslash.
2190
enabled asmalign_pot &&
2191
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2192
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2193

    
2194
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2195

    
2196
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2197

    
2198
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2199
cmp -s $TMPH config.h &&
2200
    echo "config.h is unchanged" ||
2201
    mv -f $TMPH config.h
2202

    
2203
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2204

    
2205
# build tree in object directory if source path is different from current one
2206
if enabled source_path_used; then
2207
    DIRS="\
2208
        doc               \
2209
        libavcodec        \
2210
        libavcodec/alpha  \
2211
        libavcodec/armv4l \
2212
        libavcodec/bfin   \
2213
        libavcodec/i386   \
2214
        libavcodec/mlib   \
2215
        libavcodec/ppc    \
2216
        libavcodec/sh4    \
2217
        libavcodec/sparc  \
2218
        libavdevice       \
2219
        libavfilter       \
2220
        libavformat       \
2221
        libavutil         \
2222
        libpostproc       \
2223
        libswscale        \
2224
        tests             \
2225
        tools             \
2226
        vhook             \
2227
        "
2228
    FILES="\
2229
        Makefile             \
2230
        common.mak           \
2231
        subdir.mak           \
2232
        doc/texi2pod.pl      \
2233
        libavcodec/Makefile  \
2234
        libavdevice/Makefile \
2235
        libavfilter/Makefile \
2236
        libavformat/Makefile \
2237
        libavutil/Makefile   \
2238
        libpostproc/Makefile \
2239
        libswscale/Makefile  \
2240
        "
2241
    for dir in $DIRS ; do
2242
        mkdir -p $dir
2243
    done
2244
    for f in $FILES ; do
2245
        $ln_s "$source_path/$f" $f
2246
    done
2247
fi
2248

    
2249

    
2250
# build pkg-config files
2251

    
2252
pkgconfig_generate(){
2253
name=$1
2254
shortname=${name#lib}
2255
comment=$2
2256
version=$3
2257
libs=$4
2258
requires=$5
2259
cat <<EOF > $name/$name.pc
2260
prefix=$prefix
2261
exec_prefix=\${prefix}
2262
libdir=$libdir
2263
includedir=$incdir
2264

    
2265
Name: $name
2266
Description: $comment
2267
Version: $version
2268
Requires: $(disabled shared && echo $requires)
2269
Requires.private: $(enabled shared && echo $requires)
2270
Conflicts:
2271
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2272
Libs.private: $(enabled shared && echo $libs)
2273
Cflags: -I\${includedir}
2274
EOF
2275
cat <<EOF > $name/$name-uninstalled.pc
2276
prefix=
2277
exec_prefix=
2278
libdir=\${pcfiledir}
2279
includedir=${source_path}
2280

    
2281
Name: $name
2282
Description: $comment
2283
Version: $version
2284
Requires: $requires
2285
Conflicts:
2286
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2287
Cflags: -I\${includedir}
2288
EOF
2289
}
2290

    
2291
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2292
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2293
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2294
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2295
enabled avfilter &&
2296
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2297
enabled postproc &&
2298
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2299
if enabled swscale; then
2300
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2301
else
2302
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2303
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2304
fi