Statistics
| Branch: | Revision:

ffmpeg / configure @ ca9acf97

History | View | Annotate | Download (66.5 KB)

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

    
10
# Prevent locale nonsense from breaking basic text processing.
11
LC_ALL=C
12
export LC_ALL
13

    
14
# make sure we are running under a compatible shell
15
# try to make this part work with most shells
16

    
17
try_exec(){
18
    echo "Trying shell $1"
19
    type "$1" > /dev/null 2>&1 && exec "$@"
20
}
21

    
22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24
E1="$?"
25

    
26
(: ${foo?}) 2> /dev/null
27
E2="$?"
28

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

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

    
198
log(){
199
    echo "$@" >> $logfile
200
}
201

    
202
log_file(){
203
    log BEGIN $1
204
    pr -n -t $1 >> $logfile
205
    log END $1
206
}
207

    
208
echolog(){
209
    log "$@"
210
    echo "$@"
211
}
212

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

    
235
# Avoid locale weirdness, besides we really just want to translate ASCII.
236
toupper(){
237
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
238
}
239

    
240
tolower(){
241
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
242
}
243

    
244
set_all(){
245
    value=$1
246
    shift
247
    for var in $*; do
248
        eval $var=$value
249
    done
250
}
251

    
252
pushvar(){
253
    for var in $*; do
254
        eval level=\${${var}_level:=0}
255
        eval ${var}_${level}="\$$var"
256
        eval ${var}_level=$(($level+1))
257
    done
258
}
259

    
260
popvar(){
261
    for var in $*; do
262
        eval level=\${${var}_level:-0}
263
        test $level = 0 && continue
264
        eval level=$(($level-1))
265
        eval $var="\${${var}_${level}}"
266
        eval ${var}_level=$level
267
        eval unset ${var}_${level}
268
    done
269
}
270

    
271
enable(){
272
    set_all yes $*
273
}
274

    
275
disable(){
276
    set_all no $*
277
}
278

    
279
enabled(){
280
    test "${1#!}" = "$1" && op== || op=!=
281
    eval test "x\$${1#!}" $op "xyes"
282
}
283

    
284
disabled(){
285
    test "${1#!}" = "$1" && op== || op=!=
286
    eval test "x\$${1#!}" $op "xno"
287
}
288

    
289
enabled_all(){
290
    for opt; do
291
        enabled $opt || return 1
292
    done
293
}
294

    
295
disabled_all(){
296
    for opt; do
297
        disabled $opt || return 1
298
    done
299
}
300

    
301
enabled_any(){
302
    for opt; do
303
        enabled $opt && return 0
304
    done
305
}
306

    
307
disabled_any(){
308
    for opt; do
309
        disabled $opt && return 0
310
    done
311
}
312

    
313
set_default(){
314
    for opt; do
315
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
316
    done
317
}
318

    
319
is_in(){
320
    value=$1
321
    shift
322
    for var in $*; do
323
        [ $var = $value ] && return 0
324
    done
325
    return 1
326
}
327

    
328
check_deps(){
329
    for cfg; do
330
        cfg="${cfg#!}"
331
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
332
        disabled ${cfg}_checking && continue
333
        enable ${cfg}_checking
334

    
335
        eval dep_all="\$${cfg}_deps"
336
        eval dep_any="\$${cfg}_deps_any"
337

    
338
        pushvar cfg dep_all dep_any
339
        check_deps $dep_all $dep_any
340
        popvar cfg dep_all dep_any
341

    
342
        enabled_all $dep_all || disable $cfg
343
        enabled_any $dep_any || disable $cfg
344

    
345
        if enabled $cfg; then
346
            eval dep_extralibs="\$${cfg}_extralibs"
347
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
348
        fi
349

    
350
        disable ${cfg}_checking
351
    done
352
}
353

    
354
print_config(){
355
    pfx=$1
356
    header=$2
357
    makefile=$3
358
    shift 3
359
    for cfg; do
360
        ucname="`toupper $cfg`"
361
        if enabled $cfg; then
362
            echo "#define ${pfx}${ucname} 1" >> $header
363
            echo "#define ENABLE_${ucname} 1" >> $header
364
            echo "${pfx}${ucname}=yes" >> $makefile
365
        else
366
            echo "#define ENABLE_${ucname} 0" >> $header
367
        fi
368
    done
369
}
370

    
371
flags_saved(){
372
    (: ${SAVE_CFLAGS?}) 2> /dev/null
373
}
374

    
375
save_flags(){
376
    flags_saved && return
377
    SAVE_CFLAGS="$CFLAGS"
378
    SAVE_LDFLAGS="$LDFLAGS"
379
    SAVE_extralibs="$extralibs"
380
}
381

    
382
restore_flags(){
383
    flags_saved || return
384
    CFLAGS="$SAVE_CFLAGS"
385
    LDFLAGS="$SAVE_LDFLAGS"
386
    extralibs="$SAVE_extralibs"
387
    unset SAVE_CFLAGS
388
    unset SAVE_LDFLAGS
389
    unset SAVE_extralibs
390
}
391

    
392
temp_cflags(){
393
    save_flags
394
    CFLAGS="$CFLAGS $*"
395
}
396

    
397
temp_ldflags(){
398
    save_flags
399
    LDFLAGS="$LDFLAGS $*"
400
}
401

    
402
temp_extralibs(){
403
    save_flags
404
    extralibs="$extralibs $*"
405
}
406

    
407
append(){
408
    var=$1
409
    shift
410
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
411
    eval "$var=\"\$$var $*\""
412
}
413

    
414
add_cflags(){
415
    append CFLAGS "$@"
416
}
417

    
418
add_ldflags(){
419
    append LDFLAGS "$@"
420
}
421

    
422
add_extralibs(){
423
    append extralibs "$@"
424
}
425

    
426
check_cmd(){
427
    log "$@"
428
    "$@" >> $logfile 2>&1
429
}
430

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

    
438
check_cpp(){
439
    log check_cpp "$@"
440
    cat > $TMPC
441
    log_file $TMPC
442
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
443
}
444

    
445
check_asm(){
446
    log check_asm "$@"
447
    name="$1"
448
    asm="$2"
449
    shift 2
450
    check_cc "$@" <<EOF && enable $name || disable $name
451
int foo(void){ asm volatile($asm); }
452
EOF
453
}
454

    
455
check_yasm(){
456
    log check_yasm "$@"
457
    echo "$1" > $TMPS
458
    log_file $TMPS
459
    shift 1
460
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
461
}
462

    
463
check_ld(){
464
    log check_ld "$@"
465
    check_cc || return
466
    flags=''
467
    libs=''
468
    for f; do
469
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
470
    done
471
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
472
}
473

    
474
check_cflags(){
475
    log check_cflags "$@"
476
    check_cc "$@" <<EOF && add_cflags "$@"
477
int x;
478
EOF
479
}
480

    
481
check_ldflags(){
482
    log check_ldflags "$@"
483
    check_ld "$@" <<EOF && add_ldflags "$@"
484
int main(void){ return 0; }
485
EOF
486
}
487

    
488
check_header(){
489
    log check_header "$@"
490
    header=$1
491
    shift
492
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
493
    disable $var
494
    check_cpp "$@" <<EOF && enable $var
495
#include <$header>
496
int x;
497
EOF
498
}
499

    
500
check_func(){
501
    log check_func "$@"
502
    func=$1
503
    shift
504
    disable $func
505
    check_ld "$@" <<EOF && enable $func
506
extern int $func();
507
int main(void){ $func(); }
508
EOF
509
}
510

    
511
check_func_headers(){
512
    log check_func_headers "$@"
513
    headers=$1
514
    func=$2
515
    shift 2
516
    disable $func
517
    incs=""
518
    for hdr in $headers; do
519
        incs="$incs
520
#include <$hdr>"
521
    done
522
    check_ld "$@" <<EOF && enable $func
523
$incs
524
int main(int argc, char **argv){
525
    (void) $func;
526
    return 0;
527
}
528
EOF
529
}
530

    
531
check_cpp_condition(){
532
    log check_cpp_condition "$@"
533
    header=$1
534
    condition=$2
535
    check_cpp <<EOF
536
#include <$header>
537
#if !($condition)
538
#error "unsatisfied condition: $condition"
539
#endif
540
EOF
541
}
542

    
543
check_lib(){
544
    log check_lib "$@"
545
    header="$1"
546
    func="$2"
547
    shift 2
548
    temp_extralibs "$@"
549
    check_header $header && check_func $func && add_extralibs "$@"
550
    err=$?
551
    restore_flags
552
    return $err
553
}
554

    
555
check_lib2(){
556
    log check_lib2 "$@"
557
    headers="$1"
558
    func="$2"
559
    shift 2
560
    temp_extralibs "$@"
561
    check_func_headers "$headers" $func && add_extralibs "$@"
562
    err=$?
563
    restore_flags
564
    return $err
565
}
566

    
567
check_exec(){
568
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
569
}
570

    
571
check_exec_crash(){
572
    code=`cat`
573

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

    
580
    (check_exec "$@") >> $logfile 2>&1 <<EOF
581
#include <signal.h>
582
static void sighandler(int sig){
583
    raise(SIGTERM);
584
}
585
int main(void){
586
    signal(SIGILL, sighandler);
587
    signal(SIGFPE, sighandler);
588
    signal(SIGSEGV, sighandler);
589
#ifdef SIGBUS
590
    signal(SIGBUS, sighandler);
591
#endif
592
    { $code }
593
}
594
EOF
595
}
596

    
597
check_type(){
598
    log check_type "$@"
599
    headers=$1
600
    type=$2
601
    shift 2
602
    disable $type
603
    incs=""
604
    for hdr in $headers; do
605
        incs="$incs
606
#include <$hdr>"
607
    done
608
    check_cc "$@" <<EOF && enable $type
609
$incs
610
$type v;
611
EOF
612
}
613

    
614
require(){
615
    name="$1"
616
    header="$2"
617
    func="$3"
618
    shift 3
619
    check_lib $header $func "$@" || die "ERROR: $name not found"
620
}
621

    
622
require2(){
623
    name="$1"
624
    headers="$2"
625
    func="$3"
626
    shift 3
627
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
628
}
629

    
630
require_cpp_condition(){
631
    name="$1"
632
    header="$2"
633
    cpp_condition="$3"
634
    shift 3
635
    check_cpp_condition $header "$cpp_condition" || die "ERROR: $name does not satisfy CPP condition: $cpp_condition"
636
}
637

    
638
check_foo_config(){
639
    cfg=$1
640
    pkg=$2
641
    header=$3
642
    func=$4
643
    shift 4
644
    disable $cfg
645
    check_cmd ${pkg}-config --version
646
    err=$?
647
    if test "$err" = 0; then
648
        temp_cflags `${pkg}-config --cflags`
649
        temp_extralibs `${pkg}-config --libs`
650
        check_lib "$@" $header $func && enable $cfg
651
    fi
652
    return $err
653
}
654

    
655
apply(){
656
    file=$1
657
    shift
658
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
659
}
660

    
661
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
662
# system-dependent things.
663

    
664
COMPONENT_LIST="
665
    bsfs
