Statistics
| Branch: | Revision:

ffmpeg / configure @ 2513b2b4

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

    
237
log(){
238
    echo "$@" >> $logfile
239
}
240

    
241
log_file(){
242
    log BEGIN $1
243
    pr -n -t $1 >> $logfile
244
    log END $1
245
}
246

    
247
echolog(){
248
    log "$@"
249
    echo "$@"
250
}
251

    
252
die(){
253
    echolog "$@"
254
    cat <<EOF
255

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

    
274
# Avoid locale weirdness, besides we really just want to translate ASCII.
275
toupper(){
276
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
277
}
278

    
279
tolower(){
280
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
281
}
282

    
283
c_escape(){
284
    echo "$*" | sed 's/["\\]/\\\0/g'
285
}
286

    
287
sh_quote(){
288
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
289
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
290
    echo "$v"
291
}
292

    
293
filter(){
294
    pat=$1
295
    shift
296
    for v; do
297
        case "$v" in $pat) echo "$v" ;; esac
298
    done
299
}
300

    
301
set_all(){
302
    value=$1
303
    shift
304
    for var in $*; do
305
        eval $var=$value
306
    done
307
}
308

    
309
set_weak(){
310
    value=$1
311
    shift
312
    for var; do
313
        eval : \${$var:=$value}
314
    done
315
}
316

    
317
pushvar(){
318
    for var in $*; do
319
        eval level=\${${var}_level:=0}
320
        eval ${var}_${level}="\$$var"
321
        eval ${var}_level=$(($level+1))
322
    done
323
}
324

    
325
popvar(){
326
    for var in $*; do
327
        eval level=\${${var}_level:-0}
328
        test $level = 0 && continue
329
        eval level=$(($level-1))
330
        eval $var="\${${var}_${level}}"
331
        eval ${var}_level=$level
332
        eval unset ${var}_${level}
333
    done
334
}
335

    
336
enable(){
337
    set_all yes $*
338
}
339

    
340
disable(){
341
    set_all no $*
342
}
343

    
344
enable_weak(){
345
    set_weak yes $*
346
}
347

    
348
disable_weak(){
349
    set_weak no $*
350
}
351

    
352
enable_safe(){
353
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
354
}
355

    
356
disable_safe(){
357
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
358
}
359

    
360
do_enable_deep(){
361
    for var; do
362
        enabled $var && continue
363
        eval sel="\$${var}_select"
364
        eval sgs="\$${var}_suggest"
365
        pushvar var sgs
366
        enable_deep $sel
367
        popvar sgs
368
        enable_deep_weak $sgs
369
        popvar var
370
    done
371
}
372

    
373
enable_deep(){
374
    do_enable_deep $*
375
    enable $*
376
}
377

    
378
enable_deep_weak(){
379
    do_enable_deep $*
380
    enable_weak $*
381
}
382

    
383
enabled(){
384
    test "${1#!}" = "$1" && op== || op=!=
385
    eval test "x\$${1#!}" $op "xyes"
386
}
387

    
388
disabled(){
389
    test "${1#!}" = "$1" && op== || op=!=
390
    eval test "x\$${1#!}" $op "xno"
391
}
392

    
393
enabled_all(){
394
    for opt; do
395
        enabled $opt || return 1
396
    done
397
}
398

    
399
disabled_all(){
400
    for opt; do
401
        disabled $opt || return 1
402
    done
403
}
404

    
405
enabled_any(){
406
    for opt; do
407
        enabled $opt && return 0
408
    done
409
}
410

    
411
disabled_any(){
412
    for opt; do
413
        disabled $opt && return 0
414
    done
415
    return 1
416
}
417

    
418
set_default(){
419
    for opt; do
420
        eval : \${$opt:=\$${opt}_default}
421
    done
422
}
423

    
424
is_in(){
425
    value=$1
426
    shift
427
    for var in $*; do
428
        [ $var = $value ] && return 0
429
    done
430
    return 1
431
}
432

    
433
check_deps(){
434
    for cfg; do
435
        cfg="${cfg#!}"
436
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
437
        disabled ${cfg}_checking && continue
438
        enable ${cfg}_checking
439

    
440
        eval dep_all="\$${cfg}_deps"
441
        eval dep_any="\$${cfg}_deps_any"
442
        eval dep_sel="\$${cfg}_select"
443
        eval dep_sgs="\$${cfg}_suggest"
444

    
445
        pushvar cfg dep_all dep_any dep_sel dep_sgs
446
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
447
        popvar cfg dep_all dep_any dep_sel dep_sgs
448

    
449
        enabled_all  $dep_all || disable $cfg
450
        enabled_any  $dep_any || disable $cfg
451
        disabled_any $dep_sel && disable $cfg
452

    
453
        if enabled $cfg; then
454
            eval dep_extralibs="\$${cfg}_extralibs"
455
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
456
            enable_deep $dep_sel
457
            enable_deep_weak $dep_sgs
458
        fi
459

    
460
        disable ${cfg}_checking
461
    done
462
}
463

    
464
print_config(){
465
    pfx=$1
466
    header=$2
467
    makefile=$3
468
    shift 3
469
    for cfg; do
470
        ucname="$(toupper $cfg)"
471
        if enabled $cfg; then
472
            echo "#define ${pfx}${ucname} 1" >> $header
473
            echo "${pfx}${ucname}=yes" >> $makefile
474
        else
475
            echo "#define ${pfx}${ucname} 0" >> $header
476
        fi
477
    done
478
}
479

    
480
flags_saved(){
481
    (: ${SAVE_CFLAGS?}) 2> /dev/null
482
}
483

    
484
save_flags(){
485
    flags_saved && return
486
    SAVE_CFLAGS="$CFLAGS"
487
    SAVE_LDFLAGS="$LDFLAGS"
488
    SAVE_extralibs="$extralibs"
489
}
490

    
491
restore_flags(){
492
    flags_saved || return
493
    CFLAGS="$SAVE_CFLAGS"
494
    LDFLAGS="$SAVE_LDFLAGS"
495
    extralibs="$SAVE_extralibs"
496
    unset SAVE_CFLAGS
497
    unset SAVE_LDFLAGS
498
    unset SAVE_extralibs
499
}
500

    
501
temp_cflags(){
502
    save_flags
503
    CFLAGS="$CFLAGS $*"
504
}
505

    
506
temp_ldflags(){
507
    save_flags
508
    LDFLAGS="$LDFLAGS $*"
509
}
510

    
511
temp_extralibs(){
512
    save_flags
513
    extralibs="$extralibs $*"
514
}
515

    
516
append(){
517
    var=$1
518
    shift
519
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
520
    eval "$var=\"\$$var $*\""
521
}
522

    
523
add_cppflags(){
524
    append CPPFLAGS $($filter_cppflags "$@")
525
}
526

    
527
add_cflags(){
528
    append CFLAGS $($filter_cflags "$@")
529
}
530

    
531
add_asflags(){
532
    append ASFLAGS $($filter_asflags "$@")
533
}
534

    
535
add_ldflags(){
536
    append LDFLAGS "$@"
537
}
538

    
539
add_extralibs(){
540
    append extralibs "$@"
541
}
542

    
543
check_cmd(){
544
    log "$@"
545
    "$@" >> $logfile 2>&1
546
}
547

    
548
check_cc(){
549
    log check_cc "$@"
550
    cat > $TMPC
551
    log_file $TMPC
552
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
553
}
554

    
555
check_cpp(){
556
    log check_cpp "$@"
557
    cat > $TMPC
558
    log_file $TMPC
559
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
560
}
561

    
562
check_as(){
563
    log check_as "$@"
564
    cat > $TMPC
565
    log_file $TMPC
566
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
567
}
568

    
569
check_asm(){
570
    log check_asm "$@"
571
    name="$1"
572
    asm="$2"
573
    shift 2
574
    check_as "$@" <<EOF && enable $name || disable $name
575
void foo(void){ __asm__ volatile($asm); }
576
EOF
577
}
578

    
579
check_yasm(){
580
    log check_yasm "$@"
581
    echo "$1" > $TMPS
582
    log_file $TMPS
583
    shift 1
584
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
585
}
586

    
587
check_ld(){
588
    log check_ld "$@"
589
    check_cc || return
590
    flags=''
591
    libs=''
592
    for f; do
593
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
594
    done
595
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
596
}
597

    
598
check_cppflags(){
599
    log check_cppflags "$@"
600
    set -- $($filter_cppflags "$@")
601
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
602
int x;
603
EOF
604
}
605

    
606
check_cflags(){
607
    log check_cflags "$@"
608
    set -- $($filter_cflags "$@")
609
    check_cc "$@" <<EOF && append CFLAGS "$@"
610
int x;
611
EOF
612
}
613

    
614
check_ldflags(){
615
    log check_ldflags "$@"
616
    check_ld "$@" <<EOF && add_ldflags "$@"
617
int main(void){ return 0; }
618
EOF
619
}
620

    
621
check_header(){
622
    log check_header "$@"
623
    header=$1
624
    shift
625
    disable_safe $header
626
    check_cpp "$@" <<EOF && enable_safe $header
627
#include <$header>
628
int x;
629
EOF
630
}
631

    
632
check_func(){
633
    log check_func "$@"
634
    func=$1
635
    shift
636
    disable $func
637
    check_ld "$@" <<EOF && enable $func
638
extern int $func();
639
int main(void){ $func(); }
640
EOF
641
}
642

    
643
check_func_headers(){
644
    log check_func_headers "$@"
645
    headers=$1
646
    func=$2
647
    shift 2
648
    disable $func
649
    incs=""
650
    for hdr in $headers; do
651
        incs="$incs
652
#include <$hdr>"
653
    done
654
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
655
$incs
656
int main(int argc, char **argv){
657
    return (long) $func;
658
}
659
EOF
660
}
661

    
662
check_cpp_condition(){
663
    log check_cpp_condition "$@"
664
    header=$1
665
    condition=$2
666
    check_cpp <<EOF
667
#include <$header>
668
#if !($condition)
669
#error "unsatisfied condition: $condition"
670
#endif
671
EOF
672
}
673

    
674
check_lib(){
675
    log check_lib "$@"
676
    header="$1"
677
    func="$2"
678
    shift 2
679
    temp_extralibs "$@"
680
    check_header $header && check_func $func && add_extralibs "$@"
681
    err=$?
682
    restore_flags
683
    return $err
684
}
685

    
686
check_lib2(){
687
    log check_lib2 "$@"
688
    headers="$1"
689
    func="$2"
690
    shift 2
691
    temp_extralibs "$@"
692
    check_func_headers "$headers" $func && add_extralibs "$@"
693
    err=$?
694
    restore_flags
695
    return $err
696
}
697

    
698
check_exec(){
699
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
700
}
701

    
702
check_exec_crash(){
703
    code=$(cat)
704

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

    
711
    (check_exec "$@") >> $logfile 2>&1 <<EOF
712
#include <signal.h>
713
static void sighandler(int sig){
714
    raise(SIGTERM);
715
}
716
int main(void){
717
    signal(SIGILL, sighandler);
718
    signal(SIGFPE, sighandler);
719
    signal(SIGSEGV, sighandler);
720
#ifdef SIGBUS
721
    signal(SIGBUS, sighandler);
722
#endif
723
    { $code }
724
}
725
EOF
726
}
727

    
728
check_type(){
729
    log check_type "$@"
730
    headers=$1
731
    type=$2
732
    shift 2
733
    disable $type
734
    incs=""
735
    for hdr in $headers; do
736
        incs="$incs
737
#include <$hdr>"
738
    done
739
    check_cc "$@" <<EOF && enable $type
740
$incs
741
$type v;
742
EOF
743
}
744

    
745
require(){
746
    name="$1"
747
    header="$2"
748
    func="$3"
749
    shift 3
750
    check_lib $header $func "$@" || die "ERROR: $name not found"
751
}
752

    
753
require2(){
754
    name="$1"
755
    headers="$2"
756
    func="$3"
757
    shift 3
758
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
759
}
760

    
761
check_foo_config(){
762
    cfg=$1
763
    pkg=$2
764
    header=$3
765
    func=$4
766
    shift 4
767
    disable $cfg
768
    check_cmd ${pkg}-config --version
769
    err=$?
770
    if test "$err" = 0; then
771
        temp_cflags $(${pkg}-config --cflags)
772
        temp_extralibs $(${pkg}-config --libs)
773
        check_lib "$@" $header $func && enable $cfg
774
    fi
775
    return $err
776
}
777

    
778
apply(){
779
    file=$1
780
    shift
781
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
782
}
783

    
784
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
785
# system-dependent things.
786

    
787
COMPONENT_LIST="
788
    bsfs
