Statistics
| Branch: | Revision:

ffmpeg / configure @ e90f5b5a

History | View | Annotate | Download (75.6 KB)

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

    
10
# Prevent locale nonsense from breaking basic text processing.
11
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-avfilter        video filter support [no]"
85
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
86
  echo "  --enable-beosthreads     use BeOS threads [no]"
87
  echo "  --enable-os2threads      use OS/2 threads [no]"
88
  echo "  --enable-pthreads        use pthreads [no]"
89
  echo "  --enable-w32threads      use Win32 threads [no]"
90
  echo "  --enable-x11grab         enable X11 grabbing [no]"
91
  echo "  --disable-network        disable network support [no]"
92
  echo "  --disable-ipv6           disable IPv6 support [no]"
93
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
94
  echo "  --enable-gray            enable full grayscale support (slower color)"
95
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
96
  echo "  --disable-fastdiv        disable table-based division"
97
  echo "  --enable-small           optimize for size instead of speed"
98
  echo "  --disable-aandct         disable AAN DCT code"
99
  echo "  --disable-fft            disable FFT code"
100
  echo "  --disable-golomb         disable Golomb code"
101
  echo "  --disable-mdct           disable MDCT code"
102
  echo "  --disable-rdft           disable RDFT code"
103
  echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
104
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
105
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
106
  echo "  --enable-beos-netserver  enable BeOS netserver"
107
  echo "  --disable-encoder=NAME   disable encoder NAME"
108
  echo "  --enable-encoder=NAME    enable encoder NAME"
109
  echo "  --disable-encoders       disable all encoders"
110
  echo "  --disable-decoder=NAME   disable decoder NAME"
111
  echo "  --enable-decoder=NAME    enable decoder NAME"
112
  echo "  --disable-decoders       disable all decoders"
113
  echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
114
  echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
115
  echo "  --disable-hwaccels       disable all hwaccels"
116
  echo "  --disable-muxer=NAME     disable muxer NAME"
117
  echo "  --enable-muxer=NAME      enable muxer NAME"
118
  echo "  --disable-muxers         disable all muxers"
119
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
120
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
121
  echo "  --disable-demuxers       disable all demuxers"
122
  echo "  --enable-parser=NAME     enable parser NAME"
123
  echo "  --disable-parser=NAME    disable parser NAME"
124
  echo "  --disable-parsers        disable all parsers"
125
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
126
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
127
  echo "  --disable-bsfs           disable all bitstream filters"
128
  echo "  --enable-protocol=NAME   enable protocol NAME"
129
  echo "  --disable-protocol=NAME  disable protocol NAME"
130
  echo "  --disable-protocols      disable all protocols"
131
  echo "  --disable-indevs         disable input devices"
132
  echo "  --disable-outdevs        disable output devices"
133
  echo "  --disable-devices        disable all devices"
134
  echo "  --enable-filter=NAME     enable filter NAME"
135
  echo "  --disable-filter=NAME    disable filter NAME"
136
  echo "  --disable-filters        disable all filters"
137
  echo "  --list-decoders          show all available decoders"
138
  echo "  --list-encoders          show all available encoders"
139
  echo "  --list-hwaccels          show all available hardware accelerators"
140
  echo "  --list-muxers            show all available muxers"
141
  echo "  --list-demuxers          show all available demuxers"
142
  echo "  --list-parsers           show all available parsers"
143
  echo "  --list-protocols         show all available protocols"
144
  echo "  --list-bsfs              show all available bitstream filters"
145
  echo "  --list-indevs            show all available input devices"
146
  echo "  --list-outdevs           show all available output devices"
147
  echo "  --list-filters           show all available filters"
148
  echo
149
  echo "External library support:"
150
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
151
  echo "  --enable-bzlib           enable bzlib [autodetect]"
152
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
153
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
154
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
155
  echo "                           and libraw1394 [no]"
156
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
157
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
158
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
159
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
160
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
161
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
162
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
163
  echo "                           native (de)muxer exists [no]"
164
  echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
165
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
166
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
167
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
168
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
169
  echo "                           native implementation exists [no]"
170
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
171
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
172
  echo "                           native MPEG-4/Xvid encoder exists [no]"
173
  echo "  --enable-mlib            enable Sun medialib [no]"
174
  echo "  --enable-zlib            enable zlib [autodetect]"
175
  echo ""
176
  echo "Advanced options (experts only):"
177
  echo "  --source-path=PATH       path to source code [$source_path]"
178
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
179
  echo "  --enable-cross-compile   assume a cross-compiler is used"
180
  echo "  --sysroot=PATH           root of cross-build tree"
181
  echo "  --sysinclude=PATH        location of cross-build system headers"
182
  echo "  --target-os=OS           compiler targets OS [$target_os]"
183
  echo "  --target-exec=CMD        command to run executables on target"
184
  echo "  --target-path=DIR        path to view of build directory on target"
185
  echo "  --nm=NM                  use nm tool"
186
  echo "  --as=AS                  use assembler AS [$as_default]"
187
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
188
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
189
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
190
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
191
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
192
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
193
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
194
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
195
  echo "  --extra-version=STRING   version string suffix []"
196
  echo "  --build-suffix=SUFFIX    library name suffix []"
197
  echo "  --arch=ARCH              select architecture [$arch]"
198
  echo "  --cpu=CPU                select the minimum required CPU (affects"
199
  echo "                           instruction selection, may crash on older CPUs)"
200
  echo "  --enable-powerpc-perf    enable performance report on PPC"
201
  echo "                           (requires enabling PMC)"
202
  echo "  --disable-altivec        disable AltiVec optimizations"
203
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
204
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
205
  echo "  --disable-mmx            disable MMX optimizations"
206
  echo "  --disable-mmx2           disable MMX2 optimizations"
207
  echo "  --disable-sse            disable SSE optimizations"
208
  echo "  --disable-ssse3          disable SSSE3 optimizations"
209
  echo "  --disable-armv5te        disable armv5te optimizations"
210
  echo "  --disable-armv6          disable armv6 optimizations"
211
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
212
  echo "  --disable-armvfp         disable ARM VFP optimizations"
213
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
214
  echo "  --disable-mmi            disable MMI optimizations"
215
  echo "  --disable-neon           disable neon optimizations"
216
  echo "  --disable-vis            disable VIS optimizations"
217
  echo "  --disable-yasm           disable use of yasm assembler"
218
  echo
219
  echo "Developer options (useful when working on FFmpeg itself):"
220
  echo "  --disable-debug          disable debugging symbols"
221
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
222
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
223
  echo "  --disable-optimizations  disable compiler optimizations"
224
  echo "  --enable-extra-warnings  enable more compiler warnings"
225
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
226
  echo ""
227
  echo "NOTE: Object files are built at the place where configure is launched."
228
  exit 0
