Statistics
| Branch: | Revision:

ffmpeg / configure @ d8d12c15

History | View | Annotate | Download (65.6 KB)

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

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

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

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

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

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

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

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

    
193
log(){
194
    echo "$@" >> $logfile
195
}
196

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

    
203
echolog(){
204
    log "$@"
205
    echo "$@"
206
}
207

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

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

    
235
tolower(){
236
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
237
}
238

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

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

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

    
266
enable(){
267
    set_all yes $*
268
}
269

    
270
disable(){
271
    set_all no $*
272
}
273

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

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

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

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

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

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

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

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

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

    
330
        eval dep_all="\$${cfg}_deps"
331
        eval dep_any="\$${cfg}_deps_any"
332

    
333
        pushvar cfg dep_all dep_any
334
        check_deps $dep_all $dep_any
335
        popvar cfg dep_all dep_any
336

    
337
        enabled_all $dep_all || disable $cfg
338
        enabled_any $dep_any || disable $cfg
339

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

    
345
        disable ${cfg}_checking
346
    done
347
}
348

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

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

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

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

    
387
temp_cflags(){
388
    save_flags
389
    CFLAGS="$CFLAGS $*"
390
}
391

    
392
temp_ldflags(){
393
    save_flags
394
    LDFLAGS="$LDFLAGS $*"
395
}
396

    
397
temp_extralibs(){
398
    save_flags
399
    extralibs="$extralibs $*"
400
}
401

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

    
409
add_cflags(){
410
    append CFLAGS "$@"
411
}
412

    
413
add_ldflags(){
414
    append LDFLAGS "$@"
415
}
416

    
417
add_extralibs(){
418
    append extralibs "$@"
419
}
420

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
554
check_exec_crash(){
555
    code=`cat`
556

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

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

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

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

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

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

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

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

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

    
652
CONFIG_LIST="
653
    $COMPONENT_LIST
654
    avfilter
655
    avfilter_lavf
656
    avisynth
657
    beos_netserver
658
    bzlib
659
    ffmpeg
660
    ffplay
661
    ffserver
662
    gpl
663
    gprof
664
    gray
665
    hardcoded_tables
666
    ipv6
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
    extra_version
827
    logfile
828
    source_path
829
    target_os
830
"
831

    
832
# code dependency declarations
833

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

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

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

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

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

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

    
919
# filters
920
movie_filter_deps="avfilter_lavf"
921

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

    
928

    
929
# default parameters
930

    
931
logfile="config.err"
932

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

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

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

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

    
959
# libraries
960
enable bzlib
961
enable zlib
962

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

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

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

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

    
1008
FFMPEG_CONFIGURATION="$@"
1009

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

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

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

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

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

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

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

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

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

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

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

    
1129
check_cflags -fasm
1130
check_cflags -std=c99
1131

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

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

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

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

    
1359
set_default $PATHS_LIST
1360

    
1361
add_extralibs $osextralibs
1362

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

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

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

    
1379
disabled static && LIBNAME=""
1380

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

    
1396

    
1397
if ! enabled gpl; then
1398
    die_gpl_disabled(){
1399
        name=$1
1400
        shift
1401
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1402
    }
1403
    die_gpl_disabled "The Postprocessing code" postproc
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_func_headers 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 libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1701
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1702
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1703
                   && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1704
                   && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1705
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1706
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1707
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1708
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1709
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1710
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1711
                        && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1712
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1713
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1714
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1715
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1716
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1717

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

    
1727

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

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

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

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

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

    
1753
##########################################
1754
# SDL check
1755

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

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

    
1784
##########################################
1785
# Network check
1786

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

    
1799
##########################################
1800
# IPv6 check
1801

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

    
1816
check_header linux/videodev.h
1817
check_header linux/videodev2.h
1818
check_header sys/videoio.h
1819

    
1820
check_func_headers "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 2> /dev/null | 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*|mips*) 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
if test "$extra_version" != ""; then
1954
    echo "version string suffix     $extra_version"
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 "libamr-nb support         ${libamr_nb-no}"
2006
echo "libamr-wb support         ${libamr_wb-no}"
2007
echo "libdc1394 support         ${libdc1394-no}"
2008
echo "libdirac enabled          ${libdirac-no}"
2009
echo "libfaac enabled           ${libfaac-no}"
2010
echo "libfaad enabled           ${libfaad-no}"
2011
echo "libfaad dlopened          ${libfaadbin-no}"
2012
echo "libgsm enabled            ${libgsm-no}"
2013
echo "libmp3lame enabled        ${libmp3lame-no}"
2014
echo "libnut enabled            ${libnut-no}"
2015
echo "libschroedinger enabled   ${libschroedinger-no}"
2016
echo "libtheora enabled         ${libtheora-no}"
2017
echo "libvorbis enabled         ${libvorbis-no}"
2018
echo "libx264 enabled           ${libx264-no}"
2019
echo "libxvid enabled           ${libxvid-no}"
2020
echo "zlib enabled              ${zlib-no}"
2021
echo "bzlib enabled             ${bzlib-no}"
2022
echo
2023

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

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

    
2040
echo "License: $license"
2041

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2217

    
2218
# build pkg-config files
2219

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

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

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

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