Statistics
| Branch: | Revision:

ffmpeg / configure @ b1549d61

History | View | Annotate | Download (72.7 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
LC_ALL=C
12
export LC_ALL
13

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

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

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

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

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

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

    
222
log(){
223
    echo "$@" >> $logfile
224
}
225

    
226
log_file(){
227
    log BEGIN $1
228
    pr -n -t $1 >> $logfile
229
    log END $1
230
}
231

    
232
echolog(){
233
    log "$@"
234
    echo "$@"
235
}
236

    
237
die(){
238
    echolog "$@"
239
    cat <<EOF
240
If you think configure made a mistake, make sure you are using the latest
241
version from SVN.  If the latest version fails, report the problem to the
242
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
243
EOF
244
    if disabled logging; then
245
        cat <<EOF
246
Rerun configure with logging enabled (do not use --disable-logging), and
247
include the log this produces with your report.
248
EOF
249
    else
250
cat <<EOF
251
Include the log file "$logfile" produced by configure as this will help
252
solving the problem.
253
EOF
254
    fi
255
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
256
    exit 1
257
}
258

    
259
# Avoid locale weirdness, besides we really just want to translate ASCII.
260
toupper(){
261
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
262
}
263

    
264
tolower(){
265
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
266
}
267

    
268
c_escape(){
269
    echo "$*" | sed 's/["\\]/\\\0/g'
270
}
271

    
272
set_all(){
273
    value=$1
274
    shift
275
    for var in $*; do
276
        eval $var=$value
277
    done
278
}
279

    
280
set_weak(){
281
    value=$1
282
    shift
283
    for var; do
284
        eval : \${$var:=$value}
285
    done
286
}
287

    
288
pushvar(){
289
    for var in $*; do
290
        eval level=\${${var}_level:=0}
291
        eval ${var}_${level}="\$$var"
292
        eval ${var}_level=$(($level+1))
293
    done
294
}
295

    
296
popvar(){
297
    for var in $*; do
298
        eval level=\${${var}_level:-0}
299
        test $level = 0 && continue
300
        eval level=$(($level-1))
301
        eval $var="\${${var}_${level}}"
302
        eval ${var}_level=$level
303
        eval unset ${var}_${level}
304
    done
305
}
306

    
307
enable(){
308
    set_all yes $*
309
}
310

    
311
disable(){
312
    set_all no $*
313
}
314

    
315
enable_weak(){
316
    set_weak yes $*
317
}
318

    
319
disable_weak(){
320
    set_weak no $*
321
}
322

    
323
do_enable_deep(){
324
    for var; do
325
        enabled $var && continue
326
        eval sel="\$${var}_select"
327
        eval sgs="\$${var}_suggest"
328
        pushvar var sgs
329
        enable_deep $sel
330
        popvar sgs
331
        enable_deep_weak $sgs
332
        popvar var
333
    done
334
}
335

    
336
enable_deep(){
337
    do_enable_deep $*
338
    enable $*
339
}
340

    
341
enable_deep_weak(){
342
    do_enable_deep $*
343
    enable_weak $*
344
}
345

    
346
enabled(){
347
    test "${1#!}" = "$1" && op== || op=!=
348
    eval test "x\$${1#!}" $op "xyes"
349
}
350

    
351
disabled(){
352
    test "${1#!}" = "$1" && op== || op=!=
353
    eval test "x\$${1#!}" $op "xno"
354
}
355

    
356
enabled_all(){
357
    for opt; do
358
        enabled $opt || return 1
359
    done
360
}
361

    
362
disabled_all(){
363
    for opt; do
364
        disabled $opt || return 1
365
    done
366
}
367

    
368
enabled_any(){
369
    for opt; do
370
        enabled $opt && return 0
371
    done
372
}
373

    
374
disabled_any(){
375
    for opt; do
376
        disabled $opt && return 0
377
    done
378
    return 1
379
}
380

    
381
set_default(){
382
    for opt; do
383
        eval : \${$opt:=\$${opt}_default}
384
    done
385
}
386

    
387
is_in(){
388
    value=$1
389
    shift
390
    for var in $*; do
391
        [ $var = $value ] && return 0
392
    done
393
    return 1
394
}
395

    
396
check_deps(){
397
    for cfg; do
398
        cfg="${cfg#!}"
399
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
400
        disabled ${cfg}_checking && continue
401
        enable ${cfg}_checking
402

    
403
        eval dep_all="\$${cfg}_deps"
404
        eval dep_any="\$${cfg}_deps_any"
405
        eval dep_sel="\$${cfg}_select"
406
        eval dep_sgs="\$${cfg}_suggest"
407

    
408
        pushvar cfg dep_all dep_any dep_sel dep_sgs
409
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
410
        popvar cfg dep_all dep_any dep_sel dep_sgs
411

    
412
        enabled_all  $dep_all || disable $cfg
413
        enabled_any  $dep_any || disable $cfg
414
        disabled_any $dep_sel && disable $cfg
415

    
416
        if enabled $cfg; then
417
            eval dep_extralibs="\$${cfg}_extralibs"
418
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
419
            enable_deep $dep_sel
420
            enable_deep_weak $dep_sgs
421
        fi
422

    
423
        disable ${cfg}_checking
424
    done
425
}
426

    
427
print_config(){
428
    pfx=$1
429
    header=$2
430
    makefile=$3
431
    shift 3
432
    for cfg; do
433
        ucname="`toupper $cfg`"
434
        if enabled $cfg; then
435
            echo "#define ${pfx}${ucname} 1" >> $header
436
            echo "${pfx}${ucname}=yes" >> $makefile
437
        else
438
            echo "#define ${pfx}${ucname} 0" >> $header
439
        fi
440
    done
441
}
442

    
443
flags_saved(){
444
    (: ${SAVE_CFLAGS?}) 2> /dev/null
445
}
446

    
447
save_flags(){
448
    flags_saved && return
449
    SAVE_CFLAGS="$CFLAGS"
450
    SAVE_LDFLAGS="$LDFLAGS"
451
    SAVE_extralibs="$extralibs"
452
}
453

    
454
restore_flags(){
455
    flags_saved || return
456
    CFLAGS="$SAVE_CFLAGS"
457
    LDFLAGS="$SAVE_LDFLAGS"
458
    extralibs="$SAVE_extralibs"
459
    unset SAVE_CFLAGS
460
    unset SAVE_LDFLAGS
461
    unset SAVE_extralibs
462
}
463

    
464
temp_cflags(){
465
    save_flags
466
    CFLAGS="$CFLAGS $*"
467
}
468

    
469
temp_ldflags(){
470
    save_flags
471
    LDFLAGS="$LDFLAGS $*"
472
}
473

    
474
temp_extralibs(){
475
    save_flags
476
    extralibs="$extralibs $*"
477
}
478

    
479
append(){
480
    var=$1
481
    shift
482
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
483
    eval "$var=\"\$$var $*\""
484
}
485

    
486
add_cflags(){
487
    append CFLAGS "$@"
488
}
489

    
490
add_ldflags(){
491
    append LDFLAGS "$@"
492
}
493

    
494
add_extralibs(){
495
    append extralibs "$@"
496
}
497

    
498
check_cmd(){
499
    log "$@"
500
    "$@" >> $logfile 2>&1
501
}
502

    
503
check_cc(){
504
    log check_cc "$@"
505
    cat > $TMPC
506
    log_file $TMPC
507
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
508
}
509

    
510
check_cpp(){
511
    log check_cpp "$@"
512
    cat > $TMPC
513
    log_file $TMPC
514
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
515
}
516

    
517
check_asm(){
518
    log check_asm "$@"
519
    name="$1"
520
    asm="$2"
521
    shift 2
522
    check_cc "$@" <<EOF && enable $name || disable $name
523
void foo(void){ __asm__ volatile($asm); }
524
EOF
525
}
526

    
527
check_yasm(){
528
    log check_yasm "$@"
529
    echo "$1" > $TMPS
530
    log_file $TMPS
531
    shift 1
532
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
533
}
534

    
535
check_ld(){
536
    log check_ld "$@"
537
    check_cc || return
538
    flags=''
539
    libs=''
540
    for f; do
541
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
542
    done
543
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
544
}
545

    
546
check_cflags(){
547
    log check_cflags "$@"
548
    check_cc "$@" <<EOF && add_cflags "$@"
549
int x;
550
EOF
551
}
552

    
553
check_ldflags(){
554
    log check_ldflags "$@"
555
    check_ld "$@" <<EOF && add_ldflags "$@"
556
int main(void){ return 0; }
557
EOF
558
}
559

    
560
check_header(){
561
    log check_header "$@"
562
    header=$1
563
    shift
564
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
565
    disable $var
566
    check_cpp "$@" <<EOF && enable $var
567
#include <$header>
568
int x;
569
EOF
570
}
571

    
572
check_func(){
573
    log check_func "$@"
574
    func=$1
575
    shift
576
    disable $func
577
    check_ld "$@" <<EOF && enable $func
578
extern int $func();
579
int main(void){ $func(); }
580
EOF
581
}
582

    
583
check_func_headers(){
584
    log check_func_headers "$@"
585
    headers=$1
586
    func=$2
587
    shift 2
588
    disable $func
589
    incs=""
590
    for hdr in $headers; do
591
        incs="$incs
592
#include <$hdr>"
593
    done
594
    check_ld "$@" <<EOF && enable $func
595
$incs
596
int main(int argc, char **argv){
597
    (void) $func;
598
    return 0;
599
}
600
EOF
601
}
602

    
603
check_cpp_condition(){
604
    log check_cpp_condition "$@"
605
    header=$1
606
    condition=$2
607
    check_cpp <<EOF
608
#include <$header>
609
#if !($condition)
610
#error "unsatisfied condition: $condition"
611
#endif
612
EOF
613
}
614

    
615
check_lib(){
616
    log check_lib "$@"
617
    header="$1"
618
    func="$2"
619
    shift 2
620
    temp_extralibs "$@"
621
    check_header $header && check_func $func && add_extralibs "$@"
622
    err=$?
623
    restore_flags
624
    return $err
625
}
626

    
627
check_lib2(){
628
    log check_lib2 "$@"
629
    headers="$1"
630
    func="$2"
631
    shift 2
632
    temp_extralibs "$@"
633
    check_func_headers "$headers" $func && add_extralibs "$@"
634
    err=$?
635
    restore_flags
636
    return $err
637
}
638

    
639
check_exec(){
640
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
641
}
642

    
643
check_exec_crash(){
644
    code=`cat`
645

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

    
652
    (check_exec "$@") >> $logfile 2>&1 <<EOF
653
#include <signal.h>
654
static void sighandler(int sig){
655
    raise(SIGTERM);
656
}
657
int main(void){
658
    signal(SIGILL, sighandler);
659
    signal(SIGFPE, sighandler);
660
    signal(SIGSEGV, sighandler);
661
#ifdef SIGBUS
662
    signal(SIGBUS, sighandler);
663
#endif
664
    { $code }
665
}
666
EOF
667
}
668

    
669
check_type(){
670
    log check_type "$@"
671
    headers=$1
672
    type=$2
673
    shift 2
674
    disable $type
675
    incs=""
676
    for hdr in $headers; do
677
        incs="$incs
678
#include <$hdr>"
679
    done
680
    check_cc "$@" <<EOF && enable $type
681
$incs
682
$type v;
683
EOF
684
}
685

    
686
require(){
687
    name="$1"
688
    header="$2"
689
    func="$3"
690
    shift 3
691
    check_lib $header $func "$@" || die "ERROR: $name not found"
692
}
693

    
694
require2(){
695
    name="$1"
696
    headers="$2"
697
    func="$3"
698
    shift 3
699
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
700
}
701

    
702
check_foo_config(){
703
    cfg=$1
704
    pkg=$2
705
    header=$3
706
    func=$4
707
    shift 4
708
    disable $cfg
709
    check_cmd ${pkg}-config --version
710
    err=$?
711
    if test "$err" = 0; then
712
        temp_cflags `${pkg}-config --cflags`
713
        temp_extralibs `${pkg}-config --libs`
714
        check_lib "$@" $header $func && enable $cfg
715
    fi
716
    return $err
717
}
718

    
719
apply(){
720
    file=$1
721
    shift
722
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
723
}
724

    
725
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
726
# system-dependent things.
727

    
728
COMPONENT_LIST="
729
    bsfs
730
    decoders
731
    demuxers
732
    encoders
733
    filters
734
    indevs
735
    muxers
736
    outdevs
737
    parsers
738
    protocols
739
"
740

    
741
CONFIG_LIST="
742
    $COMPONENT_LIST
743
    aandct
744
    avfilter
745
    avfilter_lavf
746
    avisynth
747
    beos_netserver
748
    bzlib
749
    fastdiv
750
    ffmpeg
751
    ffplay
752
    ffserver
753
    fft
754
    golomb
755
    gpl
756
    gprof
757
    gray
758
    hardcoded_tables
759
    ipv6
760
    libamr_nb
761
    libamr_wb
762
    libdc1394
763
    libdirac
764
    libfaac
765
    libfaad
766
    libfaadbin
767
    libgsm
768
    libmp3lame
769
    libnut
770
    libschroedinger
771
    libspeex
772
    libtheora
773
    libvorbis
774
    libx264
775
    libxvid
776
    mdct
777
    memalign_hack
778
    mlib
779
    mpegaudio_hp
780
    network
781
    nonfree
782
    postproc
783
    powerpc_perf
784
    shared
785
    small
786
    static
787
    swscale
788
    vdpau
789
    vhook
790
    x11grab
791
    xvmc
792
    zlib
793
"
794

    
795
THREADS_LIST='
796
    beosthreads
797
    os2threads
798
    pthreads
799
    w32threads
800
'
801

    
802
ARCH_LIST='
803
    alpha
804
    arm
805
    bfin
806
    ia64
807
    m68k
808
    mips
809
    parisc
810
    ppc
811
    s390
812
    sh4
813
    sparc
814
    sparc64
815
    x86
816
    x86_32
817
    x86_64
818
'
819

    
820
ARCH_EXT_LIST='
821
    altivec
822
    amd3dnow
823
    armv5te
824
    armv6
825
    armv6t2
826
    armvfp
827
    iwmmxt
828
    mmi
829
    mmx
830
    mmx2
831
    neon
832
    ppc4xx
833
    sse
834
    ssse3
835
    vis
836
'
837

    
838
HAVE_LIST="
839
    $ARCH_EXT_LIST
840
    $THREADS_LIST
841
    alsa_asoundlib_h
842
    altivec_h
843
    arpa_inet_h
844
    bswap
845
    closesocket
846
    cmov
847
    conio_h
848
    dcbzl
849
    dev_bktr_ioctl_bt848_h
850
    dev_bktr_ioctl_meteor_h
851
    dev_ic_bt8xx_h
852
    dev_video_meteor_ioctl_meteor_h
853
    dev_video_bktr_ioctl_bt848_h
854
    dlfcn_h
855
    dlopen
856
    dos_paths
857
    ebp_available
858
    ebx_available
859
    fast_64bit
860
    fast_cmov
861
    fast_unaligned
862
    fork
863
    freetype2
864
    gethrtime
865
    GetProcessTimes
866
    getrusage
867
    imlib2
868
    inet_aton
869
    inline_asm
870
    libdc1394_1
871
    libdc1394_2
872
    llrint
873
    lrint
874
    lrintf
875
    machine_ioctl_bt848_h
876
    machine_ioctl_meteor_h
877
    malloc_h
878
    memalign
879
    mkstemp
880
    pld
881
    posix_memalign
882
    ppc64
883
    round
884
    roundf
885
    sdl
886
    sdl_video_size
887
    setmode
888
    socklen_t
889
    soundcard_h
890
    poll_h
891
    sys_mman_h
892
    sys_resource_h
893
    sys_select_h
894
    sys_soundcard_h
895
    sys_videoio_h
896
    termios_h
897
    threads
898
    truncf
899
    winsock2_h
900
    yasm
901
"
902

    
903
# options emitted with CONFIG_ prefix but not available on command line
904
CONFIG_EXTRA="
905
    fft_mmx
906
    oldscaler
907
"
908

    
909
CMDLINE_SELECT="
910
    $ARCH_EXT_LIST
911
    $CONFIG_LIST
912
    $THREADS_LIST
913
    cross_compile
914
    debug
915
    extra_warnings
916
    logging
917
    optimizations
918
    stripping
919
"
920

    
921
PATHS_LIST='
922
    bindir
923
    datadir
924
    incdir
925
    libdir
926
    mandir
927
    prefix
928
    shlibdir
929
'
930

    
931
CMDLINE_SET="
932
    $PATHS_LIST
933
    arch
934
    build_suffix
935
    cc
936
    cpu
937
    cross_prefix
938
    extra_version
939
    host_cc
940
    host_cflags
941
    host_ldflags
942
    host_libs
943
    logfile
944
    nm
945
    source_path
946
    target_exec
947
    target_os
948
    target_path
949
"
950

    
951
# code dependency declarations
952

    
953
# architecture extensions
954
altivec_deps="ppc"
955
amd3dnow_deps="mmx"
956
armv5te_deps="arm"
957
armv6_deps="arm"
958
armv6t2_deps="arm"
959
armvfp_deps="arm"
960
iwmmxt_deps="arm"
961
mmi_deps="mips"
962
mmx_deps="x86"
963
mmx2_deps="mmx"
964
neon_deps="arm"
965
ppc4xx_deps="ppc"
966
sse_deps="mmx"
967
ssse3_deps="sse"
968
vis_deps="sparc"
969

    
970
# common features
971
fft_suggest="fft_mmx"
972
fft_mmx_deps="mmx yasm"
973
oldscaler_deps="!swscale"
974

    
975
# decoders / encoders
976
aac_decoder_select="fft mdct"
977
ac3_decoder_deps="gpl"
978
ac3_decoder_select="fft mdct"
979
atrac3_decoder_select="fft mdct"
980
cavs_decoder_select="golomb"
981
cook_decoder_select="fft mdct"
982
cscd_decoder_suggest="zlib"
983
dca_decoder_select="fft mdct"
984
dnxhd_encoder_select="aandct"
985
dxa_decoder_select="zlib"
986
eac3_decoder_deps="gpl"
987
eac3_decoder_select="fft mdct"
988
eatgq_decoder_select="aandct"
989
ffv1_decoder_select="golomb"
990
flac_decoder_select="golomb"
991
flac_encoder_select="golomb"
992
flashsv_decoder_select="zlib"
993
flashsv_encoder_select="zlib"
994
flv_encoder_select="aandct"
995
h261_encoder_select="aandct"
996
h263_encoder_select="aandct"
997
h263p_encoder_select="aandct"
998
h264_decoder_select="golomb"
999
h264_vdpau_decoder_deps="vdpau"
1000
imc_decoder_select="fft mdct"
1001
jpegls_decoder_select="golomb"
1002
jpegls_encoder_select="golomb"
1003
ljpeg_encoder_select="aandct"
1004
loco_decoder_select="golomb"
1005
mjpeg_encoder_select="aandct"
1006
mpeg1video_encoder_select="aandct"
1007
mpeg2video_encoder_select="aandct"
1008
mpeg4_encoder_select="aandct"
1009
mpeg_vdpau_decoder_deps="vdpau"
1010
mpeg1_vdpau_decoder_deps="vdpau"
1011
mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
1012
msmpeg4v1_encoder_select="aandct"
1013
msmpeg4v2_encoder_select="aandct"
1014
msmpeg4v3_encoder_select="aandct"
1015
nellymoser_decoder_select="fft mdct"
1016
nellymoser_encoder_select="fft mdct"
1017
png_decoder_select="zlib"
1018
png_encoder_select="zlib"
1019
qdm2_decoder_select="fft mdct"
1020
rv10_encoder_select="aandct"
1021
rv20_encoder_select="aandct"
1022
shorten_decoder_select="golomb"
1023
sonic_decoder_select="golomb"
1024
sonic_encoder_select="golomb"
1025
sonic_ls_encoder_select="golomb"
1026
svq3_decoder_select="golomb"
1027
svq3_decoder_suggest="zlib"
1028
tiff_decoder_suggest="zlib"
1029
tiff_encoder_suggest="zlib"
1030
tscc_decoder_select="zlib"
1031
vc1_vdpau_decoder_deps="vdpau"
1032
vorbis_decoder_select="fft mdct"
1033
vorbis_encoder_select="fft mdct"
1034
wmav1_decoder_select="fft mdct"
1035
wmav1_encoder_select="fft mdct"
1036
wmav2_decoder_select="fft mdct"
1037
wmav2_encoder_select="fft mdct"
1038
wmv1_encoder_select="aandct"
1039
wmv2_encoder_select="aandct"
1040
wmv3_vdpau_decoder_deps="vdpau"
1041
zlib_decoder_select="zlib"
1042
zlib_encoder_select="zlib"
1043
zmbv_decoder_select="zlib"
1044
zmbv_encoder_select="zlib"
1045

    
1046
# external libraries
1047
libamr_nb_decoder_deps="libamr_nb"
1048
libamr_nb_encoder_deps="libamr_nb"
1049
libamr_wb_decoder_deps="libamr_wb"
1050
libamr_wb_encoder_deps="libamr_wb"
1051
libdirac_decoder_deps="libdirac !libschroedinger"
1052
libdirac_encoder_deps="libdirac"
1053
libfaac_encoder_deps="libfaac"
1054
libfaad_decoder_deps="libfaad"
1055
libfaadbin_decoder_extralibs='$ldl'
1056
libgsm_decoder_deps="libgsm"
1057
libgsm_encoder_deps="libgsm"
1058
libgsm_ms_decoder_deps="libgsm"
1059
libgsm_ms_encoder_deps="libgsm"
1060
libmp3lame_encoder_deps="libmp3lame"
1061
libschroedinger_decoder_deps="libschroedinger"
1062
libschroedinger_encoder_deps="libschroedinger"
1063
libspeex_decoder_deps="libspeex"
1064
libtheora_encoder_deps="libtheora"
1065
libvorbis_encoder_deps="libvorbis"
1066
libx264_encoder_deps="libx264"
1067
libxvid_encoder_deps="libxvid"
1068
mpeg4aac_decoder_deps="libfaad"
1069
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1070

    
1071
# demuxers / muxers
1072
ac3_demuxer_deps="ac3_parser"
1073
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1074
alsa_demuxer_extralibs="-lasound"
1075
alsa_muxer_deps="alsa_asoundlib_h"
1076
alsa_muxer_extralibs="-lasound"
1077
audio_beos_demuxer_deps="audio_beos"
1078
audio_beos_demuxer_extralibs="-lmedia -lbe"
1079
audio_beos_muxer_deps="audio_beos"
1080
audio_beos_muxer_extralibs="-lmedia -lbe"
1081
avisynth_demuxer_deps="avisynth"
1082
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1083
dirac_demuxer_deps="dirac_parser"
1084
dv1394_demuxer_deps="dv1394 dv_demuxer"
1085
libdc1394_demuxer_deps="libdc1394"
1086
libnut_demuxer_deps="libnut"
1087
libnut_muxer_deps="libnut"
1088
matroska_demuxer_suggest="zlib bzlib"
1089
mov_demuxer_suggest="zlib"
1090
mp3_demuxer_deps="mpegaudio_parser"
1091
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1092
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1093
redir_demuxer_deps="network"
1094
rtp_muxer_deps="network rtp_protocol"
1095
rtsp_demuxer_deps="sdp_demuxer"
1096
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1097
v4l_demuxer_deps="linux_videodev_h"
1098
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1099
vfwcap_demuxer_deps="capCreateCaptureWindow"
1100
vfwcap_demuxer_extralibs="-lvfw32"
1101
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1102
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1103

    
1104
# protocols
1105
http_protocol_deps="network"
1106
rtp_protocol_deps="udp_protocol"
1107
tcp_protocol_deps="network"
1108
udp_protocol_deps="network"
1109

    
1110
# filters
1111
movie_filter_deps="avfilter_lavf"
1112

    
1113
# programs
1114
ffplay_deps="sdl"
1115
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1116
ffserver_extralibs='$ldl'
1117
vhook_extralibs='$ldl'
1118

    
1119

    
1120
# default parameters
1121

    
1122
logfile="config.err"
1123

    
1124
# installation paths
1125
prefix_default="/usr/local"
1126
bindir_default='${prefix}/bin'
1127
datadir_default='${prefix}/share/ffmpeg'
1128
incdir_default='${prefix}/include'
1129
libdir_default='${prefix}/lib'
1130
mandir_default='${prefix}/share/man'
1131
shlibdir_default="$libdir_default"
1132

    
1133
# toolchain
1134
ar="ar"
1135
cc_default="gcc"
1136
host_cc_default="gcc"
1137
ln_s="ln -sf"
1138
nm_default="nm"
1139
objformat="elf"
1140
ranlib="ranlib"
1141
strip="strip"
1142
yasmexe="yasm"
1143

    
1144
# machine
1145
arch=`uname -m`
1146
cpu="generic"
1147

    
1148
# OS
1149
target_os=$(tolower $(uname -s))
1150

    
1151
# configurable options
1152
enable debug
1153
enable ffmpeg
1154
enable ffplay
1155
enable ffserver
1156
enable ipv6
1157
enable mpegaudio_hp
1158
enable network
1159
enable oldscaler
1160
enable optimizations
1161
enable protocols
1162
enable static
1163
enable stripping
1164
vhook="default"
1165

    
1166
# build settings
1167
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1168
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1169
VHOOKSHFLAGS='$(SHFLAGS)'
1170
FFSERVERLDFLAGS=-Wl,-E
1171
LIBPREF="lib"
1172
LIBSUF=".a"
1173
FULLNAME='$(NAME)$(BUILDSUF)'
1174
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1175
SLIBPREF="lib"
1176
SLIBSUF=".so"
1177
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1178
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1179
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1180
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1181

    
1182
host_cflags='-O3 -g -Wall'
1183
host_libs='-lm'
1184

    
1185
target_path='.'
1186

    
1187
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1188
# full relative path for objects in subdirectories for non-recursive Make.
1189
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1190

    
1191
# find source path
1192
source_path="`dirname \"$0\"`"
1193
enable source_path_used
1194
if test -z "$source_path" -o "$source_path" = "." ; then
1195
    source_path="`pwd`"
1196
    disable source_path_used
1197
else
1198
    source_path="`cd \"$source_path\"; pwd`"
1199
    echo "$source_path" | grep -q '[[:blank:]]' &&
1200
        die "Out of tree builds are impossible with whitespace in source path."
1201
fi
1202

    
1203
FFMPEG_CONFIGURATION="$@"
1204

    
1205
find_things(){
1206
    thing=$1
1207
    pattern=$2
1208
    file=$source_path/$3
1209
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1210
}
1211

    
1212
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1213
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1214
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1215
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1216
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1217
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1218
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1219
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1220
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1221
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1222

    
1223
enable $ARCH_EXT_LIST \
1224
       $DECODER_LIST \
1225
       $ENCODER_LIST \
1226
       $PARSER_LIST \
1227
       $BSF_LIST \
1228
       $DEMUXER_LIST \
1229
       $MUXER_LIST \
1230
       $FILTER_LIST \
1231
       $PROTOCOL_LIST \
1232
       $INDEV_LIST \
1233
       $OUTDEV_LIST \
1234

    
1235
die_unknown(){
1236
    echo "Unknown option \"$1\"."
1237
    echo "See $0 --help for available options."
1238
    exit 1
1239
}
1240

    
1241
show_list() {
1242
    suffix=_$1
1243
    shift
1244
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1245
    exit 0
1246
}
1247

    
1248
for opt do
1249
    optval="${opt#*=}"
1250
    case "$opt" in
1251
    --extra-cflags=*) add_cflags $optval
