Statistics
| Branch: | Revision:

ffmpeg / configure @ 9dc92a38

History | View | Annotate | Download (62.8 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
mpeg_xvmc_decoder_deps="xvmc"
791
png_decoder_deps="zlib"
792
png_encoder_deps="zlib"
793
zmbv_decoder_deps="zlib"
794
zmbv_encoder_deps="zlib"
795

    
796
# external libraries
797
liba52_decoder_deps="liba52"
798
liba52bin_decoder_extralibs='$ldl'
799
libamr_nb_decoder_deps="libamr_nb"
800
libamr_nb_encoder_deps="libamr_nb"
801
libamr_wb_decoder_deps="libamr_wb"
802
libamr_wb_encoder_deps="libamr_wb"
803
libfaac_encoder_deps="libfaac"
804
libfaad_decoder_deps="libfaad"
805
libfaadbin_decoder_extralibs='$ldl'
806
libgsm_decoder_deps="libgsm"
807
libgsm_encoder_deps="libgsm"
808
libgsm_ms_decoder_deps="libgsm"
809
libgsm_ms_encoder_deps="libgsm"
810
libmp3lame_encoder_deps="libmp3lame"
811
libtheora_encoder_deps="libtheora"
812
libvorbis_encoder_deps="libvorbis"
813
libx264_encoder_deps="libx264"
814
libxvid_encoder_deps="libxvid"
815
mpeg4aac_decoder_deps="libfaad"
816

    
817
# demuxers / muxers
818
ac3_demuxer_deps="ac3_parser"
819
audio_beos_demuxer_deps="audio_beos"
820
audio_beos_demuxer_extralibs="-lmedia -lbe"
821
audio_beos_muxer_deps="audio_beos"
822
audio_beos_muxer_extralibs="-lmedia -lbe"
823
avisynth_demuxer_deps="avisynth"
824
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
825
dv1394_demuxer_deps="dv1394 dv_demuxer"
826
libdc1394_demuxer_deps="libdc1394"
827
libnut_demuxer_deps="libnut"
828
libnut_muxer_deps="libnut"
829
mp3_demuxer_deps="mpegaudio_parser"
830
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
831
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
832
redir_demuxer_deps="network"
833
rtp_muxer_deps="network rtp_protocol"
834
rtsp_demuxer_deps="sdp_demuxer"
835
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
836
v4l2_demuxer_deps="linux_videodev2_h"
837
v4l_demuxer_deps="linux_videodev_h"
838
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
839
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
840

    
841
# protocols
842
http_protocol_deps="network"
843
rtp_protocol_deps="udp_protocol"
844
tcp_protocol_deps="network"
845
udp_protocol_deps="network"
846

    
847
# filters
848
movie_filter_deps="avfilter_lavf"
849

    
850
# programs
851
ffplay_deps="sdl"
852
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
853
ffserver_extralibs='$ldl'
854
vhook_extralibs='$ldl'
855

    
856

    
857
# set temporary file name
858
if test ! -z "$TMPDIR" ; then
859
    TMPDIR1="${TMPDIR}"
860
elif test ! -z "$TEMPDIR" ; then
861
    TMPDIR1="${TEMPDIR}"
862
else
863
    TMPDIR1="/tmp"
864
fi
865

    
866
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
867
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
868
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
869
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
870
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
871

    
872
# default parameters
873

    
874
enable logging
875
logfile="config.err"
876

    
877
# installation paths
878
PREFIX="/usr/local"
879
libdir='$(PREFIX)/lib'
880
shlibdir="$libdir"
881
incdir='$(PREFIX)/include'
882
mandir='$(PREFIX)/share/man'
883
bindir='$(PREFIX)/bin'
884

    
885
# toolchain
886
cc="gcc"
887
ar="ar"
888
ranlib="ranlib"
889
make="make"
890
strip="strip"
891
asmalign_pot="unknown"
892
ln_s="ln -sf"
893

    
894
# machine
895
arch=`uname -m`
896
cpu="generic"
897

    
898
# OS
899
targetos=$(tolower $(uname -s))
900

    
901
# libraries
902
enable zlib
903

    
904
# configurable options
905
enable debug
906
enable dostrip
907
enable ffmpeg
908
enable ffplay
909
enable ffserver
910
enable ipv6
911
enable static
912
enable mpegaudio_hp
913
enable network
914
enable optimizations
915
enable protocols
916
vhook="default"
917

    
918
# build settings
919
SHFLAGS='-shared -Wl,-soname,$@'
920
VHOOKSHFLAGS='$(SHFLAGS)'
921
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
922
FFSERVERLDFLAGS=-Wl,-E
923
LIBPREF="lib"
924
LIBSUF=".a"
925
FULLNAME='$(NAME)$(BUILDSUF)'
926
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
927
SLIBPREF="lib"
928
SLIBSUF=".so"
929
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
930
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
931
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
932
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
933

    
934
# find source path
935
source_path="`dirname \"$0\"`"
936
enable source_path_used
937
if test -z "$source_path" -o "$source_path" = "." ; then
938
    source_path="`pwd`"
939
    disable source_path_used
940
else
941
    source_path="`cd \"$source_path\"; pwd`"
942
    echo "$source_path" | grep -q '[[:blank:]]' &&
943
        die "Out of tree builds are impossible with whitespace in source path."
944
fi
945

    
946
FFMPEG_CONFIGURATION="$@"
947

    
948
find_things(){
949
    thing=$1
950
    pattern=$2
951
    file=$source_path/$3
952
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
953
}
954

    
955
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
956
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
957
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
958
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
959
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
960
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
961
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
962
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
963
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
964
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
965

    
966
enable $ARCH_EXT_LIST \
967
       $DECODER_LIST \
968
       $ENCODER_LIST \
969
       $PARSER_LIST \
970
       $BSF_LIST \
971
       $DEMUXER_LIST \
972
       $MUXER_LIST \
973
       $FILTER_LIST \
974
       $PROTOCOL_LIST \
975
       $INDEV_LIST \
976
       $OUTDEV_LIST \
977

    
978
die_unknown(){
979
    echo "Unknown option \"$1\"."
980
    echo "See $0 --help for available options."
981
    exit 1
982
}
983

    
984
show_list() {
985
    suffix=_$1
986
    shift
987
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
988
    exit 0
989
}
990

    
991
for opt do
992
    optval="${opt#*=}"
993
    case "$opt" in
994
    --log)
