Statistics
| Branch: | Revision:

ffmpeg / configure @ 304d586d

History | View | Annotate | Download (65.5 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
448
check_yasm(){
449
    log check_yasm "$@"
450
    echo "$1" > $TMPS
451
    log_file $TMPS
452
    shift 1
453
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
454
}
455

    
456
check_ld(){
457
    log check_ld "$@"
458
    check_cc || return
459
    flags=''
460
    libs=''
461
    for f; do
462
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
463
    done
464
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
465
}
466

    
467
check_cflags(){
468
    log check_cflags "$@"
469
    check_cc "$@" <<EOF && add_cflags "$@"
470
int x;
471
EOF
472
}
473

    
474
check_ldflags(){
475
    log check_ldflags "$@"
476
    check_ld "$@" <<EOF && add_ldflags "$@"
477
int main(void){ return 0; }
478
EOF
479
}
480

    
481
check_header(){
482
    log check_header "$@"
483
    header=$1
484
    shift
485
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
486
    disable $var
487
    check_cpp "$@" <<EOF && enable $var
488
#include <$header>
489
int x;
490
EOF
491
}
492

    
493
check_func(){
494
    log check_func "$@"
495
    func=$1
496
    shift
497
    disable $func
498
    check_ld "$@" <<EOF && enable $func
499
extern int $func();
500
int main(void){ $func(); }
501
EOF
502
}
503

    
504
check_func2(){
505
    log check_func2 "$@"
506
    headers=$1
507
    func=$2
508
    shift 2
509
    disable $func
510
    incs=""
511
    for hdr in $headers; do
512
        incs="$incs
513
#include <$hdr>"
514
    done
515
    check_ld "$@" <<EOF && enable $func
516
$incs
517
int main(int argc, char **argv){
518
    (void) $func;
519
    return 0;
520
}
521
EOF
522
}
523

    
524
check_lib(){
525
    log check_lib "$@"
526
    header="$1"
527
    func="$2"
528
    shift 2
529
    temp_extralibs "$@"
530
    check_header $header && check_func $func && add_extralibs "$@"
531
    err=$?
532
    restore_flags
533
    return $err
534
}
535

    
536
check_lib2(){
537
    log check_lib2 "$@"
538
    headers="$1"
539
    func="$2"
540
    shift 2
541
    temp_extralibs "$@"
542
    check_func2 "$headers" $func && add_extralibs "$@"
543
    err=$?
544
    restore_flags
545
    return $err
546
}
547

    
548
check_exec(){
549
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
550
}
551

    
552
check_exec_crash(){
553
    code=`cat`
554

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

    
561
    (check_exec "$@") >> $logfile 2>&1 <<EOF
562
#include <signal.h>
563
static void sighandler(int sig){
564
    raise(SIGTERM);
565
}
566
int main(void){
567
    signal(SIGILL, sighandler);
568
    signal(SIGFPE, sighandler);
569
    signal(SIGSEGV, sighandler);
570
#ifdef SIGBUS
571
    signal(SIGBUS, sighandler);
572
#endif
573
    { $code }
574
}
575
EOF
576
}
577

    
578
check_type(){
579
    log check_type "$@"
580
    headers=$1
581
    type=$2
582
    shift 2
583
    disable $type
584
    incs=""
585
    for hdr in $headers; do
586
        incs="$incs
587
#include <$hdr>"
588
    done
589
    check_cc "$@" <<EOF && enable $type
590
$incs
591
$type v;
592
EOF
593
}
594

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

    
603
require2(){
604
    name="$1"
605
    headers="$2"
606
    func="$3"
607
    shift 3
608
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
609
}
610

    
611
check_foo_config(){
612
    cfg=$1
613
    pkg=$2
614
    header=$3
615
    func=$4
616
    shift 4
617
    disable $cfg
618
    check_cmd ${pkg}-config --version
619
    err=$?
620
    if test "$err" = 0; then
621
        temp_cflags `${pkg}-config --cflags`
622
        temp_extralibs `${pkg}-config --libs`
623
        check_lib "$@" $header $func && enable $cfg
624
    fi
625
    return $err
626
}
627

    
628
apply(){
629
    file=$1
630
    shift
631
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
632
}
633

    
634
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
635
# system-dependent things.
636

    
637
COMPONENT_LIST="
638
    bsfs
639
    decoders
640
    demuxers
641
    encoders
642
    filters
643
    indevs
644
    muxers
645
    outdevs
646
    parsers
647
    protocols
648
"
649

    
650
CONFIG_LIST="
651
    $COMPONENT_LIST
652
    avfilter
653
    avfilter_lavf
654
    avisynth
655
    beos_netserver
656
    bzlib
657
    ffmpeg
658
    ffplay
659
    ffserver
660
    gpl
661
    gprof
662
    gray
663
    hardcoded_tables
664
    ipv6
665
    liba52
666
    liba52bin
667
    libamr_nb
668
    libamr_wb
669
    libdc1394
670
    libdirac
671
    libfaac
672
    libfaad
673
    libfaadbin
674
    libgsm
675
    libmp3lame
676
    libnut
677
    libschroedinger
678
    libtheora
679
    libvorbis
680
    libx264
681
    libxvid
682
    memalign_hack
683
    mlib
684
    mpegaudio_hp
685
    network
686
    nonfree
687
    postproc
688
    powerpc_perf
689
    small
690
    swscale
691
    vhook
692
    x11grab
693
    zlib
694
"
695

    
696
THREADS_LIST='
697
    beosthreads
698
    os2threads
699
    pthreads
700
    w32threads
701
'
702

    
703
ARCH_LIST='
704
    alpha
705
    armv4l
706
    bfin
707
    ia64
708
    m68k
709
    mips
710
    parisc
711
    powerpc
712
    s390
713
    sh4
714
    sparc
715
    sparc64
716
    x86
717
    x86_32
718
    x86_64
719
'
720

    
721
ARCH_EXT_LIST='
722
    altivec
723
    armv5te
724
    armv6
725
    armvfp
726
    iwmmxt
727
    mmi
728
    mmx
729
    mmx2
730
    neon
731
    ssse3
732
    vis
733
'
734

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

    
795
CMDLINE_SELECT="
796
    $ARCH_EXT_LIST
797
    $CONFIG_LIST
798
    $THREADS_LIST
799
    cross_compile
800
    debug
801
    extra_warnings
802
    logging
803
    optimizations
804
    shared
805
    static
806
    stripping
807
"
808

    
809
PATHS_LIST='
810
    bindir
811
    incdir
812
    libdir
813
    mandir
814
    prefix
815
    shlibdir
816
'
817

    
818
CMDLINE_SET="
819
    $PATHS_LIST
820
    arch
821
    build_suffix
822
    cc
823
    cpu
824
    cross_prefix
825
    logfile
826
    source_path
827
    target_os
828
"
829

    
830
# code dependency declarations
831

    
832
# architecture extensions
833
altivec_deps="powerpc"
834
armv5te_deps="armv4l"
835
armv6_deps="armv4l"
836
armvfp_deps="armv4l"
837
iwmmxt_deps="armv4l"
838
mmi_deps="mips"
839
mmx_deps="x86"
840
mmx2_deps="x86 mmx"
841
neon_deps="armv4l"
842
ssse3_deps="x86"
843
vis_deps="sparc"
844

    
845
# system headers and functions
846
byteswap_h_deps="!armv4l"
847

    
848
# decoders / encoders
849
ac3_decoder_deps="gpl !liba52"
850
dxa_decoder_deps="zlib"
851
flashsv_decoder_deps="zlib"
852
flashsv_encoder_deps="zlib"
853
mlp_decoder_deps="mlp_parser"
854
mpeg_xvmc_decoder_deps="xvmc"
855
png_decoder_deps="zlib"
856
png_encoder_deps="zlib"
857
zmbv_decoder_deps="zlib"
858
zmbv_encoder_deps="zlib"
859

    
860
# external libraries
861
liba52_decoder_deps="liba52"
862
liba52bin_decoder_extralibs='$ldl'
863
libamr_nb_decoder_deps="libamr_nb"
864
libamr_nb_encoder_deps="libamr_nb"
865
libamr_wb_decoder_deps="libamr_wb"
866
libamr_wb_encoder_deps="libamr_wb"
867
libdirac_decoder_deps="libdirac !libschroedinger"
868
libdirac_encoder_deps="libdirac"
869
libfaac_encoder_deps="libfaac"
870
libfaad_decoder_deps="libfaad"
871
libfaadbin_decoder_extralibs='$ldl'
872
libgsm_decoder_deps="libgsm"
873
libgsm_encoder_deps="libgsm"
874
libgsm_ms_decoder_deps="libgsm"
875
libgsm_ms_encoder_deps="libgsm"
876
libmp3lame_encoder_deps="libmp3lame"
877
libschroedinger_decoder_deps="libschroedinger"
878
libschroedinger_encoder_deps="libschroedinger"
879
libtheora_encoder_deps="libtheora"
880
libvorbis_encoder_deps="libvorbis"
881
libx264_encoder_deps="libx264"
882
libxvid_encoder_deps="libxvid"
883
mpeg4aac_decoder_deps="libfaad"
884

    
885
# demuxers / muxers
886
ac3_demuxer_deps="ac3_parser"
887
audio_beos_demuxer_deps="audio_beos"
888
audio_beos_demuxer_extralibs="-lmedia -lbe"
889
audio_beos_muxer_deps="audio_beos"
890
audio_beos_muxer_extralibs="-lmedia -lbe"
891
avisynth_demuxer_deps="avisynth"
892
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
893
dirac_demuxer_deps="dirac_parser"
894
dv1394_demuxer_deps="dv1394 dv_demuxer"
895
libdc1394_demuxer_deps="libdc1394"
896
libnut_demuxer_deps="libnut"
897
libnut_muxer_deps="libnut"
898
mp3_demuxer_deps="mpegaudio_parser"
899
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
900
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
901
redir_demuxer_deps="network"
902
rtp_muxer_deps="network rtp_protocol"
903
rtsp_demuxer_deps="sdp_demuxer"
904
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
905
v4l_demuxer_deps="linux_videodev_h"
906
v4l2_demuxer_deps="linux_videodev2_h"
907
vfwcap_demuxer_deps="capCreateCaptureWindow"
908
vfwcap_demuxer_extralibs="-lvfw32"
909
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
910
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
911

    
912
# protocols
913
http_protocol_deps="network"
914
rtp_protocol_deps="udp_protocol"
915
tcp_protocol_deps="network"
916
udp_protocol_deps="network"
917

    
918
# filters
919
movie_filter_deps="avfilter_lavf"
920

    
921
# programs
922
ffplay_deps="sdl"
923
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
924
ffserver_extralibs='$ldl'
925
vhook_extralibs='$ldl'
926

    
927

    
928
# default parameters
929

    
930
logfile="config.err"
931

    
932
# installation paths
933
prefix_default="/usr/local"
934
bindir_default='${prefix}/bin'
935
incdir_default='${prefix}/include'
936
libdir_default='${prefix}/lib'
937
mandir_default='${prefix}/share/man'
938
shlibdir_default="$libdir_default"
939

    
940
# toolchain
941
cc="gcc"
942
yasmexe="yasm"
943
ar="ar"
944
nm="nm"
945
ranlib="ranlib"
946
strip="strip"
947
asmalign_pot="unknown"
948
ln_s="ln -sf"
949
objformat="elf"
950

    
951
# machine
952
arch=`uname -m`
953
cpu="generic"
954

    
955
# OS
956
target_os=$(tolower $(uname -s))
957

    
958
# libraries
959
enable bzlib
960
enable zlib
961

    
962
# configurable options
963
enable debug
964
enable ffmpeg
965
enable ffplay
966
enable ffserver
967
enable ipv6
968
enable mpegaudio_hp
969
enable network
970
enable optimizations
971
enable protocols
972
enable static
973
enable stripping
974
vhook="default"
975

    
976
# build settings
977
SHFLAGS='-shared -Wl,-soname,$$(@F)'
978
VHOOKSHFLAGS='$(SHFLAGS)'
979
FFSERVERLDFLAGS=-Wl,-E
980
LIBPREF="lib"
981
LIBSUF=".a"
982
FULLNAME='$(NAME)$(BUILDSUF)'
983
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
984
SLIBPREF="lib"
985
SLIBSUF=".so"
986
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
987
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
988
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
989
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
990

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

    
994
# find source path
995
source_path="`dirname \"$0\"`"
996
enable source_path_used
997
if test -z "$source_path" -o "$source_path" = "." ; then
998
    source_path="`pwd`"
999
    disable source_path_used
1000
else
1001
    source_path="`cd \"$source_path\"; pwd`"
1002
    echo "$source_path" | grep -q '[[:blank:]]' &&
1003
        die "Out of tree builds are impossible with whitespace in source path."
1004
fi
1005

    
1006
FFMPEG_CONFIGURATION="$@"
1007

    
1008
find_things(){
1009
    thing=$1
1010
    pattern=$2
1011
    file=$source_path/$3
1012
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1013
}
1014

    
1015
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1016
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1017
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1018
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1019
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1020
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1021
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1022
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1023
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1024
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1025

    
1026
enable $ARCH_EXT_LIST \
1027
       $DECODER_LIST \
1028
       $ENCODER_LIST \
1029
       $PARSER_LIST \
1030
       $BSF_LIST \
1031
       $DEMUXER_LIST \
1032
       $MUXER_LIST \
1033
       $FILTER_LIST \
1034
       $PROTOCOL_LIST \
1035
       $INDEV_LIST \
1036
       $OUTDEV_LIST \
1037

    
1038
die_unknown(){
1039
    echo "Unknown option \"$1\"."
1040
    echo "See $0 --help for available options."
1041
    exit 1
1042
}
1043

    
1044
show_list() {
1045
    suffix=_$1
1046
    shift
1047
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1048
    exit 0
1049
}
1050

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

    
1099
disabled logging && logfile=/dev/null
1100

    
1101
echo "# $0 $@" > $logfile
1102
set >> $logfile
1103

    
1104
cc="${cross_prefix}${cc}"
1105
yasmexe="${cross_prefix}${yasmexe}"
1106
ar="${cross_prefix}${ar}"
1107
nm="${cross_prefix}${nm}"
1108
ranlib="${cross_prefix}${ranlib}"
1109
strip="${cross_prefix}${strip}"
1110

    
1111
# set temporary file name
1112
if test ! -z "$TMPDIR" ; then
1113
    TMPDIR1="${TMPDIR}"
1114
elif test ! -z "$TEMPDIR" ; then
1115
    TMPDIR1="${TEMPDIR}"
1116
else
1117
    TMPDIR1="/tmp"
1118
fi
1119

    
1120
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1121
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1122
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1123
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1124
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1125
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1126

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

    
1192
enable $arch
1193
enabled_any x86_32 x86_64 && enable x86
1194
enabled     sparc64       && enable sparc
1195

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

    
1348
    *)
