Statistics
| Branch: | Revision:

ffmpeg / configure @ cc181b41

History | View | Annotate | Download (66.5 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-libtheora       enable Theora encoding via libtheora [default=no]"
106
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
107
  echo "                           native implementation exists [default=no]"
108
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
109
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
110
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
111
  echo ""
112
  echo "Advanced options (experts only):"
113
  echo "  --source-path=PATH       path to source code [$source_path]"
114
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
115
  echo "  --enable-cross-compile   assume a cross-compiler is used"
116
  echo "  --target-os=OS           compiler targets OS [$target_os]"
117
  echo "  --cc=CC                  use C compiler CC [$cc]"
118
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
119
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
120
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
121
  echo "  --extra-version=STRING   version string suffix []"
122
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
123
  echo "  --arch=ARCH              select architecture  [$arch]"
124
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
125
  echo "                           instruction selection, may crash on older CPUs)"
126
  echo "  --enable-powerpc-perf    enable performance report on PPC"
127
  echo "                           (requires enabling PMC)"
128
  echo "  --disable-mmx            disable MMX usage"
129
  echo "  --disable-mmx2           disable MMX2 usage"
130
  echo "  --disable-ssse3          disable SSSE3 usage"
131
  echo "  --disable-armv5te        disable armv5te usage"
132
  echo "  --disable-armv6          disable armv6 usage"
133
  echo "  --disable-armvfp         disable ARM VFP usage"
134
  echo "  --disable-iwmmxt         disable iwmmxt usage"
135
  echo "  --disable-altivec        disable AltiVec usage"
136
  echo "  --disable-network        disable network support [default=no]"
137
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
138
  echo "  --disable-zlib           disable zlib [default=no]"
139
  echo "  --disable-bzlib          disable bzlib [default=no]"
140
  echo "  --disable-vhook          disable video hooking support"
141
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
142
  echo "                           MPEG audio decoding [default=no]"
143
  echo "  --enable-gray            enable full grayscale support (slower color)"
144
  echo "  --disable-ffmpeg         disable ffmpeg build"
145
  echo "  --disable-ffserver       disable ffserver build"
146
  echo "  --disable-ffplay         disable ffplay build"
147
  echo "  --enable-small           optimize for size instead of speed"
148
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
149
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
150
  echo "  --disable-encoder=NAME   disables encoder NAME"
151
  echo "  --enable-encoder=NAME    enables encoder NAME"
152
  echo "  --disable-decoder=NAME   disables decoder NAME"
153
  echo "  --enable-decoder=NAME    enables decoder NAME"
154
  echo "  --disable-encoders       disables all encoders"
155
  echo "  --disable-decoders       disables all decoders"
156
  echo "  --disable-muxer=NAME     disables muxer NAME"
157
  echo "  --enable-muxer=NAME      enables muxer NAME"
158
  echo "  --disable-muxers         disables all muxers"
159
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
160
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
161
  echo "  --disable-demuxers       disables all demuxers"
162
  echo "  --enable-parser=NAME     enables parser NAME"
163
  echo "  --disable-parser=NAME    disables parser NAME"
164
  echo "  --disable-parsers        disables all parsers"
165
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
166
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
167
  echo "  --disable-bsfs           disables all bitstream filters"
168
  echo "  --enable-protocol=NAME   enables protocol NAME"
169
  echo "  --disable-protocol=NAME  disables protocol NAME"
170
  echo "  --disable-protocols      disables all protocols"
171
  echo "  --disable-devices        disables all devices"
172
  echo "  --enable-filter=NAME     enables filter NAME"
173
  echo "  --disable-filter=NAME    disables filter NAME"
174
  echo "  --disable-filters        disables all filters"
175
  echo "  --list-decoders          show all available decoders"
176
  echo "  --list-encoders          show all available encoders"
177
  echo "  --list-muxers            show all available muxers"
178
  echo "  --list-demuxers          show all available demuxers"
179
  echo "  --list-parsers           show all available parsers"
180
  echo "  --list-protocols         show all available protocols"
181
  echo "  --list-bsfs              show all available bitstream filters"
182
  echo "  --list-indevs            show all available input devices"
183
  echo "  --list-outdevs           show all available output devices"
184
  echo "  --list-filters           show all available filters"
185
  echo
186
  echo "Developer options (useful when working on FFmpeg itself):"
187
  echo "  --disable-debug          disable debugging symbols"
188
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
189
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
190
  echo "  --disable-optimizations  disable compiler optimizations"
191
  echo "  --enable-extra-warnings  enable more compiler warnings"
192
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
193
  echo ""
194
  echo "NOTE: Object files are built at the place where configure is launched."
195
  exit 0
196
}
197

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
335
        eval dep_all="\$${cfg}_deps"