789
    decoders
790
    demuxers
791
    encoders
792
    filters
793
    hwaccels
794
    indevs
795
    muxers
796
    outdevs
797
    parsers
798
    protocols
799
"
800

    
801
CONFIG_LIST="
802
    $COMPONENT_LIST
803
    aandct
804
    avfilter
805
    avfilter_lavf
806
    avisynth
807
    beos_netserver
808
    bzlib
809
    fastdiv
810
    ffmpeg
811
    ffplay
812
    ffserver
813
    fft
814
    golomb
815
    gpl
816
    gprof
817
    gray
818
    hardcoded_tables
819
    ipv6
820
    libdc1394
821
    libdirac
822
    libfaac
823
    libfaad
824
    libfaadbin
825
    libgsm
826
    libmp3lame
827
    libnut
828
    libopencore_amrnb
829
    libopencore_amrwb
830
    libopenjpeg
831
    libschroedinger
832
    libspeex
833
    libtheora
834
    libvorbis
835
    libx264
836
    libxvid
837
    mdct
838
    memalign_hack
839
    mlib
840
    mpegaudio_hp
841
    network
842
    nonfree
843
    postproc
844
    powerpc_perf
845
    rdft
846
    runtime_cpudetect
847
    shared
848
    small
849
    static
850
    swscale_alpha
851
    vaapi
852
    vdpau
853
    version3
854
    x11grab
855
    zlib
856
"
857

    
858
THREADS_LIST='
859
    beosthreads
860
    os2threads
861
    pthreads
862
    w32threads
863
'
864

    
865
ARCH_LIST='
866
    alpha
867
    arm
868
    bfin
869
    ia64
870
    m68k
871
    mips
872
    mips64
873
    parisc
874
    ppc
875
    ppc64
876
    s390
877
    sh4
878
    sparc
879
    sparc64
880
    x86
881
    x86_32
882
    x86_64
883
'
884

    
885
ARCH_EXT_LIST='
886
    altivec
887
    amd3dnow
888
    amd3dnowext
889
    armv5te
890
    armv6
891
    armv6t2
892
    armvfp
893
    iwmmxt
894
    mmi
895
    mmx
896
    mmx2
897
    neon
898
    ppc4xx
899
    sse
900
    ssse3
901
    vis
902
'
903

    
904
HAVE_LIST="
905
    $ARCH_EXT_LIST
906
    $THREADS_LIST
907
    alsa_asoundlib_h
908
    altivec_h
909
    arpa_inet_h
910
    attribute_packed
911
    bigendian
912
    bswap
913
    closesocket
914
    cmov
915
    conio_h
916
    dcbzl
917
    dev_bktr_ioctl_bt848_h
918
    dev_bktr_ioctl_meteor_h
919
    dev_ic_bt8xx_h
920
    dev_video_meteor_ioctl_meteor_h
921
    dev_video_bktr_ioctl_bt848_h
922
    dlfcn_h
923
    dlopen
924
    dos_paths
925
    ebp_available
926
    ebx_available
927
    fast_64bit
928
    fast_cmov
929
    fast_unaligned
930
    fork
931
    gethrtime
932
    GetProcessTimes
933
    getrusage
934
    inet_aton
935
    inline_asm
936
    isatty
937
    ldbrx
938
    libdc1394_1
939
    libdc1394_2
940
    llrint
941
    log2
942
    loongson
943
    lrint
944
    lrintf
945
    lzo1x_999_compress
946
    machine_ioctl_bt848_h
947
    machine_ioctl_meteor_h
948
    malloc_h
949
    memalign
950
    mkstemp
951
    pld
952
    posix_memalign
953
    round
954
    roundf
955
    sdl
956
    sdl_video_size
957
    setmode
958
    socklen_t
959
    soundcard_h
960
    poll_h
961
    sys_mman_h
962
    sys_resource_h
963
    sys_select_h
964
    sys_soundcard_h
965
    sys_videoio_h
966
    ten_operands
967
    termios_h
968
    threads
969
    truncf
970
    vfp_args
971
    VirtualAlloc
972
    winsock2_h
973
    xform_asm
974
    yasm
975
"
976

    
977
# options emitted with CONFIG_ prefix but not available on command line
978
CONFIG_EXTRA="
979
    gplv3
980
    lgplv3
981
"
982

    
983
CMDLINE_SELECT="
984
    $ARCH_EXT_LIST
985
    $CONFIG_LIST
986
    $THREADS_LIST
987
    cross_compile
988
    debug
989
    extra_warnings
990
    logging
991
    optimizations
992
    stripping
993
    yasm
994
"
995

    
996
PATHS_LIST='
997
    bindir
998
    datadir
999
    incdir
1000
    libdir
1001
    mandir
1002
    prefix
1003
    shlibdir
1004
'
1005

    
1006
CMDLINE_SET="
1007
    $PATHS_LIST
1008
    arch
1009
    as
1010
    build_suffix
1011
    cc
1012
    cpu
1013
    cross_prefix
1014
    dep_cc
1015
    extra_version
1016
    host_cc
1017
    host_cflags
1018
    host_ldflags
1019
    host_libs
1020
    host_os
1021
    ld
1022
    logfile
1023
    nm
1024
    source_path
1025
    sysinclude
1026
    sysroot
1027
    target_exec
1028
    target_os
1029
    target_path
1030
"
1031

    
1032
CMDLINE_APPEND="
1033
    extra_cflags