229
}
230

    
231
log(){
232
    echo "$@" >> $logfile
233
}
234

    
235
log_file(){
236
    log BEGIN $1
237
    pr -n -t $1 >> $logfile
238
    log END $1
239
}
240

    
241
echolog(){
242
    log "$@"
243
    echo "$@"
244
}
245

    
246
die(){
247
    echolog "$@"
248
    cat <<EOF
249

    
250
If you think configure made a mistake, make sure you are using the latest
251
version from SVN.  If the latest version fails, report the problem to the
252
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
253
EOF
254
    if disabled logging; then
255
        cat <<EOF
256
Rerun configure with logging enabled (do not use --disable-logging), and
257
include the log this produces with your report.
258
EOF
259
    else
260
cat <<EOF
261
Include the log file "$logfile" produced by configure as this will help
262
solving the problem.
263
EOF
264
    fi
265
    exit 1
266
}
267

    
268
# Avoid locale weirdness, besides we really just want to translate ASCII.
269
toupper(){
270
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
271
}
272

    
273
tolower(){
274
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
275
}
276

    
277
c_escape(){
278
    echo "$*" | sed 's/["\\]/\\\0/g'
279
}
280

    
281
set_all(){
282
    value=$1
283
    shift
284
    for var in $*; do
285
        eval $var=$value
286
    done
287
}
288

    
289
set_weak(){
290
    value=$1
291
    shift
292
    for var; do
293
        eval : \${$var:=$value}
294
    done
295
}
296

    
297
pushvar(){
298
    for var in $*; do
299
        eval level=\${${var}_level:=0}
300
        eval ${var}_${level}="\$$var"
301
        eval ${var}_level=$(($level+1))
302
    done
303
}
304

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

    
316
enable(){
317
    set_all yes $*
318
}
319

    
320
disable(){
321
    set_all no $*
322
}
323

    
324
enable_weak(){
325
    set_weak yes $*
326
}
327

    
328
disable_weak(){
329
    set_weak no $*
330
}
331

    
332
enable_safe(){
333
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
334
}
335

    
336
disable_safe(){
337
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
338
}
339

    
340
do_enable_deep(){
341
    for var; do
342
        enabled $var && continue
343
        eval sel="\$${var}_select"
344
        eval sgs="\$${var}_suggest"
345
        pushvar var sgs
346
        enable_deep $sel
347
        popvar sgs
348
        enable_deep_weak $sgs
349
        popvar var
350
    done
351
}
352

    
353
enable_deep(){
354
    do_enable_deep $*
355
    enable $*
356
}
357

    
358
enable_deep_weak(){
359
    do_enable_deep $*
360
    enable_weak $*
361
}
362

    
363
enabled(){
364
    test "${1#!}" = "$1" && op== || op=!=
365
    eval test "x\$${1#!}" $op "xyes"
366
}
367

    
368
disabled(){
369
    test "${1#!}" = "$1" && op== || op=!=
370
    eval test "x\$${1#!}" $op "xno"
371
}
372

    
373
enabled_all(){
374
    for opt; do
375
        enabled $opt || return 1
376
    done
377
}
378

    
379
disabled_all(){
380
    for opt; do
381
        disabled $opt || return 1
382
    done
383
}
384

    
385
enabled_any(){
386
    for opt; do
387
        enabled $opt && return 0
388
    done
389
}
390

    
391
disabled_any(){
392
    for opt; do
393
        disabled $opt && return 0
394
    done
395
    return 1
396
}
397

    
398
set_default(){
399
    for opt; do
400
        eval : \${$opt:=\$${opt}_default}
401
    done
402
}
403

    
404
is_in(){
405
    value=$1
406
    shift
407
    for var in $*; do
408
        [ $var = $value ] && return 0
409
    done
410
    return 1
411
}
412

    
413
check_deps(){
414
    for cfg; do
415
        cfg="${cfg#!}"
416
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
417
        disabled ${cfg}_checking && continue
418
        enable ${cfg}_checking
419

    
420
        eval dep_all="\$${cfg}_deps"
421
        eval dep_any="\$${cfg}_deps_any"
422
        eval dep_sel="\$${cfg}_select"
423
        eval dep_sgs="\$${cfg}_suggest"
424

    
425
        pushvar cfg dep_all dep_any dep_sel dep_sgs
426
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
427
        popvar cfg dep_all dep_any dep_sel dep_sgs
428

    
429
        enabled_all  $dep_all || disable $cfg
430
        enabled_any  $dep_any || disable $cfg
431
        disabled_any $dep_sel && disable $cfg
432

    
433
        if enabled $cfg; then
434
            eval dep_extralibs="\$${cfg}_extralibs"
435
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
436
            enable_deep $dep_sel
437
            enable_deep_weak $dep_sgs
438
        fi
439

    
440
        disable ${cfg}_checking
441
    done
442
}
443

    
444
print_config(){
445
    pfx=$1
446
    header=$2
447
    makefile=$3
448
    shift 3
449
    for cfg; do
450
        ucname="$(toupper $cfg)"
451
        if enabled $cfg; then
452
            echo "#define ${pfx}${ucname} 1" >> $header
453
            echo "${pfx}${ucname}=yes" >> $makefile
454
        else
455
            echo "#define ${pfx}${ucname} 0" >> $header
456
        fi
457
    done
458
}
459

    
460
flags_saved(){
461
    (: ${SAVE_CFLAGS?}) 2> /dev/null
462
}
463

    
464
save_flags(){
465
    flags_saved && return
466
    SAVE_CFLAGS="$CFLAGS"
467
    SAVE_LDFLAGS="$LDFLAGS"
468
    SAVE_extralibs="$extralibs"
469
}
470

    
471
restore_flags(){
472
    flags_saved || return
473
    CFLAGS="$SAVE_CFLAGS"
474
    LDFLAGS="$SAVE_LDFLAGS"
475
    extralibs="$SAVE_extralibs"
476
    unset SAVE_CFLAGS
477
    unset SAVE_LDFLAGS
478
    unset SAVE_extralibs
479
}
480

    
481
temp_cflags(){
482
    save_flags
483
    CFLAGS="$CFLAGS $*"
484
}
485

    
486
temp_ldflags(){
487
    save_flags
488
    LDFLAGS="$LDFLAGS $*"
489
}
490

    
491
temp_extralibs(){
492
    save_flags
493
    extralibs="$extralibs $*"
494
}
495

    
496
append(){
497
    var=$1
498
    shift
499
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
500
    eval "$var=\"\$$var $*\""
501
}
502

    
503
add_cflags(){
504
    append CFLAGS "$@"
505
}
506

    
507
add_ldflags(){
508
    append LDFLAGS "$@"
509
}
510

    
511
add_extralibs(){
512
    append extralibs "$@"
513
}
514

    
515
check_cmd(){
516
    log "$@"
517
    "$@" >> $logfile 2>&1
518
}
519

    
520
check_cc(){
521
    log check_cc "$@"
522
    cat > $TMPC
523
    log_file $TMPC
524
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
525
}
526

    
527
check_cpp(){
528
    log check_cpp "$@"
529
    cat > $TMPC
530
    log_file $TMPC
531
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
532
}
533

    
534
check_as(){
535
    log check_as "$@"
536
    cat > $TMPC
537
    log_file $TMPC
538
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
539
}
540

    
541
check_asm(){
542
    log check_asm "$@"
543
    name="$1"
544
    asm="$2"
545
    shift 2
546
    check_as "$@" <<EOF && enable $name || disable $name
547
void foo(void){ __asm__ volatile($asm); }
548
EOF
549
}
550

    
551
check_yasm(){
552
    log check_yasm "$@"
553
    echo "$1" > $TMPS
554
    log_file $TMPS
555
    shift 1
556
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
557
}
558

    
559
check_ld(){
560
    log check_ld "$@"
561
    check_cc || return
562
    flags=''
563
    libs=''
564
    for f; do
565
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
566
    done
567
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
568
}
569

    
570
check_cflags(){
571
    log check_cflags "$@"
572
    check_cc "$@" <<EOF && add_cflags "$@"
573
int x;
574
EOF
575
}
576

    
577
check_ldflags(){
578
    log check_ldflags "$@"
579
    check_ld "$@" <<EOF && add_ldflags "$@"
580
int main(void){ return 0; }
581
EOF
582
}
583

    
584
check_header(){
585
    log check_header "$@"
586
    header=$1
587
    shift
588
    disable_safe $header
589
    check_cpp "$@" <<EOF && enable_safe $header
590
#include <$header>
591
int x;
592
EOF
593
}
594

    
595
check_func(){
596
    log check_func "$@"
597
    func=$1
598
    shift
599
    disable $func
600
    check_ld "$@" <<EOF && enable $func
601
extern int $func();
602
int main(void){ $func(); }
603
EOF
604
}
605

    
606
check_func_headers(){
607
    log check_func_headers "$@"
608
    headers=$1
609
    func=$2
610
    shift 2
611
    disable $func
612
    incs=""
613
    for hdr in $headers; do
614
        incs="$incs
615
#include <$hdr>"
616
    done
617
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
618
$incs
619
int main(int argc, char **argv){
620
    (void) $func;
621
    return 0;
622
}
623
EOF
624
}
625

    
626
check_cpp_condition(){
627
    log check_cpp_condition "$@"
628
    header=$1
629
    condition=$2
630
    check_cpp <<EOF
631
#include <$header>
632
#if !($condition)
633
#error "unsatisfied condition: $condition"
634
#endif
635
EOF
636
}
637

    
638
check_lib(){
639
    log check_lib "$@"
640
    header="$1"
641
    func="$2"
642
    shift 2
643
    temp_extralibs "$@"
644
    check_header $header && check_func $func && add_extralibs "$@"
645
    err=$?
646
    restore_flags
647
    return $err
648
}
649

    
650
check_lib2(){
651
    log check_lib2 "$@"
652
    headers="$1"
653
    func="$2"
654
    shift 2
655
    temp_extralibs "$@"
656
    check_func_headers "$headers" $func && add_extralibs "$@"
657
    err=$?
658
    restore_flags
659
    return $err
660
}
661

    
662
check_exec(){
663
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
664
}
665

    
666
check_exec_crash(){
667
    code=$(cat)
668

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

    
675
    (check_exec "$@") >> $logfile 2>&1 <<EOF
676
#include <signal.h>
677
static void sighandler(int sig){
678
    raise(SIGTERM);
679
}
680
int main(void){
681
    signal(SIGILL, sighandler);
682
    signal(SIGFPE, sighandler);
683
    signal(SIGSEGV, sighandler);
684
#ifdef SIGBUS
685
    signal(SIGBUS, sighandler);
686
#endif
687
    { $code }
688
}
689
EOF
690
}
691

    
692
check_type(){
693
    log check_type "$@"
694
    headers=$1
695
    type=$2
696
    shift 2
697
    disable $type
698
    incs=""
699
    for hdr in $headers; do
700
        incs="$incs
701
#include <$hdr>"
702
    done
703
    check_cc "$@" <<EOF && enable $type
704
$incs
705
$type v;
706
EOF
707
}
708

    
709
require(){
710
    name="$1"
711
    header="$2"
712
    func="$3"
713
    shift 3
714
    check_lib $header $func "$@" || die "ERROR: $name not found"
715
}
716

    
717
require2(){
718
    name="$1"
719
    headers="$2"
720
    func="$3"
721
    shift 3
722
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
723
}
724

    
725
check_foo_config(){
726
    cfg=$1
727
    pkg=$2
728
    header=$3
729
    func=$4
730
    shift 4
731
    disable $cfg
732
    check_cmd ${pkg}-config --version
733
    err=$?
734
    if test "$err" = 0; then
735
        temp_cflags $(${pkg}-config --cflags)
736
        temp_extralibs $(${pkg}-config --libs)
737
        check_lib "$@" $header $func && enable $cfg
738
    fi
739
    return $err
740
}
741

    
742
apply(){
743
    file=$1
744
    shift
745
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
746
}
747

    
748
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
749
# system-dependent things.
750

    
751
COMPONENT_LIST="
752
    bsfs
753
    decoders
754
    demuxers
755
    encoders
756
    filters
757
    hwaccels
758
    indevs
759
    muxers
760
    outdevs
761
    parsers
762
    protocols
763
"
764

    
765
CONFIG_LIST="
766
    $COMPONENT_LIST
767
    aandct
768
    avfilter
769
    avfilter_lavf
770
    avisynth
771
    beos_netserver
772
    bzlib
773
    fastdiv
774
    ffmpeg
775
    ffplay
776
    ffserver
777
    fft
778
    golomb
779
    gpl
780
    gprof
781
    gray
782
    hardcoded_tables
783
    ipv6
784
    libamr_nb
785
    libamr_wb
786
    libdc1394