995
    ;;
996
    --log=*) logging="$optval"
997
    ;;
998
    --prefix=*) PREFIX="$optval"
999
    ;;
1000
    --libdir=*) libdir="$optval"
1001
    ;;
1002
    --shlibdir=*) shlibdir="$optval"
1003
    ;;
1004
    --incdir=*) incdir="$optval"
1005
    ;;
1006
    --mandir=*) mandir="$optval"
1007
    ;;
1008
    --source-path=*) source_path="$optval"
1009
    ;;
1010
    --cross-prefix=*) cross_prefix="$optval"
1011
    ;;
1012
    --cross-compile) enable cross_compile
1013
    ;;
1014
    --target-os=*) targetos="$optval"
1015
    ;;
1016
    --cc=*) cc="$optval"
1017
    ;;
1018
    --make=*) make="$optval"
1019
    ;;
1020
    --extra-cflags=*) add_cflags "$optval"
1021
    ;;
1022
    --extra-ldflags=*) add_ldflags "$optval"
1023
    ;;
1024
    --extra-libs=*) add_extralibs "$optval"
1025
    ;;
1026
    --build-suffix=*) BUILDSUF="$optval"
1027
    ;;
1028
    --arch=*) arch="$optval"
1029
    ;;
1030
    --cpu=*) cpu="$optval"
1031
    ;;
1032
    --enable-sunmlib) enable mlib
1033
    ;;
1034
    --disable-strip) disable dostrip
1035
    ;;
1036
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1037
    ;;
1038
    --enable-debug=*) debuglevel="$optval"
1039
    ;;
1040
    --enable-*=*|--disable-*=*)