1034
"
1035

    
1036
# code dependency declarations
1037

    
1038
# architecture extensions
1039
altivec_deps="ppc"
1040
amd3dnow_deps="mmx"
1041
amd3dnowext_deps="amd3dnow"
1042
armv5te_deps="arm"
1043
armv6_deps="arm"
1044
armv6t2_deps="arm"
1045
armvfp_deps="arm"
1046
iwmmxt_deps="arm"
1047
mmi_deps="mips"
1048
mmx_deps="x86"
1049
mmx2_deps="mmx"
1050
neon_deps="arm"
1051
ppc4xx_deps="ppc"
1052
sse_deps="mmx"
1053
ssse3_deps="sse"
1054
vis_deps="sparc"
1055

    
1056
need_memalign="altivec neon sse"
1057
inline_asm_deps="!tms470"
1058

    
1059
# decoders / encoders / hardware accelerators
1060
aac_decoder_select="fft mdct"
1061
aac_encoder_select="fft mdct"
1062
ac3_decoder_select="fft mdct"
1063
atrac3_decoder_select="fft mdct"
1064
cavs_decoder_select="golomb"
1065
cook_decoder_select="fft mdct"
1066
cscd_decoder_suggest="zlib"
1067
dca_decoder_select="fft mdct"
1068
dnxhd_encoder_select="aandct"
1069
dxa_decoder_select="zlib"
1070
eac3_decoder_select="ac3_decoder"
1071
eamad_decoder_select="aandct"
1072
eatgq_decoder_select="aandct"
1073
eatqi_decoder_select="aandct"
1074
ffv1_decoder_select="golomb"
1075
flac_decoder_select="golomb"
1076
flac_encoder_select="golomb"
1077
flashsv_decoder_select="zlib"
1078
flashsv_encoder_select="zlib"
1079
flv_encoder_select="h263_encoder"
1080
h261_encoder_select="aandct"
1081
h263_encoder_select="aandct"
1082
h263_vaapi_hwaccel_deps="va_va_h"
1083
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1084
h263p_encoder_select="h263_encoder"
1085
h264_decoder_select="golomb"
1086
h264_vaapi_hwaccel_deps="va_va_h"
1087
h264_vaapi_hwaccel_select="vaapi"
1088
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1089
h264_vdpau_decoder_select="vdpau h264_decoder"
1090
imc_decoder_select="fft mdct"
1091
jpegls_decoder_select="golomb"
1092
jpegls_encoder_select="golomb"
1093
ljpeg_encoder_select="aandct"
1094
loco_decoder_select="golomb"
1095
mjpeg_encoder_select="aandct"
1096
mpeg1video_encoder_select="aandct"
1097
mpeg2video_encoder_select="aandct"
1098
mpeg4_encoder_select="h263_encoder"
1099
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1100
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1101
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1102
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1103
mpeg2_vaapi_hwaccel_deps="va_va_h"
1104
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1105
mpeg4_vaapi_hwaccel_deps="va_va_h"
1106
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1107
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1108
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1109
msmpeg4v1_encoder_select="h263_encoder"
1110
msmpeg4v2_encoder_select="h263_encoder"
1111
msmpeg4v3_encoder_select="h263_encoder"
1112
nellymoser_decoder_select="fft mdct"
1113
nellymoser_encoder_select="fft mdct"
1114
png_decoder_select="zlib"
1115
png_encoder_select="zlib"
1116
qdm2_decoder_select="fft mdct rdft"
1117
rv10_encoder_select="h263_encoder"
1118
rv20_encoder_select="h263_encoder"
1119
rv30_decoder_select="golomb"
1120
rv40_decoder_select="golomb"
1121
shorten_decoder_select="golomb"
1122
sonic_decoder_select="golomb"
1123
sonic_encoder_select="golomb"
1124
sonic_ls_encoder_select="golomb"
1125
svq3_decoder_select="golomb"
1126
svq3_decoder_suggest="zlib"
1127
theora_decoder_select="vp3_decoder"
1128
tiff_decoder_suggest="zlib"
1129
tiff_encoder_suggest="zlib"
1130
tscc_decoder_select="zlib"
1131
vc1_vaapi_hwaccel_deps="va_va_h"
1132
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1133
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1134
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1135
vorbis_decoder_select="fft mdct"
1136
vorbis_encoder_select="fft mdct"
1137
vp6a_decoder_select="vp6_decoder"
1138
vp6f_decoder_select="vp6_decoder"
1139
wmav1_decoder_select="fft mdct"
1140
wmav1_encoder_select="fft mdct"
1141
wmav2_decoder_select="fft mdct"
1142
wmav2_encoder_select="fft mdct"
1143
wmv1_encoder_select="h263_encoder"
1144
wmv2_encoder_select="h263_encoder"
1145
wmv3_decoder_select="vc1_decoder"
1146
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1147
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1148
zlib_decoder_select="zlib"
1149
zlib_encoder_select="zlib"
1150
zmbv_decoder_select="zlib"
1151
zmbv_encoder_select="zlib"
1152

    
1153
# parsers
1154
h264_parser_select="golomb"
1155

    
1156
# external libraries
1157
libdirac_decoder_deps="libdirac !libschroedinger"
1158
libdirac_encoder_deps="libdirac"
1159
libfaac_encoder_deps="libfaac"
1160
libfaad_decoder_deps="libfaad"
1161
libfaadbin_decoder_extralibs='$ldl'
1162
libgsm_decoder_deps="libgsm"
1163
libgsm_encoder_deps="libgsm"
1164
libgsm_ms_decoder_deps="libgsm"
1165
libgsm_ms_encoder_deps="libgsm"
1166
libmp3lame_encoder_deps="libmp3lame"
1167
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1168
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1169
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1170
libopenjpeg_decoder_deps="libopenjpeg"
1171
libschroedinger_decoder_deps="libschroedinger"
1172
libschroedinger_encoder_deps="libschroedinger"
1173
libspeex_decoder_deps="libspeex"
1174
libtheora_encoder_deps="libtheora"
1175
libvorbis_encoder_deps="libvorbis"
1176
libx264_encoder_deps="libx264"
1177
libxvid_encoder_deps="libxvid"
1178

    
1179
# demuxers / muxers
1180
ac3_demuxer_deps="ac3_parser"
1181
asf_stream_muxer_select="asf_muxer"
1182
avisynth_demuxer_deps="avisynth"
1183
dirac_demuxer_deps="dirac_parser"
1184
ipod_muxer_select="mov_muxer"
1185
libnut_demuxer_deps="libnut"
1186
libnut_muxer_deps="libnut"
1187
matroska_audio_muxer_select="matroska_muxer"
1188
matroska_demuxer_suggest="zlib bzlib"
1189
mov_demuxer_suggest="zlib"
1190
mp3_demuxer_deps="mpegaudio_parser"
1191
mp4_muxer_select="mov_muxer"
1192
mpegtsraw_demuxer_select="mpegts_demuxer"
1193
mxf_d10_muxer_select="mxf_muxer"
1194
psp_muxer_select="mov_muxer"
1195
redir_demuxer_deps="network"
1196
rtp_muxer_deps="network rtp_protocol"
1197
rtsp_demuxer_deps="sdp_demuxer"
1198
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1199
tg2_muxer_select="mov_muxer"
1200
tgp_muxer_select="mov_muxer"
1201

    
1202
# indevs / outdevs
1203
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1204
alsa_indev_extralibs="-lasound"
1205
alsa_outdev_deps="alsa_asoundlib_h"
1206
alsa_outdev_extralibs="-lasound"
1207
audio_beos_indev_deps="audio_beos"
1208
audio_beos_indev_extralibs="-lmedia -lbe"
1209
audio_beos_outdev_deps="audio_beos"
1210
audio_beos_outdev_extralibs="-lmedia -lbe"
1211
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1212
dv1394_indev_deps="dv1394 dv_demuxer"
1213
jack_indev_deps="jack_jack_h"
1214
jack_indev_extralibs="-ljack"
1215
libdc1394_indev_deps="libdc1394"
1216
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1217
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1218
v4l_indev_deps="linux_videodev_h"
1219
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1220
vfwcap_indev_deps="capCreateCaptureWindow"
1221
vfwcap_indev_extralibs="-lvfw32"
1222
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1223
x11_grab_device_indev_extralibs="-lX11 -lXext"
1224

    
1225
# protocols
1226
gopher_protocol_deps="network"
1227
http_protocol_deps="network"
1228
rtmp_protocol_deps="tcp_protocol"
1229
rtp_protocol_deps="udp_protocol"
1230
tcp_protocol_deps="network"
1231
udp_protocol_deps="network"
1232

    
1233
# filters
1234
movie_filter_deps="avfilter_lavf"
1235

    
1236
# programs
1237
ffplay_deps="sdl"
1238
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1239
ffserver_extralibs='$ldl'
1240

    
1241

    
1242
# default parameters
1243

    
1244
logfile="config.err"
1245

    
1246
# installation paths
1247
prefix_default="/usr/local"
1248
bindir_default='${prefix}/bin'
1249
datadir_default='${prefix}/share/ffmpeg'
1250
incdir_default='${prefix}/include'
1251
libdir_default='${prefix}/lib'
1252
mandir_default='${prefix}/share/man'
1253
shlibdir_default="$libdir_default"
1254

    
1255
# toolchain
1256
ar="ar"
1257
cc_default="gcc"
1258
host_cc_default="gcc"
1259
ln_s="ln -sf"
1260
nm_default="nm"
1261
objformat="elf"
1262
ranlib="ranlib"
1263
strip="strip"
1264
yasmexe="yasm"
1265

    
1266
# machine
1267
arch=$(uname -m)
1268
cpu="generic"
1269

    
1270
# OS
1271
target_os=$(tolower $(uname -s))
1272
host_os=$target_os
1273

    
1274
# configurable options
1275
enable debug
1276
enable fastdiv
1277
enable ffmpeg
1278
enable ffplay
1279
enable ffserver
1280
enable ipv6
1281
enable mpegaudio_hp
1282
enable network
1283
enable optimizations
1284
enable protocols
1285
enable static
1286
enable stripping
1287
enable swscale_alpha
1288

    
1289
# build settings
1290
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1291
FFSERVERLDFLAGS=-Wl,-E
1292
LIBPREF="lib"
1293
LIBSUF=".a"
1294
FULLNAME='$(NAME)$(BUILDSUF)'
1295
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1296
SLIBPREF="lib"
1297
SLIBSUF=".so"
1298
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1299
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1300
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1301
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1302

    
1303
CC_O='-o $@'
1304

    
1305
host_cflags='-O3 -g -Wall'
1306
host_libs='-lm'
1307

    
1308
target_path='.'
1309

    
1310
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1311
# full relative path for objects in subdirectories for non-recursive Make.
1312
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1313
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1314

    
1315
# find source path
1316
source_path="$(dirname "$0")"
1317
enable source_path_used
1318
if test -f configure; then
1319
    source_path="$(pwd)"
