Statistics
| Branch: | Revision:

ffmpeg / configure @ 1b71f045

History | View | Annotate | Download (64.6 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-debug          disable debugging symbols"
139
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
140
  echo "                           MPEG audio decoding [default=no]"
141
  echo "  --enable-gray            enable full grayscale support (slower color)"
142
  echo "  --disable-ffmpeg         disable ffmpeg build"
143
  echo "  --disable-ffserver       disable ffserver build"
144
  echo "  --disable-ffplay         disable ffplay build"
145
  echo "  --enable-small           optimize for size instead of speed"
146
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
147
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
148
  echo "  --disable-encoder=NAME   disables encoder NAME"
149
  echo "  --enable-encoder=NAME    enables encoder NAME"
150
  echo "  --disable-decoder=NAME   disables decoder NAME"
151
  echo "  --enable-decoder=NAME    enables decoder NAME"
152
  echo "  --disable-encoders       disables all encoders"
153
  echo "  --disable-decoders       disables all decoders"
154
  echo "  --disable-muxer=NAME     disables muxer NAME"
155
  echo "  --enable-muxer=NAME      enables muxer NAME"
156
  echo "  --disable-muxers         disables all muxers"
157
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
158
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
159
  echo "  --disable-demuxers       disables all demuxers"
160
  echo "  --enable-parser=NAME     enables parser NAME"
161
  echo "  --disable-parser=NAME    disables parser NAME"
162
  echo "  --disable-parsers        disables all parsers"
163
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
164
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
165
  echo "  --disable-bsfs           disables all bitstream filters"
166
  echo "  --enable-protocol=NAME   enables protocol NAME"
167
  echo "  --disable-protocol=NAME  disables protocol NAME"
168
  echo "  --disable-protocols      disables all protocols"
169
  echo "  --disable-devices        disables all devices"
170
  echo "  --list-decoders          show all available decoders"
171
  echo "  --list-encoders          show all available encoders"
172
  echo "  --list-muxers            show all available muxers"
173
  echo "  --list-demuxers          show all available demuxers"
174
  echo "  --list-parsers           show all available parsers"
175
  echo "  --list-protocols         show all available protocols"
176
  echo "  --list-bsfs              show all available bitstream filters"
177
  echo "  --list-indevs            show all available input devices"
178
  echo "  --list-outdevs           show all available output devices"
179
  echo
180
  echo "Developer options (useful when working on FFmpeg itself):"
181
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
182
  echo "  --disable-optimizations  disable compiler optimizations"
183
  echo "  --enable-extra-warnings  enable more compiler warnings"
184
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
185
  echo ""
186
  echo "NOTE: Object files are built at the place where configure is launched."
187
  exit 1
188
}
189

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
447
check_ld(){
448
    log check_ld "$@"
449
    check_cc || return
450
    flags=''
451
    libs=''
452
    for f; do
453
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
454
    done
455
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
456
}
457

    
458
check_cflags(){
459
    log check_cflags "$@"
460
    check_cc "$@" <<EOF && add_cflags "$@"
461
int x;
462
EOF
463
}
464

    
465
check_ldflags(){
466
    log check_ldflags "$@"
467
    check_ld "$@" <<EOF && add_ldflags "$@"
468
int main(void){ return 0; }
469
EOF
470
}
471

    
472
check_header(){
473
    log check_header "$@"
474
    header=$1
475
    shift
476
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
477
    disable $var
478
    check_cpp "$@" <<EOF && enable $var
479
#include <$header>
480
int x;
481
EOF
482
}
483

    
484
check_func(){
485
    log check_func "$@"
486
    func=$1
487
    shift
488
    disable $func
489
    check_ld "$@" <<EOF && enable $func
490
extern int $func();
491
int main(void){ $func(); }
492
EOF
493
}
494

    
495
check_func2(){
496
    log check_func2 "$@"
497
    headers=$1
498
    func=$2
499
    shift 2
500
    disable $func
501
    incs=""
502
    for hdr in $headers; do
503
        incs="$incs
504
#include <$hdr>"
505
    done
506
    check_ld "$@" <<EOF && enable $func
507
$incs
508
int main(int argc, char **argv){
509
    (void) $func;
510
    return 0;
511
}
512
EOF
513
}
514

    
515
check_lib(){
516
    log check_lib "$@"
517
    header="$1"
518
    func="$2"
519
    shift 2
520
    temp_extralibs "$@"
521
    check_header $header && check_func $func && add_extralibs "$@"
522
    err=$?
523
    restore_flags
524
    return $err
525
}
526

    
527
check_lib2(){
528
    log check_lib2 "$@"
529
    headers="$1"
530
    func="$2"
531
    shift 2
532
    temp_extralibs "$@"
533
    check_func2 "$headers" $func && add_extralibs "$@"
534
    err=$?
535
    restore_flags
536
    return $err
537
}
538

    
539
check_exec(){
540
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
541
}
542

    
543
check_exec_crash(){
544
    code=`cat`
545

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

    
552
    (check_exec "$@") >> $logfile 2>&1 <<EOF
553
#include <signal.h>
554
static void sighandler(int sig){
555
    raise(SIGTERM);
556
}
557
int main(void){
558
    signal(SIGILL, sighandler);
559
    signal(SIGFPE, sighandler);
560
    signal(SIGSEGV, sighandler);
561
#ifdef SIGBUS
562
    signal(SIGBUS, sighandler);
563
#endif
564
    { $code }
565
}
566
EOF
567
}
568

    
569
check_type(){
570
    log check_type "$@"
571
    headers=$1
572
    type=$2
573
    shift 2
574
    disable $type
575
    incs=""
576
    for hdr in $headers; do
577
        incs="$incs
578
#include <$hdr>"
579
    done
580
    check_cc "$@" <<EOF && enable $type
581
$incs
582
$type v;
583
EOF
584
}
585

    
586
require(){
587
    name="$1"
588
    header="$2"
589
    func="$3"
590
    shift 3
591
    check_lib $header $func "$@" || die "ERROR: $name not found"
592
}
593

    
594
require2(){
595
    name="$1"
596
    headers="$2"
597
    func="$3"
598
    shift 3
599
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
600
}
601

    
602
check_foo_config(){
603
    cfg=$1
604
    pkg=$2
605
    header=$3
606
    func=$4
607
    shift 4
608
    disable $cfg
609
    check_cmd ${pkg}-config --version
610
    err=$?
611
    if test "$err" = 0; then
612
        temp_cflags `${pkg}-config --cflags`
613
        temp_extralibs `${pkg}-config --libs`
614
        check_lib "$@" $header $func && enable $cfg
615
    fi
616
    return $err
617
}
618

    
619
apply(){
620
    file=$1
621
    shift
622
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
623
}
624

    
625
COMPONENT_LIST="
626
    bsfs