787
    libdirac
788
    libfaac
789
    libfaad
790
    libfaadbin
791
    libgsm
792
    libmp3lame
793
    libnut
794
    libopenjpeg
795
    libschroedinger
796
    libspeex
797
    libtheora
798
    libvorbis
799
    libx264
800
    libxvid
801
    mdct
802
    memalign_hack
803
    mlib
804
    mpegaudio_hp
805
    network
806
    nonfree
807
    postproc
808
    powerpc_perf
809
    rdft
810
    runtime_cpudetect
811
    shared
812
    small
813
    static
814
    swscale_alpha
815
    x11grab
816
    zlib
817
"
818

    
819
THREADS_LIST='
820
    beosthreads
821
    os2threads
822
    pthreads
823
    w32threads
824
'
825

    
826
ARCH_LIST='
827
    alpha
828
    arm
829
    bfin
830
    ia64
831
    m68k
832
    mips
833
    parisc
834
    ppc
835
    s390
836
    sh4
837
    sparc
838
    sparc64
839
    x86
840
    x86_32
841
    x86_64
842
'
843

    
844
ARCH_EXT_LIST='
845
    altivec
846
    amd3dnow
847
    amd3dnowext
848
    armv5te
849
    armv6
850
    armv6t2
851
    armvfp
852
    iwmmxt
853
    mmi
854
    mmx
855
    mmx2
856
    neon
857
    ppc4xx
858
    sse
859
    ssse3
860
    vis
861
'
862

    
863
HAVE_LIST="
864
    $ARCH_EXT_LIST
865
    $THREADS_LIST
866
    alsa_asoundlib_h
867
    altivec_h
868
    arpa_inet_h
869
    bswap
870
    closesocket
871
    cmov
872
    conio_h
873
    dcbzl
874
    dev_bktr_ioctl_bt848_h
875
    dev_bktr_ioctl_meteor_h
876
    dev_ic_bt8xx_h
877
    dev_video_meteor_ioctl_meteor_h
878
    dev_video_bktr_ioctl_bt848_h
879
    dlfcn_h
880
    dlopen
881
    dos_paths
882
    ebp_available
883
    ebx_available
884
    fast_64bit
885
    fast_cmov
886
    fast_unaligned
887
    fork
888
    gethrtime
889
    GetProcessTimes
890
    getrusage
891
    inet_aton
892
    inline_asm
893
    libdc1394_1
894
    libdc1394_2
895
    llrint
896
    lrint
897
    lrintf
898
    machine_ioctl_bt848_h
899
    machine_ioctl_meteor_h
900
    malloc_h
901
    memalign
902
    mkstemp
903
    pld
904
    posix_memalign
905
    ppc64
906
    round
907
    roundf
908
    sdl
909
    sdl_video_size
910
    setmode
911
    socklen_t
912
    soundcard_h
913
    poll_h
914
    sys_mman_h
915
    sys_resource_h
916
    sys_select_h
917
    sys_soundcard_h
918
    sys_videoio_h
919
    ten_operands
920
    termios_h
921
    threads
922
    truncf
923
    VirtualAlloc
924
    winsock2_h
925
    yasm
926
"
927

    
928
# options emitted with CONFIG_ prefix but not available on command line
929
CONFIG_EXTRA="
930
"
931

    
932
CMDLINE_SELECT="
933
    $ARCH_EXT_LIST
934
    $CONFIG_LIST
935
    $THREADS_LIST
936
    cross_compile
937
    debug
938
    extra_warnings
939
    logging
940
    optimizations
941
    stripping
942
    yasm
943
"
944

    
945
PATHS_LIST='
946
    bindir
947
    datadir
948
    incdir
949
    libdir
950
    mandir
951
    prefix
952
    shlibdir
953
'
954

    
955
CMDLINE_SET="
956
    $PATHS_LIST
957
    arch
958
    as
959
    build_suffix
960
    cc
961
    cpu
962
    cross_prefix
963
    extra_version
964
    host_cc
965
    host_cflags
966
    host_ldflags
967
    host_libs
968
    host_os
969
    logfile
970
    nm
971
    source_path
972
    sysinclude
973
    sysroot
974
    target_exec
975
    target_os
976
    target_path
977
"
978

    
979
# code dependency declarations
980

    
981
# architecture extensions
982
altivec_deps="ppc"
983
amd3dnow_deps="mmx"
984
amd3dnowext_deps="amd3dnow"
985
armv5te_deps="arm"
986
armv6_deps="arm"
987
armv6t2_deps="arm"
988
armvfp_deps="arm"
989
iwmmxt_deps="arm"
990
mmi_deps="mips"
991
mmx_deps="x86"
992
mmx2_deps="mmx"
993
neon_deps="arm"
994
ppc4xx_deps="ppc"
995
sse_deps="mmx"
996
ssse3_deps="sse"
997
vis_deps="sparc"
998

    
999
# decoders / encoders / hardware accelerators
1000
aac_decoder_select="fft mdct"
1001
ac3_decoder_deps="gpl"
1002
ac3_decoder_select="fft mdct"
1003
atrac3_decoder_select="fft mdct"
1004
cavs_decoder_select="golomb"
1005
cook_decoder_select="fft mdct"
1006
cscd_decoder_suggest="zlib"
1007
dca_decoder_select="fft mdct"
1008
dnxhd_encoder_select="aandct"
1009
dxa_decoder_select="zlib"
1010
eac3_decoder_deps="gpl"
1011
eac3_decoder_select="fft mdct"
1012
eatgq_decoder_select="aandct"
1013
eatqi_decoder_select="aandct"
1014
ffv1_decoder_select="golomb"
1015
flac_decoder_select="golomb"
1016
flac_encoder_select="golomb"
1017
flashsv_decoder_select="zlib"
1018
flashsv_encoder_select="zlib"
1019
flv_encoder_select="aandct"
1020
h261_encoder_select="aandct"
1021
h263_encoder_select="aandct"
1022
h263_vaapi_hwaccel_deps="va_va_h"
1023
h263p_encoder_select="aandct"
1024
h264_decoder_select="golomb"
1025
h264_vaapi_hwaccel_deps="va_va_h"
1026
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1027
imc_decoder_select="fft mdct"
1028
jpegls_decoder_select="golomb"
1029
jpegls_encoder_select="golomb"
1030
ljpeg_encoder_select="aandct"
1031
loco_decoder_select="golomb"
1032
mjpeg_encoder_select="aandct"
1033
mpeg1video_encoder_select="aandct"
1034
mpeg2video_encoder_select="aandct"
1035
mpeg4_encoder_select="aandct"
1036
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1037
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1038
mpeg2_vaapi_hwaccel_deps="va_va_h"
1039
mpeg4_vaapi_hwaccel_deps="va_va_h"
1040
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1041
msmpeg4v1_encoder_select="aandct"
1042
msmpeg4v2_encoder_select="aandct"
1043
msmpeg4v3_encoder_select="aandct"
1044
nellymoser_decoder_select="fft mdct"
1045
nellymoser_encoder_select="fft mdct"
1046
png_decoder_select="zlib"
1047
png_encoder_select="zlib"
1048
qdm2_decoder_select="fft mdct rdft"
1049
rv10_encoder_select="aandct"
1050
rv20_encoder_select="aandct"
1051
rv30_decoder_select="golomb"
1052
rv40_decoder_select="golomb"
1053
shorten_decoder_select="golomb"
1054
sonic_decoder_select="golomb"
1055
sonic_encoder_select="golomb"
1056
sonic_ls_encoder_select="golomb"
1057
svq3_decoder_select="golomb"
1058
svq3_decoder_suggest="zlib"
1059
tiff_decoder_suggest="zlib"
1060
tiff_encoder_suggest="zlib"
1061
tscc_decoder_select="zlib"
1062
vc1_vaapi_hwaccel_deps="va_va_h"
1063
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1064
vorbis_decoder_select="fft mdct"
1065
vorbis_encoder_select="fft mdct"
1066
wmav1_decoder_select="fft mdct"
1067
wmav1_encoder_select="fft mdct"
1068
wmav2_decoder_select="fft mdct"
1069
wmav2_encoder_select="fft mdct"
1070
wmv1_encoder_select="aandct"
1071
wmv2_encoder_select="aandct"
1072
wmv3_vaapi_hwaccel_deps="va_va_h"
1073
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1074
zlib_decoder_select="zlib"
1075
zlib_encoder_select="zlib"
1076
zmbv_decoder_select="zlib"
1077
zmbv_encoder_select="zlib"
1078

    
1079
# external libraries
1080
libamr_nb_decoder_deps="libamr_nb"
1081
libamr_nb_encoder_deps="libamr_nb"
1082
libamr_wb_decoder_deps="libamr_wb"
1083
libamr_wb_encoder_deps="libamr_wb"
1084
libdirac_decoder_deps="libdirac !libschroedinger"
1085
libdirac_encoder_deps="libdirac"
1086
libfaac_encoder_deps="libfaac"
1087
libfaad_decoder_deps="libfaad"
1088
libfaadbin_decoder_extralibs='$ldl'
1089
libgsm_decoder_deps="libgsm"
1090
libgsm_encoder_deps="libgsm"
1091
libgsm_ms_decoder_deps="libgsm"
1092
libgsm_ms_encoder_deps="libgsm"
1093
libmp3lame_encoder_deps="libmp3lame"
1094
libopenjpeg_decoder_deps="libopenjpeg"
1095
libschroedinger_decoder_deps="libschroedinger"
1096
libschroedinger_encoder_deps="libschroedinger"
1097
libspeex_decoder_deps="libspeex"
1098
libtheora_encoder_deps="libtheora"
1099
libvorbis_encoder_deps="libvorbis"
1100
libx264_encoder_deps="libx264"
1101
libxvid_encoder_deps="libxvid"
1102

    
1103
# demuxers / muxers
1104
ac3_demuxer_deps="ac3_parser"
1105
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1106
alsa_demuxer_extralibs="-lasound"
1107
alsa_muxer_deps="alsa_asoundlib_h"
1108
alsa_muxer_extralibs="-lasound"
1109
audio_beos_demuxer_deps="audio_beos"
1110
audio_beos_demuxer_extralibs="-lmedia -lbe"
1111
audio_beos_muxer_deps="audio_beos"
1112
audio_beos_muxer_extralibs="-lmedia -lbe"
1113
avisynth_demuxer_deps="avisynth"
1114
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1115
dirac_demuxer_deps="dirac_parser"
1116
dv1394_demuxer_deps="dv1394 dv_demuxer"
1117
jack_demuxer_deps="jack_jack_h"
1118
jack_demuxer_extralibs="-ljack"
1119
libdc1394_demuxer_deps="libdc1394"
1120
libnut_demuxer_deps="libnut"
1121
libnut_muxer_deps="libnut"
1122
matroska_demuxer_suggest="zlib bzlib"
1123
mov_demuxer_suggest="zlib"
1124
mp3_demuxer_deps="mpegaudio_parser"
1125
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1126
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1127
redir_demuxer_deps="network"
1128
rtp_muxer_deps="network rtp_protocol"
1129
rtsp_demuxer_deps="sdp_demuxer"
1130
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1131
v4l_demuxer_deps="linux_videodev_h"
1132
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1133
vfwcap_demuxer_deps="capCreateCaptureWindow"
1134
vfwcap_demuxer_extralibs="-lvfw32"
1135
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1136
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1137

    
1138
# protocols
1139
gopher_protocol_deps="network"
1140
http_protocol_deps="network"
1141
rtp_protocol_deps="udp_protocol"
1142
tcp_protocol_deps="network"
1143
udp_protocol_deps="network"
1144

    
1145
# filters
1146
movie_filter_deps="avfilter_lavf"
1147

    
1148
# programs
1149
ffplay_deps="sdl"
1150
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1151
ffserver_extralibs='$ldl'
1152

    
1153

    
1154
# default parameters
1155

    
1156
logfile="config.err"
1157

    
1158
# installation paths
1159
prefix_default="/usr/local"
1160
bindir_default='${prefix}/bin'
1161
datadir_default='${prefix}/share/ffmpeg'
1162
incdir_default='${prefix}/include'
1163
libdir_default='${prefix}/lib'
1164
mandir_default='${prefix}/share/man'
1165
shlibdir_default="$libdir_default"
1166

    
1167
# toolchain
1168
ar="ar"
1169
cc_default="gcc"
1170
host_cc_default="gcc"
1171
ln_s="ln -sf"
1172
nm_default="nm"
1173
objformat="elf"
1174
ranlib="ranlib"
1175
strip="strip"
1176
yasmexe="yasm"
1177

    
1178
# machine
1179
arch=$(uname -m)
1180
cpu="generic"
1181

    
1182
# OS
1183
target_os=$(tolower $(uname -s))
1184
host_os=$target_os
1185

    
1186
# configurable options
1187
enable debug
1188
enable fastdiv
1189
enable ffmpeg
1190
enable ffplay
1191
enable ffserver
1192
enable ipv6
1193
enable mpegaudio_hp
1194
enable network
1195
enable optimizations
1196
enable protocols
1197
enable static
1198
enable stripping
1199
enable swscale_alpha
1200

    
1201
# build settings
1202
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1203
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1204
FFSERVERLDFLAGS=-Wl,-E
1205
LIBPREF="lib"
1206
LIBSUF=".a"
1207
FULLNAME='$(NAME)$(BUILDSUF)'
1208
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1209
SLIBPREF="lib"
1210
SLIBSUF=".so"
1211
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1212
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1213
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1214
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1215

    
1216
host_cflags='-O3 -g -Wall'
1217
host_libs='-lm'
1218

    
1219
target_path='.'
1220

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

    
1225
# find source path
1226
source_path="$(dirname "$0")"
1227
enable source_path_used
1228
if test -z "$source_path" -o "$source_path" = "." ; then
1229
    source_path="$(pwd)"
