Statistics
| Branch: | Revision:

ffmpeg / configure @ 93420809

History | View | Annotate | Download (63.6 KB)

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

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

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

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

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

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

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

    
183
log(){
184
    echo "$@" >>$logfile
185
}
186

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

    
193
echolog(){
194
    log "$@"
195
    echo "$@"
196
}
197

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

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

    
225
tolower(){
226
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
227
}
228

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

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

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

    
256
enable(){
257
    set_all yes $*
258
}
259

    
260
disable(){
261
    set_all no $*
262
}
263

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

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

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

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

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

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

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

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

    
311
        eval dep_all="\$${cfg}_deps"
312
        eval dep_any="\$${cfg}_deps_any"
313

    
314
        pushvar cfg dep_all dep_any
315
        check_deps $dep_all $dep_any
316
        popvar cfg dep_all dep_any
317

    
318
        enabled_all $dep_all || disable $cfg
319
        enabled_any $dep_any || disable $cfg
320

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

    
326
        disable ${cfg}_checking
327
    done
328
}
329

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

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

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

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

    
368
temp_cflags(){
369
    save_flags
370
    CFLAGS="$CFLAGS $*"
371
}
372

    
373
temp_ldflags(){
374
    save_flags
375
    LDFLAGS="$LDFLAGS $*"
376
}
377

    
378
temp_extralibs(){
379
    save_flags
380
    extralibs="$extralibs $*"
381
}
382

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

    
390
add_cflags(){
391
    append CFLAGS "$@"
392
}
393

    
394
add_ldflags(){
395
    append LDFLAGS "$@"
396
}
397

    
398
add_extralibs(){
399
    append extralibs "$@"
400
}
401

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

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

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

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

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

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

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

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

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

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

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

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

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

    
533
check_exec_crash(){
534
    code=`cat`
535

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

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

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

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

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

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

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

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

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

    
670
THREADS_LIST='
671
    beosthreads
672
    os2threads
673
    pthreads
674
    w32threads
675
'
676

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

    
695
ARCH_EXT_LIST='
696
    altivec
697
    armv5te
698
    armv6
699
    iwmmxt
700
    mmi
701
    mmx
702
    ssse3
703
    vis
704
'
705

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

    
761
CMDLINE_SELECT="
762
    $ARCH_EXT_LIST
763
    $CONFIG_LIST
764
    $THREADS_LIST
765
    debug
766
    extra_warnings
767
    optimizations
768
    shared
769
    static
770
"
771

    
772
# code dependency declarations
773

    
774
# architecture extensions
775
altivec_deps="powerpc"
776
armv5te_deps="armv4l"
777
armv6_deps="armv4l"
778
iwmmxt_deps="armv4l"
779
mmi_deps="mips"
780
mmx_deps="x86"
781
ssse3_deps="x86"
782
vis_deps="sparc"
783

    
784
# decoders / encoders
785
ac3_decoder_deps="gpl"
786
dxa_decoder_deps="zlib"
787
flashsv_decoder_deps="zlib"
788
flashsv_encoder_deps="zlib"
789
flv_decoder_deps="h263_decoder"
790
h263_decoder_deps="h263_parser mpeg4video_parser"
791
h263i_decoder_deps="h263_decoder"
792
h264_decoder_deps="h264_parser"
793
mpeg_xvmc_decoder_deps="xvmc"
794
mpeg4_decoder_deps="h263_decoder"
795
msmpeg4v1_decoder_deps="h263_decoder"
796
msmpeg4v2_decoder_deps="h263_decoder"
797
msmpeg4v3_decoder_deps="h263_decoder"
798
png_decoder_deps="zlib"
799
png_encoder_deps="zlib"
800
svq3_decoder_deps="h264_parser"
801
vc1_decoder_deps="h263_decoder"
802
wmv1_decoder_deps="h263_decoder"
803
wmv2_decoder_deps="h263_decoder"
804
wmv3_decoder_deps="h263_decoder"
805
zmbv_decoder_deps="zlib"
806
zmbv_encoder_deps="zlib"
807

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

    
829
# demuxers / muxers
830
ac3_demuxer_deps="ac3_parser"
831
audio_beos_demuxer_deps="audio_beos"
832
audio_beos_demuxer_extralibs="-lmedia -lbe"
833
audio_beos_muxer_deps="audio_beos"
834
audio_beos_muxer_extralibs="-lmedia -lbe"
835
avisynth_demuxer_deps="avisynth"
836
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
837
dv1394_demuxer_deps="dv1394 dv_demuxer"
838
libdc1394_demuxer_deps="libdc1394"
839
libnut_demuxer_deps="libnut"
840
libnut_muxer_deps="libnut"
841
mp3_demuxer_deps="mpegaudio_parser"
842
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
843
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
844
redir_demuxer_deps="network"
845
rtp_muxer_deps="network rtp_protocol"
846
rtsp_demuxer_deps="sdp_demuxer"
847
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
848
v4l2_demuxer_deps="linux_videodev2_h"
849
v4l_demuxer_deps="linux_videodev_h"
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
vsrc_movie_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
# set temporary file name
870
if test ! -z "$TMPDIR" ; then
871
    TMPDIR1="${TMPDIR}"
872
elif test ! -z "$TEMPDIR" ; then
873
    TMPDIR1="${TEMPDIR}"
874
else
875
    TMPDIR1="/tmp"
876
fi
877

    
878
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
879
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
880
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
881
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
882
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
883

    
884
# default parameters
885

    
886
enable logging
887
logfile="config.err"
888

    
889
# installation paths
890
PREFIX="/usr/local"
891
libdir='$(PREFIX)/lib'
892
shlibdir="$libdir"
893
incdir='$(PREFIX)/include'
894
mandir='$(PREFIX)/share/man'
895
bindir='$(PREFIX)/bin'
896

    
897
# toolchain
898
cc="gcc"
899
ar="ar"
900
ranlib="ranlib"
901
make="make"
902
strip="strip"
903
asmalign_pot="unknown"
904
ln_s="ln -sf"
905

    
906
# machine
907
arch=`uname -m`
908
cpu="generic"
909

    
910
# OS
911
targetos=$(tolower $(uname -s))
912

    
913
# libraries
914
enable zlib
915

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

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

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

    
958
FFMPEG_CONFIGURATION="$@"
959

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

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

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

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

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

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

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

    
1164
enable $arch
1165
enabled_any x86_32 x86_64 && enable x86
1166
enabled     sparc64       && enable sparc
1167

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

    
1315
    *)