627
    decoders
628
    demuxers
629
    encoders
630
    filters
631
    indevs
632
    muxers
633
    outdevs
634
    parsers
635
    protocols
636
"
637

    
638
CONFIG_LIST="
639
    $COMPONENT_LIST
640
    avfilter
641
    avfilter_lavf
642
    avisynth
643
    beos_netserver
644
    bzlib
645
    ffmpeg
646
    ffplay
647
    ffserver
648
    gpl
649
    gprof
650
    gray
651
    hardcoded_tables
652
    ipv6
653
    liba52
654
    liba52bin
655
    libamr_nb
656
    libamr_wb
657
    libdc1394
658
    libdirac
659
    libfaac
660
    libfaad
661
    libfaadbin
662
    libgsm
663
    libmp3lame
664
    libnut
665
    libschroedinger
666
    libtheora
667
    libvorbis
668
    libx264
669
    libxvid
670
    memalign_hack
671
    mlib
672
    mpegaudio_hp
673
    network
674
    nonfree
675
    postproc
676
    powerpc_perf
677
    small
678
    swscale
679
    vhook
680
    x11grab
681
    zlib
682
"
683

    
684
THREADS_LIST='
685
    beosthreads
686
    os2threads
687
    pthreads
688
    w32threads
689
'
690

    
691
ARCH_LIST='
692
    alpha
693
    armv4l
694
    bfin
695
    ia64
696
    m68k
697
    mips
698
    parisc
699
    powerpc
700
    s390
701
    sh4
702
    sparc
703
    sparc64
704
    x86
705
    x86_32
706
    x86_64
707
'
708

    
709
ARCH_EXT_LIST='
710
    altivec
711
    armv5te
712
    armv6
713
    armvfp
714
    iwmmxt
715
    mmi
716
    mmx
717
    mmx2
718
    neon
719
    ssse3
720
    vis
721
'
722

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

    
783
CMDLINE_SELECT="
784
    $ARCH_EXT_LIST
785
    $CONFIG_LIST
786
    $THREADS_LIST
787
    cross_compile
788
    debug
789
    extra_warnings
790
    logging
791
    optimizations
792
    shared
793
    static
794
    stripping
795
"
796

    
797
PATHS_LIST='
798
    bindir
799
    incdir
800
    libdir
801
    mandir
802
    prefix
803
    shlibdir
804
'
805

    
806
CMDLINE_SET="
807
    $PATHS_LIST
808
    arch
809
    build_suffix
810
    cc
811
    cpu
812
    cross_prefix
813
    logfile
814
    source_path
815
    target_os
816
"
817

    
818
# code dependency declarations
819

    
820
# architecture extensions
821
altivec_deps="powerpc"
822
armv5te_deps="armv4l"
823
armv6_deps="armv4l"
824
armvfp_deps="armv4l"
825
iwmmxt_deps="armv4l"
826
mmi_deps="mips"
827
mmx_deps="x86"
828
mmx2_deps="x86 mmx"
829
neon_deps="armv4l"
830
ssse3_deps="x86"
831
vis_deps="sparc"
832

    
833
# decoders / encoders
834
ac3_decoder_deps="gpl !liba52"
835
dxa_decoder_deps="zlib"
836
flashsv_decoder_deps="zlib"
837
flashsv_encoder_deps="zlib"
838
mlp_decoder_deps="mlp_parser"
839
mpeg_xvmc_decoder_deps="xvmc"
840
png_decoder_deps="zlib"
841
png_encoder_deps="zlib"
842
zmbv_decoder_deps="zlib"
843
zmbv_encoder_deps="zlib"
844

    
845
# external libraries
846
liba52_decoder_deps="liba52"
847
liba52bin_decoder_extralibs='$ldl'
848
libamr_nb_decoder_deps="libamr_nb"
849
libamr_nb_encoder_deps="libamr_nb"
850
libamr_wb_decoder_deps="libamr_wb"
851
libamr_wb_encoder_deps="libamr_wb"
852
libdirac_decoder_deps="libdirac !libschroedinger"
853
libdirac_encoder_deps="libdirac"
854
libfaac_encoder_deps="libfaac"
855
libfaad_decoder_deps="libfaad"
856
libfaadbin_decoder_extralibs='$ldl'
857
libgsm_decoder_deps="libgsm"
858
libgsm_encoder_deps="libgsm"
859
libgsm_ms_decoder_deps="libgsm"
860
libgsm_ms_encoder_deps="libgsm"
861
libmp3lame_encoder_deps="libmp3lame"
862
libschroedinger_decoder_deps="libschroedinger"
863
libschroedinger_encoder_deps="libschroedinger"
864
libtheora_encoder_deps="libtheora"
865
libvorbis_encoder_deps="libvorbis"
866
libx264_encoder_deps="libx264"
867
libxvid_encoder_deps="libxvid"
868
mpeg4aac_decoder_deps="libfaad"
869

    
870
# demuxers / muxers
871
ac3_demuxer_deps="ac3_parser"
872
audio_beos_demuxer_deps="audio_beos"
873
audio_beos_demuxer_extralibs="-lmedia -lbe"
874
audio_beos_muxer_deps="audio_beos"
875
audio_beos_muxer_extralibs="-lmedia -lbe"
876
avisynth_demuxer_deps="avisynth"
877
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
878
dirac_demuxer_deps="dirac_parser"
879
dv1394_demuxer_deps="dv1394 dv_demuxer"
880
libdc1394_demuxer_deps="libdc1394"
881
libnut_demuxer_deps="libnut"
882
libnut_muxer_deps="libnut"
883
mp3_demuxer_deps="mpegaudio_parser"
884
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
885
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
886
redir_demuxer_deps="network"
887
rtp_muxer_deps="network rtp_protocol"
888
rtsp_demuxer_deps="sdp_demuxer"
889
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
890
v4l_demuxer_deps="linux_videodev_h"
891
v4l2_demuxer_deps="linux_videodev2_h"
892
vfwcap_demuxer_deps="capCreateCaptureWindow"
893
vfwcap_demuxer_extralibs="-lvfw32"
894
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
895
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
896

    
897
# protocols
898
http_protocol_deps="network"
899
rtp_protocol_deps="udp_protocol"
900
tcp_protocol_deps="network"
901
udp_protocol_deps="network"
902

    
903
# filters
904
movie_filter_deps="avfilter_lavf"
905

    
906
# programs
907
ffplay_deps="sdl"
908
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
909
ffserver_extralibs='$ldl'
910
vhook_extralibs='$ldl'
911

    
912

    
913
# default parameters
914

    
915
logfile="config.err"
916

    
917
# installation paths
918
prefix_default="/usr/local"
919
bindir_default='${prefix}/bin'
920
incdir_default='${prefix}/include'
921
libdir_default='${prefix}/lib'
922
mandir_default='${prefix}/share/man'
923
shlibdir_default="$libdir_default"
924

    
925
# toolchain
926
cc="gcc"
927
ar="ar"
928
nm="nm"
929
ranlib="ranlib"
930
strip="strip"
931
asmalign_pot="unknown"
932
ln_s="ln -sf"
933

    
934
# machine
935
arch=`uname -m`
936
cpu="generic"
937

    
938
# OS
939
target_os=$(tolower $(uname -s))
940

    
941
# libraries
942
enable bzlib
943
enable zlib
944

    
945
# configurable options
946
enable debug
947
enable ffmpeg
948
enable ffplay
949
enable ffserver
950
enable ipv6
951
enable mpegaudio_hp
952
enable network
953
enable optimizations
954
enable protocols
955
enable static
956
enable stripping
957
vhook="default"
958

    
959
# build settings
960
SHFLAGS='-shared -Wl,-soname,$$(@F)'
961
VHOOKSHFLAGS='$(SHFLAGS)'
962
LDLATEFLAGS='-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'
963
FFSERVERLDFLAGS=-Wl,-E
964
LIBPREF="lib"
965
LIBSUF=".a"
966
FULLNAME='$(NAME)$(BUILDSUF)'
967
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
968
SLIBPREF="lib"
969
SLIBSUF=".so"
970
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
971
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
972
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
973
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
974

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

    
978
# find source path
979
source_path="`dirname \"$0\"`"
980
enable source_path_used
981
if test -z "$source_path" -o "$source_path" = "." ; then
982
    source_path="`pwd`"
