Statistics
| Branch: | Revision:

ffmpeg / configure @ 8c6afa4d

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-sunmlib         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 "  --cross-compile          assume a cross-compiler is used"
111
  echo "  --target-os=OS           compiler targets OS [$targetos]"
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-strip          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 enabled logging; then
209
        cat <<EOF
210
Include the log file "$logfile" produced by configure as this will help
211
solving the problem.
212
EOF
213
    else
214
cat <<EOF
215
Rerun configure with logging enabled (do not use --log=no), and include the
216
log this produces with your report.
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
    debug
774
    extra_warnings
775
    logging
776
    optimizations
777
    shared
778
    static
779
"
780

    
781
# code dependency declarations
782

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

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

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

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

    
852
# protocols
853
http_protocol_deps="network"
854
rtp_protocol_deps="udp_protocol"
855
tcp_protocol_deps="network"
856
udp_protocol_deps="network"
857

    
858
# filters
859
movie_filter_deps="avfilter_lavf"
860

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

    
867

    
868
# default parameters
869

    
870
enable logging
871
logfile="config.err"
872

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

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

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

    
895
# OS
896
targetos=$(tolower $(uname -s))
897

    
898
# libraries
899
enable zlib
900

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

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

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

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

    
947
FFMPEG_CONFIGURATION="$@"
948

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

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

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

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

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

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

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

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

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

    
1286
    *)
1287
        targetos="${targetos}-UNKNOWN"
1288
        ;;
1289
esac
1290

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

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

    
1306

    
1307
add_extralibs $osextralibs
1308

    
1309
enabled logging || logfile=/dev/null
1310

    
1311
    echo "# $0 $@" >$logfile
1312
    set >>$logfile
1313

    
1314
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1315
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1316

    
1317
test -n "$cross_prefix" && enable cross_compile
1318
cc="${cross_prefix}${cc}"
1319
ar="${cross_prefix}${ar}"
1320
nm="${cross_prefix}${nm}"
1321
ranlib="${cross_prefix}${ranlib}"
1322
strip="${cross_prefix}${strip}"
1323

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

    
1335
disabled static && LIBNAME=""
1336

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

    
1352

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

    
1368
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1369
    die "libamr is nonfree and --enable-nonfree is not specified."
1370
fi
1371

    
1372
check_deps $ARCH_EXT_LIST
1373

    
1374
test -z "$need_memalign" && need_memalign="$mmx"
1375

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

    
1388
disabled optimizations || add_cflags -fomit-frame-pointer
1389

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

    
1459
gnu_make(){
1460
    $1 --version 2>&1 | grep -q GNU
1461
}
1462

    
1463
if ! gnu_make $make; then
1464
    gnu_make gmake && make=gmake || die "GNU make not found."
1465
fi
1466

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

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

    
1497
check_cc <<EOF || die "Symbol mangling check failed."
1498
int ff_extern;
1499
EOF
1500
sym=$($nm -P -g $TMPO)
1501
extern_prefix=${sym%%ff_extern*}
1502

    
1503
check_asm inline_asm '""'
1504

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

    
1518
    # check wether EBX is available on x86
1519
    check_asm ebx_available '"":::"%ebx"'
1520

    
1521
    # check whether binutils is new enough to compile SSSE3/MMX2
1522
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1523
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1524

    
1525
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1526
fi
1527

    
1528
# check for assembler specific support
1529

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

    
1541
# check for SIMD availability
1542

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

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

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

    
1571
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1572

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

    
1580
# ---
1581
# check availability of some header files
1582

    
1583
if check_func dlopen; then
1584
    ldl=
1585
elif check_func dlopen -ldl; then
1586
    ldl=-ldl
1587
fi
1588

    
1589
check_func  fork
1590
check_func  gethrtime
1591
check_func  getrusage
1592
check_func  inet_aton $network_extralibs
1593
check_func  memalign
1594
check_func  mkstemp
1595
check_func2 windows.h GetProcessTimes
1596

    
1597
check_header byteswap.h
1598
check_header conio.h
1599
check_header dlfcn.h
1600
check_header malloc.h
1601
check_header sys/mman.h
1602
check_header termios.h
1603

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

    
1608
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1609

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

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

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

    
1641
check_lib math.h sin -lm
1642

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

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

    
1668
# disable the native AC-3 decoder if liba52 is enabled
1669
enabled liba52 && disable ac3_decoder
1670

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

    
1680

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

    
1688
test "$vhook" = "default" && vhook="$dlopen"
1689

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

    
1698
if enabled vhook; then
1699
    check_ldflags -rdynamic
1700
    check_ldflags -export-dynamic
1701
fi
1702

    
1703
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1704
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1705

    
1706
##########################################
1707
# SDL check
1708

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

    
1735
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1736

    
1737
check_type sys/socket.h socklen_t
1738

    
1739
##########################################
1740
# Network check
1741

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

    
1753
##########################################
1754
# IPv6 check
1755

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

    
1770
check_header linux/videodev.h
1771
check_header linux/videodev2.h
1772

    
1773
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1774

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

    
1784
check_header sys/soundcard.h
1785
check_header soundcard.h
1786

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

    
1794
enabled debug && add_cflags -g"$debuglevel"
1795

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

    
1809
# add some linker flags
1810
check_ldflags -Wl,--warn-common
1811
check_ldflags $LDLATEFLAGS
1812
check_ldflags -Wl,-Bsymbolic
1813

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

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

    
1838
if enabled gprof; then
1839
    add_cflags  "-p"
1840
    add_ldflags "-p"
1841
fi
1842

    
1843
VHOOKCFLAGS="-fPIC"
1844

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

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

    
1861
enabled_any $THREADS_LIST      && enable threads
1862

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

    
1876
enabled libdc1394 && append pkg_requires "libraw1394"
1877
enabled libtheora && append pkg_requires "theora"
1878
enabled libvorbis && append pkg_requires "vorbisenc"
1879

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

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

    
1962
enabled nonfree &&
1963
    echo "License: unredistributable" ||
1964
    (enabled gpl &&
1965
        echo "License: GPL" ||
1966
        echo "License: LGPL")
1967

    
1968
echo "Creating config.mak and config.h..."
1969

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

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

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

    
2012
if enabled bigendian; then
2013
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2014
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2015
fi
2016

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

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

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

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

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

    
2071
echo "#define restrict $_restrict" >> $TMPH
2072

    
2073
if enabled small; then
2074
    echo "#define av_always_inline"  >> $TMPH
2075
fi
2076

    
2077
echo "SRC_PATH=\"$source_path\"" >> config.mak
2078
echo "SRC_PATH_BARE=$source_path" >> config.mak
2079
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2080

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

    
2086
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2087

    
2088
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2089

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

    
2095
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2096

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

    
2140

    
2141
# build pkg-config files
2142
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2143

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

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

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

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

    
2189
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2190
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2191

    
2192
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2193
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2194

    
2195
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2196
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2197

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

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

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