1320
    disable source_path_used
1321
else
1322
    source_path="$(cd "$source_path"; pwd)"
1323
    echo "$source_path" | grep -q '[[:blank:]]' &&
1324
        die "Out of tree builds are impossible with whitespace in source path."
1325
    test -e "$source_path/config.h" &&
1326
        die "Out of tree builds are impossible with config.h in source dir."
1327
fi
1328

    
1329
for v in "$@"; do
1330
    r=${v#*=}
1331
    l=${v%"$r"}
1332
    r=$(sh_quote "$r")
1333
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1334
done
1335

    
1336
find_things(){
1337
    thing=$1
1338
    pattern=$2
1339
    file=$source_path/$3
1340
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1341
}
1342

    
1343
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1344
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1345
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1346
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1347
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1348
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1349
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1350
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1351
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1352
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1353
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1354

    
1355
enable $ARCH_EXT_LIST \
1356
       $DECODER_LIST \
1357
       $ENCODER_LIST \
1358
       $HWACCEL_LIST \
1359
       $PARSER_LIST \
1360
       $BSF_LIST \
1361
       $DEMUXER_LIST \
1362
       $MUXER_LIST \
1363
       $FILTER_LIST \
1364
       $PROTOCOL_LIST \
1365
       $INDEV_LIST \
1366
       $OUTDEV_LIST \
1367

    
1368
die_unknown(){
1369
    echo "Unknown option \"$1\"."
1370
    echo "See $0 --help for available options."
1371
    exit 1
1372
}
1373

    
1374
show_list() {
1375
    suffix=_$1
1376
    shift
1377
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1378
    exit 0
1379
}
1380

    
1381
for opt do
1382
    optval="${opt#*=}"
1383
    case "$opt" in
1384
    --extra-ldflags=*) add_ldflags $optval
1385
    ;;
1386
    --extra-libs=*) add_extralibs $optval
1387
    ;;
1388
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1389
    ;;
1390
    --enable-debug=*) debuglevel="$optval"
1391
    ;;
1392
    --enable-*=*|--disable-*=*)
1393
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1394
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1395
    eval list=\$$(toupper $thing)_LIST
1396
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1397
    $action $(filter "$name" $list)
1398
    ;;
1399
    --enable-?*|--disable-?*)
1400
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1401
    if is_in $option $COMPONENT_LIST; then
1402
        test $action = disable && action=unset
1403
        eval $action \$$(toupper ${option%s})_LIST
1404
    elif is_in $option $CMDLINE_SELECT; then
1405
        $action $option
1406
    else
1407
        die_unknown $opt
1408
    fi
1409
    ;;
1410
    --list-*)
1411
        NAME="${opt#--list-}"
1412
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1413
        NAME=${NAME%s}
1414
        eval show_list $NAME \$$(toupper $NAME)_LIST
1415
    ;;
1416
    --help|-h) show_help
1417
    ;;
1418
    *)
1419
    optname="${opt%%=*}"
1420
    optname="${optname#--}"
1421
    optname=$(echo "$optname" | sed 's/-/_/g')
1422
    if is_in $optname $CMDLINE_SET; then
1423
        eval $optname='$optval'
1424
    elif is_in $optname $CMDLINE_APPEND; then
1425
        append $optname "$optval"
1426
    else
1427
         die_unknown $opt
1428
    fi
1429
    ;;
1430
    esac
1431
done
1432

    
1433
disabled logging && logfile=/dev/null
1434

    
1435
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1436
set >> $logfile
1437

    
1438
test -n "$cross_prefix" && enable cross_compile
1439

    
1440
ar="${cross_prefix}${ar}"
1441
cc_default="${cross_prefix}${cc_default}"
1442
nm_default="${cross_prefix}${nm_default}"
1443
ranlib="${cross_prefix}${ranlib}"
1444
strip="${cross_prefix}${strip}"
1445

    
1446
sysinclude_default="${sysroot}/usr/include"
1447

    
1448
set_default cc nm sysinclude
1449
enabled cross_compile || host_cc_default=$cc
1450
set_default host_cc
1451

    
1452
exesuf() {
1453
    case $1 in
1454
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1455
    esac
1456
}
1457

    
1458
EXESUF=$(exesuf $target_os)
1459
HOSTEXESUF=$(exesuf $host_os)
1460

    
1461
# set temporary file name
1462
: ${TMPDIR:=$TEMPDIR}
1463
: ${TMPDIR:=$TMP}
1464
: ${TMPDIR:=/tmp}
1465

    
1466
if ! check_cmd type mktemp; then
1467
    # simple replacement for missing mktemp
1468
    # NOT SAFE FOR GENERAL USE
1469
    mktemp(){
1470
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1471
    }
1472
fi
1473

    
1474
tmpfile(){
1475
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1476
        (set -C; exec > $tmp) 2>/dev/null ||
1477
        die "Unable to create temoporary file in $TMPDIR."
1478
    append TMPFILES $tmp
1479
    eval $1=$tmp
1480
}
1481

    
1482
trap 'rm -f -- $TMPFILES' EXIT
1483
trap exit HUP INT TERM
1484

    
1485
tmpfile TMPC  .c
1486
tmpfile TMPE  $EXESUF
1487
tmpfile TMPH  .h
1488
tmpfile TMPO  .o
1489
tmpfile TMPS  .S
1490
tmpfile TMPSH .sh
1491

    
1492
unset -f mktemp
1493

    
1494
# make sure we can execute files in $TMPDIR
1495
cat > $TMPSH 2>> $logfile <<EOF
1496
#! /bin/sh
1497
EOF
1498
chmod +x $TMPSH >> $logfile 2>&1
1499
if ! $TMPSH >> $logfile 2>&1; then
1500
    cat <<EOF
1501
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1502
variable to another directory and make sure that it is not mounted noexec.
1503
EOF
1504
    die "Sanity test failed."
1505
fi
1506

    
1507
filter_cflags=echo
1508
filter_cppflags=echo
1509
filter_asflags=echo
1510

    
1511
if   $cc -v 2>&1 | grep -qi ^gcc; then
1512
    cc_type=gcc
1513
    if ! $cc -dumpversion | grep -q '^2\.'; then
1514
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1515
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1516
    fi
1517
elif $cc --version 2>/dev/null | grep -q Intel; then
1518
    cc_type=icc
1519
    CC_DEPFLAGS='-MMD'
1520
    AS_DEPFLAGS='-MMD'
1521
elif $cc -v 2>&1 | grep -q xlc; then
1522
    cc_type=xlc
1523
elif $cc -V 2>/dev/null | grep -q Compaq; then
1524
    cc_type=ccc
1525
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1526
    debuglevel=3
1527
    add_ldflags -Wl,-z,now # calls to libots crash without this
1528
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1529
    test -d "$sysroot" || die "No valid sysroot specified."
1530
    cc_type=armcc
1531
    armcc_conf="$PWD/armcc.conf"
1532
    $cc --arm_linux_configure                 \
1533
        --arm_linux_config_file="$armcc_conf" \
1534
        --configure_sysroot="$sysroot"        \
1535
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1536
        die "Error creating armcc configuration file."
1537
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1538
    as_default="${cross_prefix}gcc"
1539
    CC_DEPFLAGS='-MMD'
1540
    AS_DEPFLAGS='-MMD'
1541
elif $cc -version 2>/dev/null | grep -q TMS470; then
1542
    cc_type=tms470
1543
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1544
    CC_O='-fr=$(@D)'
1545
    as_default="${cross_prefix}gcc"
1546
    ld_default="${cross_prefix}gcc"
1547
    TMPO=$(basename $TMPC .c).o
1548
    append TMPFILES $TMPO
1549
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1550
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1551
    AS_DEPFLAGS='-MMD'
1552
    filter_cflags=tms470_flags
1553
    tms470_flags(){
1554
        for flag; do
1555
            case $flag in
1556
                -march=*|-mcpu=*)
1557
                    case "${flag#*=}" in
1558
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1559
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1560
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1561
                        armv6*|arm11*)          echo -mv=6   ;;
1562
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1563
                                                echo -mv=5e  ;;
1564
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1565
                    esac
1566
                    ;;
1567
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1568
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1569
                -mfpu=softvfp)  echo --float_support=vfplib       ;;
1570
                -Os)            echo -O3 -mf=2                    ;;
1571
                -O[0-3])        echo $flag -mf=5                  ;;
1572
                -g)             echo -g -mn                       ;;
1573
            esac
1574
        done
1575
    }
1576
fi
1577

    
1578
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1579

    
1580
: ${as_default:=$cc}
1581
: ${dep_cc_default:=$cc}
1582
: ${ld_default:=$cc}
1583
set_default as dep_cc ld
1584

    
1585
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1586
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1587

    
1588
add_cflags $extra_cflags
1589
add_asflags $extra_cflags
1590

    
1591
if test -n "$sysroot"; then
1592
    case "$cc_type" in
1593
        gcc)
1594
            add_cppflags --sysroot="$sysroot"
1595
            add_ldflags --sysroot="$sysroot"
1596
        ;;
1597
        tms470)
1598
            add_cppflags -I"$sysinclude"
1599
            add_ldflags  --sysroot="$sysroot"
1600
        ;;
1601
    esac
1602
fi
1603

    
1604
if test "$cpu" = host; then
1605
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1606

    
1607
    case "$cc_type" in
1608
        gcc)
1609
            check_native(){
1610
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1611
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1612
            }
