Statistics
| Branch: | Revision:

ffmpeg / configure @ b1598b58

History | View | Annotate | Download (74.2 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 "  --disable-network        disable network support [no]"
95
  echo "  --disable-ipv6           disable IPv6 support [no]"
96
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
97
  echo "  --enable-gray            enable full grayscale support (slower color)"
98
  echo "  --enable-fastdiv         enable table-based division"
99
  echo "  --enable-small           optimize for size instead of speed"
100
  echo "  --disable-aandct         disable AAN DCT code"
101
  echo "  --disable-fft            disable FFT code"
102
  echo "  --disable-golomb         disable Golomb code"
103
  echo "  --disable-mdct           disable MDCT code"
104
  echo "  --disable-rdft           disable RDFT 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-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [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 "  --sysroot=PATH           root of cross-build tree"
178
  echo "  --sysinclude=PATH        location of cross-build system headers"
179
  echo "  --target-os=OS           compiler targets OS [$target_os]"
180
  echo "  --target-exec=CMD        command to run executables on target"
181
  echo "  --target-path=DIR        path to view of build directory on target"
182
  echo "  --nm=NM                  use nm tool"
183
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
184
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
185
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
186
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
187
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
188
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
189
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
190
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
191
  echo "  --extra-version=STRING   version string suffix []"
192
  echo "  --build-suffix=SUFFIX    library name suffix []"
193
  echo "  --arch=ARCH              select architecture [$arch]"
194
  echo "  --cpu=CPU                select the minimum required CPU (affects"
195
  echo "                           instruction selection, may crash on older CPUs)"
196
  echo "  --enable-powerpc-perf    enable performance report on PPC"
197
  echo "                           (requires enabling PMC)"
198
  echo "  --disable-altivec        disable AltiVec optimizations"
199
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
200
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
201
  echo "  --disable-mmx            disable MMX optimizations"
202
  echo "  --disable-mmx2           disable MMX2 optimizations"
203
  echo "  --disable-sse            disable SSE optimizations"
204
  echo "  --disable-ssse3          disable SSSE3 optimizations"
205
  echo "  --disable-armv5te        disable armv5te optimizations"
206
  echo "  --disable-armv6          disable armv6 optimizations"
207
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
208
  echo "  --disable-armvfp         disable ARM VFP optimizations"
209
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
210
  echo "  --disable-mmi            disable MMI optimizations"
211
  echo "  --disable-neon           disable neon optimizations"
212
  echo "  --disable-vis            disable VIS optimizations"
213
  echo "  --disable-yasm           disable use of yasm assembler"
214
  echo
215
  echo "Developer options (useful when working on FFmpeg itself):"
216
  echo "  --disable-debug          disable debugging symbols"
217
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
218
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
219
  echo "  --disable-optimizations  disable compiler optimizations"
220
  echo "  --enable-extra-warnings  enable more compiler warnings"
221
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
222
  echo ""
223
  echo "NOTE: Object files are built at the place where configure is launched."
224
  exit 0
225
}
226

    
227
log(){
228
    echo "$@" >> $logfile
229
}
230

    
231
log_file(){
232
    log BEGIN $1
233
    pr -n -t $1 >> $logfile
234
    log END $1
235
}
236

    
237
echolog(){
238
    log "$@"
239
    echo "$@"
240
}
241

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

    
264
# Avoid locale weirdness, besides we really just want to translate ASCII.
265
toupper(){
266
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
267
}
268

    
269
tolower(){
270
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
271
}
272

    
273
c_escape(){
274
    echo "$*" | sed 's/["\\]/\\\0/g'
275
}
276

    
277
set_all(){
278
    value=$1
279
    shift
280
    for var in $*; do
281
        eval $var=$value
282
    done
283
}
284

    
285
set_weak(){
286
    value=$1
287
    shift
288
    for var; do
289
        eval : \${$var:=$value}
290
    done
291
}
292

    
293
pushvar(){
294
    for var in $*; do
295
        eval level=\${${var}_level:=0}
296
        eval ${var}_${level}="\$$var"
297
        eval ${var}_level=$(($level+1))
298
    done
299
}
300

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

    
312
enable(){
313
    set_all yes $*
314
}
315

    
316
disable(){
317
    set_all no $*
318
}
319

    
320
enable_weak(){
321
    set_weak yes $*
322
}
323

    
324
disable_weak(){
325
    set_weak no $*
326
}
327

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

    
341
enable_deep(){
342
    do_enable_deep $*
343
    enable $*
344
}
345

    
346
enable_deep_weak(){
347
    do_enable_deep $*
348
    enable_weak $*
349
}
350

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

    
356
disabled(){
357
    test "${1#!}" = "$1" && op== || op=!=
358
    eval test "x\$${1#!}" $op "xno"
359
}
360

    
361
enabled_all(){
362
    for opt; do
363
        enabled $opt || return 1
364
    done
365
}
366

    
367
disabled_all(){
368
    for opt; do
369
        disabled $opt || return 1
370
    done
371
}
372

    
373
enabled_any(){
374
    for opt; do
375
        enabled $opt && return 0
376
    done
377
}
378

    
379
disabled_any(){
380
    for opt; do
381
        disabled $opt && return 0
382
    done
383
    return 1
384
}
385

    
386
set_default(){
387
    for opt; do
388
        eval : \${$opt:=\$${opt}_default}
389
    done
390
}
391

    
392
is_in(){
393
    value=$1
394
    shift
395
    for var in $*; do
396
        [ $var = $value ] && return 0
397
    done
398
    return 1
399
}
400

    
401
check_deps(){
402
    for cfg; do
403
        cfg="${cfg#!}"
404
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
405
        disabled ${cfg}_checking && continue
406
        enable ${cfg}_checking
407

    
408
        eval dep_all="\$${cfg}_deps"
409
        eval dep_any="\$${cfg}_deps_any"
410
        eval dep_sel="\$${cfg}_select"
411
        eval dep_sgs="\$${cfg}_suggest"
412

    
413
        pushvar cfg dep_all dep_any dep_sel dep_sgs
414
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
415
        popvar cfg dep_all dep_any dep_sel dep_sgs
416

    
417
        enabled_all  $dep_all || disable $cfg
418
        enabled_any  $dep_any || disable $cfg
419
        disabled_any $dep_sel && disable $cfg
420

    
421
        if enabled $cfg; then
422
            eval dep_extralibs="\$${cfg}_extralibs"
423
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
424
            enable_deep $dep_sel
425
            enable_deep_weak $dep_sgs
426
        fi
427

    
428
        disable ${cfg}_checking
429
    done
430
}
431

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

    
448
flags_saved(){
449
    (: ${SAVE_CFLAGS?}) 2> /dev/null
450
}
451

    
452
save_flags(){
453
    flags_saved && return
454
    SAVE_CFLAGS="$CFLAGS"
455
    SAVE_LDFLAGS="$LDFLAGS"
456
    SAVE_extralibs="$extralibs"
457
}
458

    
459
restore_flags(){
460
    flags_saved || return
461
    CFLAGS="$SAVE_CFLAGS"
462
    LDFLAGS="$SAVE_LDFLAGS"
463
    extralibs="$SAVE_extralibs"
464
    unset SAVE_CFLAGS
465
    unset SAVE_LDFLAGS
466
    unset SAVE_extralibs
467
}
468

    
469
temp_cflags(){
470
    save_flags
471
    CFLAGS="$CFLAGS $*"
472
}
473

    
474
temp_ldflags(){
475
    save_flags
476
    LDFLAGS="$LDFLAGS $*"
477
}
478

    
479
temp_extralibs(){
480
    save_flags
481
    extralibs="$extralibs $*"
482
}
483

    
484
append(){
485
    var=$1
486
    shift
487
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
488
    eval "$var=\"\$$var $*\""
489
}
490

    
491
add_cflags(){
492
    append CFLAGS "$@"
493
}
494

    
495
add_ldflags(){
496
    append LDFLAGS "$@"
497
}
498

    
499
add_extralibs(){
500
    append extralibs "$@"
501
}
502

    
503
check_cmd(){
504
    log "$@"
505
    "$@" >> $logfile 2>&1
506
}
507

    
508
check_cc(){
509
    log check_cc "$@"
510
    cat > $TMPC
511
    log_file $TMPC
512
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
513
}
514

    
515
check_cpp(){
516
    log check_cpp "$@"
517
    cat > $TMPC
518
    log_file $TMPC
519
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
520
}
521

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

    
532
check_yasm(){
533
    log check_yasm "$@"
534
    echo "$1" > $TMPS
535
    log_file $TMPS
536
    shift 1
537
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
538
}
539

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

    
551
check_cflags(){
552
    log check_cflags "$@"
553
    check_cc "$@" <<EOF && add_cflags "$@"
554
int x;
555
EOF
556
}
557

    
558
check_ldflags(){
559
    log check_ldflags "$@"
560
    check_ld "$@" <<EOF && add_ldflags "$@"
561
int main(void){ return 0; }
562
EOF
563
}
564

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

    
577
check_func(){
578
    log check_func "$@"
579
    func=$1
580
    shift
581
    disable $func
582
    check_ld "$@" <<EOF && enable $func
583
extern int $func();
584
int main(void){ $func(); }
585
EOF
586
}
587

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

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

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

    
632
check_lib2(){
633
    log check_lib2 "$@"
634
    headers="$1"
635
    func="$2"
636
    shift 2
637
    temp_extralibs "$@"
638
    check_func_headers "$headers" $func && add_extralibs "$@"
639
    err=$?
640
    restore_flags
641
    return $err
642
}
643

    
644
check_exec(){
645
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
646
}
647

    
648
check_exec_crash(){
649
    code=`cat`
650

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

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

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

    
691
require(){
692
    name="$1"
693
    header="$2"
694
    func="$3"
695
    shift 3
696
    check_lib $header $func "$@" || die "ERROR: $name not found"
697
}
698

    
699
require2(){
700
    name="$1"
701
    headers="$2"
702
    func="$3"
703
    shift 3
704
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
705
}
706

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

    
724
apply(){
725
    file=$1
726
    shift
727
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
728
}
729

    
730
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
731
# system-dependent things.
732

    
733
COMPONENT_LIST="
734
    bsfs
735
    decoders
736
    demuxers
737
    encoders
738
    filters
739
    indevs
740
    muxers
741
    outdevs
742
    parsers
743
    protocols
744
"
745

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

    
801
THREADS_LIST='
802
    beosthreads
803
    os2threads
804
    pthreads
805
    w32threads
806
'
807

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

    
826
ARCH_EXT_LIST='
827
    altivec
828
    amd3dnow
829
    amd3dnowext
830
    armv5te
831
    armv6
832
    armv6t2
833
    armvfp
834
    iwmmxt
835
    mmi
836
    mmx
837
    mmx2
838
    neon
839
    ppc4xx
840
    sse
841
    ssse3
842
    vis
843
'
844

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

    
911
# options emitted with CONFIG_ prefix but not available on command line
912
CONFIG_EXTRA="
913
    oldscaler
914
"
915

    
916
CMDLINE_SELECT="
917
    $ARCH_EXT_LIST
918
    $CONFIG_LIST
919
    $THREADS_LIST
920
    cross_compile
921
    debug
922
    extra_warnings
923
    logging
924
    optimizations
925
    stripping
926
    yasm
927
"
928

    
929
PATHS_LIST='
930
    bindir
931
    datadir
932
    incdir
933
    libdir
934
    mandir
935
    prefix
936
    shlibdir
937
'
938

    
939
CMDLINE_SET="
940
    $PATHS_LIST
941
    arch
942
    build_suffix
943
    cc
944
    cpu
945
    cross_prefix
946
    extra_version
947
    host_cc
948
    host_cflags
949
    host_ldflags
950
    host_libs
951
    logfile
952
    nm
953
    source_path
954
    sysinclude
955
    sysroot
956
    target_exec
957
    target_os
958
    target_path
959
"
960

    
961
# code dependency declarations
962

    
963
# architecture extensions
964
altivec_deps="ppc"
965
amd3dnow_deps="mmx"
966
amd3dnowext_deps="amd3dnow"
967
armv5te_deps="arm"
968
armv6_deps="arm"
969
armv6t2_deps="arm"
970
armvfp_deps="arm"
971
iwmmxt_deps="arm"
972
mmi_deps="mips"
973
mmx_deps="x86"
974
mmx2_deps="mmx"
975
neon_deps="arm"
976
ppc4xx_deps="ppc"
977
sse_deps="mmx"
978
ssse3_deps="sse"
979
vis_deps="sparc"
980

    
981
# common features
982
oldscaler_deps="!swscale"
983

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

    
1058
# external libraries
1059
libamr_nb_decoder_deps="libamr_nb"
1060
libamr_nb_encoder_deps="libamr_nb"
1061
libamr_wb_decoder_deps="libamr_wb"
1062
libamr_wb_encoder_deps="libamr_wb"
1063
libdirac_decoder_deps="libdirac !libschroedinger"
1064
libdirac_encoder_deps="libdirac"
1065
libfaac_encoder_deps="libfaac"
1066
libfaad_decoder_deps="libfaad"
1067
libfaadbin_decoder_extralibs='$ldl'
1068
libgsm_decoder_deps="libgsm"
1069
libgsm_encoder_deps="libgsm"
1070
libgsm_ms_decoder_deps="libgsm"
1071
libgsm_ms_encoder_deps="libgsm"
1072
libmp3lame_encoder_deps="libmp3lame"
1073
libopenjpeg_decoder_deps="libopenjpeg"
1074
libschroedinger_decoder_deps="libschroedinger"
1075
libschroedinger_encoder_deps="libschroedinger"
1076
libspeex_decoder_deps="libspeex"
1077
libtheora_encoder_deps="libtheora"
1078
libvorbis_encoder_deps="libvorbis"
1079
libx264_encoder_deps="libx264"
1080
libxvid_encoder_deps="libxvid"
1081
mpeg4aac_decoder_deps="libfaad"
1082
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1083

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

    
1117
# protocols
1118
gopher_protocol_deps="network"
1119
http_protocol_deps="network"
1120
rtp_protocol_deps="udp_protocol"
1121
tcp_protocol_deps="network"
1122
udp_protocol_deps="network"
1123

    
1124
# filters
1125
movie_filter_deps="avfilter_lavf"
1126

    
1127
# programs
1128
ffplay_deps="sdl"
1129
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1130
ffserver_extralibs='$ldl'
1131
vhook_extralibs='$ldl'
1132

    
1133

    
1134
# default parameters
1135

    
1136
logfile="config.err"
1137

    
1138
# installation paths
1139
prefix_default="/usr/local"
1140
bindir_default='${prefix}/bin'
1141
datadir_default='${prefix}/share/ffmpeg'
1142
incdir_default='${prefix}/include'
1143
libdir_default='${prefix}/lib'
1144
mandir_default='${prefix}/share/man'
1145
shlibdir_default="$libdir_default"
1146

    
1147
# toolchain
1148
ar="ar"
1149
cc_default="gcc"
1150
host_cc_default="gcc"
1151
ln_s="ln -sf"
1152
nm_default="nm"
1153
objformat="elf"
1154
ranlib="ranlib"
1155
strip="strip"
1156
yasmexe="yasm"
1157

    
1158
# machine
1159
arch=`uname -m`
1160
cpu="generic"
1161

    
1162
# OS
1163
target_os=$(tolower $(uname -s))
1164

    
1165
# configurable options
1166
enable debug
1167
enable ffmpeg
1168
enable ffplay
1169
enable ffserver
1170
enable ipv6
1171
enable mpegaudio_hp
1172
enable network
1173
enable oldscaler
1174
enable optimizations
1175
enable protocols
1176
enable static
1177
enable stripping
1178
vhook="default"
1179

    
1180
# build settings
1181
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1182
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1183
VHOOKSHFLAGS='$(SHFLAGS)'
1184
FFSERVERLDFLAGS=-Wl,-E
1185
LIBPREF="lib"
1186
LIBSUF=".a"
1187
FULLNAME='$(NAME)$(BUILDSUF)'
1188
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1189
SLIBPREF="lib"
1190
SLIBSUF=".so"
1191
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1192
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1193
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1194
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1195

    
1196
host_cflags='-O3 -g -Wall'
1197
host_libs='-lm'
1198

    
1199
target_path='.'
1200

    
1201
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1202
# full relative path for objects in subdirectories for non-recursive Make.
1203
DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1204

    
1205
# find source path
1206
source_path="`dirname \"$0\"`"
1207
enable source_path_used
1208
if test -z "$source_path" -o "$source_path" = "." ; then
1209
    source_path="`pwd`"
1210
    disable source_path_used
1211
else
1212
    source_path="`cd \"$source_path\"; pwd`"
1213
    echo "$source_path" | grep -q '[[:blank:]]' &&
1214
        die "Out of tree builds are impossible with whitespace in source path."
1215
fi
1216

    
1217
FFMPEG_CONFIGURATION="$@"
1218

    
1219
find_things(){
1220
    thing=$1
1221
    pattern=$2
1222
    file=$source_path/$3
1223
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1224
}
1225

    
1226
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1227
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1228
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1229
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1230
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1231
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1232
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1233
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1234
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1235
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1236

    
1237
enable $ARCH_EXT_LIST \
1238
       $DECODER_LIST \
1239
       $ENCODER_LIST \
1240
       $PARSER_LIST \
1241
       $BSF_LIST \
1242
       $DEMUXER_LIST \
1243
       $MUXER_LIST \
1244
       $FILTER_LIST \
1245
       $PROTOCOL_LIST \
1246
       $INDEV_LIST \
1247
       $OUTDEV_LIST \
1248

    
1249
die_unknown(){
1250
    echo "Unknown option \"$1\"."
1251
    echo "See $0 --help for available options."
1252
    exit 1
1253
}
1254

    
1255
show_list() {
1256
    suffix=_$1
1257
    shift
1258
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1259
    exit 0
1260
}
1261

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

    
1310
disabled logging && logfile=/dev/null
1311

    
1312
echo "# $0 $@" > $logfile
1313
set >> $logfile
1314

    
1315
test -n "$cross_prefix" && enable cross_compile
1316

    
1317
ar="${cross_prefix}${ar}"
1318
cc_default="${cross_prefix}${cc_default}"
1319
nm_default="${cross_prefix}${nm_default}"
1320
ranlib="${cross_prefix}${ranlib}"
1321
strip="${cross_prefix}${strip}"
1322

    
1323
sysinclude_default="${sysroot}/usr/include"
1324

    
1325
set_default cc nm sysinclude
1326
enabled cross_compile || host_cc_default=$cc
1327
set_default host_cc
1328

    
1329
case $target_os in
1330
    mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1331
esac
1332

    
1333
# set temporary file name
1334
: ${TMPDIR:=$TEMPDIR}
1335
: ${TMPDIR:=$TMP}
1336
: ${TMPDIR:=/tmp}
1337

    
1338
TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1339
TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1340
TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1341
TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1342
TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1343
TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1344

    
1345
# make sure we can execute files in $TMPDIR
1346
cat > $TMPSH 2>> $logfile <<EOF
1347
#! /bin/sh
1348
EOF
1349
chmod +x $TMPSH >> $logfile 2>&1
1350
if ! $TMPSH >> $logfile 2>&1; then
1351
    cat <<EOF
1352
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1353
variable to another directory and make sure that it is not mounted noexec.
1354
EOF
1355
    die "Sanity test failed."
1356
fi
1357
rm $TMPSH
1358

    
1359
if   $cc --version 2>/dev/null | grep -q '(GCC)'; then
1360
    cc_type=gcc
1361
elif $cc --version 2>/dev/null | grep -q Intel; then
1362
    cc_type=icc
1363
elif $cc -v 2>&1 | grep -q xlc; then
1364
    cc_type=xlc
1365
fi
1366

    
1367
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1368

    
1369
if test -n "$sysroot"; then
1370
    case "$cc_type" in
1371
        gcc)
