Statistics
| Branch: | Revision:

ffmpeg / configure @ 81124ba0

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

    
183
log(){
184
    echo "$@" >>$logfile
185
}
186

    
187
log_file(){
188
    log BEGIN $1
189
    pr -n -t $1 >>$logfile
190
    log END $1
191
}
192

    
193
echolog(){
194
    log "$@"
195
    echo "$@"
196
}
197

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

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

    
225
tolower(){
226
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
227
}
228

    
229
set_all(){
230
    value=$1
231
    shift
232
    for var in $*; do
233
        eval $var=$value
234
    done
235
}
236

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

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

    
256
enable(){
257
    set_all yes $*
258
}
259

    
260
disable(){
261
    set_all no $*
262
}
263

    
264
enabled(){
265
    eval test "x\$$1" = "xyes"
266
}
267

    
268
disabled(){
269
    eval test "x\$$1" = "xno"
270
}
271

    
272
enabled_all(){
273
    for opt; do
274
        enabled $opt || return 1
275
    done
276
}
277

    
278
disabled_all(){
279
    for opt; do
280
        disabled $opt || return 1
281
    done
282
}
283

    
284
enabled_any(){
285
    for opt; do
286
        enabled $opt && return 0
287
    done
288
}
289

    
290
disabled_any(){
291
    for opt; do
292
        disabled $opt && return 0
293
    done
294
}
295

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

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

    
311
        eval dep_all="\$${cfg}_deps"
312
        eval dep_any="\$${cfg}_deps_any"
313

    
314
        pushvar cfg dep_all dep_any
315
        check_deps $dep_all $dep_any
316
        popvar cfg dep_all dep_any
317

    
318
        enabled_all $dep_all || disable $cfg
319
        enabled_any $dep_any || disable $cfg
320

    
321
        if enabled $cfg; then
322
            eval dep_extralibs="\$${cfg}_extralibs"
323
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
324
        fi
325

    
326
        disable ${cfg}_checking
327
    done
328
}
329

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

    
347
flags_saved(){
348
    (: ${SAVE_CFLAGS?}) 2>/dev/null
349
}
350

    
351
save_flags(){
352
    flags_saved && return
353
    SAVE_CFLAGS="$CFLAGS"
354
    SAVE_LDFLAGS="$LDFLAGS"
355
    SAVE_extralibs="$extralibs"
356
}
357

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

    
368
temp_cflags(){
369
    save_flags
370
    CFLAGS="$CFLAGS $*"
371
}
372

    
373
temp_ldflags(){
374
    save_flags
375
    LDFLAGS="$LDFLAGS $*"
376
}
377

    
378
temp_extralibs(){
379
    save_flags
380
    extralibs="$extralibs $*"
381
}
382

    
383
append(){
384
    var=$1
385
    shift
386
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
387
    eval "$var=\"\$$var $*\""
388
}
389

    
390
add_cflags(){
391
    append CFLAGS "$@"
392
}
393

    
394
add_ldflags(){
395
    append LDFLAGS "$@"
396
}
397

    
398
add_extralibs(){
399
    append extralibs "$@"
400
}
401

    
402
check_cmd(){
403
    log "$@"
404
    "$@" >>$logfile 2>&1
405
}
406

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

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

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

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

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

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

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

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

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

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

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

    
529
check_exec(){
530
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
531
}
532

    
533
check_exec_crash(){
534
    code=`cat`
535

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

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

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

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

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

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

    
609
apply(){
610
    file=$1
611
    shift
612
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
613
}
614

    
615
COMPONENT_LIST="
616
    bsfs
617
    decoders
618
    demuxers
619
    encoders
620
    filters
621
    indevs
622
    muxers
623
    outdevs
624
    parsers
625
    protocols
626
"
627

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

    
670
THREADS_LIST='
671
    beosthreads
672
    os2threads
673
    pthreads
674
    w32threads
675
'
676

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

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

    
706
HAVE_LIST="
707
    $ARCH_EXT_LIST
708
    $THREADS_LIST
709
    altivec_h
710
    arpa_inet_h
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
    mlib
747
    ppc64
748
    round
749
    roundf
750
    sdl
751
    sdl_video_size
752
    socklen_t
753
    soundcard_h
754
    poll_h
755
    sys_select_h
756
    sys_soundcard_h
757
    termios_h
758
    threads
759
    winsock2_h
760
"
761

    
762
CMDLINE_SELECT="
763
    $ARCH_EXT_LIST
764
    $CONFIG_LIST
765
    $THREADS_LIST
766
    debug
767
    extra_warnings
768
    optimizations
769
    shared
770
    static
771
"
772

    
773
# code dependency declarations
774

    
775
# architecture extensions
776
altivec_deps="powerpc"
777
armv5te_deps="armv4l"
778
armv6_deps="armv4l"
779
iwmmxt_deps="armv4l"
780
mmi_deps="mips"
781
mmx_deps="x86"
782
ssse3_deps="x86"
783
vis_deps="sparc"
784

    
785
# decoders / encoders
786
ac3_decoder_deps="gpl"
787
dxa_decoder_deps="zlib"
788
flashsv_decoder_deps="zlib"
789
flashsv_encoder_deps="zlib"
790
flv_decoder_deps="h263_decoder"
791
h263_decoder_deps="h263_parser mpeg4video_parser"
792
h263i_decoder_deps="h263_decoder"
793
h264_decoder_deps="h264_parser"
794
mpeg_xvmc_decoder_deps="xvmc"
795
mpeg4_decoder_deps="h263_decoder"
796
msmpeg4v1_decoder_deps="h263_decoder"
797
msmpeg4v2_decoder_deps="h263_decoder"
798
msmpeg4v3_decoder_deps="h263_decoder"
799
png_decoder_deps="zlib"
800
png_encoder_deps="zlib"
801
svq3_decoder_deps="h264_parser"
802
vc1_decoder_deps="h263_decoder"
803
wmv1_decoder_deps="h263_decoder"
804
wmv2_decoder_deps="h263_decoder"
805
wmv3_decoder_deps="h263_decoder"
806
zmbv_decoder_deps="zlib"
807
zmbv_encoder_deps="zlib"
808

    
809
# external libraries
810
liba52_decoder_deps="liba52"
811
liba52bin_decoder_extralibs='$ldl'
812
libamr_nb_decoder_deps="libamr_nb"
813
libamr_nb_encoder_deps="libamr_nb"
814
libamr_wb_decoder_deps="libamr_wb"
815
libamr_wb_encoder_deps="libamr_wb"
816
libfaac_encoder_deps="libfaac"
817
libfaad_decoder_deps="libfaad"
818
libfaadbin_decoder_extralibs='$ldl'
819
libgsm_decoder_deps="libgsm"
820
libgsm_encoder_deps="libgsm"
821
libgsm_ms_decoder_deps="libgsm"
822
libgsm_ms_encoder_deps="libgsm"
823
libmp3lame_encoder_deps="libmp3lame"
824
libtheora_encoder_deps="libtheora"
825
libvorbis_encoder_deps="libvorbis"
826
libx264_encoder_deps="libx264"
827
libxvid_encoder_deps="libxvid"
828
mpeg4aac_decoder_deps="libfaad"
829

    
830
# demuxers / muxers
831
ac3_demuxer_deps="ac3_parser"
832
audio_beos_demuxer_deps="audio_beos"
833
audio_beos_demuxer_extralibs="-lmedia -lbe"
834
audio_beos_muxer_deps="audio_beos"
835
audio_beos_muxer_extralibs="-lmedia -lbe"
836
avisynth_demuxer_deps="avisynth"
837
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
838
dv1394_demuxer_deps="dv1394 dv_demuxer"
839
libdc1394_demuxer_deps="libdc1394"
840
libnut_demuxer_deps="libnut"
841
libnut_muxer_deps="libnut"
842
mp3_demuxer_deps="mpegaudio_parser"
843
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
844
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
845
redir_demuxer_deps="network"
846
rtp_muxer_deps="network rtp_protocol"
847
rtsp_demuxer_deps="sdp_demuxer"
848
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
849
v4l2_demuxer_deps="linux_videodev2_h"
850
v4l_demuxer_deps="linux_videodev_h"
851
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
852
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
853

    
854
# protocols
855
http_protocol_deps="network"
856
rtp_protocol_deps="udp_protocol"
857
tcp_protocol_deps="network"
858
udp_protocol_deps="network"
859

    
860
# filters
861
movie_filter_deps="avfilter_lavf"
862

    
863
# programs
864
ffplay_deps="sdl"
865
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
866
ffserver_extralibs='$ldl'
867
vhook_extralibs='$ldl'
868

    
869

    
870
# set temporary file name
871
if test ! -z "$TMPDIR" ; then
872
    TMPDIR1="${TMPDIR}"
873
elif test ! -z "$TEMPDIR" ; then
874
    TMPDIR1="${TEMPDIR}"
875
else
876
    TMPDIR1="/tmp"
877
fi
878

    
879
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
880
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
881
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
882
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
883
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
884

    
885
# default parameters
886

    
887
enable logging
888
logfile="config.err"
889

    
890
# installation paths
891
PREFIX="/usr/local"
892
libdir='$(PREFIX)/lib'
893
shlibdir="$libdir"
894
incdir='$(PREFIX)/include'
895
mandir='$(PREFIX)/share/man'
896
bindir='$(PREFIX)/bin'
897

    
898
# toolchain
899
cc="gcc"
900
ar="ar"
901
ranlib="ranlib"
902
make="make"
903
strip="strip"
904
asmalign_pot="unknown"
905
ln_s="ln -sf"
906

    
907
# machine
908
arch=`uname -m`
909
cpu="generic"
910

    
911
# OS
912
targetos=$(tolower $(uname -s))
913

    
914
# libraries
915
enable zlib
916

    
917
# configurable options
918
enable debug
919
enable dostrip
920
enable ffmpeg
921
enable ffplay
922
enable ffserver
923
enable ipv6
924
enable static
925
enable mpegaudio_hp
926
enable network
927
enable optimizations
928
enable protocols
929
vhook="default"
930

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

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

    
959
FFMPEG_CONFIGURATION="$@"
960

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

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

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

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

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

    
1004
for opt do
1005
    optval="${opt#*=}"
1006
    case "$opt" in
1007
    --log)