666
    decoders
667
    demuxers
668
    encoders
669
    filters
670
    indevs
671
    muxers
672
    outdevs
673
    parsers
674
    protocols
675
"
676

    
677
CONFIG_LIST="
678
    $COMPONENT_LIST
679
    avfilter
680
    avfilter_lavf
681
    avisynth
682
    beos_netserver
683
    bzlib
684
    ffmpeg
685
    ffplay
686
    ffserver
687
    gpl
688
    gprof
689
    gray
690
    hardcoded_tables
691
    ipv6
692
    libamr_nb
693
    libamr_wb
694
    libdc1394
695
    libdirac
696
    libfaac
697
    libfaad
698
    libfaadbin
699
    libgsm
700
    libmp3lame
701
    libnut
702
    libschroedinger
703
    libtheora
704
    libvorbis
705
    libx264
706
    libxvid
707
    memalign_hack
708
    mlib
709
    mpegaudio_hp
710
    network
711
    nonfree
712
    postproc
713
    powerpc_perf
714
    small
715
    swscale
716
    vhook
717
    x11grab
718
    zlib
719
"
720

    
721
THREADS_LIST='
722
    beosthreads
723
    os2threads
724
    pthreads
725
    w32threads
726
'
727

    
728
ARCH_LIST='
729
    alpha
730
    armv4l
731
    bfin
732
    ia64
733
    m68k
734
    mips
735
    parisc
736
    powerpc
737
    s390
738
    sh4
739
    sparc
740
    sparc64
741
    x86
742
    x86_32
743
    x86_64
744
'
745

    
746
ARCH_EXT_LIST='
747
    altivec
748
    armv5te
749
    armv6
750
    armvfp
751
    iwmmxt
752
    mmi
753
    mmx
754
    mmx2
755
    neon
756
    ssse3
757
    vis
758
'
759

    
760
HAVE_LIST="
761
    $ARCH_EXT_LIST
762
    $THREADS_LIST
763
    altivec_h
764
    arpa_inet_h
765
    bswap
766
    byteswap_h
767
    closesocket
768
    cmov
769
    conio_h
770
    dcbzl
771
    dev_bktr_ioctl_bt848_h
772
    dev_bktr_ioctl_meteor_h
773
    dev_ic_bt8xx_h
774
    dev_video_meteor_ioctl_meteor_h
775
    dev_video_bktr_ioctl_bt848_h
776
    dlfcn_h
777
    dlopen
778
    dos_paths
779
    ebp_available
780
    ebx_available
781
    fast_64bit
782
    fast_cmov
783
    fast_unaligned
784
    fork
785
    freetype2
786
    gethrtime
787
    GetProcessTimes
788
    getrusage
789
    imlib2
790
    inet_aton
791
    inline_asm
792
    libdc1394_1
793
    libdc1394_2
794
    llrint
795
    lrint
796
    lrintf
797
    machine_ioctl_bt848_h
798
    machine_ioctl_meteor_h
799
    malloc_h
800
    memalign
801
    mkstemp
802
    pld
803
    ppc64
804
    round
805
    roundf
806
    sdl
807
    sdl_video_size
808
    socklen_t
809
    soundcard_h
810
    poll_h
811
    sys_mman_h
812
    sys_resource_h
813
    sys_select_h
814
    sys_soundcard_h
815
    sys_videoio_h
816
    termios_h
817
    threads
818
    winsock2_h
819
    yasm
820
"
821

    
822
CMDLINE_SELECT="
823
    $ARCH_EXT_LIST
824
    $CONFIG_LIST
825
    $THREADS_LIST
826
    cross_compile
827
    debug
828
    extra_warnings
829
    logging
830
    optimizations
831
    shared
832
    static
833
    stripping
834
"
835

    
836
PATHS_LIST='
837
    bindir
838
    incdir
839
    libdir
840
    mandir
841
    prefix
842
    shlibdir
843
'
844

    
845
CMDLINE_SET="
846
    $PATHS_LIST
847
    arch
848
    build_suffix
849
    cc
850
    cpu
851
    cross_prefix
852
    extra_version
853
    logfile
854
    source_path
855
    target_os