336
        eval dep_any="\$${cfg}_deps_any"
337

    
338
        pushvar cfg dep_all dep_any
339
        check_deps $dep_all $dep_any
340
        popvar cfg dep_all dep_any
341

    
342
        enabled_all $dep_all || disable $cfg
343
        enabled_any $dep_any || disable $cfg
344

    
345
        if enabled $cfg; then
346
            eval dep_extralibs="\$${cfg}_extralibs"
347
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
348
        fi
349

    
350
        disable ${cfg}_checking
351
    done
352
}
353

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

    
371
flags_saved(){
372
    (: ${SAVE_CFLAGS?}) 2> /dev/null
373
}
374

    
375
save_flags(){
376
    flags_saved && return
377
    SAVE_CFLAGS="$CFLAGS"
378
    SAVE_LDFLAGS="$LDFLAGS"
379
    SAVE_extralibs="$extralibs"
380
}
381

    
382
restore_flags(){
383
    flags_saved || return
384
    CFLAGS="$SAVE_CFLAGS"
385
    LDFLAGS="$SAVE_LDFLAGS"
386
    extralibs="$SAVE_extralibs"
387
    unset SAVE_CFLAGS
388
    unset SAVE_LDFLAGS
389
    unset SAVE_extralibs
390
}
391

    
392
temp_cflags(){
393
    save_flags
394
    CFLAGS="$CFLAGS $*"
395
}
396

    
397
temp_ldflags(){
398
    save_flags
399
    LDFLAGS="$LDFLAGS $*"
400
}
401

    
402
temp_extralibs(){
403
    save_flags
404
    extralibs="$extralibs $*"
405
}
406

    
407
append(){
408
    var=$1
409
    shift
410
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
411
    eval "$var=\"\$$var $*\""
412
}
413

    
414
add_cflags(){
415
    append CFLAGS "$@"
416
}
417

    
418
add_ldflags(){
419
    append LDFLAGS "$@"
420
}
421

    
422
add_extralibs(){
423
    append extralibs "$@"
424
}
425

    
426
check_cmd(){
427
    log "$@"
428
    "$@" >> $logfile 2>&1
429
}
430

    
431
check_cc(){
432
    log check_cc "$@"
433
    cat > $TMPC
434
    log_file $TMPC
435
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
436
}
437

    
438
check_cpp(){
439
    log check_cpp "$@"
440
    cat > $TMPC
441
    log_file $TMPC
442
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
443
}
444

    
445
check_asm(){
446
    log check_asm "$@"
447
    name="$1"
448
    asm="$2"
449
    shift 2
450
    check_cc "$@" <<EOF && enable $name || disable $name
451
int foo(void){ __asm__ volatile($asm); }
452
EOF
453
}
454

    
455
check_yasm(){
456
    log check_yasm "$@"
457
    echo "$1" > $TMPS
458
    log_file $TMPS
459
    shift 1
460
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
461
}
462

    
463
check_ld(){
464
    log check_ld "$@"
465
    check_cc || return
466
    flags=''
467
    libs=''
468
    for f; do
469
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
470
    done
471
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
472
}
473

    
474
check_cflags(){
475
    log check_cflags "$@"
476
    check_cc "$@" <<EOF && add_cflags "$@"
477
int x;
478
EOF
479
}
480

    
481
check_ldflags(){
482
    log check_ldflags "$@"
483
    check_ld "$@" <<EOF && add_ldflags "$@"
484
int main(void){ return 0; }
485
EOF
486
}
487

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

    
500
check_func(){
501
    log check_func "$@"
502
    func=$1
503
    shift
504
    disable $func
505
    check_ld "$@" <<EOF && enable $func
506
extern int $func();
507
int main(void){ $func(); }
508
EOF
509
}
510

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

    
531
check_cpp_condition(){
532
    log check_cpp_condition "$@"
533
    header=$1
534
    condition=$2
535
    check_cpp <<EOF
536
#include <$header>
537
#if !($condition)
538
#error "unsatisfied condition: $condition"
539
#endif
540
EOF
541
}
542

    
543
check_lib(){
544
    log check_lib "$@"
545
    header="$1"
546
    func="$2"
547
    shift 2
548
    temp_extralibs "$@"
549
    check_header $header && check_func $func && add_extralibs "$@"
550
    err=$?
551
    restore_flags
552
    return $err
553
}
554

    
555
check_lib2(){
556
    log check_lib2 "$@"
557
    headers="$1"
558
    func="$2"
559
    shift 2
560
    temp_extralibs "$@"
561
    check_func_headers "$headers" $func && add_extralibs "$@"
562
    err=$?
563
    restore_flags
564
    return $err
565
}
566

    
567
check_exec(){
568
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
569
}
570

    
571
check_exec_crash(){
572
    code=`cat`
573

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

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

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

    
614
require(){
615
    name="$1"
616
    header="$2"
617
    func="$3"
618
    shift 3
619
    check_lib $header $func "$@" || die "ERROR: $name not found"
620
}
621

    
622
require2(){
623
    name="$1"
624
    headers="$2"
625
    func="$3"
626
    shift 3
627
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
628
}
629

    
630
require_cpp_condition(){
631
    name="$1"
632
    header="$2"
633
    cpp_condition="$3"
634
    shift 3
635
    check_cpp_condition $header "$cpp_condition" || die "ERROR: $name does not satisfy CPP condition: $cpp_condition"
636
}
637

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

    
655
apply(){
656
    file=$1
657
    shift
658
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
659
}
660

    
661
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
662
# system-dependent things.
663

    
664
COMPONENT_LIST="
665
    bsfs
666
    decoders
667
    demuxers
668
    encoders
669
    filters
670
    indevs
671
    muxers
672
    outdevs
673
    parsers
674
    protocols
675
"
676

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

    
721
THREADS_LIST='
722
    beosthreads
723
    os2threads
724
    pthreads
725
    w32threads
726
'
727

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

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

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

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

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

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

    
857
# code dependency declarations
858

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

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

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

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

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

    
941
# filters
942
movie_filter_deps="avfilter_lavf"
943

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

    
950

    
951
# default parameters
952

    
953
logfile="config.err"
954

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

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

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

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

    
981
# libraries
982
enable bzlib
983
enable zlib
984

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

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

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

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

    
1031
FFMPEG_CONFIGURATION="$@"
1032

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

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

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

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

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

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

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

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

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

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

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

    
1152
check_cflags -std=c99
1153

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

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

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

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

    
1387
set_default $PATHS_LIST
1388

    
1389
add_extralibs $osextralibs
1390

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

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

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

    
1407
disabled static && LIBNAME=""
1408

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

    
1424

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

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

    
1443
check_deps $ARCH_EXT_LIST
1444

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

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

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

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

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

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

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

    
1568
check_asm inline_asm '""'
1569

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

    
1583
    # check wether EBX is available on x86
1584
    check_asm ebx_available '"":::"%ebx"'
1585

    
1586
    # check whether binutils is new enough to compile SSSE3/MMX2
1587
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1588
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1589

    
1590
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1591

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

    
1603
# check for assembler specific support
1604

    
1605
if test $arch = "powerpc"; then
1606
    check_asm dcbzl '"dcbzl 0, 1"'
1607
fi
1608

    
1609
# check for SIMD availability
1610

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

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

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

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

    
1644
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1645

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

    
1653
# ---
1654
# check availability of some header files
1655

    
1656
if check_func dlopen; then
1657
    ldl=
1658
elif check_func dlopen -ldl; then
1659
    ldl=-ldl
1660
fi
1661

    
1662
check_func  fork
1663
check_func  gethrtime
1664
check_func  getrusage
1665
check_func  inet_aton $network_extralibs
1666
check_func  memalign
1667
check_func  mkstemp
1668
check_func_headers windows.h GetProcessTimes
1669

    
1670
check_header conio.h
1671
check_header dlfcn.h
1672
check_header malloc.h
1673
check_header poll.h
1674
check_header sys/mman.h
1675
check_header sys/resource.h
1676
check_header sys/select.h
1677
check_header termios.h
1678

    
1679
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1680
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1681
fi
1682

    
1683
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1684
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1685

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

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

    
1712
check_lib math.h sin -lm
1713

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

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

    
1744
# libdc1394 check
1745
if enabled libdc1394; then
1746
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1747
        enable libdc1394_2; } ||
