Statistics
| Branch: | Revision:

ffmpeg / configure @ 13c7df3d

History | View | Annotate | Download (66.4 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
check_foo_config(){
631
    cfg=$1
632
    pkg=$2
633
    header=$3
634
    func=$4
635
    shift 4
636
    disable $cfg
637
    check_cmd ${pkg}-config --version
638
    err=$?
639
    if test "$err" = 0; then
640
        temp_cflags `${pkg}-config --cflags`
641
        temp_extralibs `${pkg}-config --libs`
642
        check_lib "$@" $header $func && enable $cfg
643
    fi
644
    return $err
645
}
646

    
647
apply(){
648
    file=$1
649
    shift
650
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
651
}
652

    
653
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
654
# system-dependent things.
655

    
656
COMPONENT_LIST="
657
    bsfs
658
    decoders
659
    demuxers
660
    encoders
661
    filters
662
    indevs
663
    muxers
664
    outdevs
665
    parsers
666
    protocols
667
"
668

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

    
713
THREADS_LIST='
714
    beosthreads
715
    os2threads
716
    pthreads
717
    w32threads
718
'
719

    
720
ARCH_LIST='
721
    alpha
722
    armv4l
723
    bfin
724
    ia64
725
    m68k
726
    mips
727
    parisc
728
    powerpc
729
    s390
730
    sh4
731
    sparc
732
    sparc64
733
    x86
734
    x86_32
735
    x86_64
736
'
737

    
738
ARCH_EXT_LIST='
739
    altivec
740
    armv5te
741
    armv6
742
    armvfp
743
    iwmmxt
744
    mmi
745
    mmx
746
    mmx2
747
    neon
748
    ssse3
749
    vis
750
'
751

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

    
813
CMDLINE_SELECT="
814
    $ARCH_EXT_LIST
815
    $CONFIG_LIST
816
    $THREADS_LIST
817
    cross_compile
818
    debug
819
    extra_warnings
820
    logging
821
    optimizations
822
    shared
823
    static
824
    stripping
825
"
826

    
827
PATHS_LIST='
828
    bindir
829
    incdir
830
    libdir
831
    mandir
832
    prefix
833
    shlibdir
834
'
835

    
836
CMDLINE_SET="
837
    $PATHS_LIST
838
    arch
839
    build_suffix
840
    cc
841
    cpu
842
    cross_prefix
843
    extra_version
844
    logfile
845
    source_path
846
    target_os
847
"
848

    
849
# code dependency declarations
850

    
851
# architecture extensions
852
altivec_deps="powerpc"
853
armv5te_deps="armv4l"
854
armv6_deps="armv4l"
855
armvfp_deps="armv4l"
856
iwmmxt_deps="armv4l"
857
mmi_deps="mips"
858
mmx_deps="x86"
859
mmx2_deps="x86 mmx"
860
neon_deps="armv4l"
861
ssse3_deps="x86"
862
vis_deps="sparc"
863

    
864
# decoders / encoders
865
ac3_decoder_deps="gpl"
866
dxa_decoder_deps="zlib"
867
eac3_decoder_deps="gpl"
868
flashsv_decoder_deps="zlib"
869
flashsv_encoder_deps="zlib"
870
mlp_decoder_deps="mlp_parser"
871
mpeg_xvmc_decoder_deps="xvmc"
872
png_decoder_deps="zlib"
873
png_encoder_deps="zlib"
874
zmbv_decoder_deps="zlib"
875
zmbv_encoder_deps="zlib"
876

    
877
# external libraries
878
libamr_nb_decoder_deps="libamr_nb"
879
libamr_nb_encoder_deps="libamr_nb"
880
libamr_wb_decoder_deps="libamr_wb"
881
libamr_wb_encoder_deps="libamr_wb"
882
libdirac_decoder_deps="libdirac !libschroedinger"
883
libdirac_encoder_deps="libdirac"
884
libfaac_encoder_deps="libfaac"
885
libfaad_decoder_deps="libfaad"
886
libfaadbin_decoder_extralibs='$ldl'
887
libgsm_decoder_deps="libgsm"
888
libgsm_encoder_deps="libgsm"
889
libgsm_ms_decoder_deps="libgsm"
890
libgsm_ms_encoder_deps="libgsm"
891
libmp3lame_encoder_deps="libmp3lame"
892
libschroedinger_decoder_deps="libschroedinger"
893
libschroedinger_encoder_deps="libschroedinger"
894
libtheora_encoder_deps="libtheora"
895
libvorbis_encoder_deps="libvorbis"
896
libx264_encoder_deps="libx264"
897
libxvid_encoder_deps="libxvid"
898
mpeg4aac_decoder_deps="libfaad"
899

    
900
# demuxers / muxers
901
ac3_demuxer_deps="ac3_parser"
902
audio_beos_demuxer_deps="audio_beos"
903
audio_beos_demuxer_extralibs="-lmedia -lbe"
904
audio_beos_muxer_deps="audio_beos"
905
audio_beos_muxer_extralibs="-lmedia -lbe"
906
avisynth_demuxer_deps="avisynth"
907
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
908
dirac_demuxer_deps="dirac_parser"
909
dv1394_demuxer_deps="dv1394 dv_demuxer"
910
libdc1394_demuxer_deps="libdc1394"
911
libnut_demuxer_deps="libnut"
912
libnut_muxer_deps="libnut"
913
mp3_demuxer_deps="mpegaudio_parser"
914
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
915
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
916
redir_demuxer_deps="network"
917
rtp_muxer_deps="network rtp_protocol"
918
rtsp_demuxer_deps="sdp_demuxer"
919
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
920
v4l_demuxer_deps="linux_videodev_h"
921
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
922
vfwcap_demuxer_deps="capCreateCaptureWindow"
923
vfwcap_demuxer_extralibs="-lvfw32"
924
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
925
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
926

    
927
# protocols
928
http_protocol_deps="network"
929
rtp_protocol_deps="udp_protocol"
930
tcp_protocol_deps="network"
931
udp_protocol_deps="network"
932

    
933
# filters
934
movie_filter_deps="avfilter_lavf"
935

    
936
# programs
937
ffplay_deps="sdl"
938
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
939
ffserver_extralibs='$ldl'
940
vhook_extralibs='$ldl'
941

    
942

    
943
# default parameters
944

    
945
logfile="config.err"
946

    
947
# installation paths
948
prefix_default="/usr/local"
949
bindir_default='${prefix}/bin'
950
incdir_default='${prefix}/include'
951
libdir_default='${prefix}/lib'
952
mandir_default='${prefix}/share/man'
953
shlibdir_default="$libdir_default"
954

    
955
# toolchain
956
cc_default="gcc"
957
yasmexe="yasm"
958
ar="ar"
959
nm="nm"
960
ranlib="ranlib"
961
strip="strip"
962
asmalign_pot="unknown"
963
ln_s="ln -sf"
964
objformat="elf"
965

    
966
# machine
967
arch=`uname -m`
968
cpu="generic"
969

    
970
# OS
971
target_os=$(tolower $(uname -s))
972

    
973
# libraries
974
enable bzlib
975
enable zlib
976

    
977
# configurable options
978
enable debug
979
enable ffmpeg
980
enable ffplay
981
enable ffserver
982
enable ipv6
983
enable mpegaudio_hp
984
enable network
985
enable optimizations
986
enable protocols
987
enable static
988
enable stripping
989
vhook="default"
990

    
991
# build settings
992
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
993
SHFLAGS='-shared -Wl,-soname,$$(@F)'
994
VHOOKSHFLAGS='$(SHFLAGS)'
995
FFSERVERLDFLAGS=-Wl,-E
996
LIBPREF="lib"
997
LIBSUF=".a"
998
FULLNAME='$(NAME)$(BUILDSUF)'
999
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1000
SLIBPREF="lib"
1001
SLIBSUF=".so"
1002
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1003
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1004
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1005
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1006

    
1007
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1008
# full relative path for objects in subdirectories for non-recursive Make.
1009
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1010

    
1011
# find source path
1012
source_path="`dirname \"$0\"`"
1013
enable source_path_used
1014
if test -z "$source_path" -o "$source_path" = "." ; then
1015
    source_path="`pwd`"
1016
    disable source_path_used
1017
else
1018
    source_path="`cd \"$source_path\"; pwd`"
1019
    echo "$source_path" | grep -q '[[:blank:]]' &&
1020
        die "Out of tree builds are impossible with whitespace in source path."
1021
fi
1022

    
1023
FFMPEG_CONFIGURATION="$@"
1024

    
1025
find_things(){
1026
    thing=$1
1027
    pattern=$2
1028
    file=$source_path/$3
1029
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1030
}
1031

    
1032
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1033
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1034
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1035
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1036
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1037
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1038
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1039
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1040
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1041
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1042

    
1043
enable $ARCH_EXT_LIST \
1044
       $DECODER_LIST \
1045
       $ENCODER_LIST \
1046
       $PARSER_LIST \
1047
       $BSF_LIST \
1048
       $DEMUXER_LIST \
1049
       $MUXER_LIST \
1050
       $FILTER_LIST \
1051
       $PROTOCOL_LIST \
1052
       $INDEV_LIST \
1053
       $OUTDEV_LIST \
1054

    
1055
die_unknown(){
1056
    echo "Unknown option \"$1\"."
1057
    echo "See $0 --help for available options."
1058
    exit 1
1059
}
1060

    
1061
show_list() {
1062
    suffix=_$1
1063
    shift
1064
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1065
    exit 0
1066
}
1067

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

    
1116
disabled logging && logfile=/dev/null
1117

    
1118
echo "# $0 $@" > $logfile
1119
set >> $logfile
1120

    
1121
cc_default="${cross_prefix}${cc_default}"
1122
yasmexe="${cross_prefix}${yasmexe}"
1123
ar="${cross_prefix}${ar}"
1124
nm="${cross_prefix}${nm}"
1125
ranlib="${cross_prefix}${ranlib}"
1126
strip="${cross_prefix}${strip}"
1127

    
1128
set_default cc
1129

    
1130
# set temporary file name
1131
if test ! -z "$TMPDIR" ; then
1132
    TMPDIR1="${TMPDIR}"
1133
elif test ! -z "$TEMPDIR" ; then
1134
    TMPDIR1="${TEMPDIR}"
1135
else
1136
    TMPDIR1="/tmp"
1137
fi
1138

    
1139
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1140
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1141
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1142
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1143
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1144
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1145

    
1146
check_cflags -std=c99
1147

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

    
1215
enable $arch
1216
enabled_any x86_32 x86_64 && enable x86
1217
enabled     sparc64       && enable sparc
1218

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

    
1376
    *)
