Statistics
| Branch: | Revision:

ffmpeg / configure @ 5ce265a1

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

    
186
log(){
187
    echo "$@" >>$logfile
188
}
189

    
190
log_file(){
191
    log BEGIN $1
192
    pr -n -t $1 >>$logfile
193
    log END $1
194
}
195

    
196
echolog(){
197
    log "$@"
198
    echo "$@"
199
}
200

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

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

    
228
tolower(){
229
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
230
}
231

    
232
set_all(){
233
    value=$1
234
    shift
235
    for var in $*; do
236
        eval $var=$value
237
    done
238
}
239

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

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

    
259
enable(){
260
    set_all yes $*
261
}
262

    
263
disable(){
264
    set_all no $*
265
}
266

    
267
enabled(){
268
    eval test "x\$$1" = "xyes"
269
}
270

    
271
disabled(){
272
    eval test "x\$$1" = "xno"
273
}
274

    
275
enabled_all(){
276
    for opt; do
277
        enabled $opt || return 1
278
    done
279
}
280

    
281
disabled_all(){
282
    for opt; do
283
        disabled $opt || return 1
284
    done
285
}
286

    
287
enabled_any(){
288
    for opt; do
289
        enabled $opt && return 0
290
    done
291
}
292

    
293
disabled_any(){
294
    for opt; do
295
        disabled $opt && return 0
296
    done
297
}
298

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

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

    
314
        eval dep_all="\$${cfg}_deps"
315
        eval dep_any="\$${cfg}_deps_any"
316

    
317
        pushvar cfg dep_all dep_any
318
        check_deps $dep_all $dep_any
319
        popvar cfg dep_all dep_any
320

    
321
        enabled_all $dep_all || disable $cfg
322
        enabled_any $dep_any || disable $cfg
323

    
324
        if enabled $cfg; then
325
            eval dep_extralibs="\$${cfg}_extralibs"
326
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
327
        fi
328

    
329
        disable ${cfg}_checking
330
    done