1041
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1042
    case "$thing" in
1043
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1044
        *) die_unknown "$opt" ;;
1045
    esac
1046
    ;;
1047
    --enable-?*|--disable-?*)
1048
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1049
    if is_in $option $COMPONENT_LIST; then
1050
        eval $action \$$(toupper ${option%s})_LIST
1051
    elif is_in $option $CMDLINE_SELECT; then
1052
        $action $option
1053
    else
1054
        die_unknown $opt
1055
    fi
1056
    ;;
1057
    --list-*)
1058
        NAME="${opt#--list-}"
1059
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1060
        NAME=${NAME%s}
1061
        eval show_list $NAME \$$(toupper $NAME)_LIST
1062
    ;;
1063
    --help|-h) show_help
1064
    ;;
1065
    *)
1066
    die_unknown $opt
1067
    ;;
1068
    esac
1069
done
1070

    
1071
case "$arch" in
1072
    i386|i486|i586|i686|i86pc|BePC)
1073
        arch="x86_32"
1074
        enable fast_unaligned
1075
    ;;
1076
    x86_64|amd64)
1077
        arch="x86_32"
1078
        enable fast_unaligned
1079
        canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1080
        if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1081
            if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1082
                arch="x86_64"
1083
                enable fast_64bit
1084
            fi
1085
        fi
1086
    ;;
1087
    # armv4l is a subset of armv[567]*l
1088
    arm|armv[4567]*l)
1089
        arch="armv4l"
1090
    ;;
1091
    alpha)
1092
        arch="alpha"
1093
        enable fast_64bit
1094
    ;;
1095
    "Power Macintosh"|ppc|powerpc)
1096
        arch="powerpc"
1097
    ;;
1098
    ppc64)
1099
        arch="powerpc"
1100
        enable fast_64bit
1101
    ;;
1102
    mips|mipsel|IP*)
1103
        arch="mips"
1104
    ;;
1105
    sun4u|sparc64)
1106
        arch="sparc64"
1107
        enable fast_64bit
1108
    ;;
1109
    sparc)
1110
        arch="sparc"
1111
    ;;
1112
    sh4)
1113
        arch="sh4"
1114
    ;;
1115
    parisc)
1116
        arch="parisc"
1117
    ;;
1118
    parisc64)
1119
        arch="parisc"
1120
        enable fast_64bit
1121
    ;;
1122
    s390|s390x)
1123
        arch="s390"
1124
    ;;
1125
    m68k)
1126
        arch="m68k"
1127
    ;;
1128
    ia64)
1129
        arch="ia64"
1130
        enable fast_64bit
1131
    ;;
1132
    bfin)
1133
        arch="bfin"
1134
    ;;
1135
    *)
1136
        arch="unknown"
1137
    ;;
1138
esac
1139

    
1140
enable $arch
1141
enabled_any x86_32 x86_64 && enable x86
1142
enabled     sparc64       && enable sparc
1143

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

    
1290
    *)
1291
        targetos="${targetos}-UNKNOWN"
1292
        ;;
1293
esac
1294

    
1295
add_extralibs $osextralibs
1296

    
1297
if ! disabled logging ; then
1298
    enabled logging || logfile="$logging"
1299
    echo "# $0 $@" >$logfile
1300
    set >>$logfile
1301
else
1302
    logfile=/dev/null
1303
fi
1304

    
1305
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1306
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1307

    
1308
test -n "$cross_prefix" && enable cross_compile
1309
cc="${cross_prefix}${cc}"
1310
ar="${cross_prefix}${ar}"
1311
ranlib="${cross_prefix}${ranlib}"
1312
strip="${cross_prefix}${strip}"
1313

    
1314
# we need to build at least one lib type
1315
if ! enabled_any static shared; then
1316
    cat <<EOF
1317
At least one library type must be built.
1318
Specify --enable-static to build the static libraries or --enable-shared to
1319
build the shared libraries as well. To only build the shared libraries specify
1320
--disable-static in addition to --enable-shared.
1321
EOF
1322
    exit 1;