1613
            cpu=$(check_native -march || check_native -mcpu)
1614
        ;;
1615
    esac
1616

    
1617
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1618
fi
1619

    
1620
# Add processor-specific flags
1621
case $cpu in
1622
    601|ppc601|PowerPC601)
1623
        cpuflags="-mcpu=601"
1624
    ;;
1625
    603*|ppc603*|PowerPC603*)
1626
        cpuflags="-mcpu=603"
1627
    ;;
1628
    604*|ppc604*|PowerPC604*)
1629
        cpuflags="-mcpu=604"
1630
    ;;
1631
    G3|g3|75*|ppc75*|PowerPC75*)
1632
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1633
    ;;
1634
    G4|g4|745*|ppc745*|PowerPC745*)
1635
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1636
    ;;
1637
    74*|ppc74*|PowerPC74*)
1638
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1639
    ;;
1640
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1641
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1642
    ;;
1643
    Cell|CELL|cell)
1644
        cpuflags="-mcpu=cell"
1645
        enable ldbrx
1646
    ;;
1647
    # targets that do NOT support conditional mov (cmov)
1648
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1649
        cpuflags="-march=$cpu"
1650
        disable cmov
1651
    ;;
1652
    # targets that do support conditional mov (cmov)
1653
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1654
        cpuflags="-march=$cpu"
1655
        enable cmov
1656
        enable fast_cmov
1657
    ;;
1658
    # targets that do support conditional mov but on which it's slow
1659
    pentium4|pentium4m|prescott|nocona)
1660
        cpuflags="-march=$cpu"
1661
        enable cmov
1662
        disable fast_cmov
1663
    ;;
1664
    sparc64)
1665
        cpuflags="-mcpu=v9"
1666
    ;;
1667
    arm11*|cortex*)
1668
        cpuflags="-mcpu=$cpu"
1669
        enable fast_unaligned
1670
    ;;
1671
    armv[67]*)
1672
        cpuflags="-march=$cpu"
1673
        enable fast_unaligned
1674
    ;;
1675
    armv*)
1676
        cpuflags="-march=$cpu"
1677
    ;;
1678
    arm*)
1679
        cpuflags="-mcpu=$cpu"
1680
    ;;
1681
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1682
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1683
    ;;
1684
    bf*)
1685
        cpuflags="-mcpu=$cpu"
1686
    ;;
1687
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1688
        cpuflags="-march=$cpu"
1689
    ;;
1690
    generic)
1691
    ;;
1692
    *)
1693
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1694
    ;;
1695
esac
1696

    
1697
add_cflags $cpuflags
1698
add_asflags $cpuflags
1699

    
1700
# compiler sanity check
1701
check_exec <<EOF
1702
int main(void){ return 0; }
1703
EOF
1704
if test "$?" != 0; then
1705
    echo "$cc is unable to create an executable file."
1706
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1707
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1708
        echo "Only do this if you know what cross compiling means."
1709
    fi
1710
    die "C compiler test failed."
1711
fi
1712

    
1713
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1714
check_cflags -std=c99
1715
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1716
#include <stdlib.h>
1717
EOF
1718
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1719
#include <stdlib.h>
1720
EOF
1721

    
1722
case "$arch" in
1723
    alpha)
1724
        arch="alpha"
1725
        enable fast_64bit
1726
        check_cflags -mieee
1727
        pic=$shared
1728
    ;;
1729
    arm|armv[4567]*l)
1730
        arch="arm"
1731
    ;;
1732
    avr32)
1733
    ;;
1734
    bfin)
1735
        arch="bfin"
1736
    ;;
1737
    ia64)
1738
        arch="ia64"
1739
        enable fast_64bit
1740
        pic=$shared
1741
    ;;
1742
    m68k)
1743
        arch="m68k"
1744
    ;;
1745
    mips|mipsel|IP*)
1746
        arch="mips"
1747
        pic=$shared
1748
    ;;
1749
    mips64)
1750
        arch="mips"
1751
        subarch="mips64"
1752
        enable fast_64bit
1753
        pic=$shared
1754
    ;;
1755
    parisc|hppa)
1756
        arch="parisc"
1757
        pic=$shared
1758
    ;;
1759
    parisc64|hppa64)
1760
        arch="parisc"
1761
        enable fast_64bit
1762
        pic=$shared
1763
    ;;
1764
    "Power Macintosh"|ppc|powerpc)
1765
        arch="ppc"
1766
        enable fast_unaligned
1767
    ;;
1768
    ppc64)
1769
        arch="ppc"
1770
        subarch="ppc64"
1771
        enable fast_64bit
1772
        enable fast_unaligned
1773
    ;;
1774
    s390|s390x)
1775
        arch="s390"
1776
    ;;
1777
    sh4|sh)
1778
        arch="sh4"
1779
    ;;
1780
    sparc)
1781
        arch="sparc"
1782
        pic=$shared
1783
    ;;
1784
    sun4u|sparc64)
1785
        arch="sparc"
1786
        subarch="sparc64"
1787
        enable fast_64bit
1788
        pic=$shared
1789
    ;;
1790
    i386|i486|i586|i686|i86pc|BePC)
1791
        arch="x86"
1792
        subarch="x86_32"
1793
        enable fast_unaligned
1794
    ;;
1795
    x86_64|amd64)
1796
        arch="x86"
1797
        subarch="x86_32"
1798
        enable cmov
1799
        enable fast_cmov
1800
        enable fast_unaligned
1801
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && pic=$shared
1802
        int test[sizeof(char*) - 7];
1803
EOF
1804
    ;;
1805
    *)
1806
        arch="unknown"
1807
    ;;
1808
esac
1809

    
1810
enable $arch $subarch
1811

    
1812
# OS specific
1813
case $target_os in
1814
    beos|haiku|zeta)
1815
        prefix_default="$HOME/config"
1816
        # helps building libavcodec
1817
        add_cppflags -DPIC
1818
        add_cflags -fomit-frame-pointer
1819
        # 3 gcc releases known for BeOS, each with ugly bugs
1820
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1821
        case "$gcc_version" in
1822
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1823
            disable mmx
1824
            ;;
1825
          *20010315*) echo "BeBits gcc"
1826
            add_cflags -fno-expensive-optimizations
1827
            ;;
1828
        esac
1829
        SHFLAGS=-nostart
1830
        # enable BeOS things
1831
        enable audio_beos
1832
        # no need for libm, but the inet stuff
1833
        # Check for BONE
1834
        # XXX: actually should check for NOT net_server
1835
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1836
            network_extralibs="-lbind -lsocket"
1837
        else
1838
            enable beos_netserver
1839
            network_extralibs="-lnet"
1840
        fi ;;
1841
    sunos)
1842
        FFSERVERLDFLAGS=""
1843
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1844
        network_extralibs="-lsocket -lnsl"
1845
        add_cppflags -D__EXTENSIONS__
1846
        ;;
1847
    netbsd)
1848
        oss_indev_extralibs="-lossaudio"
1849
        oss_outdev_extralibs="-lossaudio"
1850
        ;;
1851
    openbsd)
1852
        enable malloc_aligned
1853
        enable pic
1854
        SHFLAGS='-shared'
1855
        oss_indev_extralibs="-lossaudio"
1856
        oss_outdev_extralibs="-lossaudio"
1857
        ;;
1858
    freebsd|dragonfly)
1859
        enable malloc_aligned
1860
        ;;
1861
    bsd/os)
1862
        osextralibs="-lpoll -lgnugetopt"
1863
        strip="strip -d"
1864
        ;;
1865
    darwin)
1866
        enable malloc_aligned
1867
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1868
        strip="strip -x"
1869
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1870
        SLIBSUF=".dylib"
1871
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1872
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1873
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1874
        objformat="macho"
1875
        enabled x86_64 && objformat="macho64"
1876
        enabled shared ||
1877
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1878
        ;;
1879
    mingw32*)
1880
        if test $target_os = "mingw32ce"; then
1881
            disable network
1882
        else
1883
            target_os=mingw32
1884
        fi
1885
        LIBTARGET=i386
1886
        if enabled x86_64; then
1887
            enable malloc_aligned
1888
            LIBTARGET=x64
1889
        elif enabled arm; then
1890
            LIBTARGET=arm
1891
        fi
1892
        shlibdir_default="$bindir_default"
1893
        disable ffserver
1894
        SLIBPREF=""
1895
        SLIBSUF=".dll"
1896
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1897
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1898
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1899
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1900
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1901
            install -d "$(LIBDIR)"; \
1902
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1903
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1904
        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'
1905
        objformat="win32"
1906
        enable dos_paths
1907
        check_cflags -fno-common
1908
        if ! enabled x86_64; then
1909
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1910
                die "ERROR: MinGW runtime version must be >= 3.15."
1911
            enabled_any avisynth vfwcap_indev &&
1912
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1913
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1914
            fi
1915
        ;;
1916
    cygwin*)
1917
        target_os=cygwin
1918
        shlibdir_default="$bindir_default"
1919
        SLIBPREF="cyg"
1920
        SLIBSUF=".dll"
1921
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1922
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1923
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1924
        objformat="win32"
1925
        enable dos_paths
1926
        check_cflags -fno-common
1927
        ;;
1928
    *-dos|freedos|opendos)
1929
        disable ffplay ffserver
1930
        disable $INDEV_LIST $OUTDEV_LIST
1931
        network_extralibs="-lsocket"
1932
        objformat="coff"
1933
        enable dos_paths
1934
        ;;
1935
    linux)
1936
        enable dv1394
1937
        ;;
1938
    irix*)
1939
        target_os=irix
1940
        ranlib="echo ignoring ranlib"
