Statistics
| Branch: | Revision:

ffmpeg / configure @ 241227d8

History | View | Annotate | Download (63.1 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-encoders) disable $ENCODER_LIST
1037
    ;;
1038
    --disable-decoders) disable $DECODER_LIST
1039
    ;;
1040
    --disable-muxers) disable $MUXER_LIST
1041
    ;;
1042
    --disable-filters) disable $FILTER_LIST
1043
    ;;
1044
    --disable-demuxers) disable $DEMUXER_LIST
1045
    ;;
1046
    --disable-parsers) disable $PARSER_LIST
1047
    ;;
1048
    --disable-bsfs) disable $BSF_LIST
1049
    ;;
1050
    --disable-protocols) disable $PROTOCOL_LIST
1051
    ;;
1052
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1053
    ;;
1054
    --enable-debug=*) debuglevel="$optval"
1055
    ;;
1056
    --enable-*=*|--disable-*=*)
1057
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1058
    case "$thing" in
1059
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1060
        *) die_unknown "$opt" ;;
1061
    esac
1062
    ;;
1063
    --enable-?*|--disable-?*)
1064
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1065
    echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
1066
    $action $option
1067
    ;;
1068
    --list-*)
1069
        NAME="${opt#--list-}"
1070
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1071
        NAME=${NAME%s}
1072
        eval show_list $NAME \$$(toupper $NAME)_LIST
1073
    ;;
1074
    --help|-h) show_help
1075
    ;;
1076
    *)
1077
    die_unknown $opt
1078
    ;;
1079
    esac
1080
done
1081

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

    
1151
enable $arch
1152
enabled_any x86_32 x86_64 && enable x86
1153
enabled     sparc64       && enable sparc
1154

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

    
1301
    *)
1302
        targetos="${targetos}-UNKNOWN"
1303
        ;;
1304
esac
1305

    
1306
add_extralibs $osextralibs
1307

    
1308
if ! disabled logging ; then
1309
    enabled logging || logfile="$logging"
1310
    echo "# $0 $@" >$logfile
1311
    set >>$logfile
1312
else
1313
    logfile=/dev/null
1314
fi
1315

    
1316
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1317
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1318

    
1319
test -n "$cross_prefix" && enable cross_compile
1320
cc="${cross_prefix}${cc}"
1321
ar="${cross_prefix}${ar}"
1322
ranlib="${cross_prefix}${ranlib}"
1323
strip="${cross_prefix}${strip}"
1324

    
1325
# we need to build at least one lib type
1326
if ! enabled_any static shared; then
1327
    cat <<EOF
1328
At least one library type must be built.
1329
Specify --enable-static to build the static libraries or --enable-shared to
1330
build the shared libraries as well. To only build the shared libraries specify
1331
--disable-static in addition to --enable-shared.
1332
EOF
1333
    exit 1;
1334
fi
1335

    
1336
disabled static && LIBNAME=""
1337

    
1338
if enabled_any libfaad libfaadbin ; then
1339
    if check_header faad.h; then
1340
        check_cc << EOF
1341
#include <faad.h>
1342
#ifndef FAAD2_VERSION
1343
ok faad1
1344
#endif
1345
int main(void) { return 0; }
1346
EOF
1347
        test $? = 0 && enable libfaad2
1348
    else
1349
        die "FAAD test failed."
1350
    fi
1351
fi
1352

    
1353

    
1354
if ! enabled gpl; then
1355
    die_gpl_disabled(){
1356
        name=$1
1357
        shift
1358
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1359
    }
1360
    die_gpl_disabled "The Postprocessing code" pp
1361
    die_gpl_disabled "liba52"                  liba52
1362
    die_gpl_disabled "libx264"                 libx264
1363
    die_gpl_disabled "libxvidcore"             libxvid
1364
    die_gpl_disabled "FAAD2"                   libfaad2
1365
    die_gpl_disabled "The X11 grabber"         x11grab
1366
    die_gpl_disabled "The software scaler"     swscaler
1367
fi
1368

    
1369
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1370
    die "libamr is nonfree and --enable-nonfree is not specified."