1316
        targetos="${targetos}-UNKNOWN"
1317
        ;;
1318
esac
1319

    
1320
add_extralibs $osextralibs
1321

    
1322
if ! disabled logging ; then
1323
    enabled logging || logfile="$logging"
1324
    echo "# $0 $@" >$logfile
1325
    set >>$logfile
1326
else
1327
    logfile=/dev/null
1328
fi
1329

    
1330
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1331
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1332

    
1333
test -n "$cross_prefix" && enable cross_compile
1334
cc="${cross_prefix}${cc}"
1335
ar="${cross_prefix}${ar}"
1336
ranlib="${cross_prefix}${ranlib}"
1337
strip="${cross_prefix}${strip}"
1338

    
1339
# we need to build at least one lib type
1340
if ! enabled_any static shared; then
1341
    cat <<EOF
1342
At least one library type must be built.
1343
Specify --enable-static to build the static libraries or --enable-shared to
1344
build the shared libraries as well. To only build the shared libraries specify
1345
--disable-static in addition to --enable-shared.
1346
EOF
1347
    exit 1;
1348
fi
1349

    
1350
disabled static && LIBNAME=""
1351

    
1352
if enabled_any libfaad libfaadbin ; then
1353
    if check_header faad.h; then
1354
        check_cc << EOF
1355
#include <faad.h>
1356
#ifndef FAAD2_VERSION
1357
ok faad1
1358
#endif
1359
int main(void) { return 0; }
1360
EOF
1361
        test $? = 0 && enable libfaad2
1362
    else
1363
        die "FAAD test failed."
1364
    fi
1365
fi
1366

    
1367

    
1368
if ! enabled gpl; then
1369
    die_gpl_disabled(){
1370
        name=$1
1371
        shift
1372
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1373
    }
1374
    die_gpl_disabled "The Postprocessing code" pp
1375
    die_gpl_disabled "liba52"                  liba52
1376
    die_gpl_disabled "libx264"                 libx264
1377
    die_gpl_disabled "libxvidcore"             libxvid
1378
    die_gpl_disabled "FAAD2"                   libfaad2
1379
    die_gpl_disabled "The X11 grabber"         x11grab
1380
    die_gpl_disabled "The software scaler"     swscaler
1381
fi
1382

    
1383
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1384
    die "libamr is nonfree and --enable-nonfree is not specified."
1385
fi
1386

    
1387
check_deps $ARCH_EXT_LIST
1388

    
1389
test -z "$need_memalign" && need_memalign="$mmx"
1390

    
1391
#Darwin CC versions
1392
if test $targetos = darwin; then
1393
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1394
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1395
    else