1008
    ;;
1009
    --log=*) logging="$optval"
1010
    ;;
1011
    --prefix=*) PREFIX="$optval"
1012
    ;;
1013
    --libdir=*) libdir="$optval"
1014
    ;;
1015
    --shlibdir=*) shlibdir="$optval"
1016
    ;;
1017
    --incdir=*) incdir="$optval"
1018
    ;;
1019
    --mandir=*) mandir="$optval"
1020
    ;;
1021
    --source-path=*) source_path="$optval"
1022
    ;;
1023
    --cross-prefix=*) cross_prefix="$optval"
1024
    ;;
1025
    --cross-compile) enable cross_compile
1026
    ;;
1027
    --target-os=*) targetos="$optval"
1028
    ;;
1029
    --cc=*) cc="$optval"
1030
    ;;
1031
    --make=*) make="$optval"
1032
    ;;
1033
    --extra-cflags=*) add_cflags "$optval"
1034
    ;;
1035
    --extra-ldflags=*) add_ldflags "$optval"
1036
    ;;
1037
    --extra-libs=*) add_extralibs "$optval"
1038
    ;;
1039
    --build-suffix=*) BUILDSUF="$optval"
1040
    ;;
1041
    --arch=*) arch="$optval"
1042
    ;;
1043
    --cpu=*) cpu="$optval"
1044
    ;;
1045
    --enable-sunmlib) enable mlib
1046
    ;;
1047
    --disable-strip) disable dostrip
1048
    ;;
1049
    --disable-encoders) disable $ENCODER_LIST
1050
    ;;
1051
    --disable-decoders) disable $DECODER_LIST
1052
    ;;
1053
    --disable-muxers) disable $MUXER_LIST
1054
    ;;
1055
    --disable-filters) disable $FILTER_LIST
1056
    ;;
1057
    --disable-demuxers) disable $DEMUXER_LIST
1058
    ;;
1059
    --disable-parsers) disable $PARSER_LIST
1060
    ;;
1061
    --disable-bsfs) disable $BSF_LIST
1062
    ;;
1063
    --disable-protocols) disable $PROTOCOL_LIST
1064
    ;;
1065
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1066
    ;;
1067
    --enable-debug=*) debuglevel="$optval"
1068
    ;;
1069
    --enable-*=*|--disable-*=*)
1070
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1071
    case "$thing" in
1072
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1073
        *) die_unknown "$opt" ;;
1074
    esac
1075
    ;;
