Statistics
| Branch: | Revision:

ffmpeg / configure @ 3abe5fbd

History | View | Annotate | Download (61.9 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-hardcoded-tables use hardcoded tables instead of runtime generation"
136
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
137
  echo "  --disable-encoder=NAME   disables encoder NAME"
138
  echo "  --enable-encoder=NAME    enables encoder NAME"
139
  echo "  --disable-decoder=NAME   disables decoder NAME"
140
  echo "  --enable-decoder=NAME    enables decoder NAME"
141
  echo "  --disable-encoders       disables all encoders"
142
  echo "  --disable-decoders       disables all decoders"
143
  echo "  --disable-muxer=NAME     disables muxer NAME"
144
  echo "  --enable-muxer=NAME      enables muxer NAME"
145
  echo "  --disable-muxers         disables all muxers"
146
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
147
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
148
  echo "  --disable-demuxers       disables all demuxers"
149
  echo "  --enable-parser=NAME     enables parser NAME"
150
  echo "  --disable-parser=NAME    disables parser NAME"
151
  echo "  --disable-parsers        disables all parsers"
152
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
153
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
154
  echo "  --disable-bsfs           disables all bitstream filters"
155
  echo "  --enable-protocol=NAME   enables protocol NAME"
156
  echo "  --disable-protocol=NAME  disables protocol NAME"
157
  echo "  --disable-protocols      disables all protocols"
158
  echo "  --disable-devices        disables all devices"
159
  echo "  --list-decoders          show all available decoders"
160
  echo "  --list-encoders          show all available encoders"
161
  echo "  --list-muxers            show all available muxers"
162
  echo "  --list-demuxers          show all available demuxers"
163
  echo "  --list-parsers           show all available parsers"
164
  echo "  --list-protocols         show all available protocols"
165
  echo "  --list-bsfs              show all available bitstream filters"
166
  echo "  --list-indevs            show all available input devices"
167
  echo "  --list-outdevs           show all available output devices"
168
  echo
169
  echo "Developer options (useful when working on FFmpeg itself):"
170
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
171
  echo "  --disable-optimizations  disable compiler optimizations"
172
  echo "  --enable-extra-warnings  enable more compiler warnings"
173
  echo "  --disable-strip          disable stripping of executables and shared libraries"
174
  echo ""
175
  echo "NOTE: Object files are built at the place where configure is launched."
176
  exit 1
177
}
178

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
663
THREADS_LIST='
664
    beosthreads
665
    os2threads
666
    pthreads
667
    w32threads