1941
        ;;
1942
    os/2*)
1943
        strip="lxlite"
1944
        ln_s="cp -f"
1945
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1946
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1947
        FFSERVERLDFLAGS=""
1948
        LIBSUF="_s.a"
1949
        SLIBPREF=""
1950
        SLIBSUF=".dll"
1951
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1952
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1953
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1954
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1955
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1956
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1957
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1958
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1959
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1960
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1961
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1962
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1963
        enable dos_paths
1964
        ;;
1965
    gnu/kfreebsd)
1966
        ;;
1967
    gnu)
1968
        ;;
1969

    
1970
    *)
1971
        die "Unknown OS '$target_os'."
1972
        ;;
1973
esac
1974

    
1975
set_default $PATHS_LIST
1976

    
1977
add_extralibs $osextralibs
1978

    
1979
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1980
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1981

    
1982
# we need to build at least one lib type
1983
if ! enabled_any static shared; then
1984
    cat <<EOF
1985
At least one library type must be built.
1986
Specify --enable-static to build the static libraries or --enable-shared to
1987
build the shared libraries as well. To only build the shared libraries specify
1988
--disable-static in addition to --enable-shared.
1989
EOF
1990
    exit 1;
1991
fi
1992

    
1993
disabled static && LIBNAME=""
1994

    
1995
if enabled_any libfaad libfaadbin ; then
1996
    if check_header faad.h; then
1997
        check_cc <<EOF
1998
#include <faad.h>
1999
#ifndef FAAD2_VERSION
2000
ok faad1
2001
#endif
2002
int main(void) { return 0; }
2003
EOF
2004
        test $? = 0 && enable libfaad2
2005
    else
2006
        die "FAAD test failed."
2007
    fi
2008
fi
2009

    
2010

    
2011
die_license_disabled() {
2012
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2013
}
2014

    
2015
die_license_disabled gpl libfaad2
2016
die_license_disabled gpl libx264
2017
die_license_disabled gpl libxvid
2018
die_license_disabled gpl postproc
2019
die_license_disabled gpl x11grab
2020

    
2021
die_license_disabled nonfree libfaac
2022

    
2023
die_license_disabled version3 libopencore_amrnb
2024
die_license_disabled version3 libopencore_amrwb
2025

    
2026
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2027

    
2028
check_deps $ARCH_EXT_LIST
2029

    
2030
disabled optimizations || check_cflags -fomit-frame-pointer
2031

    
2032
check_cc <<EOF || die "Symbol mangling check failed."
2033
int ff_extern;
2034
EOF
2035
sym=$($nm -P -g $TMPO | grep ff_extern)
2036
extern_prefix=${sym%%ff_extern*}
2037

    
2038
check_cc <<EOF && enable inline_asm
2039
void foo(void) { __asm__ volatile ("" ::); }
2040
EOF
2041

    
2042
_restrict=
2043
for restrict_keyword in restrict __restrict__ __restrict; do
2044
    check_cc <<EOF && _restrict=$restrict_keyword && break
2045
void foo(char * $restrict_keyword p);
2046
EOF
2047
done
2048

    
2049
check_cc <<EOF && enable attribute_packed
2050
struct { int x; } __attribute__((packed)) x;
2051
EOF
2052

    
2053
check_cc <<EOF || die "endian test failed"
2054
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2055
EOF
2056
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2057

    
2058
if enabled arm; then
2059

    
2060
    check_ld <<EOF && enable vfp_args
2061
__asm__ (".eabi_attribute 28, 1");
2062
int main(void) { return 0; }
2063
EOF
2064

    
2065
    # We have to check if pld is a nop and disable it.
2066
    check_asm pld '"pld [r0]"'
2067

    
2068
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2069
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2070
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2071
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2072
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2073
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2074

    
2075
elif enabled mips; then
2076

    
2077
    check_asm loongson '"dmult.g $1, $2, $3"'
2078
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2079

    
2080
elif enabled ppc; then
2081

    
2082
    check_asm dcbzl     '"dcbzl 0, 1"'
2083
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2084
    check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2085

    
2086
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2087
    if enabled altivec; then
2088
        check_cflags -maltivec -mabi=altivec &&
2089
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2090
        check_cflags -faltivec
2091

    
2092
        # check if our compiler supports Motorola AltiVec C API
2093
        check_cc <<EOF || disable altivec
2094
$inc_altivec_h
2095
int main(void) {
2096
    vector signed int v1, v2, v3;
2097
    v1 = vec_add(v2,v3);
2098
    return 0;
2099
}
2100
EOF
2101

    
2102
        # check if our compiler supports braces for vector declarations
2103
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2104
$inc_altivec_h
2105
int main (void) { (vector int) {1}; return 0; }
2106
EOF
2107
    fi
2108

    
2109
elif enabled sparc; then
2110

    
2111
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2112
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2113

    
2114
elif enabled x86; then
2115

    
2116
    # check whether EBP is available on x86
2117
    # As 'i' is stored on the stack, this program will crash
2118
    # if the base pointer is used to access it because the
2119
    # base pointer is cleared in the inline assembly code.
2120
    check_exec_crash <<EOF && enable ebp_available
2121
    volatile int i=0;
2122
    __asm__ volatile (
2123
        "xorl %%ebp, %%ebp"
2124
    ::: "%ebp");
2125
    return i;
2126
EOF
2127

    
2128
    # check wether EBX is available on x86
2129
    check_asm ebx_available '"":::"%ebx"'
2130

    
2131
    # check whether more than 10 operands are supported
2132
    check_cc <<EOF && enable ten_operands
2133
int main(void) {
2134
    int x=0;
2135
    __asm__ volatile(
2136
        ""
2137
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2138
    );
2139
    return 0;
2140
}
2141
EOF
2142

    
2143
    # check whether binutils is new enough to compile SSSE3/MMX2
2144
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2145
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2146

    
2147
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2148

    
2149
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2150
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2151
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2152
    case "$objformat" in
2153
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2154
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2155
        *)                    append YASMFLAGS "-DPREFIX"  ;;
2156
    esac
2157
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2158

    
2159
fi
2160

    
2161
if check_func dlopen; then
2162
    ldl=
2163
elif check_func dlopen -ldl; then
2164
    ldl=-ldl
2165
fi
2166

    
2167
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2168
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2169

    
2170
check_func  fork
2171
check_func  gethrtime
2172
check_func  getrusage
2173
check_func  inet_aton $network_extralibs
2174
check_func  isatty
2175
check_func  memalign
2176
check_func  mkstemp
2177
check_func  posix_memalign
2178
check_func_headers io.h setmode
2179
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2180
check_func_headers windows.h GetProcessTimes
2181
check_func_headers windows.h VirtualAlloc
2182

    
2183
check_header conio.h
2184
check_header dlfcn.h
2185
check_header malloc.h
2186
check_header poll.h
2187
check_header sys/mman.h
2188
check_header sys/resource.h
2189
check_header sys/select.h
2190
check_header termios.h
2191
check_header vdpau/vdpau.h
2192
check_header vdpau/vdpau_x11.h
2193
check_header X11/extensions/XvMClib.h
2194

    
2195
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2196
     enabled_any $need_memalign ; then
2197
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2198
fi
2199

    
2200
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2201
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2202

    
2203
# check for some common methods of building with pthread support
2204
# do this before the optional library checks as some of them require pthreads
2205
if enabled pthreads; then
2206
    if check_func pthread_create; then
2207
        :
2208
    elif check_func pthread_create -pthread; then
2209
        add_cflags -pthread
2210
        add_extralibs -pthread
2211
    elif check_func pthread_create -pthreads; then
2212
        add_cflags -pthreads
2213
        add_extralibs -pthreads
2214
    elif check_func pthread_create -lpthreadGC2; then
2215
        add_extralibs -lpthreadGC2
2216
    elif ! check_lib pthread.h pthread_create -lpthread; then
2217
        die "ERROR: can't find pthreads library"
2218
    fi
2219
fi
2220

    
2221
for thread in $THREADS_LIST; do
2222
    if enabled $thread; then
2223
        test -n "$thread_type" &&
2224
            die "ERROR: Only one thread type must be selected." ||
2225
            thread_type="$thread"
2226
    fi
2227
done
2228

    
2229
check_lib math.h sin -lm
2230
check_lib va/va.h vaInitialize -lva
2231

    
2232
check_func llrint
2233
check_func log2
2234
check_func lrint
2235
check_func lrintf
2236
check_func round
2237
check_func roundf
2238
check_func truncf
2239

    
2240
# these are off by default, so fail if requested and not available
2241
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2242
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2243
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2244
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2245
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2246
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2247
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2248
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2249
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2250
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2251
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2252
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2253
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2254
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2255
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2256
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2257
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2258
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2259
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2260
                        die "ERROR: libx264 version must be >= 0.65."; }
2261
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2262
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2263

    
2264
# libdc1394 check
2265
if enabled libdc1394; then
2266
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2267
        enable libdc1394_2; } ||
2268
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2269
        enable libdc1394_1; } ||
2270
    die "ERROR: No version of libdc1394 found "
2271
fi
2272

    
2273
disable sdl_too_old
2274
disable sdl
2275
SDL_CONFIG="${cross_prefix}sdl-config"
2276
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2277
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2278
    temp_cflags $sdl_cflags
2279
    temp_extralibs $("${SDL_CONFIG}" --libs)
2280
    if check_lib2 SDL.h SDL_Init; then
2281
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2282
        if test "$_sdlversion" -lt 121 ; then
2283
            enable sdl_too_old
2284
        else
2285
            enable sdl