1076
    --enable-?*|--disable-?*)
1077
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1078
    echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
1079
    $action $option
1080
    ;;
1081
    --list-*)
1082
        NAME="${opt#--list-}"
1083
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1084
        NAME=${NAME%s}
1085
        eval show_list $NAME \$$(toupper $NAME)_LIST
1086
    ;;
1087
    --help|-h) show_help
1088
    ;;
1089
    *)
1090
    die_unknown $opt
1091
    ;;
1092
    esac
1093
done
1094

    
1095
case "$arch" in
1096
    i386|i486|i586|i686|i86pc|BePC)
1097
        arch="x86_32"
1098
        enable fast_unaligned
1099
    ;;
1100
    x86_64|amd64)
1101
        arch="x86_32"
1102
        enable fast_unaligned
1103
        canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1104
        if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1105
            if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1106
                arch="x86_64"
1107
                enable fast_64bit
1108
            fi
1109
        fi
1110
    ;;
1111
    # armv4l is a subset of armv[567]*l
1112
    arm|armv[4567]*l)
1113
        arch="armv4l"
1114
    ;;
1115
    alpha)
1116
        arch="alpha"
1117
        enable fast_64bit
1118
    ;;
1119
    "Power Macintosh"|ppc|powerpc)
1120
        arch="powerpc"
1121
    ;;
1122
    ppc64)
1123
        arch="powerpc"
1124
        enable fast_64bit
1125
    ;;
1126
    mips|mipsel|IP*)
1127
        arch="mips"
1128
    ;;
1129
    sun4u|sparc64)
1130
        arch="sparc64"
1131
        enable fast_64bit
1132
    ;;
1133
    sparc)
1134
        arch="sparc"
1135
    ;;
1136
    sh4)
1137
        arch="sh4"
1138
    ;;
1139
    parisc)
1140
        arch="parisc"
1141
    ;;
1142
    parisc64)
1143
        arch="parisc"
1144
        enable fast_64bit
1145
    ;;
1146
    s390|s390x)
1147
        arch="s390"
1148
    ;;
1149
    m68k)
1150
        arch="m68k"
1151
    ;;
1152
    ia64)
1153
        arch="ia64"
1154
        enable fast_64bit
1155
    ;;
1156
    bfin)
1157
        arch="bfin"
1158
    ;;
1159
    *)
1160
        arch="unknown"
1161
    ;;
1162
esac
1163

    
1164
enable $arch
1165
enabled_any x86_32 x86_64 && enable x86
1166
enabled     sparc64       && enable sparc
1167

    
1168
# OS specific
1169
case $targetos in
1170
    beos|haiku|zeta)
1171
        PREFIX="$HOME/config"
1172
        # helps building libavcodec
1173
        add_cflags "-DPIC -fomit-frame-pointer"
1174
        # 3 gcc releases known for BeOS, each with ugly bugs
1175
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1176
        case "$gcc_version" in
1177
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1178
            disable mmx
1179
            ;;
1180
          *20010315*) echo "BeBits gcc"
1181
            add_cflags "-fno-expensive-optimizations"
1182
            ;;
1183
        esac
1184
        SHFLAGS=-nostart
1185
        # enable BeOS things
1186
        enable audio_beos
1187
        # no need for libm, but the inet stuff
1188
        # Check for BONE
1189
        # XXX: actually should check for NOT net_server
1190
        if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1191
            network_extralibs="-lbind -lsocket"
1192
        else
1193
            enable beos_netserver
1194
            network_extralibs="-lnet"
1195
        fi ;;
1196
    sunos)
1197
        FFSERVERLDFLAGS=""
1198
        SHFLAGS='-shared -Wl,-h,$@'
1199
        network_extralibs="-lsocket -lnsl"
1200
        ;;
1201
    netbsd)
1202
        oss_demuxer_extralibs="-lossaudio"
1203
        oss_muxer_extralibs="-lossaudio"
1204
        ;;
1205
    openbsd)
1206
        disable need_memalign
1207
        LIBOBJFLAGS='$(PIC)'
1208
        SHFLAGS='-shared'
1209
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1210
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1211
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1212
        oss_demuxer_extralibs="-lossaudio"
1213
        oss_muxer_extralibs="-lossaudio"
1214
        ;;
1215
    freebsd)
1216
        disable need_memalign
1217
        ;;
1218
    bsd/os)
1219
        osextralibs="-lpoll -lgnugetopt"
1220
        strip="strip -d"
1221
        ;;
1222
    darwin)
1223
        disable need_memalign
1224
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION) -Wl,-read_only_relocs,suppress'
1225
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1226
        strip="strip -x"
1227
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1228
        SLIBSUF=".dylib"
1229
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1230
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1231
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1232
        ;;
1233
    mingw32*)
1234
        targetos=mingw32
1235
        shlibdir="$bindir"
1236
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1237
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1238
        if enabled swscaler; then
1239
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1240
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1241
        fi
1242
        disable ffserver
1243
        SLIBPREF=""
1244
        SLIBSUF=".dll"
1245
        EXESUF=".exe"
1246
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1247
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1248
        SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
1249
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1250
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1251
        SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1252
        ;;
1253
    cygwin*)
1254
        targetos=cygwin
1255
        shlibdir="$bindir"
1256
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1257
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1258
        if enabled swscaler; then
1259
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1260
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1261
        fi
1262
        EXESUF=".exe"
1263
        SLIBPREF="cyg"
1264
        SLIBSUF=".dll"
1265
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1266
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1267
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1268
        ;;
1269
    *-dos|freedos|opendos)
1270
        disable ffplay ffserver vhook
1271
        disable $INDEV_LIST $OUTDEV_LIST
1272
        network_extralibs="-lsocket"
1273
        EXESUF=".exe"
1274
        ;;
1275
    linux)
1276
        LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1277
        enable dv1394
1278
        ;;
1279
    irix*)
1280
        targetos=irix
1281
        ranlib="echo ignoring ranlib"
1282
        ;;
1283
    os/2*)
1284
        ar="emxomfar -p256"
1285
        ranlib="echo ignoring ranlib"
1286
        strip="lxlite"
1287
        ln_s="cp -f"
1288
        add_cflags "-Zomf"
1289
        EXESUF=".exe"
1290
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1291
        SHFLAGS='$(NAME).def -Zdll -Zomf'
1292
        FFSERVERLDFLAGS=""
1293
        LIBSUF="_s.lib"
