Statistics
| Branch: | Revision:

ffmpeg / configure @ 3fe142e2

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

    
181
log(){
182
    echo "$@" >>$logfile
183
}
184

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

    
191
echolog(){
192
    log "$@"
193
    echo "$@"
194
}
195

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

    
218
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
219
toupper(){
220
    echo "$@" | tr '[a-z]' '[A-Z]'
221
}
222

    
223
tolower(){
224
    echo "$@" | tr '[A-Z]' '[a-z]'
225
}
226

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

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

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

    
254
enable(){
255
    set_all yes $*
256
}
257

    
258
disable(){
259
    set_all no $*
260
}
261

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

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

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

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

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

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

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

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

    
309
        eval dep_all="\$${cfg}_deps"
310
        eval dep_any="\$${cfg}_deps_any"
311

    
312
        pushvar cfg dep_all dep_any
313
        check_deps $dep_all $dep_any
314
        popvar cfg dep_all dep_any
315

    
316
        enabled_all $dep_all || disable $cfg
317
        enabled_any $dep_any || disable $cfg
318

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

    
324
        disable ${cfg}_checking
325
    done
326
}
327

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

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

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

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

    
366
temp_cflags(){
367
    save_flags
368
    CFLAGS="$CFLAGS $*"
369
}
370

    
371
temp_ldflags(){
372
    save_flags
373
    LDFLAGS="$LDFLAGS $*"
374
}
375

    
376
temp_extralibs(){
377
    save_flags
378
    extralibs="$extralibs $*"
379
}
380

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

    
388
add_cflags(){
389
    append CFLAGS "$@"
390
}
391

    
392
add_ldflags(){
393
    append LDFLAGS "$@"
394
}
395

    
396
add_extralibs(){
397
    append extralibs "$@"
398
}
399

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

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

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

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

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

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

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

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

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

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

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

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

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

    
531
check_exec_crash(){
532
    code=`cat`
533

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

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

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

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

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

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

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

    
613
COMPONENT_LIST="
614
    bsfs
615
    decoders
616
    demuxers
617
    encoders
618
    indevs
619
    muxers
620
    outdevs
621
    parsers
622
    protocols
623
"
624

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

    
665
THREADS_LIST='
666
    beosthreads
667
    os2threads
668
    pthreads
669
    w32threads
670
'
671

    
672
ARCH_LIST='
673
    alpha
674
    armv4l
675
    bfin
676
    ia64
677
    m68k
678
    mips
679
    parisc
680
    powerpc
681
    s390
682
    sh4
683
    sparc
684
    sparc64
685
    x86
686
    x86_32
687
    x86_64
688
'
689

    
690
ARCH_EXT_LIST='
691
    altivec
692
    armv5te
693
    armv6
694
    iwmmxt
695
    mmi
696
    mmx
697
    ssse3
698
    vis
699
'
700

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

    
756
CMDLINE_SELECT="
757
    $ARCH_EXT_LIST
758
    $CONFIG_LIST
759
    $THREADS_LIST
760
    debug
761
    extra_warnings
762
    optimizations
763
    shared
764
    static
765
"
766

    
767
# code dependency declarations
768

    
769
# architecture extensions
770
altivec_deps="powerpc"
771
armv5te_deps="armv4l"
772
armv6_deps="armv4l"
773
iwmmxt_deps="armv4l"
774
mmi_deps="mips"
775
mmx_deps="x86"
776
ssse3_deps="x86"
777
vis_deps="sparc"
778

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

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

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

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

    
854
# programs
855
ffplay_deps="sdl"
856
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
857
ffserver_extralibs='$ldl'
858
vhook_extralibs='$ldl'
859

    
860

    
861
# set temporary file name
862
if test ! -z "$TMPDIR" ; then
863
    TMPDIR1="${TMPDIR}"
864
elif test ! -z "$TEMPDIR" ; then
865
    TMPDIR1="${TEMPDIR}"
866
else
867
    TMPDIR1="/tmp"
868
fi
869

    
870
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
871
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
872
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
873
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
874
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
875

    
876
# default parameters
877

    
878
enable logging
879
logfile="config.err"
880

    
881
# installation paths
882
PREFIX="/usr/local"
883
libdir='$(PREFIX)/lib'
884
shlibdir="$libdir"
885
incdir='$(PREFIX)/include/ffmpeg'
886
mandir='$(PREFIX)/share/man'
887
bindir='$(PREFIX)/bin'
888

    
889
# toolchain
890
cc="gcc"
891
ar="ar"
892
ranlib="ranlib"
893
make="make"
894
strip="strip"
895
asmalign_pot="unknown"
896
ln_s="ln -sf"
897

    
898
# machine
899
arch=`uname -m`
900
cpu="generic"
901

    
902
# OS
903
targetos=$(tolower $(uname -s))
904

    
905
# libraries
906
enable zlib
907

    
908
# configurable options
909
enable debug
910
enable dostrip
911
enable ffmpeg
912
enable ffplay
913
enable ffserver
914
enable ipv6
915
enable static
916
enable mpegaudio_hp
917
enable network
918
enable optimizations
919
enable protocols
920
vhook="default"
921

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

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

    
951
FFMPEG_CONFIGURATION="$@"
952

    
953
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
954
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
955
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
956
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
957
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
958
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
959
OUTDEV_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavdevice/alldevices.c"`
960
INDEV_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavdevice/alldevices.c"`
961
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
962

    
963
enable $ARCH_EXT_LIST \
964
       $DECODER_LIST \
965
       $ENCODER_LIST \
966
       $PARSER_LIST \
967
       $BSF_LIST \
968
       $DEMUXER_LIST \
969
       $MUXER_LIST \
970
       $PROTOCOL_LIST \
971
       $INDEV_LIST \
972
       $OUTDEV_LIST \
973

    
974
die_unknown(){
975
    echo "Unknown option \"$1\"."
976
    echo "See $0 --help for available options."
977
    exit 1
978
}
979

    
980
show_list() {
981
    suffix=_$1
982
    shift
983
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
984
    exit 0
985
}
986

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

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

    
1143
enable $arch
1144
enabled_any x86_32 x86_64 && enable x86
1145
enabled     sparc64       && enable sparc
1146

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

    
1293
    *)