1372
            add_cflags  --sysroot="$sysroot"
1373
            add_ldflags --sysroot="$sysroot"
1374
        ;;
1375
    esac
1376
fi
1377

    
1378
# compiler sanity check
1379
check_exec <<EOF
1380
int main(void){ return 0; }
1381
EOF
1382
if test "$?" != 0; then
1383
    echo "$cc is unable to create an executable file."
1384
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1385
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1386
        echo "Only do this if you know what cross compiling means."
1387
    fi
1388
    die "C compiler test failed."
1389
fi
1390

    
1391
check_cflags -std=c99
1392

    
1393
case "$arch" in
1394
    alpha)
1395
        arch="alpha"
1396
        enable fast_64bit
1397
        check_cflags -mieee
1398
    ;;
1399
    arm|armv[4567]*l)
1400
        arch="arm"
1401
    ;;
1402
    avr32)
1403
    ;;
1404
    bfin)
1405
        arch="bfin"
1406
    ;;
1407
    ia64)
1408
        arch="ia64"
1409
        enable fast_64bit
1410
    ;;
1411
    m68k)
1412
        arch="m68k"
1413
    ;;
1414
    mips|mipsel|IP*)
1415
        arch="mips"
1416
    ;;
1417
    mips64)
1418
        arch="mips"