1377
        target_os="${target_os}-UNKNOWN"
1378
        ;;
1379
esac
1380

    
1381
set_default $PATHS_LIST
1382

    
1383
add_extralibs $osextralibs
1384

    
1385
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1386
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1387

    
1388
test -n "$cross_prefix" && enable cross_compile
1389

    
1390
# we need to build at least one lib type
1391
if ! enabled_any static shared; then
1392
    cat <<EOF
1393
At least one library type must be built.
1394
Specify --enable-static to build the static libraries or --enable-shared to
1395
build the shared libraries as well. To only build the shared libraries specify
1396
--disable-static in addition to --enable-shared.
1397
EOF
1398
    exit 1;
1399
fi
1400

    
1401
disabled static && LIBNAME=""
1402

    
1403
if enabled_any libfaad libfaadbin ; then
1404
    if check_header faad.h; then
1405
        check_cc <<EOF
1406
#include <faad.h>
1407
#ifndef FAAD2_VERSION
1408
ok faad1
1409
#endif
1410
int main(void) { return 0; }
1411
EOF
1412
        test $? = 0 && enable libfaad2
1413
    else
1414
        die "FAAD test failed."
1415
    fi
1416
fi
1417

    
1418

    
1419
if ! enabled gpl; then
1420
    die_gpl_disabled(){
1421
        name=$1
1422
        shift
1423
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1424
    }
