Statistics
| Branch: | Revision:

ffmpeg / configure @ b4d96ba2

History | View | Annotate | Download (62.8 KB)

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

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

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

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

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

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

    
53
show_help(){
54
  echo "Usage: configure [options]"
55
  echo "Options: [defaults in brackets after descriptions]"
56
  echo
57
  echo "Standard options:"
58
  echo "  --help                   print this message"
59
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
64
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
65
  echo "  --enable-static          build static libraries [default=yes]"
66
  echo "  --disable-static         do not build static libraries [default=no]"
67
  echo "  --enable-shared          build shared libraries [default=no]"
68
  echo "  --disable-shared         do not build shared libraries [default=yes]"
69
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
70
  echo "                           and ffmpeg will be under GPL [default=no]"
71
  echo "  --enable-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 ! echo $CFLAGS | grep -q -- -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 -q 'headers/be/bone'; 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 $cc -v 2>&1 | grep -q 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_cc <<EOF || die "Symbol mangling check failed."
1495
int ff_extern;
1496
EOF
1497
sym=$(nm -P $TMPO)
1498
extern_prefix=${sym%%ff_extern*}
1499

    
1500
check_asm inline_asm '""'
1501

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

    
1515
    # check wether EBX is available on x86
1516
    check_asm ebx_available '"":::"%ebx"'
1517

    
1518
    # check whether binutils is new enough to compile SSSE3
1519
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1520

    
1521
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1522
fi
1523

    
1524
# check for assembler specific support
1525

    
1526
if test $arch = "powerpc"; then
1527
check_cc <<EOF && enable dcbzl
1528
int main(void) {
1529
    register long zero = 0;
1530
    char data[1024];
1531
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1532
return 0;
1533
}
1534
EOF
1535
fi
1536

    
1537
# check for SIMD availability
1538

    
1539
# AltiVec flags: The FSF version of GCC differs from the Apple version
1540
if enabled altivec; then
1541
    check_cflags -maltivec -mabi=altivec &&
1542
        check_header altivec.h ||
1543
        check_cflags -faltivec
1544

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

    
1559
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1560
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1561
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1562
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1563
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1564

    
1565
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1566

    
1567
# ---
1568
# big/little-endian test
1569
check_cc <<EOF || die "endian test failed"
1570
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1571
EOF
1572
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1573

    
1574
# ---
1575
# check availability of some header files
1576

    
1577
if check_func dlopen; then
1578
    ldl=
1579
elif check_func dlopen -ldl; then
1580
    ldl=-ldl
1581
fi
1582

    
1583
check_func  fork
1584
check_func  gethrtime
1585
check_func  getrusage
1586
check_func  inet_aton $network_extralibs
1587
check_func  memalign
1588
check_func  mkstemp
1589
check_func2 windows.h GetProcessTimes
1590

    
1591
check_header byteswap.h
1592
check_header conio.h
1593
check_header dlfcn.h
1594
check_header malloc.h
1595
check_header termios.h
1596

    
1597
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1598
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1599
fi
1600

    
1601
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1602

    
1603
# ffserver uses poll(),
1604
# if it's not found we can emulate it using select().
1605
if enabled ffserver; then
1606
    check_header poll.h
1607
    check_header sys/select.h
1608
fi
1609

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

    
1626
for thread in $THREADS_LIST; do
1627
    if enabled $thread; then
1628
        test -n "$thread_type" &&
1629
            die "ERROR: Only one thread type must be selected." ||
1630
            thread_type="$thread"
1631
    fi
1632
done
1633

    
1634
check_lib math.h sin -lm
1635

    
1636
# test for C99 functions in math.h
1637
for func in llrint lrint lrintf round roundf; do
1638
    check_exec <<EOF && enable $func || disable $func
1639
#define _ISOC9X_SOURCE  1
1640
#include <math.h>
1641
int main(void) { return ($func(3.999f) > 0)?0:1; }
1642
EOF
1643
done
1644

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

    
1661
# disable the native AC-3 decoder if liba52 is enabled
1662
enabled liba52 && disable ac3_decoder
1663

    
1664
# libdc1394 check
1665
if enabled libdc1394; then
1666
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1667
        enable libdc1394_2; } ||