1748
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1749
        enable libdc1394_1; } ||
1750
    die "ERROR: No version of libdc1394 found "
1751
fi
1752

    
1753

    
1754
_restrict=
1755
for restrict_keyword in restrict __restrict__ __restrict; do
1756
    check_cc <<EOF && _restrict=$restrict_keyword && break
1757
void foo(char * $restrict_keyword p);
1758
EOF
1759
done
1760

    
1761
test "$vhook" = "default" && vhook="$dlopen"
1762

    
1763
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1764
    disable vhook
1765
    echo
1766
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1767
    echo "Patches welcome."
1768
    echo
1769
fi
1770

    
1771
if enabled vhook; then
1772
    check_ldflags -rdynamic
1773
    check_ldflags -export-dynamic
1774
fi
1775

    
1776
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1777
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1778

    
1779
##########################################
1780
# SDL check
1781

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

    
1808
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1809

    
1810
##########################################
1811
# Network check
1812

    
1813
if enabled network; then
1814
    check_type sys/socket.h socklen_t
1815
    # Prefer arpa/inet.h over winsock2
1816
    if check_header arpa/inet.h ; then
1817
        check_func closesocket
1818
    elif check_header winsock2.h ; then
1819
        network_extralibs="-lws2_32"
1820
        check_type ws2tcpip.h socklen_t