1371
fi
1372

    
1373
check_deps $ARCH_EXT_LIST
1374

    
1375
test -z "$need_memalign" && need_memalign="$mmx"
1376

    
1377
#Darwin CC versions
1378
if test $targetos = darwin; then
1379
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1380
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1381
    else
1382
        add_cflags "-pipe"
1383
        check_cflags "-force_cpusubtype_ALL"
1384
        check_cflags "-Wno-sign-compare"
1385
        disabled shared && add_cflags -mdynamic-no-pic
1386
    fi
1387
fi
1388

    
1389
disabled optimizations || add_cflags -fomit-frame-pointer
1390

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

    
1460
gnu_make(){
1461
    $1 --version 2>&1 | grep -q GNU
1462
}
1463

    
1464
if ! gnu_make $make; then
1465
    gnu_make gmake && make=gmake || die "GNU make not found."
1466
fi
1467

    
1468
# make sure we can execute files in $TMPDIR
1469
cat >$TMPE 2>>$logfile <<EOF
1470
#! /bin/sh
1471
EOF
1472
chmod +x $TMPE >>$logfile 2>&1
1473
if ! $TMPE >>$logfile 2>&1; then
1474
    cat <<EOF
1475
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1476
variable to another directory and make sure that $TMPDIR1 is not mounted
1477
noexec.
1478
EOF
1479
    die "Sanity test failed."
1480
fi
1481
rm $TMPE
1482

    
1483
# compiler sanity check
1484
check_exec <<EOF
1485
int main(void){
1486
    return 0;
1487
}
1488
EOF
1489
if test "$?" != 0; then
1490
    echo "$cc is unable to create an executable file."
1491
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1492
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1493
        echo "Only do this if you know what cross compiling means."
1494
    fi
1495
    die "C compiler test failed."
1496
fi
1497

    
1498
check_asm inline_asm '""'
1499

    
1500
if enabled x86; then
1501
    # check whether EBP is available on x86
1502
    # As 'i' is stored on the stack, this program will crash
1503
    # if the base pointer is used to access it because the
1504
    # base pointer is cleared in the inline assembly code.
1505
    check_exec_crash <<EOF && enable ebp_available
1506
    volatile int i=0;
1507
    asm volatile (
1508
        "xorl %%ebp, %%ebp"
1509
    ::: "%ebp");
1510
    return i;
1511
EOF
1512

    
1513
    # check wether EBX is available on x86
1514
    check_asm ebx_available '"":::"%ebx"'
1515

    
1516
    # check whether binutils is new enough to compile SSSE3
1517
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1518
fi
1519

    
1520
# check for assembler specific support
1521

    
1522
if test $arch = "powerpc"; then
1523
check_cc <<EOF && enable dcbzl
1524
int main(void) {
1525
    register long zero = 0;
1526
    char data[1024];
1527
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1528
return 0;
1529
}
1530
EOF
1531
fi
1532

    
1533
# check for SIMD availability
1534

    
1535
# AltiVec flags: The FSF version of GCC differs from the Apple version
1536
if enabled altivec; then
1537
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1538
        add_cflags "-faltivec" ||
1539
        add_cflags "-maltivec -mabi=altivec"
1540

    
1541
    check_header altivec.h
1542

    
1543
    # check if our compiler supports Motorola AltiVec C API
1544
    enabled altivec_h &&
1545
        inc_altivec_h="#include <altivec.h>" ||
1546
        inc_altivec_h=
1547
    check_cc <<EOF || disable altivec
1548
$inc_altivec_h
1549
int main(void) {
1550
    vector signed int v1, v2, v3;
1551
    v1 = vec_add(v2,v3);
1552
    return 0;
1553
}
1554
EOF
1555
fi
1556

    
1557
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1558
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1559
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1560
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1561
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1562

    
1563
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1564

    
1565
# ---
1566
# big/little-endian test
1567
check_cc <<EOF || die "endian test failed"
1568
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1569
EOF
1570
tr -c -d BIGE < $TMPO | grep -q BIGE && enable bigendian
1571

    
1572
# ---
1573
# check availability of some header files
1574

    
1575
if check_func dlopen; then
1576
    ldl=
1577
elif check_func dlopen -ldl; then
1578
    ldl=-ldl