331
}
332

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

    
350
flags_saved(){
351
    (: ${SAVE_CFLAGS?}) 2>/dev/null
352
}
353

    
354
save_flags(){
355
    flags_saved && return
356
    SAVE_CFLAGS="$CFLAGS"
357
    SAVE_LDFLAGS="$LDFLAGS"
358
    SAVE_extralibs="$extralibs"
359
}
360

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

    
371
temp_cflags(){
372
    save_flags
373
    CFLAGS="$CFLAGS $*"
374
}
375

    
376
temp_ldflags(){
377
    save_flags
378
    LDFLAGS="$LDFLAGS $*"
379
}
380

    
381
temp_extralibs(){
382
    save_flags
383
    extralibs="$extralibs $*"
384
}
385

    
386
append(){
387
    var=$1
388
    shift
389
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
390
    eval "$var=\"\$$var $*\""
391
}
392

    
393
add_cflags(){
394
    append CFLAGS "$@"
395
}
396

    
397
add_ldflags(){
398
    append LDFLAGS "$@"
399
}
400

    
401
add_extralibs(){
402
    append extralibs "$@"
403
}
404

    
405
check_cmd(){
406
    log "$@"
407
    "$@" >>$logfile 2>&1
408
}
409

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

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

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

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

    
447
check_cflags(){
448
    log check_cflags "$@"
449
    check_cc "$@" <<EOF && add_cflags "$@"
450
int x;
451
EOF
452
}
453

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

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

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

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

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

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

    
532
check_exec(){
533
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
534
}
535

    
536
check_exec_crash(){
537
    code=`cat`
538

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

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

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

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

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

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

    
612
apply(){
613
    file=$1
614
    shift
615
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
616
}
617

    
618
COMPONENT_LIST="
619
    bsfs
620
    decoders
621
    demuxers
622
    encoders
623
    filters
624
    indevs
625
    muxers
626
    outdevs
627
    parsers
628
    protocols
629
"
630

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

    
673
THREADS_LIST='
674
    beosthreads
675
    os2threads
676
    pthreads
677
    w32threads
678
'
679

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

    
698
ARCH_EXT_LIST='
699
    altivec
700
    armv5te
701
    armv6
702
    iwmmxt
703
    mmi
704
    mmx
705
    mmx2
706
    ssse3
707
    vis
708
'
709

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

    
769
CMDLINE_SELECT="
770
    $ARCH_EXT_LIST
771
    $CONFIG_LIST
772
    $THREADS_LIST
773
    cross_compile
774
    debug
775
    extra_warnings
776
    logging
777
    optimizations
778
    shared
779
    static
780
    stripping
781
"
782

    
783
# code dependency declarations
784

    
785
# architecture extensions
786
altivec_deps="powerpc"
787
armv5te_deps="armv4l"
788
armv6_deps="armv4l"
789
iwmmxt_deps="armv4l"
790
mmi_deps="mips"
791
mmx_deps="x86"
792
mmx2_deps="x86"
793
ssse3_deps="x86"
794
vis_deps="sparc"
795

    
796
# decoders / encoders
797
ac3_decoder_deps="gpl"
798
dxa_decoder_deps="zlib"
799
flashsv_decoder_deps="zlib"
800
flashsv_encoder_deps="zlib"
801
mpeg_xvmc_decoder_deps="xvmc"
802
png_decoder_deps="zlib"
803
png_encoder_deps="zlib"
804
zmbv_decoder_deps="zlib"
805
zmbv_encoder_deps="zlib"
806

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

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

    
854
# protocols
855
http_protocol_deps="network"
856
rtp_protocol_deps="udp_protocol"
857
tcp_protocol_deps="network"
858
udp_protocol_deps="network"
859

    
860
# filters
861
movie_filter_deps="avfilter_lavf"
862

    
863
# programs
864
ffplay_deps="sdl"
865
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
866
ffserver_extralibs='$ldl'
867
vhook_extralibs='$ldl'
868

    
869

    
870
# default parameters
871

    
872
logfile="config.err"
873

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

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

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

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

    
899
# libraries
900
enable zlib
901

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

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

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

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

    
948
FFMPEG_CONFIGURATION="$@"
949

    
950
find_things(){
951
    thing=$1
952
    pattern=$2
953
    file=$source_path/$3
954
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
955
}
956

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

    
968
enable $ARCH_EXT_LIST \
969
       $DECODER_LIST \
970
       $ENCODER_LIST \
971
       $PARSER_LIST \
972
       $BSF_LIST \
973
       $DEMUXER_LIST \
974
       $MUXER_LIST \
975
       $FILTER_LIST \
976
       $PROTOCOL_LIST \
977
       $INDEV_LIST \
978
       $OUTDEV_LIST \
979

    
980
die_unknown(){
981
    echo "Unknown option \"$1\"."
982
    echo "See $0 --help for available options."
983
    exit 1
984
}
985

    
986
show_list() {
987
    suffix=_$1
988
    shift
989
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
990
    exit 0
991
}
992

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

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

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

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

    
1283
    *)
1284
        target_os="${target_os}-UNKNOWN"
1285
        ;;
1286
esac
1287

    
1288
# set temporary file name
1289
if test ! -z "$TMPDIR" ; then
1290
    TMPDIR1="${TMPDIR}"
1291
elif test ! -z "$TEMPDIR" ; then
1292
    TMPDIR1="${TEMPDIR}"
1293
else
1294
    TMPDIR1="/tmp"