1425
    die_gpl_disabled "The Postprocessing code" postproc
1426
    die_gpl_disabled "libx264"                 libx264
1427
    die_gpl_disabled "libxvidcore"             libxvid
1428
    die_gpl_disabled "FAAD2"                   libfaad2
1429
    die_gpl_disabled "The X11 grabber"         x11grab
1430
    die_gpl_disabled "The software scaler"     swscale
1431
fi
1432

    
1433
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1434
    die "libamr is nonfree and --enable-nonfree is not specified."
1435
fi
1436

    
1437
check_deps $ARCH_EXT_LIST
1438

    
1439
test -z "$need_memalign" && need_memalign="$mmx"
1440

    
1441
#Darwin CC versions
1442
if test $target_os = darwin; then
1443
    if $cc -v 2>&1 | grep -q xlc; then
1444
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1445
    else
1446
        add_cflags "-pipe"
1447
        check_cflags "-force_cpusubtype_ALL"
1448
        check_cflags "-Wno-sign-compare"
1449
        enabled shared || check_cflags -mdynamic-no-pic
1450
    fi
1451
fi
1452

    
1453
disabled optimizations || check_cflags -fomit-frame-pointer
1454

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

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

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

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

    
1562
check_asm inline_asm '""'
1563

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

    
1577
    # check wether EBX is available on x86
