Statistics
| Branch: | Revision:

ffmpeg / configure @ b973f9ad

History | View | Annotate | Download (62.2 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-user@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
    libdc1394_1
729
    libdc1394_2
730
    llrint
731
    lrint
732
    lrintf
733
    machine_ioctl_bt848_h
734
    machine_ioctl_meteor_h
735
    malloc_h
736
    memalign
737
    mkstemp
738
    mlib
739
    ppc64
740
    round
741
    roundf
742
    sdl
743
    sdl_video_size
744
    socklen_t
745
    soundcard_h
746
    sys_poll_h
747
    sys_select_h
748
    sys_soundcard_h
749
    termios_h
750
    threads
751
    winsock2_h
752
"
753

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

    
765
# code dependency declarations
766

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

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

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

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

    
846
# protocols
847
http_protocol_deps="network"
848
rtp_protocol_deps="udp_protocol"
849
tcp_protocol_deps="network"
850
udp_protocol_deps="network"
851

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

    
858

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

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

    
874
# default parameters
875

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

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

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

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

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

    
903
# libraries
904
enable zlib
905

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

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

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

    
949
FFMPEG_CONFIGURATION="$@"
950

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

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

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

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

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

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

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

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

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

    
1296
add_extralibs $osextralibs
1297

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

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

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

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

    
1326
disabled static && LIBNAME=""
1327

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

    
1343

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

    
1359
check_deps $ARCH_EXT_LIST
1360

    
1361
test -z "$need_memalign" && need_memalign="$mmx"
1362

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

    
1375
disabled optimizations || add_cflags -fomit-frame-pointer
1376

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

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

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

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

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

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

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

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

    
1508
# check for assembler specific support
1509

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

    
1521
# check for SIMD availability
1522

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

    
1529
    check_header altivec.h
1530

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1620
check_lib math.h sin -lm
1621

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

    
1631
enabled_any libamr_nb libamr_wb && enable libamr
1632

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

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

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

    
1661

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

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

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

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

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

    
1687
##########################################
1688
# SDL check
1689

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

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

    
1718
check_type sys/socket.h socklen_t
1719

    
1720
##########################################
1721
# Network check
1722

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

    
1734
##########################################
1735
# IPv6 check
1736

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

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

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

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

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

    
1773
enabled debug && add_cflags -g
1774

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

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

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

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

    
1812
if enabled gprof; then
1813
    add_cflags  "-p"
1814
    add_ldflags "-p"
1815
fi
1816

    
1817
VHOOKCFLAGS="-fPIC"
1818

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

    
1825
enabled_any $DECODER_LIST      && enable decoders
1826
enabled_any $ENCODER_LIST      && enable encoders
1827
enabled_any $BSF_LIST          && enable bsfs
1828
enabled_any $DEMUXER_LIST      && enable demuxers
1829
enabled_any $MUXER_LIST        && enable muxers
1830
enabled_any $INDEV_LIST        && enable demuxers
1831
enabled_any $OUTDEV_LIST       && enable muxers
1832
enabled_any $PROTOCOL_LIST     && enable protocols
1833

    
1834
enabled_any $THREADS_LIST      && enable threads
1835

    
1836
check_deps $CONFIG_LIST       \
1837
           $HAVE_LIST         \
1838
           $DECODER_LIST      \
1839
           $ENCODER_LIST      \
1840
           $PARSER_LIST       \
1841
           $BSF_LIST          \
1842
           $DEMUXER_LIST      \
1843
           $MUXER_LIST        \
1844
           $INDEV_LIST        \
1845
           $OUTDEV_LIST       \
1846
           $PROTOCOL_LIST     \
1847

    
1848
enabled libdc1394 && append pkg_requires "libraw1394"
1849
enabled libtheora && append pkg_requires "theora"
1850
enabled libvorbis && append pkg_requires "vorbisenc"
1851

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

    
1922
for type in decoder encoder parser demuxer muxer protocol bsf indev outdev; do
1923
    echo "Enabled ${type}s:"
1924
    ucname="\$`toupper $type`_LIST"
1925
    list="`eval echo $ucname`"
1926
    partlist=""
1927
    for part in $list; do
1928
        enabled $part && partlist="$partlist $part"
1929
    done
1930
    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1931
    echo $partlist
1932
done
1933

    
1934
echo "Creating config.mak and config.h..."
1935

    
1936
enabled gpl &&
1937
    echo "License: GPL" ||
1938
    echo "License: LGPL"
1939

    
1940
echo "# Automatically generated by configure - do not modify!" > config.mak
1941
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1942
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1943
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1944
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1945

    
1946
echo "PREFIX=$PREFIX" >> config.mak
1947
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1948
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1949
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1950
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1951
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1952
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1953
echo "MAKE=$make" >> config.mak
1954
echo "CC=$cc" >> config.mak
1955
echo "AR=$ar" >> config.mak
1956
echo "RANLIB=$ranlib" >> config.mak
1957
echo "LDCONFIG=$LDCONFIG" >> config.mak
1958
echo "LN_S=$ln_s" >> config.mak
1959
enabled dostrip &&
1960
    echo "STRIP=$strip" >> config.mak ||
1961
    echo "STRIP=echo ignoring strip" >> config.mak
1962

    
1963
echo "OPTFLAGS=$CFLAGS" >> config.mak
1964
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1965
echo "LDFLAGS=$LDFLAGS" >> config.mak
1966
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1967
echo "SHFLAGS=$SHFLAGS" >> config.mak
1968
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1969
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1970
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1971
echo "BUILD_STATIC=$static" >> config.mak
1972
echo "BUILDSUF=$BUILDSUF" >> config.mak
1973
echo "FULLNAME=$FULLNAME" >> config.mak
1974
echo "LIBPREF=$LIBPREF" >> config.mak
1975
echo "LIBSUF=$LIBSUF" >> config.mak
1976
echo "LIBNAME=$LIBNAME" >> config.mak
1977
echo "SLIBPREF=$SLIBPREF" >> config.mak
1978
echo "SLIBSUF=$SLIBSUF" >> config.mak
1979
echo "EXESUF=$EXESUF" >> config.mak
1980

    
1981
if enabled bigendian; then
1982
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1983
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1984
fi
1985
if enabled mmx; then
1986
    echo "#define __CPU__ 586" >> $TMPH
1987
fi
1988

    
1989
if enabled sdl; then
1990
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1991
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1992
fi
1993
if enabled texi2html; then
1994
    echo "BUILD_DOC=yes" >> config.mak
1995
fi
1996

    
1997
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1998
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1999
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
2000
lavd_version=`grep '#define LIBAVDEVICE_VERSION ' "$source_path/libavdevice/avdevice.h" | sed 's/[^0-9\.]//g'`
2001
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
2002
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
2003

    
2004

    
2005

    
2006
if enabled shared; then
2007
    echo "BUILD_SHARED=yes" >> config.mak
2008
    echo "PIC=-fPIC -DPIC" >> config.mak
2009
    echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
2010
    echo "SPPVERSION=$pp_version" >> config.mak
2011
    echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
2012
    echo "LAVCVERSION=$lavc_version" >> config.mak
2013
    echo "LAVDMAJOR=${lavd_version%%.*}" >> config.mak
2014
    echo "LAVDVERSION=$lavd_version" >> config.mak
2015
    echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
2016
    echo "LAVFVERSION=$lavf_version" >> config.mak
2017
    echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
2018
    echo "LAVUVERSION=$lavu_version" >> config.mak
2019
    echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
2020
    echo "SWSVERSION=$sws_version" >> config.mak
2021
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2022
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2023
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2024
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2025
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2026
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2027
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2028
fi
2029
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2030
echo "EXTRALIBS=$extralibs" >> config.mak
2031

    
2032
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2033
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2034
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2035
                                      $DECODER_LIST      \
2036
                                      $ENCODER_LIST      \
2037
                                      $PARSER_LIST       \
2038
                                      $BSF_LIST          \
2039
                                      $DEMUXER_LIST      \
2040
                                      $MUXER_LIST        \
2041
                                      $PROTOCOL_LIST     \
2042
                                      $INDEV_LIST        \
2043
                                      $OUTDEV_LIST       \
2044

    
2045
echo "#define restrict $_restrict" >> $TMPH
2046

    
2047
if enabled small; then
2048
    echo "#define av_always_inline"  >> $TMPH
2049
fi
2050

    
2051
echo "SRC_PATH=\"$source_path\"" >> config.mak
2052
echo "SRC_PATH_BARE=$source_path" >> config.mak
2053
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2054

    
2055
# Apparently it's not possible to portably echo a backslash.
2056
enabled asmalign_pot &&
2057
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2058
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2059

    
2060

    
2061
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2062

    
2063
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2064
cmp -s $TMPH config.h &&
2065
    echo "config.h is unchanged" ||
2066
    mv -f $TMPH config.h
2067

    
2068
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2069

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

    
2111

    
2112
# build pkg-config files
2113
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2114

    
2115
pkgconfig_generate(){
2116
name=$1
2117
comment=$2
2118
version=$3
2119
libs=$4
2120
requires=$5
2121
include=$6
2122
cat <<EOF >$name.pc
2123
prefix=$PREFIX
2124
exec_prefix=\${prefix}
2125
libdir=\${exec_prefix}/lib
2126
includedir=\${prefix}/include
2127

    
2128
Name: $name
2129
Description: $comment
2130
Version: $version
2131
Requires: $requires
2132
Conflicts:
2133
Libs: -L\${libdir} $libs
2134
Cflags: -I\${includedir}/$include
2135
EOF
2136
}
2137

    
2138
pkgconfig_generate_uninstalled(){
2139
name=$1
2140
shortname=${name#lib}
2141
comment=$2
2142
version=$3
2143
libs=$4
2144
requires=$5
2145
cat <<EOF >$name-uninstalled.pc
2146
prefix=
2147
exec_prefix=
2148
libdir=\${pcfiledir}/$name
2149
includedir=\${pcfiledir}/$name
2150

    
2151
Name: $name
2152
Description: $comment
2153
Version: $version
2154
Requires: $requires
2155
Conflicts:
2156
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2157
Cflags: -I\${includedir}
2158
EOF
2159
}
2160

    
2161
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2162
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2163

    
2164
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2165
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2166

    
2167
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2168
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2169

    
2170
pkgconfig_generate libavdevice "FFmpeg device handling library" "$lavd_version" "-lavdevice $extralibs" "$pkg_requires libavformat = $lavf_version" ffmpeg
2171
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$lavd_version" "$extralibs" "$pkg_requires libavformat = $lavf_version"
2172
if enabled pp; then
2173
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2174
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2175
fi
2176

    
2177
if enabled swscaler; then
2178
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2179
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2180
else
2181
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2182
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2183
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2184
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2185
fi