Statistics
| Branch: | Revision:

ffmpeg / configure @ 95c21842

History | View | Annotate | Download (61.8 KB)

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

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

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

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

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

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

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

    
178
log(){
179
    echo "$@" >>$logfile
180
}
181

    
182
log_file(){
183
    log BEGIN $1
184
    pr -n -t $1 >>$logfile
185
    log END $1
186
}
187

    
188
echolog(){
189
    log "$@"
190
    echo "$@"
191
}
192

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

    
215
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
216
toupper(){
217
    echo "$@" | tr '[a-z]' '[A-Z]'
218
}
219

    
220
tolower(){
221
    echo "$@" | tr '[A-Z]' '[a-z]'
222
}
223

    
224
set_all(){
225
    value=$1
226
    shift
227
    for var in $*; do
228
        eval $var=$value
229
    done
230
}
231

    
232
pushvar(){
233
    for var in $*; do
234
        eval level=\${${var}_level:=0}
235
        eval ${var}_${level}="\$$var"
236
        eval ${var}_level=$(($level+1))
237
    done
238
}
239

    
240
popvar(){
241
    for var in $*; do
242
        eval level=\${${var}_level:-0}
243
        test $level = 0 && continue
244
        eval level=$(($level-1))
245
        eval $var="\${${var}_${level}}"
246
        eval ${var}_level=$level
247
        eval unset ${var}_${level}
248
    done
249
}
250

    
251
enable(){
252
    set_all yes $*
253
}
254

    
255
disable(){
256
    set_all no $*
257
}
258

    
259
enabled(){
260
    eval test "x\$$1" = "xyes"
261
}
262

    
263
disabled(){
264
    eval test "x\$$1" = "xno"
265
}
266

    
267
enabled_all(){
268
    for opt; do
269
        enabled $opt || return 1
270
    done
271
}
272

    
273
disabled_all(){
274
    for opt; do
275
        disabled $opt || return 1
276
    done
277
}
278

    
279
enabled_any(){
280
    for opt; do
281
        enabled $opt && return 0
282
    done
283
}
284

    
285
disabled_any(){
286
    for opt; do
287
        disabled $opt && return 0
288
    done
289
}
290

    
291
is_in(){
292
    value=$1
293
    shift
294
    for var in $*; do
295
        [ $var = $value ] && return 0
296
    done
297
    return 1
298
}
299

    
300
check_deps(){
301
    for cfg; do
302
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
303
        disabled ${cfg}_checking && continue
304
        enable ${cfg}_checking
305

    
306
        eval dep_all="\$${cfg}_deps"
307
        eval dep_any="\$${cfg}_deps_any"
308

    
309
        pushvar cfg dep_all dep_any
310
        check_deps $dep_all $dep_any
311
        popvar cfg dep_all dep_any
312

    
313
        enabled_all $dep_all || disable $cfg
314
        enabled_any $dep_any || disable $cfg
315

    
316
        if enabled $cfg; then
317
            eval dep_extralibs="\$${cfg}_extralibs"
318
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
319
        fi
320

    
321
        disable ${cfg}_checking
322
    done
323
}
324

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

    
342
flags_saved(){
343
    (: ${SAVE_CFLAGS?}) 2>/dev/null
344
}
345

    
346
save_flags(){
347
    flags_saved && return
348
    SAVE_CFLAGS="$CFLAGS"
349
    SAVE_LDFLAGS="$LDFLAGS"
350
    SAVE_extralibs="$extralibs"
351
}
352

    
353
restore_flags(){
354
    flags_saved || return
355
    CFLAGS="$SAVE_CFLAGS"
356
    LDFLAGS="$SAVE_LDFLAGS"
357
    extralibs="$SAVE_extralibs"
358
    unset SAVE_CFLAGS
359
    unset SAVE_LDFLAGS
360
    unset SAVE_extralibs
361
}
362

    
363
temp_cflags(){
364
    save_flags
365
    CFLAGS="$CFLAGS $*"
366
}
367

    
368
temp_ldflags(){
369
    save_flags
370
    LDFLAGS="$LDFLAGS $*"
371
}
372

    
373
temp_extralibs(){
374
    save_flags
375
    extralibs="$extralibs $*"
376
}
377

    
378
append(){
379
    var=$1
380
    shift
381
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
382
    eval "$var=\"\$$var $*\""
383
}
384

    
385
add_cflags(){
386
    append CFLAGS "$@"
387
}
388

    
389
add_ldflags(){
390
    append LDFLAGS "$@"
391
}
392

    
393
add_extralibs(){
394
    append extralibs "$@"
395
}
396

    
397
check_cmd(){
398
    log "$@"
399
    "$@" >>$logfile 2>&1
400
}
401

    
402
check_cc(){
403
    log check_cc "$@"
404
    cat >$TMPC
405
    log_file $TMPC
406
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
407
}
408

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

    
416
check_asm(){
417
    log check_asm "$@"
418
    name="$1"
419
    asm="$2"
420
    shift 2
421
    check_cc "$@" <<EOF && enable $name || disable $name
422
int foo(void){
423
    asm volatile($asm);
424
}
425
EOF
426
}
427

    
428
check_ld(){
429
    log check_ld "$@"
430
    check_cc || return
431
    flags=''
432
    libs=''
433
    for f; do
434
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
435
    done
436
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
437
}
438

    
439
check_cflags(){
440
    log check_cflags "$@"
441
    check_cc "$@" <<EOF && add_cflags "$@"
442
int x;
443
EOF
444
}
445

    
446
check_ldflags(){
447
    log check_ldflags "$@"
448
    check_ld "$@" <<EOF && add_ldflags "$@"
449
int main(void){
450
    return 0;
451
}
452
EOF
453
}
454

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

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

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

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

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

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

    
528
check_exec_crash(){
529
    code=`cat`
530

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

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

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

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

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

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

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

    
610
COMPONENT_LIST="
611
    bsfs
612
    decoders
613
    demuxers
614
    encoders
615
    indevs
616
    muxers
617
    outdevs
618
    parsers
619
    protocols
620
"
621

    
622
CONFIG_LIST="
623
    $COMPONENT_LIST
624
    avisynth
625
    beos_netserver
626
    ffmpeg
627
    ffplay
628
    ffserver
629
    gpl
630
    gprof
631
    gray
632
    ipv6
633
    liba52
634
    liba52bin
635
    libamr
636
    libamr_nb
637
    libamr_wb
638
    libdc1394
639
    libfaac
640
    libfaad
641
    libfaadbin
642
    libgsm
643
    libmp3lame
644
    libnut
645
    libtheora
646
    libvorbis
647
    libx264
648
    libxvid
649
    memalign_hack
650
    mpegaudio_hp
651
    network
652
    powerpc_perf
653
    pp
654
    small
655
    swscaler
656
    vhook
657
    x11grab
658
    zlib
659
"
660

    
661
THREADS_LIST='
662
    beosthreads
663
    os2threads
664
    pthreads
665
    w32threads
666
'
667

    
668
ARCH_LIST='
669
    alpha
670
    armv4l
671
    bfin
672
    ia64
673
    m68k
674
    mips
675
    parisc
676
    powerpc
677
    s390
678
    sh4
679
    sparc
680
    sparc64
681
    x86
682
    x86_32
683
    x86_64
684
'
685

    
686
ARCH_EXT_LIST='
687
    altivec
688
    armv5te
689
    armv6
690
    iwmmxt
691
    mmi
692
    mmx
693
    ssse3
694
    vis
695
'
696

    
697
HAVE_LIST="
698
    $ARCH_EXT_LIST
699
    $THREADS_LIST
700
    altivec_h
701
    arpa_inet_h
702
    byteswap_h
703
    closesocket
704
    cmov
705
    conio_h
706
    dcbzl
707
    dev_bktr_ioctl_bt848_h
708
    dev_bktr_ioctl_meteor_h
709
    dev_ic_bt8xx_h
710
    dev_video_meteor_ioctl_meteor_h
711
    dev_video_bktr_ioctl_bt848_h
712
    dlfcn_h
713
    dlopen
714
    ebp_available
715
    ebx_available
716
    fast_64bit
717
    fast_cmov
718
    fast_unaligned
719
    fork
720
    freetype2
721
    gethrtime
722
    GetProcessTimes
723
    getrusage
724
    imlib2
725
    inet_aton
726
    llrint
727
    lrint
728
    lrintf
729
    machine_ioctl_bt848_h
730
    machine_ioctl_meteor_h
731
    malloc_h
732
    memalign
733
    mkstemp
734
    mlib
735
    ppc64
736
    round
737
    roundf
738
    sdl
739
    sdl_video_size
740
    socklen_t
741
    soundcard_h
742
    sys_poll_h
743
    sys_select_h
744
    sys_soundcard_h
745
    termios_h
746
    threads
747
    winsock2_h
748
"
749

    
750
CMDLINE_SELECT="
751
    $ARCH_EXT_LIST
752
    $CONFIG_LIST
753
    $THREADS_LIST
754
    debug
755
    extra_warnings
756
    optimizations
757
    shared
758
    static
759
"
760

    
761
# code dependency declarations
762

    
763
# architecture extensions
764
altivec_deps="powerpc"
765
armv5te_deps="armv4l"
766
armv6_deps="armv4l"
767
iwmmxt_deps="armv4l"
768
mmi_deps="mips"
769
mmx_deps="x86"
770
ssse3_deps="x86"
771
vis_deps="sparc"
772

    
773
# decoders / encoders
774
ac3_decoder_deps="gpl"
775
dxa_decoder_deps="zlib"
776
flashsv_decoder_deps="zlib"
777
flashsv_encoder_deps="zlib"
778
flv_decoder_deps="h263_decoder"
779
h263_decoder_deps="h263_parser mpeg4video_parser"
780
h263i_decoder_deps="h263_decoder"
781
h264_decoder_deps="h264_parser"
782
mpeg_xvmc_decoder_deps="xvmc"
783
mpeg4_decoder_deps="h263_decoder"
784
msmpeg4v1_decoder_deps="h263_decoder"
785
msmpeg4v2_decoder_deps="h263_decoder"
786
msmpeg4v3_decoder_deps="h263_decoder"
787
png_decoder_deps="zlib"
788
png_encoder_deps="zlib"
789
svq3_decoder_deps="h264_parser"
790
vc1_decoder_deps="h263_decoder"
791
wmv1_decoder_deps="h263_decoder"
792
wmv2_decoder_deps="h263_decoder"
793
wmv3_decoder_deps="h263_decoder"
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 mpegts_demuxer 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
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
840
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
841

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

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

    
854

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

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

    
870
# default parameters
871

    
872
enable logging
873
logfile="config.err"
874

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

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

    
892
# machine
893
arch=`uname -m`
894
cpu="generic"
895

    
896
# OS
897
targetos=$(tolower $(uname -s))
898

    
899
# libraries
900
enable zlib
901

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

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

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

    
945
FFMPEG_CONFIGURATION="$@"
946

    
947
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
948
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
949
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
950
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
951
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
952
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
953
OUTDEV_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavdevice/alldevices.c"`
954
INDEV_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavdevice/alldevices.c"`
955
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
956

    
957
enable $ARCH_EXT_LIST \
958
       $DECODER_LIST \
959
       $ENCODER_LIST \
960
       $PARSER_LIST \
961
       $BSF_LIST \
962
       $DEMUXER_LIST \
963
       $MUXER_LIST \
964
       $PROTOCOL_LIST \
965
       $INDEV_LIST \
966
       $OUTDEV_LIST \
967

    
968
die_unknown(){
969
    echo "Unknown option \"$1\"."
970
    echo "See $0 --help for available options."
971
    exit 1
972
}
973

    
974
show_list() {
975
    suffix=_$1
976
    shift
977
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
978
    exit 0
979
}
980

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

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

    
1137
enable $arch
1138
enabled_any x86_32 x86_64 && enable x86
1139
enabled     sparc64       && enable sparc
1140

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

    
1287
    *)
