Statistics
| Branch: | Revision:

ffmpeg / configure @ 08c4e395

History | View | Annotate | Download (62.7 KB)

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

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

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

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

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

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

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

    
183
log(){
184
    echo "$@" >>$logfile
185
}
186

    
187
log_file(){
188
    log BEGIN $1
189
    pr -n -t $1 >>$logfile
190
    log END $1
191
}
192

    
193
echolog(){
194
    log "$@"
195
    echo "$@"
196
}
197

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

    
220
# Avoid locale weirdness, besides we really just want to translate ASCII.
221
toupper(){
222
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
223
}
224

    
225
tolower(){
226
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
227
}
228

    
229
set_all(){
230
    value=$1
231
    shift
232
    for var in $*; do
233
        eval $var=$value
234
    done
235
}
236

    
237
pushvar(){
238
    for var in $*; do
239
        eval level=\${${var}_level:=0}
240
        eval ${var}_${level}="\$$var"
241
        eval ${var}_level=$(($level+1))
242
    done
243
}
244

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

    
256
enable(){
257
    set_all yes $*
258
}
259

    
260
disable(){
261
    set_all no $*
262
}
263

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

    
268
disabled(){
269
    eval test "x\$$1" = "xno"
270
}
271

    
272
enabled_all(){
273
    for opt; do
274
        enabled $opt || return 1
275
    done
276
}
277

    
278
disabled_all(){
279
    for opt; do
280
        disabled $opt || return 1
281
    done
282
}
283

    
284
enabled_any(){
285
    for opt; do
286
        enabled $opt && return 0
287
    done
288
}
289

    
290
disabled_any(){
291
    for opt; do
292
        disabled $opt && return 0
293
    done
294
}
295

    
296
is_in(){
297
    value=$1
298
    shift
299
    for var in $*; do
300
        [ $var = $value ] && return 0
301
    done
302
    return 1
303
}
304

    
305
check_deps(){
306
    for cfg; do
307
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
308
        disabled ${cfg}_checking && continue
309
        enable ${cfg}_checking
310

    
311
        eval dep_all="\$${cfg}_deps"
312
        eval dep_any="\$${cfg}_deps_any"
313

    
314
        pushvar cfg dep_all dep_any
315
        check_deps $dep_all $dep_any
316
        popvar cfg dep_all dep_any
317

    
318
        enabled_all $dep_all || disable $cfg
319
        enabled_any $dep_any || disable $cfg
320

    
321
        if enabled $cfg; then
322
            eval dep_extralibs="\$${cfg}_extralibs"
323
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
324
        fi
325

    
326
        disable ${cfg}_checking
327
    done
328
}
329

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

    
347
flags_saved(){
348
    (: ${SAVE_CFLAGS?}) 2>/dev/null
349
}
350

    
351
save_flags(){
352
    flags_saved && return
353
    SAVE_CFLAGS="$CFLAGS"
354
    SAVE_LDFLAGS="$LDFLAGS"
355
    SAVE_extralibs="$extralibs"
356
}
357

    
358
restore_flags(){
359
    flags_saved || return
360
    CFLAGS="$SAVE_CFLAGS"
361
    LDFLAGS="$SAVE_LDFLAGS"
362
    extralibs="$SAVE_extralibs"
363
    unset SAVE_CFLAGS
364
    unset SAVE_LDFLAGS
365
    unset SAVE_extralibs
366
}
367

    
368
temp_cflags(){
369
    save_flags
370
    CFLAGS="$CFLAGS $*"
371
}
372

    
373
temp_ldflags(){
374
    save_flags
375
    LDFLAGS="$LDFLAGS $*"
376
}
377

    
378
temp_extralibs(){
379
    save_flags
380
    extralibs="$extralibs $*"
381
}
382

    
383
append(){
384
    var=$1
385
    shift
386
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
387
    eval "$var=\"\$$var $*\""
388
}
389

    
390
add_cflags(){
391
    append CFLAGS "$@"
392
}
393

    
394
add_ldflags(){
395
    append LDFLAGS "$@"
396
}
397

    
398
add_extralibs(){
399
    append extralibs "$@"
400
}
401

    
402
check_cmd(){
403
    log "$@"
404
    "$@" >>$logfile 2>&1
405
}
406

    
407
check_cc(){
408
    log check_cc "$@"
409
    cat >$TMPC
410
    log_file $TMPC
411
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
412
}
413

    
414
check_cpp(){
415
    log check_cpp "$@"
416
    cat >$TMPC
417
    log_file $TMPC
418
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
419
}
420

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

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

    
444
check_cflags(){
445
    log check_cflags "$@"
446
    check_cc "$@" <<EOF && add_cflags "$@"
447
int x;
448
EOF
449
}
450

    
451
check_ldflags(){
452
    log check_ldflags "$@"
453
    check_ld "$@" <<EOF && add_ldflags "$@"
454
int main(void){
455
    return 0;
456
}
457
EOF
458
}
459

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

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

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

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

    
517
check_lib2(){
518
    log check_lib2 "$@"
519
    headers="$1"
520
    func="$2"
521
    shift 2
522
    temp_extralibs "$@"
523
    check_func2 "$headers" $func && add_extralibs "$@"
524
    err=$?
525
    restore_flags
526
    return $err
527
}
528

    
529
check_exec(){
530
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
531
}
532

    
533
check_exec_crash(){
534
    code=`cat`
535

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

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

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

    
576
require(){
577
    name="$1"
578
    header="$2"
579
    func="$3"
580
    shift 3
581
    check_lib $header $func "$@" || die "ERROR: $name not found"
582
}
583

    
584
require2(){
585
    name="$1"
586
    headers="$2"
587
    func="$3"
588
    shift 3
589
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
590
}
591

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

    
609
apply(){
610
    file=$1
611
    shift
612
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
613
}
614

    
615
COMPONENT_LIST="
616
    bsfs
617
    decoders
618
    demuxers
619
    encoders
620
    filters
621
    indevs
622
    muxers
623
    outdevs
624
    parsers
625
    protocols
626
"
627

    
628
CONFIG_LIST="
629
    $COMPONENT_LIST
630
    avfilter
631
    avfilter_lavf
632
    avisynth
633
    beos_netserver
634
    ffmpeg
635
    ffplay
636
    ffserver
637
    gpl
638
    gprof
639
    gray
640
    hardcoded_tables
641
    ipv6
642
    liba52
643
    liba52bin
644
    libamr_nb
645
    libamr_wb
646
    libdc1394
647
    libfaac
648
    libfaad
649
    libfaadbin
650
    libgsm
651
    libmp3lame
652
    libnut
653
    libtheora
654
    libvorbis
655
    libx264
656
    libxvid
657
    memalign_hack
658
    mpegaudio_hp
659
    network
660
    nonfree
661
    postproc
662
    powerpc_perf
663
    small
664
    swscale
665
    vhook
666
    x11grab
667
    zlib
668
"
669

    
670
THREADS_LIST='
671
    beosthreads
672
    os2threads
673
    pthreads
674
    w32threads
675
'
676

    
677
ARCH_LIST='
678
    alpha
679
    armv4l
680
    bfin
681
    ia64
682
    m68k
683
    mips
684
    parisc
685
    powerpc
686
    s390
687
    sh4
688
    sparc
689
    sparc64
690
    x86
691
    x86_32
692
    x86_64
693
'
694

    
695
ARCH_EXT_LIST='
696
    altivec
697
    armv5te
698
    armv6
699
    iwmmxt
700
    mmi
701
    mmx
702
    ssse3
703
    vis
704
'
705

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

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

    
774
# code dependency declarations
775

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

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

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

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

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

    
850
# filters
851
movie_filter_deps="avfilter_lavf"
852

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

    
859

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

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

    
875
# default parameters
876

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

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

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

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

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

    
904
# libraries
905
enable zlib
906

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

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

    
937
# gcc stupidly only outputs the basename of targets with -MM
938
DEPEND_CMD='$(CC) -MM $(CFLAGS) $(filter-out %.h,$^) | sed "s,[0-9a-z._-]*: \($(SRC_DIR)/\)*\([a-z0-9]*/\)[^/]* ,\2&,"'
939
VHOOK_DEPEND_CMD='$(CC) -MM $(VHOOKCFLAGS) $(filter-out %.h,$^) | sed "s,^\([a-z]\),vhook/\1,"'
940

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

    
953
FFMPEG_CONFIGURATION="$@"
954

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

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

    
973
enable $ARCH_EXT_LIST \
974
       $DECODER_LIST \
975
       $ENCODER_LIST \
976
       $PARSER_LIST \
977
       $BSF_LIST \
978
       $DEMUXER_LIST \
979
       $MUXER_LIST \
980
       $FILTER_LIST \
981
       $PROTOCOL_LIST \
982
       $INDEV_LIST \
983
       $OUTDEV_LIST \
984

    
985
die_unknown(){
986
    echo "Unknown option \"$1\"."
987
    echo "See $0 --help for available options."
988
    exit 1
989
}
990

    
991
show_list() {
992
    suffix=_$1
993
    shift
994
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
995
    exit 0
996
}
997

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

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

    
1147
enable $arch
1148
enabled_any x86_32 x86_64 && enable x86
1149
enabled     sparc64       && enable sparc
1150

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

    
1297
    *)