1252
    ;;
1253
    --extra-ldflags=*) add_ldflags $optval
1254
    ;;
1255
    --extra-libs=*) add_extralibs $optval
1256
    ;;
1257
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1258
    ;;
1259
    --enable-debug=*) debuglevel="$optval"
1260
    ;;
1261
    --enable-*=*|--disable-*=*)
1262
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1263
    case "$thing" in
1264
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1265
        *) die_unknown "$opt" ;;
1266
    esac
1267
    ;;
1268
    --enable-?*|--disable-?*)
1269
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1270
    if is_in $option $COMPONENT_LIST; then
1271
        eval $action \$$(toupper ${option%s})_LIST
1272
    elif is_in $option $CMDLINE_SELECT; then
1273
        $action $option
1274
    else
1275
        die_unknown $opt
1276
    fi
1277
    ;;
1278
    --list-*)
1279
        NAME="${opt#--list-}"
1280
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1281
        NAME=${NAME%s}
1282
        eval show_list $NAME \$$(toupper $NAME)_LIST
1283
    ;;
1284
    --help|-h) show_help
1285
    ;;
1286
    *)
1287
    optname="${opt%%=*}"
1288
    optname="${optname#--}"
1289
    optname=$(echo "$optname" | sed 's/-/_/g')
1290
    is_in $optname $CMDLINE_SET || die_unknown $opt
