Statistics
| Branch: | Revision:

ffmpeg / configure @ de0e19cc

History | View | Annotate | Download (64.7 KB)

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

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

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

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

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

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

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

    
190
log(){
191
    echo "$@" >> $logfile
192
}
193

    
194
log_file(){
195
    log BEGIN $1
196
    pr -n -t $1 >> $logfile
197
    log END $1
198
}
199

    
200
echolog(){
201
    log "$@"
202
    echo "$@"
203
}
204

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

    
227
# Avoid locale weirdness, besides we really just want to translate ASCII.
228
toupper(){
229
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
230
}
231

    
232
tolower(){
233
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
234
}
235

    
236
set_all(){
237
    value=$1
238
    shift
239
    for var in $*; do
240
        eval $var=$value
241
    done
242
}
243

    
244
pushvar(){
245
    for var in $*; do
246
        eval level=\${${var}_level:=0}
247
        eval ${var}_${level}="\$$var"
248
        eval ${var}_level=$(($level+1))
249
    done
250
}
251

    
252
popvar(){
253
    for var in $*; do
254
        eval level=\${${var}_level:-0}
255
        test $level = 0 && continue
256
        eval level=$(($level-1))
257
        eval $var="\${${var}_${level}}"
258
        eval ${var}_level=$level
259
        eval unset ${var}_${level}
260
    done
261
}
262

    
263
enable(){
264
    set_all yes $*
265
}
266

    
267
disable(){
268
    set_all no $*
269
}
270

    
271
enabled(){
272
    test "${1#!}" = "$1" && op== || op=!=
273
    eval test "x\$${1#!}" $op "xyes"
274
}
275

    
276
disabled(){
277
    test "${1#!}" = "$1" && op== || op=!=
278
    eval test "x\$${1#!}" $op "xno"
279
}
280

    
281
enabled_all(){
282
    for opt; do
283
        enabled $opt || return 1
284
    done
285
}
286

    
287
disabled_all(){
288
    for opt; do
289
        disabled $opt || return 1
290
    done
291
}
292

    
293
enabled_any(){
294
    for opt; do
295
        enabled $opt && return 0
296
    done
297
}
298

    
299
disabled_any(){
300
    for opt; do
301
        disabled $opt && return 0
302
    done
303
}
304

    
305
set_default(){
306
    for opt; do
307
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
308
    done
309
}
310

    
311
is_in(){
312
    value=$1
313
    shift
314
    for var in $*; do
315
        [ $var = $value ] && return 0
316
    done
317
    return 1
318
}
319

    
320
check_deps(){
321
    for cfg; do
322
        cfg="${cfg#!}"
323
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
324
        disabled ${cfg}_checking && continue
325
        enable ${cfg}_checking
326

    
327
        eval dep_all="\$${cfg}_deps"
328
        eval dep_any="\$${cfg}_deps_any"
329

    
330
        pushvar cfg dep_all dep_any
331
        check_deps $dep_all $dep_any
332
        popvar cfg dep_all dep_any
333

    
334
        enabled_all $dep_all || disable $cfg
335
        enabled_any $dep_any || disable $cfg
336

    
337
        if enabled $cfg; then
338
            eval dep_extralibs="\$${cfg}_extralibs"
339
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
340
        fi
341

    
342
        disable ${cfg}_checking
343
    done
344
}
345

    
346
print_config(){
347
    pfx=$1
348
    header=$2
349
    makefile=$3
350
    shift 3
351
    for cfg; do
352
        ucname="`toupper $cfg`"
353
        if enabled $cfg; then
354
            echo "#define ${pfx}${ucname} 1" >> $header
355
            echo "#define ENABLE_${ucname} 1" >> $header
356
            echo "${pfx}${ucname}=yes" >> $makefile
357
        else
358
            echo "#define ENABLE_${ucname} 0" >> $header
359
        fi
360
    done
361
}
362

    
363
flags_saved(){
364
    (: ${SAVE_CFLAGS?}) 2> /dev/null
365
}
366

    
367
save_flags(){
368
    flags_saved && return
369
    SAVE_CFLAGS="$CFLAGS"
370
    SAVE_LDFLAGS="$LDFLAGS"
371
    SAVE_extralibs="$extralibs"
372
}
373

    
374
restore_flags(){
375
    flags_saved || return
376
    CFLAGS="$SAVE_CFLAGS"
377
    LDFLAGS="$SAVE_LDFLAGS"
378
    extralibs="$SAVE_extralibs"
379
    unset SAVE_CFLAGS
380
    unset SAVE_LDFLAGS
381
    unset SAVE_extralibs
382
}
383

    
384
temp_cflags(){
385
    save_flags
386
    CFLAGS="$CFLAGS $*"
387
}
388

    
389
temp_ldflags(){
390
    save_flags
391
    LDFLAGS="$LDFLAGS $*"
392
}
393

    
394
temp_extralibs(){
395
    save_flags
396
    extralibs="$extralibs $*"
397
}
398

    
399
append(){
400
    var=$1
401
    shift
402
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
403
    eval "$var=\"\$$var $*\""
404
}
405

    
406
add_cflags(){
407
    append CFLAGS "$@"
408
}
409

    
410
add_ldflags(){
411
    append LDFLAGS "$@"
412
}
413

    
414
add_extralibs(){
415
    append extralibs "$@"
416
}
417

    
418
check_cmd(){
419
    log "$@"
420
    "$@" >> $logfile 2>&1
421
}
422

    
423
check_cc(){
424
    log check_cc "$@"
425
    cat > $TMPC
426
    log_file $TMPC
427
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
428
}
429

    
430
check_cpp(){
431
    log check_cpp "$@"
432
    cat > $TMPC
433
    log_file $TMPC
434
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
435
}
436

    
437
check_asm(){
438
    log check_asm "$@"
439
    name="$1"
440
    asm="$2"
441
    shift 2
442
    check_cc "$@" <<EOF && enable $name || disable $name
443
int foo(void){ asm volatile($asm); }
444
EOF
445
}
446

    
447
check_ld(){
448
    log check_ld "$@"
449
    check_cc || return
450
    flags=''
451
    libs=''
452
    for f; do
453
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
454
    done
455
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
456
}
457

    
458
check_cflags(){
459
    log check_cflags "$@"
460
    check_cc "$@" <<EOF && add_cflags "$@"
461
int x;
462
EOF
463
}
464

    
465
check_ldflags(){
466
    log check_ldflags "$@"
467
    check_ld "$@" <<EOF && add_ldflags "$@"
468
int main(void){ return 0; }
469
EOF
470
}
471

    
472
check_header(){
473
    log check_header "$@"
474
    header=$1
475
    shift
476
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
477
    disable $var
478
    check_cpp "$@" <<EOF && enable $var
479
#include <$header>
480
int x;
481
EOF
482
}
483

    
484
check_func(){
485
    log check_func "$@"
486
    func=$1
487
    shift
488
    disable $func
489
    check_ld "$@" <<EOF && enable $func
490
extern int $func();
491
int main(void){ $func(); }
492
EOF
493
}
494

    
495
check_func2(){
496
    log check_func2 "$@"
497
    headers=$1
498
    func=$2
499
    shift 2
500
    disable $func
501
    incs=""
502
    for hdr in $headers; do
503
        incs="$incs
504
#include <$hdr>"
505
    done
506
    check_ld "$@" <<EOF && enable $func
507
$incs
508
int main(int argc, char **argv){
509
    (void) $func;
510
    return 0;
511
}
512
EOF
513
}
514

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

    
527
check_lib2(){
528
    log check_lib2 "$@"
529
    headers="$1"
530
    func="$2"
531
    shift 2
532
    temp_extralibs "$@"
533
    check_func2 "$headers" $func && add_extralibs "$@"
534
    err=$?
535
    restore_flags
536
    return $err
537
}
538

    
539
check_exec(){
540
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
541
}
542

    
543
check_exec_crash(){
544
    code=`cat`
545

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

    
552
    (check_exec "$@") >> $logfile 2>&1 <<EOF
553
#include <signal.h>
554
static void sighandler(int sig){
555
    raise(SIGTERM);
556
}
557
int main(void){
558
    signal(SIGILL, sighandler);
559
    signal(SIGFPE, sighandler);
560
    signal(SIGSEGV, sighandler);
561
#ifdef SIGBUS
562
    signal(SIGBUS, sighandler);
563
#endif
564
    { $code }
565
}
566
EOF
567
}
568

    
569
check_type(){
570
    log check_type "$@"
571
    headers=$1
572
    type=$2
573
    shift 2
574
    disable $type
575
    incs=""
576
    for hdr in $headers; do
577
        incs="$incs
578
#include <$hdr>"
579
    done
580
    check_cc "$@" <<EOF && enable $type
581
$incs
582
$type v;
583
EOF
584
}
585

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

    
594
require2(){
595
    name="$1"
596
    headers="$2"
597
    func="$3"
598
    shift 3
599
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
600
}
601

    
602
check_foo_config(){
603
    cfg=$1
604
    pkg=$2
605
    header=$3
606
    func=$4
607
    shift 4
608
    disable $cfg
609
    check_cmd ${pkg}-config --version
610
    err=$?
611
    if test "$err" = 0; then
612
        temp_cflags `${pkg}-config --cflags`
613
        temp_extralibs `${pkg}-config --libs`
614
        check_lib "$@" $header $func && enable $cfg
615
    fi
616
    return $err
617
}
618

    
619
apply(){
620
    file=$1
621
    shift
622
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
623
}
624

    
625
COMPONENT_LIST="
626
    bsfs
