Statistics
| Branch: | Revision:

ffmpeg / configure @ c2345207

History | View | Annotate | Download (62.3 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-postproc        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
    postproc
662
    powerpc_perf
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
    bswap
712
    byteswap_h
713
    closesocket
714
    cmov
715
    conio_h
716
    dcbzl
717
    dev_bktr_ioctl_bt848_h
718
    dev_bktr_ioctl_meteor_h
719
    dev_ic_bt8xx_h
720
    dev_video_meteor_ioctl_meteor_h
721
    dev_video_bktr_ioctl_bt848_h
722
    dlfcn_h
723
    dlopen
724
    ebp_available
725
    ebx_available
726
    fast_64bit
727
    fast_cmov
728
    fast_unaligned
729
    fork
730
    freetype2
731
    gethrtime
732
    GetProcessTimes
733
    getrusage
734
    imlib2
735
    inet_aton
736
    inline_asm
737
    libdc1394_1
738
    libdc1394_2
739
    llrint
740
    lrint
741
    lrintf
742
    machine_ioctl_bt848_h
743
    machine_ioctl_meteor_h
744
    malloc_h
745
    memalign
746
    mkstemp
747
    mlib
748
    ppc64
749
    round
750
    roundf
751
    sdl
752
    sdl_video_size
753
    socklen_t
754
    soundcard_h
755
    poll_h
756
    sys_select_h
757
    sys_soundcard_h
758
    termios_h
759
    threads
760
    winsock2_h
761
"
762

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

    
774
# code dependency declarations
775

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

    
786
# decoders / encoders
787
ac3_decoder_deps="gpl"
788
dxa_decoder_deps="zlib"
789
flashsv_decoder_deps="zlib"
790
flashsv_encoder_deps="zlib"
791
mpeg_xvmc_decoder_deps="xvmc"
792
png_decoder_deps="zlib"
793
png_encoder_deps="zlib"
794
zmbv_decoder_deps="zlib"
795
zmbv_encoder_deps="zlib"
796

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

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

    
844
# protocols
845
http_protocol_deps="network"
846
rtp_protocol_deps="udp_protocol"
847
tcp_protocol_deps="network"
848
udp_protocol_deps="network"
849

    
850
# filters
851
movie_filter_deps="avfilter_lavf"
852

    
853
# programs
854
ffplay_deps="sdl"
855
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
856
ffserver_extralibs='$ldl'
857
vhook_extralibs='$ldl'
858

    
859

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

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

    
875
# default parameters
876

    
877
enable logging
878
logfile="config.err"
879

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

    
888
# toolchain
889
cc="gcc"
890
ar="ar"
891
ranlib="ranlib"
892
make="make"
893
strip="strip"
894
asmalign_pot="unknown"
895
ln_s="ln -sf"
896

    
897
# machine
898
arch=`uname -m`
899
cpu="generic"
900

    
901
# OS
902
targetos=$(tolower $(uname -s))
903

    
904
# libraries
905
enable zlib
906

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

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

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

    
949
FFMPEG_CONFIGURATION="$@"
950

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

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

    
969
enable $ARCH_EXT_LIST \
970
       $DECODER_LIST \
971
       $ENCODER_LIST \
972
       $PARSER_LIST \
973
       $BSF_LIST \
974
       $DEMUXER_LIST \
975
       $MUXER_LIST \
976
       $FILTER_LIST \
977
       $PROTOCOL_LIST \
978
       $INDEV_LIST \
979
       $OUTDEV_LIST \
980

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

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

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

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

    
1143
enable $arch
1144
enabled_any x86_32 x86_64 && enable x86
1145
enabled     sparc64       && enable sparc
1146

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

    
1293
    *)
1294
        targetos="${targetos}-UNKNOWN"
1295
        ;;
1296
esac
1297

    
1298
add_extralibs $osextralibs
1299

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

    
1308
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1309
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1310

    
1311
test -n "$cross_prefix" && enable cross_compile
1312
cc="${cross_prefix}${cc}"
1313
ar="${cross_prefix}${ar}"
1314
ranlib="${cross_prefix}${ranlib}"
1315
strip="${cross_prefix}${strip}"
1316

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

    
1328
disabled static && LIBNAME=""
1329

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

    
1345

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

    
1361
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1362
    die "libamr is nonfree and --enable-nonfree is not specified."