1349
        target_os="${target_os}-UNKNOWN"
1350
        ;;
1351
esac
1352

    
1353
set_default $PATHS_LIST
1354

    
1355
add_extralibs $osextralibs
1356

    
1357
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1358
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1359

    
1360
test -n "$cross_prefix" && enable cross_compile
1361

    
1362
# we need to build at least one lib type
1363
if ! enabled_any static shared; then
1364
    cat <<EOF
1365
At least one library type must be built.
1366
Specify --enable-static to build the static libraries or --enable-shared to
1367
build the shared libraries as well. To only build the shared libraries specify
1368
--disable-static in addition to --enable-shared.
1369
EOF
1370
    exit 1;
1371
fi
1372

    
1373
disabled static && LIBNAME=""
1374

    
1375
if enabled_any libfaad libfaadbin ; then
1376
    if check_header faad.h; then
1377
        check_cc << EOF
1378
#include <faad.h>
1379
#ifndef FAAD2_VERSION
1380
ok faad1
1381
#endif
1382
int main(void) { return 0; }
1383
EOF
1384
        test $? = 0 && enable libfaad2
1385
    else
1386
        die "FAAD test failed."
1387
    fi
1388
fi
1389

    
1390

    
1391
if ! enabled gpl; then
1392
    die_gpl_disabled(){
1393
        name=$1
1394
        shift
1395
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1396
    }
