Statistics
| Branch: | Revision:

ffmpeg / configure @ caec74dd

History | View | Annotate | Download (62.7 KB)

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

    
10
# make sure we are running under a compatible shell
11
# try to make this part work with most shells
12

    
13
try_exec(){
14
    echo "Trying shell $1"
15
    type "$1" >/dev/null 2>&1 && exec "$@"
16
}
17

    
18
unset foo
19
(: ${foo%%bar}) 2>/dev/null
20
E1="$?"
21

    
22
(: ${foo?}) 2>/dev/null
23
E2="$?"
24

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

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

    
186
log(){
187
    echo "$@" >>$logfile
188
}
189

    
190
log_file(){
191
    log BEGIN $1
192
    pr -n -t $1 >>$logfile
193
    log END $1
194
}
195

    
196
echolog(){
197
    log "$@"
198
    echo "$@"
199
}
200

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

    
223
# Avoid locale weirdness, besides we really just want to translate ASCII.
224
toupper(){
225
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
226
}
227

    
228
tolower(){
229
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
230
}
231

    
232
set_all(){
233
    value=$1
234
    shift
235
    for var in $*; do
236
        eval $var=$value
237
    done
238
}
239

    
240
pushvar(){
241
    for var in $*; do
242
        eval level=\${${var}_level:=0}
243
        eval ${var}_${level}="\$$var"
244
        eval ${var}_level=$(($level+1))
245
    done
246
}
247

    
248
popvar(){
249
    for var in $*; do
250
        eval level=\${${var}_level:-0}
251
        test $level = 0 && continue
252
        eval level=$(($level-1))
253
        eval $var="\${${var}_${level}}"
254
        eval ${var}_level=$level
255
        eval unset ${var}_${level}
256
    done
257
}
258

    
259
enable(){
260
    set_all yes $*
261
}
262

    
263
disable(){
264
    set_all no $*
265
}
266

    
267
enabled(){
268
    eval test "x\$$1" = "xyes"
269
}
270

    
271
disabled(){
272
    eval test "x\$$1" = "xno"
273
}
274

    
275
enabled_all(){
276
    for opt; do
277
        enabled $opt || return 1
278
    done
279
}
280

    
281
disabled_all(){
282
    for opt; do
283
        disabled $opt || return 1
284
    done
285
}
286

    
287
enabled_any(){
288
    for opt; do
289
        enabled $opt && return 0
290
    done
291
}
292

    
293
disabled_any(){
294
    for opt; do
295
        disabled $opt && return 0
296
    done
297
}
298

    
299
is_in(){
300
    value=$1
301
    shift
302
    for var in $*; do
303
        [ $var = $value ] && return 0
304
    done
305
    return 1
306
}
307

    
308
check_deps(){
309
    for cfg; do
310
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
311
        disabled ${cfg}_checking && continue
312
        enable ${cfg}_checking
313

    
314
        eval dep_all="\$${cfg}_deps"
315
        eval dep_any="\$${cfg}_deps_any"
316

    
317
        pushvar cfg dep_all dep_any
318
        check_deps $dep_all $dep_any
319
        popvar cfg dep_all dep_any
320

    
321
        enabled_all $dep_all || disable $cfg
322
        enabled_any $dep_any || disable $cfg
323

    
324
        if enabled $cfg; then
325
            eval dep_extralibs="\$${cfg}_extralibs"
326
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
327
        fi
328

    
329
        disable ${cfg}_checking
330
    done
331
}
332

    
333
print_config(){
334
    pfx=$1
335
    header=$2
336
    makefile=$3
337
    shift 3
338
    for cfg; do
339
        ucname="`toupper $cfg`"
340
        if enabled $cfg; then
341
            echo "#define ${pfx}${ucname} 1" >> $header
342
            echo "#define ENABLE_${ucname} 1" >> $header
343
            echo "${pfx}${ucname}=yes" >> $makefile
344
        else
345
            echo "#define ENABLE_${ucname} 0" >> $header
346
        fi
347
    done
348
}
349

    
350
flags_saved(){
351
    (: ${SAVE_CFLAGS?}) 2>/dev/null
352
}
353

    
354
save_flags(){
355
    flags_saved && return
356
    SAVE_CFLAGS="$CFLAGS"
357
    SAVE_LDFLAGS="$LDFLAGS"
358
    SAVE_extralibs="$extralibs"
359
}
360

    
361
restore_flags(){
362
    flags_saved || return
363
    CFLAGS="$SAVE_CFLAGS"
364
    LDFLAGS="$SAVE_LDFLAGS"
365
    extralibs="$SAVE_extralibs"
366
    unset SAVE_CFLAGS
367
    unset SAVE_LDFLAGS
368
    unset SAVE_extralibs
369
}
370

    
371
temp_cflags(){
372
    save_flags
373
    CFLAGS="$CFLAGS $*"
374
}
375

    
376
temp_ldflags(){
377
    save_flags
378
    LDFLAGS="$LDFLAGS $*"
379
}
380

    
381
temp_extralibs(){
382
    save_flags
383
    extralibs="$extralibs $*"
384
}
385

    
386
append(){
387
    var=$1
388
    shift
389
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
390
    eval "$var=\"\$$var $*\""
391
}
392

    
393
add_cflags(){
394
    append CFLAGS "$@"
395
}
396

    
397
add_ldflags(){
398
    append LDFLAGS "$@"
399
}
400

    
401
add_extralibs(){
402
    append extralibs "$@"
403
}
404

    
405
check_cmd(){
406
    log "$@"
407
    "$@" >>$logfile 2>&1
408
}
409

    
410
check_cc(){
411
    log check_cc "$@"
412
    cat >$TMPC
413
    log_file $TMPC
414
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
415
}
416

    
417
check_cpp(){
418
    log check_cpp "$@"
419
    cat >$TMPC
420
    log_file $TMPC
421
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
422
}
423

    
424
check_asm(){
425
    log check_asm "$@"
426
    name="$1"
427
    asm="$2"
428
    shift 2
429
    check_cc "$@" <<EOF && enable $name || disable $name
430
int foo(void){ asm volatile($asm); }
431
EOF
432
}
433

    
434
check_ld(){
435
    log check_ld "$@"
436
    check_cc || return
437
    flags=''
438
    libs=''
439
    for f; do
440
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
441
    done
442
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
443
}
444

    
445
check_cflags(){
446
    log check_cflags "$@"
447
    check_cc "$@" <<EOF && add_cflags "$@"
448
int x;
449
EOF
450
}
451

    
452
check_ldflags(){
453
    log check_ldflags "$@"
454
    check_ld "$@" <<EOF && add_ldflags "$@"
455
int main(void){ return 0; }
456
EOF
457
}
458

    
459
check_header(){
460
    log check_header "$@"
461
    header=$1
462
    shift
463
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
464
    disable $var
465
    check_cpp "$@" <<EOF && enable $var
466
#include <$header>
467
int x;
468
EOF
469
}
470

    
471
check_func(){
472
    log check_func "$@"
473
    func=$1
474
    shift
475
    disable $func
476
    check_ld "$@" <<EOF && enable $func
477
extern int $func();
478
int main(void){ $func(); }
479
EOF
480
}
481

    
482
check_func2(){
483
    log check_func2 "$@"
484
    headers=$1
485
    func=$2
486
    shift 2
487
    disable $func
488
    incs=""
489
    for hdr in $headers; do
490
        incs="$incs
491
#include <$hdr>"
492
    done
493
    check_ld "$@" <<EOF && enable $func
494
$incs
495
int main(int argc, char **argv){
496
    (void) $func;
497
    return 0;
498
}
499
EOF
500
}
501

    
502
check_lib(){
503
    log check_lib "$@"
504
    header="$1"
505
    func="$2"
506
    shift 2
507
    temp_extralibs "$@"
508
    check_header $header && check_func $func && add_extralibs "$@"
509
    err=$?
510
    restore_flags
511
    return $err
512
}
513

    
514
check_lib2(){
515
    log check_lib2 "$@"
516
    headers="$1"
517
    func="$2"
518
    shift 2
519
    temp_extralibs "$@"
520
    check_func2 "$headers" $func && add_extralibs "$@"
521
    err=$?
522
    restore_flags
523
    return $err
524
}
525

    
526
check_exec(){
527
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
528
}
529

    
530
check_exec_crash(){
531
    code=`cat`
532

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

    
539
    (check_exec "$@") >>$logfile 2>&1 <<EOF
540
#include <signal.h>
541
static void sighandler(int sig){
542
    raise(SIGTERM);
543
}
544
int main(void){
545
    signal(SIGILL, sighandler);
546
    signal(SIGFPE, sighandler);
547
    signal(SIGSEGV, sighandler);
548
#ifdef SIGBUS
549
    signal(SIGBUS, sighandler);
550
#endif
551
    { $code }
552
}
553
EOF
554
}
555

    
556
check_type(){
557
    log check_type "$@"
558
    headers=$1
559
    type=$2
560
    shift 2
561
    disable $type
562
    incs=""
563
    for hdr in $headers; do
564
        incs="$incs
565
#include <$hdr>"
566
    done
567
    check_cc "$@" <<EOF && enable $type
568
$incs
569
$type v;
570
EOF
571
}
572

    
573
require(){
574
    name="$1"
575
    header="$2"
576
    func="$3"
577
    shift 3
578
    check_lib $header $func "$@" || die "ERROR: $name not found"
579
}
580

    
581
require2(){
582
    name="$1"
583
    headers="$2"
584
    func="$3"
585
    shift 3
586
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
587
}
588

    
589
check_foo_config(){
590
    cfg=$1
591
    pkg=$2
592
    header=$3
593
    func=$4
594
    shift 4
595
    disable $cfg
596
    check_cmd ${pkg}-config --version
597
    err=$?
598
    if test "$err" = 0; then
599
        temp_cflags `${pkg}-config --cflags`
600
        temp_extralibs `${pkg}-config --libs`
601
        check_lib "$@" $header $func && enable $cfg
602
    fi
603
    return $err
604
}
605

    
606
apply(){
607
    file=$1
608
    shift
609
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
610
}
611

    
612
COMPONENT_LIST="
613
    bsfs