1230
    disable source_path_used
1231
else
1232
    source_path="$(cd "$source_path"; pwd)"
1233
    echo "$source_path" | grep -q '[[:blank:]]' &&
1234
        die "Out of tree builds are impossible with whitespace in source path."
1235
    test -e "$source_path/config.h" &&
1236
        die "Out of tree builds are impossible with config.h in source dir."
1237
fi
1238

    
1239
for v in "$@"; do
1240
    r="${v#*=}"
1241
    l="${v%$r}"
1242
    test "$r" = "${r#* }" || r="'$r'"
1243
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1244
done
1245

    
1246
find_things(){
1247
    thing=$1
1248
    pattern=$2
1249
    file=$source_path/$3
1250
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1251
}
1252

    
1253
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1254
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1255
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1256
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1257
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1258
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1259
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1260
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1261
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1262
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1263
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1264

    
1265
enable $ARCH_EXT_LIST \
1266
       $DECODER_LIST \
1267
       $ENCODER_LIST \
1268
       $HWACCEL_LIST \
1269
       $PARSER_LIST \
1270
       $BSF_LIST \
1271
       $DEMUXER_LIST \
1272
       $MUXER_LIST \
1273
       $FILTER_LIST \
1274
       $PROTOCOL_LIST \
1275
       $INDEV_LIST \
1276
       $OUTDEV_LIST \
1277

    
1278
die_unknown(){
1279
    echo "Unknown option \"$1\"."
1280
    echo "See $0 --help for available options."
1281
    exit 1
1282
}
1283

    
1284
show_list() {
1285
    suffix=_$1
1286
    shift
1287
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1288
    exit 0
1289
}
1290

    
1291
for opt do
1292
    optval="${opt#*=}"
1293
    case "$opt" in
1294
    --extra-cflags=*) add_cflags $optval
1295
    ;;
1296
    --extra-ldflags=*) add_ldflags $optval
1297
    ;;
1298
    --extra-libs=*) add_extralibs $optval
1299
    ;;
1300
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1301
    ;;
1302
    --enable-debug=*) debuglevel="$optval"
1303
    ;;
1304
    --enable-*=*|--disable-*=*)
1305
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1306
    case "$thing" in
1307
        encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1308
        *) die_unknown "$opt" ;;
1309
    esac
1310
    ;;
1311
    --enable-?*|--disable-?*)
1312
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1313
    if is_in $option $COMPONENT_LIST; then
1314
        eval $action \$$(toupper ${option%s})_LIST
1315
    elif is_in $option $CMDLINE_SELECT; then
1316
        $action $option
1317
    else
1318
        die_unknown $opt
1319
    fi
1320
    ;;
1321
    --list-*)
1322
        NAME="${opt#--list-}"
1323
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1324
        NAME=${NAME%s}
1325
        eval show_list $NAME \$$(toupper $NAME)_LIST
1326
    ;;
1327
    --help|-h) show_help
1328
    ;;
1329
    *)
1330
    optname="${opt%%=*}"
1331
    optname="${optname#--}"
1332
    optname=$(echo "$optname" | sed 's/-/_/g')
1333
    is_in $optname $CMDLINE_SET || die_unknown $opt
1334
    eval $optname='$optval'
1335
    ;;
1336
    esac
1337
done
1338

    
1339
disabled logging && logfile=/dev/null
1340

    
1341
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1342
set >> $logfile
1343

    
1344
test -n "$cross_prefix" && enable cross_compile
1345

    
1346
ar="${cross_prefix}${ar}"
1347
cc_default="${cross_prefix}${cc_default}"
1348
nm_default="${cross_prefix}${nm_default}"
1349
ranlib="${cross_prefix}${ranlib}"
1350
strip="${cross_prefix}${strip}"
1351

    
1352
sysinclude_default="${sysroot}/usr/include"
1353

    
1354
set_default cc nm sysinclude
1355
as_default=$cc
1356
enabled cross_compile || host_cc_default=$cc
1357
set_default host_cc
1358

    
1359
exesuf() {
1360
    case $1 in
1361
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1362
    esac
1363
}
1364

    
1365
EXESUF=$(exesuf $target_os)
1366
HOSTEXESUF=$(exesuf $host_os)
1367

    
1368
# set temporary file name
1369
: ${TMPDIR:=$TEMPDIR}
1370
: ${TMPDIR:=$TMP}
1371
: ${TMPDIR:=/tmp}
1372

    
1373
if ! check_cmd type mktemp; then
1374
    # simple replacement for missing mktemp
1375
    # NOT SAFE FOR GENERAL USE
1376
    mktemp(){
1377
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1378
    }
1379
fi
1380

    
1381
tmpfile(){
1382
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1383
        (set -C; exec > $tmp) 2>/dev/null ||
1384
        die "Unable to create temoporary file in $TMPDIR."
1385
    append TMPFILES $tmp
1386
    eval $1=$tmp
1387
}
1388

    
1389
trap 'rm -f -- $TMPFILES' EXIT
1390
trap exit HUP INT TERM
1391

    
1392
tmpfile TMPC  .c
1393
tmpfile TMPE  $EXESUF
1394
tmpfile TMPH  .h
1395
tmpfile TMPO  .o
1396
tmpfile TMPS  .S
1397
tmpfile TMPSH .sh
1398

    
1399
unset -f mktemp
1400

    
1401
# make sure we can execute files in $TMPDIR
1402
cat > $TMPSH 2>> $logfile <<EOF
1403
#! /bin/sh
1404
EOF
1405
chmod +x $TMPSH >> $logfile 2>&1
1406
if ! $TMPSH >> $logfile 2>&1; then
1407
    cat <<EOF