1294
        targetos="${targetos}-UNKNOWN"
1295
        ;;
1296
esac
1297

    
1298
add_extralibs $osextralibs
1299

    
1300
if ! disabled logging ; then
1301
    enabled logging || logfile="$logging"
1302
    echo "# $0 $@" >$logfile
1303
    set >>$logfile
1304
else
1305
    logfile=/dev/null
1306
fi
1307

    
1308
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1309
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1310

    
1311
test -n "$cross_prefix" && enable cross_compile
1312
cc="${cross_prefix}${cc}"
1313
ar="${cross_prefix}${ar}"
1314
ranlib="${cross_prefix}${ranlib}"
1315
strip="${cross_prefix}${strip}"
1316

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

    
1328
disabled static && LIBNAME=""
1329

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

    
1345

    
1346
if ! enabled gpl; then
1347
    die_gpl_disabled(){
1348
        name=$1
1349
        shift
1350
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1351
    }
1352
    die_gpl_disabled "The Postprocessing code" pp
1353
    die_gpl_disabled "liba52"                  liba52
1354
    die_gpl_disabled "libx264"                 libx264
1355
    die_gpl_disabled "libxvidcore"             libxvid
1356
    die_gpl_disabled "FAAD2"                   libfaad2
1357
    die_gpl_disabled "The X11 grabber"         x11grab
1358
    die_gpl_disabled "The software scaler"     swscaler
1359
fi
1360

    
1361
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1362
    die "libamr is nonfree and --enable-nonfree is not specified."