856
"
857

    
858
# code dependency declarations
859

    
860
# architecture extensions
861
altivec_deps="powerpc"
862
armv5te_deps="armv4l"
863
armv6_deps="armv4l"
864
armvfp_deps="armv4l"
865
iwmmxt_deps="armv4l"
866
mmi_deps="mips"
867
mmx_deps="x86"
868
mmx2_deps="x86 mmx"
869
neon_deps="armv4l"
870
ssse3_deps="x86"
871
vis_deps="sparc"
872

    
873
# system headers and functions
874
byteswap_h_deps="!armv4l"
875

    
876
# decoders / encoders
877
ac3_decoder_deps="gpl"
878
dxa_decoder_deps="zlib"
879
eac3_decoder_deps="gpl"
880
flashsv_decoder_deps="zlib"
881
flashsv_encoder_deps="zlib"
882
mlp_decoder_deps="mlp_parser"
883
mpeg_xvmc_decoder_deps="xvmc"
884
png_decoder_deps="zlib"
885
png_encoder_deps="zlib"
886
zmbv_decoder_deps="zlib"
887
zmbv_encoder_deps="zlib"
888

    
889
# external libraries
890
libamr_nb_decoder_deps="libamr_nb"
891
libamr_nb_encoder_deps="libamr_nb"
892
libamr_wb_decoder_deps="libamr_wb"
893
libamr_wb_encoder_deps="libamr_wb"
894
libdirac_decoder_deps="libdirac !libschroedinger"
895
libdirac_encoder_deps="libdirac"
896
libfaac_encoder_deps="libfaac"
897
libfaad_decoder_deps="libfaad"
898
libfaadbin_decoder_extralibs='$ldl'
899
libgsm_decoder_deps="libgsm"
900
libgsm_encoder_deps="libgsm"
901
libgsm_ms_decoder_deps="libgsm"
902
libgsm_ms_encoder_deps="libgsm"
903
libmp3lame_encoder_deps="libmp3lame"
904
libschroedinger_decoder_deps="libschroedinger"
905
libschroedinger_encoder_deps="libschroedinger"
906
libtheora_encoder_deps="libtheora"
907
libvorbis_encoder_deps="libvorbis"
908
libx264_encoder_deps="libx264"
909
libxvid_encoder_deps="libxvid"
910
mpeg4aac_decoder_deps="libfaad"
911

    
912
# demuxers / muxers
913
ac3_demuxer_deps="ac3_parser"
914
audio_beos_demuxer_deps="audio_beos"
915
audio_beos_demuxer_extralibs="-lmedia -lbe"
916
audio_beos_muxer_deps="audio_beos"
917
audio_beos_muxer_extralibs="-lmedia -lbe"
918
avisynth_demuxer_deps="avisynth"
919
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
920
dirac_demuxer_deps="dirac_parser"
921
dv1394_demuxer_deps="dv1394 dv_demuxer"
922
libdc1394_demuxer_deps="libdc1394"
923
libnut_demuxer_deps="libnut"
924
libnut_muxer_deps="libnut"
925
mp3_demuxer_deps="mpegaudio_parser"
926
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
927
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
928
redir_demuxer_deps="network"
929
rtp_muxer_deps="network rtp_protocol"
930
rtsp_demuxer_deps="sdp_demuxer"
931
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
932
v4l_demuxer_deps="linux_videodev_h"
933
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
934
vfwcap_demuxer_deps="capCreateCaptureWindow"
935
vfwcap_demuxer_extralibs="-lvfw32"
936
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
937
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
938

    
939
# protocols
940
http_protocol_deps="network"
941
rtp_protocol_deps="udp_protocol"
942
tcp_protocol_deps="network"
943
udp_protocol_deps="network"
944

    
945
# filters
946
movie_filter_deps="avfilter_lavf"
947

    
948
# programs
949
ffplay_deps="sdl"
950
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
951
ffserver_extralibs='$ldl'
952
vhook_extralibs='$ldl'
953

    
954

    
955
# default parameters
956

    
957
logfile="config.err"
958

    
959
# installation paths
960
prefix_default="/usr/local"
961
bindir_default='${prefix}/bin'
962
incdir_default='${prefix}/include'
963
libdir_default='${prefix}/lib'
964
mandir_default='${prefix}/share/man'
965
shlibdir_default="$libdir_default"
966

    
967
# toolchain
968
cc="gcc"
969
yasmexe="yasm"
970
ar="ar"
971
nm="nm"
972
ranlib="ranlib"
973
strip="strip"
974
asmalign_pot="unknown"
975
ln_s="ln -sf"
976
objformat="elf"
977

    
978
# machine
979
arch=`uname -m`
980
cpu="generic"
981

    
982
# OS
983
target_os=$(tolower $(uname -s))
984

    
985
# libraries
986
enable bzlib
987
enable zlib
988

    
989
# configurable options
990
enable debug
991
enable ffmpeg
992
enable ffplay
993
enable ffserver
994
enable ipv6
995
enable mpegaudio_hp
996
enable network
997
enable optimizations
998
enable protocols
999
enable static
1000
enable stripping
1001
vhook="default"
1002

    
1003
# build settings
1004
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1005
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1006
VHOOKSHFLAGS='$(SHFLAGS)'
1007
FFSERVERLDFLAGS=-Wl,-E
1008
LIBPREF="lib"
1009
LIBSUF=".a"
1010
FULLNAME='$(NAME)$(BUILDSUF)'
1011
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1012
SLIBPREF="lib"
1013
SLIBSUF=".so"
1014
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1015
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1016
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1017
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1018

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

    
1022
# find source path
1023
source_path="`dirname \"$0\"`"
1024
enable source_path_used
1025
if test -z "$source_path" -o "$source_path" = "." ; then
1026
    source_path="`pwd`"
1027
    disable source_path_used
1028
else
1029
    source_path="`cd \"$source_path\"; pwd`"
1030
    echo "$source_path" | grep -q '[[:blank:]]' &&
1031
        die "Out of tree builds are impossible with whitespace in source path."
1032
fi
1033

    
1034
FFMPEG_CONFIGURATION="$@"
1035

    
1036
find_things(){
1037
    thing=$1
1038
    pattern=$2
1039
    file=$source_path/$3
1040
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1041
}
1042

    
1043
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1044
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1045
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1046
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1047
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1048
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1049
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1050
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1051
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1052
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1053

    
1054
enable $ARCH_EXT_LIST \
1055
       $DECODER_LIST \
1056
       $ENCODER_LIST \
1057
       $PARSER_LIST \
1058
       $BSF_LIST \
1059
       $DEMUXER_LIST \
1060
       $MUXER_LIST \
1061
       $FILTER_LIST \
1062
       $PROTOCOL_LIST \
1063
       $INDEV_LIST \
1064
       $OUTDEV_LIST \
1065

    
1066
die_unknown(){
1067
    echo "Unknown option \"$1\"."
1068
    echo "See $0 --help for available options."
1069
    exit 1
1070
}
1071

    
1072
show_list() {
1073
    suffix=_$1
1074
    shift
1075
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1076
    exit 0
1077
}
1078

    
1079
for opt do
1080
    optval="${opt#*=}"
1081
    case "$opt" in
1082
    --extra-cflags=*) add_cflags "$optval"
1083
    ;;
1084
    --extra-ldflags=*) add_ldflags "$optval"
1085
    ;;
1086
    --extra-libs=*) add_extralibs "$optval"
1087
    ;;
1088
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1089
    ;;
1090
    --enable-debug=*) debuglevel="$optval"
1091
    ;;
1092
    --enable-*=*|--disable-*=*)
1093
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1094
    case "$thing" in
1095
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1096
        *) die_unknown "$opt" ;;
1097
    esac
1098
    ;;
1099
    --enable-?*|--disable-?*)
1100
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1101
    if is_in $option $COMPONENT_LIST; then
1102
        eval $action \$$(toupper ${option%s})_LIST