614
    decoders
615
    demuxers
616
    encoders
617
    filters
618
    indevs
619
    muxers
620
    outdevs
621
    parsers
622
    protocols
623
"
624

    
625
CONFIG_LIST="
626
    $COMPONENT_LIST
627
    avfilter
628
    avfilter_lavf
629
    avisynth
630
    beos_netserver
631
    ffmpeg
632
    ffplay
633
    ffserver
634
    gpl
635
    gprof
636
    gray
637
    hardcoded_tables
638
    ipv6
639
    liba52
640
    liba52bin
641
    libamr_nb
642
    libamr_wb
643
    libdc1394
644
    libfaac
645
    libfaad
646
    libfaadbin
647
    libgsm
648
    libmp3lame
649
    libnut
650
    libtheora
651
    libvorbis
652
    libx264
653
    libxvid
654
    memalign_hack
655
    mlib
656
    mpegaudio_hp
657
    network
658
    nonfree
659
    postproc
660
    powerpc_perf
661
    small
662
    swscale
663
    vhook
664
    x11grab
665
    zlib
666
"
667

    
668
THREADS_LIST='
669
    beosthreads
670
    os2threads
671
    pthreads
672
    w32threads
673
'
674

    
675
ARCH_LIST='
676
    alpha
677
    armv4l
678
    bfin
679
    ia64
680
    m68k
681
    mips
682
    parisc
683
    powerpc
684
    s390
685
    sh4
686
    sparc
687
    sparc64
688
    x86
689
    x86_32
690
    x86_64
691
'
692

    
693
ARCH_EXT_LIST='
694
    altivec
695
    armv5te
696
    armv6
697
    iwmmxt
698
    mmi
699
    mmx
700
    mmx2
701
    ssse3
702
    vis
703
'
704

    
705
HAVE_LIST="
706
    $ARCH_EXT_LIST
707
    $THREADS_LIST
708
    altivec_h
709
    arpa_inet_h
710
    bswap
711
    byteswap_h
712
    closesocket
713
    cmov
714
    conio_h
715
    dcbzl
716
    dev_bktr_ioctl_bt848_h
717
    dev_bktr_ioctl_meteor_h
718
    dev_ic_bt8xx_h
719
    dev_video_meteor_ioctl_meteor_h
720
    dev_video_bktr_ioctl_bt848_h
721
    dlfcn_h
722
    dlopen
723
    ebp_available
724
    ebx_available
725
    fast_64bit
726
    fast_cmov
727
    fast_unaligned
728
    fork
729
    freetype2
730
    gethrtime
731
    GetProcessTimes
732
    getrusage
733
    imlib2
734
    inet_aton
735
    inline_asm
736
    libdc1394_1
737
    libdc1394_2
738
    llrint
739
    lrint
740
    lrintf
741
    machine_ioctl_bt848_h
742
    machine_ioctl_meteor_h
743
    malloc_h
744
    memalign
745
    mkstemp
746
    pld
747
    ppc64
748
    round
749
    roundf
750
    sdl
751
    sdl_video_size
752
    socklen_t
753
    soundcard_h
754
    poll_h
755
    sys_mman_h
756
    sys_select_h
757
    sys_soundcard_h
758
    termios_h
759
    threads
760
    winsock2_h
761
"
762

    
763
CMDLINE_SELECT="
764
    $ARCH_EXT_LIST
765
    $CONFIG_LIST
766
    $THREADS_LIST
767
    cross_compile
768
    debug
769
    extra_warnings
770
    logging
771
    optimizations
772
    shared
773
    static
774
    stripping
775
"
776
CMDLINE_SET='
777
    arch
778
    build_suffix
779
    cc
780
    cpu
781
    cross_prefix
782
    incdir
783
    libdir
784
    logfile
785
    make
786
    mandir
787
    prefix
788
    shlibdir
789
    source_path
790
    target_os