1288
        targetos="${targetos}-UNKNOWN"
1289
        ;;
1290
esac
1291

    
1292
add_extralibs $osextralibs
1293

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

    
1302
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1303
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1304

    
1305
test -n "$cross_prefix" && enable cross_compile
1306
cc="${cross_prefix}${cc}"
1307
ar="${cross_prefix}${ar}"
1308
ranlib="${cross_prefix}${ranlib}"
1309
strip="${cross_prefix}${strip}"
1310

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

    
1322
disabled static && LIBNAME=""
1323

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

    
1339

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

    
1355
check_deps $ARCH_EXT_LIST
1356

    
1357
test -z "$need_memalign" && need_memalign="$mmx"
1358

    
1359
#Darwin CC versions
1360
if test $targetos = darwin; then
1361
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1362
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1363
    else
1364
        add_cflags "-no-cpp-precomp -pipe"
1365
        check_cflags "-force_cpusubtype_ALL"
1366
        check_cflags "-Wno-sign-compare"
1367
        disabled shared && add_cflags -mdynamic-no-pic
1368
    fi
1369
fi
1370

    
1371
disabled optimizations || add_cflags -fomit-frame-pointer
1372

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

    
1446
gnu_make(){
1447
    $1 --version 2>&1 | grep -q GNU
1448
}
1449

    
1450
if ! gnu_make $make; then
1451
    gnu_make gmake && make=gmake || die "GNU make not found."