1103
    elif is_in $option $CMDLINE_SELECT; then
1104
        $action $option
1105
    else
1106
        die_unknown $opt
1107
    fi
1108
    ;;
1109
    --list-*)
1110
        NAME="${opt#--list-}"
1111
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1112
        NAME=${NAME%s}
1113
        eval show_list $NAME \$$(toupper $NAME)_LIST
1114
    ;;
1115
    --help|-h) show_help
1116
    ;;
1117
    *)
1118
    optname="${opt%=*}"
1119
    optname="${optname#--}"
1120
    optname=$(echo "$optname" | sed 's/-/_/g')
1121
    is_in $optname $CMDLINE_SET || die_unknown $opt
1122
    eval $optname='$optval'
1123
    ;;
1124
    esac
1125
done
1126

    
1127
disabled logging && logfile=/dev/null
1128

    
1129
echo "# $0 $@" > $logfile
1130
set >> $logfile
1131

    
1132
cc="${cross_prefix}${cc}"
1133
yasmexe="${cross_prefix}${yasmexe}"
1134
ar="${cross_prefix}${ar}"
1135
nm="${cross_prefix}${nm}"
1136
ranlib="${cross_prefix}${ranlib}"
1137
strip="${cross_prefix}${strip}"
1138

    
1139
# set temporary file name
1140
if test ! -z "$TMPDIR" ; then
1141
    TMPDIR1="${TMPDIR}"
1142
elif test ! -z "$TEMPDIR" ; then
1143
    TMPDIR1="${TEMPDIR}"
1144
else
1145
    TMPDIR1="/tmp"
1146
fi
1147

    
1148
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1149
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1150
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1151
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1152
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1153
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1154

    
1155
check_cflags -fasm
1156
check_cflags -std=c99
1157

    
1158
case "$arch" in
1159
    i386|i486|i586|i686|i86pc|BePC)
1160
        arch="x86_32"
1161
        enable fast_unaligned
1162
    ;;
1163
    x86_64|amd64)
1164
        arch="x86_32"
1165
        enable fast_unaligned
1166
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1167
        int test[sizeof(char*) - 7];
1168
EOF
1169
    ;;
1170
    # armv4l is a subset of armv[567]*l
1171
    arm|armv[4567]*l)
1172
        arch="armv4l"
1173
    ;;
1174
    alpha)
1175
        arch="alpha"
1176
        enable fast_64bit
1177
    ;;
1178
    "Power Macintosh"|ppc|powerpc)
1179
        arch="powerpc"
1180
    ;;
1181
    ppc64)
1182
        arch="powerpc"
1183
        enable fast_64bit
1184
    ;;
1185
    mips|mipsel|IP*)
1186
        arch="mips"
1187
    ;;
1188
    sun4u|sparc64)
1189
        arch="sparc64"
1190
        enable fast_64bit
1191
    ;;
1192
    sparc)
1193
        arch="sparc"
1194
    ;;
1195
    sh4)
1196
        arch="sh4"
1197
    ;;
1198
    parisc)
1199
        arch="parisc"
1200
    ;;
1201
    parisc64)
1202
        arch="parisc"
1203
        enable fast_64bit
1204
    ;;
1205
    s390|s390x)
1206
        arch="s390"
1207
    ;;
1208
    m68k)
1209
        arch="m68k"
1210
    ;;
1211
    ia64)
1212
        arch="ia64"
1213
        enable fast_64bit
1214
    ;;
1215
    bfin)
1216
        arch="bfin"
1217
    ;;
1218
    *)
1219
        arch="unknown"
1220
    ;;
1221
esac
1222

    
1223
enable $arch
1224
enabled_any x86_32 x86_64 && enable x86
1225
enabled     sparc64       && enable sparc
1226

    
1227
# OS specific
1228
case $target_os in
1229
    beos|haiku|zeta)
1230
        prefix_default="$HOME/config"
1231
        # helps building libavcodec
1232
        add_cflags "-DPIC -fomit-frame-pointer"
1233
        # 3 gcc releases known for BeOS, each with ugly bugs
1234
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1235
        case "$gcc_version" in
1236
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1237
            disable mmx
1238
            ;;
1239
          *20010315*) echo "BeBits gcc"
1240
            add_cflags "-fno-expensive-optimizations"
1241
            ;;
1242
        esac
1243
        SHFLAGS=-nostart
1244
        # enable BeOS things
1245
        enable audio_beos
1246
        # no need for libm, but the inet stuff
1247
        # Check for BONE
1248
        # XXX: actually should check for NOT net_server
1249
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1250
            network_extralibs="-lbind -lsocket"
1251
        else
1252
            enable beos_netserver
1253
            network_extralibs="-lnet"
1254
        fi ;;
1255
    sunos)
1256
        FFSERVERLDFLAGS=""
1257
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1258
        network_extralibs="-lsocket -lnsl"
1259
        ;;
1260
    netbsd)
1261
        oss_demuxer_extralibs="-lossaudio"
1262
        oss_muxer_extralibs="-lossaudio"
1263
        ;;
1264
    openbsd)
1265
        disable need_memalign
1266
        LIBOBJFLAGS='$(PIC)'
1267
        SHFLAGS='-shared'
1268
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1269
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1270
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1271
        oss_demuxer_extralibs="-lossaudio"
1272
        oss_muxer_extralibs="-lossaudio"
1273
        ;;
1274
    freebsd)
1275
        disable need_memalign
1276
        ;;
1277
    bsd/os)
1278
        osextralibs="-lpoll -lgnugetopt"
1279
        strip="strip -d"
1280
        ;;
1281
    darwin)
1282
        disable need_memalign
1283
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1284
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1285
        strip="strip -x"
1286
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1287
        SLIBSUF=".dylib"
1288
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1289
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1290
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1291
        objformat="macho"
1292
        enabled x86_64 && objformat="macho64"
1293
        ;;
1294
    mingw32*)
1295
        target_os=mingw32
1296
        LIBTARGET=i386
1297
        if test $arch = x86_64; then
1298
            disable need_memalign
1299
            LIBTARGET=x64
1300
        fi
1301
        shlibdir_default="$bindir_default"
1302
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1303
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1304
        if enabled swscale; then
1305
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1306
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1307
        fi
1308
        disable ffserver
1309
        SLIBPREF=""
1310
        SLIBSUF=".dll"
1311
        EXESUF=".exe"
1312
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1313
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1314
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1315
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1316
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1317
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1318
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1319
        objformat="win32"
1320
        enable dos_paths
1321
        ;;
1322
    cygwin*)
1323
        target_os=cygwin
1324
        shlibdir_default="$bindir_default"
1325
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1326
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1327
        if enabled swscale; then
1328
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1329
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1330
        fi
1331
        EXESUF=".exe"
1332
        SLIBPREF="cyg"
1333
        SLIBSUF=".dll"
1334
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1335
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1336
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1337
        objformat="win32"
1338
        enable dos_paths
1339
        ;;
1340
    *-dos|freedos|opendos)
1341
        disable ffplay ffserver vhook
1342
        disable $INDEV_LIST $OUTDEV_LIST
1343
        network_extralibs="-lsocket"
1344
        EXESUF=".exe"
1345
        objformat="win32"
1346
        enable dos_paths
1347
        ;;
1348
    linux)
1349
        enable dv1394
1350
        ;;
1351
    irix*)
1352
        target_os=irix
1353
        ranlib="echo ignoring ranlib"
1354
        ;;
1355
    os/2*)
1356
        strip="lxlite"
1357
        ln_s="cp -f"
1358
        EXESUF=".exe"
1359
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1360
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1361
        FFSERVERLDFLAGS=""
1362
        LIBSUF="_s.a"
1363
        SLIBPREF=""