1291
    eval $optname='$optval'
1292
    ;;
1293
    esac
1294
done
1295

    
1296
disabled logging && logfile=/dev/null
1297

    
1298
echo "# $0 $@" > $logfile
1299
set >> $logfile
1300

    
1301
test -n "$cross_prefix" && enable cross_compile
1302

    
1303
ar="${cross_prefix}${ar}"
1304
cc_default="${cross_prefix}${cc_default}"
1305
nm_default="${cross_prefix}${nm_default}"
1306
ranlib="${cross_prefix}${ranlib}"
1307
strip="${cross_prefix}${strip}"
1308

    
1309
set_default cc nm
1310
enabled cross_compile || host_cc_default=$cc
1311
set_default host_cc
1312

    
1313
# set temporary file name
1314
: ${TMPDIR:=$TEMPDIR}
1315
: ${TMPDIR:=$TMP}
1316
: ${TMPDIR:=/tmp}
1317

    
1318
TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1319
TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1320
TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1321
TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1322
TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1323
TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1324

    
1325
check_cflags -std=c99
1326

    
1327
case "$arch" in
1328
    i386|i486|i586|i686|i86pc|BePC)
1329
        arch="x86"
1330
        subarch="x86_32"
1331
        enable fast_unaligned
1332
    ;;