668
'
669

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

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

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

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

    
763
# code dependency declarations
764

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

    
775
# decoders / encoders
776
ac3_decoder_deps="gpl"
777
dxa_decoder_deps="zlib"
778
flashsv_decoder_deps="zlib"
779
flashsv_encoder_deps="zlib"
780
flv_decoder_deps="h263_decoder"
781
h263_decoder_deps="h263_parser mpeg4video_parser"
782
h263i_decoder_deps="h263_decoder"
783
h264_decoder_deps="h264_parser"
784
mpeg_xvmc_decoder_deps="xvmc"
785
mpeg4_decoder_deps="h263_decoder"
786
msmpeg4v1_decoder_deps="h263_decoder"
787
msmpeg4v2_decoder_deps="h263_decoder"
788
msmpeg4v3_decoder_deps="h263_decoder"
789
png_decoder_deps="zlib"
790
png_encoder_deps="zlib"
791
svq3_decoder_deps="h264_parser"
792
vc1_decoder_deps="h263_decoder"
793
wmv1_decoder_deps="h263_decoder"
794
wmv2_decoder_deps="h263_decoder"
795
wmv3_decoder_deps="h263_decoder"
796
zmbv_decoder_deps="zlib"
797
zmbv_encoder_deps="zlib"
798

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

    
820
# demuxers / muxers
821
ac3_demuxer_deps="ac3_parser"
822
audio_beos_demuxer_deps="audio_beos"
823
audio_beos_demuxer_extralibs="-lmedia -lbe"
824
audio_beos_muxer_deps="audio_beos"
825
audio_beos_muxer_extralibs="-lmedia -lbe"
826
avisynth_demuxer_deps="avisynth"
827
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
828
dv1394_demuxer_deps="dv1394 dv_demuxer"
829
libdc1394_demuxer_deps="libdc1394"
830
libnut_demuxer_deps="libnut"
831
libnut_muxer_deps="libnut"
832
mp3_demuxer_deps="mpegaudio_parser"
833
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
834
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
835
redir_demuxer_deps="network"
836
rtp_muxer_deps="network rtp_protocol"
837
rtsp_demuxer_deps="sdp_demuxer"
838
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
839
v4l2_demuxer_deps="linux_videodev2_h"
840
v4l_demuxer_deps="linux_videodev_h"
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
# programs
851
ffplay_deps="sdl"
852
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
853
ffserver_extralibs='$ldl'
854
vhook_extralibs='$ldl'
855

    
856

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

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

    
872
# default parameters
873

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

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

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

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

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

    
901
# libraries
902
enable zlib
903

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

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

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

    
947
FFMPEG_CONFIGURATION="$@"
948

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

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

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

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

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

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

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

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

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

    
1294
add_extralibs $osextralibs
1295

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

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

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

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

    
1324
disabled static && LIBNAME=""
1325

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

    
1341

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

    
1357
check_deps $ARCH_EXT_LIST
1358

    
1359
test -z "$need_memalign" && need_memalign="$mmx"
1360

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

    
1373
disabled optimizations || add_cflags -fomit-frame-pointer
1374

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

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

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

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

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

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

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

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

    
1506
# check for assembler specific support
1507

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

    
1519
# check for SIMD availability
1520

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

    
1527
    check_header altivec.h
1528

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

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

    
1549
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1550

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

    
1558
# ---
1559
# check availability of some header files
1560

    
1561
if check_func dlopen; then
1562
    ldl=
1563
elif check_func dlopen -ldl; then
1564
    ldl=-ldl
1565
fi
1566

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

    
1575
check_header byteswap.h
1576
check_header conio.h
1577
check_header dlfcn.h
1578
check_header malloc.h
1579
check_header termios.h
1580

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

    
1585
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1586

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

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

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

    
1618
check_lib math.h sin -lm
1619

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

    
1629
enabled_any libamr_nb libamr_wb && enable libamr
1630

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

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

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

    
1658
test "$vhook" = "default" && vhook="$dlopen"
1659

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

    
1668
if enabled vhook; then
1669
    check_ldflags -rdynamic
1670
    check_ldflags -export-dynamic
1671
fi
1672

    
1673
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1674
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1675

    
1676
##########################################
1677
# SDL check
1678

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

    
1705
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1706

    
1707
check_type sys/socket.h socklen_t
1708

    
1709
##########################################
1710
# Network check
1711

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

    
1723
##########################################
1724
# IPv6 check
1725

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

    
1740
check_header linux/videodev.h
1741
check_header linux/videodev2.h
1742

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

    
1752
check_header sys/soundcard.h
1753
check_header soundcard.h
1754

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

    
1762
enabled debug && add_cflags -g
1763

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

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

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

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

    
1801
if enabled gprof; then
1802
    add_cflags  "-p"
1803
    add_ldflags "-p"
1804
fi
1805

    
1806
VHOOKCFLAGS="-fPIC"
1807

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

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

    
1823
enabled_any $THREADS_LIST      && enable threads
1824

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

    
1837
enabled libdc1394 && append pkg_requires "libraw1394"
1838
enabled libtheora && append pkg_requires "theora"
1839
enabled libvorbis && append pkg_requires "vorbisenc"
1840

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

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

    
1926
echo "Creating config.mak and config.h..."
1927

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

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

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

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

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

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

    
1992

    
1993

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

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

    
2033
echo "#define restrict $_restrict" >> $TMPH
2034

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

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

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

    
2048

    
2049
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2050

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

    
2056
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2057

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

    
2099

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

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

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

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

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

    
2149
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2150
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2151

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

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

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

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