1397
    die_gpl_disabled "The Postprocessing code" postproc
1398
    die_gpl_disabled "liba52"                  liba52
1399
    die_gpl_disabled "libx264"                 libx264
1400
    die_gpl_disabled "libxvidcore"             libxvid
1401
    die_gpl_disabled "FAAD2"                   libfaad2
1402
    die_gpl_disabled "The X11 grabber"         x11grab
1403
    die_gpl_disabled "The software scaler"     swscale
1404
fi
1405

    
1406
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1407
    die "libamr is nonfree and --enable-nonfree is not specified."
1408
fi
1409

    
1410
check_deps $ARCH_EXT_LIST
1411

    
1412
test -z "$need_memalign" && need_memalign="$mmx"
1413

    
1414
#Darwin CC versions
1415
if test $target_os = darwin; then
1416
    if $cc -v 2>&1 | grep -q xlc; then
1417
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1418
    else
1419
        add_cflags "-pipe"
1420
        check_cflags "-force_cpusubtype_ALL"
1421
        check_cflags "-Wno-sign-compare"
1422
        enabled shared || check_cflags -mdynamic-no-pic
1423
    fi
1424
fi
1425

    
1426
disabled optimizations || check_cflags -fomit-frame-pointer
1427

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

    
1497
# make sure we can execute files in $TMPDIR
1498
cat > $TMPSH 2>> $logfile <<EOF
1499
#! /bin/sh
1500
EOF
1501
chmod +x $TMPSH >> $logfile 2>&1
1502
if ! $TMPSH >> $logfile 2>&1; then
1503
    cat <<EOF
