Statistics
| Branch: | Revision:

ffmpeg / configure @ 63cae55d

History | View | Annotate | Download (72.8 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 "  --disable-rdft           disable RDFT code"
106
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
107
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
108
  echo "  --enable-beos-netserver  enable BeOS netserver"
109
  echo "  --disable-encoder=NAME   disable encoder NAME"
110
  echo "  --enable-encoder=NAME    enable encoder NAME"
111
  echo "  --disable-encoders       disable all encoders"
112
  echo "  --disable-decoder=NAME   disable decoder NAME"
113
  echo "  --enable-decoder=NAME    enable decoder NAME"
114
  echo "  --disable-decoders       disable all decoders"
115
  echo "  --disable-muxer=NAME     disable muxer NAME"
116
  echo "  --enable-muxer=NAME      enable muxer NAME"
117
  echo "  --disable-muxers         disable all muxers"
118
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
119
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
120
  echo "  --disable-demuxers       disable all demuxers"
121
  echo "  --enable-parser=NAME     enable parser NAME"
122
  echo "  --disable-parser=NAME    disable parser NAME"
123
  echo "  --disable-parsers        disable all parsers"
124
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
125
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
126
  echo "  --disable-bsfs           disable all bitstream filters"
127
  echo "  --enable-protocol=NAME   enable protocol NAME"
128
  echo "  --disable-protocol=NAME  disable protocol NAME"
129
  echo "  --disable-protocols      disable all protocols"
130
  echo "  --disable-indevs         disable input devices"
131
  echo "  --disable-outdevs        disable output devices"
132
  echo "  --disable-devices        disable all devices"
133
  echo "  --enable-filter=NAME     enable filter NAME"
134
  echo "  --disable-filter=NAME    disable filter NAME"
135
  echo "  --disable-filters        disable all filters"
136
  echo "  --list-decoders          show all available decoders"
137
  echo "  --list-encoders          show all available encoders"
138
  echo "  --list-muxers            show all available muxers"
139
  echo "  --list-demuxers          show all available demuxers"
140
  echo "  --list-parsers           show all available parsers"
141
  echo "  --list-protocols         show all available protocols"
142
  echo "  --list-bsfs              show all available bitstream filters"
143
  echo "  --list-indevs            show all available input devices"
144
  echo "  --list-outdevs           show all available output devices"
145
  echo "  --list-filters           show all available filters"
146
  echo
147
  echo "External library support:"
148
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
149
  echo "  --enable-bzlib           enable bzlib [autodetect]"
150
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
151
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
152
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
153
  echo "                           and libraw1394 [no]"
154
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
155
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
156
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
157
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
158
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
159
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
160
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
161
  echo "                           native (de)muxer exists [no]"
162
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
163
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
164
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
165
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
166
  echo "                           native implementation exists [no]"
167
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
168
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
169
  echo "                           native MPEG-4/Xvid encoder exists [no]"
170
  echo "  --enable-mlib            enable Sun medialib [no]"
171
  echo "  --enable-zlib            enable zlib [autodetect]"
172
  echo ""
173
  echo "Advanced options (experts only):"
174
  echo "  --source-path=PATH       path to source code [$source_path]"
175
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
176
  echo "  --enable-cross-compile   assume a cross-compiler is used"
177
  echo "  --target-os=OS           compiler targets OS [$target_os]"
178
  echo "  --target-exec=CMD        command to run executables on target"
179
  echo "  --target-path=DIR        path to view of build directory on target"
180
  echo "  --nm=NM                  use nm tool"
181
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
182
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
183
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
184
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
185
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
186
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
187
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
188
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
189
  echo "  --extra-version=STRING   version string suffix []"
190
  echo "  --build-suffix=SUFFIX    library name suffix []"
191
  echo "  --arch=ARCH              select architecture [$arch]"
192
  echo "  --cpu=CPU                select the minimum required CPU (affects"
193
  echo "                           instruction selection, may crash on older CPUs)"
194
  echo "  --enable-powerpc-perf    enable performance report on PPC"
195
  echo "                           (requires enabling PMC)"
196
  echo "  --disable-altivec        disable AltiVec optimizations"
197
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
198
  echo "  --disable-mmx            disable MMX optimizations"
199
  echo "  --disable-mmx2           disable MMX2 optimizations"
200
  echo "  --disable-sse            disable SSE optimizations"
201
  echo "  --disable-ssse3          disable SSSE3 optimizations"
202
  echo "  --disable-armv5te        disable armv5te optimizations"
203
  echo "  --disable-armv6          disable armv6 optimizations"
204
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
205
  echo "  --disable-armvfp         disable ARM VFP optimizations"
206
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
207
  echo "  --disable-mmi            disable MMI optimizations"
208
  echo "  --disable-neon           disable neon optimizations"
209
  echo "  --disable-vis            disable VIS optimizations"
210
  echo
211
  echo "Developer options (useful when working on FFmpeg itself):"
212
  echo "  --disable-debug          disable debugging symbols"
213
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
214
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
215
  echo "  --disable-optimizations  disable compiler optimizations"
216
  echo "  --enable-extra-warnings  enable more compiler warnings"
217
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
218
  echo ""
219
  echo "NOTE: Object files are built at the place where configure is launched."
220
  exit 0
221
}
222

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
797
THREADS_LIST='
798
    beosthreads