983
    disable source_path_used
984
else
985
    source_path="`cd \"$source_path\"; pwd`"
986
    echo "$source_path" | grep -q '[[:blank:]]' &&
987
        die "Out of tree builds are impossible with whitespace in source path."
988
fi
989

    
990
FFMPEG_CONFIGURATION="$@"
991

    
992
find_things(){
993
    thing=$1
994
    pattern=$2
995
    file=$source_path/$3
996
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
997
}
998

    
999
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1000
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1001
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1002
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1003
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1004
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1005
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1006
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1007
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1008
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1009

    
1010
enable $ARCH_EXT_LIST \
1011
       $DECODER_LIST \
1012
       $ENCODER_LIST \
1013
       $PARSER_LIST \
1014
       $BSF_LIST \
1015
       $DEMUXER_LIST \
1016
       $MUXER_LIST \
1017
       $FILTER_LIST \
1018
       $PROTOCOL_LIST \
1019
       $INDEV_LIST \
1020
       $OUTDEV_LIST \
1021

    
1022
die_unknown(){
1023
    echo "Unknown option \"$1\"."
1024
    echo "See $0 --help for available options."
1025
    exit 1
1026
}
1027

    
1028
show_list() {
1029
    suffix=_$1
1030
    shift
1031
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1032
    exit 0
1033
}
1034

    
1035
for opt do
1036
    optval="${opt#*=}"
1037
    case "$opt" in
1038
    --extra-cflags=*) add_cflags "$optval"
1039
    ;;
1040
    --extra-ldflags=*) add_ldflags "$optval"
1041
    ;;
1042
    --extra-libs=*) add_extralibs "$optval"
1043
    ;;
1044
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1045
    ;;
1046
    --enable-debug=*) debuglevel="$optval"
1047
    ;;
1048
    --enable-*=*|--disable-*=*)
1049
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1050
    case "$thing" in
1051
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1052
        *) die_unknown "$opt" ;;
1053
    esac
1054
    ;;
1055
    --enable-?*|--disable-?*)
1056
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1057
    if is_in $option $COMPONENT_LIST; then
1058
        eval $action \$$(toupper ${option%s})_LIST
1059
    elif is_in $option $CMDLINE_SELECT; then
1060
        $action $option
1061
    else
1062
        die_unknown $opt
1063
    fi
1064
    ;;
1065
    --list-*)
1066
        NAME="${opt#--list-}"
1067
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1068
        NAME=${NAME%s}
1069
        eval show_list $NAME \$$(toupper $NAME)_LIST
1070
    ;;
1071
    --help|-h) show_help
1072
    ;;
1073
    *)
1074
    optname="${opt%=*}"
1075
    optname="${optname#--}"
1076
    optname=$(echo "$optname" | sed 's/-/_/g')
1077
    is_in $optname $CMDLINE_SET || die_unknown $opt
1078
    eval $optname='$optval'
1079
    ;;
1080
    esac
1081
done
1082

    
1083
disabled logging && logfile=/dev/null
1084

    
1085
echo "# $0 $@" > $logfile
1086
set >> $logfile
1087

    
1088
cc="${cross_prefix}${cc}"
1089
ar="${cross_prefix}${ar}"
1090
nm="${cross_prefix}${nm}"
1091
ranlib="${cross_prefix}${ranlib}"
1092
strip="${cross_prefix}${strip}"
1093

    
1094
# set temporary file name
1095
if test ! -z "$TMPDIR" ; then
1096
    TMPDIR1="${TMPDIR}"