1294
        SLIBPREF=""
1295
        SLIBSUF=".dll"
1296
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1297
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1298
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(NAME).def; \
1299
          echo PROTMODE >> $(NAME).def; \
1300
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(NAME).def; \
1301
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(NAME).def; \
1302
          echo EXPORTS >> $(NAME).def; \
1303
          emxexp -o $(OBJS) >> $(NAME).def'
1304
        SLIB_EXTRA_CMD='emximp -o $(LIBPREF)$(NAME)_dll.a $(NAME).def; \
1305
          emximp -o $(LIBPREF)$(NAME)_dll.lib $(NAME).def;'
1306
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1307
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1308
        disable vhook
1309
        ;;
1310
    interix)
1311
        disable vhook
1312
        ;;
1313

    
1314
    *)
1315
        targetos="${targetos}-UNKNOWN"
1316
        ;;
1317
esac
1318

    
1319
add_extralibs $osextralibs
1320

    
1321
if ! disabled logging ; then
1322
    enabled logging || logfile="$logging"
1323
    echo "# $0 $@" >$logfile
1324
    set >>$logfile
1325
else
1326
    logfile=/dev/null
1327
fi
1328

    
1329
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1330
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1331

    
1332
test -n "$cross_prefix" && enable cross_compile
1333
cc="${cross_prefix}${cc}"
1334
ar="${cross_prefix}${ar}"
1335
ranlib="${cross_prefix}${ranlib}"
1336
strip="${cross_prefix}${strip}"
1337

    
1338
# we need to build at least one lib type
1339
if ! enabled_any static shared; then
1340
    cat <<EOF
1341
At least one library type must be built.
1342
Specify --enable-static to build the static libraries or --enable-shared to
1343
build the shared libraries as well. To only build the shared libraries specify
1344
--disable-static in addition to --enable-shared.
1345
EOF
1346
    exit 1;
1347
fi
1348

    
1349
disabled static && LIBNAME=""
1350

    
1351
if enabled_any libfaad libfaadbin ; then
1352
    if check_header faad.h; then
1353
        check_cc << EOF
1354
#include <faad.h>
1355
#ifndef FAAD2_VERSION
1356
ok faad1
1357
#endif
1358
int main(void) { return 0; }
1359
EOF
1360
        test $? = 0 && enable libfaad2
1361
    else
1362
        die "FAAD test failed."
1363
    fi
1364
fi
1365

    
1366

    
1367
if ! enabled gpl; then
1368
    die_gpl_disabled(){
1369
        name=$1
1370
        shift
1371
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1372
    }
1373
    die_gpl_disabled "The Postprocessing code" pp
1374
    die_gpl_disabled "liba52"                  liba52
1375
    die_gpl_disabled "libx264"                 libx264
1376
    die_gpl_disabled "libxvidcore"             libxvid
1377
    die_gpl_disabled "FAAD2"                   libfaad2
1378
    die_gpl_disabled "The X11 grabber"         x11grab
1379
    die_gpl_disabled "The software scaler"     swscaler
1380
fi
1381

    
1382
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1383
    die "libamr is nonfree and --enable-nonfree is not specified."
1384
fi
1385

    
1386
check_deps $ARCH_EXT_LIST
1387

    
1388
test -z "$need_memalign" && need_memalign="$mmx"
1389

    
1390
#Darwin CC versions
1391
if test $targetos = darwin; then
1392
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1393
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1394
    else
1395
        add_cflags "-pipe"
1396
        check_cflags "-force_cpusubtype_ALL"
1397
        check_cflags "-Wno-sign-compare"
1398
        disabled shared && add_cflags -mdynamic-no-pic
1399
    fi
1400
fi
1401

    
1402
disabled optimizations || add_cflags -fomit-frame-pointer
1403

    
1404
# Add processor-specific flags
1405
if test $cpu != "generic"; then
1406
    warn_altivec(){
1407
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1408
    }
1409
    case $cpu in
1410
        601|ppc601|PowerPC601)
1411
            add_cflags "-mcpu=601"
1412
            warn_altivec enabled PPC601
1413
        ;;
1414
        603*|ppc603*|PowerPC603*)
1415
            add_cflags "-mcpu=603"
1416
            warn_altivec enabled PPC603
1417
        ;;
1418
        604*|ppc604*|PowerPC604*)
1419
            add_cflags "-mcpu=604"
1420
            warn_altivec enabled PPC604
1421
        ;;
1422
        G3|g3|75*|ppc75*|PowerPC75*)
1423
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1424
            warn_altivec enabled PPC75x
1425
        ;;
1426
        G4|g4|745*|ppc745*|PowerPC745*)
1427
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1428
            warn_altivec disabled PPC745x
1429
        ;;
1430
        74*|ppc74*|PowerPC74*)
1431
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1432
            warn_altivec disabled PPC74xx
1433
        ;;
1434
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1435
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1436
            warn_altivec disabled PPC970
1437
            enable ppc64
1438
        ;;
1439
        Cell|CELL|cell)
1440
            add_cflags "-mcpu=cell"
1441
            warn_altivec disabled Cell
1442
            enable ppc64
1443
        ;;
1444
        # targets that do NOT support conditional mov (cmov)
1445
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1446
            add_cflags "-march=$cpu"
1447
            disable cmov
1448
        ;;
1449
        # targets that do support conditional mov (cmov)
1450
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1451
            add_cflags "-march=$cpu"
1452
            enable cmov
1453
            enable fast_cmov
1454
        ;;
1455
        # targets that do support conditional mov but on which it's slow
1456
        pentium4|pentium4m|prescott|nocona)
1457
            add_cflags "-march=$cpu"
1458
            enable cmov
1459
            disable fast_cmov
1460
        ;;
1461
        sparc64)
1462
            add_cflags "-mcpu=v9"
1463
        ;;
1464
        arm*)
1465
            add_cflags "-mcpu=$cpu"
1466
        ;;
1467
        *)
1468
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1469
        ;;
1470
    esac
1471
fi
1472

    
1473
gnu_make(){
1474
    $1 --version 2>&1 | grep -q GNU
1475
}
1476

    
1477
if ! gnu_make $make; then
1478
    gnu_make gmake && make=gmake || die "GNU make not found."
1479
fi
1480

    
1481
# make sure we can execute files in $TMPDIR
1482
cat >$TMPE 2>>$logfile <<EOF
1483
#! /bin/sh
1484
EOF
1485
chmod +x $TMPE >>$logfile 2>&1
1486
if ! $TMPE >>$logfile 2>&1; then
1487
    cat <<EOF
