Statistics
| Branch: | Revision:

ffmpeg / configure @ e4ddc8ed

History | View | Annotate | Download (75.9 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
    ldbrx
894
    libdc1394_1
895
    libdc1394_2
896
    llrint
897
    lrint
898
    lrintf
899
    lzo1x_999_compress
900
    machine_ioctl_bt848_h
901
    machine_ioctl_meteor_h
902
    malloc_h
903
    memalign
904
    mkstemp
905
    pld
906
    posix_memalign
907
    ppc64
908
    round
909
    roundf
910
    sdl
911
    sdl_video_size
912
    setmode
913
    socklen_t
914
    soundcard_h
915
    poll_h
916
    sys_mman_h
917
    sys_resource_h
918
    sys_select_h
919
    sys_soundcard_h
920
    sys_videoio_h
921
    ten_operands
922
    termios_h
923
    threads
924
    truncf
925
    VirtualAlloc
926
    winsock2_h
927
    xform_asm
928
    yasm
929
"
930

    
931
# options emitted with CONFIG_ prefix but not available on command line
932
CONFIG_EXTRA="
933
"
934

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

    
948
PATHS_LIST='
949
    bindir
950
    datadir
951
    incdir
952
    libdir
953
    mandir
954
    prefix
955
    shlibdir
956
'
957

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

    
982
# code dependency declarations
983

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

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

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

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

    
1141
# protocols
1142
gopher_protocol_deps="network"
1143
http_protocol_deps="network"
1144
rtp_protocol_deps="udp_protocol"
1145
tcp_protocol_deps="network"
1146
udp_protocol_deps="network"
1147

    
1148
# filters
1149
movie_filter_deps="avfilter_lavf"
1150

    
1151
# programs
1152
ffplay_deps="sdl"
1153
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1154
ffserver_extralibs='$ldl'
1155

    
1156

    
1157
# default parameters
1158

    
1159
logfile="config.err"
1160

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

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

    
1181
# machine
1182
arch=$(uname -m)
1183
cpu="generic"
1184

    
1185
# OS
1186
target_os=$(tolower $(uname -s))
1187
host_os=$target_os
1188

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

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

    
1219
host_cflags='-O3 -g -Wall'
1220
host_libs='-lm'
1221

    
1222
target_path='.'
1223

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

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

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

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

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

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

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

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

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

    
1342
disabled logging && logfile=/dev/null
1343

    
1344
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1345
set >> $logfile
1346

    
1347
test -n "$cross_prefix" && enable cross_compile
1348

    
1349
ar="${cross_prefix}${ar}"
1350
cc_default="${cross_prefix}${cc_default}"
1351
nm_default="${cross_prefix}${nm_default}"
1352
ranlib="${cross_prefix}${ranlib}"
1353
strip="${cross_prefix}${strip}"
1354

    
1355
sysinclude_default="${sysroot}/usr/include"
1356

    
1357
set_default cc nm sysinclude
1358
as_default=$cc
1359
enabled cross_compile || host_cc_default=$cc
1360
set_default host_cc
1361

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

    
1368
EXESUF=$(exesuf $target_os)
1369
HOSTEXESUF=$(exesuf $host_os)
1370

    
1371
# set temporary file name
1372
: ${TMPDIR:=$TEMPDIR}
1373
: ${TMPDIR:=$TMP}
1374
: ${TMPDIR:=/tmp}
1375

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

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

    
1392
trap 'rm -f -- $TMPFILES' EXIT
1393
trap exit HUP INT TERM
1394

    
1395
tmpfile TMPC  .c
1396
tmpfile TMPE  $EXESUF
1397
tmpfile TMPH  .h
1398
tmpfile TMPO  .o
1399
tmpfile TMPS  .S
1400
tmpfile TMPSH .sh
1401

    
1402
unset -f mktemp
1403

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

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

    
1441
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1442

    
1443
set_default as
1444

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

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

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

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

    
1553
enable $arch $subarch
1554

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

    
1698
    *)
1699
        die "Unknown OS '$target_os'."
1700
        ;;
1701
esac
1702

    
1703
set_default $PATHS_LIST
1704

    
1705
add_extralibs $osextralibs
1706

    
1707
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1708
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1709

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

    
1721
disabled static && LIBNAME=""
1722

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

    
1738

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

    
1752
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1753
    die "libamr is nonfree and --enable-nonfree is not specified."