1333
    x86_64|amd64)
1334
        arch="x86"
1335
        subarch="x86_32"
1336
        enable cmov
1337
        enable fast_cmov
1338
        enable fast_unaligned
1339
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1340
        int test[sizeof(char*) - 7];
1341
EOF
1342
    ;;
1343
    arm|armv[4567]*l)
1344
        arch="arm"
1345
    ;;
1346
    alpha)
1347
        arch="alpha"
1348
        enable fast_64bit
1349
        check_cflags -mieee
1350
    ;;
1351
    "Power Macintosh"|ppc|powerpc)
1352
        arch="ppc"
1353
        enable fast_unaligned
1354
    ;;
1355
    ppc64)
1356
        arch="ppc"
1357
        enable fast_64bit
1358
        enable fast_unaligned
1359
    ;;
1360
    mips|mipsel|IP*)
1361
        arch="mips"
1362
    ;;
1363
    mips64)
1364
        arch="mips"
1365
        enable fast_64bit
1366
    ;;
1367
    sun4u|sparc64)
1368
        arch="sparc"
1369
        subarch="sparc64"
1370
        enable fast_64bit
1371
    ;;
1372
    sparc)
1373
        arch="sparc"
1374
    ;;
1375
    sh4|sh)
1376
        arch="sh4"
1377
    ;;
1378
    parisc|hppa)
1379
        arch="parisc"
1380
    ;;
1381
    parisc64|hppa64)
1382
        arch="parisc"
1383
        enable fast_64bit
1384
    ;;
1385
    s390|s390x)
1386
        arch="s390"
1387
    ;;
1388
    m68k)
1389
        arch="m68k"
1390
    ;;
1391
    ia64)
1392
        arch="ia64"
1393
        enable fast_64bit
1394
    ;;
1395
    bfin)
1396
        arch="bfin"
1397
    ;;
1398
    *)
1399
        arch="unknown"
1400
    ;;
1401
esac
1402

    
1403
enable $arch $subarch
1404

    
1405
# OS specific
1406
case $target_os in
1407
    beos|haiku|zeta)
1408
        prefix_default="$HOME/config"
1409
        # helps building libavcodec
1410
        add_cflags -DPIC -fomit-frame-pointer
1411
        # 3 gcc releases known for BeOS, each with ugly bugs
1412
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1413
        case "$gcc_version" in
1414
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1415
            disable mmx
1416
            ;;
1417
          *20010315*) echo "BeBits gcc"
1418
            add_cflags -fno-expensive-optimizations
1419
            ;;
1420
        esac
1421
        SHFLAGS=-nostart
1422
        # enable BeOS things
1423
        enable audio_beos
1424
        # no need for libm, but the inet stuff
1425
        # Check for BONE
1426
        # XXX: actually should check for NOT net_server
1427
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1428
            network_extralibs="-lbind -lsocket"
1429
        else
1430
            enable beos_netserver
1431
            network_extralibs="-lnet"
1432
        fi ;;
1433
    sunos)
1434
        FFSERVERLDFLAGS=""
1435
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1436
        network_extralibs="-lsocket -lnsl"
1437
        add_cflags -D__EXTENSIONS__
1438
        ;;
1439
    netbsd)
1440
        oss_demuxer_extralibs="-lossaudio"
1441
        oss_muxer_extralibs="-lossaudio"
1442
        ;;
1443
    openbsd)
1444
        disable need_memalign
1445
        LIBOBJFLAGS='$(PIC)'
1446
        SHFLAGS='-shared'
1447
        oss_demuxer_extralibs="-lossaudio"