627
    decoders
628
    demuxers
629
    encoders
630
    filters
631
    indevs
632
    muxers
633
    outdevs
634
    parsers
635
    protocols
636
"
637

    
638
CONFIG_LIST="
639
    $COMPONENT_LIST
640
    avfilter
641
    avfilter_lavf
642
    avisynth
643
    beos_netserver
644
    bzlib
645
    ffmpeg
646
    ffplay
647
    ffserver
648
    gpl
649
    gprof
650
    gray
651
    hardcoded_tables
652
    ipv6
653
    liba52
654
    liba52bin
655
    libamr_nb
656
    libamr_wb
657
    libdc1394
658
    libdirac
659
    libfaac
660
    libfaad
661
    libfaadbin
662
    libgsm
663
    libmp3lame
664
    libnut
665
    libschroedinger
666
    libtheora
667
    libvorbis
668
    libx264
669
    libxvid
670
    memalign_hack
671
    mlib
672
    mpegaudio_hp
673
    network
674
    nonfree
675
    postproc
676
    powerpc_perf
677
    small
678
    swscale
679
    vhook
680
    x11grab
681
    zlib
682
"
683

    
684
THREADS_LIST='
685
    beosthreads
686
    os2threads
687
    pthreads
688
    w32threads
689
'
690

    
691
ARCH_LIST='
692
    alpha
693
    armv4l
694
    bfin
695
    ia64
696
    m68k
697
    mips
698
    parisc
699
    powerpc
700
    s390
701
    sh4
702
    sparc
703
    sparc64
704
    x86
705
    x86_32
706
    x86_64
707
'
708

    
709
ARCH_EXT_LIST='
710
    altivec
711
    armv5te
712
    armv6
713
    armvfp
714
    iwmmxt
715
    mmi
716
    mmx
717
    mmx2
718
    neon
719
    ssse3
720
    vis
721
'
722

    
723
HAVE_LIST="
724
    $ARCH_EXT_LIST
725
    $THREADS_LIST
726
    altivec_h
727
    altivec_vector_braces
728
    arpa_inet_h
729
    bswap
730
    byteswap_h
731
    closesocket
732
    cmov
733
    conio_h
734
    dcbzl
735
    dev_bktr_ioctl_bt848_h
736
    dev_bktr_ioctl_meteor_h
737
    dev_ic_bt8xx_h
738
    dev_video_meteor_ioctl_meteor_h
739
    dev_video_bktr_ioctl_bt848_h
740
    dlfcn_h
741
    dlopen
742
    ebp_available
743
    ebx_available
744
    fast_64bit
745
    fast_cmov
746
    fast_unaligned
747
    fork
748
    freetype2
749
    gethrtime
750
    GetProcessTimes
751
    getrusage
752
    imlib2
753
    inet_aton
754
    inline_asm
755
    libdc1394_1
756
    libdc1394_2
757
    llrint
758
    lrint
759
    lrintf
760
    machine_ioctl_bt848_h
761
    machine_ioctl_meteor_h
762
    malloc_h
763
    memalign
764
    mkstemp
765
    pld
766
    ppc64
767
    round
768
    roundf
769
    sdl
770
    sdl_video_size
771
    socklen_t
772
    soundcard_h
773
    poll_h
774
    sys_mman_h
775
    sys_resource_h