1408
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1409
variable to another directory and make sure that it is not mounted noexec.
1410
EOF
1411
    die "Sanity test failed."
1412
fi
1413

    
1414
if   $cc --version 2>/dev/null | grep -qi gcc; then
1415
    cc_type=gcc
1416
elif $cc --version 2>/dev/null | grep -q Intel; then
1417
    cc_type=icc
1418
elif $cc -v 2>&1 | grep -q xlc; then
1419
    cc_type=xlc
1420
elif $cc -V 2>/dev/null | grep -q Compaq; then
1421
    cc_type=ccc
1422
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1423
    debuglevel=3
1424
    add_ldflags -Wl,-z,now # calls to libots crash without this
1425
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1426
    test -d "$sysroot" || die "No valid sysroot specified."
1427
    cc_type=armcc
1428
    armcc_conf="$PWD/armcc.conf"
1429
    $cc --arm_linux_configure                 \
1430
        --arm_linux_config_file="$armcc_conf" \
1431
        --configure_sysroot="$sysroot"        \
1432
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1433
        die "Error creating armcc configuration file."
1434
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1435
    as_default="${cross_prefix}gcc"
1436
fi
1437

    
1438
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1439

    
1440
set_default as
1441

    
1442
if test -n "$sysroot"; then
1443
    case "$cc_type" in
1444
        gcc)
1445
            add_cflags  --sysroot="$sysroot"
1446
            add_ldflags --sysroot="$sysroot"
1447
        ;;
1448
    esac
1449
fi
1450

    
1451
# compiler sanity check
1452
check_exec <<EOF
1453
int main(void){ return 0; }
1454
EOF
1455
if test "$?" != 0; then
1456
    echo "$cc is unable to create an executable file."
1457
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1458
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1459
        echo "Only do this if you know what cross compiling means."
1460
    fi
1461
    die "C compiler test failed."
1462
fi
1463

    
1464
check_cflags -std=c99
1465
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1466
#include <stdlib.h>
1467
EOF
1468
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1469
#include <stdlib.h>
1470
EOF
1471

    
1472
case "$arch" in
1473
    alpha)
1474
        arch="alpha"
1475
        enable fast_64bit
1476
        check_cflags -mieee
1477
    ;;
1478
    arm|armv[4567]*l)
1479
        arch="arm"
1480
    ;;
1481
    avr32)
1482
    ;;
1483
    bfin)
1484
        arch="bfin"
1485
    ;;
1486
    ia64)
1487
        arch="ia64"
1488
        enable fast_64bit
1489
    ;;
1490
    m68k)
1491
        arch="m68k"
1492
    ;;
1493
    mips|mipsel|IP*)
1494
        arch="mips"
1495
    ;;
1496
    mips64)
1497
        arch="mips"
1498
        enable fast_64bit
1499
    ;;
1500
    parisc|hppa)
1501
        arch="parisc"
1502
    ;;
1503
    parisc64|hppa64)
1504
        arch="parisc"
1505
        enable fast_64bit
1506
    ;;
1507
    "Power Macintosh"|ppc|powerpc)
1508
        arch="ppc"
1509
        enable fast_unaligned
1510
    ;;
1511
    ppc64)
1512
        arch="ppc"
1513
        enable fast_64bit
1514
        enable fast_unaligned
1515
    ;;
1516
    s390|s390x)
1517
        arch="s390"
1518
    ;;
1519
    sh4|sh)
1520
        arch="sh4"
1521
    ;;
1522
    sparc)
1523
        arch="sparc"
1524
    ;;
1525
    sun4u|sparc64)
1526
        arch="sparc"
1527
        subarch="sparc64"
1528
        enable fast_64bit
1529
    ;;
1530
    i386|i486|i586|i686|i86pc|BePC)
1531
        arch="x86"
1532
        subarch="x86_32"
1533
        enable fast_unaligned
1534
    ;;
1535
    x86_64|amd64)
1536
        arch="x86"
1537
        subarch="x86_32"
1538
        enable cmov
1539
        enable fast_cmov
1540
        enable fast_unaligned
1541
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1542
        int test[sizeof(char*) - 7];
1543
EOF
1544
    ;;
1545
    *)
1546
        arch="unknown"
1547
    ;;
1548
esac
1549

    
1550
enable $arch $subarch
1551

    
1552
# OS specific
1553
case $target_os in
1554
    beos|haiku|zeta)
1555
        prefix_default="$HOME/config"
1556
        # helps building libavcodec
1557
        add_cflags -DPIC -fomit-frame-pointer
1558
        # 3 gcc releases known for BeOS, each with ugly bugs
1559
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1560
        case "$gcc_version" in
1561
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1562
            disable mmx
1563
            ;;
1564
          *20010315*) echo "BeBits gcc"
1565
            add_cflags -fno-expensive-optimizations
1566
            ;;
1567
        esac
1568
        SHFLAGS=-nostart
1569
        # enable BeOS things
1570
        enable audio_beos
1571
        # no need for libm, but the inet stuff
1572
        # Check for BONE
1573
        # XXX: actually should check for NOT net_server
1574
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1575
            network_extralibs="-lbind -lsocket"
1576
        else
1577
            enable beos_netserver
1578
            network_extralibs="-lnet"
1579
        fi ;;
1580
    sunos)
1581
        FFSERVERLDFLAGS=""
1582
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1583
        network_extralibs="-lsocket -lnsl"
1584
        add_cflags -D__EXTENSIONS__
1585
        ;;
1586
    netbsd)
1587
        oss_demuxer_extralibs="-lossaudio"
1588
        oss_muxer_extralibs="-lossaudio"
1589
        ;;
1590
    openbsd)
1591
        disable need_memalign
1592
        LIBOBJFLAGS='$(PIC)'
1593
        SHFLAGS='-shared'
1594
        oss_demuxer_extralibs="-lossaudio"
1595
        oss_muxer_extralibs="-lossaudio"
1596
        ;;
1597
    freebsd)
1598
        disable need_memalign
1599
        ;;
1600
    bsd/os)
1601
        osextralibs="-lpoll -lgnugetopt"
1602
        strip="strip -d"
1603
        ;;
1604
    darwin)
1605
        disable need_memalign
1606
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1607
        strip="strip -x"
1608
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1609
        SLIBSUF=".dylib"
1610
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1611
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1612
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1613
        objformat="macho"
1614
        enabled x86_64 && objformat="macho64"
1615
        ;;
1616
    mingw32*)
1617
        target_os=mingw32
1618
        LIBTARGET=i386
1619
        if enabled x86_64; then
1620
            disable need_memalign
1621
            LIBTARGET=x64
1622
        fi
1623
        shlibdir_default="$bindir_default"
1624
        disable ffserver
1625
        SLIBPREF=""
1626
        SLIBSUF=".dll"
1627
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1628
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1629
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1630
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1631
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1632
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1633
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1634
        objformat="win32"
1635
        enable dos_paths
1636
        if ! enabled x86_64; then
1637
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1638
                die "ERROR: MinGW runtime version must be >= 3.15."
1639
            enabled_any avisynth vfwcap_demuxer &&
1640
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1641
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1642
            fi
1643
        ;;
1644
    cygwin*)
1645
        target_os=cygwin
1646
        shlibdir_default="$bindir_default"
1647
        SLIBPREF="cyg"
1648
        SLIBSUF=".dll"
1649
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1650
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1651
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1652
        objformat="win32"
1653
        enable dos_paths
1654
        ;;
1655
    *-dos|freedos|opendos)
1656
        disable ffplay ffserver
1657
        disable $INDEV_LIST $OUTDEV_LIST
1658
        network_extralibs="-lsocket"
1659
        objformat="coff"
1660
        enable dos_paths
1661
        ;;
1662
    linux)
1663
        enable dv1394
1664
        ;;
1665
    irix*)
1666
        target_os=irix
1667
        ranlib="echo ignoring ranlib"
1668
        ;;
1669
    os/2*)
1670
        strip="lxlite"
1671
        ln_s="cp -f"
1672
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1673
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1674
        FFSERVERLDFLAGS=""
1675
        LIBSUF="_s.a"
1676
        SLIBPREF=""
1677
        SLIBSUF=".dll"
1678
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1679
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1680
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1681
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1682
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1683
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1684
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1685
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1686
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1687
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1688
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1689
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1690
        enable dos_paths
1691
        ;;
1692

    
1693
    *)
1694
        die "Unknown OS '$target_os'."
1695
        ;;
1696
esac
1697

    
1698
set_default $PATHS_LIST
1699

    
1700
add_extralibs $osextralibs
1701

    
1702
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1703
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1704

    
1705
# we need to build at least one lib type
1706
if ! enabled_any static shared; then
1707
    cat <<EOF
1708
At least one library type must be built.
1709
Specify --enable-static to build the static libraries or --enable-shared to
1710
build the shared libraries as well. To only build the shared libraries specify
1711
--disable-static in addition to --enable-shared.
1712
EOF
1713
    exit 1;
1714
fi
1715

    
1716
disabled static && LIBNAME=""
1717

    
1718
if enabled_any libfaad libfaadbin ; then
1719
    if check_header faad.h; then
1720
        check_cc <<EOF
1721
#include <faad.h>
1722
#ifndef FAAD2_VERSION
1723
ok faad1
1724
#endif
1725
int main(void) { return 0; }
1726
EOF
1727
        test $? = 0 && enable libfaad2
1728
    else
1729
        die "FAAD test failed."
1730
    fi
1731
fi
1732

    
1733

    
1734
if ! enabled gpl; then
1735
    die_gpl_disabled(){
1736
        name=$1
1737
        shift
1738
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1739
    }
1740
    die_gpl_disabled "The Postprocessing code" postproc
1741
    die_gpl_disabled "libx264"                 libx264
1742
    die_gpl_disabled "libxvidcore"             libxvid