1504
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1505
variable to another directory and make sure that $TMPDIR1 is not mounted
1506
noexec.
1507
EOF
1508
    die "Sanity test failed."
1509
fi
1510
rm $TMPSH
1511

    
1512
# compiler sanity check
1513
check_exec <<EOF
1514
int main(void){ return 0; }
1515
EOF
1516
if test "$?" != 0; then
1517
    echo "$cc is unable to create an executable file."
1518
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1519
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1520
        echo "Only do this if you know what cross compiling means."
1521
    fi
1522
    die "C compiler test failed."
1523
fi
1524

    
1525
check_cc <<EOF || die "Symbol mangling check failed."
1526
int ff_extern;
1527
EOF
1528
sym=$($nm -P -g $TMPO | grep ff_extern)
1529
extern_prefix=${sym%%ff_extern*}
1530

    
1531
check_asm inline_asm '""'
1532

    
1533
if enabled x86; then
1534
    # check whether EBP is available on x86
1535
    # As 'i' is stored on the stack, this program will crash
1536
    # if the base pointer is used to access it because the
1537
    # base pointer is cleared in the inline assembly code.
1538
    check_exec_crash <<EOF && enable ebp_available
1539
    volatile int i=0;
1540
    asm volatile (
1541
        "xorl %%ebp, %%ebp"
1542
    ::: "%ebp");
1543
    return i;
1544
EOF
1545

    
1546
    # check wether EBX is available on x86
1547
    check_asm ebx_available '"":::"%ebx"'
1548

    
1549
    # check whether binutils is new enough to compile SSSE3/MMX2
1550
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1551
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1552

    
1553
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1554

    
1555
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1556
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1557
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1558
    case "$objformat" in
1559
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1560
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1561
    esac