1668
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1669
        enable libdc1394_1; } ||
1670
    die "ERROR: No version of libdc1394 found "
1671
fi
1672

    
1673

    
1674
_restrict=
1675
for restrict_keyword in restrict __restrict__ __restrict; do
1676
    check_cc <<EOF && _restrict=$restrict_keyword && break
1677
void foo(char * $restrict_keyword p);
1678
EOF
1679
done
1680

    
1681
test "$vhook" = "default" && vhook="$dlopen"
1682

    
1683
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1684
    disable vhook
1685
    echo
1686
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1687
    echo "Patches welcome."
1688
    echo
1689
fi
1690

    
1691
if enabled vhook; then
1692
    check_ldflags -rdynamic
1693
    check_ldflags -export-dynamic
1694
fi
1695

    
1696
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1697
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1698

    
1699
##########################################
1700
# SDL check
1701

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

    
1728
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1729

    
1730
check_type sys/socket.h socklen_t
1731

    
1732
##########################################
1733
# Network check
1734

    
1735
if enabled network; then
1736
    # Prefer arpa/inet.h over winsock2
1737
    if check_header arpa/inet.h ; then
1738
        check_func closesocket
1739
    elif check_header winsock2.h ; then
1740
        network_extralibs="-lws2_32"
1741
        check_type ws2tcpip.h socklen_t
1742
        check_func2 winsock2.h closesocket
1743
    fi
1744
fi
1745

    
1746
##########################################
1747
# IPv6 check
1748

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

    
1763
check_header linux/videodev.h
1764
check_header linux/videodev2.h
1765

    
1766
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1767

    
1768
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1769
{ check_header dev/bktr/ioctl_meteor.h &&
1770
  check_header dev/bktr/ioctl_bt848.h; } ||
1771
{ check_header machine/ioctl_meteor.h &&
1772
  check_header machine/ioctl_bt848.h; } ||