1743
    die_gpl_disabled "FAAD2"                   libfaad2
1744
    die_gpl_disabled "The X11 grabber"         x11grab
1745
fi
1746

    
1747
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1748
    die "libamr is nonfree and --enable-nonfree is not specified."
1749
fi
1750

    
1751
check_deps $ARCH_EXT_LIST
1752

    
1753
test -z "$need_memalign" && need_memalign="$mmx"
1754

    
1755
#Darwin CC versions
1756
if test $target_os = darwin; then
1757
    if enabled xlc; then
1758
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1759
    else
1760
        add_cflags -pipe
1761
        check_cflags -force_cpusubtype_ALL
1762
        check_cflags -Wno-sign-compare
1763
        enabled shared || check_cflags -mdynamic-no-pic
1764
    fi
1765
fi
1766

    
1767
disabled optimizations || check_cflags -fomit-frame-pointer
1768

    
1769
# Add processor-specific flags
1770
if test $cpu != "generic"; then
1771
    warn_altivec(){
1772
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1773
    }
1774
    case $cpu in
1775
        601|ppc601|PowerPC601)
1776
            add_cflags -mcpu=601
1777
            warn_altivec enabled PPC601
1778
        ;;
1779
        603*|ppc603*|PowerPC603*)
1780
            add_cflags -mcpu=603
1781
            warn_altivec enabled PPC603
1782
        ;;
1783
        604*|ppc604*|PowerPC604*)
1784
            add_cflags -mcpu=604
1785
            warn_altivec enabled PPC604
1786
        ;;
1787
        G3|g3|75*|ppc75*|PowerPC75*)
1788
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1789
            warn_altivec enabled PPC75x
1790
        ;;
1791
        G4|g4|745*|ppc745*|PowerPC745*)
1792
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1793
            warn_altivec disabled PPC745x
1794
        ;;
1795
        74*|ppc74*|PowerPC74*)
1796
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1797
            warn_altivec disabled PPC74xx
1798
        ;;
1799
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1800
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1801
            warn_altivec disabled PPC970
1802
            enable ppc64
1803
        ;;
1804
        Cell|CELL|cell)
1805
            add_cflags -mcpu=cell
1806
            warn_altivec disabled Cell
1807
            enable ppc64
1808
        ;;
1809
        # targets that do NOT support conditional mov (cmov)
1810
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1811
            add_cflags -march=$cpu
1812
            disable cmov
1813
        ;;
1814
        # targets that do support conditional mov (cmov)
1815
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1816
            add_cflags -march=$cpu
1817
            enable cmov
1818
            enable fast_cmov
1819
        ;;
1820
        # targets that do support conditional mov but on which it's slow
1821
        pentium4|pentium4m|prescott|nocona)
1822
            add_cflags -march=$cpu
1823
            enable cmov
1824
            disable fast_cmov
1825
        ;;
1826
        sparc64)
1827
            add_cflags -mcpu=v9
1828
        ;;
1829
        arm11*|cortex*)
1830
            add_cflags -mcpu=$cpu
1831
            enable fast_unaligned
1832
        ;;
1833
        armv*)
1834
            add_cflags -march=$cpu
1835
        ;;
1836
        arm*)
1837
            add_cflags -mcpu=$cpu
1838
        ;;
1839
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1840
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1841
        ;;
1842
        *)
1843
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1844
        ;;
1845
    esac
1846
fi
1847

    
1848
check_cc <<EOF || die "Symbol mangling check failed."
1849
int ff_extern;
1850
EOF
1851
sym=$($nm -P -g $TMPO | grep ff_extern)
1852
extern_prefix=${sym%%ff_extern*}
1853

    
1854
check_cc <<EOF && enable inline_asm
1855
void foo(void) { __asm__ volatile ("" ::); }
1856
EOF
1857

    
1858
if enabled x86; then
1859
    # check whether EBP is available on x86
1860
    # As 'i' is stored on the stack, this program will crash
1861
    # if the base pointer is used to access it because the
1862
    # base pointer is cleared in the inline assembly code.
1863
    check_exec_crash <<EOF && enable ebp_available
1864
    volatile int i=0;
1865
    __asm__ volatile (
1866
        "xorl %%ebp, %%ebp"
1867
    ::: "%ebp");
1868
    return i;
1869
EOF
1870

    
1871
    # check wether EBX is available on x86
1872
    check_asm ebx_available '"":::"%ebx"'
1873

    
1874
    # check whether more than 10 operands are supported
1875
    check_cc <<EOF && enable ten_operands
1876
int main(void) {
1877
    int x=0;
1878
    __asm__ volatile(
1879
        ""
1880
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1881
    );
1882
    return 0;
1883
}
1884
EOF
1885

    
1886
    # check whether binutils is new enough to compile SSSE3/MMX2
1887
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1888
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1889

    
1890
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1891

    
1892
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1893
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1894
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1895
    case "$objformat" in
1896
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1897
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1898
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1899
    esac
1900
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1901
fi
1902

    
1903
# check for assembler specific support
1904

    
1905
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1906
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1907

    
1908
# check for SIMD availability
1909

    
1910
# AltiVec flags: The FSF version of GCC differs from the Apple version
1911
if enabled altivec; then
1912
    check_cflags -maltivec -mabi=altivec &&
1913
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1914
        check_cflags -faltivec
1915

    
1916
    # check if our compiler supports Motorola AltiVec C API
1917
    check_cc <<EOF || disable altivec
1918
$inc_altivec_h
1919
int main(void) {
1920
    vector signed int v1, v2, v3;
1921
    v1 = vec_add(v2,v3);
1922
    return 0;
1923
}
1924
EOF
1925

    
1926
    # check if our compiler supports braces for vector declarations
1927
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1928
$inc_altivec_h
1929
int main (void) { (vector int) {1}; return 0; }
1930
EOF
1931
fi
1932

    
1933
# We have to check if pld is a nop and disable it.
1934
enabled arm     && check_asm pld     '"pld [r0]"'
1935
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1936
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1937
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1938
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1939
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1940
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1941
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1942
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1943

    
1944
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1945

    
1946
# ---
1947
# big/little-endian test
1948
check_cc <<EOF || die "endian test failed"
1949
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1950
EOF
1951
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1952

    
1953
# ---
1954
# check availability of some header files
1955

    
1956
if check_func dlopen; then
1957
    ldl=
1958
elif check_func dlopen -ldl; then
1959
    ldl=-ldl
1960
fi
1961

    
1962
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1963
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1964

    
1965
check_func  fork
1966
check_func  gethrtime
1967
check_func  getrusage
1968
check_func  inet_aton $network_extralibs
1969
check_func  memalign
1970
check_func  mkstemp
1971
check_func  posix_memalign
1972
check_func_headers io.h setmode
1973
check_func_headers windows.h GetProcessTimes
1974
check_func_headers windows.h VirtualAlloc
1975

    
1976
check_header conio.h
1977
check_header dlfcn.h
1978
check_header malloc.h
1979
check_header poll.h
1980
check_header sys/mman.h
1981
check_header sys/resource.h
1982
check_header sys/select.h
1983
check_header termios.h
1984
check_header vdpau/vdpau.h
1985
check_header vdpau/vdpau_x11.h
1986
check_header X11/extensions/XvMClib.h
1987

    
1988
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1989
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1990
fi
1991

    
1992
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1993
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1994

    
1995
# check for some common methods of building with pthread support
1996
# do this before the optional library checks as some of them require pthreads
1997
if enabled pthreads; then
1998
    if check_func pthread_create; then
1999
        :
2000
    elif check_func pthread_create -pthread; then
2001
        add_cflags -pthread
2002
        add_extralibs -pthread
2003
    elif check_func pthread_create -pthreads; then
2004
        add_cflags -pthreads
2005
        add_extralibs -pthreads
2006
    elif check_func pthread_create -lpthreadGC2; then
2007
        add_extralibs -lpthreadGC2
2008
    elif ! check_lib pthread.h pthread_create -lpthread; then
2009
        die "ERROR: can't find pthreads library"
2010
    fi
2011
fi
2012

    
2013
for thread in $THREADS_LIST; do
2014
    if enabled $thread; then
2015
        test -n "$thread_type" &&
2016
            die "ERROR: Only one thread type must be selected." ||
2017
            thread_type="$thread"
2018
    fi
2019
done
2020

    
2021
check_lib math.h sin -lm
2022
check_lib va/va.h vaInitialize -lva
2023

    
2024
# test for C99 functions in math.h
2025
for func in llrint lrint lrintf round roundf truncf; do
2026
    check_exec <<EOF && enable $func || disable $func
2027
#include <math.h>
2028
int main(void) { return ($func(3.999f) > 0)?0:1; }
2029
EOF
2030
done
2031

    
2032
# these are off by default, so fail if requested and not available
2033
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2034
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2035
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2036
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2037
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2038
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2039
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2040
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2041
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2042
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2043
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2044
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2045
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2046
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2047
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2048
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2049
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2050
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2051
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2052
                        die "ERROR: libx264 version must be >= 0.65."; }
2053
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2054
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2055

    
2056
# libdc1394 check
2057
if enabled libdc1394; then
2058
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2059
        enable libdc1394_2; } ||
2060
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2061
        enable libdc1394_1; } ||
2062
    die "ERROR: No version of libdc1394 found "
2063
fi
2064

    
2065

    
2066
_restrict=
2067
for restrict_keyword in restrict __restrict__ __restrict; do
2068
    check_cc <<EOF && _restrict=$restrict_keyword && break
2069
void foo(char * $restrict_keyword p);
2070
EOF
2071
done
2072

    
2073
##########################################
2074
# SDL check
2075

    
2076
disable sdl_too_old
2077
disable sdl
2078
SDL_CONFIG="${cross_prefix}sdl-config"
2079
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2080
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2081
    temp_cflags $sdl_cflags