1452
fi
1453

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

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

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

    
1497
    # check wether EBX is available on x86
1498
    check_asm ebx_available '"":::"%ebx"'
1499

    
1500
    # check whether binutils is new enough to compile SSSE3
1501
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1502
fi
1503

    
1504
# check for assembler specific support
1505

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

    
1517
# check for SIMD availability
1518

    
1519
# AltiVec flags: The FSF version of GCC differs from the Apple version
1520
if enabled altivec; then
1521
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1522
        add_cflags "-faltivec" ||
1523
        add_cflags "-maltivec -mabi=altivec"
1524

    
1525
    check_header altivec.h
1526

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

    
1541
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1542
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1543
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1544
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1545
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1546

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

    
1549
# ---
1550
# big/little-endian test
1551
check_cc <<EOF || die "endian test failed"
1552
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1553
EOF
1554
grep -q BIGE $TMPO && enable bigendian
1555

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

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

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

    
1573
check_header byteswap.h
1574
check_header conio.h
1575
check_header dlfcn.h
1576
check_header malloc.h
1577
check_header termios.h
1578

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

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

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

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

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

    
1616
check_lib math.h sin -lm
1617

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

    
1627
enabled_any libamr_nb libamr_wb && enable libamr
1628

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

    
1646
# disable the native AC-3 decoder if liba52 is enabled
1647
enabled liba52 && disable ac3_decoder
1648

    
1649
_restrict=
1650
for restrict_keyword in restrict __restrict__ __restrict; do
1651
    check_cc <<EOF && _restrict=$restrict_keyword && break