1363
fi
1364

    
1365
check_deps $ARCH_EXT_LIST
1366

    
1367
test -z "$need_memalign" && need_memalign="$mmx"
1368

    
1369
#Darwin CC versions
1370
if test $targetos = darwin; then
1371
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1372
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1373
    else
1374
        add_cflags "-no-cpp-precomp -pipe"
1375
        check_cflags "-force_cpusubtype_ALL"
1376
        check_cflags "-Wno-sign-compare"
1377
        disabled shared && add_cflags -mdynamic-no-pic
1378
    fi
1379
fi
1380

    
1381
disabled optimizations || add_cflags -fomit-frame-pointer
1382

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

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

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

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

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

    
1494
if enabled x86; then
1495
    # check whether EBP is available on x86
1496
    # As 'i' is stored on the stack, this program will crash
1497
    # if the base pointer is used to access it because the
1498
    # base pointer is cleared in the inline assembly code.
1499
    check_exec_crash <<EOF && enable ebp_available
1500
    volatile int i=0;
1501
    asm volatile (
1502
        "xorl %%ebp, %%ebp"
1503
    ::: "%ebp");
1504
    return i;
1505
EOF
1506

    
1507
    # check wether EBX is available on x86
1508
    check_asm ebx_available '"":::"%ebx"'
1509

    
1510
    # check whether binutils is new enough to compile SSSE3
1511
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1512
fi
1513

    
1514
# check for assembler specific support
1515

    
1516
if test $arch = "powerpc"; then
1517
check_cc <<EOF && enable dcbzl
1518
int main(void) {
1519
    register long zero = 0;
1520
    char data[1024];
1521
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1522
return 0;
1523
}
1524
EOF
1525
fi
1526

    
1527
# check for SIMD availability
1528

    
1529
# AltiVec flags: The FSF version of GCC differs from the Apple version
1530
if enabled altivec; then
1531
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1532
        add_cflags "-faltivec" ||
1533
        add_cflags "-maltivec -mabi=altivec"
1534

    
1535
    check_header altivec.h
1536

    
1537
    # check if our compiler supports Motorola AltiVec C API
1538
    enabled altivec_h &&
1539
        inc_altivec_h="#include <altivec.h>" ||
1540
        inc_altivec_h=
1541
    check_cc <<EOF || disable altivec
1542
$inc_altivec_h
1543
int main(void) {
1544
    vector signed int v1, v2, v3;
1545
    v1 = vec_add(v2,v3);
1546
    return 0;
1547
}
1548
EOF
1549
fi
1550

    
1551
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1552
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1553
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1554
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1555
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1556

    
1557
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1558

    
1559
# ---
1560
# big/little-endian test
1561
check_cc <<EOF || die "endian test failed"
1562
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1563
EOF
1564
grep -q BIGE $TMPO && enable bigendian
1565

    
1566
# ---
1567
# check availability of some header files
1568

    
1569
if check_func dlopen; then
1570
    ldl=
1571
elif check_func dlopen -ldl; then
1572
    ldl=-ldl
1573
fi
1574

    
1575
check_func  fork
1576
check_func  gethrtime
1577
check_func  getrusage
1578
check_func  inet_aton $network_extralibs
1579
check_func  memalign
1580
check_func  mkstemp
1581
check_func2 windows.h GetProcessTimes
1582

    
1583
check_header byteswap.h
1584
check_header conio.h
1585
check_header dlfcn.h
1586
check_header malloc.h
1587
check_header termios.h
1588

    
1589
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1590
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1591
fi
1592

    
1593
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1594

    
1595
# ffserver uses poll(),
1596
# if it's not found we can emulate it using select().
1597
if enabled ffserver; then
1598
    check_header sys/poll.h
1599
    check_header sys/select.h
1600
fi
1601

    
1602
# check for some common methods of building with pthread support
1603
# do this before the optional library checks as some of them require pthreads
1604
if enabled pthreads; then
1605
    if check_func pthread_create; then
