Statistics
| Branch: | Revision:

ffmpeg / configure @ 80a61f08

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-mpegaudio-hp   faster (but less accurate)"
139
  echo "                           MPEG audio decoding [default=no]"
140
  echo "  --enable-gray            enable full grayscale support (slower color)"
141
  echo "  --disable-ffmpeg         disable ffmpeg build"
142
  echo "  --disable-ffserver       disable ffserver build"
143
  echo "  --disable-ffplay         disable ffplay build"
144
  echo "  --enable-small           optimize for size instead of speed"
145
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
146
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
147
  echo "  --disable-encoder=NAME   disables encoder NAME"
148
  echo "  --enable-encoder=NAME    enables encoder NAME"
149
  echo "  --disable-decoder=NAME   disables decoder NAME"
150
  echo "  --enable-decoder=NAME    enables decoder NAME"
151
  echo "  --disable-encoders       disables all encoders"
152
  echo "  --disable-decoders       disables all decoders"
153
  echo "  --disable-muxer=NAME     disables muxer NAME"
154
  echo "  --enable-muxer=NAME      enables muxer NAME"
155
  echo "  --disable-muxers         disables all muxers"
156
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
157
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
158
  echo "  --disable-demuxers       disables all demuxers"
159
  echo "  --enable-parser=NAME     enables parser NAME"
160
  echo "  --disable-parser=NAME    disables parser NAME"
161
  echo "  --disable-parsers        disables all parsers"
162
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
163
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
164
  echo "  --disable-bsfs           disables all bitstream filters"
165
  echo "  --enable-protocol=NAME   enables protocol NAME"
166
  echo "  --disable-protocol=NAME  disables protocol NAME"
167
  echo "  --disable-protocols      disables all protocols"
168
  echo "  --disable-devices        disables all devices"
169
  echo "  --list-decoders          show all available decoders"
170
  echo "  --list-encoders          show all available encoders"
171
  echo "  --list-muxers            show all available muxers"
172
  echo "  --list-demuxers          show all available demuxers"
173
  echo "  --list-parsers           show all available parsers"
174
  echo "  --list-protocols         show all available protocols"
175
  echo "  --list-bsfs              show all available bitstream filters"
176
  echo "  --list-indevs            show all available input devices"
177
  echo "  --list-outdevs           show all available output devices"
178
  echo
179
  echo "Developer options (useful when working on FFmpeg itself):"
180
  echo "  --disable-debug          disable debugging symbols"
181
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
182
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
183
  echo "  --disable-optimizations  disable compiler optimizations"
184
  echo "  --enable-extra-warnings  enable more compiler warnings"
185
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
186
  echo ""
187
  echo "NOTE: Object files are built at the place where configure is launched."
188
  exit 1
189
}
190

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
724
HAVE_LIST="
725
    $ARCH_EXT_LIST
726
    $THREADS_LIST
727
    altivec_h
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
FFSERVERLDFLAGS=-Wl,-E
966
LIBPREF="lib"
967
LIBSUF=".a"
968
FULLNAME='$(NAME)$(BUILDSUF)'
969
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
970
SLIBPREF="lib"
971
SLIBSUF=".so"
972
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
973
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
974
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
975
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
976

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

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

    
992
FFMPEG_CONFIGURATION="$@"
993

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1329
    *)
1330
        target_os="${target_os}-UNKNOWN"
1331
        ;;
1332
esac
1333

    
1334
set_default $PATHS_LIST
1335

    
1336
add_extralibs $osextralibs
1337

    
1338
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1339
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1340

    
1341
test -n "$cross_prefix" && enable cross_compile
1342

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

    
1354
disabled static && LIBNAME=""
1355

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

    
1371

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

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

    
1391
check_deps $ARCH_EXT_LIST
1392

    
1393
test -z "$need_memalign" && need_memalign="$mmx"
1394

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

    
1407
disabled optimizations || check_cflags -fomit-frame-pointer
1408

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

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

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

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

    
1512
check_asm inline_asm '""'
1513

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

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

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

    
1534
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1535
fi
1536

    
1537
# check for assembler specific support
1538

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

    
1550
# check for SIMD availability
1551

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

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

    
1568
    # check if our compiler supports braces for vector declarations
1569
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1570
$inc_altivec_h
1571
int main (void) { (vector int) {1}; return 0; }
1572
EOF
1573
fi
1574

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

    
1585
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1586

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

    
1594
# ---
1595
# check availability of some header files
1596

    
1597
if check_func dlopen; then
1598
    ldl=
1599
elif check_func dlopen -ldl; then
1600
    ldl=-ldl
1601
fi
1602

    
1603
check_func  fork
1604
check_func  gethrtime
1605
check_func  getrusage
1606
check_func  inet_aton $network_extralibs
1607
check_func  memalign
1608
check_func  mkstemp
1609
check_func2 windows.h GetProcessTimes
1610

    
1611
check_header byteswap.h
1612
check_header conio.h
1613
check_header dlfcn.h
1614
check_header malloc.h
1615
check_header sys/mman.h
1616
check_header sys/resource.h
1617
check_header termios.h
1618

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

    
1623
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1624
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1625

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

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

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

    
1659
check_lib math.h sin -lm
1660

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

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

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

    
1700

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

    
1708
test "$vhook" = "default" && vhook="$dlopen"
1709

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

    
1718
if enabled vhook; then
1719
    check_ldflags -rdynamic
1720
    check_ldflags -export-dynamic
1721
fi
1722

    
1723
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1724
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1725

    
1726
##########################################
1727
# SDL check
1728

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

    
1755
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1756

    
1757
check_type sys/socket.h socklen_t
1758

    
1759
##########################################
1760
# Network check
1761

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

    
1773
##########################################
1774
# IPv6 check
1775

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

    
1790
check_header linux/videodev.h
1791
check_header linux/videodev2.h
1792

    
1793
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1794

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

    
1804
check_header sys/soundcard.h
1805
check_header soundcard.h
1806

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

    
1814
enabled debug && add_cflags -g"$debuglevel"
1815

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

    
1829
# add some linker flags
1830
check_ldflags -Wl,--warn-common
1831
check_ldflags -Wl,--as-needed
1832
check_ldflags '-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'
1833
check_ldflags -Wl,-Bsymbolic
1834

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

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

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

    
1875
if enabled gprof; then
1876
    add_cflags  "-p"
1877
    add_ldflags "-p"
1878
fi
1879

    
1880
VHOOKCFLAGS="-fPIC"
1881

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

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

    
1898
enabled_any $THREADS_LIST      && enable threads
1899

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

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

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

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

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

    
2011
echo "License: $license"
2012

    
2013
echo "Creating config.mak and config.h..."
2014

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

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

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

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

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

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

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

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

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

    
2115
echo "#define restrict $_restrict" >> $TMPH
2116

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

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

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

    
2130
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2131

    
2132
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2133

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

    
2139
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2140

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

    
2185

    
2186
# build pkg-config files
2187

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

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

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

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