1578
    check_asm ebx_available '"":::"%ebx"'
1579

    
1580
    # check whether binutils is new enough to compile SSSE3/MMX2
1581
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1582
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1583

    
1584
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1585

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

    
1597
# check for assembler specific support
1598

    
1599
if test $arch = "powerpc"; then
1600
    check_asm dcbzl '"dcbzl 0, 1"'
1601
fi
1602

    
1603
# check for SIMD availability
1604

    
1605
# AltiVec flags: The FSF version of GCC differs from the Apple version
1606
if enabled altivec; then
1607
    check_cflags -maltivec -mabi=altivec &&
1608
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1609
        check_cflags -faltivec
1610

    
1611
    # check if our compiler supports Motorola AltiVec C API
1612
    check_cc <<EOF || disable altivec
1613
$inc_altivec_h
1614
int main(void) {
1615
    vector signed int v1, v2, v3;
1616
    v1 = vec_add(v2,v3);
1617
    return 0;
1618
}
1619
EOF
1620

    
1621
    # check if our compiler supports braces for vector declarations
1622
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1623
$inc_altivec_h
1624
int main (void) { (vector int) {1}; return 0; }
1625
EOF
1626
fi
1627

    
1628
# We have to check if pld is a nop and disable it.
1629
enabled armv4l  && check_asm pld     '"pld [r0]"'
1630
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1631
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1632
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1633
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1634
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1635
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1636
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1637

    
1638
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1639

    
1640
# ---
1641
# big/little-endian test
1642
check_cc <<EOF || die "endian test failed"
1643
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1644
EOF
1645
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1646

    
1647
# ---
1648
# check availability of some header files
1649

    
1650
if check_func dlopen; then
1651
    ldl=
1652
elif check_func dlopen -ldl; then
1653
    ldl=-ldl