1396
        add_cflags "-no-cpp-precomp -pipe"
1397
        check_cflags "-force_cpusubtype_ALL"
1398
        check_cflags "-Wno-sign-compare"
1399
        disabled shared && add_cflags -mdynamic-no-pic
1400
    fi
1401
fi
1402

    
1403
disabled optimizations || add_cflags -fomit-frame-pointer
1404

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

    
1474
gnu_make(){
1475
    $1 --version 2>&1 | grep -q GNU
1476
}
1477

    
1478
if ! gnu_make $make; then
1479
    gnu_make gmake && make=gmake || die "GNU make not found."
1480
fi
1481

    
1482
# make sure we can execute files in $TMPDIR
1483
cat >$TMPE 2>>$logfile <<EOF
1484
#! /bin/sh
1485
EOF
1486
chmod +x $TMPE >>$logfile 2>&1
1487
if ! $TMPE >>$logfile 2>&1; then
1488
    cat <<EOF
1489
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1490
variable to another directory and make sure that $TMPDIR1 is not mounted
1491
noexec.
1492
EOF
1493
    die "Sanity test failed."
1494
fi
1495
rm $TMPE
1496

    
1497
# compiler sanity check
1498
check_exec <<EOF
1499
int main(void){
1500
    return 0;
1501
}
1502
EOF
1503
if test "$?" != 0; then
1504
    echo "$cc is unable to create an executable file."
1505
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1506
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1507
        echo "Only do this if you know what cross compiling means."
1508
    fi
1509
    die "C compiler test failed."
1510
fi
1511

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

    
1525
    # check wether EBX is available on x86
1526
    check_asm ebx_available '"":::"%ebx"'
1527

    
1528
    # check whether binutils is new enough to compile SSSE3
1529
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1530
fi
1531

    
1532
# check for assembler specific support
1533

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

    
1545
# check for SIMD availability
1546

    
1547
# AltiVec flags: The FSF version of GCC differs from the Apple version
1548
if enabled altivec; then
1549
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1550
        add_cflags "-faltivec" ||
1551
        add_cflags "-maltivec -mabi=altivec"
1552

    
1553
    check_header altivec.h
1554

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

    
1569
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1570
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1571
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1572
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1573
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1574

    
1575
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1576

    
1577
# ---
1578
# big/little-endian test
1579
check_cc <<EOF || die "endian test failed"
1580
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1581
EOF
1582
grep -q BIGE $TMPO && enable bigendian
1583

    
1584
# ---
1585
# check availability of some header files
1586

    
1587
if check_func dlopen; then
1588
    ldl=
1589
elif check_func dlopen -ldl; then
1590
    ldl=-ldl
1591
fi
1592

    
1593
check_func  fork
1594
check_func  gethrtime
1595
check_func  getrusage
1596
check_func  inet_aton $network_extralibs
1597
check_func  memalign
1598
check_func  mkstemp
1599
check_func2 windows.h GetProcessTimes
1600

    
1601
check_header byteswap.h
1602
check_header conio.h
1603
check_header dlfcn.h
1604
check_header malloc.h
1605
check_header termios.h
1606

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

    
1611
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1612

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

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

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

    
1644
check_lib math.h sin -lm
1645

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

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

    
1671
# disable the native AC-3 decoder if liba52 is enabled
1672
enabled liba52 && disable ac3_decoder
1673

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

    
1683

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

    
1691
test "$vhook" = "default" && vhook="$dlopen"
1692

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

    
1701
if enabled vhook; then
1702
    check_ldflags -rdynamic
1703
    check_ldflags -export-dynamic
1704
fi
1705

    
1706
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1707
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1708

    
1709
##########################################
1710
# SDL check
1711

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

    
1738
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1739

    
1740
check_type sys/socket.h socklen_t
1741

    
1742
##########################################
1743
# Network check
1744

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

    
1756
##########################################
1757
# IPv6 check
1758

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

    
1773
check_header linux/videodev.h
1774
check_header linux/videodev2.h
1775

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

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

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

    
1795
enabled debug && add_cflags -g
1796

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

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

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

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

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

    
1844
VHOOKCFLAGS="-fPIC"
1845

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

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

    
1862
enabled_any $THREADS_LIST      && enable threads
1863

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2041
if enabled shared; then
2042
    echo "BUILD_SHARED=yes" >> config.mak
2043
    echo "PIC=-fPIC -DPIC" >> config.mak
2044
    echo "SPPMAJOR=$LIBPOSTPROC_VERSION_MAJOR" >> config.mak