2082
    temp_extralibs $("${SDL_CONFIG}" --libs)
2083
    if check_lib2 SDL.h SDL_Init; then
2084
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2085
        if test "$_sdlversion" -lt 121 ; then
2086
            enable sdl_too_old
2087
        else
2088
            enable sdl
2089
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2090
#include <SDL.h>
2091
int main(int argc, char **argv){
2092
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2093
    int w = vi->current_w;
2094
    return 0;
2095
}
2096
EOF
2097
        fi
2098
    fi
2099
    restore_flags
2100
fi
2101

    
2102
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2103

    
2104
##########################################
2105
# Network check
2106

    
2107
if enabled network; then
2108
    check_type "sys/types.h sys/socket.h" socklen_t
2109
    # Prefer arpa/inet.h over winsock2
2110
    if check_header arpa/inet.h ; then
2111
        check_func closesocket
2112
    elif check_header winsock2.h ; then
2113
        network_extralibs="-lws2_32"
2114
        check_type ws2tcpip.h socklen_t
2115
        check_func_headers winsock2.h closesocket
2116
    fi
2117
fi
2118

    
2119
##########################################
2120
# IPv6 check
2121

    
2122
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2123
#include <sys/types.h>
2124
#include <sys/socket.h>
2125
#include <netinet/in.h>
2126
#include <netdb.h>
2127
int main(void) {
2128
    struct sockaddr_storage saddr;
2129
    struct ipv6_mreq mreq6;
2130
    getaddrinfo(0,0,0,0);
2131
    getnameinfo(0,0,0,0,0,0,0);
2132
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2133
}
2134
EOF
2135

    
2136
check_header linux/videodev.h
2137
check_header linux/videodev2.h
2138
check_header sys/videoio.h
2139

    
2140
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2141

    
2142
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2143
{ check_header dev/bktr/ioctl_meteor.h &&
2144
  check_header dev/bktr/ioctl_bt848.h; } ||
2145
{ check_header machine/ioctl_meteor.h &&
2146
  check_header machine/ioctl_bt848.h; } ||