2286
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2287
#include <SDL.h>
2288
int main(int argc, char **argv){
2289
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2290
    int w = vi->current_w;
2291
    return 0;
2292
}
2293
EOF
2294
        fi
2295
    fi
2296
    restore_flags
2297
fi
2298

    
2299
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2300

    
2301
if enabled network; then
2302
    check_type "sys/types.h sys/socket.h" socklen_t
2303
    # Prefer arpa/inet.h over winsock2
2304
    if check_header arpa/inet.h ; then
2305
        check_func closesocket
2306
    elif check_header winsock2.h ; then
2307
        check_func_headers winsock2.h closesocket -lws2 && \
2308
            network_extralibs="-lws2" || \
2309
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2310
            network_extralibs="-lws2_32"; }
2311
        check_type ws2tcpip.h socklen_t
2312
    else
2313
        disable network
2314
    fi
2315
fi
2316

    
2317
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2318
#include <sys/types.h>
2319
#include <sys/socket.h>
2320
#include <netinet/in.h>
2321
#include <netdb.h>
2322
int main(void) {
2323
    struct sockaddr_storage saddr;
2324
    struct ipv6_mreq mreq6;
2325
    getaddrinfo(0,0,0,0);
2326
    getnameinfo(0,0,0,0,0,0,0);
2327
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2328
}
2329
EOF
2330

    
2331
check_header linux/videodev.h
2332
check_header linux/videodev2.h
2333
check_header sys/videoio.h
2334

    
2335
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2336

    
2337
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2338
{ check_header dev/bktr/ioctl_meteor.h &&
2339
  check_header dev/bktr/ioctl_bt848.h; } ||
2340
{ check_header machine/ioctl_meteor.h &&
2341
  check_header machine/ioctl_bt848.h; } ||