1488
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1489
variable to another directory and make sure that $TMPDIR1 is not mounted
1490
noexec.
1491
EOF
1492
    die "Sanity test failed."
1493
fi
1494
rm $TMPE
1495

    
1496
# compiler sanity check
1497
check_exec <<EOF
1498
int main(void){
1499
    return 0;
1500
}
1501
EOF
1502
if test "$?" != 0; then
1503
    echo "$cc is unable to create an executable file."
1504
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1505
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1506
        echo "Only do this if you know what cross compiling means."
1507
    fi
1508
    die "C compiler test failed."
1509
fi
1510

    
1511
check_asm inline_asm '""'
1512

    
1513
if enabled x86; then
1514
    # check whether EBP is available on x86
1515
    # As 'i' is stored on the stack, this program will crash
1516
    # if the base pointer is used to access it because the
1517
    # base pointer is cleared in the inline assembly code.
1518
    check_exec_crash <<EOF && enable ebp_available
1519
    volatile int i=0;
1520
    asm volatile (
1521
        "xorl %%ebp, %%ebp"
1522
    ::: "%ebp");
1523
    return i;
1524
EOF
1525

    
1526
    # check wether EBX is available on x86
1527
    check_asm ebx_available '"":::"%ebx"'
1528

    
1529
    # check whether binutils is new enough to compile SSSE3
1530
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1531
fi
1532

    
1533
# check for assembler specific support
1534

    
1535
if test $arch = "powerpc"; then
1536
check_cc <<EOF && enable dcbzl
1537
int main(void) {
1538
    register long zero = 0;
1539
    char data[1024];
1540
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1541
return 0;
1542
}
1543
EOF
1544
fi
1545

    
1546
# check for SIMD availability
1547

    
1548
# AltiVec flags: The FSF version of GCC differs from the Apple version
1549
if enabled altivec; then
1550
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1551
        add_cflags "-faltivec" ||
1552
        add_cflags "-maltivec -mabi=altivec"
1553

    
1554
    check_header altivec.h
1555

    
1556
    # check if our compiler supports Motorola AltiVec C API
1557
    enabled altivec_h &&
1558
        inc_altivec_h="#include <altivec.h>" ||
1559
        inc_altivec_h=
1560
    check_cc <<EOF || disable altivec
1561
$inc_altivec_h
1562
int main(void) {
1563
    vector signed int v1, v2, v3;
1564
    v1 = vec_add(v2,v3);
1565
    return 0;
1566
}
1567
EOF
1568
fi
1569

    
1570
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1571
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1572
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1573
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1574
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1575

    
1576
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1577

    
1578
# ---
1579
# big/little-endian test
1580
check_cc <<EOF || die "endian test failed"
1581
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1582
EOF
1583
grep -q BIGE $TMPO && enable bigendian
1584

    
1585
# ---
1586
# check availability of some header files
1587

    
1588
if check_func dlopen; then
1589
    ldl=
1590
elif check_func dlopen -ldl; then
1591
    ldl=-ldl
1592
fi
1593

    
1594
check_func  fork
1595
check_func  gethrtime
1596
check_func  getrusage
1597
check_func  inet_aton $network_extralibs
1598
check_func  memalign
1599
check_func  mkstemp
1600
check_func2 windows.h GetProcessTimes
1601

    
1602
check_header byteswap.h
1603
check_header conio.h
1604
check_header dlfcn.h
1605
check_header malloc.h
1606
check_header termios.h
1607

    
1608
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1609
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1610
fi
1611

    
1612
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1613

    
1614
# ffserver uses poll(),
1615
# if it's not found we can emulate it using select().
1616
if enabled ffserver; then
1617
    check_header poll.h
1618
    check_header sys/select.h
1619
fi
1620

    
1621
# check for some common methods of building with pthread support
1622
# do this before the optional library checks as some of them require pthreads
1623
if enabled pthreads; then
1624
    if check_func pthread_create; then
1625
        :
1626
    elif check_func pthread_create -pthread; then
1627
        add_cflags -pthread
1628
        add_extralibs -pthread
1629
    elif check_func pthread_create -pthreads; then
1630
        add_cflags -pthreads
1631
        add_extralibs -pthreads
1632
    elif ! check_lib pthread.h pthread_create -lpthread; then
1633
        die "ERROR: can't find pthreads library"
1634
    fi
1635
fi
1636

    
1637
for thread in $THREADS_LIST; do
1638
    if enabled $thread; then
1639
        test -n "$thread_type" &&
1640
            die "ERROR: Only one thread type must be selected." ||
1641
            thread_type="$thread"
1642
    fi
1643
done
1644

    
1645
check_lib math.h sin -lm
1646

    
1647
# test for C99 functions in math.h
1648
for func in llrint lrint lrintf round roundf; do
1649
    check_exec <<EOF && enable $func || disable $func
1650
#define _ISOC9X_SOURCE  1
1651
#include <math.h>
1652
int main(void) { return ($func(3.999f) > 0)?0:1; }
1653
EOF
1654
done
1655

    
1656
# these are off by default, so fail if requested and not available
1657
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1658
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1659
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1660
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1661
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1662
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1663
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1664
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1665
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1666
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1667
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1668
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1669
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1670
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1671

    
1672
# disable the native AC-3 decoder if liba52 is enabled
1673
enabled liba52 && disable ac3_decoder
1674

    
1675
# libdc1394 check
1676
if enabled libdc1394; then
1677
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1678
        enable libdc1394_2; } ||
1679
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1680
        enable libdc1394_1; } ||
1681
    die "ERROR: No version of libdc1394 found "
1682
fi
1683

    
1684

    
1685
_restrict=
1686
for restrict_keyword in restrict __restrict__ __restrict; do
1687
    check_cc <<EOF && _restrict=$restrict_keyword && break
1688
void foo(char * $restrict_keyword p);
1689
EOF
1690
done
1691

    
1692
test "$vhook" = "default" && vhook="$dlopen"
1693

    
1694
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1695
    disable vhook
1696
    echo
1697
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1698
    echo "Patches welcome."
1699
    echo
1700
fi
1701

    
1702
if enabled vhook; then
1703
    check_ldflags -rdynamic
1704
    check_ldflags -export-dynamic