2147
{ check_header dev/video/meteor/ioctl_meteor.h &&
2148
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2149
check_header dev/ic/bt8xx.h
2150

    
2151
check_header sys/soundcard.h
2152
check_header soundcard.h
2153

    
2154
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2155

    
2156
check_lib2 jack/jack.h jack_client_open -ljack
2157

    
2158
# deal with the X11 frame grabber
2159
enabled x11grab                         &&
2160
check_header X11/Xlib.h                 &&
2161
check_header X11/extensions/XShm.h      &&
2162
check_func XOpenDisplay -lX11           &&
2163
check_func XShmCreateImage -lX11 -lXext
2164

    
2165
enabled debug && add_cflags -g"$debuglevel"
2166

    
2167
# add some useful compiler flags if supported
2168
check_cflags -Wdeclaration-after-statement
2169
check_cflags -Wall
2170
check_cflags -Wno-switch
2171
check_cflags -Wdisabled-optimization
2172
check_cflags -Wpointer-arith
2173
check_cflags -Wredundant-decls
2174
check_cflags -Wno-pointer-sign
2175
check_cflags -Wcast-qual
2176
check_cflags -Wwrite-strings
2177
check_cflags -Wtype-limits
2178
check_cflags -Wundef
2179
enabled extra_warnings && check_cflags -Winline
2180

    
2181
# add some linker flags
2182
check_ldflags -Wl,--warn-common
2183
check_ldflags -Wl,--as-needed
2184
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'
2185
check_ldflags -Wl,-Bsymbolic
2186

    
2187
if enabled small; then
2188
    check_cflags -Os            # not all compilers support -Os
2189
    optimizations="small"
2190
elif enabled optimizations; then
2191
    if enabled xlc; then
2192
        add_cflags  -O5
2193
        add_ldflags -O5
2194
    elif enabled ccc; then
2195
        add_cflags -fast
2196
    else
2197
        add_cflags -O3
2198
    fi
2199
fi
2200
check_cflags -fno-math-errno
2201
check_cflags -fno-signed-zeros
2202

    
2203
# add some flags for Intel C Compiler
2204
if enabled icc; then
2205
    # Just warnings, no remarks
2206
    check_cflags -w1
2207
    # -wd: Disable following warnings
2208
    # 144, 167, 556: -Wno-pointer-sign
2209
    # 10006: ignoring unknown option -fno-signed-zeros
2210
    # 10156: ignoring option '-W'; no argument required
2211
    check_cflags -wd144,167,556,10006,10156
2212
    # 11030: Warning unknown option --as-needed
2213
    # 10156: ignoring option '-export'; no argument required
2214
    check_ldflags -wd10156,11030
2215
    # Allow to compile with optimizations
2216
    check_ldflags -march=$cpu
2217
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2218
    enable ebp_available
2219
elif enabled ccc; then
2220
    # disable some annoying warnings
2221
    add_cflags -msg_disable cvtu32to64
2222
    add_cflags -msg_disable embedcomment
2223
    add_cflags -msg_disable needconstext
2224
    add_cflags -msg_disable nomainieee
2225
    add_cflags -msg_disable ptrmismatch1
2226
    add_cflags -msg_disable unreachcode
2227
fi
2228

    
2229
# PIC flags for shared library objects where they are needed
2230
if enabled shared; then
2231
    # LIBOBJFLAGS may have already been set in the OS configuration
2232
    if test -z "$LIBOBJFLAGS" ; then
2233
        case "${subarch-$arch}" in
2234
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2235
        esac
2236
    fi
2237
fi
2238

    
2239
if enabled gprof; then
2240
    add_cflags  -p
2241
    add_ldflags -p
2242
fi
2243

    
2244
# Find out if the .align argument is a power of two or not.
2245
check_asm asmalign_pot '".align 3"'
2246

    
2247
enabled_any $DECODER_LIST      && enable decoders
2248
enabled_any $ENCODER_LIST      && enable encoders
2249
enabled_any $HWACCEL_LIST      && enable hwaccels
2250
enabled_any $BSF_LIST          && enable bsfs
2251
enabled_any $DEMUXER_LIST      && enable demuxers
2252
enabled_any $MUXER_LIST        && enable muxers
2253
enabled_any $FILTER_LIST       && enable filters
2254
enabled_any $INDEV_LIST        && enable demuxers
2255
enabled_any $OUTDEV_LIST       && enable muxers
2256
enabled_any $PROTOCOL_LIST     && enable protocols
2257

    
2258
enabled_any $THREADS_LIST      && enable threads
2259

    
2260
check_deps $CONFIG_LIST       \
2261
           $CONFIG_EXTRA      \
2262
           $HAVE_LIST         \
2263
           $DECODER_LIST      \
2264
           $ENCODER_LIST      \
2265
           $HWACCEL_LIST      \
2266
           $PARSER_LIST       \
2267
           $BSF_LIST          \
2268
           $DEMUXER_LIST      \
2269
           $MUXER_LIST        \
2270
           $FILTER_LIST       \
2271
           $INDEV_LIST        \
2272
           $OUTDEV_LIST       \
2273
           $PROTOCOL_LIST     \
2274

    
2275
echo "install prefix            $prefix"
2276
echo "source path               $source_path"
2277
echo "C compiler                $cc"
2278
echo ".align is power-of-two    $asmalign_pot"
2279
echo "ARCH                      $arch ($cpu)"
2280
if test "$build_suffix" != ""; then
2281
    echo "build suffix              $build_suffix"
2282
fi
2283
if test "$extra_version" != ""; then
2284
    echo "version string suffix     $extra_version"
2285
fi
2286
echo "big-endian                ${bigendian-no}"
2287
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2288
if enabled x86; then
2289
    echo "yasm                      ${yasm-no}"
2290
    echo "MMX enabled               ${mmx-no}"
2291
    echo "MMX2 enabled              ${mmx2-no}"
2292
    echo "3DNow! enabled            ${amd3dnow-no}"
2293
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2294
    echo "SSE enabled               ${sse-no}"
2295
    echo "SSSE3 enabled             ${ssse3-no}"
2296
    echo "CMOV enabled              ${cmov-no}"
2297
    echo "CMOV is fast              ${fast_cmov-no}"
2298
    echo "EBX available             ${ebx_available-no}"
2299
    echo "EBP available             ${ebp_available-no}"
2300
    echo "10 operands supported     ${ten_operands-no}"
2301
fi
2302
if enabled arm; then
2303
    echo "ARMv5TE enabled           ${armv5te-no}"
2304
    echo "ARMv6 enabled             ${armv6-no}"
2305
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2306
    echo "ARM VFP enabled           ${armvfp-no}"
2307
    echo "IWMMXT enabled            ${iwmmxt-no}"
2308
    echo "NEON enabled              ${neon-no}"
2309
fi
2310
if enabled mips; then
2311
    echo "MMI enabled               ${mmi-no}"
2312
fi
2313
if enabled ppc; then
2314
    echo "AltiVec enabled           ${altivec-no}"
2315
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2316
    echo "dcbzl available           ${dcbzl-no}"
2317
    echo "performance report        ${powerpc_perf-no}"
2318
fi
2319
if enabled sparc; then
2320
    echo "VIS enabled               ${vis-no}"
2321
fi
2322
echo "gprof enabled             ${gprof-no}"
2323
echo "debug symbols             ${debug-no}"
2324
echo "strip symbols             ${stripping-no}"
2325
echo "optimizations             ${optimizations-no}"
2326
echo "static                    ${static-no}"
2327
echo "shared                    ${shared-no}"
2328
echo "postprocessing support    ${postproc-no}"
2329
echo "new filter support        ${avfilter-no}"
2330
echo "filters using lavformat   ${avfilter_lavf-no}"
2331
echo "network support           ${network-no}"
2332
if enabled network; then
2333
    echo "IPv6 support              ${ipv6-no}"
2334
fi
2335
echo "threading support         ${thread_type-no}"
2336
echo "SDL support               ${sdl-no}"
2337
if enabled sdl_too_old; then
2338
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2339
fi
2340
echo "Sun medialib support      ${mlib-no}"
2341
echo "AVISynth enabled          ${avisynth-no}"
2342
echo "libamr-nb support         ${libamr_nb-no}"
2343
echo "libamr-wb support         ${libamr_wb-no}"
2344
echo "libdc1394 support         ${libdc1394-no}"
2345
echo "libdirac enabled          ${libdirac-no}"
2346
echo "libfaac enabled           ${libfaac-no}"
2347
echo "libfaad enabled           ${libfaad-no}"
2348
echo "libfaad dlopened          ${libfaadbin-no}"
2349
echo "libgsm enabled            ${libgsm-no}"
2350
echo "libmp3lame enabled        ${libmp3lame-no}"
2351
echo "libnut enabled            ${libnut-no}"
2352
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2353
echo "libschroedinger enabled   ${libschroedinger-no}"
2354
echo "libspeex enabled          ${libspeex-no}"
2355
echo "libtheora enabled         ${libtheora-no}"
2356
echo "libvorbis enabled         ${libvorbis-no}"
2357
echo "libx264 enabled           ${libx264-no}"
2358
echo "libxvid enabled           ${libxvid-no}"
2359
echo "zlib enabled              ${zlib-no}"
2360
echo "bzlib enabled             ${bzlib-no}"
2361
echo
2362

    
2363
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2364
    echo "Enabled ${type}s:"
2365
    eval list=\$$(toupper $type)_LIST
2366
    for part in $list; do
2367
        enabled $part && echo ${part%_*}
2368
    done | sort | pr -3 -t
2369
    echo
2370
done
2371

    
2372
license="LGPL"
2373
if enabled nonfree; then
2374
    license="unredistributable"
2375
elif enabled gpl; then
2376
    license="GPL"
2377
fi
2378

    
2379
echo "License: $license"
2380

    
2381
echo "Creating config.mak and config.h..."
2382

    
2383
echo "# Automatically generated by configure - do not modify!" > config.mak
2384
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2385
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2386
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2387
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2388
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2389

    
2390
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2391
echo "prefix=$prefix" >> config.mak
2392
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2393
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2394
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2395
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2396
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2397
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2398
echo "SRC_PATH=\"$source_path\"" >> config.mak
2399
echo "SRC_PATH_BARE=$source_path" >> config.mak
2400
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2401
echo "CC=$cc" >> config.mak
2402
echo "AS=$as" >> config.mak
2403
echo "YASM=$yasmexe" >> config.mak
2404
echo "AR=$ar" >> config.mak
2405
echo "RANLIB=$ranlib" >> config.mak
2406
echo "LN_S=$ln_s" >> config.mak
2407
enabled stripping &&
2408
    echo "STRIP=$strip" >> config.mak ||
2409
    echo "STRIP=echo ignoring strip" >> config.mak
2410

    
2411
echo "OPTFLAGS=$CFLAGS" >> config.mak
2412
echo "LDFLAGS=$LDFLAGS" >> config.mak
2413
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2414
echo "SHFLAGS=$SHFLAGS" >> config.mak
2415
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2416
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2417
echo "BUILD_STATIC=$static" >> config.mak
2418
echo "BUILDSUF=$build_suffix" >> config.mak
2419
echo "FULLNAME=$FULLNAME" >> config.mak
2420
echo "LIBPREF=$LIBPREF" >> config.mak
2421
echo "LIBSUF=$LIBSUF" >> config.mak
2422
echo "LIBNAME=$LIBNAME" >> config.mak
2423
echo "SLIBPREF=$SLIBPREF" >> config.mak
2424
echo "SLIBSUF=$SLIBSUF" >> config.mak
2425
echo "EXESUF=$EXESUF" >> config.mak
2426
echo "EXTRA_VERSION=$extra_version" >> config.mak
2427
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2428
echo "HOSTCC=$host_cc" >> config.mak
2429
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2430
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2431
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2432
echo "HOSTLIBS=$host_libs" >> config.mak
2433
echo "TARGET_EXEC=$target_exec" >> config.mak
2434
echo "TARGET_PATH=$target_path" >> config.mak
2435

    
2436
if enabled bigendian; then
2437
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2438
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2439
fi
2440

    
2441
if enabled sdl; then
2442
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2443
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2444
fi
2445
if enabled texi2html; then
2446
    echo "BUILD_DOC=yes" >> config.mak
2447
fi
2448

    
2449
get_version(){
2450
    name=$1
2451
    file=$source_path/$2
2452
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2453
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2454
    lcname=$(tolower $name)
2455
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2456
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2457
}
2458

    
2459
get_version LIBSWSCALE  libswscale/swscale.h
2460
get_version LIBPOSTPROC libpostproc/postprocess.h
2461
get_version LIBAVCODEC  libavcodec/avcodec.h
2462
get_version LIBAVDEVICE libavdevice/avdevice.h
2463
get_version LIBAVFORMAT libavformat/avformat.h
2464
get_version LIBAVUTIL   libavutil/avutil.h
2465
get_version LIBAVFILTER libavfilter/avfilter.h
2466

    
2467
if enabled shared; then
2468
    echo "BUILD_SHARED=yes" >> config.mak
2469
    echo "PIC=-fPIC -DPIC" >> config.mak
2470
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2471
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2472
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2473
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2474
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2475
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2476
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2477
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2478
fi
2479
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2480
echo "EXTRALIBS=$extralibs" >> config.mak
2481

    
2482
echo "ARCH=$arch" >> config.mak
2483

    
2484
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2485
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2486
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2487
                                      $CONFIG_EXTRA      \
2488
                                      $DECODER_LIST      \
2489
                                      $ENCODER_LIST      \
2490
                                      $HWACCEL_LIST      \
2491
                                      $PARSER_LIST       \
2492
                                      $BSF_LIST          \
2493
                                      $DEMUXER_LIST      \
2494
                                      $MUXER_LIST        \
2495
                                      $FILTER_LIST       \
2496
                                      $PROTOCOL_LIST     \
2497
                                      $INDEV_LIST        \
2498
                                      $OUTDEV_LIST       \
2499

    
2500
echo "#define restrict $_restrict" >> $TMPH
2501

    
2502
if enabled small; then
2503
    echo "#define av_always_inline"  >> $TMPH
2504
fi
2505

    
2506

    
2507
# Apparently it's not possible to portably echo a backslash.
2508
enabled asmalign_pot &&
2509
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2510
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2511

    
2512
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2513

    
2514
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2515

    
2516
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2517
cmp -s $TMPH config.h &&
2518
    echo "config.h is unchanged" ||
2519
    mv -f $TMPH config.h
2520

    
2521
# build tree in object directory if source path is different from current one
2522
if enabled source_path_used; then
2523
    DIRS="\
2524
        doc               \
2525
        libavcodec        \
2526
        libavcodec/alpha  \
2527
        libavcodec/arm    \
2528
        libavcodec/bfin   \
2529
        libavcodec/mlib   \
2530
        libavcodec/ppc    \
2531
        libavcodec/sh4    \
2532
        libavcodec/sparc  \
2533
        libavcodec/x86    \
2534
        libavdevice       \
2535
        libavfilter       \
2536
        libavformat       \
2537
        libavutil         \
2538
        libpostproc       \
2539
        libswscale        \
2540
        libswscale/bfin   \
2541
        libswscale/mlib   \
2542
        libswscale/ppc    \
2543
        libswscale/sparc  \
2544
        libswscale/x86    \
2545
        tests             \
2546
        tools             \
2547
        "
2548
    FILES="\
2549
        Makefile             \
2550
        common.mak           \
2551
        subdir.mak           \
2552
        doc/texi2pod.pl      \
2553
        libavcodec/Makefile  \
2554
        libavdevice/Makefile \
2555
        libavfilter/Makefile \
2556
        libavformat/Makefile \
2557
        libavutil/Makefile   \
2558
        libpostproc/Makefile \
2559
        libswscale/Makefile  \
2560
        "
2561
    for dir in $DIRS ; do
2562
        mkdir -p $dir
2563
    done
2564
    for f in $FILES ; do
2565
        $ln_s "$source_path/$f" $f
2566
    done
2567
fi
2568

    
2569

    
2570
# build pkg-config files
2571

    
2572
pkgconfig_generate(){
2573
name=$1
2574
shortname=${name#lib}${build_suffix}
2575
comment=$2
2576
version=$3
2577
libs=$4
2578
requires=$5
2579
cat <<EOF > $name/$name.pc
2580
prefix=$prefix
2581
exec_prefix=\${prefix}
2582
libdir=$libdir
2583
includedir=$incdir
2584

    
2585
Name: $name
2586
Description: $comment
2587
Version: $version
2588
Requires: $(disabled shared && echo $requires)
2589
Requires.private: $(enabled shared && echo $requires)
2590
Conflicts:
2591
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2592
Libs.private: $(enabled shared && echo $libs)
2593
Cflags: -I\${includedir}
2594
EOF
2595
cat <<EOF > $name/$name-uninstalled.pc
2596
prefix=
2597
exec_prefix=
2598
libdir=\${pcfiledir}
2599
includedir=${source_path}
2600

    
2601
Name: $name
2602
Description: $comment
2603
Version: $version
2604
Requires: $requires
2605
Conflicts:
2606
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2607
Cflags: -I\${includedir}
2608
EOF
2609
}
2610

    
2611
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2612
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2613
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2614
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2615
enabled avfilter &&
2616
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2617
enabled postproc &&
2618
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2619
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"