1097
elif test ! -z "$TEMPDIR" ; then
1098
    TMPDIR1="${TEMPDIR}"
1099
else
1100
    TMPDIR1="/tmp"
1101
fi
1102

    
1103
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1104
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1105
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1106
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1107
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1108
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1109

    
1110
case "$arch" in
1111
    i386|i486|i586|i686|i86pc|BePC)
1112
        arch="x86_32"
1113
        enable fast_unaligned
1114
    ;;
1115
    x86_64|amd64)
1116
        arch="x86_32"
1117
        enable fast_unaligned
1118
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1119
        int test[sizeof(char*) - 7];
1120
EOF
1121
    ;;
1122
    # armv4l is a subset of armv[567]*l
1123
    arm|armv[4567]*l)
1124
        arch="armv4l"
1125
    ;;
1126
    alpha)
1127
        arch="alpha"
1128
        enable fast_64bit
1129
    ;;
1130
    "Power Macintosh"|ppc|powerpc)
1131
        arch="powerpc"
1132
    ;;
1133
    ppc64)
1134
        arch="powerpc"
1135
        enable fast_64bit
1136
    ;;
1137
    mips|mipsel|IP*)
1138
        arch="mips"
1139
    ;;
1140
    sun4u|sparc64)
1141
        arch="sparc64"
1142
        enable fast_64bit
1143
    ;;
1144
    sparc)
1145
        arch="sparc"
1146
    ;;
1147
    sh4)
1148
        arch="sh4"
1149
    ;;
1150
    parisc)
1151
        arch="parisc"
1152
    ;;
1153
    parisc64)
1154
        arch="parisc"
1155
        enable fast_64bit
1156
    ;;
1157
    s390|s390x)
1158
        arch="s390"
1159
    ;;
1160
    m68k)
1161
        arch="m68k"
1162
    ;;
1163
    ia64)
1164
        arch="ia64"
1165
        enable fast_64bit
1166
    ;;
1167
    bfin)
1168
        arch="bfin"
1169
    ;;
1170
    *)
1171
        arch="unknown"
1172
    ;;
1173
esac
1174

    
1175
enable $arch
1176
enabled_any x86_32 x86_64 && enable x86
1177
enabled     sparc64       && enable sparc
1178

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

    
1328
    *)
1329
        target_os="${target_os}-UNKNOWN"
1330
        ;;
1331
esac
1332

    
1333
set_default $PATHS_LIST
1334

    
1335
add_extralibs $osextralibs
1336

    
1337
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1338
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1339

    
1340
test -n "$cross_prefix" && enable cross_compile
1341

    
1342
# we need to build at least one lib type
1343
if ! enabled_any static shared; then
1344
    cat <<EOF
1345
At least one library type must be built.
1346
Specify --enable-static to build the static libraries or --enable-shared to
1347
build the shared libraries as well. To only build the shared libraries specify
1348
--disable-static in addition to --enable-shared.
1349
EOF
1350
    exit 1;
1351
fi
1352

    
1353
disabled static && LIBNAME=""
1354

    
1355
if enabled_any libfaad libfaadbin ; then
1356
    if check_header faad.h; then
1357
        check_cc << EOF
1358
#include <faad.h>
1359
#ifndef FAAD2_VERSION
1360
ok faad1
1361
#endif
1362
int main(void) { return 0; }
1363
EOF
1364
        test $? = 0 && enable libfaad2
1365
    else
1366
        die "FAAD test failed."
1367
    fi
1368
fi
1369

    
1370

    
1371
if ! enabled gpl; then
1372
    die_gpl_disabled(){
1373
        name=$1
1374
        shift
1375
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1376
    }
1377
    die_gpl_disabled "The Postprocessing code" postproc
1378
    die_gpl_disabled "liba52"                  liba52
1379
    die_gpl_disabled "libx264"                 libx264
1380
    die_gpl_disabled "libxvidcore"             libxvid
1381
    die_gpl_disabled "FAAD2"                   libfaad2
1382
    die_gpl_disabled "The X11 grabber"         x11grab
1383
    die_gpl_disabled "The software scaler"     swscale
1384
fi
1385

    
1386
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1387
    die "libamr is nonfree and --enable-nonfree is not specified."
1388
fi
1389

    
1390
check_deps $ARCH_EXT_LIST
1391

    
1392
test -z "$need_memalign" && need_memalign="$mmx"
1393

    
1394
#Darwin CC versions
1395
if test $target_os = darwin; then
1396
    if $cc -v 2>&1 | grep -q xlc; then
1397
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1398
    else
1399
        add_cflags "-pipe"
1400
        check_cflags "-force_cpusubtype_ALL"
1401
        check_cflags "-Wno-sign-compare"
1402
        enabled shared || check_cflags -mdynamic-no-pic
1403
    fi
1404
fi
1405

    
1406
disabled optimizations || check_cflags -fomit-frame-pointer
1407

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

    
1477
# make sure we can execute files in $TMPDIR
1478
cat > $TMPSH 2>> $logfile <<EOF
1479
#! /bin/sh
1480
EOF
1481
chmod +x $TMPSH >> $logfile 2>&1
1482
if ! $TMPSH >> $logfile 2>&1; then
1483
    cat <<EOF
1484
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1485
variable to another directory and make sure that $TMPDIR1 is not mounted
1486
noexec.
1487
EOF
1488
    die "Sanity test failed."
1489
fi
1490
rm $TMPSH
1491

    
1492
# compiler sanity check
1493
check_exec <<EOF
1494
int main(void){ return 0; }
1495
EOF
1496
if test "$?" != 0; then
1497
    echo "$cc is unable to create an executable file."
1498
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1499
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1500
        echo "Only do this if you know what cross compiling means."
1501
    fi
1502
    die "C compiler test failed."
1503
fi
1504

    
1505
check_cc <<EOF || die "Symbol mangling check failed."
1506
int ff_extern;
1507
EOF
1508
sym=$($nm -P -g $TMPO | grep ff_extern)
1509
extern_prefix=${sym%%ff_extern*}
1510

    
1511
check_asm inline_asm '""'
1512

    
1513
if enabled x86; then
1514
    # check whether EBP is available on x86