1579
fi
1580

    
1581
check_func  fork
1582
check_func  gethrtime
1583
check_func  getrusage
1584
check_func  inet_aton $network_extralibs
1585
check_func  memalign
1586
check_func  mkstemp
1587
check_func2 windows.h GetProcessTimes
1588

    
1589
check_header byteswap.h
1590
check_header conio.h
1591
check_header dlfcn.h
1592
check_header malloc.h
1593
check_header termios.h
1594

    
1595
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1596
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1597
fi
1598

    
1599
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1600

    
1601
# ffserver uses poll(),
1602
# if it's not found we can emulate it using select().
1603
if enabled ffserver; then
1604
    check_header poll.h
1605
    check_header sys/select.h
1606
fi
1607

    
1608
# check for some common methods of building with pthread support
1609
# do this before the optional library checks as some of them require pthreads
1610
if enabled pthreads; then
1611
    if check_func pthread_create; then
1612
        :
1613
    elif check_func pthread_create -pthread; then
1614
        add_cflags -pthread
1615
        add_extralibs -pthread
1616
    elif check_func pthread_create -pthreads; then
1617
        add_cflags -pthreads
1618
        add_extralibs -pthreads
1619
    elif ! check_lib pthread.h pthread_create -lpthread; then
1620
        die "ERROR: can't find pthreads library"
1621
    fi
1622
fi
1623

    
1624
for thread in $THREADS_LIST; do
1625
    if enabled $thread; then
1626
        test -n "$thread_type" &&
1627
            die "ERROR: Only one thread type must be selected." ||
1628
            thread_type="$thread"
1629
    fi
1630
done
1631

    
1632
check_lib math.h sin -lm
1633

    
1634
# test for C99 functions in math.h
1635
for func in llrint lrint lrintf round roundf; do
1636
    check_exec <<EOF && enable $func || disable $func
1637
#define _ISOC9X_SOURCE  1
1638
#include <math.h>
1639
int main(void) { return ($func(3.999f) > 0)?0:1; }
1640
EOF
1641
done
1642

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

    
1659
# disable the native AC-3 decoder if liba52 is enabled
1660
enabled liba52 && disable ac3_decoder
1661

    
1662
# libdc1394 check
1663
if enabled libdc1394; then
1664
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1665
        enable libdc1394_2; } ||
1666
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1667
        enable libdc1394_1; } ||
1668
    die "ERROR: No version of libdc1394 found "
1669
fi
1670

    
1671

    
1672
_restrict=
1673
for restrict_keyword in restrict __restrict__ __restrict; do
1674
    check_cc <<EOF && _restrict=$restrict_keyword && break
1675
void foo(char * $restrict_keyword p);
1676
EOF
1677
done
1678

    
1679
test "$vhook" = "default" && vhook="$dlopen"
1680

    
1681
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1682
    disable vhook
1683
    echo
1684
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1685
    echo "Patches welcome."
1686
    echo
1687
fi
1688

    
1689
if enabled vhook; then
1690
    check_ldflags -rdynamic
1691
    check_ldflags -export-dynamic
1692
fi
1693

    
1694
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1695
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1696

    
1697
##########################################
1698
# SDL check
1699

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

    
1726
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1727

    
1728
check_type sys/socket.h socklen_t
1729

    
1730
##########################################
1731
# Network check
1732

    
1733
if enabled network; then
1734
    # Prefer arpa/inet.h over winsock2
1735
    if check_header arpa/inet.h ; then
1736
        check_func closesocket
1737
    elif check_header winsock2.h ; then
1738
        network_extralibs="-lws2_32"
1739
        check_type ws2tcpip.h socklen_t
1740
        check_func2 winsock2.h closesocket
1741
    fi
1742
fi
1743

    
1744
##########################################
1745
# IPv6 check
1746

    
1747
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1748
#include <sys/types.h>
1749
#include <sys/socket.h>
1750
#include <netinet/in.h>
1751
#include <netdb.h>
1752
int main(void) {
1753
    struct sockaddr_storage saddr;
1754
    struct ipv6_mreq mreq6;
1755
    getaddrinfo(0,0,0,0);
1756
    getnameinfo(0,0,0,0,0,0,0);
1757
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1758
}
1759
EOF
1760

    
1761
check_header linux/videodev.h
1762
check_header linux/videodev2.h
1763

    
1764
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1765
{ check_header dev/bktr/ioctl_meteor.h &&
1766
  check_header dev/bktr/ioctl_bt848.h; } ||