1419
        enable fast_64bit
1420
    ;;
1421
    parisc|hppa)
1422
        arch="parisc"
1423
    ;;
1424
    parisc64|hppa64)
1425
        arch="parisc"
1426
        enable fast_64bit
1427
    ;;
1428
    "Power Macintosh"|ppc|powerpc)
1429
        arch="ppc"
1430
        enable fast_unaligned
1431
    ;;
1432
    ppc64)
1433
        arch="ppc"
1434
        enable fast_64bit
1435
        enable fast_unaligned
1436
    ;;
1437
    s390|s390x)
1438
        arch="s390"
1439
    ;;
1440
    sh4|sh)
1441
        arch="sh4"
1442
    ;;
1443
    sparc)
1444
        arch="sparc"
1445
    ;;
1446
    sun4u|sparc64)
1447
        arch="sparc"
1448
        subarch="sparc64"
1449
        enable fast_64bit
1450
    ;;
1451
    i386|i486|i586|i686|i86pc|BePC)
1452
        arch="x86"
1453
        subarch="x86_32"
1454
        enable fast_unaligned
1455
    ;;
1456
    x86_64|amd64)
1457
        arch="x86"
1458
        subarch="x86_32"
1459
        enable cmov
1460
        enable fast_cmov
1461
        enable fast_unaligned