1448
        oss_muxer_extralibs="-lossaudio"
1449
        ;;
1450
    freebsd)
1451
        disable need_memalign
1452
        ;;
1453
    bsd/os)
1454
        osextralibs="-lpoll -lgnugetopt"
1455
        strip="strip -d"
1456
        ;;
1457
    darwin)
1458
        disable need_memalign
1459
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1460
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1461
        strip="strip -x"
1462
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1463
        SLIBSUF=".dylib"
1464
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1465
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1466
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1467
        objformat="macho"
1468
        enabled x86_64 && objformat="macho64"
1469
        ;;
1470
    mingw32*)
1471
        target_os=mingw32
1472
        LIBTARGET=i386
1473
        if enabled x86_64; then
1474
            disable need_memalign
1475
            LIBTARGET=x64
1476
        fi
1477
        shlibdir_default="$bindir_default"
1478
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1479
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1480
        if enabled swscale; then
1481
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1482
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1483
        fi
1484
        disable ffserver
1485
        SLIBPREF=""
1486
        SLIBSUF=".dll"
1487
        EXESUF=".exe"
1488
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1489
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1490
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1491
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1492
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1493
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1494
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1495
        objformat="win32"
1496
        enable dos_paths
1497
        if ! enabled x86_64; then
1498
        check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1499
            die "ERROR: MinGW runtime version must be >= 3.15."
1500
        enabled_any avisynth vfwcap_demuxer &&
1501
            { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1502
              die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1503
        fi
1504
        ;;
1505
    cygwin*)
1506
        target_os=cygwin
1507
        shlibdir_default="$bindir_default"
1508
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1509
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1510
        if enabled swscale; then
1511
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1512
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1513
        fi
1514
        EXESUF=".exe"
1515
        SLIBPREF="cyg"
1516
        SLIBSUF=".dll"
1517
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1518
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1519
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1520
        objformat="win32"
1521
        enable dos_paths
1522
        ;;
1523
    *-dos|freedos|opendos)
1524
        disable ffplay ffserver vhook
1525
        disable $INDEV_LIST $OUTDEV_LIST
1526
        network_extralibs="-lsocket"
1527
        EXESUF=".exe"
1528
        objformat="coff"
1529
        enable dos_paths
1530
        ;;
1531
    linux)
1532
        enable dv1394
1533
        ;;
1534
    irix*)
1535
        target_os=irix
1536
        ranlib="echo ignoring ranlib"
1537
        ;;
1538
    os/2*)
1539
        strip="lxlite"
1540
        ln_s="cp -f"
1541
        EXESUF=".exe"
1542
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1543
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1544
        FFSERVERLDFLAGS=""
1545
        LIBSUF="_s.a"
1546
        SLIBPREF=""
1547
        SLIBSUF=".dll"
1548
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1549
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1550
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1551
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1552
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1553
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1554
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1555
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1556
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1557
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1558
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1559
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1560
        disable vhook
1561
        enable dos_paths
1562
        ;;
1563
    interix)
1564
        disable vhook
1565
        ;;
1566

    
1567
    *)
1568
        die "Unknown OS '$target_os'."
1569
        ;;
1570
esac
1571

    
1572
set_default $PATHS_LIST
1573

    
1574
add_extralibs $osextralibs
1575

    
1576
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1577
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1578

    
1579
# we need to build at least one lib type
1580
if ! enabled_any static shared; then
1581
    cat <<EOF
1582
At least one library type must be built.
1583
Specify --enable-static to build the static libraries or --enable-shared to
1584
build the shared libraries as well. To only build the shared libraries specify
1585
--disable-static in addition to --enable-shared.
1586
EOF
1587
    exit 1;
1588
fi
1589

    
1590
disabled static && LIBNAME=""
1591

    
1592
if enabled_any libfaad libfaadbin ; then
1593
    if check_header faad.h; then
1594
        check_cc <<EOF
1595
#include <faad.h>
1596
#ifndef FAAD2_VERSION
1597
ok faad1
1598
#endif
1599
int main(void) { return 0; }
1600
EOF
1601
        test $? = 0 && enable libfaad2
1602
    else
1603
        die "FAAD test failed."
1604
    fi
1605
fi
1606

    
1607

    
1608
if ! enabled gpl; then
1609
    die_gpl_disabled(){
1610
        name=$1
1611
        shift
1612
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1613
    }
1614
    die_gpl_disabled "The Postprocessing code" postproc
1615
    die_gpl_disabled "libx264"                 libx264
1616
    die_gpl_disabled "libxvidcore"             libxvid
1617
    die_gpl_disabled "FAAD2"                   libfaad2
1618
    die_gpl_disabled "The X11 grabber"         x11grab
1619
    die_gpl_disabled "The software scaler"     swscale
1620
fi
1621

    
1622
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1623
    die "libamr is nonfree and --enable-nonfree is not specified."
1624
fi
1625

    
1626
check_deps $ARCH_EXT_LIST
1627

    
1628
test -z "$need_memalign" && need_memalign="$mmx"
1629

    
1630
#Darwin CC versions
1631
if test $target_os = darwin; then
1632
    if $cc -v 2>&1 | grep -q xlc; then
1633
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1634
    else
1635
        add_cflags -pipe
1636
        check_cflags -force_cpusubtype_ALL
1637
        check_cflags -Wno-sign-compare
1638
        enabled shared || check_cflags -mdynamic-no-pic
1639
    fi
1640
fi
1641

    
1642
disabled optimizations || check_cflags -fomit-frame-pointer
1643

    
1644
# Add processor-specific flags
1645
if test $cpu != "generic"; then
1646
    warn_altivec(){
1647
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1648
    }
1649
    case $cpu in
1650
        601|ppc601|PowerPC601)
1651
            add_cflags -mcpu=601
1652
            warn_altivec enabled PPC601
1653
        ;;
1654
        603*|ppc603*|PowerPC603*)
1655
            add_cflags -mcpu=603
1656
            warn_altivec enabled PPC603
1657
        ;;
1658
        604*|ppc604*|PowerPC604*)
1659
            add_cflags -mcpu=604
1660
            warn_altivec enabled PPC604
1661
        ;;
1662
        G3|g3|75*|ppc75*|PowerPC75*)
1663
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1664
            warn_altivec enabled PPC75x
1665
        ;;
1666
        G4|g4|745*|ppc745*|PowerPC745*)
1667
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1668
            warn_altivec disabled PPC745x
1669
        ;;
1670
        74*|ppc74*|PowerPC74*)
1671
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1672
            warn_altivec disabled PPC74xx
1673
        ;;
1674
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1675
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1676
            warn_altivec disabled PPC970
1677
            enable ppc64
1678
        ;;
1679
        Cell|CELL|cell)
1680
            add_cflags -mcpu=cell
1681
            warn_altivec disabled Cell
1682
            enable ppc64
1683
        ;;
1684
        # targets that do NOT support conditional mov (cmov)
1685
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1686
            add_cflags -march=$cpu
1687
            disable cmov
1688
        ;;
1689
        # targets that do support conditional mov (cmov)
1690
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1691
            add_cflags -march=$cpu
1692
            enable cmov
1693
            enable fast_cmov
1694
        ;;
1695
        # targets that do support conditional mov but on which it's slow
1696
        pentium4|pentium4m|prescott|nocona)
1697
            add_cflags -march=$cpu
1698
            enable cmov
1699
            disable fast_cmov
1700
        ;;
1701
        sparc64)
1702
            add_cflags -mcpu=v9
1703
        ;;
1704
        arm11*|cortex*)
1705
            add_cflags -mcpu=$cpu
1706
            enable fast_unaligned
1707
        ;;
1708
        armv*)
1709
            add_cflags -march=$cpu
1710
        ;;
1711
        arm*)
1712
            add_cflags -mcpu=$cpu
1713
        ;;
1714
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1715
            add_cflags -mcpu=$cpu
1716
        ;;
1717
        *)
1718
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1719
        ;;
1720
    esac
1721
fi
1722

    
1723
# make sure we can execute files in $TMPDIR
1724
cat > $TMPSH 2>> $logfile <<EOF
1725
#! /bin/sh
1726
EOF
1727
chmod +x $TMPSH >> $logfile 2>&1
1728
if ! $TMPSH >> $logfile 2>&1; then
1729
    cat <<EOF
1730
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1731
variable to another directory and make sure that it is not mounted noexec.
1732
EOF
1733
    die "Sanity test failed."
1734
fi
1735
rm $TMPSH
1736

    
1737
# compiler sanity check
1738
check_exec <<EOF
1739
int main(void){ return 0; }
1740
EOF
1741
if test "$?" != 0; then
1742
    echo "$cc is unable to create an executable file."