1515
    # As 'i' is stored on the stack, this program will crash
1516
    # if the base pointer is used to access it because the
1517
    # base pointer is cleared in the inline assembly code.
1518
    check_exec_crash <<EOF && enable ebp_available
1519
    volatile int i=0;
1520
    asm volatile (
1521
        "xorl %%ebp, %%ebp"
1522
    ::: "%ebp");
1523
    return i;
1524
EOF
1525

    
1526
    # check wether EBX is available on x86
1527
    check_asm ebx_available '"":::"%ebx"'
1528

    
1529
    # check whether binutils is new enough to compile SSSE3/MMX2
1530
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1531
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1532

    
1533
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1534
fi
1535

    
1536
# check for assembler specific support
1537

    
1538
if test $arch = "powerpc"; then
1539
check_cc <<EOF && enable dcbzl
1540
int main(void) {
1541
    register long zero = 0;
1542
    char data[1024];
1543
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1544
return 0;
1545
}
1546
EOF
1547
fi
1548

    
1549
# check for SIMD availability
1550

    
1551
# AltiVec flags: The FSF version of GCC differs from the Apple version
1552
if enabled altivec; then
1553
    check_cflags -maltivec -mabi=altivec &&
1554
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1555
        check_cflags -faltivec
1556

    
1557
    # check if our compiler supports Motorola AltiVec C API
1558
    check_cc <<EOF || disable altivec
1559
$inc_altivec_h
1560
int main(void) {
1561
    vector signed int v1, v2, v3;
1562
    v1 = vec_add(v2,v3);
1563
    return 0;
1564
}
1565
EOF
1566

    
1567
    # check if our compiler supports braces for vector declarations
1568
    check_cc <<EOF && enable altivec_vector_braces
1569
$inc_altivec_h
1570
#define AVV(x...) {x}
1571
int main (void) { (vector int) AVV(1); return 0; }
1572
EOF
1573
fi
1574

    
1575
# We have to check if pld is a nop and disable it.
1576
enabled armv4l  && check_asm pld     '"pld [r0]"'
1577
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1578
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1579
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1580
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1581
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1582
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1583
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1584

    
1585
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1586

    
1587
# ---
1588
# big/little-endian test
1589
check_cc <<EOF || die "endian test failed"
1590
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1591
EOF
1592
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1593

    
1594
# ---
1595
# check availability of some header files
1596

    
1597
if check_func dlopen; then
1598
    ldl=
1599
elif check_func dlopen -ldl; then
1600
    ldl=-ldl
1601
fi
1602

    
1603
check_func  fork
1604
check_func  gethrtime
1605
check_func  getrusage
1606
check_func  inet_aton $network_extralibs
1607
check_func  memalign
1608
check_func  mkstemp
1609
check_func2 windows.h GetProcessTimes
1610

    
1611
check_header byteswap.h
1612
check_header conio.h
1613
check_header dlfcn.h
1614
check_header malloc.h
1615
check_header sys/mman.h
1616
check_header sys/resource.h
1617
check_header termios.h
1618

    
1619
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1620
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1621
fi
1622

    
1623
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1624
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1625

    
1626
# ffserver uses poll(),
1627
# if it's not found we can emulate it using select().
1628
if enabled ffserver; then
1629
    check_header poll.h
1630
    check_header sys/select.h
1631
fi
1632

    
1633
# check for some common methods of building with pthread support
1634
# do this before the optional library checks as some of them require pthreads
1635
if enabled pthreads; then
1636
    if check_func pthread_create; then
1637
        :
1638
    elif check_func pthread_create -pthread; then
1639
        add_cflags -pthread
1640
        add_extralibs -pthread
1641
    elif check_func pthread_create -pthreads; then
1642
        add_cflags -pthreads
1643
        add_extralibs -pthreads
1644
    elif check_func pthread_create -lpthreadGC2; then
1645
        add_extralibs -lpthreadGC2
1646
    elif ! check_lib pthread.h pthread_create -lpthread; then
1647
        die "ERROR: can't find pthreads library"
1648
    fi
1649
fi
1650

    
1651
for thread in $THREADS_LIST; do
1652
    if enabled $thread; then
1653
        test -n "$thread_type" &&
1654
            die "ERROR: Only one thread type must be selected." ||
1655
            thread_type="$thread"
1656
    fi
1657
done
1658

    
1659
check_lib math.h sin -lm
1660

    
1661
# test for C99 functions in math.h
1662
for func in llrint lrint lrintf round roundf; do
1663
    check_exec <<EOF && enable $func || disable $func
1664
#define _ISOC9X_SOURCE  1
1665
#include <math.h>
1666
int main(void) { return ($func(3.999f) > 0)?0:1; }
1667
EOF
1668
done
1669

    
1670
# these are off by default, so fail if requested and not available
1671
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1672
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1673
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1674
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1675
enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1676
                   && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1677
                   && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1678
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1679
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1680
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1681
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1682
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1683
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1684
                        && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1685
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1686
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1687
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1688
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1689
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1690

    
1691
# libdc1394 check
1692
if enabled libdc1394; then
1693
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1694
        enable libdc1394_2; } ||
1695
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1696
        enable libdc1394_1; } ||
1697
    die "ERROR: No version of libdc1394 found "
1698
fi
1699

    
1700

    
1701
_restrict=
1702
for restrict_keyword in restrict __restrict__ __restrict; do
1703
    check_cc <<EOF && _restrict=$restrict_keyword && break
1704
void foo(char * $restrict_keyword p);
1705
EOF
1706
done
1707

    
1708
test "$vhook" = "default" && vhook="$dlopen"
1709

    
1710
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1711
    disable vhook
1712
    echo
1713
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1714
    echo "Patches welcome."
1715
    echo
1716
fi
1717

    
1718
if enabled vhook; then
1719
    check_ldflags -rdynamic
1720
    check_ldflags -export-dynamic