1821
        check_func_headers winsock2.h closesocket
1822
    fi
1823
fi
1824

    
1825
##########################################
1826
# IPv6 check
1827

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

    
1842
check_header linux/videodev.h
1843
check_header linux/videodev2.h
1844
check_header sys/videoio.h
1845

    
1846
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1847

    
1848
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1849
{ check_header dev/bktr/ioctl_meteor.h &&
1850
  check_header dev/bktr/ioctl_bt848.h; } ||
1851
{ check_header machine/ioctl_meteor.h &&
1852
  check_header machine/ioctl_bt848.h; } ||
1853
{ check_header dev/video/meteor/ioctl_meteor.h &&
1854
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1855
check_header dev/ic/bt8xx.h
1856

    
1857
check_header sys/soundcard.h
1858
check_header soundcard.h
1859

    
1860
# deal with the X11 frame grabber
1861
enabled x11grab                         &&
1862
check_header X11/Xlib.h                 &&
1863
check_header X11/extensions/XShm.h      &&
1864
check_func XOpenDisplay -lX11           &&
1865
check_func XShmCreateImage -lX11 -lXext
1866

    
1867
enabled debug && add_cflags -g"$debuglevel"
1868

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

    
1882
# add some linker flags
1883
check_ldflags -Wl,--warn-common
1884
check_ldflags -Wl,--as-needed
1885
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'
1886
check_ldflags -Wl,-Bsymbolic
1887

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

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

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

    
1928
if enabled gprof; then
1929
    add_cflags  "-p"
1930
    add_ldflags "-p"
1931
fi
1932

    
1933
VHOOKCFLAGS="-fPIC"
1934

    
1935
# Find out if the .align argument is a power of two or not.
1936
if test $asmalign_pot = "unknown"; then
1937
    disable asmalign_pot
1938
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
1939
fi
1940

    
1941
enabled_any $DECODER_LIST      && enable decoders
1942
enabled_any $ENCODER_LIST      && enable encoders
1943
enabled_any $BSF_LIST          && enable bsfs
1944
enabled_any $DEMUXER_LIST      && enable demuxers
1945
enabled_any $MUXER_LIST        && enable muxers
1946
enabled_any $FILTER_LIST       && enable filters
1947
enabled_any $INDEV_LIST        && enable demuxers
1948
enabled_any $OUTDEV_LIST       && enable muxers
1949
enabled_any $PROTOCOL_LIST     && enable protocols
1950

    
1951
enabled_any $THREADS_LIST      && enable threads
1952

    
1953
check_deps $CONFIG_LIST       \
1954
           $HAVE_LIST         \
1955
           $DECODER_LIST      \
1956
           $ENCODER_LIST      \
1957
           $PARSER_LIST       \
1958
           $BSF_LIST          \
1959
           $DEMUXER_LIST      \
1960
           $MUXER_LIST        \
1961
           $FILTER_LIST       \
1962
           $INDEV_LIST        \
1963
           $OUTDEV_LIST       \
1964
           $PROTOCOL_LIST     \
1965

    
1966
enabled libdc1394 && append pkg_requires "libraw1394"
1967
enabled libdirac  && append pkg_requires "dirac"
1968
enabled libtheora && append pkg_requires "theora"
1969
enabled libvorbis && append pkg_requires "vorbisenc"
1970

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

    
2050
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2051
    echo "Enabled ${type}s:"
2052
    eval list=\$$(toupper $type)_LIST
2053
    for part in $list; do
2054
        enabled $part && echo ${part%_*}
2055
    done | sort | pr -3 -t
2056
    echo
2057
done
2058

    
2059
license="LGPL"
2060
if enabled nonfree; then
2061
    license="unredistributable"
2062
elif enabled gpl; then
2063
    license="GPL"
2064
fi
2065

    
2066
echo "License: $license"
2067

    
2068
echo "Creating config.mak and config.h..."
2069

    
2070
echo "# Automatically generated by configure - do not modify!" > config.mak
2071
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2072
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2073
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2074
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2075

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

    
2092
echo "OPTFLAGS=$CFLAGS" >> config.mak
2093
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2094
echo "LDFLAGS=$LDFLAGS" >> config.mak
2095
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2096
echo "SHFLAGS=$SHFLAGS" >> config.mak
2097
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2098
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2099
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2100
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2101
echo "BUILD_STATIC=$static" >> config.mak
2102
echo "BUILDSUF=$build_suffix" >> config.mak
2103
echo "FULLNAME=$FULLNAME" >> config.mak
2104
echo "LIBPREF=$LIBPREF" >> config.mak
2105
echo "LIBSUF=$LIBSUF" >> config.mak
2106
echo "LIBNAME=$LIBNAME" >> config.mak
2107
echo "SLIBPREF=$SLIBPREF" >> config.mak
2108
echo "SLIBSUF=$SLIBSUF" >> config.mak
2109
echo "EXESUF=$EXESUF" >> config.mak
2110
echo "EXTRA_VERSION=$extra_version" >> config.mak
2111
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2112

    
2113
if enabled bigendian; then
2114
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2115
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2116
fi
2117

    
2118
if enabled sdl; then
2119
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2120
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2121
fi
2122
if enabled texi2html; then
2123
    echo "BUILD_DOC=yes" >> config.mak
2124
fi
2125

    
2126
get_version(){
2127
    name=$1
2128
    file=$source_path/$2
2129
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2130
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2131
    lcname=$(tolower $name)
2132
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2133
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2134
}
2135

    
2136
get_version LIBSWSCALE  libswscale/swscale.h
2137
get_version LIBPOSTPROC libpostproc/postprocess.h
2138
get_version LIBAVCODEC  libavcodec/avcodec.h
2139
get_version LIBAVDEVICE libavdevice/avdevice.h
2140
get_version LIBAVFORMAT libavformat/avformat.h
2141
get_version LIBAVUTIL   libavutil/avutil.h
2142
get_version LIBAVFILTER libavfilter/avfilter.h
2143

    
2144
if enabled shared; then
2145
    echo "BUILD_SHARED=yes" >> config.mak
2146
    echo "PIC=-fPIC -DPIC" >> config.mak
2147
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2148
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2149
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2150
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2151
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2152
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2153
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2154
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2155
fi
2156
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2157
echo "EXTRALIBS=$extralibs" >> config.mak
2158

    
2159
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2160
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2161
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2162
                                      $DECODER_LIST      \
2163
                                      $ENCODER_LIST      \
2164
                                      $PARSER_LIST       \
2165
                                      $BSF_LIST          \
2166
                                      $DEMUXER_LIST      \
2167
                                      $MUXER_LIST        \
2168
                                      $FILTER_LIST       \
2169
                                      $PROTOCOL_LIST     \
2170
                                      $INDEV_LIST        \
2171
                                      $OUTDEV_LIST       \
2172

    
2173
echo "#define restrict $_restrict" >> $TMPH
2174

    
2175
if enabled small; then
2176
    echo "#define av_always_inline"  >> $TMPH
2177
fi
2178

    
2179
echo "SRC_PATH=\"$source_path\"" >> config.mak
2180
echo "SRC_PATH_BARE=$source_path" >> config.mak
2181
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2182

    
2183
# Apparently it's not possible to portably echo a backslash.
2184
enabled asmalign_pot &&
2185
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2186
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2187

    
2188
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2189

    
2190
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2191

    
2192
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2193
cmp -s $TMPH config.h &&
2194
    echo "config.h is unchanged" ||
2195
    mv -f $TMPH config.h
2196

    
2197
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2198

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

    
2243

    
2244
# build pkg-config files
2245

    
2246
pkgconfig_generate(){
2247
name=$1
2248
shortname=${name#lib}
2249
comment=$2
2250
version=$3
2251
libs=$4
2252
requires=$5
2253
cat <<EOF > $name/$name.pc
2254
prefix=$prefix
2255
exec_prefix=\${prefix}
2256
libdir=$libdir
2257
includedir=$incdir
2258

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

    
2275
Name: $name
2276
Description: $comment
2277
Version: $version
2278
Requires: $requires
2279
Conflicts:
2280
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2281
Cflags: -I\${includedir}
2282
EOF
2283
}
2284

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