Statistics
| Branch: | Revision:

ffmpeg / configure @ 4869f47e

History | View | Annotate | Download (65.7 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
448
check_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
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
978
SHFLAGS='-shared -Wl,-soname,$$(@F)'
979
VHOOKSHFLAGS='$(SHFLAGS)'
980
FFSERVERLDFLAGS=-Wl,-E
981
LIBPREF="lib"
982
LIBSUF=".a"
983
FULLNAME='$(NAME)$(BUILDSUF)'
984
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
985
SLIBPREF="lib"
986
SLIBSUF=".so"
987
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
988
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
989
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
990
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
991

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

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

    
1007
FFMPEG_CONFIGURATION="$@"
1008

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

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

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

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

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

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

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

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

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

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

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

    
1128
check_cflags -fasm
1129
check_cflags -std=c99
1130

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

    
1196
enable $arch
1197
enabled_any x86_32 x86_64 && enable x86
1198
enabled     sparc64       && enable sparc
1199

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

    
1353
    *)
1354
        target_os="${target_os}-UNKNOWN"
1355
        ;;
1356
esac
1357

    
1358
set_default $PATHS_LIST
1359

    
1360
add_extralibs $osextralibs
1361

    
1362
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1363
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1364

    
1365
test -n "$cross_prefix" && enable cross_compile
1366

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

    
1378
disabled static && LIBNAME=""
1379

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

    
1395

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

    
1411
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1412
    die "libamr is nonfree and --enable-nonfree is not specified."
1413
fi
1414

    
1415
check_deps $ARCH_EXT_LIST
1416

    
1417
test -z "$need_memalign" && need_memalign="$mmx"
1418

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

    
1431
disabled optimizations || check_cflags -fomit-frame-pointer
1432

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

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

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

    
1530
check_cc <<EOF || die "Symbol mangling check failed."
1531
int ff_extern;
1532
EOF
1533
sym=$($nm -P -g $TMPO | grep ff_extern)
1534
extern_prefix=${sym%%ff_extern*}
1535

    
1536
check_asm inline_asm '""'
1537

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

    
1551
    # check wether EBX is available on x86
1552
    check_asm ebx_available '"":::"%ebx"'
1553

    
1554
    # check whether binutils is new enough to compile SSSE3/MMX2
1555
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1556
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1557

    
1558
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1559

    
1560
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1561
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1562
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1563
    case "$objformat" in
1564
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1565
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1566
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1567
    esac
1568
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1569
fi
1570

    
1571
# check for assembler specific support
1572

    
1573
if test $arch = "powerpc"; then
1574
check_cc <<EOF && enable dcbzl
1575
int main(void) {
1576
    register long zero = 0;
1577
    char data[1024];
1578
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1579
return 0;
1580
}
1581
EOF
1582
fi
1583

    
1584
# check for SIMD availability
1585

    
1586
# AltiVec flags: The FSF version of GCC differs from the Apple version
1587
if enabled altivec; then
1588
    check_cflags -maltivec -mabi=altivec &&
1589
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1590
        check_cflags -faltivec
1591

    
1592
    # check if our compiler supports Motorola AltiVec C API
1593
    check_cc <<EOF || disable altivec
1594
$inc_altivec_h
1595
int main(void) {
1596
    vector signed int v1, v2, v3;
1597
    v1 = vec_add(v2,v3);
1598
    return 0;
1599
}
1600
EOF
1601

    
1602
    # check if our compiler supports braces for vector declarations
1603
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1604
$inc_altivec_h
1605
int main (void) { (vector int) {1}; return 0; }
1606
EOF
1607
fi
1608

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

    
1619
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1620

    
1621
# ---
1622
# big/little-endian test
1623
check_cc <<EOF || die "endian test failed"
1624
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1625
EOF
1626
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1627

    
1628
# ---
1629
# check availability of some header files
1630

    
1631
if check_func dlopen; then
1632
    ldl=
1633
elif check_func dlopen -ldl; then
1634
    ldl=-ldl