1754
fi
1755

    
1756
check_deps $ARCH_EXT_LIST
1757

    
1758
test -z "$need_memalign" && need_memalign="$mmx"
1759

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

    
1772
disabled optimizations || check_cflags -fomit-frame-pointer
1773

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

    
1856
check_cc <<EOF || die "Symbol mangling check failed."
1857
int ff_extern;
1858
EOF
1859
sym=$($nm -P -g $TMPO | grep ff_extern)
1860
extern_prefix=${sym%%ff_extern*}
1861

    
1862
check_cc <<EOF && enable inline_asm
1863
void foo(void) { __asm__ volatile ("" ::); }
1864
EOF
1865

    
1866
if enabled x86; then
1867
    # check whether EBP is available on x86
1868
    # As 'i' is stored on the stack, this program will crash
1869
    # if the base pointer is used to access it because the
1870
    # base pointer is cleared in the inline assembly code.
1871
    check_exec_crash <<EOF && enable ebp_available
1872
    volatile int i=0;
1873
    __asm__ volatile (
1874
        "xorl %%ebp, %%ebp"
1875
    ::: "%ebp");
1876
    return i;
1877
EOF
1878

    
1879
    # check wether EBX is available on x86
1880
    check_asm ebx_available '"":::"%ebx"'
1881

    
1882
    # check whether more than 10 operands are supported
1883
    check_cc <<EOF && enable ten_operands
1884
int main(void) {
1885
    int x=0;
1886
    __asm__ volatile(
1887
        ""
1888
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1889
    );
1890
    return 0;
1891
}
1892
EOF
1893

    
1894
    # check whether binutils is new enough to compile SSSE3/MMX2
1895
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1896
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1897

    
1898
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1899

    
1900
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1901
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1902
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1903
    case "$objformat" in
1904
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1905
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1906
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1907
    esac
1908
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1909
fi
1910

    
1911
# check for assembler specific support
1912

    
1913
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1914
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1915
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1916

    
1917
# check for SIMD availability
1918

    
1919
# AltiVec flags: The FSF version of GCC differs from the Apple version
1920
if enabled altivec; then
1921
    check_cflags -maltivec -mabi=altivec &&
1922
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1923
        check_cflags -faltivec
1924

    
1925
    # check if our compiler supports Motorola AltiVec C API
1926
    check_cc <<EOF || disable altivec
1927
$inc_altivec_h
1928
int main(void) {
1929
    vector signed int v1, v2, v3;
1930
    v1 = vec_add(v2,v3);
1931
    return 0;
1932
}
1933
EOF
1934

    
1935
    # check if our compiler supports braces for vector declarations
1936
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1937
$inc_altivec_h
1938
int main (void) { (vector int) {1}; return 0; }
1939
EOF
1940
fi
1941

    
1942
# We have to check if pld is a nop and disable it.
1943
enabled arm     && check_asm pld     '"pld [r0]"'
1944
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1945
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1946
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1947
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1948
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1949
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1950
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1951
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1952

    
1953
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1954

    
1955
# ---
1956
# big/little-endian test
1957
check_cc <<EOF || die "endian test failed"
1958
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1959
EOF
1960
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1961

    
1962
# ---
1963
# check availability of some header files
1964

    
1965
if check_func dlopen; then
1966
    ldl=
1967
elif check_func dlopen -ldl; then
1968
    ldl=-ldl
1969
fi
1970

    
1971
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1972
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1973

    
1974
check_func  fork
1975
check_func  gethrtime
1976
check_func  getrusage
1977
check_func  inet_aton $network_extralibs
1978
check_func  memalign
1979
check_func  mkstemp
1980
check_func  posix_memalign
1981
check_func_headers io.h setmode
1982
check_func_headers lzo/lzo1x.h lzo1x_999_compress
1983
check_func_headers windows.h GetProcessTimes
1984
check_func_headers windows.h VirtualAlloc
1985

    
1986
check_header conio.h
1987
check_header dlfcn.h
1988
check_header malloc.h
1989
check_header poll.h
1990
check_header sys/mman.h
1991
check_header sys/resource.h
1992
check_header sys/select.h
1993
check_header termios.h
1994
check_header vdpau/vdpau.h
1995
check_header vdpau/vdpau_x11.h
1996
check_header X11/extensions/XvMClib.h
1997

    
1998
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1999
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2000
fi
2001

    
2002
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2003
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2004

    
2005
# check for some common methods of building with pthread support
2006
# do this before the optional library checks as some of them require pthreads
2007
if enabled pthreads; then
2008
    if check_func pthread_create; then
2009
        :
2010
    elif check_func pthread_create -pthread; then
2011
        add_cflags -pthread
2012
        add_extralibs -pthread
2013
    elif check_func pthread_create -pthreads; then
2014
        add_cflags -pthreads
2015
        add_extralibs -pthreads