791
'
792

    
793
# code dependency declarations
794

    
795
# architecture extensions
796
altivec_deps="powerpc"
797
armv5te_deps="armv4l"
798
armv6_deps="armv4l"
799
iwmmxt_deps="armv4l"
800
mmi_deps="mips"
801
mmx_deps="x86"
802
mmx2_deps="x86 mmx"
803
ssse3_deps="x86"
804
vis_deps="sparc"
805

    
806
# decoders / encoders
807
ac3_decoder_deps="gpl"
808
dxa_decoder_deps="zlib"
809
flashsv_decoder_deps="zlib"
810
flashsv_encoder_deps="zlib"
811
mpeg_xvmc_decoder_deps="xvmc"
812
png_decoder_deps="zlib"
813
png_encoder_deps="zlib"
814
zmbv_decoder_deps="zlib"
815
zmbv_encoder_deps="zlib"
816

    
817
# external libraries
818
liba52_decoder_deps="liba52"
819
liba52bin_decoder_extralibs='$ldl'
820
libamr_nb_decoder_deps="libamr_nb"
821
libamr_nb_encoder_deps="libamr_nb"
822
libamr_wb_decoder_deps="libamr_wb"
823
libamr_wb_encoder_deps="libamr_wb"
824
libfaac_encoder_deps="libfaac"
825
libfaad_decoder_deps="libfaad"
826
libfaadbin_decoder_extralibs='$ldl'
827
libgsm_decoder_deps="libgsm"
828
libgsm_encoder_deps="libgsm"
829
libgsm_ms_decoder_deps="libgsm"
830
libgsm_ms_encoder_deps="libgsm"
831
libmp3lame_encoder_deps="libmp3lame"
832
libtheora_encoder_deps="libtheora"
833
libvorbis_encoder_deps="libvorbis"
834
libx264_encoder_deps="libx264"
835
libxvid_encoder_deps="libxvid"
836
mpeg4aac_decoder_deps="libfaad"
837

    
838
# demuxers / muxers
839
ac3_demuxer_deps="ac3_parser"
840
audio_beos_demuxer_deps="audio_beos"
841
audio_beos_demuxer_extralibs="-lmedia -lbe"
842
audio_beos_muxer_deps="audio_beos"
843
audio_beos_muxer_extralibs="-lmedia -lbe"
844
avisynth_demuxer_deps="avisynth"
845
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
846
dv1394_demuxer_deps="dv1394 dv_demuxer"
847
libdc1394_demuxer_deps="libdc1394"
848
libnut_demuxer_deps="libnut"
849
libnut_muxer_deps="libnut"
850
mp3_demuxer_deps="mpegaudio_parser"
851
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
852
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
853
redir_demuxer_deps="network"
854
rtp_muxer_deps="network rtp_protocol"
855
rtsp_demuxer_deps="sdp_demuxer"
856
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
857
v4l_demuxer_deps="linux_videodev_h"
858
v4l2_demuxer_deps="linux_videodev2_h"
859
vfwcap_demuxer_deps="capCreateCaptureWindow"
860
vfwcap_demuxer_extralibs="-lvfw32"
861
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
862
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
863

    
864
# protocols
865
http_protocol_deps="network"
866
rtp_protocol_deps="udp_protocol"
867
tcp_protocol_deps="network"
868
udp_protocol_deps="network"
869

    
870
# filters
871
movie_filter_deps="avfilter_lavf"
872

    
873
# programs
874
ffplay_deps="sdl"
875
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
876
ffserver_extralibs='$ldl'
877
vhook_extralibs='$ldl'
878

    
879

    
880
# default parameters
881

    
882
logfile="config.err"
883

    
884
# installation paths
885
prefix="/usr/local"
886
libdir='$(PREFIX)/lib'
887
shlibdir="$libdir"
888
incdir='$(PREFIX)/include'
889
mandir='$(PREFIX)/share/man'
890
bindir='$(PREFIX)/bin'
891

    
892
# toolchain
893
cc="gcc"
894
ar="ar"
895
nm="nm"
896
ranlib="ranlib"
897
make="make"
898
strip="strip"
899
asmalign_pot="unknown"
900
ln_s="ln -sf"
901

    
902
# machine
903
arch=`uname -m`
904
cpu="generic"
905

    
906
# OS
907
target_os=$(tolower $(uname -s))
908

    
909
# libraries
910
enable zlib
911

    
912
# configurable options
913
enable debug
914
enable ffmpeg
915
enable ffplay
916
enable ffserver
917
enable ipv6
918
enable mpegaudio_hp
919
enable network
920
enable optimizations
921
enable protocols
922
enable static
923
enable stripping
924
vhook="default"
925

    
926
# build settings
927
SHFLAGS='-shared -Wl,-soname,$(SLIBNAME_WITH_MAJOR)'
928
VHOOKSHFLAGS='$(SHFLAGS)'
929
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
930
FFSERVERLDFLAGS=-Wl,-E
931
LIBPREF="lib"
932
LIBSUF=".a"
933
FULLNAME='$(NAME)$(BUILDSUF)'
934
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
935
SLIBPREF="lib"
936
SLIBSUF=".so"
937
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
938
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
939
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
940
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
941

    
942
# gcc stupidly only outputs the basename of targets with -MM
943
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed "1s,^,$(@D)/,"'
944

    
945
# find source path
946
source_path="`dirname \"$0\"`"
947
enable source_path_used
948
if test -z "$source_path" -o "$source_path" = "." ; then
949
    source_path="`pwd`"
950
    disable source_path_used
951
else
952
    source_path="`cd \"$source_path\"; pwd`"
953
    echo "$source_path" | grep -q '[[:blank:]]' &&
954
        die "Out of tree builds are impossible with whitespace in source path."
955
fi
956

    
957
FFMPEG_CONFIGURATION="$@"
958

    
959
find_things(){
960
    thing=$1
961
    pattern=$2
962
    file=$source_path/$3
963
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
964
}
965

    
966
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
967
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
968
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
969
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
970
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
971
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
972
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
973
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
974
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
975
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
976

    
977
enable $ARCH_EXT_LIST \
978
       $DECODER_LIST \
979
       $ENCODER_LIST \
980
       $PARSER_LIST \
981
       $BSF_LIST \
982
       $DEMUXER_LIST \
983
       $MUXER_LIST \
984
       $FILTER_LIST \
985
       $PROTOCOL_LIST \
986
       $INDEV_LIST \
987
       $OUTDEV_LIST \
988

    
989
die_unknown(){
990
    echo "Unknown option \"$1\"."
991
    echo "See $0 --help for available options."
992
    exit 1
993
}
994

    
995
show_list() {
996
    suffix=_$1
997
    shift
998
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
999
    exit 0
1000
}
1001

    
1002
for opt do
1003
    optval="${opt#*=}"
1004
    case "$opt" in
1005
    --extra-cflags=*) add_cflags "$optval"
1006
    ;;
1007
    --extra-ldflags=*) add_ldflags "$optval"
1008
    ;;
1009
    --extra-libs=*) add_extralibs "$optval"
1010
    ;;
1011
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1012
    ;;
1013
    --enable-debug=*) debuglevel="$optval"
1014
    ;;
1015
    --enable-*=*|--disable-*=*)
1016
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1017
    case "$thing" in
1018
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1019
        *) die_unknown "$opt" ;;
1020
    esac
1021
    ;;
1022
    --enable-?*|--disable-?*)
1023
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1024
    if is_in $option $COMPONENT_LIST; then
1025
        eval $action \$$(toupper ${option%s})_LIST
1026
    elif is_in $option $CMDLINE_SELECT; then
1027
        $action $option
1028
    else
1029
        die_unknown $opt
1030
    fi
1031
    ;;
1032
    --list-*)
1033
        NAME="${opt#--list-}"
1034
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1035
        NAME=${NAME%s}
1036
        eval show_list $NAME \$$(toupper $NAME)_LIST
1037
    ;;
1038
    --help|-h) show_help
1039
    ;;
1040
    *)
1041
    optname="${opt%=*}"