2342
{ check_header dev/video/meteor/ioctl_meteor.h &&
2343
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2344
check_header dev/ic/bt8xx.h
2345

    
2346
check_header sys/soundcard.h
2347
check_header soundcard.h
2348

    
2349
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2350

    
2351
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2352

    
2353
enabled x11grab                         &&
2354
check_header X11/Xlib.h                 &&
2355
check_header X11/extensions/XShm.h      &&
2356
check_func XOpenDisplay -lX11           &&
2357
check_func XShmCreateImage -lX11 -lXext
2358

    
2359
enabled debug && add_cflags -g"$debuglevel"
2360

    
2361
# add some useful compiler flags if supported
2362
check_cflags -Wdeclaration-after-statement
2363
check_cflags -Wall
2364
check_cflags -Wno-switch
2365
check_cflags -Wdisabled-optimization
2366
check_cflags -Wpointer-arith
2367
check_cflags -Wredundant-decls
2368
check_cflags -Wno-pointer-sign
2369
check_cflags -Wcast-qual
2370
check_cflags -Wwrite-strings
2371
check_cflags -Wtype-limits
2372
check_cflags -Wundef
2373
enabled extra_warnings && check_cflags -Winline
2374

    
2375
# add some linker flags
2376
check_ldflags -Wl,--warn-common
2377
check_ldflags -Wl,--as-needed
2378
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'
2379
check_ldflags -Wl,-Bsymbolic
2380

    
2381
if enabled small; then
2382
    check_cflags -Os            # not all compilers support -Os
2383
    optimizations="small"
2384
elif enabled optimizations; then
2385
    if enabled xlc; then
2386
        add_cflags  -O5
2387
        add_ldflags -O5
2388
    elif enabled ccc; then
2389
        add_cflags -fast
2390
    else
2391
        add_cflags -O3
2392
    fi
2393
fi
2394
check_cflags -fno-math-errno
2395
check_cflags -fno-signed-zeros
2396

    
2397
if enabled icc; then
2398
    # Just warnings, no remarks
2399
    check_cflags -w1
2400
    # -wd: Disable following warnings
2401
    # 144, 167, 556: -Wno-pointer-sign
2402
    # 10006: ignoring unknown option -fno-signed-zeros
2403
    # 10156: ignoring option '-W'; no argument required
2404
    check_cflags -wd144,167,556,10006,10156
2405
    # 11030: Warning unknown option --as-needed
2406
    # 10156: ignoring option '-export'; no argument required
2407
    check_ldflags -wd10156,11030
2408
    # Allow to compile with optimizations
2409
    check_ldflags -march=$cpu
2410
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2411
    enable ebp_available
2412
elif enabled ccc; then
2413
    # disable some annoying warnings
2414
    add_cflags -msg_disable cvtu32to64
2415
    add_cflags -msg_disable embedcomment
2416
    add_cflags -msg_disable needconstext
2417
    add_cflags -msg_disable nomainieee
2418
    add_cflags -msg_disable ptrmismatch1
2419
    add_cflags -msg_disable unreachcode
2420
elif enabled gcc; then
2421
    check_cflags -fno-tree-vectorize
2422
fi
2423

    
2424
enabled pic && LIBOBJFLAGS='$(PIC)'
2425

    
2426
if enabled gprof; then
2427
    add_cflags  -p
2428
    add_ldflags -p
2429
fi
2430

    
2431
# Find out if the .align argument is a power of two or not.
2432
check_asm asmalign_pot '".align 3"'
2433

    
2434
enabled_any $DECODER_LIST      && enable decoders
2435
enabled_any $ENCODER_LIST      && enable encoders
2436
enabled_any $HWACCEL_LIST      && enable hwaccels
2437
enabled_any $BSF_LIST          && enable bsfs
2438
enabled_any $DEMUXER_LIST      && enable demuxers
2439
enabled_any $MUXER_LIST        && enable muxers
2440
enabled_any $FILTER_LIST       && enable filters
2441
enabled_any $INDEV_LIST        && enable indevs
2442
enabled_any $OUTDEV_LIST       && enable outdevs
2443
enabled_any $PROTOCOL_LIST     && enable protocols
2444

    
2445
enabled_any $THREADS_LIST      && enable threads
2446

    
2447
check_deps $CONFIG_LIST       \
2448
           $CONFIG_EXTRA      \
2449
           $HAVE_LIST         \
2450
           $DECODER_LIST      \
2451
           $ENCODER_LIST      \
2452
           $HWACCEL_LIST      \
2453
           $PARSER_LIST       \
2454
           $BSF_LIST          \
2455
           $DEMUXER_LIST      \
2456
           $MUXER_LIST        \
2457
           $FILTER_LIST       \
2458
           $INDEV_LIST        \
2459
           $OUTDEV_LIST       \
2460
           $PROTOCOL_LIST     \
2461

    
2462
echo "install prefix            $prefix"
2463
echo "source path               $source_path"
2464
echo "C compiler                $cc"
2465
echo ".align is power-of-two    $asmalign_pot"
2466
echo "ARCH                      $arch ($cpu)"
2467
if test "$build_suffix" != ""; then
2468
    echo "build suffix              $build_suffix"
2469
fi
2470
if test "$extra_version" != ""; then
2471
    echo "version string suffix     $extra_version"
2472
fi
2473
echo "big-endian                ${bigendian-no}"
2474
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2475
if enabled x86; then
2476
    echo "yasm                      ${yasm-no}"
2477
    echo "MMX enabled               ${mmx-no}"
2478
    echo "MMX2 enabled              ${mmx2-no}"
2479
    echo "3DNow! enabled            ${amd3dnow-no}"
2480
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2481
    echo "SSE enabled               ${sse-no}"
2482
    echo "SSSE3 enabled             ${ssse3-no}"
2483
    echo "CMOV enabled              ${cmov-no}"
2484
    echo "CMOV is fast              ${fast_cmov-no}"
2485
    echo "EBX available             ${ebx_available-no}"
2486
    echo "EBP available             ${ebp_available-no}"
2487
    echo "10 operands supported     ${ten_operands-no}"
2488
fi
2489
if enabled arm; then
2490
    echo "ARMv5TE enabled           ${armv5te-no}"
2491
    echo "ARMv6 enabled             ${armv6-no}"
2492
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2493
    echo "ARM VFP enabled           ${armvfp-no}"
2494
    echo "IWMMXT enabled            ${iwmmxt-no}"
2495
    echo "NEON enabled              ${neon-no}"
2496
fi
2497
if enabled mips; then
2498
    echo "MMI enabled               ${mmi-no}"
2499
fi
2500
if enabled ppc; then
2501
    echo "AltiVec enabled           ${altivec-no}"
2502
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2503
    echo "dcbzl available           ${dcbzl-no}"
2504
    echo "performance report        ${powerpc_perf-no}"
2505
fi
2506
if enabled sparc; then
2507
    echo "VIS enabled               ${vis-no}"
2508
fi
2509
echo "gprof enabled             ${gprof-no}"
2510
echo "debug symbols             ${debug-no}"
2511
echo "strip symbols             ${stripping-no}"
2512
echo "optimizations             ${optimizations-no}"
2513
echo "static                    ${static-no}"
2514
echo "shared                    ${shared-no}"
2515
echo "postprocessing support    ${postproc-no}"
2516
echo "new filter support        ${avfilter-no}"
2517
echo "filters using lavformat   ${avfilter_lavf-no}"
2518
echo "network support           ${network-no}"
2519
if enabled network; then
2520
    echo "IPv6 support              ${ipv6-no}"
2521
fi
2522
echo "threading support         ${thread_type-no}"
2523
echo "SDL support               ${sdl-no}"
2524
if enabled sdl_too_old; then
2525
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2526
fi
2527
echo "Sun medialib support      ${mlib-no}"
2528
echo "AVISynth enabled          ${avisynth-no}"
2529
echo "libdc1394 support         ${libdc1394-no}"
2530
echo "libdirac enabled          ${libdirac-no}"
2531
echo "libfaac enabled           ${libfaac-no}"
2532
echo "libfaad enabled           ${libfaad-no}"
2533
echo "libfaad dlopened          ${libfaadbin-no}"
2534
echo "libgsm enabled            ${libgsm-no}"
2535
echo "libmp3lame enabled        ${libmp3lame-no}"
2536
echo "libnut enabled            ${libnut-no}"
2537
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2538
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2539
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2540
echo "libschroedinger enabled   ${libschroedinger-no}"
2541
echo "libspeex enabled          ${libspeex-no}"
2542
echo "libtheora enabled         ${libtheora-no}"
2543
echo "libvorbis enabled         ${libvorbis-no}"
2544
echo "libx264 enabled           ${libx264-no}"
2545
echo "libxvid enabled           ${libxvid-no}"
2546
echo "zlib enabled              ${zlib-no}"
2547
echo "bzlib enabled             ${bzlib-no}"
2548
echo
2549

    
2550
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2551
    echo "Enabled ${type}s:"
2552
    eval list=\$$(toupper $type)_LIST
2553
    for part in $list; do
2554
        enabled $part && echo ${part%_*}
2555
    done | sort | pr -3 -t
2556
    echo
2557
done
2558

    
2559
license="LGPL version 2.1 or later"
2560
if enabled nonfree; then
2561
    license="nonfree and unredistributable"
2562
elif enabled gplv3; then
2563
    license="GPL version 3 or later"
2564
elif enabled lgplv3; then
2565
    license="LGPL version 3 or later"
2566
elif enabled gpl; then
2567
    license="GPL version 2 or later"
2568
fi
2569

    
2570
echo "License: $license"
2571

    
2572
echo "Creating config.mak and config.h..."
2573

    
2574
echo "# Automatically generated by configure - do not modify!" > config.mak
2575
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2576
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2577
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2578
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2579
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2580

    
2581
echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2582
echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2583

    
2584
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2585
echo "prefix=$prefix" >> config.mak
2586
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2587
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2588
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2589
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2590
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2591
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2592
echo "SRC_PATH=\"$source_path\"" >> config.mak
2593
echo "SRC_PATH_BARE=$source_path" >> config.mak
2594
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2595
echo "CC=$cc" >> config.mak
2596
echo "AS=$as" >> config.mak
2597
echo "LD=$ld" >> config.mak
2598
echo "DEPCC=$dep_cc" >> config.mak
2599
echo "YASM=$yasmexe" >> config.mak
2600
echo "AR=$ar" >> config.mak
2601
echo "RANLIB=$ranlib" >> config.mak
2602
echo "LN_S=$ln_s" >> config.mak
2603
enabled stripping &&
2604
    echo "STRIP=$strip" >> config.mak ||
2605
    echo "STRIP=echo ignoring strip" >> config.mak
2606

    
2607
echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2608
echo "CFLAGS=$CFLAGS" >> config.mak
2609
echo "ASFLAGS=$ASFLAGS" >> config.mak
2610
echo "CC_O=$CC_O" >> config.mak
2611
echo "LDFLAGS=$LDFLAGS" >> config.mak
2612
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2613
echo "SHFLAGS=$SHFLAGS" >> config.mak
2614
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2615
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2616
echo "PIC=-fPIC -DPIC" >> config.mak
2617
echo "BUILDSUF=$build_suffix" >> config.mak
2618
echo "FULLNAME=$FULLNAME" >> config.mak
2619
echo "LIBPREF=$LIBPREF" >> config.mak
2620
echo "LIBSUF=$LIBSUF" >> config.mak
2621
echo "LIBNAME=$LIBNAME" >> config.mak
2622
echo "SLIBPREF=$SLIBPREF" >> config.mak
2623
echo "SLIBSUF=$SLIBSUF" >> config.mak
2624
echo "EXESUF=$EXESUF" >> config.mak
2625
echo "EXTRA_VERSION=$extra_version" >> config.mak
2626
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2627
echo "CCDEP=$CCDEP" >> config.mak
2628
echo "ASDEP=$ASDEP" >> config.mak
2629
echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2630
echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2631
echo "HOSTCC=$host_cc" >> config.mak
2632
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2633
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2634
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2635
echo "HOSTLIBS=$host_libs" >> config.mak
2636
echo "TARGET_EXEC=$target_exec" >> config.mak
2637
echo "TARGET_PATH=$target_path" >> config.mak
2638

    
2639
if enabled sdl; then
2640
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2641
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2642
fi
2643
if enabled texi2html; then
2644
    echo "BUILD_DOC=yes" >> config.mak
2645
fi
2646

    
2647
get_version(){
2648
    name=$1
2649
    file=$source_path/$2
2650
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2651
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2652
    lcname=$(tolower $name)
2653
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2654
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2655
}
2656

    
2657
get_version LIBSWSCALE  libswscale/swscale.h
2658
get_version LIBPOSTPROC libpostproc/postprocess.h
2659
get_version LIBAVCODEC  libavcodec/avcodec.h
2660
get_version LIBAVDEVICE libavdevice/avdevice.h
2661
get_version LIBAVFORMAT libavformat/avformat.h
2662
get_version LIBAVUTIL   libavutil/avutil.h
2663
get_version LIBAVFILTER libavfilter/avfilter.h
2664

    
2665
if enabled shared; then
2666
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2667
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2668
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2669
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2670
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2671
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2672
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2673
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2674
fi
2675
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2676
echo "EXTRALIBS=$extralibs" >> config.mak
2677

    
2678
echo "ARCH=$arch" >> config.mak
2679

    
2680
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2681
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2682
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2683
                                      $CONFIG_EXTRA      \
2684
                                      $DECODER_LIST      \
2685
                                      $ENCODER_LIST      \
2686
                                      $HWACCEL_LIST      \
2687
                                      $PARSER_LIST       \
2688
                                      $BSF_LIST          \
2689
                                      $DEMUXER_LIST      \
2690
                                      $MUXER_LIST        \
2691
                                      $FILTER_LIST       \
2692
                                      $PROTOCOL_LIST     \
2693
                                      $INDEV_LIST        \
2694
                                      $OUTDEV_LIST       \
2695

    
2696
echo "#define restrict $_restrict" >> $TMPH
2697

    
2698
if enabled small || disabled optimizations; then
2699
    echo "#define av_always_inline"  >> $TMPH
2700
fi
2701

    
2702

    
2703
# Apparently it's not possible to portably echo a backslash.
2704
enabled asmalign_pot &&
2705
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2706
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2707

    
2708
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2709

    
2710
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2711
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2712

    
2713
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2714
cmp -s $TMPH config.h &&
2715
    echo "config.h is unchanged" ||
2716
    mv -f $TMPH config.h
2717

    
2718
# build tree in object directory if source path is different from current one
2719
if enabled source_path_used; then
2720
    DIRS="\
2721
        doc               \
2722
        libavcodec        \
2723
        libavcodec/alpha  \
2724
        libavcodec/arm    \
2725
        libavcodec/bfin   \
2726
        libavcodec/mlib   \
2727
        libavcodec/ppc    \
2728
        libavcodec/sh4    \
2729
        libavcodec/sparc  \
2730
        libavcodec/x86    \
2731
        libavdevice       \
2732
        libavfilter       \
2733
        libavformat       \
2734
        libavutil         \
2735
        libpostproc       \
2736
        libswscale        \
2737
        libswscale/bfin   \
2738
        libswscale/mlib   \
2739
        libswscale/ppc    \
2740
        libswscale/sparc  \
2741
        libswscale/x86    \
2742
        tests             \
2743
        tools             \
2744
        "
2745
    FILES="\
2746
        Makefile             \
2747
        common.mak           \
2748
        subdir.mak           \
2749
        doc/texi2pod.pl      \
2750
        libavcodec/Makefile  \
2751
        libavdevice/Makefile \
2752
        libavfilter/Makefile \
2753
        libavformat/Makefile \
2754
        libavutil/Makefile   \
2755
        libpostproc/Makefile \
2756
        libswscale/Makefile  \
2757
        "
2758
    for dir in $DIRS ; do
2759
        mkdir -p $dir
2760
    done
2761
    for f in $FILES ; do
2762
        $ln_s "$source_path/$f" $f
2763
    done
2764
fi
2765

    
2766

    
2767
# build pkg-config files
2768

    
2769
pkgconfig_generate(){
2770
name=$1
2771
shortname=${name#lib}${build_suffix}
2772
comment=$2
2773
version=$3
2774
libs=$4
2775
requires=$5
2776
cat <<EOF > $name/$name.pc
2777
prefix=$prefix
2778
exec_prefix=\${prefix}
2779
libdir=$libdir
2780
includedir=$incdir
2781

    
2782
Name: $name
2783
Description: $comment
2784
Version: $version
2785
Requires: $(disabled shared && echo $requires)
2786
Requires.private: $(enabled shared && echo $requires)
2787
Conflicts:
2788
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2789
Libs.private: $(enabled shared && echo $libs)
2790
Cflags: -I\${includedir}
2791
EOF
2792
cat <<EOF > $name/$name-uninstalled.pc
2793
prefix=
2794
exec_prefix=
2795
libdir=\${pcfiledir}
2796
includedir=${source_path}
2797

    
2798
Name: $name
2799
Description: $comment
2800
Version: $version
2801
Requires: $requires
2802
Conflicts:
2803
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2804
Cflags: -I\${includedir}
2805
EOF
2806
}
2807

    
2808
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2809
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2810
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2811
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2812
enabled avfilter &&
2813
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2814
enabled postproc &&
2815
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2816
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"