1721
fi
1722

    
1723
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1724
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1725

    
1726
##########################################
1727
# SDL check
1728

    
1729
disable sdl_too_old
1730
disable sdl
1731
SDL_CONFIG="${cross_prefix}sdl-config"
1732
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1733
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1734
    temp_cflags $sdl_cflags
1735
    temp_extralibs `"${SDL_CONFIG}" --libs`
1736
    if check_lib2 SDL.h SDL_Init; then
1737
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1738
        if test "$_sdlversion" -lt 121 ; then
1739
            enable sdl_too_old
1740
        else
1741
            enable sdl
1742
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1743
#include <SDL.h>
1744
int main(int argc, char **argv){
1745
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1746
    int w = vi->current_w;
1747
    return 0;
1748
}
1749
EOF
1750
        fi
1751
    fi
1752
    restore_flags
1753
fi
1754

    
1755
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1756

    
1757
check_type sys/socket.h socklen_t
1758

    
1759
##########################################
1760
# Network check
1761

    
1762
if enabled network; then
1763
    # Prefer arpa/inet.h over winsock2
1764
    if check_header arpa/inet.h ; then
1765
        check_func closesocket
1766
    elif check_header winsock2.h ; then
1767
        network_extralibs="-lws2_32"
1768
        check_type ws2tcpip.h socklen_t
1769
        check_func2 winsock2.h closesocket
1770
    fi
1771
fi
1772

    
1773
##########################################
1774
# IPv6 check
1775

    
1776
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1777
#include <sys/types.h>
1778
#include <sys/socket.h>
1779
#include <netinet/in.h>
1780
#include <netdb.h>
1781
int main(void) {
1782
    struct sockaddr_storage saddr;
1783
    struct ipv6_mreq mreq6;
1784
    getaddrinfo(0,0,0,0);
1785
    getnameinfo(0,0,0,0,0,0,0);
1786
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1787
}
1788
EOF
1789

    
1790
check_header linux/videodev.h
1791
check_header linux/videodev2.h
1792

    
1793
check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1794

    
1795
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1796
{ check_header dev/bktr/ioctl_meteor.h &&
1797
  check_header dev/bktr/ioctl_bt848.h; } ||
1798
{ check_header machine/ioctl_meteor.h &&
1799
  check_header machine/ioctl_bt848.h; } ||