1462
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1463
        int test[sizeof(char*) - 7];
1464
EOF
1465
    ;;
1466
    *)
1467
        arch="unknown"
1468
    ;;
1469
esac
1470

    
1471
enable $arch $subarch
1472

    
1473
# OS specific
1474
case $target_os in
1475
    beos|haiku|zeta)
1476
        prefix_default="$HOME/config"
1477
        # helps building libavcodec
1478
        add_cflags -DPIC -fomit-frame-pointer
1479
        # 3 gcc releases known for BeOS, each with ugly bugs
1480
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1481
        case "$gcc_version" in
1482
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1483
            disable mmx
1484
            ;;
1485
          *20010315*) echo "BeBits gcc"
1486
            add_cflags -fno-expensive-optimizations
1487
            ;;
1488
        esac
1489
        SHFLAGS=-nostart
1490
        # enable BeOS things
1491
        enable audio_beos
1492
        # no need for libm, but the inet stuff
1493
        # Check for BONE
1494
        # XXX: actually should check for NOT net_server
1495
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1496
            network_extralibs="-lbind -lsocket"
1497
        else
1498
            enable beos_netserver
1499
            network_extralibs="-lnet"
1500
        fi ;;
1501
    sunos)
1502
        FFSERVERLDFLAGS=""
1503
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1504
        network_extralibs="-lsocket -lnsl"
1505
        add_cflags -D__EXTENSIONS__
1506
        ;;
1507
    netbsd)
1508
        oss_demuxer_extralibs="-lossaudio"
1509
        oss_muxer_extralibs="-lossaudio"
1510
        ;;
1511
    openbsd)
1512
        disable need_memalign
1513
        LIBOBJFLAGS='$(PIC)'
1514
        SHFLAGS='-shared'
1515
        oss_demuxer_extralibs="-lossaudio"
1516
        oss_muxer_extralibs="-lossaudio"
1517
        ;;
1518
    freebsd)
1519
        disable need_memalign
1520
        ;;
1521
    bsd/os)
1522
        osextralibs="-lpoll -lgnugetopt"
1523
        strip="strip -d"
1524
        ;;
1525
    darwin)
1526
        disable need_memalign
1527
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1528
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1529
        strip="strip -x"
1530
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1531
        SLIBSUF=".dylib"
1532
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1533
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1534
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1535
        objformat="macho"
1536
        enabled x86_64 && objformat="macho64"
1537
        ;;
1538
    mingw32*)
1539
        target_os=mingw32
1540
        LIBTARGET=i386
1541
        if enabled x86_64; then
1542
            disable need_memalign
1543
            LIBTARGET=x64
1544
        fi
1545
        shlibdir_default="$bindir_default"
1546
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1547
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1548
        if enabled swscale; then
1549
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1550
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1551
        fi
1552
        disable ffserver
1553
        SLIBPREF=""
1554
        SLIBSUF=".dll"
1555
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1556
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1557
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1558
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1559
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1560
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1561
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1562
        objformat="win32"
1563
        enable dos_paths
1564
        if ! enabled x86_64; then
1565
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1566
                die "ERROR: MinGW runtime version must be >= 3.15."
1567
            enabled_any avisynth vfwcap_demuxer &&
1568
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1569
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1570
            fi
1571
        ;;
1572
    cygwin*)
1573
        target_os=cygwin
1574
        shlibdir_default="$bindir_default"
1575
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1576
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1577
        if enabled swscale; then
1578
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1579
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1580
        fi
1581
        SLIBPREF="cyg"
1582
        SLIBSUF=".dll"
1583
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1584
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1585
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1586
        objformat="win32"
1587
        enable dos_paths
1588
        ;;
1589
    *-dos|freedos|opendos)
1590
        disable ffplay ffserver vhook
1591
        disable $INDEV_LIST $OUTDEV_LIST
1592
        network_extralibs="-lsocket"
1593
        objformat="coff"
1594
        enable dos_paths
1595
        ;;
1596
    linux)
1597
        enable dv1394
1598
        ;;
1599
    irix*)
1600
        target_os=irix
1601
        ranlib="echo ignoring ranlib"
1602
        ;;
1603
    os/2*)
1604
        strip="lxlite"
1605
        ln_s="cp -f"
1606
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1607
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1608
        FFSERVERLDFLAGS=""
1609
        LIBSUF="_s.a"
1610
        SLIBPREF=""
1611
        SLIBSUF=".dll"
1612
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1613
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1614
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1615
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1616
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1617
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1618
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1619
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1620
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1621
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1622
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1623
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1624
        disable vhook
1625
        enable dos_paths
1626
        ;;
1627
    interix)
1628
        disable vhook
1629
        ;;
1630

    
1631
    *)
1632
        die "Unknown OS '$target_os'."
1633
        ;;
1634
esac
1635

    
1636
set_default $PATHS_LIST
1637

    
1638
add_extralibs $osextralibs
1639

    
1640
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1641
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1642

    
1643
# we need to build at least one lib type
1644
if ! enabled_any static shared; then
1645
    cat <<EOF
1646
At least one library type must be built.
1647
Specify --enable-static to build the static libraries or --enable-shared to
1648
build the shared libraries as well. To only build the shared libraries specify
1649
--disable-static in addition to --enable-shared.
1650
EOF
1651
    exit 1;
1652
fi
1653

    
1654
disabled static && LIBNAME=""
1655

    
1656
if enabled_any libfaad libfaadbin ; then
1657
    if check_header faad.h; then
1658
        check_cc <<EOF
1659
#include <faad.h>
1660
#ifndef FAAD2_VERSION
1661
ok faad1
1662
#endif
1663
int main(void) { return 0; }
1664
EOF
1665
        test $? = 0 && enable libfaad2
1666
    else
1667
        die "FAAD test failed."
1668
    fi
1669
fi
1670

    
1671

    
1672
if ! enabled gpl; then
1673
    die_gpl_disabled(){
1674
        name=$1
1675
        shift
1676
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1677
    }
1678
    die_gpl_disabled "The Postprocessing code" postproc
1679
    die_gpl_disabled "libx264"                 libx264
1680
    die_gpl_disabled "libxvidcore"             libxvid
1681
    die_gpl_disabled "FAAD2"                   libfaad2
1682
    die_gpl_disabled "The X11 grabber"         x11grab
1683
    die_gpl_disabled "The software scaler"     swscale