776
    sys_select_h
777
    sys_soundcard_h
778
    termios_h
779
    threads
780
    winsock2_h
781
"
782

    
783
CMDLINE_SELECT="
784
    $ARCH_EXT_LIST
785
    $CONFIG_LIST
786
    $THREADS_LIST
787
    cross_compile
788
    debug
789
    extra_warnings
790
    logging
791
    optimizations
792
    shared
793
    static
794
    stripping
795
"
796

    
797
PATHS_LIST='
798
    bindir
799
    incdir
800
    libdir
801
    mandir
802
    prefix
803
    shlibdir
804
'
805

    
806
CMDLINE_SET="
807
    $PATHS_LIST
808
    arch
809
    build_suffix
810
    cc
811
    cpu
812
    cross_prefix
813
    logfile
814
    source_path
815
    target_os
816
"
817

    
818
# code dependency declarations
819

    
820
# architecture extensions
821
altivec_deps="powerpc"
822
armv5te_deps="armv4l"
823
armv6_deps="armv4l"
824
armvfp_deps="armv4l"
825
iwmmxt_deps="armv4l"
826
mmi_deps="mips"
827
mmx_deps="x86"
828
mmx2_deps="x86 mmx"
829
neon_deps="armv4l"
830
ssse3_deps="x86"
831
vis_deps="sparc"
832

    
833
# system headers and functions
834
byteswap_h_deps="!armv4l"
835

    
836
# decoders / encoders
837
ac3_decoder_deps="gpl !liba52"
838
dxa_decoder_deps="zlib"
839
flashsv_decoder_deps="zlib"
840
flashsv_encoder_deps="zlib"
841
mlp_decoder_deps="mlp_parser"
842
mpeg_xvmc_decoder_deps="xvmc"
843
png_decoder_deps="zlib"
844
png_encoder_deps="zlib"
845
zmbv_decoder_deps="zlib"
846
zmbv_encoder_deps="zlib"
847

    
848
# external libraries
849
liba52_decoder_deps="liba52"
850
liba52bin_decoder_extralibs='$ldl'
851
libamr_nb_decoder_deps="libamr_nb"
852
libamr_nb_encoder_deps="libamr_nb"
853
libamr_wb_decoder_deps="libamr_wb"
854
libamr_wb_encoder_deps="libamr_wb"
855
libdirac_decoder_deps="libdirac !libschroedinger"
856
libdirac_encoder_deps="libdirac"
857
libfaac_encoder_deps="libfaac"
858
libfaad_decoder_deps="libfaad"
859
libfaadbin_decoder_extralibs='$ldl'
860
libgsm_decoder_deps="libgsm"
861
libgsm_encoder_deps="libgsm"
862
libgsm_ms_decoder_deps="libgsm"
863
libgsm_ms_encoder_deps="libgsm"
864
libmp3lame_encoder_deps="libmp3lame"
865
libschroedinger_decoder_deps="libschroedinger"
866
libschroedinger_encoder_deps="libschroedinger"
867
libtheora_encoder_deps="libtheora"
868
libvorbis_encoder_deps="libvorbis"
869
libx264_encoder_deps="libx264"
870
libxvid_encoder_deps="libxvid"
871
mpeg4aac_decoder_deps="libfaad"
872

    
873
# demuxers / muxers
874
ac3_demuxer_deps="ac3_parser"
875
audio_beos_demuxer_deps="audio_beos"
876
audio_beos_demuxer_extralibs="-lmedia -lbe"
877
audio_beos_muxer_deps="audio_beos"
878
audio_beos_muxer_extralibs="-lmedia -lbe"
879
avisynth_demuxer_deps="avisynth"
880
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
881
dirac_demuxer_deps="dirac_parser"
882
dv1394_demuxer_deps="dv1394 dv_demuxer"
883
libdc1394_demuxer_deps="libdc1394"
884
libnut_demuxer_deps="libnut"
885
libnut_muxer_deps="libnut"
886
mp3_demuxer_deps="mpegaudio_parser"
887
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
888
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
889
redir_demuxer_deps="network"
890
rtp_muxer_deps="network rtp_protocol"
891
rtsp_demuxer_deps="sdp_demuxer"
892
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
893
v4l_demuxer_deps="linux_videodev_h"
894
v4l2_demuxer_deps="linux_videodev2_h"
895
vfwcap_demuxer_deps="capCreateCaptureWindow"
896
vfwcap_demuxer_extralibs="-lvfw32"
897
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
898
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
899

    
900
# protocols
901
http_protocol_deps="network"
902
rtp_protocol_deps="udp_protocol"
903
tcp_protocol_deps="network"
904
udp_protocol_deps="network"
905

    
906
# filters
907
movie_filter_deps="avfilter_lavf"
908

    
909
# programs
910
ffplay_deps="sdl"
911
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
912
ffserver_extralibs='$ldl'
913
vhook_extralibs='$ldl'
914

    
915

    
916
# default parameters
917

    
918
logfile="config.err"
919

    
920
# installation paths
921
prefix_default="/usr/local"
922
bindir_default='${prefix}/bin'
923
incdir_default='${prefix}/include'
924
libdir_default='${prefix}/lib'
925
mandir_default='${prefix}/share/man'
926
shlibdir_default="$libdir_default"
927

    
928
# toolchain
929
cc="gcc"
930
ar="ar"
931
nm="nm"
932
ranlib="ranlib"
933
strip="strip"
934
asmalign_pot="unknown"
935
ln_s="ln -sf"
936

    
937
# machine
938
arch=`uname -m`
939
cpu="generic"
940

    
941
# OS
942
target_os=$(tolower $(uname -s))
943

    
944
# libraries
945
enable bzlib
946
enable zlib
947

    
948
# configurable options
949
enable debug
950
enable ffmpeg
951
enable ffplay
952
enable ffserver
953
enable ipv6
954
enable mpegaudio_hp
955
enable network
956
enable optimizations
957
enable protocols
958
enable static
959
enable stripping
960
vhook="default"
961

    
962
# build settings
963
SHFLAGS='-shared -Wl,-soname,$$(@F)'
964
VHOOKSHFLAGS='$(SHFLAGS)'
965
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
966
FFSERVERLDFLAGS=-Wl,-E
967
LIBPREF="lib"
968
LIBSUF=".a"
969
FULLNAME='$(NAME)$(BUILDSUF)'
970
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
971
SLIBPREF="lib"
972
SLIBSUF=".so"
973
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
974
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
975
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
976
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
977

    
978
# gcc stupidly only outputs the basename of targets with -MM
979
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
980

    
981
# find source path
982
source_path="`dirname \"$0\"`"
983
enable source_path_used
984
if test -z "$source_path" -o "$source_path" = "." ; then
985
    source_path="`pwd`"