1773
{ check_header dev/video/meteor/ioctl_meteor.h &&
1774
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1775
check_header dev/ic/bt8xx.h
1776

    
1777
check_header sys/soundcard.h
1778
check_header soundcard.h
1779

    
1780
# deal with the X11 frame grabber
1781
enabled x11grab                         &&
1782
check_header X11/Xlib.h                 &&
1783
check_header X11/extensions/XShm.h      &&
1784
check_func XOpenDisplay -lX11           &&
1785
check_func XShmCreateImage -lX11 -lXext
1786

    
1787
enabled debug && add_cflags -g"$debuglevel"
1788

    
1789
# add some useful compiler flags if supported
1790
check_cflags -Wdeclaration-after-statement
1791
check_cflags -Wall
1792
check_cflags -Wno-switch
1793
check_cflags -Wdisabled-optimization
1794
check_cflags -Wpointer-arith
1795
check_cflags -Wredundant-decls
1796
check_cflags -Wno-pointer-sign
1797
check_cflags -Wcast-qual
1798
check_cflags -Wwrite-strings
1799
check_cflags -Wtype-limits
1800
enabled extra_warnings && check_cflags -Winline
1801

    
1802
# add some linker flags
1803
check_ldflags -Wl,--warn-common
1804
check_ldflags $LDLATEFLAGS
1805
check_ldflags -Wl,-Bsymbolic
1806

    
1807
if enabled small; then
1808
    check_cflags -Os            # not all compilers support -Os
1809
    optimizations="small"
1810
elif enabled optimizations; then
1811
    if $cc -v 2>&1 | grep -q xlc; then
1812
        add_cflags  "-O5"
1813
        add_ldflags "-O5"
1814
    else
1815
        add_cflags "-O3"
1816
    fi
1817
fi
1818
check_cflags -fno-math-errno
1819
check_cflags -fno-signed-zeros
1820

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

    
1831
if enabled gprof; then
1832
    add_cflags  "-p"
1833
    add_ldflags "-p"
1834
fi
1835

    
1836
VHOOKCFLAGS="-fPIC"
1837

    
1838
# Find out if the .align argument is a power of two or not.
1839
if test $asmalign_pot = "unknown"; then
1840
    disable asmalign_pot
1841
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1842
fi
1843

    
1844
enabled_any $DECODER_LIST      && enable decoders
1845
enabled_any $ENCODER_LIST      && enable encoders
1846
enabled_any $BSF_LIST          && enable bsfs
1847
enabled_any $DEMUXER_LIST      && enable demuxers
1848
enabled_any $MUXER_LIST        && enable muxers
1849
enabled_any $FILTER_LIST       && enable filters
1850
enabled_any $INDEV_LIST        && enable demuxers
1851
enabled_any $OUTDEV_LIST       && enable muxers
1852
enabled_any $PROTOCOL_LIST     && enable protocols
1853

    
1854
enabled_any $THREADS_LIST      && enable threads
1855

    
1856
check_deps $CONFIG_LIST       \
1857
           $HAVE_LIST         \
1858
           $DECODER_LIST      \
1859
           $ENCODER_LIST      \
1860
           $PARSER_LIST       \
1861
           $BSF_LIST          \
1862
           $DEMUXER_LIST      \
1863
           $MUXER_LIST        \
1864
           $FILTER_LIST       \
1865
           $INDEV_LIST        \
1866
           $OUTDEV_LIST       \
1867
           $PROTOCOL_LIST     \
1868

    
1869
enabled libdc1394 && append pkg_requires "libraw1394"
1870
enabled libtheora && append pkg_requires "theora"
1871
enabled libvorbis && append pkg_requires "vorbisenc"
1872

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

    
1946
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1947
    echo "Enabled ${type}s:"
1948
    eval list=\$$(toupper $type)_LIST
1949
    for part in $list; do
1950
        enabled $part && echo ${part%_*}
1951
    done | sort | pr -3 -t
1952
    echo
1953
done
1954

    
1955
enabled nonfree &&
1956
    echo "License: unredistributable" ||
1957
    (enabled gpl &&
1958
        echo "License: GPL" ||
1959
        echo "License: LGPL")
1960

    
1961
echo "Creating config.mak and config.h..."
1962

    
1963
echo "# Automatically generated by configure - do not modify!" > config.mak
1964
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1965
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1966
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1967
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1968

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

    
1985
echo "OPTFLAGS=$CFLAGS" >> config.mak
1986
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1987
echo "LDFLAGS=$LDFLAGS" >> config.mak
1988
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1989
echo "SHFLAGS=$SHFLAGS" >> config.mak
1990
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1991
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1992
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1993
echo "BUILD_STATIC=$static" >> config.mak
1994
echo "BUILDSUF=$BUILDSUF" >> config.mak
1995
echo "FULLNAME=$FULLNAME" >> config.mak
1996
echo "LIBPREF=$LIBPREF" >> config.mak
1997
echo "LIBSUF=$LIBSUF" >> config.mak
1998
echo "LIBNAME=$LIBNAME" >> config.mak
1999
echo "SLIBPREF=$SLIBPREF" >> config.mak
2000
echo "SLIBSUF=$SLIBSUF" >> config.mak
2001
echo "EXESUF=$EXESUF" >> config.mak
2002
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2003
echo "VHOOK_DEPEND_CMD=$VHOOK_DEPEND_CMD" >> config.mak
2004

    
2005
if enabled bigendian; then
2006
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2007
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2008
fi
2009

    
2010
if enabled sdl; then
2011
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2012
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2013
fi
2014
if enabled texi2html; then
2015
    echo "BUILD_DOC=yes" >> config.mak
2016
fi
2017

    
2018
get_version(){
2019
    name=$1
2020
    file=$source_path/$2
2021
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2022
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2023
    lcname=$(tolower $name)
2024
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2025
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2026
}
2027

    
2028
get_version LIBSWSCALE  libswscale/swscale.h
2029
get_version LIBPOSTPROC libpostproc/postprocess.h
2030
get_version LIBAVCODEC  libavcodec/avcodec.h
2031
get_version LIBAVDEVICE libavdevice/avdevice.h
2032
get_version LIBAVFORMAT libavformat/avformat.h
2033
get_version LIBAVUTIL   libavutil/avutil.h
2034
get_version LIBAVFILTER libavfilter/avfilter.h
2035

    
2036
if enabled shared; then
2037
    echo "BUILD_SHARED=yes" >> config.mak
2038
    echo "PIC=-fPIC -DPIC" >> config.mak
2039
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2040
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2041
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2042
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2043
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2044
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2045
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2046
fi
2047
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2048
echo "EXTRALIBS=$extralibs" >> config.mak
2049

    
2050
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2051
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2052
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2053
                                      $DECODER_LIST      \
2054
                                      $ENCODER_LIST      \
2055
                                      $PARSER_LIST       \
2056
                                      $BSF_LIST          \
2057
                                      $DEMUXER_LIST      \
2058
                                      $MUXER_LIST        \
2059
                                      $FILTER_LIST       \
2060
                                      $PROTOCOL_LIST     \
2061
                                      $INDEV_LIST        \
2062
                                      $OUTDEV_LIST       \
2063

    
2064
echo "#define restrict $_restrict" >> $TMPH
2065

    
2066
if enabled small; then
2067
    echo "#define av_always_inline"  >> $TMPH
2068
fi
2069

    
2070
echo "SRC_PATH=\"$source_path\"" >> config.mak
2071
echo "SRC_PATH_BARE=$source_path" >> config.mak
2072
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2073

    
2074
# Apparently it's not possible to portably echo a backslash.
2075
enabled asmalign_pot &&
2076
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2077
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2078

    
2079
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2080

    
2081
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2082

    
2083
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2084
cmp -s $TMPH config.h &&
2085
    echo "config.h is unchanged" ||
2086
    mv -f $TMPH config.h
2087

    
2088
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2089

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

    
2133

    
2134
# build pkg-config files
2135
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2136

    
2137
pkgconfig_generate(){
2138
name=$1
2139
comment=$2
2140
version=$3
2141
libs=$4
2142
requires=$5
2143
cat <<EOF >$name.pc
2144
prefix=$PREFIX
2145
exec_prefix=\${prefix}
2146
libdir=\${exec_prefix}/lib
2147
includedir=\${prefix}/include
2148

    
2149
Name: $name
2150
Description: $comment
2151
Version: $version
2152
Requires: $requires
2153
Conflicts:
2154
Libs: -L\${libdir} $libs
2155
Cflags: -I\${includedir}
2156
EOF
2157
}
2158

    
2159
pkgconfig_generate_uninstalled(){
2160
name=$1
2161
shortname=${name#lib}
2162
comment=$2
2163
version=$3
2164
libs=$4
2165
requires=$5
2166
cat <<EOF >$name-uninstalled.pc
2167
prefix=
2168
exec_prefix=
2169
libdir=\${pcfiledir}/$name
2170
includedir=\${pcfiledir}
2171

    
2172
Name: $name
2173
Description: $comment
2174
Version: $version
2175
Requires: $requires
2176
Conflicts:
2177
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2178
Cflags: -I\${includedir}
2179
EOF
2180
}
2181

    
2182
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2183
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2184

    
2185
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2186
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2187

    
2188
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2189
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2190

    
2191
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2192
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2193
if enabled postproc; then
2194
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2195
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2196
fi
2197

    
2198
if enabled swscale; then
2199
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2200
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2201
else
2202
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2203
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2204
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2205
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2206
fi
2207

    
2208
if enabled avfilter; then
2209
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2210
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2211
fi