1606
        :
1607
    elif check_func pthread_create -pthread; then
1608
        add_cflags -pthread
1609
        add_ldflags -pthread
1610
    elif check_func pthread_create -pthreads; then
1611
        add_cflags -pthreads
1612
        add_ldflags -pthreads
1613
    elif ! check_lib pthread.h pthread_create -lpthread; then
1614
        die "ERROR: can't find pthreads library"
1615
    fi
1616
fi
1617

    
1618
for thread in $THREADS_LIST; do
1619
    if enabled $thread; then
1620
        test -n "$thread_type" &&
1621
            die "ERROR: Only one thread type must be selected." ||
1622
            thread_type="$thread"
1623
    fi
1624
done
1625

    
1626
check_lib math.h sin -lm
1627

    
1628
# test for C99 functions in math.h
1629
for func in llrint lrint lrintf round roundf; do
1630
    check_exec <<EOF && enable $func || disable $func
1631
#define _ISOC9X_SOURCE  1
1632
#include <math.h>
1633
int main(void) { return ($func(3.999f) > 0)?0:1; }
1634
EOF
1635
done
1636

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

    
1653
# disable the native AC-3 decoder if liba52 is enabled
1654
enabled liba52 && disable ac3_decoder
1655

    
1656
# libdc1394 check
1657
if enabled libdc1394; then
1658
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1659
        enable libdc1394_2; } ||
1660
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1661
        enable libdc1394_1; } ||
1662
    die "ERROR: No version of libdc1394 found "
1663
fi
1664

    
1665

    
1666
_restrict=
1667
for restrict_keyword in restrict __restrict__ __restrict; do
1668
    check_cc <<EOF && _restrict=$restrict_keyword && break
1669
void foo(char * $restrict_keyword p);
1670
EOF
1671
done
1672

    
1673
test "$vhook" = "default" && vhook="$dlopen"
1674

    
1675
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1676
    disable vhook
1677
    echo
1678
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1679
    echo "Patches welcome."
1680
    echo
1681
fi
1682

    
1683
if enabled vhook; then
1684
    check_ldflags -rdynamic
1685
    check_ldflags -export-dynamic
1686
fi
1687

    
1688
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1689
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1690

    
1691
##########################################
1692
# SDL check
1693

    
1694
disable sdl_too_old
1695
disable sdl
1696
SDL_CONFIG="${cross_prefix}sdl-config"
1697
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1698
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1699
    temp_cflags $sdl_cflags
1700
    temp_extralibs `"${SDL_CONFIG}" --libs`
1701
    if check_lib2 SDL.h SDL_Init; then
1702
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1703
        if test "$_sdlversion" -lt 121 ; then
1704
            enable sdl_too_old
1705
        else
1706
            enable sdl
1707
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1708
#include <SDL.h>
1709
int main(void){
1710
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1711
    int w = vi->current_w;
1712
    return 0;
1713
}
1714
EOF
1715
        fi
1716
    fi
1717
    restore_flags
1718
fi
1719

    
1720
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1721

    
1722
check_type sys/socket.h socklen_t
1723

    
1724
##########################################
1725
# Network check
1726

    
1727
if enabled network; then
1728
    # Prefer arpa/inet.h over winsock2
1729
    if check_header arpa/inet.h ; then
1730
        check_func closesocket
1731
    elif check_header winsock2.h ; then
1732
        network_extralibs="-lws2_32"
1733
        check_type ws2tcpip.h socklen_t
1734
        check_func2 winsock2.h closesocket
1735
    fi