1295
fi
1296

    
1297
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1298
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1299
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1300
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1301
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1302

    
1303

    
1304
add_extralibs $osextralibs
1305

    
1306
disabled logging && logfile=/dev/null
1307

    
1308
echo "# $0 $@" >$logfile
1309
set >>$logfile
1310

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

    
1314
test -n "$cross_prefix" && enable cross_compile
1315
cc="${cross_prefix}${cc}"
1316
ar="${cross_prefix}${ar}"
1317
nm="${cross_prefix}${nm}"
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 $target_os = 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 --enable-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 -g $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/MMX2
1519
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1520
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1521

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

    
1525
# check for assembler specific support
1526

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

    
1538
# check for SIMD availability
1539

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

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

    
1560
# We have to check if pld is a nop and disable it.
1561
enabled armv4l  && check_asm pld     '"pld [r0]"'
1562
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1563
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1564
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1565
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1566
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1567

    
1568
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1569

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

    
1577
# ---
1578
# check availability of some header files
1579

    
1580
if check_func dlopen; then
1581
    ldl=
1582
elif check_func dlopen -ldl; then
1583
    ldl=-ldl
1584
fi
1585

    
1586
check_func  fork
1587
check_func  gethrtime
1588
check_func  getrusage
1589
check_func  inet_aton $network_extralibs
1590
check_func  memalign
1591
check_func  mkstemp
1592
check_func2 windows.h GetProcessTimes
1593

    
1594
check_header byteswap.h
1595
check_header conio.h
1596
check_header dlfcn.h
1597
check_header malloc.h
1598
check_header sys/mman.h
1599
check_header termios.h
1600

    
1601
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1602
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1603
fi
1604

    
1605
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1606

    
1607
# ffserver uses poll(),
1608
# if it's not found we can emulate it using select().
1609
if enabled ffserver; then
1610
    check_header poll.h
1611
    check_header sys/select.h
1612
fi
1613

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

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

    
1638
check_lib math.h sin -lm
1639

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

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

    
1665
# disable the native AC-3 decoder if liba52 is enabled
1666
enabled liba52 && disable ac3_decoder
1667

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

    
1677

    
1678
_restrict=
1679
for restrict_keyword in restrict __restrict__ __restrict; do
1680
    check_cc <<EOF && _restrict=$restrict_keyword && break
1681
void foo(char * $restrict_keyword p);
1682
EOF
1683
done
1684

    
1685
test "$vhook" = "default" && vhook="$dlopen"
1686

    
1687
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1688
    disable vhook
1689
    echo
1690
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1691
    echo "Patches welcome."
1692
    echo
1693
fi
1694

    
1695
if enabled vhook; then
1696
    check_ldflags -rdynamic
1697
    check_ldflags -export-dynamic
1698
fi
1699

    
1700
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1701
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1702

    
1703
##########################################
1704
# SDL check
1705

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

    
1732
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1733

    
1734
check_type sys/socket.h socklen_t
1735

    
1736
##########################################
1737
# Network check
1738

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

    
1750
##########################################
1751
# IPv6 check
1752

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

    
1767
check_header linux/videodev.h
1768
check_header linux/videodev2.h
1769

    
1770
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1771

    
1772
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1773
{ check_header dev/bktr/ioctl_meteor.h &&
1774
  check_header dev/bktr/ioctl_bt848.h; } ||
1775
{ check_header machine/ioctl_meteor.h &&
1776
  check_header machine/ioctl_bt848.h; } ||