1635
fi
1636

    
1637
check_func  fork
1638
check_func  gethrtime
1639
check_func  getrusage
1640
check_func  inet_aton $network_extralibs
1641
check_func  memalign
1642
check_func  mkstemp
1643
check_func2 windows.h GetProcessTimes
1644

    
1645
check_header byteswap.h
1646
check_header conio.h
1647
check_header dlfcn.h
1648
check_header malloc.h
1649
check_header poll.h
1650
check_header sys/mman.h
1651
check_header sys/resource.h
1652
check_header sys/select.h
1653
check_header termios.h
1654

    
1655
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1656
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1657
fi
1658

    
1659
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1660
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1661

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

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

    
1688
check_lib math.h sin -lm
1689

    
1690
# test for C99 functions in math.h
1691
for func in llrint lrint lrintf round roundf; do
1692
    check_exec <<EOF && enable $func || disable $func
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 "yasm                      ${yasm-no}"
1956
    echo "MMX enabled               ${mmx-no}"
1957
    echo "CMOV enabled              ${cmov-no}"
1958
    echo "CMOV is fast              ${fast_cmov-no}"
1959
    echo "EBX available             ${ebx_available-no}"
1960
    echo "EBP available             ${ebp_available-no}"
1961
fi
1962
if test $arch = "armv4l"; then
1963
    echo "ARMv5TE enabled           ${armv5te-no}"
1964
    echo "ARMv6 enabled             ${armv6-no}"
1965
    echo "ARM VFP enabled           ${armvfp-no}"
1966
    echo "IWMMXT enabled            ${iwmmxt-no}"
1967
    echo "NEON enabled              ${neon-no}"
1968
fi
1969
if test $arch = "mips"; then
1970
    echo "MMI enabled               ${mmi-no}"
1971
fi
1972
if test $arch = "powerpc"; then
1973
    echo "AltiVec enabled           ${altivec-no}"
1974
    echo "dcbzl available           ${dcbzl-no}"
1975
fi
1976
echo "gprof enabled             ${gprof-no}"
1977
echo "debug symbols             ${debug-no}"
1978
echo "strip symbols             ${stripping-no}"
1979
echo "optimizations             ${optimizations-no}"
1980
echo "static                    ${static-no}"
1981
echo "shared                    ${shared-no}"
1982
echo "postprocessing support    ${postproc-no}"
1983
echo "software scaler enabled   ${swscale-no}"
1984
echo "new filter support        ${avfilter-no}"
1985
echo "filters using lavformat   ${avfilter_lavf-no}"
1986
echo "video hooking             ${vhook-no}"
1987
if enabled vhook; then
1988
    echo "Imlib2 support            ${imlib2-no}"
1989
    echo "FreeType support          ${freetype2-no}"
1990
fi
1991
echo "network support           ${network-no}"
1992
if enabled network; then
1993
    echo "IPv6 support              ${ipv6-no}"
1994
fi
1995
echo "threading support         ${thread_type-no}"
1996
echo "SDL support               ${sdl-no}"
1997
if enabled sdl_too_old; then
1998
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1999
fi
2000
echo "Sun medialib support      ${mlib-no}"
2001
echo "AVISynth enabled          ${avisynth-no}"
2002
echo "liba52 support            ${liba52-no}"
2003
echo "liba52 dlopened           ${liba52bin-no}"
2004
echo "libamr-nb support         ${libamr_nb-no}"
2005
echo "libamr-wb support         ${libamr_wb-no}"
2006
echo "libdc1394 support         ${libdc1394-no}"
2007
echo "libdirac enabled          ${libdirac-no}"
2008
echo "libfaac enabled           ${libfaac-no}"
2009
echo "libfaad enabled           ${libfaad-no}"
2010
echo "libfaad dlopened          ${libfaadbin-no}"
2011
echo "libgsm enabled            ${libgsm-no}"
2012
echo "libmp3lame enabled        ${libmp3lame-no}"
2013
echo "libnut enabled            ${libnut-no}"
2014
echo "libschroedinger enabled   ${libschroedinger-no}"
2015
echo "libtheora enabled         ${libtheora-no}"
2016
echo "libvorbis enabled         ${libvorbis-no}"
2017
echo "libx264 enabled           ${libx264-no}"
2018
echo "libxvid enabled           ${libxvid-no}"
2019
echo "zlib enabled              ${zlib-no}"
2020
echo "bzlib enabled             ${bzlib-no}"
2021
echo
2022

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

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

    
2039
echo "License: $license"
2040

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2215

    
2216
# build pkg-config files
2217

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

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

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

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