1042
    optname="${optname#--}"
1043
    optname=$(echo "$optname" | sed 's/-/_/g')
1044
    is_in $optname $CMDLINE_SET || die_unknown $opt
1045
    eval $optname='$optval'
1046
    ;;
1047
    esac
1048
done
1049

    
1050
# OS specific
1051
case $target_os in
1052
    beos|haiku|zeta)
1053
        prefix="$HOME/config"
1054
        # helps building libavcodec
1055
        add_cflags "-DPIC -fomit-frame-pointer"
1056
        # 3 gcc releases known for BeOS, each with ugly bugs
1057
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1058
        case "$gcc_version" in
1059
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1060
            disable mmx
1061
            ;;
1062
          *20010315*) echo "BeBits gcc"
1063
            add_cflags "-fno-expensive-optimizations"
1064
            ;;
1065
        esac
1066
        SHFLAGS=-nostart
1067
        # enable BeOS things
1068
        enable audio_beos
1069
        # no need for libm, but the inet stuff
1070
        # Check for BONE
1071
        # XXX: actually should check for NOT net_server
1072
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1073
            network_extralibs="-lbind -lsocket"
1074
        else
1075
            enable beos_netserver
1076
            network_extralibs="-lnet"
1077
        fi ;;
1078
    sunos)
1079
        FFSERVERLDFLAGS=""
1080
        SHFLAGS='-shared -Wl,-h,$(SLIBNAME_WITH_MAJOR)'
1081
        network_extralibs="-lsocket -lnsl"
1082
        ;;
1083
    netbsd)
1084
        oss_demuxer_extralibs="-lossaudio"
1085
        oss_muxer_extralibs="-lossaudio"
1086
        ;;
1087
    openbsd)
1088
        disable need_memalign
1089
        LIBOBJFLAGS='$(PIC)'
1090
        SHFLAGS='-shared'
1091
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1092
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1093
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1094
        oss_demuxer_extralibs="-lossaudio"
1095
        oss_muxer_extralibs="-lossaudio"
1096
        ;;
1097
    freebsd)
1098
        disable need_memalign
1099
        ;;
1100
    bsd/os)
1101
        osextralibs="-lpoll -lgnugetopt"
1102
        strip="strip -d"
1103
        ;;
1104
    darwin)
1105
        disable need_memalign
1106
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1107
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$@'
1108
        strip="strip -x"
1109
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1110
        SLIBSUF=".dylib"
1111
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1112
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1113
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1114
        ;;
1115
    mingw32*)
1116
        target_os=mingw32
1117
        shlibdir="$bindir"
1118
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1119
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1120
        if enabled swscale; then
1121
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1122
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1123
        fi
1124
        disable ffserver
1125
        SLIBPREF=""
1126
        SLIBSUF=".dll"
1127
        EXESUF=".exe"
1128
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1129
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1130
        SLIB_EXTRA_CMD='-lib /machine:i386 /def:$$(@:$(SLIBSUF)=.def)'
1131
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1132
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1133
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1134
        ;;
1135
    cygwin*)
1136
        target_os=cygwin
1137
        shlibdir="$bindir"
1138
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1139
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1140
        if enabled swscale; then
1141
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1142
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1143
        fi
1144
        EXESUF=".exe"
1145
        SLIBPREF="cyg"
1146
        SLIBSUF=".dll"
1147
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1148
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1149
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1150
        ;;
1151
    *-dos|freedos|opendos)
1152
        disable ffplay ffserver vhook
1153
        disable $INDEV_LIST $OUTDEV_LIST
1154
        network_extralibs="-lsocket"
1155
        EXESUF=".exe"
1156
        ;;
1157
    linux)
1158
        LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1159
        enable dv1394
1160
        ;;
1161
    irix*)
1162
        target_os=irix
1163
        ranlib="echo ignoring ranlib"
1164
        ;;
1165
    os/2*)
1166
        strip="lxlite"
1167
        ln_s="cp -f"
1168
        EXESUF=".exe"
1169
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1170
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1171
        FFSERVERLDFLAGS=""
1172
        LIBSUF="_s.a"
1173
        SLIBPREF=""
1174
        SLIBSUF=".dll"
1175
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1176
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1177
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1178
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1179
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1180
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1181
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1182
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1183
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1184
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1185
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1186
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1187
        disable vhook
1188
        ;;
1189
    interix)
1190
        disable vhook
1191
        ;;
1192

    
1193
    *)
1194
        target_os="${target_os}-UNKNOWN"
1195
        ;;
1196
esac
1197

    
1198
# set temporary file name
1199
if test ! -z "$TMPDIR" ; then
1200
    TMPDIR1="${TMPDIR}"
1201
elif test ! -z "$TEMPDIR" ; then
1202
    TMPDIR1="${TEMPDIR}"
1203
else
1204
    TMPDIR1="/tmp"
1205
fi
1206

    
1207
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1208
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1209
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1210
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1211
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1212
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1213

    
1214

    
1215
add_extralibs $osextralibs
1216

    
1217
disabled logging && logfile=/dev/null
1218

    
1219
echo "# $0 $@" >$logfile
1220
set >>$logfile
1221

    
1222
case "$arch" in
1223
    i386|i486|i586|i686|i86pc|BePC)
1224
        arch="x86_32"
1225
        enable fast_unaligned
1226
    ;;
1227
    x86_64|amd64)
1228
        arch="x86_32"
1229
        enable fast_unaligned
1230
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1231
        int test[sizeof(char*) - 7];
1232
EOF
1233
    ;;
1234
    # armv4l is a subset of armv[567]*l
1235
    arm|armv[4567]*l)
1236
        arch="armv4l"
1237
    ;;
1238
    alpha)
1239
        arch="alpha"
1240
        enable fast_64bit
1241
    ;;
1242
    "Power Macintosh"|ppc|powerpc)
1243
        arch="powerpc"
1244
    ;;
1245
    ppc64)
1246
        arch="powerpc"
1247
        enable fast_64bit
1248
    ;;
1249
    mips|mipsel|IP*)
1250
        arch="mips"
1251
    ;;
1252
    sun4u|sparc64)
1253
        arch="sparc64"
1254
        enable fast_64bit
1255
    ;;
1256
    sparc)
1257
        arch="sparc"
1258
    ;;
1259
    sh4)
1260
        arch="sh4"
1261
    ;;
1262
    parisc)
1263
        arch="parisc"
1264
    ;;
1265
    parisc64)
1266
        arch="parisc"
1267
        enable fast_64bit
1268
    ;;
1269
    s390|s390x)
1270
        arch="s390"
1271
    ;;
1272
    m68k)
1273
        arch="m68k"
1274
    ;;
1275
    ia64)
1276
        arch="ia64"
1277
        enable fast_64bit
1278
    ;;
1279
    bfin)
1280
        arch="bfin"
1281
    ;;
1282
    *)
1283
        arch="unknown"
1284
    ;;
1285
esac
1286

    
1287
enable $arch
1288
enabled_any x86_32 x86_64 && enable x86
1289
enabled     sparc64       && enable sparc
1290

    
1291
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1292
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1293

    
1294
test -n "$cross_prefix" && enable cross_compile
1295
cc="${cross_prefix}${cc}"
1296
ar="${cross_prefix}${ar}"
1297
nm="${cross_prefix}${nm}"
1298
ranlib="${cross_prefix}${ranlib}"
1299
strip="${cross_prefix}${strip}"
1300

    
1301
# we need to build at least one lib type
1302
if ! enabled_any static shared; then
1303
    cat <<EOF