1562
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1563
fi
1564

    
1565
# check for assembler specific support
1566

    
1567
if test $arch = "powerpc"; then
1568
check_cc <<EOF && enable dcbzl
1569
int main(void) {
1570
    register long zero = 0;
1571
    char data[1024];
1572
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1573
return 0;
1574
}
1575
EOF
1576
fi
1577

    
1578
# check for SIMD availability
1579

    
1580
# AltiVec flags: The FSF version of GCC differs from the Apple version
1581
if enabled altivec; then
1582
    check_cflags -maltivec -mabi=altivec &&
1583
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1584
        check_cflags -faltivec
1585

    
1586
    # check if our compiler supports Motorola AltiVec C API
1587
    check_cc <<EOF || disable altivec
1588
$inc_altivec_h
1589
int main(void) {
1590
    vector signed int v1, v2, v3;
1591
    v1 = vec_add(v2,v3);
1592
    return 0;
1593
}
1594
EOF
1595

    
1596
    # check if our compiler supports braces for vector declarations
1597
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1598
$inc_altivec_h
1599
int main (void) { (vector int) {1}; return 0; }
1600
EOF
1601
fi
1602

    
1603
# We have to check if pld is a nop and disable it.
1604
enabled armv4l  && check_asm pld     '"pld [r0]"'
1605
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1606
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1607
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1608
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1609
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1610
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1611
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1612

    
1613
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1614

    
1615
# ---
1616
# big/little-endian test
1617
check_cc <<EOF || die "endian test failed"
1618
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1619
EOF
1620
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1621

    
1622
# ---
1623
# check availability of some header files
1624

    
1625
if check_func dlopen; then
1626
    ldl=
1627
elif check_func dlopen -ldl; then
1628
    ldl=-ldl
1629
fi
1630

    
1631
check_func  fork
1632
check_func  gethrtime
1633
check_func  getrusage
1634
check_func  inet_aton $network_extralibs
1635
check_func  memalign
1636
check_func  mkstemp
1637
check_func2 windows.h GetProcessTimes
1638

    
1639
check_header byteswap.h
1640
check_header conio.h
1641
check_header dlfcn.h
1642
check_header malloc.h
1643
check_header sys/mman.h
1644
check_header sys/resource.h
1645
check_header termios.h
1646

    
1647
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1648
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1649
fi
1650

    
1651
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1652
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1653

    
1654
# ffserver uses poll(),
1655
# if it's not found we can emulate it using select().
1656
if enabled ffserver; then
1657
    check_header poll.h
1658
    check_header sys/select.h
1659
fi
1660

    
1661
# check for some common methods of building with pthread support
1662
# do this before the optional library checks as some of them require pthreads
1663
if enabled pthreads; then
1664
    if check_func pthread_create; then
1665
        :
1666
    elif check_func pthread_create -pthread; then
1667
        add_cflags -pthread
1668
        add_extralibs -pthread
1669
    elif check_func pthread_create -pthreads; then
1670
        add_cflags -pthreads
1671
        add_extralibs -pthreads
1672
    elif check_func pthread_create -lpthreadGC2; then
1673
        add_extralibs -lpthreadGC2
1674
    elif ! check_lib pthread.h pthread_create -lpthread; then
1675
        die "ERROR: can't find pthreads library"
1676
    fi
1677
fi
1678

    
1679
for thread in $THREADS_LIST; do
1680
    if enabled $thread; then
1681
        test -n "$thread_type" &&
1682
            die "ERROR: Only one thread type must be selected." ||
1683
            thread_type="$thread"
1684
    fi
1685
done
1686

    
1687
check_lib math.h sin -lm
1688

    
1689
# test for C99 functions in math.h
1690
for func in llrint lrint lrintf round roundf; do
1691
    check_exec <<EOF && enable $func || disable $func
1692
#define _ISOC9X_SOURCE  1
1693
#include <math.h>
1694
int main(void) { return ($func(3.999f) > 0)?0:1; }
1695
EOF
1696
done
1697

    
1698
# these are off by default, so fail if requested and not available
1699
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1700
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1701
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1702
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1703
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1704
                   && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1705
                   && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1706
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1707
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1708
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1709
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1710
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1711
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1712
                        && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1713
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1714
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1715
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1716
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1717
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1718

    
1719
# libdc1394 check
1720
if enabled libdc1394; then
1721
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1722
        enable libdc1394_2; } ||
1723
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1724
        enable libdc1394_1; } ||
1725
    die "ERROR: No version of libdc1394 found "
1726
fi
1727

    
1728

    
1729
_restrict=
1730
for restrict_keyword in restrict __restrict__ __restrict; do
1731
    check_cc <<EOF && _restrict=$restrict_keyword && break
1732
void foo(char * $restrict_keyword p);
1733
EOF
1734
done
1735

    
1736
test "$vhook" = "default" && vhook="$dlopen"
1737

    
1738
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1739
    disable vhook
1740
    echo
1741
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1742
    echo "Patches welcome."
1743
    echo