1684
fi
1685

    
1686
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1687
    die "libamr is nonfree and --enable-nonfree is not specified."
1688
fi
1689

    
1690
check_deps $ARCH_EXT_LIST
1691

    
1692
test -z "$need_memalign" && need_memalign="$mmx"
1693

    
1694
#Darwin CC versions
1695
if test $target_os = darwin; then
1696
    if enabled xlc; then
1697
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1698
    else
1699
        add_cflags -pipe
1700
        check_cflags -force_cpusubtype_ALL
1701
        check_cflags -Wno-sign-compare
1702
        enabled shared || check_cflags -mdynamic-no-pic
1703
    fi
1704
fi
1705

    
1706
disabled optimizations || check_cflags -fomit-frame-pointer
1707

    
1708
# Add processor-specific flags
1709
if test $cpu != "generic"; then
1710
    warn_altivec(){
1711
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1712
    }
1713
    case $cpu in
1714
        601|ppc601|PowerPC601)
1715
            add_cflags -mcpu=601
1716
            warn_altivec enabled PPC601
1717
        ;;
1718
        603*|ppc603*|PowerPC603*)
1719
            add_cflags -mcpu=603
1720
            warn_altivec enabled PPC603
1721
        ;;
1722
        604*|ppc604*|PowerPC604*)
1723
            add_cflags -mcpu=604
1724
            warn_altivec enabled PPC604
1725
        ;;
1726
        G3|g3|75*|ppc75*|PowerPC75*)
1727
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1728
            warn_altivec enabled PPC75x
1729
        ;;
1730
        G4|g4|745*|ppc745*|PowerPC745*)
1731
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1732
            warn_altivec disabled PPC745x
1733
        ;;
1734
        74*|ppc74*|PowerPC74*)
1735
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1736
            warn_altivec disabled PPC74xx
1737
        ;;
1738
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1739
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1740
            warn_altivec disabled PPC970
1741
            enable ppc64
1742
        ;;
1743
        Cell|CELL|cell)
1744
            add_cflags -mcpu=cell
1745
            warn_altivec disabled Cell
1746
            enable ppc64
1747
        ;;
1748
        # targets that do NOT support conditional mov (cmov)
1749
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1750
            add_cflags -march=$cpu
1751
            disable cmov
1752
        ;;
1753
        # targets that do support conditional mov (cmov)
1754
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1755
            add_cflags -march=$cpu
1756
            enable cmov
1757
            enable fast_cmov
1758
        ;;
1759
        # targets that do support conditional mov but on which it's slow
1760
        pentium4|pentium4m|prescott|nocona)
1761
            add_cflags -march=$cpu
1762
            enable cmov
1763
            disable fast_cmov
1764
        ;;
1765
        sparc64)
1766
            add_cflags -mcpu=v9
1767
        ;;
1768
        arm11*|cortex*)
1769
            add_cflags -mcpu=$cpu
1770
            enable fast_unaligned
1771
        ;;
1772
        armv*)
1773
            add_cflags -march=$cpu
1774
        ;;
1775
        arm*)
1776
            add_cflags -mcpu=$cpu
1777
        ;;
1778
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1779
            add_cflags -mcpu=$cpu
1780
        ;;
1781
        *)
1782
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1783
        ;;
1784
    esac
1785
fi
1786

    
1787
check_cc <<EOF || die "Symbol mangling check failed."
1788
int ff_extern;
1789
EOF
1790
sym=$($nm -P -g $TMPO | grep ff_extern)
1791
extern_prefix=${sym%%ff_extern*}
1792

    
1793
check_asm inline_asm '""'
1794

    
1795
if enabled x86; then
1796
    # check whether EBP is available on x86
1797
    # As 'i' is stored on the stack, this program will crash
1798
    # if the base pointer is used to access it because the
1799
    # base pointer is cleared in the inline assembly code.
1800
    check_exec_crash <<EOF && enable ebp_available
1801
    volatile int i=0;
1802
    __asm__ volatile (
1803
        "xorl %%ebp, %%ebp"
1804
    ::: "%ebp");
1805
    return i;
1806
EOF
1807

    
1808
    # check wether EBX is available on x86
1809
    check_asm ebx_available '"":::"%ebx"'
1810

    
1811
    # check whether more than 10 operands are supported
1812
    check_cc <<EOF && enable ten_operands
1813
int main(void) {
1814
    int x=0;
1815
    __asm__ volatile(
1816
        ""
1817
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1818
    );
1819
    return 0;
1820
}
1821
EOF
1822

    
1823
    # check whether binutils is new enough to compile SSSE3/MMX2
1824
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1825
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1826

    
1827
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1828

    
1829
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1830
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1831
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1832
    case "$objformat" in
1833
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1834
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1835
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1836
    esac
1837
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1838
fi
1839

    
1840
# check for assembler specific support
1841

    
1842
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1843
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1844

    
1845
# check for SIMD availability
1846

    
1847
# AltiVec flags: The FSF version of GCC differs from the Apple version
1848
if enabled altivec; then
1849
    check_cflags -maltivec -mabi=altivec &&
1850
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1851
        check_cflags -faltivec
1852

    
1853
    # check if our compiler supports Motorola AltiVec C API
1854
    check_cc <<EOF || disable altivec
1855
$inc_altivec_h
1856
int main(void) {
1857
    vector signed int v1, v2, v3;
1858
    v1 = vec_add(v2,v3);
1859
    return 0;
1860
}
1861
EOF
1862

    
1863
    # check if our compiler supports braces for vector declarations
1864
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1865
$inc_altivec_h
1866
int main (void) { (vector int) {1}; return 0; }
1867
EOF
1868
fi
1869

    
1870
# We have to check if pld is a nop and disable it.
1871
enabled arm     && check_asm pld     '"pld [r0]"'
1872
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1873
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1874
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1875
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1876
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1877
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1878
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1879
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1880

    
1881
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1882

    
1883
# ---
1884
# big/little-endian test
1885
check_cc <<EOF || die "endian test failed"
1886
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1887
EOF
1888
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1889

    
1890
# ---
1891
# check availability of some header files
1892

    
1893
if check_func dlopen; then
1894
    ldl=
1895
elif check_func dlopen -ldl; then
1896
    ldl=-ldl
1897
fi
1898

    
1899
check_func  fork
1900
check_func  gethrtime
1901
check_func  getrusage
1902
check_func  inet_aton $network_extralibs
1903
check_func  memalign
1904
check_func  mkstemp
1905
check_func  posix_memalign
1906
check_func_headers io.h setmode
1907
check_func_headers windows.h GetProcessTimes
1908

    
1909
check_header conio.h
1910
check_header dlfcn.h
1911
check_header malloc.h
1912
check_header poll.h
1913
check_header sys/mman.h
1914
check_header sys/resource.h
1915
check_header sys/select.h
1916
check_header termios.h
1917
check_header vdpau/vdpau.h
1918
check_header vdpau/vdpau_x11.h
1919
check_header X11/extensions/XvMClib.h
1920

    
1921
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1922
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1923
fi
1924

    
1925
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1926
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1927

    
1928
# check for some common methods of building with pthread support
1929
# do this before the optional library checks as some of them require pthreads
1930
if enabled pthreads; then
1931
    if check_func pthread_create; then
1932
        :
1933
    elif check_func pthread_create -pthread; then