1777
{ check_header dev/video/meteor/ioctl_meteor.h &&
1778
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1779
check_header dev/ic/bt8xx.h
1780

    
1781
check_header sys/soundcard.h
1782
check_header soundcard.h
1783

    
1784
# deal with the X11 frame grabber
1785
enabled x11grab                         &&
1786
check_header X11/Xlib.h                 &&
1787
check_header X11/extensions/XShm.h      &&
1788
check_func XOpenDisplay -lX11           &&
1789
check_func XShmCreateImage -lX11 -lXext
1790

    
1791
enabled debug && add_cflags -g"$debuglevel"
1792

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

    
1806
# add some linker flags
1807
check_ldflags -Wl,--warn-common
1808
check_ldflags $LDLATEFLAGS
1809
check_ldflags -Wl,-Bsymbolic
1810

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

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

    
1835
if enabled gprof; then
1836
    add_cflags  "-p"
1837
    add_ldflags "-p"
1838
fi
1839

    
1840
VHOOKCFLAGS="-fPIC"
1841

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

    
1848
enabled_any $DECODER_LIST      && enable decoders
1849
enabled_any $ENCODER_LIST      && enable encoders
1850
enabled_any $BSF_LIST          && enable bsfs
1851
enabled_any $DEMUXER_LIST      && enable demuxers
1852
enabled_any $MUXER_LIST        && enable muxers
1853
enabled_any $FILTER_LIST       && enable filters
1854
enabled_any $INDEV_LIST        && enable demuxers
1855
enabled_any $OUTDEV_LIST       && enable muxers
1856
enabled_any $PROTOCOL_LIST     && enable protocols
1857

    
1858
enabled_any $THREADS_LIST      && enable threads
1859

    
1860
check_deps $CONFIG_LIST       \
1861
           $HAVE_LIST         \
1862
           $DECODER_LIST      \
1863
           $ENCODER_LIST      \
1864
           $PARSER_LIST       \
1865
           $BSF_LIST          \
1866
           $DEMUXER_LIST      \
1867
           $MUXER_LIST        \
1868
           $FILTER_LIST       \
1869
           $INDEV_LIST        \
1870
           $OUTDEV_LIST       \
1871
           $PROTOCOL_LIST     \
1872

    
1873
enabled libdc1394 && append pkg_requires "libraw1394"
1874
enabled libtheora && append pkg_requires "theora"
1875
enabled libvorbis && append pkg_requires "vorbisenc"
1876

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

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

    
1959
enabled nonfree &&
1960
    echo "License: unredistributable" ||
1961
    (enabled gpl &&
1962
        echo "License: GPL" ||
1963
        echo "License: LGPL")
1964

    
1965
echo "Creating config.mak and config.h..."
1966

    
1967
echo "# Automatically generated by configure - do not modify!" > config.mak
1968
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1969
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1970
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1971
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1972

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

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

    
2009
if enabled bigendian; then
2010
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2011
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2012
fi
2013

    
2014
if enabled sdl; then
2015
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2016
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2017
fi
2018
if enabled texi2html; then
2019
    echo "BUILD_DOC=yes" >> config.mak
2020
fi
2021

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

    
2032
get_version LIBSWSCALE  libswscale/swscale.h
2033
get_version LIBPOSTPROC libpostproc/postprocess.h
2034
get_version LIBAVCODEC  libavcodec/avcodec.h
2035
get_version LIBAVDEVICE libavdevice/avdevice.h
2036
get_version LIBAVFORMAT libavformat/avformat.h
2037
get_version LIBAVUTIL   libavutil/avutil.h
2038
get_version LIBAVFILTER libavfilter/avfilter.h
2039

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

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

    
2068
echo "#define restrict $_restrict" >> $TMPH
2069

    
2070
if enabled small; then
2071
    echo "#define av_always_inline"  >> $TMPH
2072
fi
2073

    
2074
echo "SRC_PATH=\"$source_path\"" >> config.mak
2075
echo "SRC_PATH_BARE=$source_path" >> config.mak
2076
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2077

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

    
2083
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2084

    
2085
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2086

    
2087
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2088
cmp -s $TMPH config.h &&
2089
    echo "config.h is unchanged" ||
2090
    mv -f $TMPH config.h
2091

    
2092
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2093

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

    
2137

    
2138
# build pkg-config files
2139
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2140

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

    
2153
Name: $name
2154
Description: $comment
2155
Version: $version
2156
Requires: $requires
2157
Conflicts:
2158
Libs: -L\${libdir} $libs
2159
Cflags: -I\${includedir}
2160
EOF
2161
}
2162

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

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

    
2186
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2187
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2188

    
2189
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2190
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2191

    
2192
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2193
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2194

    
2195
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2196
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2197
if enabled postproc; then
2198
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2199
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2200
fi
2201

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

    
2212
if enabled avfilter; then
2213
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2214
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2215
fi