1744
fi
1745

    
1746
if enabled vhook; then
1747
    check_ldflags -rdynamic
1748
    check_ldflags -export-dynamic
1749
fi
1750

    
1751
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1752
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1753

    
1754
##########################################
1755
# SDL check
1756

    
1757
disable sdl_too_old
1758
disable sdl
1759
SDL_CONFIG="${cross_prefix}sdl-config"
1760
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1761
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1762
    temp_cflags $sdl_cflags
1763
    temp_extralibs `"${SDL_CONFIG}" --libs`
1764
    if check_lib2 SDL.h SDL_Init; then
1765
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1766
        if test "$_sdlversion" -lt 121 ; then
1767
            enable sdl_too_old
1768
        else
1769
            enable sdl
1770
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1771
#include <SDL.h>
1772
int main(int argc, char **argv){
1773
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1774
    int w = vi->current_w;
1775
    return 0;
1776
}
1777
EOF
1778
        fi
1779
    fi
1780
    restore_flags
1781
fi
1782

    
1783
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1784

    
1785
##########################################
1786
# Network check
1787

    
1788
if enabled network; then
1789
    check_type sys/socket.h socklen_t
1790
    # Prefer arpa/inet.h over winsock2
1791
    if check_header arpa/inet.h ; then
1792
        check_func closesocket
1793
    elif check_header winsock2.h ; then
1794
        network_extralibs="-lws2_32"
1795
        check_type ws2tcpip.h socklen_t
1796
        check_func2 winsock2.h closesocket
1797
    fi
1798
fi
1799

    
1800
##########################################
1801
# IPv6 check
1802

    
1803
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1804
#include <sys/types.h>
1805
#include <sys/socket.h>
1806
#include <netinet/in.h>
1807
#include <netdb.h>
1808
int main(void) {
1809
    struct sockaddr_storage saddr;
1810
    struct ipv6_mreq mreq6;
1811
    getaddrinfo(0,0,0,0);
1812
    getnameinfo(0,0,0,0,0,0,0);
1813
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1814
}
1815
EOF
1816

    
1817
check_header linux/videodev.h
1818
check_header linux/videodev2.h
1819

    
1820
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1821

    
1822
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1823
{ check_header dev/bktr/ioctl_meteor.h &&
1824
  check_header dev/bktr/ioctl_bt848.h; } ||
1825
{ check_header machine/ioctl_meteor.h &&
1826
  check_header machine/ioctl_bt848.h; } ||
1827
{ check_header dev/video/meteor/ioctl_meteor.h &&
1828
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1829
check_header dev/ic/bt8xx.h
1830

    
1831
check_header sys/soundcard.h
1832
check_header soundcard.h
1833

    
1834
# deal with the X11 frame grabber
1835
enabled x11grab                         &&
1836
check_header X11/Xlib.h                 &&
1837
check_header X11/extensions/XShm.h      &&
1838
check_func XOpenDisplay -lX11           &&
1839
check_func XShmCreateImage -lX11 -lXext
1840

    
1841
enabled debug && add_cflags -g"$debuglevel"
1842

    
1843
# add some useful compiler flags if supported
1844
check_cflags -Wdeclaration-after-statement
1845
check_cflags -Wall
1846
check_cflags -Wno-switch
1847
check_cflags -Wdisabled-optimization
1848
check_cflags -Wpointer-arith
1849
check_cflags -Wredundant-decls
1850
check_cflags -Wno-pointer-sign
1851
check_cflags -Wcast-qual
1852
check_cflags -Wwrite-strings
1853
check_cflags -Wtype-limits
1854
enabled extra_warnings && check_cflags -Winline
1855

    
1856
# add some linker flags
1857
check_ldflags -Wl,--warn-common
1858
check_ldflags -Wl,--as-needed
1859
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'
1860
check_ldflags -Wl,-Bsymbolic
1861

    
1862
if enabled small; then
1863
    check_cflags -Os            # not all compilers support -Os
1864
    optimizations="small"
1865
elif enabled optimizations; then
1866
    if $cc -v 2>&1 | grep -q xlc; then
1867
        add_cflags  "-O5"
1868
        add_ldflags "-O5"
1869
    else
1870
        add_cflags "-O3"
1871
    fi
1872
fi
1873
check_cflags -fno-math-errno
1874
check_cflags -fno-signed-zeros
1875

    
1876
# add some flags for Intel C Compiler
1877
if $cc --version | grep -q Intel; then
1878
  # Just warnings, no remarks
1879
  check_cflags -w1
1880
  # -wd: Disable following warnings
1881
  # 144, 167, 556: -Wno-pointer-sign
1882
  # 10006: ignoring unknown option -fno-signed-zeros
1883
  # 10156: ignoring option '-W'; no argument required
1884
  check_cflags -wd144,167,556,10006,10156
1885
  # 11030: Warning unknown option --as-needed
1886
  # 10156: ignoring option '-export'; no argument required
1887
  check_ldflags -wd10156,11030
1888
  # Allow to compile with optimizations
1889
  check_ldflags -march=$cpu
1890
fi
1891

    
1892
# PIC flags for shared library objects where they are needed
1893
if enabled shared; then
1894
    # LIBOBJFLAGS may have already been set in the OS configuration
1895
    if test -z "$LIBOBJFLAGS" ; then
1896
        case "$arch" in
1897
            x86_64|ia64|alpha|sparc*|power*|parisc*) LIBOBJFLAGS='$(PIC)' ;;