1323
fi
1324

    
1325
disabled static && LIBNAME=""
1326

    
1327
if enabled_any libfaad libfaadbin ; then
1328
    if check_header faad.h; then
1329
        check_cc << EOF
1330
#include <faad.h>
1331
#ifndef FAAD2_VERSION
1332
ok faad1
1333
#endif
1334
int main(void) { return 0; }
1335
EOF
1336
        test $? = 0 && enable libfaad2
1337
    else
1338
        die "FAAD test failed."
1339
    fi
1340
fi
1341

    
1342

    
1343
if ! enabled gpl; then
1344
    die_gpl_disabled(){
1345
        name=$1
1346
        shift
1347
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1348
    }
1349
    die_gpl_disabled "The Postprocessing code" pp
1350
    die_gpl_disabled "liba52"                  liba52
1351
    die_gpl_disabled "libx264"                 libx264
1352
    die_gpl_disabled "libxvidcore"             libxvid
1353
    die_gpl_disabled "FAAD2"                   libfaad2
1354
    die_gpl_disabled "The X11 grabber"         x11grab
1355
    die_gpl_disabled "The software scaler"     swscaler
1356
fi
1357

    
1358
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1359
    die "libamr is nonfree and --enable-nonfree is not specified."
1360
fi
1361

    
1362
check_deps $ARCH_EXT_LIST
1363

    
1364
test -z "$need_memalign" && need_memalign="$mmx"
1365

    
1366
#Darwin CC versions
1367
if test $targetos = darwin; then
1368
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1369
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1370
    else
1371
        add_cflags "-pipe"
1372
        check_cflags "-force_cpusubtype_ALL"
1373
        check_cflags "-Wno-sign-compare"
1374
        disabled shared && add_cflags -mdynamic-no-pic
1375
    fi
1376
fi
1377

    
1378
disabled optimizations || add_cflags -fomit-frame-pointer
1379

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

    
1449
gnu_make(){
1450
    $1 --version 2>&1 | grep -q GNU
1451
}
1452

    
1453
if ! gnu_make $make; then
1454
    gnu_make gmake && make=gmake || die "GNU make not found."
1455
fi
1456

    
1457
# make sure we can execute files in $TMPDIR
1458
cat >$TMPE 2>>$logfile <<EOF
1459
#! /bin/sh
1460
EOF
1461
chmod +x $TMPE >>$logfile 2>&1
1462
if ! $TMPE >>$logfile 2>&1; then
1463
    cat <<EOF
1464
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1465
variable to another directory and make sure that $TMPDIR1 is not mounted
1466
noexec.
1467
EOF
1468
    die "Sanity test failed."
1469
fi
1470
rm $TMPE
1471

    
1472
# compiler sanity check
1473
check_exec <<EOF
1474
int main(void){
1475
    return 0;
1476
}
1477
EOF
1478
if test "$?" != 0; then
1479
    echo "$cc is unable to create an executable file."
1480
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1481
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1482
        echo "Only do this if you know what cross compiling means."
1483
    fi
1484
    die "C compiler test failed."
1485
fi
1486

    
1487
check_asm inline_asm '""'
1488

    
1489
if enabled x86; then
1490
    # check whether EBP is available on x86
1491
    # As 'i' is stored on the stack, this program will crash
1492
    # if the base pointer is used to access it because the
1493
    # base pointer is cleared in the inline assembly code.
1494
    check_exec_crash <<EOF && enable ebp_available
1495
    volatile int i=0;
1496
    asm volatile (
1497
        "xorl %%ebp, %%ebp"
1498
    ::: "%ebp");
1499
    return i;
1500
EOF
1501

    
1502
    # check wether EBX is available on x86
1503
    check_asm ebx_available '"":::"%ebx"'
1504

    
1505
    # check whether binutils is new enough to compile SSSE3