1364
        SLIBSUF=".dll"
1365
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1366
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1367
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1368
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1369
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1370
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1371
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1372
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1373
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1374
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1375
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1376
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1377
        disable vhook
1378
        enable dos_paths
1379
        ;;
1380
    interix)
1381
        disable vhook
1382
        ;;
1383

    
1384
    *)
1385
        target_os="${target_os}-UNKNOWN"
1386
        ;;
1387
esac
1388

    
1389
set_default $PATHS_LIST
1390

    
1391
add_extralibs $osextralibs
1392

    
1393
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1394
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1395

    
1396
test -n "$cross_prefix" && enable cross_compile
1397

    
1398
# we need to build at least one lib type
1399
if ! enabled_any static shared; then
1400
    cat <<EOF
1401
At least one library type must be built.
1402
Specify --enable-static to build the static libraries or --enable-shared to
1403
build the shared libraries as well. To only build the shared libraries specify
1404
--disable-static in addition to --enable-shared.
1405
EOF
1406
    exit 1;
1407
fi
1408

    
1409
disabled static && LIBNAME=""
1410

    
1411
if enabled_any libfaad libfaadbin ; then
1412
    if check_header faad.h; then
1413
        check_cc <<EOF
1414
#include <faad.h>
1415
#ifndef FAAD2_VERSION
1416
ok faad1
1417
#endif
1418
int main(void) { return 0; }
1419
EOF
1420
        test $? = 0 && enable libfaad2
1421
    else
1422
        die "FAAD test failed."
1423
    fi
1424
fi
1425

    
1426

    
1427
if ! enabled gpl; then
1428
    die_gpl_disabled(){
1429
        name=$1
1430
        shift
1431
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1432
    }
1433
    die_gpl_disabled "The Postprocessing code" postproc
1434
    die_gpl_disabled "libx264"                 libx264
1435
    die_gpl_disabled "libxvidcore"             libxvid
1436
    die_gpl_disabled "FAAD2"                   libfaad2
1437
    die_gpl_disabled "The X11 grabber"         x11grab
1438
    die_gpl_disabled "The software scaler"     swscale
1439
fi
1440

    
1441
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1442
    die "libamr is nonfree and --enable-nonfree is not specified."
1443
fi
1444

    
1445
check_deps $ARCH_EXT_LIST
1446

    
1447
test -z "$need_memalign" && need_memalign="$mmx"
1448

    
1449
#Darwin CC versions
1450
if test $target_os = darwin; then
1451
    if $cc -v 2>&1 | grep -q xlc; then
1452
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1453
    else
1454
        add_cflags "-pipe"
1455
        check_cflags "-force_cpusubtype_ALL"
1456
        check_cflags "-Wno-sign-compare"
1457
        enabled shared || check_cflags -mdynamic-no-pic
1458
    fi
1459
fi
1460

    
1461
disabled optimizations || check_cflags -fomit-frame-pointer
1462

    
1463
# Add processor-specific flags
1464
if test $cpu != "generic"; then
1465
    warn_altivec(){
1466
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1467
    }
1468
    case $cpu in
1469
        601|ppc601|PowerPC601)
1470
            add_cflags "-mcpu=601"
1471
            warn_altivec enabled PPC601
1472
        ;;
1473
        603*|ppc603*|PowerPC603*)
1474
            add_cflags "-mcpu=603"
1475
            warn_altivec enabled PPC603
1476
        ;;
1477
        604*|ppc604*|PowerPC604*)
1478
            add_cflags "-mcpu=604"
1479
            warn_altivec enabled PPC604
1480
        ;;
1481
        G3|g3|75*|ppc75*|PowerPC75*)
1482
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1483
            warn_altivec enabled PPC75x
1484
        ;;
1485
        G4|g4|745*|ppc745*|PowerPC745*)
1486
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1487
            warn_altivec disabled PPC745x
1488
        ;;
1489
        74*|ppc74*|PowerPC74*)
1490
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1491
            warn_altivec disabled PPC74xx
1492
        ;;
1493
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1494
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1495
            warn_altivec disabled PPC970
1496
            enable ppc64
1497
        ;;
1498
        Cell|CELL|cell)
1499
            add_cflags "-mcpu=cell"
1500
            warn_altivec disabled Cell
1501
            enable ppc64
1502
        ;;
1503
        # targets that do NOT support conditional mov (cmov)
1504
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1505
            add_cflags "-march=$cpu"
1506
            disable cmov
1507
        ;;
1508
        # targets that do support conditional mov (cmov)
1509
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1510
            add_cflags "-march=$cpu"
1511
            enable cmov
1512
            enable fast_cmov
1513
        ;;
1514
        # targets that do support conditional mov but on which it's slow
1515
        pentium4|pentium4m|prescott|nocona)
1516
            add_cflags "-march=$cpu"
1517
            enable cmov
1518
            disable fast_cmov
1519
        ;;
1520
        sparc64)
1521
            add_cflags "-mcpu=v9"
1522
        ;;
1523
        arm*|cortex*)
1524
            add_cflags "-mcpu=$cpu"
1525
        ;;
1526
        *)
1527
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1528
        ;;
1529
    esac
1530
fi
1531

    
1532
# make sure we can execute files in $TMPDIR
1533
cat > $TMPSH 2>> $logfile <<EOF
1534
#! /bin/sh
1535
EOF
1536
chmod +x $TMPSH >> $logfile 2>&1
1537
if ! $TMPSH >> $logfile 2>&1; then
1538
    cat <<EOF
1539
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1540
variable to another directory and make sure that $TMPDIR1 is not mounted
1541
noexec.
1542
EOF
1543
    die "Sanity test failed."
1544
fi
1545
rm $TMPSH
1546

    
1547
# compiler sanity check
1548
check_exec <<EOF
1549
int main(void){ return 0; }
1550
EOF
1551
if test "$?" != 0; then
1552
    echo "$cc is unable to create an executable file."
1553
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1554
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1555
        echo "Only do this if you know what cross compiling means."
1556
    fi
1557
    die "C compiler test failed."
1558
fi
1559

    
1560
check_cc <<EOF || die "Symbol mangling check failed."
1561
int ff_extern;
1562
EOF
1563
sym=$($nm -P -g $TMPO | grep ff_extern)
1564
extern_prefix=${sym%%ff_extern*}
1565

    
1566
check_asm inline_asm '""'
1567

    
1568
if enabled x86; then
1569
    # check whether EBP is available on x86
1570
    # As 'i' is stored on the stack, this program will crash
1571
    # if the base pointer is used to access it because the
1572
    # base pointer is cleared in the inline assembly code.
1573
    check_exec_crash <<EOF && enable ebp_available
1574
    volatile int i=0;
1575
    asm volatile (
1576
        "xorl %%ebp, %%ebp"
1577
    ::: "%ebp");
1578
    return i;
1579
EOF
1580

    
1581
    # check wether EBX is available on x86
1582
    check_asm ebx_available '"":::"%ebx"'
1583

    
1584
    # check whether binutils is new enough to compile SSSE3/MMX2
1585
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1586
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1587

    
1588
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1589

    
1590
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1591
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1592
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1593
    case "$objformat" in
1594
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1595
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1596
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1597
    esac
1598
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1599
fi
1600

    
1601
# check for assembler specific support
1602

    
1603
if test $arch = "powerpc"; then
1604
check_cc <<EOF && enable dcbzl
1605
int main(void) {
1606
    register long zero = 0;
1607
    char data[1024];
1608
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1609
return 0;
1610
}
1611
EOF
1612
fi
1613

    
1614
# check for SIMD availability
1615

    
1616
# AltiVec flags: The FSF version of GCC differs from the Apple version
1617
if enabled altivec; then
1618
    check_cflags -maltivec -mabi=altivec &&