1934
        add_cflags -pthread
1935
        add_extralibs -pthread
1936
    elif check_func pthread_create -pthreads; then
1937
        add_cflags -pthreads
1938
        add_extralibs -pthreads
1939
    elif check_func pthread_create -lpthreadGC2; then
1940
        add_extralibs -lpthreadGC2
1941
    elif ! check_lib pthread.h pthread_create -lpthread; then
1942
        die "ERROR: can't find pthreads library"
1943
    fi
1944
fi
1945

    
1946
for thread in $THREADS_LIST; do
1947
    if enabled $thread; then
1948
        test -n "$thread_type" &&
1949
            die "ERROR: Only one thread type must be selected." ||
1950
            thread_type="$thread"
1951
    fi
1952
done
1953

    
1954
check_lib math.h sin -lm
1955

    
1956
# test for C99 functions in math.h
1957
for func in llrint lrint lrintf round roundf truncf; do
1958
    check_exec <<EOF && enable $func || disable $func
1959
#include <math.h>
1960
int main(void) { return ($func(3.999f) > 0)?0:1; }
1961
EOF
1962
done
1963

    
1964
# these are off by default, so fail if requested and not available
1965
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1966
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1967
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1968
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1969
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1970
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1971
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1972
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1973
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1974
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1975
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1976
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1977
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1978
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1979
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1980
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1981
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1982
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1983
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1984
                        die "ERROR: libx264 version must be >= 0.65."; }
1985
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1986
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1987

    
1988
# libdc1394 check
1989
if enabled libdc1394; then
1990
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1991
        enable libdc1394_2; } ||
1992
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1993
        enable libdc1394_1; } ||
1994
    die "ERROR: No version of libdc1394 found "
1995
fi
1996

    
1997

    
1998
_restrict=
1999
for restrict_keyword in restrict __restrict__ __restrict; do
2000
    check_cc <<EOF && _restrict=$restrict_keyword && break
2001
void foo(char * $restrict_keyword p);
2002
EOF
2003
done
2004

    
2005
test "$vhook" = "default" && vhook="$dlopen"
2006

    
2007
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2008
    disable vhook
2009
    echo
2010
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2011
    echo "Patches welcome."
2012
    echo
2013
fi
2014

    
2015
if enabled vhook; then
2016
    check_ldflags -rdynamic
2017
    check_ldflags -export-dynamic
2018
fi
2019

    
2020
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2021
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2022

    
2023
##########################################
2024
# SDL check
2025

    
2026
disable sdl_too_old
2027
disable sdl
2028
SDL_CONFIG="${cross_prefix}sdl-config"
2029
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2030
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
2031
    temp_cflags $sdl_cflags
2032
    temp_extralibs `"${SDL_CONFIG}" --libs`
2033
    if check_lib2 SDL.h SDL_Init; then
2034
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2035
        if test "$_sdlversion" -lt 121 ; then
2036
            enable sdl_too_old
2037
        else
2038
            enable sdl
2039
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2040
#include <SDL.h>
2041
int main(int argc, char **argv){
2042
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2043
    int w = vi->current_w;
2044
    return 0;
2045
}
2046
EOF
2047
        fi
2048
    fi
2049
    restore_flags
2050
fi
2051

    
2052
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2053

    
2054
##########################################
2055
# Network check
2056

    
2057
if enabled network; then
2058
    check_type "sys/types.h sys/socket.h" socklen_t
2059
    # Prefer arpa/inet.h over winsock2
2060
    if check_header arpa/inet.h ; then
2061
        check_func closesocket
2062
    elif check_header winsock2.h ; then
2063
        network_extralibs="-lws2_32"
2064
        check_type ws2tcpip.h socklen_t
2065
        check_func_headers winsock2.h closesocket
2066
    fi
2067
fi
2068

    
2069
##########################################
2070
# IPv6 check
2071

    
2072
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2073
#include <sys/types.h>
2074
#include <sys/socket.h>
2075
#include <netinet/in.h>
2076
#include <netdb.h>
2077
int main(void) {
2078
    struct sockaddr_storage saddr;
2079
    struct ipv6_mreq mreq6;
2080
    getaddrinfo(0,0,0,0);
2081
    getnameinfo(0,0,0,0,0,0,0);
2082
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2083
}
2084
EOF
2085

    
2086
check_header linux/videodev.h
2087
check_header linux/videodev2.h
2088
check_header sys/videoio.h
2089

    
2090
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2091

    
2092
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2093
{ check_header dev/bktr/ioctl_meteor.h &&
2094
  check_header dev/bktr/ioctl_bt848.h; } ||
2095
{ check_header machine/ioctl_meteor.h &&
2096
  check_header machine/ioctl_bt848.h; } ||