799
    os2threads
800
    pthreads
801
    w32threads
802
'
803

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

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

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

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

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

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

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

    
953
# code dependency declarations
954

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

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

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

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

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

    
1106
# protocols
1107
http_protocol_deps="network"
1108
rtp_protocol_deps="udp_protocol"
1109
tcp_protocol_deps="network"
1110
udp_protocol_deps="network"
1111

    
1112
# filters
1113
movie_filter_deps="avfilter_lavf"
1114

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

    
1121

    
1122
# default parameters
1123

    
1124
logfile="config.err"
1125

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

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

    
1146
# machine
1147
arch=`uname -m`
1148
cpu="generic"
1149

    
1150
# OS
1151
target_os=$(tolower $(uname -s))
1152

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

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

    
1184
host_cflags='-O3 -g -Wall'
1185
host_libs='-lm'
1186

    
1187
target_path='.'
1188

    
1189
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1190
# full relative path for objects in subdirectories for non-recursive Make.
1191
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,"'
1192

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

    
1205
FFMPEG_CONFIGURATION="$@"
1206

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

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

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

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

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

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

    
1298
disabled logging && logfile=/dev/null
1299

    
1300
echo "# $0 $@" > $logfile
1301
set >> $logfile
1302

    
1303
test -n "$cross_prefix" && enable cross_compile
1304

    
1305
ar="${cross_prefix}${ar}"
1306
cc_default="${cross_prefix}${cc_default}"
1307
nm_default="${cross_prefix}${nm_default}"
1308
ranlib="${cross_prefix}${ranlib}"
1309
strip="${cross_prefix}${strip}"
1310

    
1311
set_default cc nm
1312
enabled cross_compile || host_cc_default=$cc
1313
set_default host_cc
1314

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

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

    
1327
check_cflags -std=c99
1328

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

    
1405
enable $arch $subarch
1406

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

    
1569
    *)
1570
        die "Unknown OS '$target_os'."
1571
        ;;
1572
esac
1573

    
1574
set_default $PATHS_LIST
1575

    
1576
add_extralibs $osextralibs
1577

    
1578
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1579
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1580

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

    
1592
disabled static && LIBNAME=""
1593

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

    
1609

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

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

    
1628
check_deps $ARCH_EXT_LIST
1629

    
1630
test -z "$need_memalign" && need_memalign="$mmx"
1631

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

    
1644
disabled optimizations || check_cflags -fomit-frame-pointer
1645

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

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

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

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

    
1758
check_asm inline_asm '""'
1759

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

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

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

    
1780
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1781

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

    
1793
# check for assembler specific support
1794

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

    
1798
# check for SIMD availability
1799

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

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

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

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

    
1834
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1835

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

    
1843
# ---
1844
# check availability of some header files
1845

    
1846
if check_func dlopen; then
1847
    ldl=
1848
elif check_func dlopen -ldl; then
1849
    ldl=-ldl
1850
fi
1851

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

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

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

    
1878
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1879
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1880

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

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

    
1907
check_lib math.h sin -lm
1908

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

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

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

    
1949

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

    
1957
test "$vhook" = "default" && vhook="$dlopen"
1958

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

    
1967
if enabled vhook; then
1968
    check_ldflags -rdynamic
1969
    check_ldflags -export-dynamic
1970
fi
1971

    
1972
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1973
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1974

    
1975
##########################################
1976
# SDL check
1977

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

    
2004
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2005

    
2006
##########################################
2007
# Network check
2008

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

    
2021
##########################################
2022
# IPv6 check
2023

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

    
2038
check_header linux/videodev.h
2039
check_header linux/videodev2.h
2040
check_header sys/videoio.h
2041

    
2042
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2043

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

    
2053
check_header sys/soundcard.h
2054
check_header soundcard.h
2055

    
2056
check_header alsa/asoundlib.h &&
2057
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2058

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

    
2066
enabled debug && add_cflags -g"$debuglevel"
2067

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

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

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

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

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

    
2128
if enabled gprof; then
2129
    add_cflags  -p
2130
    add_ldflags -p
2131
fi
2132

    
2133
VHOOKCFLAGS="-fPIC"
2134

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

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

    
2148
enabled_any $THREADS_LIST      && enable threads
2149

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

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

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

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

    
2271
echo "License: $license"
2272

    
2273
echo "Creating config.mak and config.h..."
2274

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

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

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

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

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

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

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

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

    
2372
echo "ARCH=$arch" >> config.mak
2373

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

    
2389
echo "#define restrict $_restrict" >> $TMPH
2390

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

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

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

    
2404
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2405

    
2406
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2407

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

    
2413
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2414

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

    
2459

    
2460
# build pkg-config files
2461

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

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

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

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