1619
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1620
        check_cflags -faltivec
1621

    
1622
    # check if our compiler supports Motorola AltiVec C API
1623
    check_cc <<EOF || disable altivec
1624
$inc_altivec_h
1625
int main(void) {
1626
    vector signed int v1, v2, v3;
1627
    v1 = vec_add(v2,v3);
1628
    return 0;
1629
}
1630
EOF
1631

    
1632
    # check if our compiler supports braces for vector declarations
1633
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1634
$inc_altivec_h
1635
int main (void) { (vector int) {1}; return 0; }
1636
EOF
1637
fi
1638

    
1639
# We have to check if pld is a nop and disable it.
1640
enabled armv4l  && check_asm pld     '"pld [r0]"'
1641
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1642
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1643
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1644
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1645
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1646
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1647
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1648

    
1649
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1650

    
1651
# ---
1652
# big/little-endian test
1653
check_cc <<EOF || die "endian test failed"
1654
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1655
EOF
1656
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1657

    
1658
# ---
1659
# check availability of some header files
1660

    
1661
if check_func dlopen; then
1662
    ldl=
1663
elif check_func dlopen -ldl; then
1664
    ldl=-ldl
1665
fi
1666

    
1667
check_func  fork
1668
check_func  gethrtime
1669
check_func  getrusage
1670
check_func  inet_aton $network_extralibs
1671
check_func  memalign
1672
check_func  mkstemp
1673
check_func_headers windows.h GetProcessTimes
1674

    
1675
check_header byteswap.h
1676
check_header conio.h
1677
check_header dlfcn.h
1678
check_header malloc.h
1679
check_header poll.h
1680
check_header sys/mman.h
1681
check_header sys/resource.h
1682
check_header sys/select.h
1683
check_header termios.h
1684

    
1685
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1686
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1687
fi
1688

    
1689
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1690
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1691

    
1692
# check for some common methods of building with pthread support
1693
# do this before the optional library checks as some of them require pthreads
1694
if enabled pthreads; then
1695
    if check_func pthread_create; then
1696
        :
1697
    elif check_func pthread_create -pthread; then
1698
        add_cflags -pthread
1699
        add_extralibs -pthread
1700
    elif check_func pthread_create -pthreads; then
1701
        add_cflags -pthreads
1702
        add_extralibs -pthreads
1703
    elif check_func pthread_create -lpthreadGC2; then
1704
        add_extralibs -lpthreadGC2
1705
    elif ! check_lib pthread.h pthread_create -lpthread; then
1706
        die "ERROR: can't find pthreads library"
1707
    fi
1708
fi
1709

    
1710
for thread in $THREADS_LIST; do
1711
    if enabled $thread; then
1712
        test -n "$thread_type" &&
1713
            die "ERROR: Only one thread type must be selected." ||
1714
            thread_type="$thread"
1715
    fi
1716
done
1717

    
1718
check_lib math.h sin -lm
1719

    
1720
# test for C99 functions in math.h
1721
for func in llrint lrint lrintf round roundf; do
1722
    check_exec <<EOF && enable $func || disable $func
1723
#include <math.h>
1724
int main(void) { return ($func(3.999f) > 0)?0:1; }
1725
EOF
1726
done
1727

    
1728
# these are off by default, so fail if requested and not available
1729
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1730
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1731
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1732
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1733
                   && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1734
                   && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1735
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1736
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1737
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1738
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1739
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1740
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1741
                        && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1742
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1743
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1744
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm \
1745
                   && require_cpp_condition x264 x264.h "X264_BUILD >= 65"
1746
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1747
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1748

    
1749
# libdc1394 check
1750
if enabled libdc1394; then
1751
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1752
        enable libdc1394_2; } ||
1753
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1754
        enable libdc1394_1; } ||
1755
    die "ERROR: No version of libdc1394 found "
1756
fi
1757

    
1758

    
1759
_restrict=
1760
for restrict_keyword in restrict __restrict__ __restrict; do
1761
    check_cc <<EOF && _restrict=$restrict_keyword && break
1762
void foo(char * $restrict_keyword p);
1763
EOF
1764
done
1765

    
1766
test "$vhook" = "default" && vhook="$dlopen"
1767

    
1768
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1769
    disable vhook
1770
    echo
1771
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1772
    echo "Patches welcome."
1773
    echo
1774
fi
1775

    
1776
if enabled vhook; then
1777
    check_ldflags -rdynamic
1778
    check_ldflags -export-dynamic
1779
fi
1780

    
1781
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1782
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1783

    
1784
##########################################
1785
# SDL check
1786

    
1787
disable sdl_too_old
1788
disable sdl
1789
SDL_CONFIG="${cross_prefix}sdl-config"
1790
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1791
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1792
    temp_cflags $sdl_cflags
1793
    temp_extralibs `"${SDL_CONFIG}" --libs`
1794
    if check_lib2 SDL.h SDL_Init; then
1795
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1796
        if test "$_sdlversion" -lt 121 ; then
1797
            enable sdl_too_old
1798
        else
1799
            enable sdl
1800
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1801
#include <SDL.h>
1802
int main(int argc, char **argv){
1803
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1804
    int w = vi->current_w;
1805
    return 0;
1806
}
1807
EOF
1808
        fi
1809
    fi
1810
    restore_flags
1811
fi
1812

    
1813
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1814

    
1815
##########################################
1816
# Network check
1817

    
1818
if enabled network; then
1819
    check_type sys/socket.h socklen_t
1820
    # Prefer arpa/inet.h over winsock2
1821
    if check_header arpa/inet.h ; then
1822
        check_func closesocket
1823
    elif check_header winsock2.h ; then
1824
        network_extralibs="-lws2_32"
1825
        check_type ws2tcpip.h socklen_t
1826
        check_func_headers winsock2.h closesocket
1827
    fi
1828
fi
1829

    
1830
##########################################
1831
# IPv6 check
1832

    
1833
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1834
#include <sys/types.h>
1835
#include <sys/socket.h>
1836
#include <netinet/in.h>
1837
#include <netdb.h>
1838
int main(void) {
1839
    struct sockaddr_storage saddr;
1840
    struct ipv6_mreq mreq6;
1841
    getaddrinfo(0,0,0,0);
1842
    getnameinfo(0,0,0,0,0,0,0);
1843
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1844
}
1845
EOF
1846

    
1847
check_header linux/videodev.h
1848
check_header linux/videodev2.h
1849
check_header sys/videoio.h
1850

    
1851
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1852

    
1853
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1854
{ check_header dev/bktr/ioctl_meteor.h &&
1855
  check_header dev/bktr/ioctl_bt848.h; } ||
1856
{ check_header machine/ioctl_meteor.h &&
1857
  check_header machine/ioctl_bt848.h; } ||