1363
fi
1364

    
1365
check_deps $ARCH_EXT_LIST
1366

    
1367
test -z "$need_memalign" && need_memalign="$mmx"
1368

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

    
1381
disabled optimizations || add_cflags -fomit-frame-pointer
1382

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

    
1452
gnu_make(){
1453
    $1 --version 2>&1 | grep -q GNU
1454
}
1455

    
1456
if ! gnu_make $make; then
1457
    gnu_make gmake && make=gmake || die "GNU make not found."
1458
fi
1459

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

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

    
1490
check_asm inline_asm '""'
1491

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

    
1505
    # check wether EBX is available on x86
1506
    check_asm ebx_available '"":::"%ebx"'
1507

    
1508
    # check whether binutils is new enough to compile SSSE3
1509
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1510

    
1511
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1512
fi
1513

    
1514
# check for assembler specific support
1515

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

    
1527
# check for SIMD availability
1528

    
1529
# AltiVec flags: The FSF version of GCC differs from the Apple version
1530
if enabled altivec; then
1531
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1532
        add_cflags "-faltivec" ||
1533
        add_cflags "-maltivec -mabi=altivec"
1534

    
1535
    check_header altivec.h
1536

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

    
1551
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1552
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1553
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1554
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1555
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1556

    
1557
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1558

    
1559
# ---
1560
# big/little-endian test
1561
check_cc <<EOF || die "endian test failed"
1562
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1563
EOF
1564
tr -c -d BIGE < $TMPO | grep -q BIGE && enable bigendian
1565

    
1566
# ---
1567
# check availability of some header files
1568

    
1569
if check_func dlopen; then
1570
    ldl=
1571
elif check_func dlopen -ldl; then
1572
    ldl=-ldl
1573
fi
1574

    
1575
check_func  fork
1576
check_func  gethrtime
1577
check_func  getrusage
1578
check_func  inet_aton $network_extralibs
1579
check_func  memalign
1580
check_func  mkstemp
1581
check_func2 windows.h GetProcessTimes
1582

    
1583
check_header byteswap.h
1584
check_header conio.h
1585
check_header dlfcn.h
1586
check_header malloc.h
1587
check_header termios.h
1588

    
1589
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1590
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1591
fi
1592

    
1593
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1594

    
1595
# ffserver uses poll(),
1596
# if it's not found we can emulate it using select().
1597
if enabled ffserver; then
1598
    check_header poll.h
1599
    check_header sys/select.h
1600
fi
1601

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

    
1618
for thread in $THREADS_LIST; do
1619
    if enabled $thread; then
1620
        test -n "$thread_type" &&
1621
            die "ERROR: Only one thread type must be selected." ||
1622
            thread_type="$thread"
1623
    fi
1624
done
1625

    
1626
check_lib math.h sin -lm
1627

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

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

    
1653
# disable the native AC-3 decoder if liba52 is enabled
1654
enabled liba52 && disable ac3_decoder
1655

    
1656
# libdc1394 check
1657
if enabled libdc1394; then
1658
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1659
        enable libdc1394_2; } ||
1660
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1661
        enable libdc1394_1; } ||
1662
    die "ERROR: No version of libdc1394 found "
1663
fi
1664

    
1665

    
1666
_restrict=
1667
for restrict_keyword in restrict __restrict__ __restrict; do
1668
    check_cc <<EOF && _restrict=$restrict_keyword && break
1669
void foo(char * $restrict_keyword p);
1670
EOF
1671
done
1672

    
1673
test "$vhook" = "default" && vhook="$dlopen"
1674

    
1675
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1676
    disable vhook
1677
    echo
1678
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1679
    echo "Patches welcome."
1680
    echo
1681
fi
1682

    
1683
if enabled vhook; then
1684
    check_ldflags -rdynamic
1685
    check_ldflags -export-dynamic