1736
fi
1737

    
1738
##########################################
1739
# IPv6 check
1740

    
1741
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1742
#include <sys/types.h>
1743
#include <sys/socket.h>
1744
#include <netinet/in.h>
1745
#include <netdb.h>
1746
int main(void) {
1747
    struct sockaddr_storage saddr;
1748
    struct ipv6_mreq mreq6;
1749
    getaddrinfo(0,0,0,0);
1750
    getnameinfo(0,0,0,0,0,0,0);
1751
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1752
}
1753
EOF
1754

    
1755
check_header linux/videodev.h
1756
check_header linux/videodev2.h
1757

    
1758
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1759
{ check_header dev/bktr/ioctl_meteor.h &&
1760
  check_header dev/bktr/ioctl_bt848.h; } ||
1761
{ check_header machine/ioctl_meteor.h &&
1762
  check_header machine/ioctl_bt848.h; } ||
1763
{ check_header dev/video/meteor/ioctl_meteor.h &&
1764
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1765
check_header dev/ic/bt8xx.h
1766

    
1767
check_header sys/soundcard.h
1768
check_header soundcard.h
1769

    
1770
# deal with the X11 frame grabber
1771
enabled x11grab                         &&
1772
check_header X11/Xlib.h                 &&
1773
check_header X11/extensions/XShm.h      &&
1774
check_func XOpenDisplay -lX11           &&
1775
check_func XShmCreateImage -lX11 -lXext
1776

    
1777
enabled debug && add_cflags -g
1778

    
1779
# add some useful compiler flags if supported
1780
check_cflags -Wdeclaration-after-statement
1781
check_cflags -Wall
1782
check_cflags -Wno-switch
1783
check_cflags -Wdisabled-optimization
1784
check_cflags -Wpointer-arith
1785
check_cflags -Wredundant-decls
1786
check_cflags -Wno-pointer-sign
1787
enabled extra_warnings && check_cflags -Winline
1788

    
1789
# add some linker flags
1790
check_ldflags -Wl,--warn-common
1791
check_ldflags $LDLATEFLAGS
1792
check_ldflags -Wl,-Bsymbolic
1793

    
1794
if enabled small; then
1795
    check_cflags -Os            # not all compilers support -Os
1796
    optimizations="small"
1797
elif enabled optimizations; then
1798
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1799
        add_cflags  "-O5"
1800
        add_ldflags "-O5"
1801
    else
1802
        add_cflags "-O3"
1803
    fi
1804
fi
1805

    
1806
# PIC flags for shared library objects where they are needed
1807
if enabled shared; then
1808
    # LIBOBJFLAGS may have already been set in the OS configuration
1809
    if test -z "$LIBOBJFLAGS" ; then
1810
        case "$arch" in
1811
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1812
        esac
1813
    fi
1814
fi
1815

    
1816
if enabled gprof; then
1817
    add_cflags  "-p"
1818
    add_ldflags "-p"
1819
fi
1820

    
1821
VHOOKCFLAGS="-fPIC"
1822

    
1823
# Find out if the .align argument is a power of two or not.
1824
if test $asmalign_pot = "unknown"; then
1825
    disable asmalign_pot
1826
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1827
fi
1828

    
1829
enabled_any $DECODER_LIST      && enable decoders
1830
enabled_any $ENCODER_LIST      && enable encoders
1831
enabled_any $BSF_LIST          && enable bsfs
1832
enabled_any $DEMUXER_LIST      && enable demuxers
1833
enabled_any $MUXER_LIST        && enable muxers
1834
enabled_any $INDEV_LIST        && enable demuxers
1835
enabled_any $OUTDEV_LIST       && enable muxers
1836
enabled_any $PROTOCOL_LIST     && enable protocols
1837

    
1838
enabled_any $THREADS_LIST      && enable threads
1839

    
1840
check_deps $CONFIG_LIST       \
1841
           $HAVE_LIST         \
1842
           $DECODER_LIST      \
1843
           $ENCODER_LIST      \
1844
           $PARSER_LIST       \
1845
           $BSF_LIST          \
1846
           $DEMUXER_LIST      \
1847
           $MUXER_LIST        \
1848
           $INDEV_LIST        \
1849
           $OUTDEV_LIST       \
1850
           $PROTOCOL_LIST     \
1851

    
1852
enabled libdc1394 && append pkg_requires "libraw1394"
1853
enabled libtheora && append pkg_requires "theora"
1854
enabled libvorbis && append pkg_requires "vorbisenc"
1855

    
1856
echo "install prefix            $PREFIX"
1857
echo "source path               $source_path"
1858
echo "C compiler                $cc"
1859
echo "make                      $make"
1860
echo ".align is power-of-two    $asmalign_pot"
1861
echo "ARCH                      $arch ($cpu)"
1862
if test "$BUILDSUF" != ""; then
1863
    echo "build suffix              $BUILDSUF"
1864
fi
1865
echo "big-endian                ${bigendian-no}"
1866
if test $arch = "x86_32" -o $arch = "x86_64"; then
1867
    echo "MMX enabled               ${mmx-no}"
1868
    echo "CMOV enabled              ${cmov-no}"
1869
    echo "CMOV is fast              ${fast_cmov-no}"
1870
    echo "EBX available             ${ebx_available-no}"
1871
    echo "EBP available             ${ebp_available-no}"
1872
fi
1873
if test $arch = "armv4l"; then
1874
    echo "ARMv5TE enabled           ${armv5te-no}"
1875
    echo "ARMv6 enabled             ${armv6-no}"
1876
    echo "IWMMXT enabled            ${iwmmxt-no}"
1877
fi
1878
if test $arch = "mips"; then
1879
    echo "MMI enabled               ${mmi-no}"
1880
fi
1881
if test $arch = "powerpc"; then
1882
    echo "AltiVec enabled           ${altivec-no}"
1883
    echo "dcbzl available           ${dcbzl-no}"
1884
fi
1885
echo "gprof enabled             ${gprof-no}"
1886
echo "debug symbols             ${debug-no}"
1887
echo "strip symbols             ${dostrip-no}"
1888
echo "optimizations             ${optimizations-no}"
1889
echo "static                    ${static-no}"
1890
echo "shared                    ${shared-no}"
1891
echo "postprocessing support    ${pp-no}"
1892
echo "software scaler enabled   ${swscaler-no}"
1893
echo "video hooking             ${vhook-no}"
1894
if enabled vhook; then
1895
    echo "Imlib2 support            ${imlib2-no}"
1896
    echo "FreeType support          ${freetype2-no}"
1897
fi
1898
echo "network support           ${network-no}"
1899
if enabled network; then
1900
    echo "IPv6 support              ${ipv6-no}"
1901
fi
1902
echo "threading support         ${thread_type-no}"
1903
echo "SDL support               ${sdl-no}"
1904
if enabled sdl_too_old; then
1905
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1906
fi
1907
echo "Sun medialib support      ${mlib-no}"
1908
echo "AVISynth enabled          ${avisynth-no}"
1909
echo "liba52 support            ${liba52-no}"
1910
echo "liba52 dlopened           ${liba52bin-no}"
1911
echo "libamr-nb support         ${libamr_nb-no}"
1912
echo "libamr-wb support         ${libamr_wb-no}"
1913
echo "libdc1394 support         ${libdc1394-no}"
1914
echo "libfaac enabled           ${libfaac-no}"
1915
echo "libfaad enabled           ${libfaad-no}"
1916
echo "libfaad dlopened          ${libfaadbin-no}"
1917
echo "libgsm enabled            ${libgsm-no}"
1918
echo "libmp3lame enabled        ${libmp3lame-no}"
1919
echo "libnut enabled            ${libnut-no}"
1920
echo "libtheora enabled         ${libtheora-no}"
1921
echo "libvorbis enabled         ${libvorbis-no}"
1922
echo "x264 enabled              ${libx264-no}"
1923
echo "XviD enabled              ${libxvid-no}"
1924
echo "zlib enabled              ${zlib-no}"
1925

    
1926
for type in decoder encoder parser demuxer muxer protocol bsf indev outdev; do
1927
    echo "Enabled ${type}s:"
1928
    ucname="\$`toupper $type`_LIST"
1929
    list="`eval echo $ucname`"
1930
    partlist=""
1931
    for part in $list; do
1932
        enabled $part && partlist="$partlist $part"
1933
    done
1934
    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1935
    echo $partlist
1936
done
1937

    
1938
enabled nonfree &&
1939
    echo "License: unredistributable" ||
1940
    (enabled gpl &&
1941
        echo "License: GPL" ||
1942
        echo "License: LGPL")
1943

    
1944
echo "Creating config.mak and config.h..."
1945

    
1946
echo "# Automatically generated by configure - do not modify!" > config.mak
1947
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1948
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1949
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1950
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1951

    
1952
echo "PREFIX=$PREFIX" >> config.mak
1953
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1954
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1955
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1956
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1957
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1958
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1959
echo "MAKE=$make" >> config.mak
1960
echo "CC=$cc" >> config.mak
1961
echo "AR=$ar" >> config.mak
1962
echo "RANLIB=$ranlib" >> config.mak
1963
echo "LDCONFIG=$LDCONFIG" >> config.mak
1964
echo "LN_S=$ln_s" >> config.mak
1965
enabled dostrip &&
1966
    echo "STRIP=$strip" >> config.mak ||
1967
    echo "STRIP=echo ignoring strip" >> config.mak
1968

    
1969
echo "OPTFLAGS=$CFLAGS" >> config.mak
1970
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1971
echo "LDFLAGS=$LDFLAGS" >> config.mak
1972
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1973
echo "SHFLAGS=$SHFLAGS" >> config.mak
1974
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1975
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1976
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1977
echo "BUILD_STATIC=$static" >> config.mak
1978
echo "BUILDSUF=$BUILDSUF" >> config.mak
1979
echo "FULLNAME=$FULLNAME" >> config.mak
1980
echo "LIBPREF=$LIBPREF" >> config.mak
1981
echo "LIBSUF=$LIBSUF" >> config.mak
1982
echo "LIBNAME=$LIBNAME" >> config.mak
1983
echo "SLIBPREF=$SLIBPREF" >> config.mak
1984
echo "SLIBSUF=$SLIBSUF" >> config.mak
1985
echo "EXESUF=$EXESUF" >> config.mak
1986

    
1987
if enabled bigendian; then
1988
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1989
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1990
fi
1991
if enabled mmx; then
1992
    echo "#define __CPU__ 586" >> $TMPH
1993
fi
1994

    
1995
if enabled sdl; then
1996
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1997
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1998
fi
1999
if enabled texi2html; then
2000
    echo "BUILD_DOC=yes" >> config.mak
2001
fi
2002

    
2003
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
2004
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
2005
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
2006
lavd_version=`grep '#define LIBAVDEVICE_VERSION ' "$source_path/libavdevice/avdevice.h" | sed 's/[^0-9\.]//g'`
2007
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
2008
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
2009

    
2010

    
2011

    
2012
if enabled shared; then
2013
    echo "BUILD_SHARED=yes" >> config.mak
2014
    echo "PIC=-fPIC -DPIC" >> config.mak
2015
    echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
2016
    echo "SPPVERSION=$pp_version" >> config.mak
2017
    echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
2018
    echo "LAVCVERSION=$lavc_version" >> config.mak
2019
    echo "LAVDMAJOR=${lavd_version%%.*}" >> config.mak
2020
    echo "LAVDVERSION=$lavd_version" >> config.mak
2021
    echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
2022
    echo "LAVFVERSION=$lavf_version" >> config.mak
2023
    echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
2024
    echo "LAVUVERSION=$lavu_version" >> config.mak
2025
    echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
2026
    echo "SWSVERSION=$sws_version" >> config.mak
2027
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2028
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2029
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2030
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2031
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2032
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2033
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2034
fi
2035
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2036
echo "EXTRALIBS=$extralibs" >> config.mak
2037

    
2038
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2039
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2040
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2041
                                      $DECODER_LIST      \
2042
                                      $ENCODER_LIST      \
2043
                                      $PARSER_LIST       \
2044
                                      $BSF_LIST          \
2045
                                      $DEMUXER_LIST      \
2046
                                      $MUXER_LIST        \
2047
                                      $PROTOCOL_LIST     \
2048
                                      $INDEV_LIST        \
2049
                                      $OUTDEV_LIST       \
2050

    
2051
echo "#define restrict $_restrict" >> $TMPH
2052

    
2053
if enabled small; then
2054
    echo "#define av_always_inline"  >> $TMPH
2055
fi
2056

    
2057
echo "SRC_PATH=\"$source_path\"" >> config.mak
2058
echo "SRC_PATH_BARE=$source_path" >> config.mak
2059
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2060

    
2061
# Apparently it's not possible to portably echo a backslash.
2062
enabled asmalign_pot &&
2063
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2064
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2065

    
2066

    
2067
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2068

    
2069
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2070
cmp -s $TMPH config.h &&
2071
    echo "config.h is unchanged" ||
2072
    mv -f $TMPH config.h
2073

    
2074
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2075

    
2076
# build tree in object directory if source path is different from current one
2077
if enabled source_path_used; then
2078
    DIRS="\
2079
        doc               \
2080
        libavcodec        \
2081
        libavcodec/alpha  \
2082
        libavcodec/armv4l \
2083
        libavcodec/bfin   \
2084
        libavcodec/i386   \
2085
        libavcodec/mlib   \
2086
        libavcodec/ppc    \
2087
        libavcodec/sh4    \
2088
        libavcodec/sparc  \
2089
        libavdevice       \
2090
        libavformat       \
2091
        libavutil         \
2092
        libpostproc       \
2093
        libswscale        \
2094
        tests             \
2095
        tools             \
2096
        vhook             \
2097
        "
2098
    FILES="\
2099
        Makefile             \
2100
        common.mak           \
2101
        doc/texi2pod.pl      \
2102
        libavcodec/Makefile  \
2103
        libavdevice/Makefile \
2104
        libavformat/Makefile \
2105
        libavutil/Makefile   \
2106
        libpostproc/Makefile \
2107
        libswscale/Makefile  \
2108
        "
2109
    for dir in $DIRS ; do
2110
        mkdir -p $dir
2111
    done
2112
    for f in $FILES ; do
2113
        $ln_s "$source_path/$f" $f
2114
    done
2115
fi
2116

    
2117

    
2118
# build pkg-config files
2119
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2120

    
2121
pkgconfig_generate(){
2122
name=$1
2123
comment=$2
2124
version=$3
2125
libs=$4
2126
requires=$5
2127
include=$6
2128
cat <<EOF >$name.pc
2129
prefix=$PREFIX
2130
exec_prefix=\${prefix}
2131
libdir=\${exec_prefix}/lib
2132
includedir=\${prefix}/include
2133

    
2134
Name: $name
2135
Description: $comment
2136
Version: $version
2137
Requires: $requires
2138
Conflicts:
2139
Libs: -L\${libdir} $libs
2140
Cflags: -I\${includedir}/$include
2141
EOF
2142
}
2143

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

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

    
2167
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2168
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2169

    
2170
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2171
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2172

    
2173
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2174
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2175

    
2176
pkgconfig_generate libavdevice "FFmpeg device handling library" "$lavd_version" "-lavdevice $extralibs" "$pkg_requires libavformat = $lavf_version" ffmpeg
2177
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$lavd_version" "$extralibs" "$pkg_requires libavformat = $lavf_version"
2178
if enabled pp; then
2179
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2180
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2181
fi
2182

    
2183
if enabled swscaler; then
2184
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2185
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2186
else
2187
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2188
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2189
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2190
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2191
fi