1898
        esac
1899
    fi
1900
fi
1901

    
1902
if enabled gprof; then
1903
    add_cflags  "-p"
1904
    add_ldflags "-p"
1905
fi
1906

    
1907
VHOOKCFLAGS="-fPIC"
1908

    
1909
# Find out if the .align argument is a power of two or not.
1910
if test $asmalign_pot = "unknown"; then
1911
    disable asmalign_pot
1912
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1913
fi
1914

    
1915
enabled_any $DECODER_LIST      && enable decoders
1916
enabled_any $ENCODER_LIST      && enable encoders
1917
enabled_any $BSF_LIST          && enable bsfs
1918
enabled_any $DEMUXER_LIST      && enable demuxers
1919
enabled_any $MUXER_LIST        && enable muxers
1920
enabled_any $FILTER_LIST       && enable filters
1921
enabled_any $INDEV_LIST        && enable demuxers
1922
enabled_any $OUTDEV_LIST       && enable muxers
1923
enabled_any $PROTOCOL_LIST     && enable protocols
1924

    
1925
enabled_any $THREADS_LIST      && enable threads
1926

    
1927
check_deps $CONFIG_LIST       \
1928
           $HAVE_LIST         \
1929
           $DECODER_LIST      \
1930
           $ENCODER_LIST      \
1931
           $PARSER_LIST       \
1932
           $BSF_LIST          \
1933
           $DEMUXER_LIST      \
1934
           $MUXER_LIST        \
1935
           $FILTER_LIST       \
1936
           $INDEV_LIST        \
1937
           $OUTDEV_LIST       \
1938
           $PROTOCOL_LIST     \
1939

    
1940
enabled libdc1394 && append pkg_requires "libraw1394"
1941
enabled libdirac  && append pkg_requires "dirac"
1942
enabled libtheora && append pkg_requires "theora"
1943
enabled libvorbis && append pkg_requires "vorbisenc"
1944

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

    
2022
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2023
    echo "Enabled ${type}s:"
2024
    eval list=\$$(toupper $type)_LIST
2025
    for part in $list; do
2026
        enabled $part && echo ${part%_*}
2027
    done | sort | pr -3 -t
2028
    echo
2029
done
2030

    
2031
license="LGPL"
2032
if enabled nonfree; then
2033
    license="unredistributable"
2034
elif enabled gpl; then
2035
    license="GPL"
2036
fi
2037

    
2038
echo "License: $license"
2039

    
2040
echo "Creating config.mak and config.h..."
2041

    
2042
echo "# Automatically generated by configure - do not modify!" > config.mak
2043
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2044
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2045
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2046
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2047

    
2048
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2049
echo "prefix=$prefix" >> config.mak
2050
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2051
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2052
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2053
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2054
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2055
echo "CC=$cc" >> config.mak
2056
echo "YASM=$yasmexe" >> config.mak
2057
echo "AR=$ar" >> config.mak
2058
echo "RANLIB=$ranlib" >> config.mak
2059
echo "LN_S=$ln_s" >> config.mak
2060
enabled stripping &&
2061
    echo "STRIP=$strip" >> config.mak ||
2062
    echo "STRIP=echo ignoring strip" >> config.mak
2063

    
2064
echo "OPTFLAGS=$CFLAGS" >> config.mak
2065
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2066
echo "LDFLAGS=$LDFLAGS" >> config.mak
2067
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2068
echo "SHFLAGS=$SHFLAGS" >> config.mak
2069
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2070
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2071
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2072
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2073
echo "BUILD_STATIC=$static" >> config.mak
2074
echo "BUILDSUF=$build_suffix" >> config.mak
2075
echo "FULLNAME=$FULLNAME" >> config.mak
2076
echo "LIBPREF=$LIBPREF" >> config.mak
2077
echo "LIBSUF=$LIBSUF" >> config.mak
2078
echo "LIBNAME=$LIBNAME" >> config.mak
2079
echo "SLIBPREF=$SLIBPREF" >> config.mak
2080
echo "SLIBSUF=$SLIBSUF" >> config.mak
2081
echo "EXESUF=$EXESUF" >> config.mak
2082
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2083

    
2084
if enabled bigendian; then
2085
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2086
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2087
fi
2088

    
2089
if enabled sdl; then
2090
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2091
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2092
fi
2093
if enabled texi2html; then
2094
    echo "BUILD_DOC=yes" >> config.mak
