Statistics
| Branch: | Revision:

ffmpeg / configure @ 1b6e8b73

History | View | Annotate | Download (65.8 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_func_headers(){
505
    log check_func_headers "$@"
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_func_headers "$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
    sys_videoio_h
790
    termios_h
791
    threads
792
    winsock2_h
793
    yasm
794
"
795

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

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

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

    
831
# code dependency declarations
832

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

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

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

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

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

    
914
# protocols
915
http_protocol_deps="network"
916
rtp_protocol_deps="udp_protocol"
917
tcp_protocol_deps="network"
918
udp_protocol_deps="network"
919

    
920
# filters
921
movie_filter_deps="avfilter_lavf"
922

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

    
929

    
930
# default parameters
931

    
932
logfile="config.err"
933

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

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

    
953
# machine
954
arch=`uname -m`
955
cpu="generic"
956

    
957
# OS
958
target_os=$(tolower $(uname -s))
959

    
960
# libraries
961
enable bzlib
962
enable zlib
963

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

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

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

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

    
1009
FFMPEG_CONFIGURATION="$@"
1010

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

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

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

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

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

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

    
1102
disabled logging && logfile=/dev/null
1103

    
1104
echo "# $0 $@" > $logfile
1105
set >> $logfile
1106

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

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

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

    
1130
check_cflags -fasm
1131
check_cflags -std=c99
1132

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

    
1198
enable $arch
1199
enabled_any x86_32 x86_64 && enable x86
1200
enabled     sparc64       && enable sparc
1201

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

    
1355
    *)
1356
        target_os="${target_os}-UNKNOWN"
1357
        ;;
1358
esac
1359

    
1360
set_default $PATHS_LIST
1361

    
1362
add_extralibs $osextralibs
1363

    
1364
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1365
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1366

    
1367
test -n "$cross_prefix" && enable cross_compile
1368

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

    
1380
disabled static && LIBNAME=""
1381

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

    
1397

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

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

    
1417
check_deps $ARCH_EXT_LIST
1418

    
1419
test -z "$need_memalign" && need_memalign="$mmx"
1420

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

    
1433
disabled optimizations || check_cflags -fomit-frame-pointer
1434

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

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

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

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

    
1538
check_asm inline_asm '""'
1539

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

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

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

    
1560
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1561

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

    
1573
# check for assembler specific support
1574

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

    
1586
# check for SIMD availability
1587

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

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

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

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

    
1621
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1622

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

    
1630
# ---
1631
# check availability of some header files
1632

    
1633
if check_func dlopen; then
1634
    ldl=
1635
elif check_func dlopen -ldl; then
1636
    ldl=-ldl
1637
fi
1638

    
1639
check_func  fork
1640
check_func  gethrtime
1641
check_func  getrusage
1642
check_func  inet_aton $network_extralibs
1643
check_func  memalign
1644
check_func  mkstemp
1645
check_func_headers windows.h GetProcessTimes
1646

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

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

    
1661
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1662
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1663

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

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

    
1690
check_lib math.h sin -lm
1691

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

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

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

    
1730

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

    
1738
test "$vhook" = "default" && vhook="$dlopen"
1739

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

    
1748
if enabled vhook; then
1749
    check_ldflags -rdynamic
1750
    check_ldflags -export-dynamic
1751
fi
1752

    
1753
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1754
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1755

    
1756
##########################################
1757
# SDL check
1758

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

    
1785
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1786

    
1787
##########################################
1788
# Network check
1789

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

    
1802
##########################################
1803
# IPv6 check
1804

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

    
1819
check_header linux/videodev.h
1820
check_header linux/videodev2.h
1821
check_header sys/videoio.h
1822

    
1823
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1824

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

    
1834
check_header sys/soundcard.h
1835
check_header soundcard.h
1836

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

    
1844
enabled debug && add_cflags -g"$debuglevel"
1845

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

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

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

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

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

    
1905
if enabled gprof; then
1906
    add_cflags  "-p"
1907
    add_ldflags "-p"
1908
fi
1909

    
1910
VHOOKCFLAGS="-fPIC"
1911

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

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

    
1928
enabled_any $THREADS_LIST      && enable threads
1929

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

    
1943
enabled libdc1394 && append pkg_requires "libraw1394"
1944
enabled libdirac  && append pkg_requires "dirac"
1945
enabled libtheora && append pkg_requires "theora"
1946
enabled libvorbis && append pkg_requires "vorbisenc"
1947

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

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

    
2035
license="LGPL"
2036
if enabled nonfree; then
2037
    license="unredistributable"
2038
elif enabled gpl; then
2039
    license="GPL"
2040
fi
2041

    
2042
echo "License: $license"
2043

    
2044
echo "Creating config.mak and config.h..."
2045

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

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

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

    
2088
if enabled bigendian; then
2089
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2090
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2091
fi
2092

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

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

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

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

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

    
2148
echo "#define restrict $_restrict" >> $TMPH
2149

    
2150
if enabled small; then
2151
    echo "#define av_always_inline"  >> $TMPH
2152
fi
2153

    
2154
echo "SRC_PATH=\"$source_path\"" >> config.mak
2155
echo "SRC_PATH_BARE=$source_path" >> config.mak
2156
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2157

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

    
2163
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2164

    
2165
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2166

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

    
2172
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2173

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

    
2218

    
2219
# build pkg-config files
2220

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

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

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

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