1298
        targetos="${targetos}-UNKNOWN"
1299
        ;;
1300
esac
1301

    
1302
add_extralibs $osextralibs
1303

    
1304
if ! disabled logging ; then
1305
    enabled logging || logfile="$logging"
1306
    echo "# $0 $@" >$logfile
1307
    set >>$logfile
1308
else
1309
    logfile=/dev/null
1310
fi
1311

    
1312
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1313
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1314

    
1315
test -n "$cross_prefix" && enable cross_compile
1316
cc="${cross_prefix}${cc}"
1317
ar="${cross_prefix}${ar}"
1318
ranlib="${cross_prefix}${ranlib}"
1319
strip="${cross_prefix}${strip}"
1320

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

    
1332
disabled static && LIBNAME=""
1333

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

    
1349

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

    
1365
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1366
    die "libamr is nonfree and --enable-nonfree is not specified."
1367
fi
1368

    
1369
check_deps $ARCH_EXT_LIST
1370

    
1371
test -z "$need_memalign" && need_memalign="$mmx"
1372

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

    
1385
disabled optimizations || add_cflags -fomit-frame-pointer
1386

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

    
1456
gnu_make(){
1457
    $1 --version 2>&1 | grep -q GNU
1458
}
1459

    
1460
if ! gnu_make $make; then
1461
    gnu_make gmake && make=gmake || die "GNU make not found."