986
    disable source_path_used
987
else
988
    source_path="`cd \"$source_path\"; pwd`"
989
    echo "$source_path" | grep -q '[[:blank:]]' &&
990
        die "Out of tree builds are impossible with whitespace in source path."
991
fi
992

    
993
FFMPEG_CONFIGURATION="$@"
994

    
995
find_things(){
996
    thing=$1
997
    pattern=$2
998
    file=$source_path/$3
999
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1000
}
1001

    
1002
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1003
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1004
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1005
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1006
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1007
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1008
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1009
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1010
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1011
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1012

    
1013
enable $ARCH_EXT_LIST \
1014
       $DECODER_LIST \
1015
       $ENCODER_LIST \
1016
       $PARSER_LIST \
1017
       $BSF_LIST \
1018
       $DEMUXER_LIST \
1019
       $MUXER_LIST \
1020
       $FILTER_LIST \
1021
       $PROTOCOL_LIST \
1022
       $INDEV_LIST \
1023
       $OUTDEV_LIST \
1024

    
1025
die_unknown(){
1026
    echo "Unknown option \"$1\"."
1027
    echo "See $0 --help for available options."
1028
    exit 1
1029
}
1030

    
1031
show_list() {
1032
    suffix=_$1
1033
    shift
1034
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1035
    exit 0
1036
}
1037

    
1038
for opt do
1039
    optval="${opt#*=}"
1040
    case "$opt" in
1041
    --extra-cflags=*) add_cflags "$optval"
1042
    ;;
1043
    --extra-ldflags=*) add_ldflags "$optval"
1044
    ;;
1045
    --extra-libs=*) add_extralibs "$optval"
1046
    ;;
1047
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1048
    ;;
1049
    --enable-debug=*) debuglevel="$optval"
1050
    ;;
1051
    --enable-*=*|--disable-*=*)
1052
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1053
    case "$thing" in
1054
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1055
        *) die_unknown "$opt" ;;
1056
    esac
1057
    ;;
1058
    --enable-?*|--disable-?*)
1059
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1060
    if is_in $option $COMPONENT_LIST; then
1061
        eval $action \$$(toupper ${option%s})_LIST
1062
    elif is_in $option $CMDLINE_SELECT; then
1063
        $action $option
1064
    else
1065
        die_unknown $opt
1066
    fi
1067
    ;;
1068
    --list-*)
1069
        NAME="${opt#--list-}"
1070
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1071
        NAME=${NAME%s}
1072
        eval show_list $NAME \$$(toupper $NAME)_LIST
1073
    ;;
1074
    --help|-h) show_help
1075
    ;;
1076
    *)
1077
    optname="${opt%=*}"
1078
    optname="${optname#--}"
1079
    optname=$(echo "$optname" | sed 's/-/_/g')
1080
    is_in $optname $CMDLINE_SET || die_unknown $opt
1081
    eval $optname='$optval'
1082
    ;;
1083
    esac
1084
done
1085

    
1086
disabled logging && logfile=/dev/null
1087

    
1088
echo "# $0 $@" > $logfile
1089
set >> $logfile
1090

    
1091
cc="${cross_prefix}${cc}"
1092
ar="${cross_prefix}${ar}"
1093
nm="${cross_prefix}${nm}"
1094
ranlib="${cross_prefix}${ranlib}"
1095
strip="${cross_prefix}${strip}"
1096

    
1097
# set temporary file name
1098
if test ! -z "$TMPDIR" ; then
1099
    TMPDIR1="${TMPDIR}"
1100
elif test ! -z "$TEMPDIR" ; then
1101
    TMPDIR1="${TEMPDIR}"
1102
else
1103
    TMPDIR1="/tmp"
1104
fi
1105

    
1106
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1107
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1108
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1109
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1110
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1111
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1112

    
1113
case "$arch" in
1114
    i386|i486|i586|i686|i86pc|BePC)
1115
        arch="x86_32"
1116
        enable fast_unaligned
1117
    ;;
1118
    x86_64|amd64)
1119
        arch="x86_32"
1120
        enable fast_unaligned
1121
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1122
        int test[sizeof(char*) - 7];
1123
EOF
1124
    ;;
1125
    # armv4l is a subset of armv[567]*l
1126
    arm|armv[4567]*l)
1127
        arch="armv4l"
1128
    ;;
1129
    alpha)
1130
        arch="alpha"
1131
        enable fast_64bit
1132
    ;;
1133
    "Power Macintosh"|ppc|powerpc)
1134
        arch="powerpc"
1135
    ;;
1136
    ppc64)
1137
        arch="powerpc"
1138
        enable fast_64bit
1139
    ;;
1140
    mips|mipsel|IP*)
1141
        arch="mips"
1142
    ;;
1143
    sun4u|sparc64)
1144
        arch="sparc64"
1145
        enable fast_64bit
1146
    ;;
1147
    sparc)
1148
        arch="sparc"
1149
    ;;
1150
    sh4)
1151
        arch="sh4"
1152
    ;;
1153
    parisc)
1154
        arch="parisc"
1155
    ;;
1156
    parisc64)
1157
        arch="parisc"
1158
        enable fast_64bit
1159
    ;;
1160
    s390|s390x)
1161
        arch="s390"
1162
    ;;
1163
    m68k)
1164
        arch="m68k"
1165
    ;;
1166
    ia64)
1167
        arch="ia64"
1168
        enable fast_64bit
1169
    ;;
1170
    bfin)
1171
        arch="bfin"
1172
    ;;
1173
    *)
1174
        arch="unknown"
1175
    ;;
1176
esac
1177

    
1178
enable $arch
1179
enabled_any x86_32 x86_64 && enable x86
1180
enabled     sparc64       && enable sparc
1181

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

    
1331
    *)
1332
        target_os="${target_os}-UNKNOWN"
1333
        ;;
1334
esac
1335

    
1336
set_default $PATHS_LIST
1337

    
1338
add_extralibs $osextralibs
1339

    
1340
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1341
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1342

    
1343
test -n "$cross_prefix" && enable cross_compile
1344

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

    
1356
disabled static && LIBNAME=""
1357

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

    
1373

    
1374
if ! enabled gpl; then
1375
    die_gpl_disabled(){
1376
        name=$1
1377
        shift
1378
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1379
    }