1506
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1507
fi
1508

    
1509
# check for assembler specific support
1510

    
1511
if test $arch = "powerpc"; then
1512
check_cc <<EOF && enable dcbzl
1513
int main(void) {
1514
    register long zero = 0;
1515
    char data[1024];
1516
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1517
return 0;
1518
}
1519
EOF
1520
fi
1521

    
1522
# check for SIMD availability
1523

    
1524
# AltiVec flags: The FSF version of GCC differs from the Apple version
1525
if enabled altivec; then
1526
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1527
        add_cflags "-faltivec" ||
1528
        add_cflags "-maltivec -mabi=altivec"
1529

    
1530
    check_header altivec.h
1531

    
1532
    # check if our compiler supports Motorola AltiVec C API
1533
    enabled altivec_h &&
1534
        inc_altivec_h="#include <altivec.h>" ||
1535
        inc_altivec_h=
1536
    check_cc <<EOF || disable altivec
1537
$inc_altivec_h
1538
int main(void) {
1539
    vector signed int v1, v2, v3;
1540
    v1 = vec_add(v2,v3);
1541
    return 0;
1542
}
1543
EOF
1544
fi
1545

    
1546
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1547
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1548
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1549
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1550
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1551

    
1552
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1553

    
1554
# ---
1555
# big/little-endian test
1556
check_cc <<EOF || die "endian test failed"
1557
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1558
EOF
1559
tr -c -d BIGE < $TMPO | grep -q BIGE && enable bigendian
1560

    
1561
# ---
1562
# check availability of some header files
1563

    
1564
if check_func dlopen; then
1565
    ldl=
1566
elif check_func dlopen -ldl; then
1567
    ldl=-ldl
1568
fi
1569

    
1570
check_func  fork
1571
check_func  gethrtime
1572
check_func  getrusage
1573
check_func  inet_aton $network_extralibs
1574
check_func  memalign
1575
check_func  mkstemp
1576
check_func2 windows.h GetProcessTimes
1577

    
1578
check_header byteswap.h
1579
check_header conio.h
1580
check_header dlfcn.h
1581
check_header malloc.h
1582
check_header termios.h
1583

    
1584
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1585
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1586
fi
1587

    
1588
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1589

    
1590
# ffserver uses poll(),
1591
# if it's not found we can emulate it using select().
1592
if enabled ffserver; then
1593
    check_header poll.h
1594
    check_header sys/select.h
1595
fi
1596

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

    
1613
for thread in $THREADS_LIST; do
1614
    if enabled $thread; then
1615
        test -n "$thread_type" &&
1616
            die "ERROR: Only one thread type must be selected." ||
1617
            thread_type="$thread"
1618
    fi
1619
done
1620

    
1621
check_lib math.h sin -lm
1622

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

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

    
1648
# disable the native AC-3 decoder if liba52 is enabled
1649
enabled liba52 && disable ac3_decoder
1650

    
1651
# libdc1394 check
1652
if enabled libdc1394; then
1653
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1654
        enable libdc1394_2; } ||
1655
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1656
        enable libdc1394_1; } ||
1657
    die "ERROR: No version of libdc1394 found "
1658
fi
1659

    
1660

    
1661
_restrict=
1662
for restrict_keyword in restrict __restrict__ __restrict; do
1663
    check_cc <<EOF && _restrict=$restrict_keyword && break
1664
void foo(char * $restrict_keyword p);
1665
EOF
1666
done
1667

    
1668
test "$vhook" = "default" && vhook="$dlopen"
1669

    
1670
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1671
    disable vhook
1672
    echo
1673
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1674
    echo "Patches welcome."
1675
    echo
1676
fi
1677

    
1678
if enabled vhook; then
1679
    check_ldflags -rdynamic
1680
    check_ldflags -export-dynamic
1681
fi
1682

    
1683
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1684
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1685

    
1686
##########################################
1687
# SDL check
1688

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

    
1715
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1716

    
1717
check_type sys/socket.h socklen_t
1718

    
1719
##########################################
1720
# Network check
1721

    
1722
if enabled network; then
1723
    # Prefer arpa/inet.h over winsock2
1724
    if check_header arpa/inet.h ; then
1725
        check_func closesocket
1726
    elif check_header winsock2.h ; then