1767
{ check_header machine/ioctl_meteor.h &&
1768
  check_header machine/ioctl_bt848.h; } ||
1769
{ check_header dev/video/meteor/ioctl_meteor.h &&
1770
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1771
check_header dev/ic/bt8xx.h
1772

    
1773
check_header sys/soundcard.h
1774
check_header soundcard.h
1775

    
1776
# deal with the X11 frame grabber
1777
enabled x11grab                         &&
1778
check_header X11/Xlib.h                 &&
1779
check_header X11/extensions/XShm.h      &&
1780
check_func XOpenDisplay -lX11           &&
1781
check_func XShmCreateImage -lX11 -lXext
1782

    
1783
enabled debug && add_cflags -g"$debuglevel"
1784

    
1785
# add some useful compiler flags if supported
1786
check_cflags -Wdeclaration-after-statement
1787
check_cflags -Wall
1788
check_cflags -Wno-switch
1789
check_cflags -Wdisabled-optimization
1790
check_cflags -Wpointer-arith
1791
check_cflags -Wredundant-decls
1792
check_cflags -Wno-pointer-sign
1793
check_cflags -Wcast-qual
1794
check_cflags -Wwrite-strings
1795
check_cflags -Wtype-limits
1796
enabled extra_warnings && check_cflags -Winline
1797

    
1798
# add some linker flags
1799
check_ldflags -Wl,--warn-common
1800
check_ldflags $LDLATEFLAGS
1801
check_ldflags -Wl,-Bsymbolic
1802

    
1803
if enabled small; then
1804
    check_cflags -Os            # not all compilers support -Os
1805
    optimizations="small"
1806
elif enabled optimizations; then
1807
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1808
        add_cflags  "-O5"
1809
        add_ldflags "-O5"
1810
    else
1811
        add_cflags "-O3"
1812
    fi
1813
fi
1814
check_cflags -fno-math-errno
1815
check_cflags -fno-signed-zeros
1816

    
1817
# PIC flags for shared library objects where they are needed
1818
if enabled shared; then
1819
    # LIBOBJFLAGS may have already been set in the OS configuration
1820
    if test -z "$LIBOBJFLAGS" ; then
1821
        case "$arch" in
1822
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1823
        esac
1824
    fi
1825
fi
1826

    
1827
if enabled gprof; then
1828
    add_cflags  "-p"
1829
    add_ldflags "-p"
1830
fi
1831

    
1832
VHOOKCFLAGS="-fPIC"
1833

    
1834
# Find out if the .align argument is a power of two or not.
1835
if test $asmalign_pot = "unknown"; then
1836
    disable asmalign_pot
1837
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1838
fi
1839

    
1840
enabled_any $DECODER_LIST      && enable decoders
1841
enabled_any $ENCODER_LIST      && enable encoders
1842
enabled_any $BSF_LIST          && enable bsfs
1843
enabled_any $DEMUXER_LIST      && enable demuxers
1844
enabled_any $MUXER_LIST        && enable muxers
1845
enabled_any $FILTER_LIST       && enable filters
1846
enabled_any $INDEV_LIST        && enable demuxers
1847
enabled_any $OUTDEV_LIST       && enable muxers
1848
enabled_any $PROTOCOL_LIST     && enable protocols
1849

    
1850
enabled_any $THREADS_LIST      && enable threads
1851

    
1852
check_deps $CONFIG_LIST       \
1853
           $HAVE_LIST         \
1854
           $DECODER_LIST      \
1855
           $ENCODER_LIST      \
1856
           $PARSER_LIST       \
1857
           $BSF_LIST          \
1858
           $DEMUXER_LIST      \
1859
           $MUXER_LIST        \
1860
           $FILTER_LIST       \
1861
           $INDEV_LIST        \
1862
           $OUTDEV_LIST       \
1863
           $PROTOCOL_LIST     \
1864

    
1865
enabled libdc1394 && append pkg_requires "libraw1394"
1866
enabled libtheora && append pkg_requires "theora"
1867
enabled libvorbis && append pkg_requires "vorbisenc"
1868

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

    
1942
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1943
    echo "Enabled ${type}s:"
1944
    eval list=\$$(toupper $type)_LIST
1945
    for part in $list; do
1946
        enabled $part && echo ${part%_*}
1947
    done | sort | pr -3 -t
1948
    echo
1949
done
1950

    
1951
enabled nonfree &&
1952
    echo "License: unredistributable" ||
1953
    (enabled gpl &&
1954
        echo "License: GPL" ||
1955
        echo "License: LGPL")
1956

    
1957
echo "Creating config.mak and config.h..."
1958

    
1959
echo "# Automatically generated by configure - do not modify!" > config.mak
1960
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1961
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1962
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1963
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1964

    
1965
echo "PREFIX=$PREFIX" >> config.mak
1966
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1967
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1968
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1969
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1970
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1971
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1972
echo "MAKE=$make" >> config.mak
1973
echo "CC=$cc" >> config.mak
1974
echo "AR=$ar" >> config.mak
1975
echo "RANLIB=$ranlib" >> config.mak
1976
echo "LN_S=$ln_s" >> config.mak
1977
enabled dostrip &&
1978
    echo "STRIP=$strip" >> config.mak ||
1979
    echo "STRIP=echo ignoring strip" >> config.mak
1980

    
1981
echo "OPTFLAGS=$CFLAGS" >> config.mak
1982
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1983
echo "LDFLAGS=$LDFLAGS" >> config.mak
1984
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1985
echo "SHFLAGS=$SHFLAGS" >> config.mak
1986
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1987
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1988
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1989
echo "BUILD_STATIC=$static" >> config.mak
1990
echo "BUILDSUF=$BUILDSUF" >> config.mak
1991
echo "FULLNAME=$FULLNAME" >> config.mak
1992
echo "LIBPREF=$LIBPREF" >> config.mak
1993
echo "LIBSUF=$LIBSUF" >> config.mak
1994
echo "LIBNAME=$LIBNAME" >> config.mak
1995
echo "SLIBPREF=$SLIBPREF" >> config.mak
1996
echo "SLIBSUF=$SLIBSUF" >> config.mak
1997
echo "EXESUF=$EXESUF" >> config.mak
1998

    
1999
if enabled bigendian; then
2000
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2001
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2002
fi
2003
if enabled mmx; then
2004
    echo "#define __CPU__ 586" >> $TMPH
2005
fi
2006

    
2007
if enabled sdl; then
2008
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2009
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2010
fi
2011
if enabled texi2html; then
2012
    echo "BUILD_DOC=yes" >> config.mak
2013
fi
2014

    
2015
get_version(){
2016
    name=$1
2017
    file=$source_path/$2
2018
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2019
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2020
}
2021

    
2022
get_version LIBSWSCALE  libswscale/swscale.h
2023
get_version LIBPOSTPROC libpostproc/postprocess.h
2024
get_version LIBAVCODEC  libavcodec/avcodec.h
2025
get_version LIBAVDEVICE libavdevice/avdevice.h
2026
get_version LIBAVFORMAT libavformat/avformat.h
2027
get_version LIBAVUTIL   libavutil/avutil.h
2028
get_version LIBAVFILTER libavfilter/avfilter.h
2029

    
2030
if enabled shared; then
2031
    echo "BUILD_SHARED=yes" >> config.mak
2032
    echo "PIC=-fPIC -DPIC" >> config.mak
2033
    echo "SPPMAJOR=$LIBPOSTPROC_VERSION_MAJOR" >> config.mak
2034
    echo "SPPVERSION=$LIBPOSTPROC_VERSION" >> config.mak
2035
    echo "LAVCMAJOR=$LIBAVCODEC_VERSION_MAJOR" >> config.mak
2036
    echo "LAVCVERSION=$LIBAVCODEC_VERSION" >> config.mak
2037
    echo "LAVDMAJOR=$LIBAVDEVICE_VERSION_MAJOR" >> config.mak
2038
    echo "LAVDVERSION=$LIBAVDEVICE_VERSION" >> config.mak
2039
    echo "LAVFMAJOR=$LIBAVFORMAT_VERSION_MAJOR" >> config.mak
2040
    echo "LAVFVERSION=$LIBAVFORMAT_VERSION" >> config.mak
2041
    echo "LAVUMAJOR=$LIBAVUTIL_VERSION_MAJOR" >> config.mak
2042
    echo "LAVUVERSION=$LIBAVUTIL_VERSION" >> config.mak
2043
    echo "LAVFIMAJOR=$LIBAVFILTER_VERSION_MAJOR" >> config.mak
2044
    echo "LAVFIVERSION=$LIBAVFILTER_VERSION" >> config.mak
2045
    echo "SWSMAJOR=$LIBSWSCALE_VERSION_MAJOR" >> config.mak
2046
    echo "SWSVERSION=$LIBSWSCALE_VERSION" >> config.mak
2047
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2048
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2049
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2050
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2051
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2052
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2053
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2054
fi
2055
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2056
echo "EXTRALIBS=$extralibs" >> config.mak
2057

    
2058
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2059
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2060
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2061
                                      $DECODER_LIST      \
2062
                                      $ENCODER_LIST      \
2063
                                      $PARSER_LIST       \
2064
                                      $BSF_LIST          \
2065
                                      $DEMUXER_LIST      \
2066
                                      $MUXER_LIST        \
2067
                                      $FILTER_LIST       \
2068
                                      $PROTOCOL_LIST     \
2069
                                      $INDEV_LIST        \
2070
                                      $OUTDEV_LIST       \
2071

    
2072
echo "#define restrict $_restrict" >> $TMPH
2073

    
2074
if enabled small; then
2075
    echo "#define av_always_inline"  >> $TMPH
2076
fi
2077

    
2078
echo "SRC_PATH=\"$source_path\"" >> config.mak
2079
echo "SRC_PATH_BARE=$source_path" >> config.mak
2080
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2081

    
2082
# Apparently it's not possible to portably echo a backslash.
2083
enabled asmalign_pot &&
2084
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2085
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2086

    
2087

    
2088
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2089

    
2090
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2091
cmp -s $TMPH config.h &&
2092
    echo "config.h is unchanged" ||
2093
    mv -f $TMPH config.h
2094

    
2095
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2096

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

    
2140

    
2141
# build pkg-config files
2142
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2143

    
2144
pkgconfig_generate(){
2145
name=$1
2146
comment=$2
2147
version=$3
2148
libs=$4
2149
requires=$5
2150
cat <<EOF >$name.pc
2151
prefix=$PREFIX
2152
exec_prefix=\${prefix}
2153
libdir=\${exec_prefix}/lib
2154
includedir=\${prefix}/include
2155

    
2156
Name: $name
2157
Description: $comment
2158
Version: $version
2159
Requires: $requires
2160
Conflicts:
2161
Libs: -L\${libdir} $libs
2162
Cflags: -I\${includedir}
2163
EOF
2164
}
2165

    
2166
pkgconfig_generate_uninstalled(){
2167
name=$1
2168
shortname=${name#lib}
2169
comment=$2
2170
version=$3
2171
libs=$4
2172
requires=$5
2173
cat <<EOF >$name-uninstalled.pc
2174
prefix=
2175
exec_prefix=
2176
libdir=\${pcfiledir}/$name
2177
includedir=\${pcfiledir}
2178

    
2179
Name: $name
2180
Description: $comment
2181
Version: $version
2182
Requires: $requires
2183
Conflicts:
2184
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2185
Cflags: -I\${includedir}
2186
EOF
2187
}
2188

    
2189
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2190
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2191

    
2192
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2193
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2194

    
2195
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2196
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2197

    
2198
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2199
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2200
if enabled pp; then
2201
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2202
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2203
fi
2204

    
2205
if enabled swscaler; then
2206
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2207
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2208
else
2209
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2210
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2211
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2212
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2213
fi
2214

    
2215
if enabled avfilter; then
2216
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2217
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2218
fi