1380
    die_gpl_disabled "The Postprocessing code" postproc
1381
    die_gpl_disabled "liba52"                  liba52
1382
    die_gpl_disabled "libx264"                 libx264
1383
    die_gpl_disabled "libxvidcore"             libxvid
1384
    die_gpl_disabled "FAAD2"                   libfaad2
1385
    die_gpl_disabled "The X11 grabber"         x11grab
1386
    die_gpl_disabled "The software scaler"     swscale
1387
fi
1388

    
1389
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1390
    die "libamr is nonfree and --enable-nonfree is not specified."
1391
fi
1392

    
1393
check_deps $ARCH_EXT_LIST
1394

    
1395
test -z "$need_memalign" && need_memalign="$mmx"
1396

    
1397
#Darwin CC versions
1398
if test $target_os = darwin; then
1399
    if $cc -v 2>&1 | grep -q xlc; then
1400
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1401
    else
1402
        add_cflags "-pipe"
1403
        check_cflags "-force_cpusubtype_ALL"
1404
        check_cflags "-Wno-sign-compare"
1405
        enabled shared || check_cflags -mdynamic-no-pic
1406
    fi
1407
fi
1408

    
1409
disabled optimizations || check_cflags -fomit-frame-pointer
1410

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

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

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

    
1508
check_cc <<EOF || die "Symbol mangling check failed."
1509
int ff_extern;
1510
EOF
1511
sym=$($nm -P -g $TMPO | grep ff_extern)
1512
extern_prefix=${sym%%ff_extern*}
1513

    
1514
check_asm inline_asm '""'
1515

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

    
1529
    # check wether EBX is available on x86
1530
    check_asm ebx_available '"":::"%ebx"'
1531

    
1532
    # check whether binutils is new enough to compile SSSE3/MMX2
1533
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1534
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1535

    
1536
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1537
fi
1538

    
1539
# check for assembler specific support
1540

    
1541
if test $arch = "powerpc"; then
1542
check_cc <<EOF && enable dcbzl
1543
int main(void) {
1544
    register long zero = 0;
1545
    char data[1024];
1546
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1547
return 0;
1548
}
1549
EOF
1550
fi
1551

    
1552
# check for SIMD availability
1553

    
1554
# AltiVec flags: The FSF version of GCC differs from the Apple version
1555
if enabled altivec; then
1556
    check_cflags -maltivec -mabi=altivec &&
1557
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1558
        check_cflags -faltivec
1559

    
1560
    # check if our compiler supports Motorola AltiVec C API
1561
    check_cc <<EOF || disable altivec
1562
$inc_altivec_h
1563
int main(void) {
1564
    vector signed int v1, v2, v3;
1565
    v1 = vec_add(v2,v3);
1566
    return 0;
1567
}
1568
EOF
1569

    
1570
    # check if our compiler supports braces for vector declarations
1571
    check_cc <<EOF && enable altivec_vector_braces
1572
$inc_altivec_h
1573
#define AVV(x...) {x}
1574
int main (void) { (vector int) AVV(1); return 0; }
1575
EOF
1576
fi
1577

    
1578
# We have to check if pld is a nop and disable it.
1579
enabled armv4l  && check_asm pld     '"pld [r0]"'
1580
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1581
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1582
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1583
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1584
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1585
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1586
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1587

    
1588
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1589

    
1590
# ---
1591
# big/little-endian test
1592
check_cc <<EOF || die "endian test failed"
1593
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1594
EOF
1595
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1596

    
1597
# ---
1598
# check availability of some header files
1599

    
1600
if check_func dlopen; then
1601
    ldl=
1602
elif check_func dlopen -ldl; then
1603
    ldl=-ldl
1604
fi
1605

    
1606
check_func  fork
1607
check_func  gethrtime
1608
check_func  getrusage
1609
check_func  inet_aton $network_extralibs
1610
check_func  memalign
1611
check_func  mkstemp
1612
check_func2 windows.h GetProcessTimes
1613

    
1614
check_header byteswap.h
1615
check_header conio.h
1616
check_header dlfcn.h
1617
check_header malloc.h
1618
check_header sys/mman.h
1619
check_header sys/resource.h
1620
check_header termios.h
1621

    
1622
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1623
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1624
fi
1625

    
1626
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1627
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1628

    
1629
# ffserver uses poll(),
1630
# if it's not found we can emulate it using select().
1631
if enabled ffserver; then
1632
    check_header poll.h
1633
    check_header sys/select.h
1634
fi
1635

    
1636
# check for some common methods of building with pthread support
1637
# do this before the optional library checks as some of them require pthreads
1638
if enabled pthreads; then
1639
    if check_func pthread_create; then
1640
        :
1641
    elif check_func pthread_create -pthread; then
1642
        add_cflags -pthread
1643
        add_extralibs -pthread
1644
    elif check_func pthread_create -pthreads; then
1645
        add_cflags -pthreads
1646
        add_extralibs -pthreads
1647
    elif check_func pthread_create -lpthreadGC2; then
1648
        add_extralibs -lpthreadGC2
1649
    elif ! check_lib pthread.h pthread_create -lpthread; then
1650
        die "ERROR: can't find pthreads library"
1651
    fi
1652
fi
1653

    
1654
for thread in $THREADS_LIST; do
1655
    if enabled $thread; then
1656
        test -n "$thread_type" &&
1657
            die "ERROR: Only one thread type must be selected." ||
1658
            thread_type="$thread"
1659
    fi
1660
done
1661

    
1662
check_lib math.h sin -lm
1663

    
1664
# test for C99 functions in math.h
1665
for func in llrint lrint lrintf round roundf; do
1666
    check_exec <<EOF && enable $func || disable $func
1667
#define _ISOC9X_SOURCE  1
1668
#include <math.h>
1669
int main(void) { return ($func(3.999f) > 0)?0:1; }
1670
EOF
1671
done
1672

    
1673
# these are off by default, so fail if requested and not available
1674
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1675
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1676
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1677
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1678
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1679
                   && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1680
                   && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1681
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1682
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1683
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1684
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1685
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1686
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1687
                        && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1688
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1689
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1690
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1691
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1692
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1693

    
1694
# libdc1394 check
1695
if enabled libdc1394; then
1696
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1697
        enable libdc1394_2; } ||
1698
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1699
        enable libdc1394_1; } ||