1686
fi
1687

    
1688
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1689
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1690

    
1691
##########################################
1692
# SDL check
1693

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

    
1720
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1721

    
1722
check_type sys/socket.h socklen_t
1723

    
1724
##########################################
1725
# Network check
1726

    
1727
if enabled network; then
1728
    # Prefer arpa/inet.h over winsock2
1729
    if check_header arpa/inet.h ; then
1730
        check_func closesocket
1731
    elif check_header winsock2.h ; then
1732
        network_extralibs="-lws2_32"
1733
        check_type ws2tcpip.h socklen_t
1734
        check_func2 winsock2.h closesocket
1735
    fi
1736
fi
1737

    
1738
##########################################
1739
# IPv6 check
1740

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

    
1755
check_header linux/videodev.h
1756
check_header linux/videodev2.h
1757

    
1758
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1759

    
1760
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1761
{ check_header dev/bktr/ioctl_meteor.h &&
1762
  check_header dev/bktr/ioctl_bt848.h; } ||
1763
{ check_header machine/ioctl_meteor.h &&
1764
  check_header machine/ioctl_bt848.h; } ||
1765
{ check_header dev/video/meteor/ioctl_meteor.h &&
1766
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1767
check_header dev/ic/bt8xx.h
1768

    
1769
check_header sys/soundcard.h
1770
check_header soundcard.h
1771

    
1772
# deal with the X11 frame grabber
1773
enabled x11grab                         &&
1774
check_header X11/Xlib.h                 &&
1775
check_header X11/extensions/XShm.h      &&
1776
check_func XOpenDisplay -lX11           &&
1777
check_func XShmCreateImage -lX11 -lXext
1778

    
1779
enabled debug && add_cflags -g"$debuglevel"
1780

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

    
1794
# add some linker flags
1795
check_ldflags -Wl,--warn-common
1796
check_ldflags $LDLATEFLAGS
1797
check_ldflags -Wl,-Bsymbolic
1798

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

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

    
1823
if enabled gprof; then
1824
    add_cflags  "-p"
1825
    add_ldflags "-p"
1826
fi
1827

    
1828
VHOOKCFLAGS="-fPIC"
1829

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

    
1836
enabled_any $DECODER_LIST      && enable decoders
1837
enabled_any $ENCODER_LIST      && enable encoders
1838
enabled_any $BSF_LIST          && enable bsfs
1839
enabled_any $DEMUXER_LIST      && enable demuxers
1840
enabled_any $MUXER_LIST        && enable muxers
1841
enabled_any $FILTER_LIST       && enable filters
1842
enabled_any $INDEV_LIST        && enable demuxers
1843
enabled_any $OUTDEV_LIST       && enable muxers
1844
enabled_any $PROTOCOL_LIST     && enable protocols
1845

    
1846
enabled_any $THREADS_LIST      && enable threads
1847

    
1848
check_deps $CONFIG_LIST       \
1849
           $HAVE_LIST         \
1850
           $DECODER_LIST      \
1851
           $ENCODER_LIST      \
1852
           $PARSER_LIST       \
1853
           $BSF_LIST          \
1854
           $DEMUXER_LIST      \
1855
           $MUXER_LIST        \
1856
           $FILTER_LIST       \
1857
           $INDEV_LIST        \
1858
           $OUTDEV_LIST       \
1859
           $PROTOCOL_LIST     \
1860

    
1861
enabled libdc1394 && append pkg_requires "libraw1394"
1862
enabled libtheora && append pkg_requires "theora"
1863
enabled libvorbis && append pkg_requires "vorbisenc"
1864

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

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

    
1947
enabled nonfree &&
1948
    echo "License: unredistributable" ||
1949
    (enabled gpl &&
1950
        echo "License: GPL" ||
1951
        echo "License: LGPL")
1952

    
1953
echo "Creating config.mak and config.h..."
1954

    
1955
echo "# Automatically generated by configure - do not modify!" > config.mak
1956
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1957
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1958
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1959
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1960

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

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

    
1995
if enabled bigendian; then
1996
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1997
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1998
fi
1999

    
2000
if enabled sdl; then
2001
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2002
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2003
fi
2004
if enabled texi2html; then
2005
    echo "BUILD_DOC=yes" >> config.mak
2006
fi
2007

    
2008
get_version(){
2009
    name=$1
2010
    file=$source_path/$2
2011
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2012
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2013
    lcname=$(tolower $name)
2014
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2015
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2016
}
2017

    
2018
get_version LIBSWSCALE  libswscale/swscale.h
2019
get_version LIBPOSTPROC libpostproc/postprocess.h
2020
get_version LIBAVCODEC  libavcodec/avcodec.h
2021
get_version LIBAVDEVICE libavdevice/avdevice.h
2022
get_version LIBAVFORMAT libavformat/avformat.h
2023
get_version LIBAVUTIL   libavutil/avutil.h
2024
get_version LIBAVFILTER libavfilter/avfilter.h
2025

    
2026
if enabled shared; then
2027
    echo "BUILD_SHARED=yes" >> config.mak
2028
    echo "PIC=-fPIC -DPIC" >> config.mak
2029
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2030
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2031
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2032
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2033
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2034
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2035
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2036
fi
2037
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2038
echo "EXTRALIBS=$extralibs" >> config.mak
2039

    
2040
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2041
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2042
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2043
                                      $DECODER_LIST      \
2044
                                      $ENCODER_LIST      \
2045
                                      $PARSER_LIST       \
2046
                                      $BSF_LIST          \
2047
                                      $DEMUXER_LIST      \
2048
                                      $MUXER_LIST        \
2049
                                      $FILTER_LIST       \
2050
                                      $PROTOCOL_LIST     \
2051
                                      $INDEV_LIST        \
2052
                                      $OUTDEV_LIST       \
2053

    
2054
echo "#define restrict $_restrict" >> $TMPH
2055

    
2056
if enabled small; then
2057
    echo "#define av_always_inline"  >> $TMPH
2058
fi
2059

    
2060
echo "SRC_PATH=\"$source_path\"" >> config.mak
2061
echo "SRC_PATH_BARE=$source_path" >> config.mak
2062
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2063

    
2064
# Apparently it's not possible to portably echo a backslash.
2065
enabled asmalign_pot &&
2066
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2067
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2068

    
2069

    
2070
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2071

    
2072
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2073
cmp -s $TMPH config.h &&
2074
    echo "config.h is unchanged" ||
2075
    mv -f $TMPH config.h
2076

    
2077
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2078

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

    
2122

    
2123
# build pkg-config files
2124
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2125

    
2126
pkgconfig_generate(){
2127
name=$1
2128
comment=$2
2129
version=$3
2130
libs=$4
2131
requires=$5
2132
cat <<EOF >$name.pc
2133
prefix=$PREFIX
2134
exec_prefix=\${prefix}
2135
libdir=\${exec_prefix}/lib
2136
includedir=\${prefix}/include
2137

    
2138
Name: $name
2139
Description: $comment
2140
Version: $version
2141
Requires: $requires
2142
Conflicts:
2143
Libs: -L\${libdir} $libs
2144
Cflags: -I\${includedir}
2145
EOF
2146
}
2147

    
2148
pkgconfig_generate_uninstalled(){
2149
name=$1
2150
shortname=${name#lib}
2151
comment=$2
2152
version=$3
2153
libs=$4
2154
requires=$5
2155
cat <<EOF >$name-uninstalled.pc
2156
prefix=
2157
exec_prefix=
2158
libdir=\${pcfiledir}/$name
2159
includedir=\${pcfiledir}
2160

    
2161
Name: $name
2162
Description: $comment
2163
Version: $version
2164
Requires: $requires
2165
Conflicts:
2166
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2167
Cflags: -I\${includedir}
2168
EOF
2169
}
2170

    
2171
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2172
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2173

    
2174
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2175
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2176

    
2177
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2178
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2179

    
2180
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2181
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2182
if enabled postproc; then
2183
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2184
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2185
fi
2186

    
2187
if enabled swscaler; then
2188
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2189
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2190
else
2191
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2192
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2193
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2194
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2195
fi
2196

    
2197
if enabled avfilter; then
2198
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2199
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2200
fi