1705
fi
1706

    
1707
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1708
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1709

    
1710
##########################################
1711
# SDL check
1712

    
1713
disable sdl_too_old
1714
disable sdl
1715
SDL_CONFIG="${cross_prefix}sdl-config"
1716
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1717
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1718
    temp_cflags $sdl_cflags
1719
    temp_extralibs `"${SDL_CONFIG}" --libs`
1720
    if check_lib2 SDL.h SDL_Init; then
1721
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1722
        if test "$_sdlversion" -lt 121 ; then
1723
            enable sdl_too_old
1724
        else
1725
            enable sdl
1726
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1727
#include <SDL.h>
1728
int main(int argc, char **argv){
1729
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1730
    int w = vi->current_w;
1731
    return 0;
1732
}
1733
EOF
1734
        fi
1735
    fi
1736
    restore_flags
1737
fi
1738

    
1739
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1740

    
1741
check_type sys/socket.h socklen_t
1742

    
1743
##########################################
1744
# Network check
1745

    
1746
if enabled network; then
1747
    # Prefer arpa/inet.h over winsock2
1748
    if check_header arpa/inet.h ; then
1749
        check_func closesocket
1750
    elif check_header winsock2.h ; then
1751
        network_extralibs="-lws2_32"
1752
        check_type ws2tcpip.h socklen_t
1753
        check_func2 winsock2.h closesocket
1754
    fi
1755
fi
1756

    
1757
##########################################
1758
# IPv6 check
1759

    
1760
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1761
#include <sys/types.h>
1762
#include <sys/socket.h>
1763
#include <netinet/in.h>
1764
#include <netdb.h>
1765
int main(void) {
1766
    struct sockaddr_storage saddr;
1767
    struct ipv6_mreq mreq6;
1768
    getaddrinfo(0,0,0,0);
1769
    getnameinfo(0,0,0,0,0,0,0);
1770
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1771
}
1772
EOF
1773

    
1774
check_header linux/videodev.h
1775
check_header linux/videodev2.h
1776

    
1777
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1778
{ check_header dev/bktr/ioctl_meteor.h &&
1779
  check_header dev/bktr/ioctl_bt848.h; } ||
1780
{ check_header machine/ioctl_meteor.h &&
1781
  check_header machine/ioctl_bt848.h; } ||