1700
    die "ERROR: No version of libdc1394 found "
1701
fi
1702

    
1703

    
1704
_restrict=
1705
for restrict_keyword in restrict __restrict__ __restrict; do
1706
    check_cc <<EOF && _restrict=$restrict_keyword && break
1707
void foo(char * $restrict_keyword p);
1708
EOF
1709
done
1710

    
1711
test "$vhook" = "default" && vhook="$dlopen"
1712

    
1713
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1714
    disable vhook
1715
    echo
1716
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1717
    echo "Patches welcome."
1718
    echo
1719
fi
1720

    
1721
if enabled vhook; then
1722
    check_ldflags -rdynamic
1723
    check_ldflags -export-dynamic
1724
fi
1725

    
1726
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1727
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1728

    
1729
##########################################
1730
# SDL check
1731

    
1732
disable sdl_too_old
1733
disable sdl
1734
SDL_CONFIG="${cross_prefix}sdl-config"
1735
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1736
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1737
    temp_cflags $sdl_cflags
1738
    temp_extralibs `"${SDL_CONFIG}" --libs`
1739
    if check_lib2 SDL.h SDL_Init; then
1740
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1741
        if test "$_sdlversion" -lt 121 ; then
1742
            enable sdl_too_old
1743
        else
1744
            enable sdl
1745
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1746
#include <SDL.h>
1747
int main(int argc, char **argv){
1748
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1749
    int w = vi->current_w;
1750
    return 0;
1751
}
1752
EOF
1753
        fi
1754
    fi
1755
    restore_flags
1756
fi
1757

    
1758
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1759

    
1760
check_type sys/socket.h socklen_t
1761

    
1762
##########################################
1763
# Network check
1764

    
1765
if enabled network; then
1766
    # Prefer arpa/inet.h over winsock2
1767
    if check_header arpa/inet.h ; then
1768
        check_func closesocket
1769
    elif check_header winsock2.h ; then
1770
        network_extralibs="-lws2_32"
1771
        check_type ws2tcpip.h socklen_t
1772
        check_func2 winsock2.h closesocket
1773
    fi
1774
fi
1775

    
1776
##########################################
1777
# IPv6 check
1778

    
1779
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1780
#include <sys/types.h>
1781
#include <sys/socket.h>
1782
#include <netinet/in.h>
1783
#include <netdb.h>
1784
int main(void) {
1785
    struct sockaddr_storage saddr;
1786
    struct ipv6_mreq mreq6;
1787
    getaddrinfo(0,0,0,0);
1788
    getnameinfo(0,0,0,0,0,0,0);
1789
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1790
}
1791
EOF
1792

    
1793
check_header linux/videodev.h
1794
check_header linux/videodev2.h
1795

    
1796
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1797

    
1798
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1799
{ check_header dev/bktr/ioctl_meteor.h &&
1800
  check_header dev/bktr/ioctl_bt848.h; } ||
1801
{ check_header machine/ioctl_meteor.h &&
1802
  check_header machine/ioctl_bt848.h; } ||
1803
{ check_header dev/video/meteor/ioctl_meteor.h &&
1804
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1805
check_header dev/ic/bt8xx.h
1806

    
1807
check_header sys/soundcard.h
1808
check_header soundcard.h
1809

    
1810
# deal with the X11 frame grabber
1811
enabled x11grab                         &&
1812
check_header X11/Xlib.h                 &&
1813
check_header X11/extensions/XShm.h      &&
1814
check_func XOpenDisplay -lX11           &&
1815
check_func XShmCreateImage -lX11 -lXext
1816

    
1817
enabled debug && add_cflags -g"$debuglevel"
1818

    
1819
# add some useful compiler flags if supported
1820
check_cflags -Wdeclaration-after-statement
1821
check_cflags -Wall
1822
check_cflags -Wno-switch
1823
check_cflags -Wdisabled-optimization
1824
check_cflags -Wpointer-arith
1825
check_cflags -Wredundant-decls
1826
check_cflags -Wno-pointer-sign
1827
check_cflags -Wcast-qual
1828
check_cflags -Wwrite-strings
1829
check_cflags -Wtype-limits
1830
enabled extra_warnings && check_cflags -Winline
1831

    
1832
# add some linker flags
1833
check_ldflags -Wl,--warn-common
1834
check_ldflags $LDLATEFLAGS
1835
check_ldflags -Wl,-Bsymbolic
1836

    
1837
if enabled small; then
1838
    check_cflags -Os            # not all compilers support -Os
1839
    optimizations="small"
1840
elif enabled optimizations; then
1841
    if $cc -v 2>&1 | grep -q xlc; then
1842
        add_cflags  "-O5"
1843
        add_ldflags "-O5"
1844
    else
1845
        add_cflags "-O3"
1846
    fi
1847
fi
1848
check_cflags -fno-math-errno
1849
check_cflags -fno-signed-zeros
1850

    
1851
# add some flags for Intel C Compiler
1852
if $cc --version | grep -q Intel; then
1853
  # Just warnings, no remarks
1854
  check_cflags -w1
1855
  # -wd: Disable following warnings
1856
  # 144, 167, 556: -Wno-pointer-sign
1857
  # 10006: ignoring unknown option -fno-signed-zeros
1858
  # 10156: ignoring option '-W'; no argument required
1859
  check_cflags -wd144,167,556,10006,10156
1860
  # 11030: Warning unknown option --as-needed
1861
  # 10156: ignoring option '-export'; no argument required
1862
  check_ldflags -wd10156,11030
1863
  # Allow to compile with optimizations
1864
  check_ldflags -march=$cpu
1865
fi
1866

    
1867
# PIC flags for shared library objects where they are needed
1868
if enabled shared; then
1869
    # LIBOBJFLAGS may have already been set in the OS configuration
1870
    if test -z "$LIBOBJFLAGS" ; then
1871
        case "$arch" in
1872
            x86_64|ia64|alpha|sparc*|power*|parisc*) LIBOBJFLAGS='$(PIC)' ;;
1873
        esac
1874
    fi
1875
fi
1876

    
1877
if enabled gprof; then
1878
    add_cflags  "-p"
1879
    add_ldflags "-p"
1880
fi
1881

    
1882
VHOOKCFLAGS="-fPIC"
1883

    
1884
# Find out if the .align argument is a power of two or not.
1885
if test $asmalign_pot = "unknown"; then
1886
    disable asmalign_pot