1652
void foo(char * $restrict_keyword p);
1653
EOF
1654
done
1655

    
1656
test "$vhook" = "default" && vhook="$dlopen"
1657

    
1658
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1659
    disable vhook
1660
    echo
1661
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1662
    echo "Patches welcome."
1663
    echo
1664
fi
1665

    
1666
if enabled vhook; then
1667
    check_ldflags -rdynamic
1668
    check_ldflags -export-dynamic
1669
fi
1670

    
1671
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1672
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1673

    
1674
##########################################
1675
# SDL check
1676

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

    
1703
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1704

    
1705
check_type sys/socket.h socklen_t
1706

    
1707
##########################################
1708
# Network check
1709

    
1710
if enabled network; then
1711
    # Prefer arpa/inet.h over winsock2
1712
    if check_header arpa/inet.h ; then
1713
        check_func closesocket
1714
    elif check_header winsock2.h ; then
1715
        network_extralibs="-lws2_32"
1716
        check_type ws2tcpip.h socklen_t
1717
        check_func2 winsock2.h closesocket
1718
    fi
1719
fi
1720

    
1721
##########################################
1722
# IPv6 check
1723

    
1724
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1725
#include <sys/types.h>
1726
#include <sys/socket.h>
1727
#include <netinet/in.h>
1728
#include <netdb.h>
1729
int main(void) {
1730
    struct sockaddr_storage saddr;
1731
    struct ipv6_mreq mreq6;
1732
    getaddrinfo(0,0,0,0);
1733
    getnameinfo(0,0,0,0,0,0,0);
1734
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1735
}
1736
EOF
1737

    
1738
check_header linux/videodev.h
1739
check_header linux/videodev2.h
1740

    
1741
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1742
{ check_header dev/bktr/ioctl_meteor.h &&
1743
  check_header dev/bktr/ioctl_bt848.h; } ||