1727
        network_extralibs="-lws2_32"
1728
        check_type ws2tcpip.h socklen_t
1729
        check_func2 winsock2.h closesocket
1730
    fi
1731
fi
1732

    
1733
##########################################
1734
# IPv6 check
1735

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

    
1750
check_header linux/videodev.h
1751
check_header linux/videodev2.h
1752

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

    
1762
check_header sys/soundcard.h
1763
check_header soundcard.h
1764

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

    
1772
enabled debug && add_cflags -g"$debuglevel"
1773

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

    
1787
# add some linker flags
1788
check_ldflags -Wl,--warn-common
1789
check_ldflags $LDLATEFLAGS
1790
check_ldflags -Wl,-Bsymbolic
1791

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

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

    
1816
if enabled gprof; then
1817
    add_cflags  "-p"
1818
    add_ldflags "-p"
1819
fi
1820

    
1821
VHOOKCFLAGS="-fPIC"
1822

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

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

    
1839
enabled_any $THREADS_LIST      && enable threads
1840

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

    
1854
enabled libdc1394 && append pkg_requires "libraw1394"
1855
enabled libtheora && append pkg_requires "theora"
1856
enabled libvorbis && append pkg_requires "vorbisenc"
1857

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

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

    
1940
enabled nonfree &&
1941
    echo "License: unredistributable" ||
1942
    (enabled gpl &&
1943
        echo "License: GPL" ||
1944
        echo "License: LGPL")
1945

    
1946
echo "Creating config.mak and config.h..."
1947

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

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

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

    
1988
if enabled bigendian; then
1989
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1990
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1991
fi
1992
if enabled mmx; then
1993
    echo "#define __CPU__ 586" >> $TMPH
1994
fi
1995

    
1996
if enabled sdl; then
1997
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1998
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1999
fi
2000
if enabled texi2html; then
2001
    echo "BUILD_DOC=yes" >> config.mak
2002
fi
2003

    
2004
get_version(){
2005
    name=$1
2006
    file=$source_path/$2
2007
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2008
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2009
}
2010

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

    
2019
if enabled shared; then
2020
    echo "BUILD_SHARED=yes" >> config.mak
2021
    echo "PIC=-fPIC -DPIC" >> config.mak
2022
    echo "SPPMAJOR=$LIBPOSTPROC_VERSION_MAJOR" >> config.mak
2023
    echo "SPPVERSION=$LIBPOSTPROC_VERSION" >> config.mak
2024
    echo "LAVCMAJOR=$LIBAVCODEC_VERSION_MAJOR" >> config.mak
2025
    echo "LAVCVERSION=$LIBAVCODEC_VERSION" >> config.mak
2026
    echo "LAVDMAJOR=$LIBAVDEVICE_VERSION_MAJOR" >> config.mak
2027
    echo "LAVDVERSION=$LIBAVDEVICE_VERSION" >> config.mak
2028
    echo "LAVFMAJOR=$LIBAVFORMAT_VERSION_MAJOR" >> config.mak
2029
    echo "LAVFVERSION=$LIBAVFORMAT_VERSION" >> config.mak
2030
    echo "LAVUMAJOR=$LIBAVUTIL_VERSION_MAJOR" >> config.mak
2031
    echo "LAVUVERSION=$LIBAVUTIL_VERSION" >> config.mak
2032
    echo "LAVFIMAJOR=$LIBAVFILTER_VERSION_MAJOR" >> config.mak
2033
    echo "LAVFIVERSION=$LIBAVFILTER_VERSION" >> config.mak
2034
    echo "SWSMAJOR=$LIBSWSCALE_VERSION_MAJOR" >> config.mak
2035
    echo "SWSVERSION=$LIBSWSCALE_VERSION" >> config.mak
2036
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2037
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2038
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2039
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2040
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2041
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2042
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2043
fi
2044
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2045
echo "EXTRALIBS=$extralibs" >> config.mak
2046

    
2047
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2048
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2049
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2050
                                      $DECODER_LIST      \
2051
                                      $ENCODER_LIST      \