2045
    echo "SPPVERSION=$LIBPOSTPROC_VERSION" >> config.mak
2046
    echo "LAVCMAJOR=$LIBAVCODEC_VERSION_MAJOR" >> config.mak
2047
    echo "LAVCVERSION=$LIBAVCODEC_VERSION" >> config.mak
2048
    echo "LAVDMAJOR=$LIBAVDEVICE_VERSION_MAJOR" >> config.mak
2049
    echo "LAVDVERSION=$LIBAVDEVICE_VERSION" >> config.mak
2050
    echo "LAVFMAJOR=$LIBAVFORMAT_VERSION_MAJOR" >> config.mak
2051
    echo "LAVFVERSION=$LIBAVFORMAT_VERSION" >> config.mak
2052
    echo "LAVUMAJOR=$LIBAVUTIL_VERSION_MAJOR" >> config.mak
2053
    echo "LAVUVERSION=$LIBAVUTIL_VERSION" >> config.mak
2054
    echo "LAVFIMAJOR=$LIBAVFILTER_VERSION_MAJOR" >> config.mak
2055
    echo "LAVFIVERSION=$LIBAVFILTER_VERSION" >> config.mak
2056
    echo "SWSMAJOR=$LIBSWSCALE_VERSION_MAJOR" >> config.mak
2057
    echo "SWSVERSION=$LIBSWSCALE_VERSION" >> config.mak
2058
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2059
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2060
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2061
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2062
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2063
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2064
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2065
fi
2066
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2067
echo "EXTRALIBS=$extralibs" >> config.mak
2068

    
2069
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2070
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2071
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2072
                                      $DECODER_LIST      \
2073
                                      $ENCODER_LIST      \
2074
                                      $PARSER_LIST       \
2075
                                      $BSF_LIST          \
2076
                                      $DEMUXER_LIST      \
2077
                                      $MUXER_LIST        \
2078
                                      $FILTER_LIST       \
2079
                                      $PROTOCOL_LIST     \
2080
                                      $INDEV_LIST        \
2081
                                      $OUTDEV_LIST       \
2082

    
2083
echo "#define restrict $_restrict" >> $TMPH
2084

    
2085
if enabled small; then
2086
    echo "#define av_always_inline"  >> $TMPH
2087
fi
2088

    
2089
echo "SRC_PATH=\"$source_path\"" >> config.mak
2090
echo "SRC_PATH_BARE=$source_path" >> config.mak
2091
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2092

    
2093
# Apparently it's not possible to portably echo a backslash.
2094
enabled asmalign_pot &&
2095
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2096
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2097

    
2098

    
2099
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2100

    
2101
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2102
cmp -s $TMPH config.h &&
2103
    echo "config.h is unchanged" ||
2104
    mv -f $TMPH config.h
2105

    
2106
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2107

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

    
2151

    
2152
# build pkg-config files
2153
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2154

    
2155
pkgconfig_generate(){
2156
name=$1
2157
comment=$2
2158
version=$3
2159
libs=$4
2160
requires=$5
2161
cat <<EOF >$name.pc
2162
prefix=$PREFIX
2163
exec_prefix=\${prefix}
2164
libdir=\${exec_prefix}/lib
2165
includedir=\${prefix}/include
2166

    
2167
Name: $name
2168
Description: $comment
2169
Version: $version
2170
Requires: $requires
2171
Conflicts:
2172
Libs: -L\${libdir} $libs
2173
Cflags: -I\${includedir}
2174
EOF
2175
}
2176

    
2177
pkgconfig_generate_uninstalled(){
2178
name=$1
2179
shortname=${name#lib}
2180
comment=$2
2181
version=$3
2182
libs=$4
2183
requires=$5
2184
cat <<EOF >$name-uninstalled.pc
2185
prefix=
2186
exec_prefix=
2187
libdir=\${pcfiledir}/$name
2188
includedir=\${pcfiledir}
2189

    
2190
Name: $name
2191
Description: $comment
2192
Version: $version
2193
Requires: $requires
2194
Conflicts:
2195
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2196
Cflags: -I\${includedir}
2197
EOF
2198
}
2199

    
2200
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2201
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2202

    
2203
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2204
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2205

    
2206
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2207
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2208

    
2209
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2210
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2211
if enabled pp; then
2212
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2213
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2214
fi
2215

    
2216
if enabled swscaler; then
2217
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2218
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2219
else
2220
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2221
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2222
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2223
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2224
fi
2225

    
2226
if enabled avfilter; then
2227
  pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2228
  pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2229
fi