1304
At least one library type must be built.
1305
Specify --enable-static to build the static libraries or --enable-shared to
1306
build the shared libraries as well. To only build the shared libraries specify
1307
--disable-static in addition to --enable-shared.
1308
EOF
1309
    exit 1;
1310
fi
1311

    
1312
disabled static && LIBNAME=""
1313

    
1314
if enabled_any libfaad libfaadbin ; then
1315
    if check_header faad.h; then
1316
        check_cc << EOF
1317
#include <faad.h>
1318
#ifndef FAAD2_VERSION
1319
ok faad1
1320
#endif
1321
int main(void) { return 0; }
1322
EOF
1323
        test $? = 0 && enable libfaad2
1324
    else
1325
        die "FAAD test failed."
1326
    fi
1327
fi
1328

    
1329

    
1330
if ! enabled gpl; then
1331
    die_gpl_disabled(){
1332
        name=$1
1333
        shift
1334
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1335
    }
1336
    die_gpl_disabled "The Postprocessing code" postproc
1337
    die_gpl_disabled "liba52"                  liba52
1338
    die_gpl_disabled "libx264"                 libx264
1339
    die_gpl_disabled "libxvidcore"             libxvid
1340
    die_gpl_disabled "FAAD2"                   libfaad2
1341
    die_gpl_disabled "The X11 grabber"         x11grab
1342
    die_gpl_disabled "The software scaler"     swscale
1343
fi
1344

    
1345
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1346
    die "libamr is nonfree and --enable-nonfree is not specified."
1347
fi
1348

    
1349
check_deps $ARCH_EXT_LIST
1350

    
1351
test -z "$need_memalign" && need_memalign="$mmx"
1352

    
1353
#Darwin CC versions
1354
if test $target_os = darwin; then
1355
    if $cc -v 2>&1 | grep -q xlc; then
1356
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1357
    else
1358
        add_cflags "-pipe"
1359
        check_cflags "-force_cpusubtype_ALL"
1360
        check_cflags "-Wno-sign-compare"
1361
        enabled shared || add_cflags -mdynamic-no-pic
1362
    fi
1363
fi
1364

    
1365
disabled optimizations || add_cflags -fomit-frame-pointer
1366

    
1367
# Add processor-specific flags
1368
if test $cpu != "generic"; then
1369
    warn_altivec(){
1370
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1371
    }
1372
    case $cpu in
1373
        601|ppc601|PowerPC601)
1374
            add_cflags "-mcpu=601"
1375
            warn_altivec enabled PPC601
1376
        ;;
1377
        603*|ppc603*|PowerPC603*)
1378
            add_cflags "-mcpu=603"
1379
            warn_altivec enabled PPC603
1380
        ;;
1381
        604*|ppc604*|PowerPC604*)
1382
            add_cflags "-mcpu=604"
1383
            warn_altivec enabled PPC604
1384
        ;;
1385
        G3|g3|75*|ppc75*|PowerPC75*)
1386
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1387
            warn_altivec enabled PPC75x
1388
        ;;
1389
        G4|g4|745*|ppc745*|PowerPC745*)
1390
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1391
            warn_altivec disabled PPC745x
1392
        ;;
1393
        74*|ppc74*|PowerPC74*)
1394
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1395
            warn_altivec disabled PPC74xx
1396
        ;;
1397
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1398
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1399
            warn_altivec disabled PPC970
1400
            enable ppc64
1401
        ;;
1402
        Cell|CELL|cell)
1403
            add_cflags "-mcpu=cell"
1404
            warn_altivec disabled Cell
1405
            enable ppc64
1406
        ;;
1407
        # targets that do NOT support conditional mov (cmov)
1408
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1409
            add_cflags "-march=$cpu"
1410
            disable cmov
1411
        ;;
1412
        # targets that do support conditional mov (cmov)
1413
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1414
            add_cflags "-march=$cpu"
1415
            enable cmov
1416
            enable fast_cmov
1417
        ;;
1418
        # targets that do support conditional mov but on which it's slow
1419
        pentium4|pentium4m|prescott|nocona)
1420
            add_cflags "-march=$cpu"
1421
            enable cmov
1422
            disable fast_cmov
1423
        ;;
1424
        sparc64)
1425
            add_cflags "-mcpu=v9"
1426
        ;;
1427
        arm*)
1428
            add_cflags "-mcpu=$cpu"
1429
        ;;
1430
        *)
1431
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1432
        ;;
1433
    esac
1434
fi
1435

    
1436
gnu_make(){
1437
    $1 --version 2>&1 | grep -q GNU
1438
}
1439

    
1440
if ! gnu_make $make; then
1441
    gnu_make gmake && make=gmake || die "GNU make not found."
1442
fi
1443

    
1444
# make sure we can execute files in $TMPDIR
1445
cat >$TMPSH 2>>$logfile <<EOF
1446
#! /bin/sh
1447
EOF
1448
chmod +x $TMPSH >>$logfile 2>&1
1449
if ! $TMPSH >>$logfile 2>&1; then
1450
    cat <<EOF
1451
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1452
variable to another directory and make sure that $TMPDIR1 is not mounted
1453
noexec.
1454
EOF
1455
    die "Sanity test failed."
1456
fi
1457
rm $TMPSH
1458

    
1459
# compiler sanity check
1460
check_exec <<EOF
1461
int main(void){ return 0; }
1462
EOF
1463
if test "$?" != 0; then
1464
    echo "$cc is unable to create an executable file."
1465
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1466
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1467
        echo "Only do this if you know what cross compiling means."
1468
    fi
1469
    die "C compiler test failed."
1470
fi
1471

    
1472
check_cc <<EOF || die "Symbol mangling check failed."
1473
int ff_extern;
1474
EOF
1475
sym=$($nm -P -g $TMPO)
1476
extern_prefix=${sym%%ff_extern*}
1477

    
1478
check_asm inline_asm '""'
1479

    
1480
if enabled x86; then
1481
    # check whether EBP is available on x86
1482
    # As 'i' is stored on the stack, this program will crash
1483
    # if the base pointer is used to access it because the
1484
    # base pointer is cleared in the inline assembly code.
1485
    check_exec_crash <<EOF && enable ebp_available
1486
    volatile int i=0;
1487
    asm volatile (
1488
        "xorl %%ebp, %%ebp"
1489
    ::: "%ebp");
1490
    return i;
1491
EOF
1492

    
1493
    # check wether EBX is available on x86
1494
    check_asm ebx_available '"":::"%ebx"'
1495

    
1496
    # check whether binutils is new enough to compile SSSE3/MMX2
1497
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1498
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1499

    
1500
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1501
fi
1502

    
1503
# check for assembler specific support
1504

    
1505
if test $arch = "powerpc"; then
1506
check_cc <<EOF && enable dcbzl
1507
int main(void) {
1508
    register long zero = 0;
1509
    char data[1024];
1510
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1511
return 0;
1512
}
1513
EOF
1514
fi
1515

    
1516
# check for SIMD availability
1517

    
1518
# AltiVec flags: The FSF version of GCC differs from the Apple version
1519
if enabled altivec; then
1520
    check_cflags -maltivec -mabi=altivec &&
1521
        check_header altivec.h ||