1887
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1888
fi
1889

    
1890
enabled_any $DECODER_LIST      && enable decoders
1891
enabled_any $ENCODER_LIST      && enable encoders
1892
enabled_any $BSF_LIST          && enable bsfs
1893
enabled_any $DEMUXER_LIST      && enable demuxers
1894
enabled_any $MUXER_LIST        && enable muxers
1895
enabled_any $FILTER_LIST       && enable filters
1896
enabled_any $INDEV_LIST        && enable demuxers
1897
enabled_any $OUTDEV_LIST       && enable muxers
1898
enabled_any $PROTOCOL_LIST     && enable protocols
1899

    
1900
enabled_any $THREADS_LIST      && enable threads
1901

    
1902
check_deps $CONFIG_LIST       \
1903
           $HAVE_LIST         \
1904
           $DECODER_LIST      \
1905
           $ENCODER_LIST      \
1906
           $PARSER_LIST       \
1907
           $BSF_LIST          \
1908
           $DEMUXER_LIST      \
1909
           $MUXER_LIST        \
1910
           $FILTER_LIST       \
1911
           $INDEV_LIST        \
1912
           $OUTDEV_LIST       \
1913
           $PROTOCOL_LIST     \
1914

    
1915
enabled libdc1394 && append pkg_requires "libraw1394"
1916
enabled libdirac  && append pkg_requires "dirac"
1917
enabled libtheora && append pkg_requires "theora"
1918
enabled libvorbis && append pkg_requires "vorbisenc"
1919

    
1920
echo "install prefix            $prefix"
1921
echo "source path               $source_path"
1922
echo "C compiler                $cc"
1923
echo ".align is power-of-two    $asmalign_pot"
1924
echo "ARCH                      $arch ($cpu)"
1925
if test "$build_suffix" != ""; then
1926
    echo "build suffix              $build_suffix"
1927
fi
1928
echo "big-endian                ${bigendian-no}"
1929
if test $arch = "x86_32" -o $arch = "x86_64"; then
1930
    echo "MMX enabled               ${mmx-no}"
1931
    echo "CMOV enabled              ${cmov-no}"
1932
    echo "CMOV is fast              ${fast_cmov-no}"
1933
    echo "EBX available             ${ebx_available-no}"
1934
    echo "EBP available             ${ebp_available-no}"
1935
fi
1936
if test $arch = "armv4l"; then
1937
    echo "ARMv5TE enabled           ${armv5te-no}"
1938
    echo "ARMv6 enabled             ${armv6-no}"
1939
    echo "ARM VFP enabled           ${armvfp-no}"
1940
    echo "IWMMXT enabled            ${iwmmxt-no}"
1941
    echo "NEON enabled              ${neon-no}"
1942
fi
1943
if test $arch = "mips"; then
1944
    echo "MMI enabled               ${mmi-no}"
1945
fi
1946
if test $arch = "powerpc"; then
1947
    echo "AltiVec enabled           ${altivec-no}"
1948
    echo "dcbzl available           ${dcbzl-no}"
1949
fi
1950
echo "gprof enabled             ${gprof-no}"
1951
echo "debug symbols             ${debug-no}"
1952
echo "strip symbols             ${stripping-no}"
1953
echo "optimizations             ${optimizations-no}"
1954
echo "static                    ${static-no}"
1955
echo "shared                    ${shared-no}"
1956
echo "postprocessing support    ${postproc-no}"
1957
echo "software scaler enabled   ${swscale-no}"
1958
echo "new filter support        ${avfilter-no}"
1959
echo "filters using lavformat   ${avfilter_lavf-no}"
1960
echo "video hooking             ${vhook-no}"
1961
if enabled vhook; then
1962
    echo "Imlib2 support            ${imlib2-no}"
1963
    echo "FreeType support          ${freetype2-no}"
1964
fi
1965
echo "network support           ${network-no}"
1966
if enabled network; then
1967
    echo "IPv6 support              ${ipv6-no}"
1968
fi
1969
echo "threading support         ${thread_type-no}"
1970
echo "SDL support               ${sdl-no}"
1971
if enabled sdl_too_old; then
1972
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1973
fi
1974
echo "Sun medialib support      ${mlib-no}"
1975
echo "AVISynth enabled          ${avisynth-no}"
1976
echo "liba52 support            ${liba52-no}"
1977
echo "liba52 dlopened           ${liba52bin-no}"
1978
echo "libamr-nb support         ${libamr_nb-no}"
1979
echo "libamr-wb support         ${libamr_wb-no}"
1980
echo "libdc1394 support         ${libdc1394-no}"
1981
echo "libdirac enabled          ${libdirac-no}"
1982
echo "libfaac enabled           ${libfaac-no}"
1983
echo "libfaad enabled           ${libfaad-no}"
1984
echo "libfaad dlopened          ${libfaadbin-no}"
1985
echo "libgsm enabled            ${libgsm-no}"
1986
echo "libmp3lame enabled        ${libmp3lame-no}"
1987
echo "libnut enabled            ${libnut-no}"
1988
echo "libschroedinger enabled   ${libschroedinger-no}"
1989
echo "libtheora enabled         ${libtheora-no}"
1990
echo "libvorbis enabled         ${libvorbis-no}"
1991
echo "libx264 enabled           ${libx264-no}"
1992
echo "libxvid enabled           ${libxvid-no}"
1993
echo "zlib enabled              ${zlib-no}"
1994
echo "bzlib enabled             ${bzlib-no}"
1995
echo
1996

    
1997
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1998
    echo "Enabled ${type}s:"
1999
    eval list=\$$(toupper $type)_LIST
2000
    for part in $list; do
2001
        enabled $part && echo ${part%_*}
2002
    done | sort | pr -3 -t
2003
    echo
2004
done
2005

    
2006
license="LGPL"
2007
if enabled nonfree; then
2008
    license="unredistributable"
2009
elif enabled gpl; then
2010
    license="GPL"
2011
fi
2012

    
2013
echo "License: $license"
2014

    
2015
echo "Creating config.mak and config.h..."
2016

    
2017
echo "# Automatically generated by configure - do not modify!" > config.mak
2018
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2019
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2020
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2021
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2022

    
2023
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2024
echo "prefix=$prefix" >> config.mak
2025
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2026
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2027
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2028
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2029
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2030
echo "CC=$cc" >> config.mak
2031
echo "AR=$ar" >> config.mak
2032
echo "RANLIB=$ranlib" >> config.mak
2033
echo "LN_S=$ln_s" >> config.mak
2034
enabled stripping &&
2035
    echo "STRIP=$strip" >> config.mak ||