1744
{ check_header machine/ioctl_meteor.h &&
1745
  check_header machine/ioctl_bt848.h; } ||
1746
{ check_header dev/video/meteor/ioctl_meteor.h &&
1747
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1748
check_header dev/ic/bt8xx.h
1749

    
1750
check_header sys/soundcard.h
1751
check_header soundcard.h
1752

    
1753
# deal with the X11 frame grabber
1754
enabled x11grab                         &&
1755
check_header X11/Xlib.h                 &&
1756
check_header X11/extensions/XShm.h      &&
1757
check_func XOpenDisplay -lX11           &&
1758
check_func XShmCreateImage -lX11 -lXext
1759

    
1760
enabled debug && add_cflags -g
1761

    
1762
# add some useful compiler flags if supported
1763
check_cflags -Wdeclaration-after-statement
1764
check_cflags -Wall
1765
check_cflags -Wno-switch
1766
check_cflags -Wdisabled-optimization
1767
check_cflags -Wpointer-arith
1768
check_cflags -Wredundant-decls
1769
check_cflags -Wno-pointer-sign
1770
enabled extra_warnings && check_cflags -Winline
1771

    
1772
# add some linker flags
1773
check_ldflags -Wl,--warn-common
1774
check_ldflags $LDLATEFLAGS
1775
check_ldflags -Wl,-Bsymbolic
1776

    
1777
if enabled small; then
1778
    check_cflags -Os            # not all compilers support -Os
1779
    optimizations="small"
1780
elif enabled optimizations; then
1781
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1782
        add_cflags  "-O5"
1783
        add_ldflags "-O5"
1784
    else
1785
        add_cflags "-O3"
1786
    fi
1787
fi
1788

    
1789
# PIC flags for shared library objects where they are needed
1790
if enabled shared; then
1791
    # LIBOBJFLAGS may have already been set in the OS configuration
1792
    if test -z "$LIBOBJFLAGS" ; then
1793
        case "$arch" in
1794
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1795
        esac
1796
    fi
1797
fi
1798

    
1799
if enabled gprof; then
1800
    add_cflags  "-p"
1801
    add_ldflags "-p"
1802
fi
1803

    
1804
VHOOKCFLAGS="-fPIC"
1805

    
1806
# Find out if the .align argument is a power of two or not.
1807
if test $asmalign_pot = "unknown"; then
1808
    disable asmalign_pot
1809
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1810
fi
1811

    
1812
enabled_any $DECODER_LIST      && enable decoders
1813
enabled_any $ENCODER_LIST      && enable encoders
1814
enabled_any $BSF_LIST          && enable bsfs
1815
enabled_any $DEMUXER_LIST      && enable demuxers
1816
enabled_any $MUXER_LIST        && enable muxers
1817
enabled_any $INDEV_LIST        && enable demuxers
1818
enabled_any $OUTDEV_LIST       && enable muxers
1819
enabled_any $PROTOCOL_LIST     && enable protocols
1820

    
1821
enabled_any $THREADS_LIST      && enable threads
1822

    
1823
check_deps $CONFIG_LIST       \
1824
           $HAVE_LIST         \
1825
           $DECODER_LIST      \
1826
           $ENCODER_LIST      \
1827
           $PARSER_LIST       \
1828
           $BSF_LIST          \
1829
           $DEMUXER_LIST      \
1830
           $MUXER_LIST        \
1831
           $INDEV_LIST        \
1832
           $OUTDEV_LIST       \
1833
           $PROTOCOL_LIST     \
1834

    
1835
enabled libdc1394 && append pkg_requires "libraw1394"
1836
enabled libtheora && append pkg_requires "theora"
1837
enabled libvorbis && append pkg_requires "vorbisenc"
1838

    
1839
echo "install prefix            $PREFIX"
1840
echo "source path               $source_path"
1841
echo "C compiler                $cc"
1842
echo "make                      $make"
1843
echo ".align is power-of-two    $asmalign_pot"
1844
echo "ARCH                      $arch ($cpu)"
1845
if test "$BUILDSUF" != ""; then
1846
    echo "build suffix              $BUILDSUF"
1847
fi
1848
echo "big-endian                ${bigendian-no}"
1849
if test $arch = "x86_32" -o $arch = "x86_64"; then
1850
    echo "MMX enabled               ${mmx-no}"
1851
    echo "CMOV enabled              ${cmov-no}"
1852
    echo "CMOV is fast              ${fast_cmov-no}"
1853
    echo "EBX available             ${ebx_available-no}"
1854
    echo "EBP available             ${ebp_available-no}"
1855
fi
1856
if test $arch = "armv4l"; then
1857
    echo "ARMv5TE enabled           ${armv5te-no}"
1858
    echo "ARMv6 enabled             ${armv6-no}"
1859
    echo "IWMMXT enabled            ${iwmmxt-no}"
1860
fi
1861
if test $arch = "mips"; then
1862
    echo "MMI enabled               ${mmi-no}"
1863
fi
1864
if test $arch = "powerpc"; then
1865
    echo "AltiVec enabled           ${altivec-no}"
1866
    echo "dcbzl available           ${dcbzl-no}"
1867
fi
1868
echo "gprof enabled             ${gprof-no}"
1869
echo "debug symbols             ${debug-no}"
1870
echo "strip symbols             ${dostrip-no}"
1871
echo "optimizations             ${optimizations-no}"
1872
echo "static                    ${static-no}"
1873
echo "shared                    ${shared-no}"
1874
echo "postprocessing support    ${pp-no}"
1875
echo "software scaler enabled   ${swscaler-no}"
1876
echo "video hooking             ${vhook-no}"
1877
if enabled vhook; then
1878
    echo "Imlib2 support            ${imlib2-no}"
1879
    echo "FreeType support          ${freetype2-no}"
1880
fi
1881
echo "network support           ${network-no}"
1882
if enabled network; then
1883
    echo "IPv6 support              ${ipv6-no}"
1884
fi
1885
echo "threading support         ${thread_type-no}"
1886
echo "SDL support               ${sdl-no}"
1887
if enabled sdl_too_old; then
1888
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1889
fi
1890
echo "Sun medialib support      ${mlib-no}"
1891
echo "AVISynth enabled          ${avisynth-no}"
1892
echo "liba52 support            ${liba52-no}"
1893
echo "liba52 dlopened           ${liba52bin-no}"
1894
echo "libamr-nb support         ${libamr_nb-no}"
1895
echo "libamr-wb support         ${libamr_wb-no}"
1896
echo "libdc1394 support         ${libdc1394-no}"
1897
echo "libfaac enabled           ${libfaac-no}"
1898
echo "libfaad enabled           ${libfaad-no}"
1899
echo "libfaad dlopened          ${libfaadbin-no}"
1900
echo "libgsm enabled            ${libgsm-no}"
1901
echo "libmp3lame enabled        ${libmp3lame-no}"
1902
echo "libnut enabled            ${libnut-no}"
1903
echo "libtheora enabled         ${libtheora-no}"
1904
echo "libvorbis enabled         ${libvorbis-no}"
1905
echo "x264 enabled              ${libx264-no}"
1906
echo "XviD enabled              ${libxvid-no}"
1907
echo "zlib enabled              ${zlib-no}"
1908
enabled gpl &&
1909
    echo "License: GPL" ||
1910
    echo "License: LGPL"
1911

    
1912
for type in decoder encoder parser demuxer muxer protocol bsf indev outdev; do
1913
    echo "Enabled ${type}s:"
1914
    ucname="\$`toupper $type`_LIST"
1915
    list="`eval echo $ucname`"
1916
    partlist=""
1917
    for part in $list; do
1918
        enabled $part && partlist="$partlist $part"
1919
    done
1920
    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1921
    echo $partlist
1922
done
1923

    
1924
echo "Creating config.mak and config.h..."
1925

    
1926
echo "# Automatically generated by configure - do not modify!" > config.mak
1927
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1928
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1929
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1930
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1931

    
1932
echo "PREFIX=$PREFIX" >> config.mak
1933
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1934
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1935
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1936
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1937
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1938
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1939
echo "MAKE=$make" >> config.mak
1940
echo "CC=$cc" >> config.mak
1941
echo "AR=$ar" >> config.mak
1942
echo "RANLIB=$ranlib" >> config.mak
1943
echo "LDCONFIG=$LDCONFIG" >> config.mak
1944
echo "LN_S=$ln_s" >> config.mak
1945
enabled dostrip &&
1946
    echo "STRIP=$strip" >> config.mak ||
1947
    echo "STRIP=echo ignoring strip" >> config.mak
1948

    
1949
echo "OPTFLAGS=$CFLAGS" >> config.mak
1950
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1951
echo "LDFLAGS=$LDFLAGS" >> config.mak
1952
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1953
echo "SHFLAGS=$SHFLAGS" >> config.mak
1954
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1955
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1956
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1957
echo "BUILD_STATIC=$static" >> config.mak
1958
echo "BUILDSUF=$BUILDSUF" >> config.mak
1959
echo "FULLNAME=$FULLNAME" >> config.mak
1960
echo "LIBPREF=$LIBPREF" >> config.mak
1961
echo "LIBSUF=$LIBSUF" >> config.mak
1962
echo "LIBNAME=$LIBNAME" >> config.mak
1963
echo "SLIBPREF=$SLIBPREF" >> config.mak
1964
echo "SLIBSUF=$SLIBSUF" >> config.mak
1965
echo "EXESUF=$EXESUF" >> config.mak
1966

    
1967
if enabled bigendian; then
1968
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1969
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1970
fi
1971
if enabled mmx; then
1972
    echo "#define __CPU__ 586" >> $TMPH
1973
fi
1974

    
1975
if enabled sdl; then
1976
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1977
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1978
fi
1979
if enabled texi2html; then
1980
    echo "BUILD_DOC=yes" >> config.mak
1981
fi
1982

    
1983
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1984
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1985
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1986
lavd_version=`grep '#define LIBAVDEVICE_VERSION ' "$source_path/libavdevice/avdevice.h" | sed 's/[^0-9\.]//g'`
1987
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1988
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1989

    
1990

    
1991

    
1992
if enabled shared; then
1993
    echo "BUILD_SHARED=yes" >> config.mak
1994
    echo "PIC=-fPIC -DPIC" >> config.mak
1995
    echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1996
    echo "SPPVERSION=$pp_version" >> config.mak
1997
    echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1998
    echo "LAVCVERSION=$lavc_version" >> config.mak
1999
    echo "LAVDMAJOR=${lavd_version%%.*}" >> config.mak
2000
    echo "LAVDVERSION=$lavd_version" >> config.mak
2001
    echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
2002
    echo "LAVFVERSION=$lavf_version" >> config.mak
2003
    echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
2004
    echo "LAVUVERSION=$lavu_version" >> config.mak
2005
    echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
2006
    echo "SWSVERSION=$sws_version" >> config.mak
2007
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2008
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2009
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2010
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2011
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2012
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2013
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2014
fi
2015
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2016
echo "EXTRALIBS=$extralibs" >> config.mak
2017

    
2018
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2019
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2020
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2021
                                      $DECODER_LIST      \
2022
                                      $ENCODER_LIST      \
2023
                                      $PARSER_LIST       \
2024
                                      $BSF_LIST          \
2025
                                      $DEMUXER_LIST      \
2026
                                      $MUXER_LIST        \
2027
                                      $PROTOCOL_LIST     \
2028
                                      $INDEV_LIST        \
2029
                                      $OUTDEV_LIST       \
2030

    
2031
echo "#define restrict $_restrict" >> $TMPH
2032

    
2033
if enabled small; then
2034
    echo "#define av_always_inline"  >> $TMPH
2035
fi
2036

    
2037
echo "SRC_PATH=\"$source_path\"" >> config.mak
2038
echo "SRC_PATH_BARE=$source_path" >> config.mak
2039
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2040

    
2041
# Apparently it's not possible to portably echo a backslash.
2042
enabled asmalign_pot &&
2043
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2044
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2045

    
2046

    
2047
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2048

    
2049
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2050
cmp -s $TMPH config.h &&
2051
    echo "config.h is unchanged" ||
2052
    mv -f $TMPH config.h
2053

    
2054
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2055

    
2056
# build tree in object directory if source path is different from current one
2057
if enabled source_path_used; then
2058
    DIRS="\
2059
        doc               \
2060
        libavcodec        \
2061
        libavcodec/alpha  \
2062
        libavcodec/armv4l \
2063
        libavcodec/bfin   \
2064
        libavcodec/i386   \
2065
        libavcodec/mlib   \
2066
        libavcodec/ppc    \
2067
        libavcodec/sh4    \
2068
        libavcodec/sparc  \
2069
        libavdevice       \
2070
        libavformat       \
2071
        libavutil         \
2072
        libpostproc       \
2073
        libswscale        \
2074
        tests             \
2075
        tools             \
2076
        vhook             \
2077
        "
2078
    FILES="\
2079
        Makefile             \
2080
        common.mak           \
2081
        doc/texi2pod.pl      \
2082
        libavcodec/Makefile  \
2083
        libavdevice/Makefile \
2084
        libavformat/Makefile \
2085
        libavutil/Makefile   \
2086
        libpostproc/Makefile \
2087
        libswscale/Makefile  \
2088
        "
2089
    for dir in $DIRS ; do
2090
        mkdir -p $dir
2091
    done
2092
    for f in $FILES ; do
2093
        $ln_s "$source_path/$f" $f
2094
    done
2095
fi
2096

    
2097

    
2098
# build pkg-config files
2099
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2100

    
2101
pkgconfig_generate(){
2102
name=$1
2103
comment=$2
2104
version=$3
2105
libs=$4
2106
requires=$5
2107
include=$6
2108
cat <<EOF >$name.pc
2109
prefix=$PREFIX
2110
exec_prefix=\${prefix}
2111
libdir=\${exec_prefix}/lib
2112
includedir=\${prefix}/include
2113

    
2114
Name: $name
2115
Description: $comment
2116
Version: $version
2117
Requires: $requires
2118
Conflicts:
2119
Libs: -L\${libdir} $libs
2120
Cflags: -I\${includedir}/$include
2121
EOF
2122
}
2123

    
2124
pkgconfig_generate_uninstalled(){
2125
name=$1
2126
shortname=${name#lib}
2127
comment=$2
2128
version=$3
2129
libs=$4
2130
requires=$5
2131
cat <<EOF >$name-uninstalled.pc
2132
prefix=
2133
exec_prefix=
2134
libdir=\${pcfiledir}/$name
2135
includedir=\${pcfiledir}/$name
2136

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

    
2147
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2148
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2149

    
2150
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2151
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2152

    
2153
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2154
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2155

    
2156
pkgconfig_generate libavdevice "FFmpeg device handling library" "$lavd_version" "-lavdevice $extralibs" "$pkg_requires libavformat = $lavf_version" ffmpeg
2157
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$lavd_version" "$extralibs" "$pkg_requires libavformat = $lavf_version"
2158
if enabled pp; then
2159
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2160
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2161
fi
2162

    
2163
if enabled swscaler; then
2164
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2165
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2166
else
2167
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2168
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2169
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2170
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2171
fi