1654
fi
1655

    
1656
check_func  fork
1657
check_func  gethrtime
1658
check_func  getrusage
1659
check_func  inet_aton $network_extralibs
1660
check_func  memalign
1661
check_func  mkstemp
1662
check_func_headers windows.h GetProcessTimes
1663

    
1664
check_header conio.h
1665
check_header dlfcn.h
1666
check_header malloc.h
1667
check_header poll.h
1668
check_header sys/mman.h
1669
check_header sys/resource.h
1670
check_header sys/select.h
1671
check_header termios.h
1672

    
1673
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1674
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1675
fi
1676

    
1677
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1678
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1679

    
1680
# check for some common methods of building with pthread support
1681
# do this before the optional library checks as some of them require pthreads
1682
if enabled pthreads; then
1683
    if check_func pthread_create; then
1684
        :
1685
    elif check_func pthread_create -pthread; then
1686
        add_cflags -pthread
1687
        add_extralibs -pthread
1688
    elif check_func pthread_create -pthreads; then
1689
        add_cflags -pthreads
1690
        add_extralibs -pthreads
1691
    elif check_func pthread_create -lpthreadGC2; then
1692
        add_extralibs -lpthreadGC2
1693
    elif ! check_lib pthread.h pthread_create -lpthread; then
1694
        die "ERROR: can't find pthreads library"
1695
    fi
1696
fi
1697

    
1698
for thread in $THREADS_LIST; do
1699
    if enabled $thread; then
1700
        test -n "$thread_type" &&
1701
            die "ERROR: Only one thread type must be selected." ||
1702
            thread_type="$thread"
1703
    fi
1704
done
1705

    
1706
check_lib math.h sin -lm
1707

    
1708
# test for C99 functions in math.h
1709
for func in llrint lrint lrintf round roundf; do
1710
    check_exec <<EOF && enable $func || disable $func
1711
#include <math.h>
1712
int main(void) { return ($func(3.999f) > 0)?0:1; }
1713
EOF
1714
done
1715

    
1716
# these are off by default, so fail if requested and not available
1717
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1718
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1719
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1720
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" &&
1721
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1722
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1723
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1724
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1725
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1726
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1727
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1728
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1729
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1730
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1731
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1732
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1733
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1734
                        die "ERROR: libx264 version must be >= 0.65."; }
1735
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1736
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1737

    
1738
# libdc1394 check
1739
if enabled libdc1394; then
1740
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1741
        enable libdc1394_2; } ||
1742
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1743
        enable libdc1394_1; } ||
1744
    die "ERROR: No version of libdc1394 found "
1745
fi
1746

    
1747

    
1748
_restrict=
1749
for restrict_keyword in restrict __restrict__ __restrict; do
1750
    check_cc <<EOF && _restrict=$restrict_keyword && break
1751
void foo(char * $restrict_keyword p);
1752
EOF
1753
done
1754

    
1755
test "$vhook" = "default" && vhook="$dlopen"
1756

    
1757
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1758
    disable vhook
1759
    echo
1760
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1761
    echo "Patches welcome."
1762
    echo
1763
fi
1764

    
1765
if enabled vhook; then
1766
    check_ldflags -rdynamic
1767
    check_ldflags -export-dynamic
1768
fi
1769

    
1770
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1771
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1772

    
1773
##########################################
1774
# SDL check
1775

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

    
1802
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1803

    
1804
##########################################
1805
# Network check
1806

    
1807
if enabled network; then
1808
    check_type sys/socket.h socklen_t
1809
    # Prefer arpa/inet.h over winsock2
1810
    if check_header arpa/inet.h ; then
1811
        check_func closesocket
1812
    elif check_header winsock2.h ; then
1813
        network_extralibs="-lws2_32"
1814
        check_type ws2tcpip.h socklen_t
1815
        check_func_headers winsock2.h closesocket
1816
    fi