1800
{ check_header dev/video/meteor/ioctl_meteor.h &&
1801
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1802
check_header dev/ic/bt8xx.h
1803

    
1804
check_header sys/soundcard.h
1805
check_header soundcard.h
1806

    
1807
# deal with the X11 frame grabber
1808
enabled x11grab                         &&
1809
check_header X11/Xlib.h                 &&
1810
check_header X11/extensions/XShm.h      &&
1811
check_func XOpenDisplay -lX11           &&
1812
check_func XShmCreateImage -lX11 -lXext
1813

    
1814
enabled debug && add_cflags -g"$debuglevel"
1815

    
1816
# add some useful compiler flags if supported
1817
check_cflags -Wdeclaration-after-statement
1818
check_cflags -Wall
1819
check_cflags -Wno-switch
1820
check_cflags -Wdisabled-optimization
1821
check_cflags -Wpointer-arith
1822
check_cflags -Wredundant-decls
1823
check_cflags -Wno-pointer-sign
1824
check_cflags -Wcast-qual
1825
check_cflags -Wwrite-strings
1826
check_cflags -Wtype-limits
1827
enabled extra_warnings && check_cflags -Winline
1828

    
1829
# add some linker flags
1830
check_ldflags -Wl,--warn-common
1831
check_ldflags $LDLATEFLAGS
1832
check_ldflags -Wl,-Bsymbolic
1833

    
1834
if enabled small; then
1835
    check_cflags -Os            # not all compilers support -Os
1836
    optimizations="small"
1837
elif enabled optimizations; then
1838
    if $cc -v 2>&1 | grep -q xlc; then
1839
        add_cflags  "-O5"
1840
        add_ldflags "-O5"
1841
    else
1842
        add_cflags "-O3"
1843
    fi
1844
fi
1845
check_cflags -fno-math-errno
1846
check_cflags -fno-signed-zeros
1847

    
1848
# add some flags for Intel C Compiler
1849
if $cc --version | grep -q Intel; then
1850
  # Just warnings, no remarks
1851
  check_cflags -w1
1852
  # -wd: Disable following warnings
1853
  # 144, 167, 556: -Wno-pointer-sign
1854
  # 10006: ignoring unknown option -fno-signed-zeros
1855
  # 10156: ignoring option '-W'; no argument required
1856
  check_cflags -wd144,167,556,10006,10156
1857
  # 11030: Warning unknown option --as-needed
1858
  # 10156: ignoring option '-export'; no argument required
1859
  check_ldflags -wd10156,11030
1860
  # Allow to compile with optimizations
1861
  check_ldflags -march=$cpu
1862
fi
1863

    
1864
# PIC flags for shared library objects where they are needed
1865
if enabled shared; then
1866
    # LIBOBJFLAGS may have already been set in the OS configuration
1867
    if test -z "$LIBOBJFLAGS" ; then
1868
        case "$arch" in
1869
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1870
        esac
1871
    fi
1872
fi
1873

    
1874
if enabled gprof; then
1875
    add_cflags  "-p"
1876
    add_ldflags "-p"
1877
fi
1878

    
1879
VHOOKCFLAGS="-fPIC"
1880

    
1881
# Find out if the .align argument is a power of two or not.
1882
if test $asmalign_pot = "unknown"; then
1883
    disable asmalign_pot
1884
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1885
fi
1886

    
1887
enabled_any $DECODER_LIST      && enable decoders
1888
enabled_any $ENCODER_LIST      && enable encoders
1889
enabled_any $BSF_LIST          && enable bsfs
1890
enabled_any $DEMUXER_LIST      && enable demuxers
1891
enabled_any $MUXER_LIST        && enable muxers
1892
enabled_any $FILTER_LIST       && enable filters
1893
enabled_any $INDEV_LIST        && enable demuxers
1894
enabled_any $OUTDEV_LIST       && enable muxers
1895
enabled_any $PROTOCOL_LIST     && enable protocols
1896

    
1897
enabled_any $THREADS_LIST      && enable threads
1898

    
1899
check_deps $CONFIG_LIST       \
1900
           $HAVE_LIST         \
1901
           $DECODER_LIST      \
1902
           $ENCODER_LIST      \
1903
           $PARSER_LIST       \
1904
           $BSF_LIST          \
1905
           $DEMUXER_LIST      \
1906
           $MUXER_LIST        \
1907
           $FILTER_LIST       \
1908
           $INDEV_LIST        \
1909
           $OUTDEV_LIST       \
1910
           $PROTOCOL_LIST     \
1911

    
1912
enabled libdc1394 && append pkg_requires "libraw1394"
1913
enabled libdirac  && append pkg_requires "dirac"
1914
enabled libtheora && append pkg_requires "theora"
1915
enabled libvorbis && append pkg_requires "vorbisenc"
1916

    
1917
echo "install prefix            $prefix"
1918
echo "source path               $source_path"
1919
echo "C compiler                $cc"
1920
echo ".align is power-of-two    $asmalign_pot"
1921
echo "ARCH                      $arch ($cpu)"
1922
if test "$build_suffix" != ""; then
1923
    echo "build suffix              $build_suffix"
1924
fi
1925
echo "big-endian                ${bigendian-no}"
1926
if test $arch = "x86_32" -o $arch = "x86_64"; then
1927
    echo "MMX enabled               ${mmx-no}"
1928
    echo "CMOV enabled              ${cmov-no}"
1929
    echo "CMOV is fast              ${fast_cmov-no}"
1930
    echo "EBX available             ${ebx_available-no}"
1931
    echo "EBP available             ${ebp_available-no}"
1932
fi
1933
if test $arch = "armv4l"; then
1934
    echo "ARMv5TE enabled           ${armv5te-no}"
1935
    echo "ARMv6 enabled             ${armv6-no}"
1936
    echo "ARM VFP enabled           ${armvfp-no}"
1937
    echo "IWMMXT enabled            ${iwmmxt-no}"
1938
    echo "NEON enabled              ${neon-no}"
1939
fi
1940
if test $arch = "mips"; then
1941
    echo "MMI enabled               ${mmi-no}"
1942
fi
1943
if test $arch = "powerpc"; then
1944
    echo "AltiVec enabled           ${altivec-no}"
1945
    echo "dcbzl available           ${dcbzl-no}"
1946
fi
1947
echo "gprof enabled             ${gprof-no}"
1948
echo "debug symbols             ${debug-no}"
1949
echo "strip symbols             ${stripping-no}"
1950
echo "optimizations             ${optimizations-no}"
1951
echo "static                    ${static-no}"
1952
echo "shared                    ${shared-no}"
1953
echo "postprocessing support    ${postproc-no}"
1954
echo "software scaler enabled   ${swscale-no}"
1955
echo "new filter support        ${avfilter-no}"
1956
echo "filters using lavformat   ${avfilter_lavf-no}"
1957
echo "video hooking             ${vhook-no}"
1958
if enabled vhook; then
1959
    echo "Imlib2 support            ${imlib2-no}"
1960
    echo "FreeType support          ${freetype2-no}"
1961
fi
1962
echo "network support           ${network-no}"
1963
if enabled network; then
1964
    echo "IPv6 support              ${ipv6-no}"
1965
fi
1966
echo "threading support         ${thread_type-no}"
1967
echo "SDL support               ${sdl-no}"
1968
if enabled sdl_too_old; then
1969
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1970
fi
1971
echo "Sun medialib support      ${mlib-no}"
1972
echo "AVISynth enabled          ${avisynth-no}"
1973
echo "liba52 support            ${liba52-no}"
1974
echo "liba52 dlopened           ${liba52bin-no}"
1975
echo "libamr-nb support         ${libamr_nb-no}"
1976
echo "libamr-wb support         ${libamr_wb-no}"
1977
echo "libdc1394 support         ${libdc1394-no}"
1978
echo "libdirac enabled          ${libdirac-no}"
1979
echo "libfaac enabled           ${libfaac-no}"
1980
echo "libfaad enabled           ${libfaad-no}"
1981
echo "libfaad dlopened          ${libfaadbin-no}"
1982
echo "libgsm enabled            ${libgsm-no}"
1983
echo "libmp3lame enabled        ${libmp3lame-no}"
1984
echo "libnut enabled            ${libnut-no}"
1985
echo "libschroedinger enabled   ${libschroedinger-no}"
1986
echo "libtheora enabled         ${libtheora-no}"
1987
echo "libvorbis enabled         ${libvorbis-no}"
1988
echo "libx264 enabled           ${libx264-no}"
1989
echo "libxvid enabled           ${libxvid-no}"
1990
echo "zlib enabled              ${zlib-no}"
1991
echo "bzlib enabled             ${bzlib-no}"
1992
echo
1993

    
1994
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1995
    echo "Enabled ${type}s:"
1996
    eval list=\$$(toupper $type)_LIST
1997
    for part in $list; do
1998
        enabled $part && echo ${part%_*}
1999
    done | sort | pr -3 -t
2000
    echo
2001
done
2002

    
2003
license="LGPL"
2004
if enabled nonfree; then
2005
    license="unredistributable"
2006
elif enabled gpl; then
2007
    license="GPL"
2008
fi
2009

    
2010
echo "License: $license"
2011

    
2012
echo "Creating config.mak and config.h..."
2013

    
2014
echo "# Automatically generated by configure - do not modify!" > config.mak
2015
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2016
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2017
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2018
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2019

    
2020
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2021
echo "prefix=$prefix" >> config.mak
2022
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2023
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2024
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2025
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2026
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2027
echo "CC=$cc" >> config.mak
2028
echo "AR=$ar" >> config.mak
2029
echo "RANLIB=$ranlib" >> config.mak
2030
echo "LN_S=$ln_s" >> config.mak
2031
enabled stripping &&
2032
    echo "STRIP=$strip" >> config.mak ||
2033
    echo "STRIP=echo ignoring strip" >> config.mak
2034

    
2035
echo "OPTFLAGS=$CFLAGS" >> config.mak
2036
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2037
echo "LDFLAGS=$LDFLAGS" >> config.mak
2038
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2039
echo "SHFLAGS=$SHFLAGS" >> config.mak
2040
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2041
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2042
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2043
echo "BUILD_STATIC=$static" >> config.mak
2044
echo "BUILDSUF=$build_suffix" >> config.mak
2045
echo "FULLNAME=$FULLNAME" >> config.mak
2046
echo "LIBPREF=$LIBPREF" >> config.mak
2047
echo "LIBSUF=$LIBSUF" >> config.mak
2048
echo "LIBNAME=$LIBNAME" >> config.mak
2049
echo "SLIBPREF=$SLIBPREF" >> config.mak
2050
echo "SLIBSUF=$SLIBSUF" >> config.mak
2051
echo "EXESUF=$EXESUF" >> config.mak
2052
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2053

    
2054
if enabled bigendian; then
2055
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2056
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2057
fi
2058

    
2059
if enabled sdl; then
2060
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2061
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2062
fi
2063
if enabled texi2html; then
2064
    echo "BUILD_DOC=yes" >> config.mak
2065
fi
2066

    
2067
get_version(){
2068
    name=$1
2069
    file=$source_path/$2
2070
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2071
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2072
    lcname=$(tolower $name)
2073
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2074
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2075
}
2076

    
2077
get_version LIBSWSCALE  libswscale/swscale.h
2078
get_version LIBPOSTPROC libpostproc/postprocess.h
2079
get_version LIBAVCODEC  libavcodec/avcodec.h
2080
get_version LIBAVDEVICE libavdevice/avdevice.h
2081
get_version LIBAVFORMAT libavformat/avformat.h
2082
get_version LIBAVUTIL   libavutil/avutil.h
2083
get_version LIBAVFILTER libavfilter/avfilter.h
2084

    
2085
if enabled shared; then
2086
    echo "BUILD_SHARED=yes" >> config.mak
2087
    echo "PIC=-fPIC -DPIC" >> config.mak
2088
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2089
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2090
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2091
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2092
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2093
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2094
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2095
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2096
fi
2097
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2098
echo "EXTRALIBS=$extralibs" >> config.mak
2099

    
2100
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2101
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2102
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2103
                                      $DECODER_LIST      \
2104
                                      $ENCODER_LIST      \
2105
                                      $PARSER_LIST       \
2106
                                      $BSF_LIST          \
2107
                                      $DEMUXER_LIST      \
2108
                                      $MUXER_LIST        \
2109
                                      $FILTER_LIST       \
2110
                                      $PROTOCOL_LIST     \
2111
                                      $INDEV_LIST        \
2112
                                      $OUTDEV_LIST       \
2113

    
2114
echo "#define restrict $_restrict" >> $TMPH
2115

    
2116
if enabled small; then
2117
    echo "#define av_always_inline"  >> $TMPH
2118
fi
2119

    
2120
echo "SRC_PATH=\"$source_path\"" >> config.mak
2121
echo "SRC_PATH_BARE=$source_path" >> config.mak
2122
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2123

    
2124
# Apparently it's not possible to portably echo a backslash.
2125
enabled asmalign_pot &&
2126
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2127
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2128

    
2129
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2130

    
2131
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2132

    
2133
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2134
cmp -s $TMPH config.h &&
2135
    echo "config.h is unchanged" ||
2136
    mv -f $TMPH config.h
2137

    
2138
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2139

    
2140
# build tree in object directory if source path is different from current one
2141
if enabled source_path_used; then
2142
    DIRS="\
2143
        doc               \
2144
        libavcodec        \
2145
        libavcodec/alpha  \
2146
        libavcodec/armv4l \
2147
        libavcodec/bfin   \
2148
        libavcodec/i386   \
2149
        libavcodec/mlib   \
2150
        libavcodec/ppc    \
2151
        libavcodec/sh4    \
2152
        libavcodec/sparc  \
2153
        libavdevice       \
2154
        libavfilter       \
2155
        libavformat       \
2156
        libavutil         \
2157
        libpostproc       \
2158
        libswscale        \
2159
        tests             \
2160
        tools             \
2161
        vhook             \
2162
        "
2163
    FILES="\
2164
        Makefile             \
2165
        common.mak           \
2166
        subdir.mak           \
2167
        doc/texi2pod.pl      \
2168
        libavcodec/Makefile  \
2169
        libavdevice/Makefile \
2170
        libavfilter/Makefile \
2171
        libavformat/Makefile \
2172
        libavutil/Makefile   \
2173
        libpostproc/Makefile \
2174
        libswscale/Makefile  \
2175
        "
2176
    for dir in $DIRS ; do
2177
        mkdir -p $dir
2178
    done
2179
    for f in $FILES ; do
2180
        $ln_s "$source_path/$f" $f
2181
    done
2182
fi
2183

    
2184

    
2185
# build pkg-config files
2186

    
2187
pkgconfig_generate(){
2188
name=$1
2189
shortname=${name#lib}
2190
comment=$2
2191
version=$3
2192
libs=$4
2193
requires=$5
2194
cat <<EOF > $name/$name.pc
2195
prefix=$prefix
2196
exec_prefix=\${prefix}
2197
libdir=$libdir
2198
includedir=$incdir
2199

    
2200
Name: $name
2201
Description: $comment
2202
Version: $version
2203
Requires: $(disabled shared && echo $requires)
2204
Requires.private: $(enabled shared && echo $requires)
2205
Conflicts:
2206
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2207
Libs.private: $(enabled shared && echo $libs)
2208
Cflags: -I\${includedir}
2209
EOF
2210
cat <<EOF > $name/$name-uninstalled.pc
2211
prefix=
2212
exec_prefix=
2213
libdir=\${pcfiledir}
2214
includedir=\${pcfiledir}/..
2215

    
2216
Name: $name
2217
Description: $comment
2218
Version: $version
2219
Requires: $requires
2220
Conflicts:
2221
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2222
Cflags: -I\${includedir}
2223
EOF
2224
}
2225

    
2226
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2227
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2228
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2229
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2230
enabled avfilter &&
2231
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2232
enabled postproc &&
2233
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2234
if enabled swscale; then
2235
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2236
else
2237
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2238
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2239
fi