1782
{ check_header dev/video/meteor/ioctl_meteor.h &&
1783
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1784
check_header dev/ic/bt8xx.h
1785

    
1786
check_header sys/soundcard.h
1787
check_header soundcard.h
1788

    
1789
# deal with the X11 frame grabber
1790
enabled x11grab                         &&
1791
check_header X11/Xlib.h                 &&
1792
check_header X11/extensions/XShm.h      &&
1793
check_func XOpenDisplay -lX11           &&
1794
check_func XShmCreateImage -lX11 -lXext
1795

    
1796
enabled debug && add_cflags -g"$debuglevel"
1797

    
1798
# add some useful compiler flags if supported
1799
check_cflags -Wdeclaration-after-statement
1800
check_cflags -Wall
1801
check_cflags -Wno-switch
1802
check_cflags -Wdisabled-optimization
1803
check_cflags -Wpointer-arith
1804
check_cflags -Wredundant-decls
1805
check_cflags -Wno-pointer-sign
1806
check_cflags -Wcast-qual
1807
check_cflags -Wwrite-strings
1808
check_cflags -Wtype-limits
1809
enabled extra_warnings && check_cflags -Winline
1810

    
1811
# add some linker flags
1812
check_ldflags -Wl,--warn-common
1813
check_ldflags $LDLATEFLAGS
1814
check_ldflags -Wl,-Bsymbolic
1815

    
1816
if enabled small; then
1817
    check_cflags -Os            # not all compilers support -Os
1818
    optimizations="small"
1819
elif enabled optimizations; then
1820
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1821
        add_cflags  "-O5"
1822
        add_ldflags "-O5"
1823
    else
1824
        add_cflags "-O3"
1825
    fi
1826
fi
1827
check_cflags -fno-math-errno
1828
check_cflags -fno-signed-zeros
1829

    
1830
# PIC flags for shared library objects where they are needed
1831
if enabled shared; then
1832
    # LIBOBJFLAGS may have already been set in the OS configuration
1833
    if test -z "$LIBOBJFLAGS" ; then
1834
        case "$arch" in
1835
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1836
        esac
1837
    fi
1838
fi
1839

    
1840
if enabled gprof; then
1841
    add_cflags  "-p"
1842
    add_ldflags "-p"
1843
fi
1844

    
1845
VHOOKCFLAGS="-fPIC"
1846

    
1847
# Find out if the .align argument is a power of two or not.
1848
if test $asmalign_pot = "unknown"; then
1849
    disable asmalign_pot
1850
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1851
fi
1852

    
1853
enabled_any $DECODER_LIST      && enable decoders
1854
enabled_any $ENCODER_LIST      && enable encoders
1855
enabled_any $BSF_LIST          && enable bsfs
1856
enabled_any $DEMUXER_LIST      && enable demuxers
1857
enabled_any $MUXER_LIST        && enable muxers
1858
enabled_any $FILTER_LIST       && enable filters
1859
enabled_any $INDEV_LIST        && enable demuxers
1860
enabled_any $OUTDEV_LIST       && enable muxers
1861
enabled_any $PROTOCOL_LIST     && enable protocols
1862

    
1863
enabled_any $THREADS_LIST      && enable threads
1864

    
1865
check_deps $CONFIG_LIST       \
1866
           $HAVE_LIST         \
1867
           $DECODER_LIST      \
1868
           $ENCODER_LIST      \
1869
           $PARSER_LIST       \
1870
           $BSF_LIST          \
1871
           $DEMUXER_LIST      \
1872
           $MUXER_LIST        \
1873
           $FILTER_LIST       \
1874
           $INDEV_LIST        \
1875
           $OUTDEV_LIST       \
1876
           $PROTOCOL_LIST     \
1877

    
1878
enabled libdc1394 && append pkg_requires "libraw1394"
1879
enabled libtheora && append pkg_requires "theora"
1880
enabled libvorbis && append pkg_requires "vorbisenc"
1881

    
1882
echo "install prefix            $PREFIX"
1883
echo "source path               $source_path"
1884
echo "C compiler                $cc"
1885
echo "make                      $make"
1886
echo ".align is power-of-two    $asmalign_pot"
1887
echo "ARCH                      $arch ($cpu)"
1888
if test "$BUILDSUF" != ""; then
1889
    echo "build suffix              $BUILDSUF"
1890
fi
1891
echo "big-endian                ${bigendian-no}"
1892
if test $arch = "x86_32" -o $arch = "x86_64"; then
1893
    echo "MMX enabled               ${mmx-no}"
1894
    echo "CMOV enabled              ${cmov-no}"
1895
    echo "CMOV is fast              ${fast_cmov-no}"
1896
    echo "EBX available             ${ebx_available-no}"
1897
    echo "EBP available             ${ebp_available-no}"
1898
fi
1899
if test $arch = "armv4l"; then
1900
    echo "ARMv5TE enabled           ${armv5te-no}"
1901
    echo "ARMv6 enabled             ${armv6-no}"
1902
    echo "IWMMXT enabled            ${iwmmxt-no}"
1903
fi
1904
if test $arch = "mips"; then
1905
    echo "MMI enabled               ${mmi-no}"
1906
fi
1907
if test $arch = "powerpc"; then
1908
    echo "AltiVec enabled           ${altivec-no}"
1909
    echo "dcbzl available           ${dcbzl-no}"
1910
fi
1911
echo "gprof enabled             ${gprof-no}"
1912
echo "debug symbols             ${debug-no}"
1913
echo "strip symbols             ${dostrip-no}"
1914
echo "optimizations             ${optimizations-no}"
1915
echo "static                    ${static-no}"
1916
echo "shared                    ${shared-no}"
1917
echo "postprocessing support    ${pp-no}"
1918
echo "software scaler enabled   ${swscaler-no}"
1919
echo "new filter support        ${avfilter-no}"
1920
echo "filters using lavformat   ${avfilter_lavf-no}"
1921
echo "video hooking             ${vhook-no}"
1922
if enabled vhook; then
1923
    echo "Imlib2 support            ${imlib2-no}"
1924
    echo "FreeType support          ${freetype2-no}"
1925
fi
1926
echo "network support           ${network-no}"
1927
if enabled network; then
1928
    echo "IPv6 support              ${ipv6-no}"
1929
fi
1930
echo "threading support         ${thread_type-no}"
1931
echo "SDL support               ${sdl-no}"
1932
if enabled sdl_too_old; then
1933
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1934
fi
1935
echo "Sun medialib support      ${mlib-no}"
1936
echo "AVISynth enabled          ${avisynth-no}"
1937
echo "liba52 support            ${liba52-no}"
1938
echo "liba52 dlopened           ${liba52bin-no}"
1939
echo "libamr-nb support         ${libamr_nb-no}"
1940
echo "libamr-wb support         ${libamr_wb-no}"
1941
echo "libdc1394 support         ${libdc1394-no}"
1942
echo "libfaac enabled           ${libfaac-no}"
1943
echo "libfaad enabled           ${libfaad-no}"
1944
echo "libfaad dlopened          ${libfaadbin-no}"
1945
echo "libgsm enabled            ${libgsm-no}"
1946
echo "libmp3lame enabled        ${libmp3lame-no}"
1947
echo "libnut enabled            ${libnut-no}"
1948
echo "libtheora enabled         ${libtheora-no}"
1949
echo "libvorbis enabled         ${libvorbis-no}"
1950
echo "x264 enabled              ${libx264-no}"
1951
echo "XviD enabled              ${libxvid-no}"
1952
echo "zlib enabled              ${zlib-no}"
1953
echo
1954

    
1955
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1956
    echo "Enabled ${type}s:"
1957
    eval list=\$$(toupper $type)_LIST
1958
    for part in $list; do
1959
        enabled $part && echo ${part%_*}
1960
    done | sort | pr -3 -t
1961
    echo
1962
done
1963

    
1964
enabled nonfree &&
1965
    echo "License: unredistributable" ||
1966
    (enabled gpl &&
1967
        echo "License: GPL" ||
1968
        echo "License: LGPL")
1969

    
1970
echo "Creating config.mak and config.h..."
1971

    
1972
echo "# Automatically generated by configure - do not modify!" > config.mak
1973
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1974
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1975
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1976
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1977

    
1978
echo "PREFIX=$PREFIX" >> config.mak
1979
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1980
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1981
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1982
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1983
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1984
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1985
echo "MAKE=$make" >> config.mak
1986
echo "CC=$cc" >> config.mak
1987
echo "AR=$ar" >> config.mak
1988
echo "RANLIB=$ranlib" >> config.mak
1989
echo "LN_S=$ln_s" >> config.mak
1990
enabled dostrip &&
1991
    echo "STRIP=$strip" >> config.mak ||
1992
    echo "STRIP=echo ignoring strip" >> config.mak
1993

    
1994
echo "OPTFLAGS=$CFLAGS" >> config.mak
1995
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1996
echo "LDFLAGS=$LDFLAGS" >> config.mak
1997
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1998
echo "SHFLAGS=$SHFLAGS" >> config.mak
1999
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2000
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2001
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2002
echo "BUILD_STATIC=$static" >> config.mak
2003
echo "BUILDSUF=$BUILDSUF" >> config.mak
2004
echo "FULLNAME=$FULLNAME" >> config.mak
2005
echo "LIBPREF=$LIBPREF" >> config.mak
2006
echo "LIBSUF=$LIBSUF" >> config.mak
2007
echo "LIBNAME=$LIBNAME" >> config.mak
2008
echo "SLIBPREF=$SLIBPREF" >> config.mak
2009
echo "SLIBSUF=$SLIBSUF" >> config.mak
2010
echo "EXESUF=$EXESUF" >> config.mak
2011

    
2012
if enabled bigendian; then
2013
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2014
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2015
fi
2016
if enabled mmx; then
2017
    echo "#define __CPU__ 586" >> $TMPH
2018
fi
2019

    
2020
if enabled sdl; then
2021
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2022
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2023
fi
2024
if enabled texi2html; then
2025
    echo "BUILD_DOC=yes" >> config.mak
2026
fi
2027

    
2028
get_version(){
2029
    name=$1
2030
    file=$source_path/$2
2031
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2032
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2033
}
2034

    
2035
get_version LIBSWSCALE  libswscale/swscale.h
2036
get_version LIBPOSTPROC libpostproc/postprocess.h
2037
get_version LIBAVCODEC  libavcodec/avcodec.h
2038
get_version LIBAVDEVICE libavdevice/avdevice.h
2039
get_version LIBAVFORMAT libavformat/avformat.h
2040
get_version LIBAVUTIL   libavutil/avutil.h
2041
get_version LIBAVFILTER libavfilter/avfilter.h
2042

    
2043
if enabled shared; then
2044
    echo "BUILD_SHARED=yes" >> config.mak
2045
    echo "PIC=-fPIC -DPIC" >> config.mak
2046
    echo "SPPMAJOR=$LIBPOSTPROC_VERSION_MAJOR" >> config.mak
2047
    echo "SPPVERSION=$LIBPOSTPROC_VERSION" >> config.mak
2048
    echo "LAVCMAJOR=$LIBAVCODEC_VERSION_MAJOR" >> config.mak
2049
    echo "LAVCVERSION=$LIBAVCODEC_VERSION" >> config.mak
2050
    echo "LAVDMAJOR=$LIBAVDEVICE_VERSION_MAJOR" >> config.mak
2051
    echo "LAVDVERSION=$LIBAVDEVICE_VERSION" >> config.mak
2052
    echo "LAVFMAJOR=$LIBAVFORMAT_VERSION_MAJOR" >> config.mak
2053
    echo "LAVFVERSION=$LIBAVFORMAT_VERSION" >> config.mak
2054
    echo "LAVUMAJOR=$LIBAVUTIL_VERSION_MAJOR" >> config.mak
2055
    echo "LAVUVERSION=$LIBAVUTIL_VERSION" >> config.mak
2056
    echo "LAVFIMAJOR=$LIBAVFILTER_VERSION_MAJOR" >> config.mak
2057
    echo "LAVFIVERSION=$LIBAVFILTER_VERSION" >> config.mak
2058
    echo "SWSMAJOR=$LIBSWSCALE_VERSION_MAJOR" >> config.mak
2059
    echo "SWSVERSION=$LIBSWSCALE_VERSION" >> config.mak
2060
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2061
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2062
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2063
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2064
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2065
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2066
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2067
fi
2068
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2069
echo "EXTRALIBS=$extralibs" >> config.mak
2070

    
2071
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2072
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2073
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2074
                                      $DECODER_LIST      \
2075
                                      $ENCODER_LIST      \
2076
                                      $PARSER_LIST       \
2077
                                      $BSF_LIST          \
2078
                                      $DEMUXER_LIST      \
2079
                                      $MUXER_LIST        \
2080
                                      $FILTER_LIST       \
2081
                                      $PROTOCOL_LIST     \
2082
                                      $INDEV_LIST        \
2083
                                      $OUTDEV_LIST       \
2084

    
2085
echo "#define restrict $_restrict" >> $TMPH
2086

    
2087
if enabled small; then
2088
    echo "#define av_always_inline"  >> $TMPH
2089
fi
2090

    
2091
echo "SRC_PATH=\"$source_path\"" >> config.mak
2092
echo "SRC_PATH_BARE=$source_path" >> config.mak
2093
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2094

    
2095
# Apparently it's not possible to portably echo a backslash.
2096
enabled asmalign_pot &&
2097
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2098
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2099

    
2100

    
2101
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2102

    
2103
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2104
cmp -s $TMPH config.h &&
2105
    echo "config.h is unchanged" ||
2106
    mv -f $TMPH config.h
2107

    
2108
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2109

    
2110
# build tree in object directory if source path is different from current one
2111
if enabled source_path_used; then
2112
    DIRS="\
2113
        doc               \
2114
        libavcodec        \
2115
        libavcodec/alpha  \
2116
        libavcodec/armv4l \
2117
        libavcodec/bfin   \
2118
        libavcodec/i386   \
2119
        libavcodec/mlib   \
2120
        libavcodec/ppc    \
2121
        libavcodec/sh4    \
2122
        libavcodec/sparc  \
2123
        libavdevice       \
2124
        libavfilter       \
2125
        libavformat       \
2126
        libavutil         \
2127
        libpostproc       \
2128
        libswscale        \
2129
        tests             \
2130
        tools             \
2131
        vhook             \
2132
        "
2133
    FILES="\
2134
        Makefile             \
2135
        common.mak           \
2136
        doc/texi2pod.pl      \
2137
        libavcodec/Makefile  \
2138
        libavdevice/Makefile \
2139
        libavfilter/Makefile \
2140
        libavformat/Makefile \
2141
        libavutil/Makefile   \
2142
        libpostproc/Makefile \
2143
        libswscale/Makefile  \
2144
        "
2145
    for dir in $DIRS ; do
2146
        mkdir -p $dir
2147
    done
2148
    for f in $FILES ; do
2149
        $ln_s "$source_path/$f" $f
2150
    done
2151
fi
2152

    
2153

    
2154
# build pkg-config files
2155
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2156

    
2157
pkgconfig_generate(){
2158
name=$1
2159
comment=$2
2160
version=$3
2161
libs=$4
2162
requires=$5
2163
cat <<EOF >$name.pc
2164
prefix=$PREFIX
2165
exec_prefix=\${prefix}
2166
libdir=\${exec_prefix}/lib
2167
includedir=\${prefix}/include
2168

    
2169
Name: $name
2170
Description: $comment
2171
Version: $version
2172
Requires: $requires
2173
Conflicts:
2174
Libs: -L\${libdir} $libs
2175
Cflags: -I\${includedir}
2176
EOF
2177
}
2178

    
2179
pkgconfig_generate_uninstalled(){
2180
name=$1
2181
shortname=${name#lib}
2182
comment=$2
2183
version=$3
2184
libs=$4
2185
requires=$5
2186
cat <<EOF >$name-uninstalled.pc
2187
prefix=
2188
exec_prefix=
2189
libdir=\${pcfiledir}/$name
2190
includedir=\${pcfiledir}
2191

    
2192
Name: $name
2193
Description: $comment
2194
Version: $version
2195
Requires: $requires
2196
Conflicts:
2197
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2198
Cflags: -I\${includedir}
2199
EOF
2200
}
2201

    
2202
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2203
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2204

    
2205
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2206
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2207

    
2208
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2209
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2210

    
2211
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2212
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2213
if enabled pp; then
2214
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2215
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2216
fi
2217

    
2218
if enabled swscaler; then
2219
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2220
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2221
else
2222
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2223
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2224
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2225
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2226
fi
2227

    
2228
if enabled avfilter; then
2229
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2230
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2231
fi