1858
{ check_header dev/video/meteor/ioctl_meteor.h &&
1859
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1860
check_header dev/ic/bt8xx.h
1861

    
1862
check_header sys/soundcard.h
1863
check_header soundcard.h
1864

    
1865
# deal with the X11 frame grabber
1866
enabled x11grab                         &&
1867
check_header X11/Xlib.h                 &&
1868
check_header X11/extensions/XShm.h      &&
1869
check_func XOpenDisplay -lX11           &&
1870
check_func XShmCreateImage -lX11 -lXext
1871

    
1872
enabled debug && add_cflags -g"$debuglevel"
1873

    
1874
# add some useful compiler flags if supported
1875
check_cflags -Wdeclaration-after-statement
1876
check_cflags -Wall
1877
check_cflags -Wno-switch
1878
check_cflags -Wdisabled-optimization
1879
check_cflags -Wpointer-arith
1880
check_cflags -Wredundant-decls
1881
check_cflags -Wno-pointer-sign
1882
check_cflags -Wcast-qual
1883
check_cflags -Wwrite-strings
1884
check_cflags -Wtype-limits
1885
enabled extra_warnings && check_cflags -Winline
1886

    
1887
# add some linker flags
1888
check_ldflags -Wl,--warn-common
1889
check_ldflags -Wl,--as-needed
1890
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'
1891
check_ldflags -Wl,-Bsymbolic
1892

    
1893
if enabled small; then
1894
    check_cflags -Os            # not all compilers support -Os
1895
    optimizations="small"
1896
elif enabled optimizations; then
1897
    if $cc -v 2>&1 | grep -q xlc; then
1898
        add_cflags  "-O5"
1899
        add_ldflags "-O5"
1900
    else
1901
        add_cflags "-O3"
1902
    fi
1903
fi
1904
check_cflags -fno-math-errno
1905
check_cflags -fno-signed-zeros
1906

    
1907
# add some flags for Intel C Compiler
1908
if $cc --version 2> /dev/null | grep -q Intel; then
1909
  # Just warnings, no remarks
1910
  check_cflags -w1
1911
  # -wd: Disable following warnings
1912
  # 144, 167, 556: -Wno-pointer-sign
1913
  # 10006: ignoring unknown option -fno-signed-zeros
1914
  # 10156: ignoring option '-W'; no argument required
1915
  check_cflags -wd144,167,556,10006,10156
1916
  # 11030: Warning unknown option --as-needed
1917
  # 10156: ignoring option '-export'; no argument required
1918
  check_ldflags -wd10156,11030
1919
  # Allow to compile with optimizations
1920
  check_ldflags -march=$cpu
1921
fi
1922

    
1923
# PIC flags for shared library objects where they are needed
1924
if enabled shared; then
1925
    # LIBOBJFLAGS may have already been set in the OS configuration
1926
    if test -z "$LIBOBJFLAGS" ; then
1927
        case "$arch" in
1928
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1929
        esac
1930
    fi
1931
fi
1932

    
1933
if enabled gprof; then
1934
    add_cflags  "-p"
1935
    add_ldflags "-p"
1936
fi
1937

    
1938
VHOOKCFLAGS="-fPIC"
1939

    
1940
# Find out if the .align argument is a power of two or not.
1941
if test $asmalign_pot = "unknown"; then
1942
    disable asmalign_pot
1943
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1944
fi
1945

    
1946
enabled_any $DECODER_LIST      && enable decoders
1947
enabled_any $ENCODER_LIST      && enable encoders
1948
enabled_any $BSF_LIST          && enable bsfs
1949
enabled_any $DEMUXER_LIST      && enable demuxers
1950
enabled_any $MUXER_LIST        && enable muxers
1951
enabled_any $FILTER_LIST       && enable filters
1952
enabled_any $INDEV_LIST        && enable demuxers
1953
enabled_any $OUTDEV_LIST       && enable muxers
1954
enabled_any $PROTOCOL_LIST     && enable protocols
1955

    
1956
enabled_any $THREADS_LIST      && enable threads
1957

    
1958
check_deps $CONFIG_LIST       \
1959
           $HAVE_LIST         \
1960
           $DECODER_LIST      \
1961
           $ENCODER_LIST      \
1962
           $PARSER_LIST       \
1963
           $BSF_LIST          \
1964
           $DEMUXER_LIST      \
1965
           $MUXER_LIST        \
1966
           $FILTER_LIST       \
1967
           $INDEV_LIST        \
1968
           $OUTDEV_LIST       \
1969
           $PROTOCOL_LIST     \
1970

    
1971
enabled libdc1394 && append pkg_requires "libraw1394"
1972
enabled libdirac  && append pkg_requires "dirac"
1973
enabled libtheora && append pkg_requires "theora"
1974
enabled libvorbis && append pkg_requires "vorbisenc"
1975

    
1976
echo "install prefix            $prefix"
1977
echo "source path               $source_path"
1978
echo "C compiler                $cc"
1979
echo ".align is power-of-two    $asmalign_pot"
1980
echo "ARCH                      $arch ($cpu)"
1981
if test "$build_suffix" != ""; then
1982
    echo "build suffix              $build_suffix"
1983
fi
1984
if test "$extra_version" != ""; then
1985
    echo "version string suffix     $extra_version"
1986
fi
1987
echo "big-endian                ${bigendian-no}"
1988
if test $arch = "x86_32" -o $arch = "x86_64"; then
1989
    echo "yasm                      ${yasm-no}"
1990
    echo "MMX enabled               ${mmx-no}"
1991
    echo "CMOV enabled              ${cmov-no}"
1992
    echo "CMOV is fast              ${fast_cmov-no}"
1993
    echo "EBX available             ${ebx_available-no}"
1994
    echo "EBP available             ${ebp_available-no}"
1995
fi
1996
if test $arch = "armv4l"; then
1997
    echo "ARMv5TE enabled           ${armv5te-no}"
1998
    echo "ARMv6 enabled             ${armv6-no}"
1999
    echo "ARM VFP enabled           ${armvfp-no}"
2000
    echo "IWMMXT enabled            ${iwmmxt-no}"
2001
    echo "NEON enabled              ${neon-no}"
2002
fi
2003
if test $arch = "mips"; then
2004
    echo "MMI enabled               ${mmi-no}"
2005
fi
2006
if test $arch = "powerpc"; then
2007
    echo "AltiVec enabled           ${altivec-no}"
2008
    echo "dcbzl available           ${dcbzl-no}"
2009
fi
2010
echo "gprof enabled             ${gprof-no}"
2011
echo "debug symbols             ${debug-no}"
2012
echo "strip symbols             ${stripping-no}"
2013
echo "optimizations             ${optimizations-no}"
2014
echo "static                    ${static-no}"
2015
echo "shared                    ${shared-no}"
2016
echo "postprocessing support    ${postproc-no}"
2017
echo "software scaler enabled   ${swscale-no}"
2018
echo "new filter support        ${avfilter-no}"
2019
echo "filters using lavformat   ${avfilter_lavf-no}"
2020
echo "video hooking             ${vhook-no}"
2021
if enabled vhook; then
2022
    echo "Imlib2 support            ${imlib2-no}"
2023
    echo "FreeType support          ${freetype2-no}"
2024
fi
2025
echo "network support           ${network-no}"
2026
if enabled network; then
2027
    echo "IPv6 support              ${ipv6-no}"
2028
fi
2029
echo "threading support         ${thread_type-no}"
2030
echo "SDL support               ${sdl-no}"
2031
if enabled sdl_too_old; then
2032
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2033
fi
2034
echo "Sun medialib support      ${mlib-no}"
2035
echo "AVISynth enabled          ${avisynth-no}"
2036
echo "libamr-nb support         ${libamr_nb-no}"
2037
echo "libamr-wb support         ${libamr_wb-no}"
2038
echo "libdc1394 support         ${libdc1394-no}"
2039
echo "libdirac enabled          ${libdirac-no}"
2040
echo "libfaac enabled           ${libfaac-no}"
2041
echo "libfaad enabled           ${libfaad-no}"
2042
echo "libfaad dlopened          ${libfaadbin-no}"
2043
echo "libgsm enabled            ${libgsm-no}"
2044
echo "libmp3lame enabled        ${libmp3lame-no}"
2045
echo "libnut enabled            ${libnut-no}"
2046
echo "libschroedinger enabled   ${libschroedinger-no}"
2047
echo "libtheora enabled         ${libtheora-no}"
2048
echo "libvorbis enabled         ${libvorbis-no}"
2049
echo "libx264 enabled           ${libx264-no}"
2050
echo "libxvid enabled           ${libxvid-no}"
2051
echo "zlib enabled              ${zlib-no}"
2052
echo "bzlib enabled             ${bzlib-no}"
2053
echo
2054

    
2055
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2056
    echo "Enabled ${type}s:"
2057
    eval list=\$$(toupper $type)_LIST
2058
    for part in $list; do
2059
        enabled $part && echo ${part%_*}
2060
    done | sort | pr -3 -t
2061
    echo
2062
done
2063

    
2064
license="LGPL"
2065
if enabled nonfree; then
2066
    license="unredistributable"
2067
elif enabled gpl; then
2068
    license="GPL"
2069
fi
2070

    
2071
echo "License: $license"
2072

    
2073
echo "Creating config.mak and config.h..."
2074

    
2075
echo "# Automatically generated by configure - do not modify!" > config.mak
2076
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2077
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2078
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2079
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2080

    
2081
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2082
echo "prefix=$prefix" >> config.mak
2083
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2084
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2085
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2086
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2087
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2088
echo "CC=$cc" >> config.mak
2089
echo "YASM=$yasmexe" >> config.mak
2090
echo "AR=$ar" >> config.mak
2091
echo "RANLIB=$ranlib" >> config.mak
2092
echo "LN_S=$ln_s" >> config.mak
2093
enabled stripping &&
2094
    echo "STRIP=$strip" >> config.mak ||
2095
    echo "STRIP=echo ignoring strip" >> config.mak
2096

    
2097
echo "OPTFLAGS=$CFLAGS" >> config.mak
2098
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2099
echo "LDFLAGS=$LDFLAGS" >> config.mak
2100
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2101
echo "SHFLAGS=$SHFLAGS" >> config.mak
2102
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2103
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2104
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2105
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2106
echo "BUILD_STATIC=$static" >> config.mak
2107
echo "BUILDSUF=$build_suffix" >> config.mak
2108
echo "FULLNAME=$FULLNAME" >> config.mak
2109
echo "LIBPREF=$LIBPREF" >> config.mak
2110
echo "LIBSUF=$LIBSUF" >> config.mak
2111
echo "LIBNAME=$LIBNAME" >> config.mak
2112
echo "SLIBPREF=$SLIBPREF" >> config.mak
2113
echo "SLIBSUF=$SLIBSUF" >> config.mak
2114
echo "EXESUF=$EXESUF" >> config.mak
2115
echo "EXTRA_VERSION=$extra_version" >> config.mak
2116
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2117

    
2118
if enabled bigendian; then
2119
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2120
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2121
fi
2122

    
2123
if enabled sdl; then
2124
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2125
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2126
fi
2127
if enabled texi2html; then
2128
    echo "BUILD_DOC=yes" >> config.mak
2129
fi
2130

    
2131
get_version(){
2132
    name=$1
2133
    file=$source_path/$2
2134
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2135
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2136
    lcname=$(tolower $name)
2137
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2138
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2139
}
2140

    
2141
get_version LIBSWSCALE  libswscale/swscale.h
2142
get_version LIBPOSTPROC libpostproc/postprocess.h
2143
get_version LIBAVCODEC  libavcodec/avcodec.h
2144
get_version LIBAVDEVICE libavdevice/avdevice.h
2145
get_version LIBAVFORMAT libavformat/avformat.h
2146
get_version LIBAVUTIL   libavutil/avutil.h
2147
get_version LIBAVFILTER libavfilter/avfilter.h
2148

    
2149
if enabled shared; then
2150
    echo "BUILD_SHARED=yes" >> config.mak
2151
    echo "PIC=-fPIC -DPIC" >> config.mak
2152
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2153
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2154
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2155
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2156
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2157
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2158
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2159
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2160
fi
2161
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2162
echo "EXTRALIBS=$extralibs" >> config.mak
2163

    
2164
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2165
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2166
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2167
                                      $DECODER_LIST      \
2168
                                      $ENCODER_LIST      \
2169
                                      $PARSER_LIST       \
2170
                                      $BSF_LIST          \
2171
                                      $DEMUXER_LIST      \
2172
                                      $MUXER_LIST        \
2173
                                      $FILTER_LIST       \
2174
                                      $PROTOCOL_LIST     \
2175
                                      $INDEV_LIST        \
2176
                                      $OUTDEV_LIST       \
2177

    
2178
echo "#define restrict $_restrict" >> $TMPH
2179

    
2180
if enabled small; then
2181
    echo "#define av_always_inline"  >> $TMPH
2182
fi
2183

    
2184
echo "SRC_PATH=\"$source_path\"" >> config.mak
2185
echo "SRC_PATH_BARE=$source_path" >> config.mak
2186
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2187

    
2188
# Apparently it's not possible to portably echo a backslash.
2189
enabled asmalign_pot &&
2190
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2191
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2192

    
2193
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2194

    
2195
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2196

    
2197
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2198
cmp -s $TMPH config.h &&
2199
    echo "config.h is unchanged" ||
2200
    mv -f $TMPH config.h
2201

    
2202
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2203

    
2204
# build tree in object directory if source path is different from current one
2205
if enabled source_path_used; then
2206
    DIRS="\
2207
        doc               \
2208
        libavcodec        \
2209
        libavcodec/alpha  \
2210
        libavcodec/armv4l \
2211
        libavcodec/bfin   \
2212
        libavcodec/i386   \
2213
        libavcodec/mlib   \
2214
        libavcodec/ppc    \
2215
        libavcodec/sh4    \
2216
        libavcodec/sparc  \
2217
        libavdevice       \
2218
        libavfilter       \
2219
        libavformat       \
2220
        libavutil         \
2221
        libpostproc       \
2222
        libswscale        \
2223
        tests             \
2224
        tools             \
2225
        vhook             \
2226
        "
2227
    FILES="\
2228
        Makefile             \
2229
        common.mak           \
2230
        subdir.mak           \
2231
        doc/texi2pod.pl      \
2232
        libavcodec/Makefile  \
2233
        libavdevice/Makefile \
2234
        libavfilter/Makefile \
2235
        libavformat/Makefile \
2236
        libavutil/Makefile   \
2237
        libpostproc/Makefile \
2238
        libswscale/Makefile  \
2239
        "
2240
    for dir in $DIRS ; do
2241
        mkdir -p $dir
2242
    done
2243
    for f in $FILES ; do
2244
        $ln_s "$source_path/$f" $f
2245
    done
2246
fi
2247

    
2248

    
2249
# build pkg-config files
2250

    
2251
pkgconfig_generate(){
2252
name=$1
2253
shortname=${name#lib}
2254
comment=$2
2255
version=$3
2256
libs=$4
2257
requires=$5
2258
cat <<EOF > $name/$name.pc
2259
prefix=$prefix
2260
exec_prefix=\${prefix}
2261
libdir=$libdir
2262
includedir=$incdir
2263

    
2264
Name: $name
2265
Description: $comment
2266
Version: $version
2267
Requires: $(disabled shared && echo $requires)
2268
Requires.private: $(enabled shared && echo $requires)
2269
Conflicts:
2270
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2271
Libs.private: $(enabled shared && echo $libs)
2272
Cflags: -I\${includedir}
2273
EOF
2274
cat <<EOF > $name/$name-uninstalled.pc
2275
prefix=
2276
exec_prefix=
2277
libdir=\${pcfiledir}
2278
includedir=${source_path}
2279

    
2280
Name: $name
2281
Description: $comment
2282
Version: $version
2283
Requires: $requires
2284
Conflicts:
2285
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2286
Cflags: -I\${includedir}
2287
EOF
2288
}
2289

    
2290
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2291
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2292
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2293
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2294
enabled avfilter &&
2295
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2296
enabled postproc &&
2297
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2298
if enabled swscale; then
2299
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2300
else
2301
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2302
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2303
fi