Statistics
| Branch: | Revision:

ffmpeg / configure @ 5341d856

History | View | Annotate | Download (63 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
767
CMDLINE_SELECT="
768
    $ARCH_EXT_LIST
769
    $CONFIG_LIST
770
    $THREADS_LIST
771
    debug
772
    extra_warnings
773
    optimizations
774
    shared
775
    static
776
"
777

    
778
# code dependency declarations
779

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

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

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

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

    
849
# protocols
850
http_protocol_deps="network"
851
rtp_protocol_deps="udp_protocol"
852
tcp_protocol_deps="network"
853
udp_protocol_deps="network"
854

    
855
# filters
856
movie_filter_deps="avfilter_lavf"
857

    
858
# programs
859
ffplay_deps="sdl"
860
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
861
ffserver_extralibs='$ldl'
862
vhook_extralibs='$ldl'
863

    
864

    
865
# set temporary file name
866
if test ! -z "$TMPDIR" ; then
867
    TMPDIR1="${TMPDIR}"
868
elif test ! -z "$TEMPDIR" ; then
869
    TMPDIR1="${TEMPDIR}"
870
else
871
    TMPDIR1="/tmp"
872
fi
873

    
874
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
875
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
876
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
877
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
878
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
879

    
880
# default parameters
881

    
882
enable logging
883
logfile="config.err"
884

    
885
# installation paths
886
PREFIX="/usr/local"
887
libdir='$(PREFIX)/lib'
888
shlibdir="$libdir"
889
incdir='$(PREFIX)/include'
890
mandir='$(PREFIX)/share/man'
891
bindir='$(PREFIX)/bin'
892

    
893
# toolchain
894
cc="gcc"
895
ar="ar"
896
nm="nm"
897
ranlib="ranlib"
898
make="make"
899
strip="strip"
900
asmalign_pot="unknown"
901
ln_s="ln -sf"
902

    
903
# machine
904
arch=`uname -m`
905
cpu="generic"
906

    
907
# OS
908
targetos=$(tolower $(uname -s))
909

    
910
# libraries
911
enable zlib
912

    
913
# configurable options
914
enable debug
915
enable dostrip
916
enable ffmpeg
917
enable ffplay
918
enable ffserver
919
enable ipv6
920
enable static
921
enable mpegaudio_hp
922
enable network
923
enable optimizations
924
enable protocols
925
vhook="default"
926

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

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

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

    
959
FFMPEG_CONFIGURATION="$@"
960

    
961
find_things(){
962
    thing=$1
963
    pattern=$2
964
    file=$source_path/$3
965
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
966
}
967

    
968
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
969
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
970
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
971
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
972
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
973
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
974
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
975
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
976
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
977
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
978

    
979
enable $ARCH_EXT_LIST \
980
       $DECODER_LIST \
981
       $ENCODER_LIST \
982
       $PARSER_LIST \
983
       $BSF_LIST \
984
       $DEMUXER_LIST \
985
       $MUXER_LIST \
986
       $FILTER_LIST \
987
       $PROTOCOL_LIST \
988
       $INDEV_LIST \
989
       $OUTDEV_LIST \
990

    
991
die_unknown(){
992
    echo "Unknown option \"$1\"."
993
    echo "See $0 --help for available options."
994
    exit 1
995
}
996

    
997
show_list() {
998
    suffix=_$1
999
    shift
1000
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1001
    exit 0
1002
}
1003

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

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

    
1153
enable $arch
1154
enabled_any x86_32 x86_64 && enable x86
1155
enabled     sparc64       && enable sparc
1156

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

    
1300
    *)
1301
        targetos="${targetos}-UNKNOWN"
1302
        ;;
1303
esac
1304

    
1305
add_extralibs $osextralibs
1306

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

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

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

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

    
1336
disabled static && LIBNAME=""
1337

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

    
1353

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

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

    
1373
check_deps $ARCH_EXT_LIST
1374

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

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

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

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

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

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

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

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

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

    
1504
check_asm inline_asm '""'
1505

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

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

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

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

    
1529
# check for assembler specific support
1530

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

    
1542
# check for SIMD availability
1543

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

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

    
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             ${dostrip-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 dostrip &&
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