1522
        check_cflags -faltivec
1523

    
1524
    # check if our compiler supports Motorola AltiVec C API
1525
    enabled altivec_h &&
1526
        inc_altivec_h="#include <altivec.h>" ||
1527
        inc_altivec_h=
1528
    check_cc <<EOF || disable altivec
1529
$inc_altivec_h
1530
int main(void) {
1531
    vector signed int v1, v2, v3;
1532
    v1 = vec_add(v2,v3);
1533
    return 0;
1534
}
1535
EOF
1536
fi
1537

    
1538
# We have to check if pld is a nop and disable it.
1539
enabled armv4l  && check_asm pld     '"pld [r0]"'
1540
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1541
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1542
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1543
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1544
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1545

    
1546
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1547

    
1548
# ---
1549
# big/little-endian test
1550
check_cc <<EOF || die "endian test failed"
1551
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1552
EOF
1553
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1554

    
1555
# ---
1556
# check availability of some header files
1557

    
1558
if check_func dlopen; then
1559
    ldl=
1560
elif check_func dlopen -ldl; then
1561
    ldl=-ldl
1562
fi
1563

    
1564
check_func  fork
1565
check_func  gethrtime
1566
check_func  getrusage
1567
check_func  inet_aton $network_extralibs
1568
check_func  memalign
1569
check_func  mkstemp
1570
check_func2 windows.h GetProcessTimes
1571

    
1572
check_header byteswap.h
1573
check_header conio.h
1574
check_header dlfcn.h
1575
check_header malloc.h
1576
check_header sys/mman.h
1577
check_header termios.h
1578

    
1579
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1580
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1581
fi
1582

    
1583
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1584

    
1585
# ffserver uses poll(),
1586
# if it's not found we can emulate it using select().
1587
if enabled ffserver; then
1588
    check_header poll.h
1589
    check_header sys/select.h
1590
fi
1591

    
1592
# check for some common methods of building with pthread support
1593
# do this before the optional library checks as some of them require pthreads
1594
if enabled pthreads; then
1595
    if check_func pthread_create; then
1596
        :
1597
    elif check_func pthread_create -pthread; then
1598
        add_cflags -pthread
1599
        add_extralibs -pthread
1600
    elif check_func pthread_create -pthreads; then
1601
        add_cflags -pthreads
1602
        add_extralibs -pthreads
1603
    elif ! check_lib pthread.h pthread_create -lpthread; then
1604
        die "ERROR: can't find pthreads library"
1605
    fi
1606
fi
1607

    
1608
for thread in $THREADS_LIST; do
1609
    if enabled $thread; then
1610
        test -n "$thread_type" &&
1611
            die "ERROR: Only one thread type must be selected." ||
1612
            thread_type="$thread"
1613
    fi
1614
done
1615

    
1616
check_lib math.h sin -lm
1617

    
1618
# test for C99 functions in math.h
1619
for func in llrint lrint lrintf round roundf; do
1620
    check_exec <<EOF && enable $func || disable $func
1621
#define _ISOC9X_SOURCE  1
1622
#include <math.h>
1623
int main(void) { return ($func(3.999f) > 0)?0:1; }
1624
EOF
1625
done
1626

    
1627
# these are off by default, so fail if requested and not available
1628
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1629
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1630
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1631
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1632
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1633
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1634
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1635
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1636
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1637
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1638
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1639
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1640
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1641
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1642

    
1643
# disable the native AC-3 decoder if liba52 is enabled
1644
enabled liba52 && disable ac3_decoder
1645

    
1646
# libdc1394 check
1647
if enabled libdc1394; then
1648
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1649
        enable libdc1394_2; } ||
1650
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1651
        enable libdc1394_1; } ||
1652
    die "ERROR: No version of libdc1394 found "
1653
fi
1654

    
1655

    
1656
_restrict=
1657
for restrict_keyword in restrict __restrict__ __restrict; do
1658
    check_cc <<EOF && _restrict=$restrict_keyword && break
1659
void foo(char * $restrict_keyword p);
1660
EOF
1661
done
1662

    
1663
test "$vhook" = "default" && vhook="$dlopen"
1664

    
1665
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1666
    disable vhook
1667
    echo
1668
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1669
    echo "Patches welcome."
1670
    echo
1671
fi
1672

    
1673
if enabled vhook; then
1674
    check_ldflags -rdynamic
1675
    check_ldflags -export-dynamic
1676
fi
1677

    
1678
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1679
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1680

    
1681
##########################################
1682
# SDL check
1683

    
1684
disable sdl_too_old
1685
disable sdl
1686
SDL_CONFIG="${cross_prefix}sdl-config"
1687
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1688
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1689
    temp_cflags $sdl_cflags
1690
    temp_extralibs `"${SDL_CONFIG}" --libs`
1691
    if check_lib2 SDL.h SDL_Init; then
1692
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1693
        if test "$_sdlversion" -lt 121 ; then
1694
            enable sdl_too_old
1695
        else
1696
            enable sdl
1697
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1698
#include <SDL.h>
1699
int main(int argc, char **argv){
1700
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1701
    int w = vi->current_w;
1702
    return 0;
1703
}
1704
EOF
1705
        fi
1706
    fi
1707
    restore_flags
1708
fi
1709

    
1710
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1711

    
1712
check_type sys/socket.h socklen_t
1713

    
1714
##########################################
1715
# Network check
1716

    
1717
if enabled network; then
1718
    # Prefer arpa/inet.h over winsock2
1719
    if check_header arpa/inet.h ; then
1720
        check_func closesocket
1721
    elif check_header winsock2.h ; then
1722
        network_extralibs="-lws2_32"
1723
        check_type ws2tcpip.h socklen_t
1724
        check_func2 winsock2.h closesocket
1725
    fi
1726
fi
1727

    
1728
##########################################
1729
# IPv6 check
1730

    
1731
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1732
#include <sys/types.h>
1733
#include <sys/socket.h>
1734
#include <netinet/in.h>
1735
#include <netdb.h>
1736
int main(void) {
1737
    struct sockaddr_storage saddr;
1738
    struct ipv6_mreq mreq6;
1739
    getaddrinfo(0,0,0,0);
1740
    getnameinfo(0,0,0,0,0,0,0);
1741
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1742
}
1743
EOF
1744

    
1745
check_header linux/videodev.h
1746
check_header linux/videodev2.h
1747

    
1748
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1749

    
1750
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1751
{ check_header dev/bktr/ioctl_meteor.h &&
1752
  check_header dev/bktr/ioctl_bt848.h; } ||
1753
{ check_header machine/ioctl_meteor.h &&
1754
  check_header machine/ioctl_bt848.h; } ||