1817
fi
1818

    
1819
##########################################
1820
# IPv6 check
1821

    
1822
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1823
#include <sys/types.h>
1824
#include <sys/socket.h>
1825
#include <netinet/in.h>
1826
#include <netdb.h>
1827
int main(void) {
1828
    struct sockaddr_storage saddr;
1829
    struct ipv6_mreq mreq6;
1830
    getaddrinfo(0,0,0,0);
1831
    getnameinfo(0,0,0,0,0,0,0);
1832
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1833
}
1834
EOF
1835

    
1836
check_header linux/videodev.h
1837
check_header linux/videodev2.h
1838
check_header sys/videoio.h
1839

    
1840
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1841

    
1842
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1843
{ check_header dev/bktr/ioctl_meteor.h &&
1844
  check_header dev/bktr/ioctl_bt848.h; } ||
1845
{ check_header machine/ioctl_meteor.h &&
1846
  check_header machine/ioctl_bt848.h; } ||
1847
{ check_header dev/video/meteor/ioctl_meteor.h &&
1848
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1849
check_header dev/ic/bt8xx.h
1850

    
1851
check_header sys/soundcard.h
1852
check_header soundcard.h
1853

    
1854
# deal with the X11 frame grabber
1855
enabled x11grab                         &&
1856
check_header X11/Xlib.h                 &&
1857
check_header X11/extensions/XShm.h      &&
1858
check_func XOpenDisplay -lX11           &&
1859
check_func XShmCreateImage -lX11 -lXext
1860

    
1861
enabled debug && add_cflags -g"$debuglevel"
1862

    
1863
# add some useful compiler flags if supported
1864
check_cflags -Wdeclaration-after-statement
1865
check_cflags -Wall
1866
check_cflags -Wno-switch
1867
check_cflags -Wdisabled-optimization
1868
check_cflags -Wpointer-arith
1869
check_cflags -Wredundant-decls
1870
check_cflags -Wno-pointer-sign
1871
check_cflags -Wcast-qual
1872
check_cflags -Wwrite-strings
1873
check_cflags -Wtype-limits
1874
enabled extra_warnings && check_cflags -Winline
1875

    
1876
# add some linker flags
1877
check_ldflags -Wl,--warn-common
1878
check_ldflags -Wl,--as-needed
1879
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'
1880
check_ldflags -Wl,-Bsymbolic
1881

    
1882
if enabled small; then
1883
    check_cflags -Os            # not all compilers support -Os
1884
    optimizations="small"
1885
elif enabled optimizations; then
1886
    if $cc -v 2>&1 | grep -q xlc; then
1887
        add_cflags  "-O5"
1888
        add_ldflags "-O5"
1889
    else
1890
        add_cflags "-O3"
1891
    fi
1892
fi
1893
check_cflags -fno-math-errno
1894
check_cflags -fno-signed-zeros
1895

    
1896
# add some flags for Intel C Compiler
1897
if $cc --version 2> /dev/null | grep -q Intel; then
1898
  # Just warnings, no remarks
1899
  check_cflags -w1
1900
  # -wd: Disable following warnings
1901
  # 144, 167, 556: -Wno-pointer-sign
1902
  # 10006: ignoring unknown option -fno-signed-zeros
1903
  # 10156: ignoring option '-W'; no argument required
1904
  check_cflags -wd144,167,556,10006,10156
1905
  # 11030: Warning unknown option --as-needed
1906
  # 10156: ignoring option '-export'; no argument required
1907
  check_ldflags -wd10156,11030
1908
  # Allow to compile with optimizations
1909
  check_ldflags -march=$cpu
1910
fi
1911

    
1912
# PIC flags for shared library objects where they are needed
1913
if enabled shared; then
1914
    # LIBOBJFLAGS may have already been set in the OS configuration
1915
    if test -z "$LIBOBJFLAGS" ; then
1916
        case "$arch" in
1917
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1918
        esac
1919
    fi
1920
fi
1921

    
1922
if enabled gprof; then
1923
    add_cflags  "-p"
1924
    add_ldflags "-p"
1925
fi
1926

    
1927
VHOOKCFLAGS="-fPIC"
1928

    
1929
# Find out if the .align argument is a power of two or not.
1930
if test $asmalign_pot = "unknown"; then
1931
    disable asmalign_pot
1932
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
1933
fi
1934

    
1935
enabled_any $DECODER_LIST      && enable decoders
1936
enabled_any $ENCODER_LIST      && enable encoders
1937
enabled_any $BSF_LIST          && enable bsfs
1938
enabled_any $DEMUXER_LIST      && enable demuxers
1939
enabled_any $MUXER_LIST        && enable muxers
1940
enabled_any $FILTER_LIST       && enable filters
1941
enabled_any $INDEV_LIST        && enable demuxers
1942
enabled_any $OUTDEV_LIST       && enable muxers
1943
enabled_any $PROTOCOL_LIST     && enable protocols
1944

    
1945
enabled_any $THREADS_LIST      && enable threads
1946

    
1947
check_deps $CONFIG_LIST       \
1948
           $HAVE_LIST         \
1949
           $DECODER_LIST      \
1950
           $ENCODER_LIST      \
1951
           $PARSER_LIST       \
1952
           $BSF_LIST          \
1953
           $DEMUXER_LIST      \
1954
           $MUXER_LIST        \
1955
           $FILTER_LIST       \
1956
           $INDEV_LIST        \
1957
           $OUTDEV_LIST       \
1958
           $PROTOCOL_LIST     \
1959

    
1960
enabled libdc1394 && append pkg_requires "libraw1394"
1961
enabled libdirac  && append pkg_requires "dirac"
1962
enabled libtheora && append pkg_requires "theora"
1963
enabled libvorbis && append pkg_requires "vorbisenc"
1964

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

    
2044
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2045
    echo "Enabled ${type}s:"
2046
    eval list=\$$(toupper $type)_LIST
2047
    for part in $list; do
2048
        enabled $part && echo ${part%_*}
2049
    done | sort | pr -3 -t
2050
    echo
2051
done
2052

    
2053
license="LGPL"
2054
if enabled nonfree; then
2055
    license="unredistributable"
2056
elif enabled gpl; then
2057
    license="GPL"
2058
fi
2059

    
2060
echo "License: $license"
2061

    
2062
echo "Creating config.mak and config.h..."
2063

    
2064
echo "# Automatically generated by configure - do not modify!" > config.mak
2065
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2066
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2067
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2068
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2069

    
2070
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2071
echo "prefix=$prefix" >> config.mak
2072
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2073
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2074
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2075
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2076
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2077
echo "CC=$cc" >> config.mak
2078
echo "YASM=$yasmexe" >> config.mak
2079
echo "AR=$ar" >> config.mak
2080
echo "RANLIB=$ranlib" >> config.mak
2081
echo "LN_S=$ln_s" >> config.mak
2082
enabled stripping &&
2083
    echo "STRIP=$strip" >> config.mak ||
2084
    echo "STRIP=echo ignoring strip" >> config.mak
2085

    
2086
echo "OPTFLAGS=$CFLAGS" >> config.mak
2087
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2088
echo "LDFLAGS=$LDFLAGS" >> config.mak
2089
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2090
echo "SHFLAGS=$SHFLAGS" >> config.mak
2091
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2092
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2093
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2094
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2095
echo "BUILD_STATIC=$static" >> config.mak
2096
echo "BUILDSUF=$build_suffix" >> config.mak
2097
echo "FULLNAME=$FULLNAME" >> config.mak
2098
echo "LIBPREF=$LIBPREF" >> config.mak
2099
echo "LIBSUF=$LIBSUF" >> config.mak
2100
echo "LIBNAME=$LIBNAME" >> config.mak
2101
echo "SLIBPREF=$SLIBPREF" >> config.mak
2102
echo "SLIBSUF=$SLIBSUF" >> config.mak
2103
echo "EXESUF=$EXESUF" >> config.mak
2104
echo "EXTRA_VERSION=$extra_version" >> config.mak
2105
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2106

    
2107
if enabled bigendian; then
2108
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2109
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2110
fi
2111

    
2112
if enabled sdl; then
2113
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2114
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2115
fi
2116
if enabled texi2html; then
2117
    echo "BUILD_DOC=yes" >> config.mak
2118
fi
2119

    
2120
get_version(){
2121
    name=$1
2122
    file=$source_path/$2
2123
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2124
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2125
    lcname=$(tolower $name)
2126
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2127
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2128
}
2129

    
2130
get_version LIBSWSCALE  libswscale/swscale.h
2131
get_version LIBPOSTPROC libpostproc/postprocess.h
2132
get_version LIBAVCODEC  libavcodec/avcodec.h
2133
get_version LIBAVDEVICE libavdevice/avdevice.h
2134
get_version LIBAVFORMAT libavformat/avformat.h
2135
get_version LIBAVUTIL   libavutil/avutil.h
2136
get_version LIBAVFILTER libavfilter/avfilter.h
2137

    
2138
if enabled shared; then
2139
    echo "BUILD_SHARED=yes" >> config.mak
2140
    echo "PIC=-fPIC -DPIC" >> config.mak
2141
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2142
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2143
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2144
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2145
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2146
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2147
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2148
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2149
fi
2150
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2151
echo "EXTRALIBS=$extralibs" >> config.mak
2152

    
2153
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2154
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2155
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2156
                                      $DECODER_LIST      \
2157
                                      $ENCODER_LIST      \
2158
                                      $PARSER_LIST       \
2159
                                      $BSF_LIST          \
2160
                                      $DEMUXER_LIST      \
2161
                                      $MUXER_LIST        \
2162
                                      $FILTER_LIST       \
2163
                                      $PROTOCOL_LIST     \
2164
                                      $INDEV_LIST        \
2165
                                      $OUTDEV_LIST       \
2166

    
2167
echo "#define restrict $_restrict" >> $TMPH
2168

    
2169
if enabled small; then
2170
    echo "#define av_always_inline"  >> $TMPH
2171
fi
2172

    
2173
echo "SRC_PATH=\"$source_path\"" >> config.mak
2174
echo "SRC_PATH_BARE=$source_path" >> config.mak
2175
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2176

    
2177
# Apparently it's not possible to portably echo a backslash.
2178
enabled asmalign_pot &&
2179
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2180
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2181

    
2182
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2183

    
2184
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2185

    
2186
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2187
cmp -s $TMPH config.h &&
2188
    echo "config.h is unchanged" ||
2189
    mv -f $TMPH config.h
2190

    
2191
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2192

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

    
2237

    
2238
# build pkg-config files
2239

    
2240
pkgconfig_generate(){
2241
name=$1
2242
shortname=${name#lib}
2243
comment=$2
2244
version=$3
2245
libs=$4
2246
requires=$5
2247
cat <<EOF > $name/$name.pc
2248
prefix=$prefix
2249
exec_prefix=\${prefix}
2250
libdir=$libdir
2251
includedir=$incdir
2252

    
2253
Name: $name
2254
Description: $comment
2255
Version: $version
2256
Requires: $(disabled shared && echo $requires)
2257
Requires.private: $(enabled shared && echo $requires)
2258
Conflicts:
2259
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2260
Libs.private: $(enabled shared && echo $libs)
2261
Cflags: -I\${includedir}
2262
EOF
2263
cat <<EOF > $name/$name-uninstalled.pc
2264
prefix=
2265
exec_prefix=
2266
libdir=\${pcfiledir}
2267
includedir=${source_path}
2268

    
2269
Name: $name
2270
Description: $comment
2271
Version: $version
2272
Requires: $requires
2273
Conflicts:
2274
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2275
Cflags: -I\${includedir}
2276
EOF
2277
}
2278

    
2279
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2280
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2281
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2282
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2283
enabled avfilter &&
2284
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2285
enabled postproc &&
2286
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2287
if enabled swscale; then
2288
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2289
else
2290
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2291
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2292
fi