Statistics
| Branch: | Revision:

ffmpeg / configure @ 530dc538

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-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 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
    stripping
780
"
781

    
782
# code dependency declarations
783

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

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

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

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

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

    
859
# filters
860
movie_filter_deps="avfilter_lavf"
861

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

    
868

    
869
# default parameters
870

    
871
enable logging
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
targetos=$(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
    --cross-compile) enable cross_compile
1013
    ;;
1014
    --target-os=*) targetos="$optval"
1015
    ;;
1016
    --cc=*) cc="$optval"
1017
    ;;
1018
    --make=*) make="$optval"
1019
    ;;
1020
    --extra-cflags=*) add_cflags "$optval"
1021
    ;;
1022
    --extra-ldflags=*) add_ldflags "$optval"
1023
    ;;
1024
    --extra-libs=*) add_extralibs "$optval"
1025
    ;;
1026
    --build-suffix=*) BUILDSUF="$optval"
1027
    ;;
1028
    --arch=*) arch="$optval"
1029
    ;;
1030
    --cpu=*) cpu="$optval"
1031
    ;;
1032
    --enable-sunmlib) enable mlib
1033
    ;;
1034
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1035
    ;;
1036
    --enable-debug=*) debuglevel="$optval"
1037
    ;;
1038
    --enable-*=*|--disable-*=*)
1039
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1040
    case "$thing" in
1041
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1042
        *) die_unknown "$opt" ;;
1043
    esac
1044
    ;;
1045
    --enable-?*|--disable-?*)
1046
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1047
    if is_in $option $COMPONENT_LIST; then
1048
        eval $action \$$(toupper ${option%s})_LIST
1049
    elif is_in $option $CMDLINE_SELECT; then
1050
        $action $option
1051
    else
1052
        die_unknown $opt
1053
    fi
1054
    ;;
1055
    --list-*)
1056
        NAME="${opt#--list-}"
1057
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1058
        NAME=${NAME%s}
1059
        eval show_list $NAME \$$(toupper $NAME)_LIST
1060
    ;;
1061
    --help|-h) show_help
1062
    ;;
1063
    *)
1064
    die_unknown $opt
1065
    ;;
1066
    esac
1067
done
1068

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

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

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

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

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

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

    
1305

    
1306
add_extralibs $osextralibs
1307

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

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

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

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

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

    
1334
disabled static && LIBNAME=""
1335

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

    
1351

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

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

    
1371
check_deps $ARCH_EXT_LIST
1372

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

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

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

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

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

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

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

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

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

    
1502
check_asm inline_asm '""'
1503

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

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

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

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

    
1527
# check for assembler specific support
1528

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

    
1540
# check for SIMD availability
1541

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1640
check_lib math.h sin -lm
1641

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

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

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

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

    
1679

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

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

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

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

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

    
1705
##########################################
1706
# SDL check
1707

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

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

    
1736
check_type sys/socket.h socklen_t
1737

    
1738
##########################################
1739
# Network check
1740

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

    
1752
##########################################
1753
# IPv6 check
1754

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

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

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

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

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

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

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

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

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

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

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

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

    
1842
VHOOKCFLAGS="-fPIC"
1843

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

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

    
1860
enabled_any $THREADS_LIST      && enable threads
1861

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2139

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

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

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

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

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

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

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

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

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

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

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