1743
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1744
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1745
        echo "Only do this if you know what cross compiling means."
1746
    fi
1747
    die "C compiler test failed."
1748
fi
1749

    
1750
check_cc <<EOF || die "Symbol mangling check failed."
1751
int ff_extern;
1752
EOF
1753
sym=$($nm -P -g $TMPO | grep ff_extern)
1754
extern_prefix=${sym%%ff_extern*}
1755

    
1756
check_asm inline_asm '""'
1757

    
1758
if enabled x86; then
1759
    # check whether EBP is available on x86
1760
    # As 'i' is stored on the stack, this program will crash
1761
    # if the base pointer is used to access it because the
1762
    # base pointer is cleared in the inline assembly code.
1763
    check_exec_crash <<EOF && enable ebp_available
1764
    volatile int i=0;
1765
    __asm__ volatile (
1766
        "xorl %%ebp, %%ebp"
1767
    ::: "%ebp");
1768
    return i;
1769
EOF
1770

    
1771
    # check wether EBX is available on x86
1772
    check_asm ebx_available '"":::"%ebx"'
1773

    
1774
    # check whether binutils is new enough to compile SSSE3/MMX2
1775
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1776
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1777

    
1778
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1779

    
1780
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1781
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1782
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1783
    case "$objformat" in
1784
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1785
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1786
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1787
    esac
1788
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1789
fi
1790

    
1791
# check for assembler specific support
1792

    
1793
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1794
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1795

    
1796
# check for SIMD availability
1797

    
1798
# AltiVec flags: The FSF version of GCC differs from the Apple version
1799
if enabled altivec; then
1800
    check_cflags -maltivec -mabi=altivec &&
1801
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1802
        check_cflags -faltivec
1803

    
1804
    # check if our compiler supports Motorola AltiVec C API
1805
    check_cc <<EOF || disable altivec
1806
$inc_altivec_h
1807
int main(void) {
1808
    vector signed int v1, v2, v3;
1809
    v1 = vec_add(v2,v3);
1810
    return 0;
1811
}
1812
EOF
1813

    
1814
    # check if our compiler supports braces for vector declarations
1815
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1816
$inc_altivec_h
1817
int main (void) { (vector int) {1}; return 0; }
1818
EOF
1819
fi
1820

    
1821
# We have to check if pld is a nop and disable it.
1822
enabled arm     && check_asm pld     '"pld [r0]"'
1823
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1824
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1825
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1826
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1827
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1828
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1829
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1830
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1831

    
1832
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1833

    
1834
# ---
1835
# big/little-endian test
1836
check_cc <<EOF || die "endian test failed"
1837
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1838
EOF
1839
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1840

    
1841
# ---
1842
# check availability of some header files
1843

    
1844
if check_func dlopen; then
1845
    ldl=
1846
elif check_func dlopen -ldl; then
1847
    ldl=-ldl
1848
fi
1849

    
1850
check_func  fork
1851
check_func  gethrtime
1852
check_func  getrusage
1853
check_func  inet_aton $network_extralibs
1854
check_func  memalign
1855
check_func  mkstemp
1856
check_func  posix_memalign
1857
check_func_headers io.h setmode
1858
check_func_headers windows.h GetProcessTimes
1859

    
1860
check_header conio.h
1861
check_header dlfcn.h
1862
check_header malloc.h
1863
check_header poll.h
1864
check_header sys/mman.h
1865
check_header sys/resource.h
1866
check_header sys/select.h
1867
check_header termios.h
1868
check_header vdpau/vdpau.h
1869
check_header vdpau/vdpau_x11.h
1870
check_header X11/extensions/XvMClib.h
1871

    
1872
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1873
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1874
fi
1875

    
1876
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1877
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1878

    
1879
# check for some common methods of building with pthread support
1880
# do this before the optional library checks as some of them require pthreads
1881
if enabled pthreads; then
1882
    if check_func pthread_create; then
1883
        :
1884
    elif check_func pthread_create -pthread; then
1885
        add_cflags -pthread
1886
        add_extralibs -pthread
1887
    elif check_func pthread_create -pthreads; then
1888
        add_cflags -pthreads
1889
        add_extralibs -pthreads
1890
    elif check_func pthread_create -lpthreadGC2; then
1891
        add_extralibs -lpthreadGC2
1892
    elif ! check_lib pthread.h pthread_create -lpthread; then
1893
        die "ERROR: can't find pthreads library"
1894
    fi
1895
fi
1896

    
1897
for thread in $THREADS_LIST; do
1898
    if enabled $thread; then
1899
        test -n "$thread_type" &&
1900
            die "ERROR: Only one thread type must be selected." ||
1901
            thread_type="$thread"
1902
    fi
1903
done
1904

    
1905
check_lib math.h sin -lm
1906

    
1907
# test for C99 functions in math.h
1908
for func in llrint lrint lrintf round roundf truncf; do
1909
    check_exec <<EOF && enable $func || disable $func
1910
#include <math.h>
1911
int main(void) { return ($func(3.999f) > 0)?0:1; }
1912
EOF
1913
done
1914

    
1915
# these are off by default, so fail if requested and not available
1916
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1917
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1918
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1919
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1920
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1921
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1922
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1923
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1924
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1925
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1926
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1927
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1928
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1929
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1930
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1931
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1932
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1933
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1934
                        die "ERROR: libx264 version must be >= 0.65."; }
1935
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1936
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1937

    
1938
# libdc1394 check
1939
if enabled libdc1394; then
1940
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1941
        enable libdc1394_2; } ||
1942
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1943
        enable libdc1394_1; } ||
1944
    die "ERROR: No version of libdc1394 found "
1945
fi
1946

    
1947

    
1948
_restrict=
1949
for restrict_keyword in restrict __restrict__ __restrict; do
1950
    check_cc <<EOF && _restrict=$restrict_keyword && break
1951
void foo(char * $restrict_keyword p);
1952
EOF
1953
done
1954

    
1955
test "$vhook" = "default" && vhook="$dlopen"
1956

    
1957
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1958
    disable vhook
1959
    echo
1960
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1961
    echo "Patches welcome."
1962
    echo
1963
fi
1964

    
1965
if enabled vhook; then
1966
    check_ldflags -rdynamic
1967
    check_ldflags -export-dynamic
1968
fi
1969

    
1970
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1971
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1972

    
1973
##########################################
1974
# SDL check
1975

    
1976
disable sdl_too_old
1977
disable sdl
1978
SDL_CONFIG="${cross_prefix}sdl-config"
1979
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1980
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1981
    temp_cflags $sdl_cflags
1982
    temp_extralibs `"${SDL_CONFIG}" --libs`
1983
    if check_lib2 SDL.h SDL_Init; then
1984
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1985
        if test "$_sdlversion" -lt 121 ; then
1986
            enable sdl_too_old
1987
        else
1988
            enable sdl
1989
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1990
#include <SDL.h>
1991
int main(int argc, char **argv){
1992
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1993
    int w = vi->current_w;
1994
    return 0;
1995
}
1996
EOF
1997
        fi
1998
    fi
1999
    restore_flags
2000
fi
2001

    
2002
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2003

    
2004
##########################################
2005
# Network check
2006

    
2007
if enabled network; then
2008
    check_type "sys/types.h sys/socket.h" socklen_t
2009
    # Prefer arpa/inet.h over winsock2
2010
    if check_header arpa/inet.h ; then
2011
        check_func closesocket
2012
    elif check_header winsock2.h ; then
2013
        network_extralibs="-lws2_32"
2014
        check_type ws2tcpip.h socklen_t
2015
        check_func_headers winsock2.h closesocket
2016
    fi
2017
fi
2018

    
2019
##########################################
2020
# IPv6 check
2021

    
2022
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2023
#include <sys/types.h>
2024
#include <sys/socket.h>
2025
#include <netinet/in.h>
2026
#include <netdb.h>
2027
int main(void) {
2028
    struct sockaddr_storage saddr;
2029
    struct ipv6_mreq mreq6;
2030
    getaddrinfo(0,0,0,0);
2031
    getnameinfo(0,0,0,0,0,0,0);
2032
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2033
}
2034
EOF
2035

    
2036
check_header linux/videodev.h
2037
check_header linux/videodev2.h
2038
check_header sys/videoio.h
2039

    
2040
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2041

    
2042
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2043
{ check_header dev/bktr/ioctl_meteor.h &&
2044
  check_header dev/bktr/ioctl_bt848.h; } ||
2045
{ check_header machine/ioctl_meteor.h &&
2046
  check_header machine/ioctl_bt848.h; } ||