2097
{ check_header dev/video/meteor/ioctl_meteor.h &&
2098
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2099
check_header dev/ic/bt8xx.h
2100

    
2101
check_header sys/soundcard.h
2102
check_header soundcard.h
2103

    
2104
check_header alsa/asoundlib.h &&
2105
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2106

    
2107
# deal with the X11 frame grabber
2108
enabled x11grab                         &&
2109
check_header X11/Xlib.h                 &&
2110
check_header X11/extensions/XShm.h      &&
2111
check_func XOpenDisplay -lX11           &&
2112
check_func XShmCreateImage -lX11 -lXext
2113

    
2114
enabled debug && add_cflags -g"$debuglevel"
2115

    
2116
# add some useful compiler flags if supported
2117
check_cflags -Wdeclaration-after-statement
2118
check_cflags -Wall
2119
check_cflags -Wno-switch
2120
check_cflags -Wdisabled-optimization
2121
check_cflags -Wpointer-arith
2122
check_cflags -Wredundant-decls
2123
check_cflags -Wno-pointer-sign
2124
check_cflags -Wcast-qual
2125
check_cflags -Wwrite-strings
2126
check_cflags -Wtype-limits
2127
check_cflags -Wundef
2128
enabled extra_warnings && check_cflags -Winline
2129

    
2130
# add some linker flags
2131
check_ldflags -Wl,--warn-common
2132
check_ldflags -Wl,--as-needed
2133
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'
2134
check_ldflags -Wl,-Bsymbolic
2135

    
2136
if enabled small; then
2137
    check_cflags -Os            # not all compilers support -Os
2138
    optimizations="small"
2139
elif enabled optimizations; then
2140
    if enabled xlc; then
2141
        add_cflags  -O5
2142
        add_ldflags -O5
2143
    else
2144
        add_cflags -O3
2145
    fi
2146
fi
2147
check_cflags -fno-math-errno
2148
check_cflags -fno-signed-zeros
2149

    
2150
# add some flags for Intel C Compiler
2151
if enabled icc; then
2152
    # Just warnings, no remarks
2153
    check_cflags -w1
2154
    # -wd: Disable following warnings
2155
    # 144, 167, 556: -Wno-pointer-sign
2156
    # 10006: ignoring unknown option -fno-signed-zeros
2157
    # 10156: ignoring option '-W'; no argument required
2158
    check_cflags -wd144,167,556,10006,10156
2159
    # 11030: Warning unknown option --as-needed
2160
    # 10156: ignoring option '-export'; no argument required
2161
    check_ldflags -wd10156,11030
2162
    # Allow to compile with optimizations
2163
    check_ldflags -march=$cpu
2164
fi
2165

    
2166
# PIC flags for shared library objects where they are needed
2167
if enabled shared; then
2168
    # LIBOBJFLAGS may have already been set in the OS configuration
2169
    if test -z "$LIBOBJFLAGS" ; then
2170
        case "${subarch-$arch}" in
2171
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2172
        esac
2173
    fi
2174
fi
2175

    
2176
if enabled gprof; then
2177
    add_cflags  -p
2178
    add_ldflags -p
2179
fi
2180

    
2181
VHOOKCFLAGS="-fPIC"
2182

    
2183
# Find out if the .align argument is a power of two or not.
2184
check_asm asmalign_pot '".align 3"'
2185

    
2186
enabled_any $DECODER_LIST      && enable decoders
2187
enabled_any $ENCODER_LIST      && enable encoders
2188
enabled_any $BSF_LIST          && enable bsfs
2189
enabled_any $DEMUXER_LIST      && enable demuxers
2190
enabled_any $MUXER_LIST        && enable muxers
2191
enabled_any $FILTER_LIST       && enable filters
2192
enabled_any $INDEV_LIST        && enable demuxers
2193
enabled_any $OUTDEV_LIST       && enable muxers
2194
enabled_any $PROTOCOL_LIST     && enable protocols
2195

    
2196
enabled_any $THREADS_LIST      && enable threads
2197

    
2198
check_deps $CONFIG_LIST       \
2199
           $CONFIG_EXTRA      \
2200
           $HAVE_LIST         \
2201
           $DECODER_LIST      \
2202
           $ENCODER_LIST      \
2203
           $PARSER_LIST       \
2204
           $BSF_LIST          \
2205
           $DEMUXER_LIST      \
2206
           $MUXER_LIST        \
2207
           $FILTER_LIST       \
2208
           $INDEV_LIST        \
2209
           $OUTDEV_LIST       \
2210
           $PROTOCOL_LIST     \
2211

    
2212
echo "install prefix            $prefix"
2213
echo "source path               $source_path"
2214
echo "C compiler                $cc"
2215
echo ".align is power-of-two    $asmalign_pot"
2216
echo "ARCH                      $arch ($cpu)"
2217
if test "$build_suffix" != ""; then
2218
    echo "build suffix              $build_suffix"
2219
fi
2220
if test "$extra_version" != ""; then
2221
    echo "version string suffix     $extra_version"
2222
fi
2223
echo "big-endian                ${bigendian-no}"
2224
if enabled x86; then
2225
    echo "yasm                      ${yasm-no}"
2226
    echo "MMX enabled               ${mmx-no}"
2227
    echo "MMX2 enabled              ${mmx2-no}"
2228
    echo "3DNow! enabled            ${amd3dnow-no}"
2229
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2230
    echo "SSE enabled               ${sse-no}"
2231
    echo "SSSE3 enabled             ${ssse3-no}"
2232
    echo "CMOV enabled              ${cmov-no}"
2233
    echo "CMOV is fast              ${fast_cmov-no}"
2234
    echo "EBX available             ${ebx_available-no}"
2235
    echo "EBP available             ${ebp_available-no}"
2236
    echo "10 operands supported     ${ten_operands-no}"
2237
fi
2238
if enabled arm; then
2239
    echo "ARMv5TE enabled           ${armv5te-no}"
2240
    echo "ARMv6 enabled             ${armv6-no}"
2241
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2242
    echo "ARM VFP enabled           ${armvfp-no}"
2243
    echo "IWMMXT enabled            ${iwmmxt-no}"
2244
    echo "NEON enabled              ${neon-no}"
2245
fi
2246
if enabled mips; then
2247
    echo "MMI enabled               ${mmi-no}"
2248
fi
2249
if enabled ppc; then
2250
    echo "AltiVec enabled           ${altivec-no}"
2251
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2252
    echo "dcbzl available           ${dcbzl-no}"
2253
    echo "performance report        ${powerpc_perf-no}"
2254
fi
2255
if enabled sparc; then
2256
    echo "VIS enabled               ${vis-no}"
2257
fi
2258
echo "gprof enabled             ${gprof-no}"
2259
echo "debug symbols             ${debug-no}"
2260
echo "strip symbols             ${stripping-no}"
2261
echo "optimizations             ${optimizations-no}"
2262
echo "static                    ${static-no}"
2263
echo "shared                    ${shared-no}"
2264
echo "postprocessing support    ${postproc-no}"
2265
echo "software scaler enabled   ${swscale-no}"
2266
echo "new filter support        ${avfilter-no}"
2267
echo "filters using lavformat   ${avfilter_lavf-no}"
2268
echo "video hooking             ${vhook-no}"
2269
if enabled vhook; then
2270
    echo "Imlib2 support            ${imlib2-no}"
2271
    echo "FreeType support          ${freetype2-no}"
2272
fi
2273
echo "network support           ${network-no}"
2274
if enabled network; then
2275
    echo "IPv6 support              ${ipv6-no}"
2276
fi
2277
echo "threading support         ${thread_type-no}"
2278
echo "SDL support               ${sdl-no}"
2279
if enabled sdl_too_old; then
2280
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2281
fi
2282
echo "Sun medialib support      ${mlib-no}"
2283
echo "AVISynth enabled          ${avisynth-no}"
2284
echo "libamr-nb support         ${libamr_nb-no}"
2285
echo "libamr-wb support         ${libamr_wb-no}"
2286
echo "libdc1394 support         ${libdc1394-no}"
2287
echo "libdirac enabled          ${libdirac-no}"
2288
echo "libfaac enabled           ${libfaac-no}"
2289
echo "libfaad enabled           ${libfaad-no}"
2290
echo "libfaad dlopened          ${libfaadbin-no}"
2291
echo "libgsm enabled            ${libgsm-no}"
2292
echo "libmp3lame enabled        ${libmp3lame-no}"
2293
echo "libnut enabled            ${libnut-no}"
2294
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2295
echo "libschroedinger enabled   ${libschroedinger-no}"
2296
echo "libspeex enabled          ${libspeex-no}"
2297
echo "libtheora enabled         ${libtheora-no}"
2298
echo "libvorbis enabled         ${libvorbis-no}"
2299
echo "libx264 enabled           ${libx264-no}"
2300
echo "libxvid enabled           ${libxvid-no}"
2301
echo "vdpau enabled             ${vdpau-no}"
2302
echo "zlib enabled              ${zlib-no}"
2303
echo "bzlib enabled             ${bzlib-no}"
2304
echo
2305

    
2306
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2307
    echo "Enabled ${type}s:"
2308
    eval list=\$$(toupper $type)_LIST
2309
    for part in $list; do
2310
        enabled $part && echo ${part%_*}
2311
    done | sort | pr -3 -t
2312
    echo
2313
done
2314

    
2315
license="LGPL"
2316
if enabled nonfree; then
2317
    license="unredistributable"
2318
elif enabled gpl; then
2319
    license="GPL"
2320
fi
2321

    
2322
echo "License: $license"
2323

    
2324
echo "Creating config.mak and config.h..."
2325

    
2326
echo "# Automatically generated by configure - do not modify!" > config.mak
2327
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2328
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2329
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2330
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2331
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2332

    
2333
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2334
echo "prefix=$prefix" >> config.mak
2335
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2336
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2337
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2338
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2339
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2340
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2341
echo "CC=$cc" >> config.mak
2342
echo "YASM=$yasmexe" >> config.mak
2343
echo "AR=$ar" >> config.mak
2344
echo "RANLIB=$ranlib" >> config.mak
2345
echo "LN_S=$ln_s" >> config.mak
2346
enabled stripping &&
2347
    echo "STRIP=$strip" >> config.mak ||
2348
    echo "STRIP=echo ignoring strip" >> config.mak
2349

    
2350
echo "OPTFLAGS=$CFLAGS" >> config.mak
2351
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2352
echo "LDFLAGS=$LDFLAGS" >> config.mak
2353
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2354
echo "SHFLAGS=$SHFLAGS" >> config.mak
2355
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2356
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2357
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2358
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2359
echo "BUILD_STATIC=$static" >> config.mak
2360
echo "BUILDSUF=$build_suffix" >> config.mak
2361
echo "FULLNAME=$FULLNAME" >> config.mak
2362
echo "LIBPREF=$LIBPREF" >> config.mak
2363
echo "LIBSUF=$LIBSUF" >> config.mak
2364
echo "LIBNAME=$LIBNAME" >> config.mak
2365
echo "SLIBPREF=$SLIBPREF" >> config.mak
2366
echo "SLIBSUF=$SLIBSUF" >> config.mak
2367
echo "EXESUF=$EXESUF" >> config.mak
2368
echo "EXTRA_VERSION=$extra_version" >> config.mak
2369
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2370
echo "HOSTCC=$host_cc" >> config.mak
2371
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2372
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2373
echo "HOSTLIBS=$host_libs" >> config.mak
2374
echo "TARGET_EXEC=$target_exec" >> config.mak
2375
echo "TARGET_PATH=$target_path" >> config.mak
2376

    
2377
if enabled bigendian; then
2378
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2379
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2380
fi
2381

    
2382
if enabled sdl; then
2383
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2384
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2385
fi
2386
if enabled texi2html; then
2387
    echo "BUILD_DOC=yes" >> config.mak
2388
fi
2389

    
2390
get_version(){
2391
    name=$1
2392
    file=$source_path/$2
2393
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2394
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2395
    lcname=$(tolower $name)
2396
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2397
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2398
}
2399

    
2400
get_version LIBSWSCALE  libswscale/swscale.h
2401
get_version LIBPOSTPROC libpostproc/postprocess.h
2402
get_version LIBAVCODEC  libavcodec/avcodec.h
2403
get_version LIBAVDEVICE libavdevice/avdevice.h
2404
get_version LIBAVFORMAT libavformat/avformat.h
2405
get_version LIBAVUTIL   libavutil/avutil.h
2406
get_version LIBAVFILTER libavfilter/avfilter.h
2407

    
2408
if enabled shared; then
2409
    echo "BUILD_SHARED=yes" >> config.mak
2410
    echo "PIC=-fPIC -DPIC" >> config.mak
2411
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2412
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2413
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2414
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2415
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2416
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2417
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2418
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2419
fi
2420
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2421
echo "EXTRALIBS=$extralibs" >> config.mak
2422

    
2423
echo "ARCH=$arch" >> config.mak
2424

    
2425
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2426
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2427
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2428
                                      $CONFIG_EXTRA      \
2429
                                      $DECODER_LIST      \
2430
                                      $ENCODER_LIST      \
2431
                                      $PARSER_LIST       \
2432
                                      $BSF_LIST          \
2433
                                      $DEMUXER_LIST      \
2434
                                      $MUXER_LIST        \
2435
                                      $FILTER_LIST       \
2436
                                      $PROTOCOL_LIST     \
2437
                                      $INDEV_LIST        \
2438
                                      $OUTDEV_LIST       \
2439

    
2440
echo "#define restrict $_restrict" >> $TMPH
2441

    
2442
if enabled small; then
2443
    echo "#define av_always_inline"  >> $TMPH
2444
fi
2445

    
2446
echo "SRC_PATH=\"$source_path\"" >> config.mak
2447
echo "SRC_PATH_BARE=$source_path" >> config.mak
2448
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2449

    
2450
# Apparently it's not possible to portably echo a backslash.
2451
enabled asmalign_pot &&
2452
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2453
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2454

    
2455
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2456

    
2457
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2458

    
2459
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2460
cmp -s $TMPH config.h &&
2461
    echo "config.h is unchanged" ||
2462
    mv -f $TMPH config.h
2463

    
2464
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2465

    
2466
# build tree in object directory if source path is different from current one
2467
if enabled source_path_used; then
2468
    DIRS="\
2469
        doc               \
2470
        libavcodec        \
2471
        libavcodec/alpha  \
2472
        libavcodec/arm    \
2473
        libavcodec/bfin   \
2474
        libavcodec/mlib   \
2475
        libavcodec/ppc    \
2476
        libavcodec/sh4    \
2477
        libavcodec/sparc  \
2478
        libavcodec/x86    \
2479
        libavdevice       \
2480
        libavfilter       \
2481
        libavformat       \
2482
        libavutil         \
2483
        libpostproc       \
2484
        libswscale        \
2485
        tests             \
2486
        tools             \
2487
        vhook             \
2488
        "
2489
    FILES="\
2490
        Makefile             \
2491
        common.mak           \
2492
        subdir.mak           \
2493
        doc/texi2pod.pl      \
2494
        libavcodec/Makefile  \
2495
        libavdevice/Makefile \
2496
        libavfilter/Makefile \
2497
        libavformat/Makefile \
2498
        libavutil/Makefile   \
2499
        libpostproc/Makefile \
2500
        libswscale/Makefile  \
2501
        "
2502
    for dir in $DIRS ; do
2503
        mkdir -p $dir
2504
    done
2505
    for f in $FILES ; do
2506
        $ln_s "$source_path/$f" $f
2507
    done
2508
fi
2509

    
2510

    
2511
# build pkg-config files
2512

    
2513
pkgconfig_generate(){
2514
name=$1
2515
shortname=${name#lib}${build_suffix}
2516
comment=$2
2517
version=$3
2518
libs=$4
2519
requires=$5
2520
cat <<EOF > $name/$name.pc
2521
prefix=$prefix
2522
exec_prefix=\${prefix}
2523
libdir=$libdir
2524
includedir=$incdir
2525

    
2526
Name: $name
2527
Description: $comment
2528
Version: $version
2529
Requires: $(disabled shared && echo $requires)
2530
Requires.private: $(enabled shared && echo $requires)
2531
Conflicts:
2532
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2533
Libs.private: $(enabled shared && echo $libs)
2534
Cflags: -I\${includedir}
2535
EOF
2536
cat <<EOF > $name/$name-uninstalled.pc
2537
prefix=
2538
exec_prefix=
2539
libdir=\${pcfiledir}
2540
includedir=${source_path}
2541

    
2542
Name: $name
2543
Description: $comment
2544
Version: $version
2545
Requires: $requires
2546
Conflicts:
2547
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2548
Cflags: -I\${includedir}
2549
EOF
2550
}
2551

    
2552
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2553
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2554
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2555
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2556
enabled avfilter &&
2557
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2558
enabled postproc &&
2559
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2560
if enabled swscale; then
2561
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2562
else
2563
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2564
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2565
fi