2016
    elif check_func pthread_create -lpthreadGC2; then
2017
        add_extralibs -lpthreadGC2
2018
    elif ! check_lib pthread.h pthread_create -lpthread; then
2019
        die "ERROR: can't find pthreads library"
2020
    fi
2021
fi
2022

    
2023
for thread in $THREADS_LIST; do
2024
    if enabled $thread; then
2025
        test -n "$thread_type" &&
2026
            die "ERROR: Only one thread type must be selected." ||
2027
            thread_type="$thread"
2028
    fi
2029
done
2030

    
2031
check_lib math.h sin -lm
2032
check_lib va/va.h vaInitialize -lva
2033

    
2034
# test for C99 functions in math.h
2035
for func in llrint lrint lrintf round roundf truncf; do
2036
    check_exec <<EOF && enable $func || disable $func
2037
#include <math.h>
2038
int main(void) { return ($func(3.999f) > 0)?0:1; }
2039
EOF
2040
done
2041

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

    
2066
# libdc1394 check
2067
if enabled libdc1394; then
2068
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2069
        enable libdc1394_2; } ||
2070
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2071
        enable libdc1394_1; } ||
2072
    die "ERROR: No version of libdc1394 found "
2073
fi
2074

    
2075

    
2076
_restrict=
2077
for restrict_keyword in restrict __restrict__ __restrict; do
2078
    check_cc <<EOF && _restrict=$restrict_keyword && break
2079
void foo(char * $restrict_keyword p);
2080
EOF
2081
done
2082

    
2083
##########################################
2084
# SDL check
2085

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

    
2112
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2113

    
2114
##########################################
2115
# Network check
2116

    
2117
if enabled network; then
2118
    check_type "sys/types.h sys/socket.h" socklen_t
2119
    # Prefer arpa/inet.h over winsock2
2120
    if check_header arpa/inet.h ; then
2121
        check_func closesocket
2122
    elif check_header winsock2.h ; then
2123
        network_extralibs="-lws2_32"
2124
        check_type ws2tcpip.h socklen_t
2125
        check_func_headers winsock2.h closesocket
2126
    fi
2127
fi
2128

    
2129
##########################################
2130
# IPv6 check
2131

    
2132
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2133
#include <sys/types.h>
2134
#include <sys/socket.h>
2135
#include <netinet/in.h>
2136
#include <netdb.h>
2137
int main(void) {
2138
    struct sockaddr_storage saddr;
2139
    struct ipv6_mreq mreq6;
2140
    getaddrinfo(0,0,0,0);
2141
    getnameinfo(0,0,0,0,0,0,0);
2142
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2143
}
2144
EOF
2145

    
2146
check_header linux/videodev.h
2147
check_header linux/videodev2.h
2148
check_header sys/videoio.h
2149

    
2150
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2151

    
2152
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2153
{ check_header dev/bktr/ioctl_meteor.h &&
2154
  check_header dev/bktr/ioctl_bt848.h; } ||
2155
{ check_header machine/ioctl_meteor.h &&
2156
  check_header machine/ioctl_bt848.h; } ||