1755
{ check_header dev/video/meteor/ioctl_meteor.h &&
1756
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1757
check_header dev/ic/bt8xx.h
1758

    
1759
check_header sys/soundcard.h
1760
check_header soundcard.h
1761

    
1762
# deal with the X11 frame grabber
1763
enabled x11grab                         &&
1764
check_header X11/Xlib.h                 &&
1765
check_header X11/extensions/XShm.h      &&
1766
check_func XOpenDisplay -lX11           &&
1767
check_func XShmCreateImage -lX11 -lXext
1768

    
1769
enabled debug && add_cflags -g"$debuglevel"
1770

    
1771
# add some useful compiler flags if supported
1772
check_cflags -Wdeclaration-after-statement
1773
check_cflags -Wall
1774
check_cflags -Wno-switch
1775
check_cflags -Wdisabled-optimization
1776
check_cflags -Wpointer-arith
1777
check_cflags -Wredundant-decls
1778
check_cflags -Wno-pointer-sign
1779
check_cflags -Wcast-qual
1780
check_cflags -Wwrite-strings
1781
check_cflags -Wtype-limits
1782
enabled extra_warnings && check_cflags -Winline
1783

    
1784
# add some linker flags
1785
check_ldflags -Wl,--warn-common
1786
check_ldflags $LDLATEFLAGS
1787
check_ldflags -Wl,-Bsymbolic
1788

    
1789
if enabled small; then
1790
    check_cflags -Os            # not all compilers support -Os
1791
    optimizations="small"
1792
elif enabled optimizations; then
1793
    if $cc -v 2>&1 | grep -q xlc; then
1794
        add_cflags  "-O5"
1795
        add_ldflags "-O5"
1796
    else
1797
        add_cflags "-O3"
1798
    fi
1799
fi
1800
check_cflags -fno-math-errno
1801
check_cflags -fno-signed-zeros
1802

    
1803
# PIC flags for shared library objects where they are needed
1804
if enabled shared; then
1805
    # LIBOBJFLAGS may have already been set in the OS configuration
1806
    if test -z "$LIBOBJFLAGS" ; then
1807
        case "$arch" in
1808
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1809
        esac
1810
    fi
1811
fi
1812

    
1813
if enabled gprof; then
1814
    add_cflags  "-p"
1815
    add_ldflags "-p"
1816
fi
1817

    
1818
VHOOKCFLAGS="-fPIC"
1819

    
1820
# Find out if the .align argument is a power of two or not.
1821
if test $asmalign_pot = "unknown"; then
1822
    disable asmalign_pot
1823
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1824
fi
1825

    
1826
enabled_any $DECODER_LIST      && enable decoders
1827
enabled_any $ENCODER_LIST      && enable encoders
1828
enabled_any $BSF_LIST          && enable bsfs
1829
enabled_any $DEMUXER_LIST      && enable demuxers
1830
enabled_any $MUXER_LIST        && enable muxers
1831
enabled_any $FILTER_LIST       && enable filters
1832
enabled_any $INDEV_LIST        && enable demuxers
1833
enabled_any $OUTDEV_LIST       && enable muxers
1834
enabled_any $PROTOCOL_LIST     && enable protocols
1835

    
1836
enabled_any $THREADS_LIST      && enable threads
1837

    
1838
check_deps $CONFIG_LIST       \
1839
           $HAVE_LIST         \
1840
           $DECODER_LIST      \
1841
           $ENCODER_LIST      \
1842
           $PARSER_LIST       \
1843
           $BSF_LIST          \
1844
           $DEMUXER_LIST      \
1845
           $MUXER_LIST        \
1846
           $FILTER_LIST       \
1847
           $INDEV_LIST        \
1848
           $OUTDEV_LIST       \
1849
           $PROTOCOL_LIST     \
1850

    
1851
enabled libdc1394 && append pkg_requires "libraw1394"
1852
enabled libtheora && append pkg_requires "theora"
1853
enabled libvorbis && append pkg_requires "vorbisenc"
1854

    
1855
echo "install prefix            $prefix"
1856
echo "source path               $source_path"
1857
echo "C compiler                $cc"
1858
echo "make                      $make"
1859
echo ".align is power-of-two    $asmalign_pot"
1860
echo "ARCH                      $arch ($cpu)"
1861
if test "$build_suffix" != ""; then
1862
    echo "build suffix              $build_suffix"
1863
fi
1864
echo "big-endian                ${bigendian-no}"
1865
if test $arch = "x86_32" -o $arch = "x86_64"; then
1866
    echo "MMX enabled               ${mmx-no}"
1867
    echo "CMOV enabled              ${cmov-no}"
1868
    echo "CMOV is fast              ${fast_cmov-no}"
1869
    echo "EBX available             ${ebx_available-no}"
1870
    echo "EBP available             ${ebp_available-no}"
1871
fi
1872
if test $arch = "armv4l"; then
1873
    echo "ARMv5TE enabled           ${armv5te-no}"
1874
    echo "ARMv6 enabled             ${armv6-no}"
1875
    echo "IWMMXT enabled            ${iwmmxt-no}"
1876
fi
1877
if test $arch = "mips"; then
1878
    echo "MMI enabled               ${mmi-no}"
1879
fi
1880
if test $arch = "powerpc"; then
1881
    echo "AltiVec enabled           ${altivec-no}"
1882
    echo "dcbzl available           ${dcbzl-no}"
1883
fi
1884
echo "gprof enabled             ${gprof-no}"
1885
echo "debug symbols             ${debug-no}"
1886
echo "strip symbols             ${stripping-no}"
1887
echo "optimizations             ${optimizations-no}"
1888
echo "static                    ${static-no}"
1889
echo "shared                    ${shared-no}"
1890
echo "postprocessing support    ${postproc-no}"
1891
echo "software scaler enabled   ${swscale-no}"
1892
echo "new filter support        ${avfilter-no}"
1893
echo "filters using lavformat   ${avfilter_lavf-no}"
1894
echo "video hooking             ${vhook-no}"
1895
if enabled vhook; then
1896
    echo "Imlib2 support            ${imlib2-no}"
1897
    echo "FreeType support          ${freetype2-no}"
1898
fi
1899
echo "network support           ${network-no}"
1900
if enabled network; then
1901
    echo "IPv6 support              ${ipv6-no}"
1902
fi
1903
echo "threading support         ${thread_type-no}"
1904
echo "SDL support               ${sdl-no}"
1905
if enabled sdl_too_old; then
1906
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1907
fi
1908
echo "Sun medialib support      ${mlib-no}"
1909
echo "AVISynth enabled          ${avisynth-no}"
1910
echo "liba52 support            ${liba52-no}"
1911
echo "liba52 dlopened           ${liba52bin-no}"
1912
echo "libamr-nb support         ${libamr_nb-no}"
1913
echo "libamr-wb support         ${libamr_wb-no}"
1914
echo "libdc1394 support         ${libdc1394-no}"
1915
echo "libfaac enabled           ${libfaac-no}"
1916
echo "libfaad enabled           ${libfaad-no}"
1917
echo "libfaad dlopened          ${libfaadbin-no}"
1918
echo "libgsm enabled            ${libgsm-no}"
1919
echo "libmp3lame enabled        ${libmp3lame-no}"
1920
echo "libnut enabled            ${libnut-no}"
1921
echo "libtheora enabled         ${libtheora-no}"
1922
echo "libvorbis enabled         ${libvorbis-no}"
1923
echo "x264 enabled              ${libx264-no}"
1924
echo "XviD enabled              ${libxvid-no}"
1925
echo "zlib enabled              ${zlib-no}"
1926
echo
1927

    
1928
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1929
    echo "Enabled ${type}s:"
1930
    eval list=\$$(toupper $type)_LIST
1931
    for part in $list; do
1932
        enabled $part && echo ${part%_*}
1933
    done | sort | pr -3 -t
1934
    echo
1935
done
1936

    
1937
enabled nonfree &&
1938
    echo "License: unredistributable" ||
1939
    (enabled gpl &&
1940
        echo "License: GPL" ||
1941
        echo "License: LGPL")
1942

    
1943
echo "Creating config.mak and config.h..."
1944

    
1945
echo "# Automatically generated by configure - do not modify!" > config.mak
1946
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1947
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1948
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1949
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1950

    
1951
echo "PREFIX=$prefix" >> config.mak
1952
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1953
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1954
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1955
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1956
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1957
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1958
echo "MAKE=$make" >> config.mak
1959
echo "CC=$cc" >> config.mak
1960
echo "AR=$ar" >> config.mak
1961
echo "RANLIB=$ranlib" >> config.mak
1962
echo "LN_S=$ln_s" >> config.mak
1963
enabled stripping &&
1964
    echo "STRIP=$strip" >> config.mak ||
1965
    echo "STRIP=echo ignoring strip" >> config.mak
1966

    
1967
echo "OPTFLAGS=$CFLAGS" >> config.mak
1968
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1969
echo "LDFLAGS=$LDFLAGS" >> config.mak
1970
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1971
echo "SHFLAGS=$SHFLAGS" >> config.mak
1972
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1973
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1974
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1975
echo "BUILD_STATIC=$static" >> config.mak
1976
echo "BUILDSUF=$build_suffix" >> config.mak
1977
echo "FULLNAME=$FULLNAME" >> config.mak
1978
echo "LIBPREF=$LIBPREF" >> config.mak
1979
echo "LIBSUF=$LIBSUF" >> config.mak
1980
echo "LIBNAME=$LIBNAME" >> config.mak
1981
echo "SLIBPREF=$SLIBPREF" >> config.mak
1982
echo "SLIBSUF=$SLIBSUF" >> config.mak
1983
echo "EXESUF=$EXESUF" >> config.mak
1984
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
1985

    
1986
if enabled bigendian; then
1987
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1988
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1989
fi
1990

    
1991
if enabled sdl; then
1992
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1993
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1994
fi
1995
if enabled texi2html; then
1996
    echo "BUILD_DOC=yes" >> config.mak
1997
fi
1998

    
1999
get_version(){
2000
    name=$1
2001
    file=$source_path/$2
2002
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2003
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2004
    lcname=$(tolower $name)
2005
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2006
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2007
}
2008

    
2009
get_version LIBSWSCALE  libswscale/swscale.h
2010
get_version LIBPOSTPROC libpostproc/postprocess.h
2011
get_version LIBAVCODEC  libavcodec/avcodec.h
2012
get_version LIBAVDEVICE libavdevice/avdevice.h
2013
get_version LIBAVFORMAT libavformat/avformat.h
2014
get_version LIBAVUTIL   libavutil/avutil.h
2015
get_version LIBAVFILTER libavfilter/avfilter.h
2016

    
2017
if enabled shared; then
2018
    echo "BUILD_SHARED=yes" >> config.mak
2019
    echo "PIC=-fPIC -DPIC" >> config.mak
2020
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2021
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2022
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2023
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2024
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2025
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2026
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2027
fi
2028
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2029
echo "EXTRALIBS=$extralibs" >> config.mak
2030

    
2031
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2032
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2033
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2034
                                      $DECODER_LIST      \
2035
                                      $ENCODER_LIST      \
2036
                                      $PARSER_LIST       \
2037
                                      $BSF_LIST          \
2038
                                      $DEMUXER_LIST      \
2039
                                      $MUXER_LIST        \
2040
                                      $FILTER_LIST       \
2041
                                      $PROTOCOL_LIST     \
2042
                                      $INDEV_LIST        \
2043
                                      $OUTDEV_LIST       \
2044

    
2045
echo "#define restrict $_restrict" >> $TMPH
2046

    
2047
if enabled small; then
2048
    echo "#define av_always_inline"  >> $TMPH
2049
fi
2050

    
2051
echo "SRC_PATH=\"$source_path\"" >> config.mak
2052
echo "SRC_PATH_BARE=$source_path" >> config.mak
2053
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2054

    
2055
# Apparently it's not possible to portably echo a backslash.
2056
enabled asmalign_pot &&
2057
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2058
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2059

    
2060
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2061

    
2062
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2063

    
2064
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2065
cmp -s $TMPH config.h &&
2066
    echo "config.h is unchanged" ||
2067
    mv -f $TMPH config.h
2068

    
2069
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2070

    
2071
# build tree in object directory if source path is different from current one
2072
if enabled source_path_used; then
2073
    DIRS="\
2074
        doc               \
2075
        libavcodec        \
2076
        libavcodec/alpha  \
2077
        libavcodec/armv4l \
2078
        libavcodec/bfin   \
2079
        libavcodec/i386   \
2080
        libavcodec/mlib   \
2081
        libavcodec/ppc    \
2082
        libavcodec/sh4    \
2083
        libavcodec/sparc  \
2084
        libavdevice       \
2085
        libavfilter       \
2086
        libavformat       \
2087
        libavutil         \
2088
        libpostproc       \
2089
        libswscale        \
2090
        tests             \
2091
        tools             \
2092
        vhook             \
2093
        "
2094
    FILES="\
2095
        Makefile             \
2096
        common.mak           \
2097
        subdir.mak           \
2098
        doc/texi2pod.pl      \
2099
        libavcodec/Makefile  \
2100
        libavdevice/Makefile \
2101
        libavfilter/Makefile \
2102
        libavformat/Makefile \
2103
        libavutil/Makefile   \
2104
        libpostproc/Makefile \
2105
        libswscale/Makefile  \
2106
        "
2107
    for dir in $DIRS ; do
2108
        mkdir -p $dir
2109
    done
2110
    for f in $FILES ; do
2111
        $ln_s "$source_path/$f" $f
2112
    done
2113
fi
2114

    
2115

    
2116
# build pkg-config files
2117
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2118

    
2119
pkgconfig_generate(){
2120
name=$1
2121
comment=$2
2122
version=$3
2123
libs=$4
2124
requires=$5
2125
cat <<EOF >$name.pc
2126
prefix=$prefix
2127
exec_prefix=\${prefix}
2128
libdir=\${exec_prefix}/lib
2129
includedir=\${prefix}/include
2130

    
2131
Name: $name
2132
Description: $comment
2133
Version: $version
2134
Requires: $requires
2135
Conflicts:
2136
Libs: -L\${libdir} $libs
2137
Cflags: -I\${includedir}
2138
EOF
2139
}
2140

    
2141
pkgconfig_generate_uninstalled(){
2142
name=$1
2143
shortname=${name#lib}
2144
comment=$2
2145
version=$3
2146
libs=$4
2147
requires=$5
2148
cat <<EOF >$name-uninstalled.pc
2149
prefix=
2150
exec_prefix=
2151
libdir=\${pcfiledir}/$name
2152
includedir=\${pcfiledir}
2153

    
2154
Name: $name
2155
Description: $comment
2156
Version: $version
2157
Requires: $requires
2158
Conflicts:
2159
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2160
Cflags: -I\${includedir}
2161
EOF
2162
}
2163

    
2164
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2165
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2166

    
2167
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2168
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2169

    
2170
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2171
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2172

    
2173
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2174
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2175
if enabled postproc; then
2176
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2177
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2178
fi
2179

    
2180
if enabled swscale; then
2181
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2182
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2183
else
2184
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2185
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2186
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2187
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2188
fi
2189

    
2190
if enabled avfilter; then
2191
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2192
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2193
fi