1462
fi
1463

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

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

    
1494
check_asm inline_asm '""'
1495

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

    
1509
    # check wether EBX is available on x86
1510
    check_asm ebx_available '"":::"%ebx"'
1511

    
1512
    # check whether binutils is new enough to compile SSSE3
1513
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1514

    
1515
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1516
fi
1517

    
1518
# check for assembler specific support
1519

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

    
1531
# check for SIMD availability
1532

    
1533
# AltiVec flags: The FSF version of GCC differs from the Apple version
1534
if enabled altivec; then
1535
    check_cflags -maltivec -mabi=altivec &&
1536
        check_header altivec.h ||
1537
        check_cflags -faltivec
1538

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

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

    
1559
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1560

    
1561
# ---
1562
# big/little-endian test
1563
check_cc <<EOF || die "endian test failed"
1564
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1565
EOF
1566
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1567

    
1568
# ---
1569
# check availability of some header files
1570

    
1571
if check_func dlopen; then
1572
    ldl=
1573
elif check_func dlopen -ldl; then
1574
    ldl=-ldl
1575
fi
1576

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

    
1585
check_header byteswap.h
1586
check_header conio.h
1587
check_header dlfcn.h
1588
check_header malloc.h
1589
check_header termios.h
1590

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

    
1595
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1596

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

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

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

    
1628
check_lib math.h sin -lm
1629

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

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

    
1655
# disable the native AC-3 decoder if liba52 is enabled
1656
enabled liba52 && disable ac3_decoder
1657

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

    
1667

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

    
1675
test "$vhook" = "default" && vhook="$dlopen"
1676

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

    
1685
if enabled vhook; then
1686
    check_ldflags -rdynamic
1687
    check_ldflags -export-dynamic
1688
fi
1689

    
1690
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1691
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1692

    
1693
##########################################
1694
# SDL check
1695

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

    
1722
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1723

    
1724
check_type sys/socket.h socklen_t
1725

    
1726
##########################################
1727
# Network check
1728

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

    
1740
##########################################
1741
# IPv6 check
1742

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

    
1757
check_header linux/videodev.h
1758
check_header linux/videodev2.h
1759

    
1760
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1761

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

    
1771
check_header sys/soundcard.h
1772
check_header soundcard.h
1773

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

    
1781
enabled debug && add_cflags -g"$debuglevel"
1782

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

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

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

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

    
1825
if enabled gprof; then
1826
    add_cflags  "-p"
1827
    add_ldflags "-p"
1828
fi
1829

    
1830
VHOOKCFLAGS="-fPIC"
1831

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

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

    
1848
enabled_any $THREADS_LIST      && enable threads
1849

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

    
1863
enabled libdc1394 && append pkg_requires "libraw1394"
1864
enabled libtheora && append pkg_requires "theora"
1865
enabled libvorbis && append pkg_requires "vorbisenc"
1866

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

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

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

    
1955
echo "Creating config.mak and config.h..."
1956

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

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

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

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

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

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

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

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

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

    
2058
echo "#define restrict $_restrict" >> $TMPH
2059

    
2060
if enabled small; then
2061
    echo "#define av_always_inline"  >> $TMPH
2062
fi
2063

    
2064
echo "SRC_PATH=\"$source_path\"" >> config.mak
2065
echo "SRC_PATH_BARE=$source_path" >> config.mak
2066
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2067

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

    
2073

    
2074
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2075

    
2076
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2077
cmp -s $TMPH config.h &&
2078
    echo "config.h is unchanged" ||
2079
    mv -f $TMPH config.h
2080

    
2081
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2082

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

    
2126

    
2127
# build pkg-config files
2128
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2129

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

    
2142
Name: $name
2143
Description: $comment
2144
Version: $version
2145
Requires: $requires
2146
Conflicts:
2147
Libs: -L\${libdir} $libs
2148
Cflags: -I\${includedir}
2149
EOF
2150
}
2151

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

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

    
2175
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2176
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2177

    
2178
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2179
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2180

    
2181
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2182
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2183

    
2184
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2185
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2186
if enabled postproc; then
2187
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2188
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2189
fi
2190

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

    
2201
if enabled avfilter; then
2202
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2203
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2204
fi