2095
fi
2096

    
2097
get_version(){
2098
    name=$1
2099
    file=$source_path/$2
2100
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2101
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2102
    lcname=$(tolower $name)
2103
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2104
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2105
}
2106

    
2107
get_version LIBSWSCALE  libswscale/swscale.h
2108
get_version LIBPOSTPROC libpostproc/postprocess.h
2109
get_version LIBAVCODEC  libavcodec/avcodec.h
2110
get_version LIBAVDEVICE libavdevice/avdevice.h
2111
get_version LIBAVFORMAT libavformat/avformat.h
2112
get_version LIBAVUTIL   libavutil/avutil.h
2113
get_version LIBAVFILTER libavfilter/avfilter.h
2114

    
2115
if enabled shared; then
2116
    echo "BUILD_SHARED=yes" >> config.mak
2117
    echo "PIC=-fPIC -DPIC" >> config.mak
2118
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2119
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2120
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2121
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2122
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2123
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2124
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2125
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2126
fi
2127
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2128
echo "EXTRALIBS=$extralibs" >> config.mak
2129

    
2130
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2131
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2132
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2133
                                      $DECODER_LIST      \
2134
                                      $ENCODER_LIST      \
2135
                                      $PARSER_LIST       \
2136
                                      $BSF_LIST          \
2137
                                      $DEMUXER_LIST      \
2138
                                      $MUXER_LIST        \
2139
                                      $FILTER_LIST       \
2140
                                      $PROTOCOL_LIST     \
2141
                                      $INDEV_LIST        \
2142
                                      $OUTDEV_LIST       \
2143

    
2144
echo "#define restrict $_restrict" >> $TMPH
2145

    
2146
if enabled small; then
2147
    echo "#define av_always_inline"  >> $TMPH
2148
fi
2149

    
2150
echo "SRC_PATH=\"$source_path\"" >> config.mak
2151
echo "SRC_PATH_BARE=$source_path" >> config.mak
2152
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2153

    
2154
# Apparently it's not possible to portably echo a backslash.
2155
enabled asmalign_pot &&
2156
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2157
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2158

    
2159
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2160

    
2161
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2162

    
2163
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2164
cmp -s $TMPH config.h &&
2165
    echo "config.h is unchanged" ||
2166
    mv -f $TMPH config.h
2167

    
2168
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2169

    
2170
# build tree in object directory if source path is different from current one
2171
if enabled source_path_used; then
2172
    DIRS="\
2173
        doc               \
2174
        libavcodec        \
2175
        libavcodec/alpha  \
2176
        libavcodec/armv4l \
2177
        libavcodec/bfin   \
2178
        libavcodec/i386   \
2179
        libavcodec/mlib   \
2180
        libavcodec/ppc    \
2181
        libavcodec/sh4    \
2182
        libavcodec/sparc  \
2183
        libavdevice       \
2184
        libavfilter       \
2185
        libavformat       \
2186
        libavutil         \
2187
        libpostproc       \
2188
        libswscale        \
2189
        tests             \
2190
        tools             \
2191
        vhook             \
2192
        "
2193
    FILES="\
2194
        Makefile             \
2195
        common.mak           \
2196
        subdir.mak           \
2197
        doc/texi2pod.pl      \
2198
        libavcodec/Makefile  \
2199
        libavdevice/Makefile \
2200
        libavfilter/Makefile \
2201
        libavformat/Makefile \
2202
        libavutil/Makefile   \
2203
        libpostproc/Makefile \
2204
        libswscale/Makefile  \
2205
        "
2206
    for dir in $DIRS ; do
2207
        mkdir -p $dir
2208
    done
2209
    for f in $FILES ; do
2210
        $ln_s "$source_path/$f" $f
2211
    done
2212
fi
2213

    
2214

    
2215
# build pkg-config files
2216

    
2217
pkgconfig_generate(){
2218
name=$1
2219
shortname=${name#lib}
2220
comment=$2
2221
version=$3
2222
libs=$4
2223
requires=$5
2224
cat <<EOF > $name/$name.pc
2225
prefix=$prefix
2226
exec_prefix=\${prefix}
2227
libdir=$libdir
2228
includedir=$incdir
2229

    
2230
Name: $name
2231
Description: $comment
2232
Version: $version
2233
Requires: $(disabled shared && echo $requires)
2234
Requires.private: $(enabled shared && echo $requires)
2235
Conflicts:
2236
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2237
Libs.private: $(enabled shared && echo $libs)
2238
Cflags: -I\${includedir}
2239
EOF
2240
cat <<EOF > $name/$name-uninstalled.pc
2241
prefix=
2242
exec_prefix=
2243
libdir=\${pcfiledir}
2244
includedir=\${pcfiledir}/..
2245

    
2246
Name: $name
2247
Description: $comment
2248
Version: $version
2249
Requires: $requires
2250
Conflicts:
2251
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2252
Cflags: -I\${includedir}
2253
EOF
2254
}
2255

    
2256
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2257
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2258
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2259
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2260
enabled avfilter &&
2261
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2262
enabled postproc &&
2263
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2264
if enabled swscale; then
2265
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2266
else
2267
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2268
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2269
fi