2036
    echo "STRIP=echo ignoring strip" >> config.mak
2037

    
2038
echo "OPTFLAGS=$CFLAGS" >> config.mak
2039
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2040
echo "LDFLAGS=$LDFLAGS" >> config.mak
2041
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2042
echo "SHFLAGS=$SHFLAGS" >> config.mak
2043
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2044
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2045
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2046
echo "BUILD_STATIC=$static" >> config.mak
2047
echo "BUILDSUF=$build_suffix" >> config.mak
2048
echo "FULLNAME=$FULLNAME" >> config.mak
2049
echo "LIBPREF=$LIBPREF" >> config.mak
2050
echo "LIBSUF=$LIBSUF" >> config.mak
2051
echo "LIBNAME=$LIBNAME" >> config.mak
2052
echo "SLIBPREF=$SLIBPREF" >> config.mak
2053
echo "SLIBSUF=$SLIBSUF" >> config.mak
2054
echo "EXESUF=$EXESUF" >> config.mak
2055
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2056

    
2057
if enabled bigendian; then
2058
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2059
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2060
fi
2061

    
2062
if enabled sdl; then
2063
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2064
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2065
fi
2066
if enabled texi2html; then
2067
    echo "BUILD_DOC=yes" >> config.mak
2068
fi
2069

    
2070
get_version(){
2071
    name=$1
2072
    file=$source_path/$2
2073
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2074
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2075
    lcname=$(tolower $name)
2076
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2077
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2078
}
2079

    
2080
get_version LIBSWSCALE  libswscale/swscale.h
2081
get_version LIBPOSTPROC libpostproc/postprocess.h
2082
get_version LIBAVCODEC  libavcodec/avcodec.h
2083
get_version LIBAVDEVICE libavdevice/avdevice.h
2084
get_version LIBAVFORMAT libavformat/avformat.h
2085
get_version LIBAVUTIL   libavutil/avutil.h
2086
get_version LIBAVFILTER libavfilter/avfilter.h
2087

    
2088
if enabled shared; then
2089
    echo "BUILD_SHARED=yes" >> config.mak
2090
    echo "PIC=-fPIC -DPIC" >> config.mak
2091
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2092
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2093
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2094
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2095
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2096
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2097
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2098
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2099
fi
2100
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2101
echo "EXTRALIBS=$extralibs" >> config.mak
2102

    
2103
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2104
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2105
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2106
                                      $DECODER_LIST      \
2107
                                      $ENCODER_LIST      \
2108
                                      $PARSER_LIST       \
2109
                                      $BSF_LIST          \
2110
                                      $DEMUXER_LIST      \
2111
                                      $MUXER_LIST        \
2112
                                      $FILTER_LIST       \
2113
                                      $PROTOCOL_LIST     \
2114
                                      $INDEV_LIST        \
2115
                                      $OUTDEV_LIST       \
2116

    
2117
echo "#define restrict $_restrict" >> $TMPH
2118

    
2119
if enabled small; then
2120
    echo "#define av_always_inline"  >> $TMPH
2121
fi
2122

    
2123
echo "SRC_PATH=\"$source_path\"" >> config.mak
2124
echo "SRC_PATH_BARE=$source_path" >> config.mak
2125
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2126

    
2127
# Apparently it's not possible to portably echo a backslash.
2128
enabled asmalign_pot &&
2129
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2130
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2131

    
2132
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2133

    
2134
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2135

    
2136
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2137
cmp -s $TMPH config.h &&
2138
    echo "config.h is unchanged" ||
2139
    mv -f $TMPH config.h
2140

    
2141
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2142

    
2143
# build tree in object directory if source path is different from current one
2144
if enabled source_path_used; then
2145
    DIRS="\
2146
        doc               \
2147
        libavcodec        \
2148
        libavcodec/alpha  \
2149
        libavcodec/armv4l \
2150
        libavcodec/bfin   \
2151
        libavcodec/i386   \
2152
        libavcodec/mlib   \
2153
        libavcodec/ppc    \
2154
        libavcodec/sh4    \
2155
        libavcodec/sparc  \
2156
        libavdevice       \
2157
        libavfilter       \
2158
        libavformat       \
2159
        libavutil         \
2160
        libpostproc       \
2161
        libswscale        \
2162
        tests             \
2163
        tools             \
2164
        vhook             \
2165
        "
2166
    FILES="\
2167
        Makefile             \
2168
        common.mak           \
2169
        subdir.mak           \
2170
        doc/texi2pod.pl      \
2171
        libavcodec/Makefile  \
2172
        libavdevice/Makefile \
2173
        libavfilter/Makefile \
2174
        libavformat/Makefile \
2175
        libavutil/Makefile   \
2176
        libpostproc/Makefile \
2177
        libswscale/Makefile  \
2178
        "
2179
    for dir in $DIRS ; do
2180
        mkdir -p $dir
2181
    done
2182
    for f in $FILES ; do
2183
        $ln_s "$source_path/$f" $f
2184
    done
2185
fi
2186

    
2187

    
2188
# build pkg-config files
2189

    
2190
pkgconfig_generate(){
2191
name=$1
2192
shortname=${name#lib}
2193
comment=$2
2194
version=$3
2195
libs=$4
2196
requires=$5
2197
cat <<EOF > $name/$name.pc
2198
prefix=$prefix
2199
exec_prefix=\${prefix}
2200
libdir=$libdir
2201
includedir=$incdir
2202

    
2203
Name: $name
2204
Description: $comment
2205
Version: $version
2206
Requires: $(disabled shared && echo $requires)
2207
Requires.private: $(enabled shared && echo $requires)
2208
Conflicts:
2209
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2210
Libs.private: $(enabled shared && echo $libs)
2211
Cflags: -I\${includedir}
2212
EOF
2213
cat <<EOF > $name/$name-uninstalled.pc
2214
prefix=
2215
exec_prefix=
2216
libdir=\${pcfiledir}
2217
includedir=\${pcfiledir}/..
2218

    
2219
Name: $name
2220
Description: $comment
2221
Version: $version
2222
Requires: $requires
2223
Conflicts:
2224
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2225
Cflags: -I\${includedir}
2226
EOF
2227
}
2228

    
2229
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2230
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2231
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2232
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2233
enabled avfilter &&
2234
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2235
enabled postproc &&
2236
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2237
if enabled swscale; then
2238
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2239
else
2240
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2241
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2242
fi