2047
{ check_header dev/video/meteor/ioctl_meteor.h &&
2048
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2049
check_header dev/ic/bt8xx.h
2050

    
2051
check_header sys/soundcard.h
2052
check_header soundcard.h
2053

    
2054
check_header alsa/asoundlib.h &&
2055
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2056

    
2057
# deal with the X11 frame grabber
2058
enabled x11grab                         &&
2059
check_header X11/Xlib.h                 &&
2060
check_header X11/extensions/XShm.h      &&
2061
check_func XOpenDisplay -lX11           &&
2062
check_func XShmCreateImage -lX11 -lXext
2063

    
2064
enabled debug && add_cflags -g"$debuglevel"
2065

    
2066
# add some useful compiler flags if supported
2067
check_cflags -Wdeclaration-after-statement
2068
check_cflags -Wall
2069
check_cflags -Wno-switch
2070
check_cflags -Wdisabled-optimization
2071
check_cflags -Wpointer-arith
2072
check_cflags -Wredundant-decls
2073
check_cflags -Wno-pointer-sign
2074
check_cflags -Wcast-qual
2075
check_cflags -Wwrite-strings
2076
check_cflags -Wtype-limits
2077
check_cflags -Wundef
2078
enabled extra_warnings && check_cflags -Winline
2079

    
2080
# add some linker flags
2081
check_ldflags -Wl,--warn-common
2082
check_ldflags -Wl,--as-needed
2083
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'
2084
check_ldflags -Wl,-Bsymbolic
2085

    
2086
if enabled small; then
2087
    check_cflags -Os            # not all compilers support -Os
2088
    optimizations="small"
2089
elif enabled optimizations; then
2090
    if $cc -v 2>&1 | grep -q xlc; then
2091
        add_cflags  -O5
2092
        add_ldflags -O5
2093
    else
2094
        add_cflags -O3
2095
    fi
2096
fi
2097
check_cflags -fno-math-errno
2098
check_cflags -fno-signed-zeros
2099

    
2100
# add some flags for Intel C Compiler
2101
if $cc --version 2> /dev/null | grep -q Intel; then
2102
  # Just warnings, no remarks
2103
  check_cflags -w1
2104
  # -wd: Disable following warnings
2105
  # 144, 167, 556: -Wno-pointer-sign
2106
  # 10006: ignoring unknown option -fno-signed-zeros
2107
  # 10156: ignoring option '-W'; no argument required
2108
  check_cflags -wd144,167,556,10006,10156
2109
  # 11030: Warning unknown option --as-needed
2110
  # 10156: ignoring option '-export'; no argument required
2111
  check_ldflags -wd10156,11030
2112
  # Allow to compile with optimizations
2113
  check_ldflags -march=$cpu
2114
fi
2115

    
2116
# PIC flags for shared library objects where they are needed
2117
if enabled shared; then
2118
    # LIBOBJFLAGS may have already been set in the OS configuration
2119
    if test -z "$LIBOBJFLAGS" ; then
2120
        case "${subarch-$arch}" in
2121
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2122
        esac
2123
    fi
2124
fi
2125

    
2126
if enabled gprof; then
2127
    add_cflags  -p
2128
    add_ldflags -p
2129
fi
2130

    
2131
VHOOKCFLAGS="-fPIC"
2132

    
2133
# Find out if the .align argument is a power of two or not.
2134
check_asm asmalign_pot '".align 3"'
2135

    
2136
enabled_any $DECODER_LIST      && enable decoders
2137
enabled_any $ENCODER_LIST      && enable encoders
2138
enabled_any $BSF_LIST          && enable bsfs
2139
enabled_any $DEMUXER_LIST      && enable demuxers
2140
enabled_any $MUXER_LIST        && enable muxers
2141
enabled_any $FILTER_LIST       && enable filters
2142
enabled_any $INDEV_LIST        && enable demuxers
2143
enabled_any $OUTDEV_LIST       && enable muxers
2144
enabled_any $PROTOCOL_LIST     && enable protocols
2145

    
2146
enabled_any $THREADS_LIST      && enable threads
2147

    
2148
check_deps $CONFIG_LIST       \
2149
           $CONFIG_EXTRA      \
2150
           $HAVE_LIST         \
2151
           $DECODER_LIST      \
2152
           $ENCODER_LIST      \
2153
           $PARSER_LIST       \
2154
           $BSF_LIST          \
2155
           $DEMUXER_LIST      \
2156
           $MUXER_LIST        \
2157
           $FILTER_LIST       \
2158
           $INDEV_LIST        \
2159
           $OUTDEV_LIST       \
2160
           $PROTOCOL_LIST     \
2161

    
2162
echo "install prefix            $prefix"
2163
echo "source path               $source_path"
2164
echo "C compiler                $cc"
2165
echo ".align is power-of-two    $asmalign_pot"
2166
echo "ARCH                      $arch ($cpu)"
2167
if test "$build_suffix" != ""; then
2168
    echo "build suffix              $build_suffix"
2169
fi
2170
if test "$extra_version" != ""; then
2171
    echo "version string suffix     $extra_version"
2172
fi
2173
echo "big-endian                ${bigendian-no}"
2174
if enabled x86; then
2175
    echo "yasm                      ${yasm-no}"
2176
    echo "MMX enabled               ${mmx-no}"
2177
    echo "MMX2 enabled              ${mmx2-no}"
2178
    echo "3DNow! enabled            ${amd3dnow-no}"
2179
    echo "SSE enabled               ${sse-no}"
2180
    echo "SSSE3 enabled             ${ssse3-no}"
2181
    echo "CMOV enabled              ${cmov-no}"
2182
    echo "CMOV is fast              ${fast_cmov-no}"
2183
    echo "EBX available             ${ebx_available-no}"
2184
    echo "EBP available             ${ebp_available-no}"
2185
fi
2186
if enabled arm; then
2187
    echo "ARMv5TE enabled           ${armv5te-no}"
2188
    echo "ARMv6 enabled             ${armv6-no}"
2189
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2190
    echo "ARM VFP enabled           ${armvfp-no}"
2191
    echo "IWMMXT enabled            ${iwmmxt-no}"
2192
    echo "NEON enabled              ${neon-no}"
2193
fi
2194
if enabled mips; then
2195
    echo "MMI enabled               ${mmi-no}"
2196
fi
2197
if enabled ppc; then
2198
    echo "AltiVec enabled           ${altivec-no}"
2199
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2200
    echo "dcbzl available           ${dcbzl-no}"
2201
    echo "performance report        ${powerpc_perf-no}"
2202
fi
2203
if enabled sparc; then
2204
    echo "VIS enabled               ${vis-no}"
2205
fi
2206
echo "gprof enabled             ${gprof-no}"
2207
echo "debug symbols             ${debug-no}"
2208
echo "strip symbols             ${stripping-no}"
2209
echo "optimizations             ${optimizations-no}"
2210
echo "static                    ${static-no}"
2211
echo "shared                    ${shared-no}"
2212
echo "postprocessing support    ${postproc-no}"
2213
echo "software scaler enabled   ${swscale-no}"
2214
echo "new filter support        ${avfilter-no}"
2215
echo "filters using lavformat   ${avfilter_lavf-no}"
2216
echo "video hooking             ${vhook-no}"
2217
if enabled vhook; then
2218
    echo "Imlib2 support            ${imlib2-no}"
2219
    echo "FreeType support          ${freetype2-no}"
2220
fi
2221
echo "network support           ${network-no}"
2222
if enabled network; then
2223
    echo "IPv6 support              ${ipv6-no}"
2224
fi
2225
echo "threading support         ${thread_type-no}"
2226
echo "SDL support               ${sdl-no}"
2227
if enabled sdl_too_old; then
2228
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2229
fi
2230
echo "Sun medialib support      ${mlib-no}"
2231
echo "AVISynth enabled          ${avisynth-no}"
2232
echo "libamr-nb support         ${libamr_nb-no}"
2233
echo "libamr-wb support         ${libamr_wb-no}"
2234
echo "libdc1394 support         ${libdc1394-no}"
2235
echo "libdirac enabled          ${libdirac-no}"
2236
echo "libfaac enabled           ${libfaac-no}"
2237
echo "libfaad enabled           ${libfaad-no}"
2238
echo "libfaad dlopened          ${libfaadbin-no}"
2239
echo "libgsm enabled            ${libgsm-no}"
2240
echo "libmp3lame enabled        ${libmp3lame-no}"
2241
echo "libnut enabled            ${libnut-no}"
2242
echo "libschroedinger enabled   ${libschroedinger-no}"
2243
echo "libspeex enabled          ${libspeex-no}"
2244
echo "libtheora enabled         ${libtheora-no}"
2245
echo "libvorbis enabled         ${libvorbis-no}"
2246
echo "libx264 enabled           ${libx264-no}"
2247
echo "libxvid enabled           ${libxvid-no}"
2248
echo "vdpau enabled             ${vdpau-no}"
2249
echo "zlib enabled              ${zlib-no}"
2250
echo "bzlib enabled             ${bzlib-no}"
2251
echo
2252

    
2253
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2254
    echo "Enabled ${type}s:"
2255
    eval list=\$$(toupper $type)_LIST
2256
    for part in $list; do
2257
        enabled $part && echo ${part%_*}
2258
    done | sort | pr -3 -t
2259
    echo
2260
done
2261

    
2262
license="LGPL"
2263
if enabled nonfree; then
2264
    license="unredistributable"
2265
elif enabled gpl; then
2266
    license="GPL"
2267
fi
2268

    
2269
echo "License: $license"
2270

    
2271
echo "Creating config.mak and config.h..."
2272

    
2273
echo "# Automatically generated by configure - do not modify!" > config.mak
2274
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2275
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2276
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2277
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2278
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2279

    
2280
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2281
echo "prefix=$prefix" >> config.mak
2282
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2283
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2284
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2285
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2286
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2287
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2288
echo "CC=$cc" >> config.mak
2289
echo "YASM=$yasmexe" >> config.mak
2290
echo "AR=$ar" >> config.mak
2291
echo "RANLIB=$ranlib" >> config.mak
2292
echo "LN_S=$ln_s" >> config.mak
2293
enabled stripping &&
2294
    echo "STRIP=$strip" >> config.mak ||
2295
    echo "STRIP=echo ignoring strip" >> config.mak
2296

    
2297
echo "OPTFLAGS=$CFLAGS" >> config.mak
2298
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2299
echo "LDFLAGS=$LDFLAGS" >> config.mak
2300
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2301
echo "SHFLAGS=$SHFLAGS" >> config.mak
2302
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2303
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2304
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2305
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2306
echo "BUILD_STATIC=$static" >> config.mak
2307
echo "BUILDSUF=$build_suffix" >> config.mak
2308
echo "FULLNAME=$FULLNAME" >> config.mak
2309
echo "LIBPREF=$LIBPREF" >> config.mak
2310
echo "LIBSUF=$LIBSUF" >> config.mak
2311
echo "LIBNAME=$LIBNAME" >> config.mak
2312
echo "SLIBPREF=$SLIBPREF" >> config.mak
2313
echo "SLIBSUF=$SLIBSUF" >> config.mak
2314
echo "EXESUF=$EXESUF" >> config.mak
2315
echo "EXTRA_VERSION=$extra_version" >> config.mak
2316
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2317
echo "HOSTCC=$host_cc" >> config.mak
2318
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2319
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2320
echo "HOSTLIBS=$host_libs" >> config.mak
2321
echo "TARGET_EXEC=$target_exec" >> config.mak
2322
echo "TARGET_PATH=$target_path" >> config.mak
2323

    
2324
if enabled bigendian; then
2325
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2326
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2327
fi
2328

    
2329
if enabled sdl; then
2330
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2331
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2332
fi
2333
if enabled texi2html; then
2334
    echo "BUILD_DOC=yes" >> config.mak
2335
fi
2336

    
2337
get_version(){
2338
    name=$1
2339
    file=$source_path/$2
2340
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2341
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2342
    lcname=$(tolower $name)
2343
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2344
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2345
}
2346

    
2347
get_version LIBSWSCALE  libswscale/swscale.h
2348
get_version LIBPOSTPROC libpostproc/postprocess.h
2349
get_version LIBAVCODEC  libavcodec/avcodec.h
2350
get_version LIBAVDEVICE libavdevice/avdevice.h
2351
get_version LIBAVFORMAT libavformat/avformat.h
2352
get_version LIBAVUTIL   libavutil/avutil.h
2353
get_version LIBAVFILTER libavfilter/avfilter.h
2354

    
2355
if enabled shared; then
2356
    echo "BUILD_SHARED=yes" >> config.mak
2357
    echo "PIC=-fPIC -DPIC" >> config.mak
2358
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2359
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2360
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2361
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2362
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2363
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2364
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2365
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2366
fi
2367
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2368
echo "EXTRALIBS=$extralibs" >> config.mak
2369

    
2370
echo "ARCH=$arch" >> config.mak
2371

    
2372
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2373
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2374
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2375
                                      $CONFIG_EXTRA      \
2376
                                      $DECODER_LIST      \
2377
                                      $ENCODER_LIST      \
2378
                                      $PARSER_LIST       \
2379
                                      $BSF_LIST          \
2380
                                      $DEMUXER_LIST      \
2381
                                      $MUXER_LIST        \
2382
                                      $FILTER_LIST       \
2383
                                      $PROTOCOL_LIST     \
2384
                                      $INDEV_LIST        \
2385
                                      $OUTDEV_LIST       \
2386

    
2387
echo "#define restrict $_restrict" >> $TMPH
2388

    
2389
if enabled small; then
2390
    echo "#define av_always_inline"  >> $TMPH
2391
fi
2392

    
2393
echo "SRC_PATH=\"$source_path\"" >> config.mak
2394
echo "SRC_PATH_BARE=$source_path" >> config.mak
2395
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2396

    
2397
# Apparently it's not possible to portably echo a backslash.
2398
enabled asmalign_pot &&
2399
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2400
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2401

    
2402
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2403

    
2404
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2405

    
2406
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2407
cmp -s $TMPH config.h &&
2408
    echo "config.h is unchanged" ||
2409
    mv -f $TMPH config.h
2410

    
2411
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2412

    
2413
# build tree in object directory if source path is different from current one
2414
if enabled source_path_used; then
2415
    DIRS="\
2416
        doc               \
2417
        libavcodec        \
2418
        libavcodec/alpha  \
2419
        libavcodec/arm    \
2420
        libavcodec/bfin   \
2421
        libavcodec/mlib   \
2422
        libavcodec/ppc    \
2423
        libavcodec/sh4    \
2424
        libavcodec/sparc  \
2425
        libavcodec/x86    \
2426
        libavdevice       \
2427
        libavfilter       \
2428
        libavformat       \
2429
        libavutil         \
2430
        libpostproc       \
2431
        libswscale        \
2432
        tests             \
2433
        tools             \
2434
        vhook             \
2435
        "
2436
    FILES="\
2437
        Makefile             \
2438
        common.mak           \
2439
        subdir.mak           \
2440
        doc/texi2pod.pl      \
2441
        libavcodec/Makefile  \
2442
        libavdevice/Makefile \
2443
        libavfilter/Makefile \
2444
        libavformat/Makefile \
2445
        libavutil/Makefile   \
2446
        libpostproc/Makefile \
2447
        libswscale/Makefile  \
2448
        "
2449
    for dir in $DIRS ; do
2450
        mkdir -p $dir
2451
    done
2452
    for f in $FILES ; do
2453
        $ln_s "$source_path/$f" $f
2454
    done
2455
fi
2456

    
2457

    
2458
# build pkg-config files
2459

    
2460
pkgconfig_generate(){
2461
name=$1
2462
shortname=${name#lib}${build_suffix}
2463
comment=$2
2464
version=$3
2465
libs=$4
2466
requires=$5
2467
cat <<EOF > $name/$name.pc
2468
prefix=$prefix
2469
exec_prefix=\${prefix}
2470
libdir=$libdir
2471
includedir=$incdir
2472

    
2473
Name: $name
2474
Description: $comment
2475
Version: $version
2476
Requires: $(disabled shared && echo $requires)
2477
Requires.private: $(enabled shared && echo $requires)
2478
Conflicts:
2479
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2480
Libs.private: $(enabled shared && echo $libs)
2481
Cflags: -I\${includedir}
2482
EOF
2483
cat <<EOF > $name/$name-uninstalled.pc
2484
prefix=
2485
exec_prefix=
2486
libdir=\${pcfiledir}
2487
includedir=${source_path}
2488

    
2489
Name: $name
2490
Description: $comment
2491
Version: $version
2492
Requires: $requires
2493
Conflicts:
2494
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2495
Cflags: -I\${includedir}
2496
EOF
2497
}
2498

    
2499
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2500
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2501
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2502
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2503
enabled avfilter &&
2504
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2505
enabled postproc &&
2506
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2507
if enabled swscale; then
2508
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2509
else
2510
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2511
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2512
fi