2052
                                      $PARSER_LIST       \
2053
                                      $BSF_LIST          \
2054
                                      $DEMUXER_LIST      \
2055
                                      $MUXER_LIST        \
2056
                                      $FILTER_LIST       \
2057
                                      $PROTOCOL_LIST     \
2058
                                      $INDEV_LIST        \
2059
                                      $OUTDEV_LIST       \
2060

    
2061
echo "#define restrict $_restrict" >> $TMPH
2062

    
2063
if enabled small; then
2064
    echo "#define av_always_inline"  >> $TMPH
2065
fi
2066

    
2067
echo "SRC_PATH=\"$source_path\"" >> config.mak
2068
echo "SRC_PATH_BARE=$source_path" >> config.mak
2069
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2070

    
2071
# Apparently it's not possible to portably echo a backslash.
2072
enabled asmalign_pot &&
2073
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2074
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2075

    
2076

    
2077
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2078

    
2079
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2080
cmp -s $TMPH config.h &&
2081
    echo "config.h is unchanged" ||
2082
    mv -f $TMPH config.h
2083

    
2084
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2085

    
2086
# build tree in object directory if source path is different from current one
2087
if enabled source_path_used; then
2088
    DIRS="\
2089
        doc               \
2090
        libavcodec        \
2091
        libavcodec/alpha  \
2092
        libavcodec/armv4l \
2093
        libavcodec/bfin   \
2094
        libavcodec/i386   \
2095
        libavcodec/mlib   \
2096
        libavcodec/ppc    \
2097
        libavcodec/sh4    \
2098
        libavcodec/sparc  \
2099
        libavdevice       \
2100
        libavfilter       \
2101
        libavformat       \
2102
        libavutil         \
2103
        libpostproc       \
2104
        libswscale        \
2105
        tests             \
2106
        tools             \
2107
        vhook             \
2108
        "
2109
    FILES="\
2110
        Makefile             \
2111
        common.mak           \
2112
        doc/texi2pod.pl      \
2113
        libavcodec/Makefile  \
2114
        libavdevice/Makefile \
2115
        libavfilter/Makefile \
2116
        libavformat/Makefile \
2117
        libavutil/Makefile   \
2118
        libpostproc/Makefile \
2119
        libswscale/Makefile  \
2120
        "
2121
    for dir in $DIRS ; do
2122
        mkdir -p $dir
2123
    done
2124
    for f in $FILES ; do
2125
        $ln_s "$source_path/$f" $f
2126
    done
2127
fi
2128

    
2129

    
2130
# build pkg-config files
2131
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2132

    
2133
pkgconfig_generate(){
2134
name=$1
2135
comment=$2
2136
version=$3
2137
libs=$4
2138
requires=$5
2139
cat <<EOF >$name.pc
2140
prefix=$PREFIX
2141
exec_prefix=\${prefix}
2142
libdir=\${exec_prefix}/lib
2143
includedir=\${prefix}/include
2144

    
2145
Name: $name
2146
Description: $comment
2147
Version: $version
2148
Requires: $requires
2149
Conflicts:
2150
Libs: -L\${libdir} $libs
2151
Cflags: -I\${includedir}
2152
EOF
2153
}
2154

    
2155
pkgconfig_generate_uninstalled(){
2156
name=$1
2157
shortname=${name#lib}
2158
comment=$2
2159
version=$3
2160
libs=$4
2161
requires=$5
2162
cat <<EOF >$name-uninstalled.pc
2163
prefix=
2164
exec_prefix=
2165
libdir=\${pcfiledir}/$name
2166
includedir=\${pcfiledir}
2167

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

    
2178
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2179
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2180

    
2181
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2182
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2183

    
2184
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2185
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2186

    
2187
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2188
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2189
if enabled pp; then
2190
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2191
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2192
fi
2193

    
2194
if enabled swscaler; then
2195
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2196
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2197
else
2198
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2199
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2200
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2201
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2202
fi
2203

    
2204
if enabled avfilter; then
2205
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2206
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2207
fi