2157
{ check_header dev/video/meteor/ioctl_meteor.h &&
2158
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2159
check_header dev/ic/bt8xx.h
2160

    
2161
check_header sys/soundcard.h
2162
check_header soundcard.h
2163

    
2164
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2165

    
2166
check_lib2 jack/jack.h jack_client_open -ljack
2167

    
2168
# deal with the X11 frame grabber
2169
enabled x11grab                         &&
2170
check_header X11/Xlib.h                 &&
2171
check_header X11/extensions/XShm.h      &&
2172
check_func XOpenDisplay -lX11           &&
2173
check_func XShmCreateImage -lX11 -lXext
2174

    
2175
enabled debug && add_cflags -g"$debuglevel"
2176

    
2177
# add some useful compiler flags if supported
2178
check_cflags -Wdeclaration-after-statement
2179
check_cflags -Wall
2180
check_cflags -Wno-switch
2181
check_cflags -Wdisabled-optimization
2182
check_cflags -Wpointer-arith
2183
check_cflags -Wredundant-decls
2184
check_cflags -Wno-pointer-sign
2185
check_cflags -Wcast-qual
2186
check_cflags -Wwrite-strings
2187
check_cflags -Wtype-limits
2188
check_cflags -Wundef
2189
enabled extra_warnings && check_cflags -Winline
2190

    
2191
# add some linker flags
2192
check_ldflags -Wl,--warn-common
2193
check_ldflags -Wl,--as-needed
2194
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'
2195
check_ldflags -Wl,-Bsymbolic
2196

    
2197
if enabled small; then
2198
    check_cflags -Os            # not all compilers support -Os
2199
    optimizations="small"
2200
elif enabled optimizations; then
2201
    if enabled xlc; then
2202
        add_cflags  -O5
2203
        add_ldflags -O5
2204
    elif enabled ccc; then
2205
        add_cflags -fast
2206
    else
2207
        add_cflags -O3
2208
    fi
2209
fi
2210
check_cflags -fno-math-errno
2211
check_cflags -fno-signed-zeros
2212

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

    
2239
# PIC flags for shared library objects where they are needed
2240
if enabled shared; then
2241
    # LIBOBJFLAGS may have already been set in the OS configuration
2242
    if test -z "$LIBOBJFLAGS" ; then
2243
        case "${subarch-$arch}" in
2244
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2245
        esac
2246
    fi
2247
fi
2248

    
2249
if enabled gprof; then
2250
    add_cflags  -p
2251
    add_ldflags -p
2252
fi
2253

    
2254
# Find out if the .align argument is a power of two or not.
2255
check_asm asmalign_pot '".align 3"'
2256

    
2257
enabled_any $DECODER_LIST      && enable decoders
2258
enabled_any $ENCODER_LIST      && enable encoders
2259
enabled_any $HWACCEL_LIST      && enable hwaccels
2260
enabled_any $BSF_LIST          && enable bsfs
2261
enabled_any $DEMUXER_LIST      && enable demuxers
2262
enabled_any $MUXER_LIST        && enable muxers
2263
enabled_any $FILTER_LIST       && enable filters
2264
enabled_any $INDEV_LIST        && enable demuxers
2265
enabled_any $OUTDEV_LIST       && enable muxers
2266
enabled_any $PROTOCOL_LIST     && enable protocols
2267

    
2268
enabled_any $THREADS_LIST      && enable threads
2269

    
2270
check_deps $CONFIG_LIST       \
2271
           $CONFIG_EXTRA      \
2272
           $HAVE_LIST         \
2273
           $DECODER_LIST      \
2274
           $ENCODER_LIST      \
2275
           $HWACCEL_LIST      \
2276
           $PARSER_LIST       \
2277
           $BSF_LIST          \
2278
           $DEMUXER_LIST      \
2279
           $MUXER_LIST        \
2280
           $FILTER_LIST       \
2281
           $INDEV_LIST        \
2282
           $OUTDEV_LIST       \
2283
           $PROTOCOL_LIST     \
2284

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

    
2373
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2374
    echo "Enabled ${type}s:"
2375
    eval list=\$$(toupper $type)_LIST
2376
    for part in $list; do
2377
        enabled $part && echo ${part%_*}
2378
    done | sort | pr -3 -t
2379
    echo
2380
done
2381

    
2382
license="LGPL"
2383
if enabled nonfree; then
2384
    license="unredistributable"
2385
elif enabled gpl; then
2386
    license="GPL"
2387
fi
2388

    
2389
echo "License: $license"
2390

    
2391
echo "Creating config.mak and config.h..."
2392

    
2393
echo "# Automatically generated by configure - do not modify!" > config.mak
2394
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2395
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2396
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2397
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2398
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2399

    
2400
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2401
echo "prefix=$prefix" >> config.mak
2402
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2403
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2404
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2405
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2406
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2407
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2408
echo "SRC_PATH=\"$source_path\"" >> config.mak
2409
echo "SRC_PATH_BARE=$source_path" >> config.mak
2410
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2411
echo "CC=$cc" >> config.mak
2412
echo "AS=$as" >> config.mak
2413
echo "YASM=$yasmexe" >> config.mak
2414
echo "AR=$ar" >> config.mak
2415
echo "RANLIB=$ranlib" >> config.mak
2416
echo "LN_S=$ln_s" >> config.mak
2417
enabled stripping &&
2418
    echo "STRIP=$strip" >> config.mak ||
2419
    echo "STRIP=echo ignoring strip" >> config.mak
2420

    
2421
echo "OPTFLAGS=$CFLAGS" >> config.mak
2422
echo "LDFLAGS=$LDFLAGS" >> config.mak
2423
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2424
echo "SHFLAGS=$SHFLAGS" >> config.mak
2425
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2426
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2427
echo "BUILD_STATIC=$static" >> config.mak
2428
echo "BUILDSUF=$build_suffix" >> config.mak
2429
echo "FULLNAME=$FULLNAME" >> config.mak
2430
echo "LIBPREF=$LIBPREF" >> config.mak
2431
echo "LIBSUF=$LIBSUF" >> config.mak
2432
echo "LIBNAME=$LIBNAME" >> config.mak
2433
echo "SLIBPREF=$SLIBPREF" >> config.mak
2434
echo "SLIBSUF=$SLIBSUF" >> config.mak
2435
echo "EXESUF=$EXESUF" >> config.mak
2436
echo "EXTRA_VERSION=$extra_version" >> config.mak
2437
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2438
echo "HOSTCC=$host_cc" >> config.mak
2439
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2440
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2441
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2442
echo "HOSTLIBS=$host_libs" >> config.mak
2443
echo "TARGET_EXEC=$target_exec" >> config.mak
2444
echo "TARGET_PATH=$target_path" >> config.mak
2445

    
2446
if enabled bigendian; then
2447
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2448
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2449
fi
2450

    
2451
if enabled sdl; then
2452
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2453
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2454
fi
2455
if enabled texi2html; then
2456
    echo "BUILD_DOC=yes" >> config.mak
2457
fi
2458

    
2459
get_version(){
2460
    name=$1
2461
    file=$source_path/$2
2462
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2463
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2464
    lcname=$(tolower $name)
2465
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2466
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2467
}
2468

    
2469
get_version LIBSWSCALE  libswscale/swscale.h
2470
get_version LIBPOSTPROC libpostproc/postprocess.h
2471
get_version LIBAVCODEC  libavcodec/avcodec.h
2472
get_version LIBAVDEVICE libavdevice/avdevice.h
2473
get_version LIBAVFORMAT libavformat/avformat.h
2474
get_version LIBAVUTIL   libavutil/avutil.h
2475
get_version LIBAVFILTER libavfilter/avfilter.h
2476

    
2477
if enabled shared; then
2478
    echo "BUILD_SHARED=yes" >> config.mak
2479
    echo "PIC=-fPIC -DPIC" >> config.mak
2480
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2481
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2482
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2483
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2484
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2485
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2486
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2487
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2488
fi
2489
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2490
echo "EXTRALIBS=$extralibs" >> config.mak
2491

    
2492
echo "ARCH=$arch" >> config.mak
2493

    
2494
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2495
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2496
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2497
                                      $CONFIG_EXTRA      \
2498
                                      $DECODER_LIST      \
2499
                                      $ENCODER_LIST      \
2500
                                      $HWACCEL_LIST      \
2501
                                      $PARSER_LIST       \
2502
                                      $BSF_LIST          \
2503
                                      $DEMUXER_LIST      \
2504
                                      $MUXER_LIST        \
2505
                                      $FILTER_LIST       \
2506
                                      $PROTOCOL_LIST     \
2507
                                      $INDEV_LIST        \
2508
                                      $OUTDEV_LIST       \
2509

    
2510
echo "#define restrict $_restrict" >> $TMPH
2511

    
2512
if enabled small; then
2513
    echo "#define av_always_inline"  >> $TMPH
2514
fi
2515

    
2516

    
2517
# Apparently it's not possible to portably echo a backslash.
2518
enabled asmalign_pot &&
2519
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2520
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2521

    
2522
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2523

    
2524
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2525

    
2526
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2527
cmp -s $TMPH config.h &&
2528
    echo "config.h is unchanged" ||
2529
    mv -f $TMPH config.h
2530

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

    
2579

    
2580
# build pkg-config files
2581

    
2582
pkgconfig_generate(){
2583
name=$1
2584
shortname=${name#lib}${build_suffix}
2585
comment=$2
2586
version=$3
2587
libs=$4
2588
requires=$5
2589
cat <<EOF > $name/$name.pc
2590
prefix=$prefix
2591
exec_prefix=\${prefix}
2592
libdir=$libdir
2593
includedir=$incdir
2594

    
2595
Name: $name
2596
Description: $comment
2597
Version: $version
2598
Requires: $(disabled shared && echo $requires)
2599
Requires.private: $(enabled shared && echo $requires)
2600
Conflicts:
2601
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2602
Libs.private: $(enabled shared && echo $libs)
2603
Cflags: -I\${includedir}
2604
EOF
2605
cat <<EOF > $name/$name-uninstalled.pc
2606
prefix=
2607
exec_prefix=
2608
libdir=\${pcfiledir}
2609
includedir=${source_path}
2610

    
2611
Name: $name
2612
Description: $comment
2613
Version: $version
2614
Requires: $requires
2615
Conflicts:
2616
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2617
Cflags: -I\${includedir}
2618
EOF
2619
}
2620

    
2621
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2622
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2623
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2624
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2625
enabled avfilter &&
2626
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2627
enabled postproc &&
2628
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2629
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"