Statistics
| Branch: | Revision:

ffmpeg / configure @ f95bfab0

History | View | Annotate | Download (82.7 KB)

1 aeb29222 Måns Rullgård
#!/bin/sh
2 0f3cb305 Fabrice Bellard
#
3 f57620d5 Måns Rullgård
# FFmpeg configure script
4
#
5 949906ea Diego Biurrun
# Copyright (c) 2000-2002 Fabrice Bellard
6
# Copyright (c) 2005-2008 Diego Biurrun
7
# Copyright (c) 2005-2008 Mans Rullgard
8 0f3cb305 Fabrice Bellard
#
9 cf9d24ad Dan Christiansen
10 31e647f8 Diego Biurrun
# Prevent locale nonsense from breaking basic text processing.
11 79ab96ba Diego Biurrun
LC_ALL=C
12
export LC_ALL
13 31e647f8 Diego Biurrun
14 cde2d79a Måns Rullgård
# make sure we are running under a compatible shell
15 c21d6325 Måns Rullgård
# try to make this part work with most shells
16
17
try_exec(){
18 0dbe81bb Måns Rullgård
    echo "Trying shell $1"
19 2270b4b2 Diego Biurrun
    type "$1" > /dev/null 2>&1 && exec "$@"
20 c21d6325 Måns Rullgård
}
21
22 5237ce67 Måns Rullgård
unset foo
23 2270b4b2 Diego Biurrun
(: ${foo%%bar}) 2> /dev/null
24 0dbe81bb Måns Rullgård
E1="$?"
25
26 2270b4b2 Diego Biurrun
(: ${foo?}) 2> /dev/null
27 0dbe81bb Måns Rullgård
E2="$?"
28
29
if test "$E1" != 0 || test "$E2" = 0; then
30
    echo "Broken shell detected.  Trying alternatives."
31 c21d6325 Måns Rullgård
    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 cde2d79a Måns Rullgård
    fi
44
    echo "No compatible shell script interpreter found."
45 fc53da20 Diego Biurrun
    echo "This configure script requires a POSIX-compatible shell"
46 c21d6325 Måns Rullgård
    echo "such as bash or ksh."
47 505dfb09 Diego Biurrun
    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 c21d6325 Måns Rullgård
    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 cde2d79a Måns Rullgård
    exit 1
55
fi
56
57 74c53c2d Måns Rullgård
show_help(){
58 06454877 Måns Rullgård
cat <<EOF
59
Usage: configure [options]
60
Options: [defaults in brackets after descriptions]
61
62
Standard options:
63
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.err]
65
  --disable-logging        do not log configure debug information
66
  --prefix=PREFIX          install in PREFIX [$prefix]
67
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
68
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69
  --libdir=DIR             install libs in DIR [PREFIX/lib]
70
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71
  --incdir=DIR             install includes in DIR [PREFIX/include]
72
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
73
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffserver       disable ffserver build
86
  --enable-postproc        enable GPLed postprocessing support [no]
87
  --enable-avfilter        video filter support [no]
88
  --enable-avfilter-lavf   video filters dependent on avformat [no]
89
  --enable-beosthreads     use BeOS threads [no]
90
  --enable-os2threads      use OS/2 threads [no]
91
  --enable-pthreads        use pthreads [no]
92
  --enable-w32threads      use Win32 threads [no]
93
  --enable-x11grab         enable X11 grabbing [no]
94
  --disable-network        disable network support [no]
95
  --disable-ipv6           disable IPv6 support [no]
96
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
97
  --enable-gray            enable full grayscale support (slower color)
98
  --disable-swscale-alpha  disable alpha channel support in swscale
99
  --disable-fastdiv        disable table-based division
100
  --enable-small           optimize for size instead of speed
101
  --disable-aandct         disable AAN DCT code
102
  --disable-fft            disable FFT code
103
  --disable-golomb         disable Golomb code
104
  --disable-lpc            disable LPC code
105
  --disable-mdct           disable MDCT code
106
  --disable-rdft           disable RDFT code
107
  --disable-vaapi          disable VAAPI code
108
  --disable-vdpau          disable VDPAU code
109
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
110
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
111
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
112
  --enable-beos-netserver  enable BeOS netserver
113
  --disable-encoder=NAME   disable encoder NAME
114
  --enable-encoder=NAME    enable encoder NAME
115
  --disable-encoders       disable all encoders
116
  --disable-decoder=NAME   disable decoder NAME
117
  --enable-decoder=NAME    enable decoder NAME
118
  --disable-decoders       disable all decoders
119
  --disable-hwaccel=NAME   disable hwaccel NAME
120
  --enable-hwaccel=NAME    enable hwaccel NAME
121
  --disable-hwaccels       disable all hwaccels
122
  --disable-muxer=NAME     disable muxer NAME
123
  --enable-muxer=NAME      enable muxer NAME
124
  --disable-muxers         disable all muxers
125
  --disable-demuxer=NAME   disable demuxer NAME
126
  --enable-demuxer=NAME    enable demuxer NAME
127
  --disable-demuxers       disable all demuxers
128
  --enable-parser=NAME     enable parser NAME
129
  --disable-parser=NAME    disable parser NAME
130
  --disable-parsers        disable all parsers
131
  --enable-bsf=NAME        enable bitstream filter NAME
132
  --disable-bsf=NAME       disable bitstream filter NAME
133
  --disable-bsfs           disable all bitstream filters
134
  --enable-protocol=NAME   enable protocol NAME
135
  --disable-protocol=NAME  disable protocol NAME
136
  --disable-protocols      disable all protocols
137
  --disable-indev=NAME     disable input device NAME
138
  --disable-outdev=NAME    disable output device NAME
139
  --disable-indevs         disable input devices
140
  --disable-outdevs        disable output devices
141
  --disable-devices        disable all devices
142
  --enable-filter=NAME     enable filter NAME
143
  --disable-filter=NAME    disable filter NAME
144
  --disable-filters        disable all filters
145
  --list-decoders          show all available decoders
146
  --list-encoders          show all available encoders
147
  --list-hwaccels          show all available hardware accelerators
148
  --list-muxers            show all available muxers
149
  --list-demuxers          show all available demuxers
150
  --list-parsers           show all available parsers
151
  --list-protocols         show all available protocols
152
  --list-bsfs              show all available bitstream filters
153
  --list-indevs            show all available input devices
154
  --list-outdevs           show all available output devices
155
  --list-filters           show all available filters
156
157
External library support:
158
  --enable-avisynth        enable reading of AVISynth script files [no]
159
  --enable-bzlib           enable bzlib [autodetect]
160
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
161
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
162
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
163
                           and libraw1394 [no]
164
  --enable-libdirac        enable Dirac support via libdirac [no]
165
  --enable-libfaac         enable FAAC support via libfaac [no]
166
  --enable-libfaad         enable FAAD support via libfaad [no]
167
  --enable-libfaadbin      open libfaad.so.0 at runtime [no]
168
  --enable-libgsm          enable GSM support via libgsm [no]
169
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
170
  --enable-libnut          enable NUT (de)muxing via libnut,
171
                           native (de)muxer exists [no]
172
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
173
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
174
  --enable-libspeex        enable Speex decoding via libspeex [no]
175
  --enable-libtheora       enable Theora encoding via libtheora [no]
176
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
177
                           native implementation exists [no]
178
  --enable-libx264         enable H.264 encoding via x264 [no]
179
  --enable-libxvid         enable Xvid encoding via xvidcore,
180
                           native MPEG-4/Xvid encoder exists [no]
181
  --enable-mlib            enable Sun medialib [no]
182
  --enable-zlib            enable zlib [autodetect]
183
184
Advanced options (experts only):
185
  --source-path=PATH       path to source code [$source_path]
186
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
187
  --enable-cross-compile   assume a cross-compiler is used
188
  --sysroot=PATH           root of cross-build tree
189
  --sysinclude=PATH        location of cross-build system headers
190
  --target-os=OS           compiler targets OS [$target_os]
191
  --target-exec=CMD        command to run executables on target
192
  --target-path=DIR        path to view of build directory on target
193
  --nm=NM                  use nm tool
194
  --as=AS                  use assembler AS [$as_default]
195
  --cc=CC                  use C compiler CC [$cc_default]
196
  --ld=LD                  use linker LD
197
  --host-cc=HOSTCC         use host C compiler HOSTCC
198
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
199
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
200
  --host-libs=HLIBS        use libs HLIBS when linking for host
201
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
202
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
203
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
204
  --extra-version=STRING   version string suffix []
205
  --build-suffix=SUFFIX    library name suffix []
206
  --arch=ARCH              select architecture [$arch]
207
  --cpu=CPU                select the minimum required CPU (affects
208
                           instruction selection, may crash on older CPUs)
209
  --enable-powerpc-perf    enable performance report on PPC
210
                           (requires enabling PMC)
211
  --disable-altivec        disable AltiVec optimizations
212
  --disable-amd3dnow       disable 3DNow! optimizations
213
  --disable-amd3dnowext    disable 3DNow! extended optimizations
214
  --disable-mmx            disable MMX optimizations
215
  --disable-mmx2           disable MMX2 optimizations
216
  --disable-sse            disable SSE optimizations
217
  --disable-ssse3          disable SSSE3 optimizations
218
  --disable-armv5te        disable armv5te optimizations
219
  --disable-armv6          disable armv6 optimizations
220
  --disable-armv6t2        disable armv6t2 optimizations
221
  --disable-armvfp         disable ARM VFP optimizations
222
  --disable-iwmmxt         disable iwmmxt optimizations
223
  --disable-mmi            disable MMI optimizations
224
  --disable-neon           disable neon optimizations
225
  --disable-vis            disable VIS optimizations
226
  --disable-yasm           disable use of yasm assembler
227
  --enable-pic             build position-independent code
228
229
Developer options (useful when working on FFmpeg itself):
230
  --disable-debug          disable debugging symbols
231
  --enable-debug=LEVEL     set the debug level [$debuglevel]
232
  --enable-gprof           enable profiling with gprof [$gprof]
233
  --disable-optimizations  disable compiler optimizations
234
  --enable-extra-warnings  enable more compiler warnings
235
  --disable-stripping      disable stripping of executables and shared libraries
236
237
NOTE: Object files are built at the place where configure is launched.
238
EOF
239 60e8bc13 Stefano Sabatini
  exit 0
240 74c53c2d Måns Rullgård
}
241 cf9d24ad Dan Christiansen
242 57bd82d4 Måns Rullgård
log(){
243 2270b4b2 Diego Biurrun
    echo "$@" >> $logfile
244 57bd82d4 Måns Rullgård
}
245
246 720c69da Måns Rullgård
log_file(){
247 c8e9f801 Måns Rullgård
    log BEGIN $1
248 2270b4b2 Diego Biurrun
    pr -n -t $1 >> $logfile
249 c8e9f801 Måns Rullgård
    log END $1
250
}
251
252 2ba042a7 Måns Rullgård
echolog(){
253 c8e9f801 Måns Rullgård
    log "$@"
254 57bd82d4 Måns Rullgård
    echo "$@"
255 2ba042a7 Måns Rullgård
}
256
257
die(){
258
    echolog "$@"
259
    cat <<EOF
260 d326cf7f Diego Biurrun
261 2ba042a7 Måns Rullgård
If you think configure made a mistake, make sure you are using the latest
262
version from SVN.  If the latest version fails, report the problem to the
263 e5d8ccd7 Måns Rullgård
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
264 2ba042a7 Måns Rullgård
EOF
265 e155a21a Diego Biurrun
    if disabled logging; then
266 2ba042a7 Måns Rullgård
        cat <<EOF
267 e155a21a Diego Biurrun
Rerun configure with logging enabled (do not use --disable-logging), and
268
include the log this produces with your report.
269 2ba042a7 Måns Rullgård
EOF
270
    else
271
cat <<EOF
272 e155a21a Diego Biurrun
Include the log file "$logfile" produced by configure as this will help
273
solving the problem.
274 2ba042a7 Måns Rullgård
EOF
275
    fi
276 57bd82d4 Måns Rullgård
    exit 1
277
}
278
279 6c6007d6 Diego Biurrun
# Avoid locale weirdness, besides we really just want to translate ASCII.
280 44161118 Måns Rullgård
toupper(){
281 6c6007d6 Diego Biurrun
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
282 44161118 Måns Rullgård
}
283
284 4a5444db Måns Rullgård
tolower(){
285 6c6007d6 Diego Biurrun
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
286 4a5444db Måns Rullgård
}
287
288 14a8acf1 Måns Rullgård
c_escape(){
289
    echo "$*" | sed 's/["\\]/\\\0/g'
290
}
291
292 b04251c5 Måns Rullgård
sh_quote(){
293
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
294
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
295
    echo "$v"
296
}
297
298 be8f2501 Måns Rullgård
filter(){
299
    pat=$1
300
    shift
301
    for v; do
302 98ef6079 Måns Rullgård
        eval "case $v in $pat) echo $v ;; esac"
303 be8f2501 Måns Rullgård
    done
304
}
305
306 a8d04fba Måns Rullgård
set_all(){
307
    value=$1
308
    shift
309
    for var in $*; do
310
        eval $var=$value
311
    done
312
}
313
314 72a43668 Måns Rullgård
set_weak(){
315
    value=$1
316
    shift
317
    for var; do
318
        eval : \${$var:=$value}
319
    done
320
}
321
322 799c9e9b Måns Rullgård
pushvar(){
323
    for var in $*; do
324
        eval level=\${${var}_level:=0}
325
        eval ${var}_${level}="\$$var"
326
        eval ${var}_level=$(($level+1))
327
    done
328
}
329
330
popvar(){
331
    for var in $*; do
332
        eval level=\${${var}_level:-0}
333
        test $level = 0 && continue
334
        eval level=$(($level-1))
335
        eval $var="\${${var}_${level}}"
336
        eval ${var}_level=$level
337
        eval unset ${var}_${level}
338
    done
339
}
340
341 a8d04fba Måns Rullgård
enable(){
342
    set_all yes $*
343
}
344
345
disable(){
346
    set_all no $*
347
}
348
349 72a43668 Måns Rullgård
enable_weak(){
350
    set_weak yes $*
351
}
352
353
disable_weak(){
354
    set_weak no $*
355
}
356
357 72702705 Måns Rullgård
enable_safe(){
358
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
359
}
360
361
disable_safe(){
362
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
363
}
364
365 f9d328da Måns Rullgård
do_enable_deep(){
366
    for var; do
367
        enabled $var && continue
368
        eval sel="\$${var}_select"
369 c510c7b5 Måns Rullgård
        eval sgs="\$${var}_suggest"
370
        pushvar var sgs
371 f9d328da Måns Rullgård
        enable_deep $sel
372 c510c7b5 Måns Rullgård
        popvar sgs
373
        enable_deep_weak $sgs
374 f9d328da Måns Rullgård
        popvar var
375
    done
376
}
377
378
enable_deep(){
379
    do_enable_deep $*
380
    enable $*
381
}
382
383 72a43668 Måns Rullgård
enable_deep_weak(){
384
    do_enable_deep $*
385
    enable_weak $*
386
}
387
388 57bd82d4 Måns Rullgård
enabled(){
389 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
390
    eval test "x\$${1#!}" $op "xyes"
391 44161118 Måns Rullgård
}
392
393 37970ebf Ramiro Polla
disabled(){
394 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
395
    eval test "x\$${1#!}" $op "xno"
396 37970ebf Ramiro Polla
}
397
398 44161118 Måns Rullgård
enabled_all(){
399
    for opt; do
400
        enabled $opt || return 1
401
    done
402
}
403
404 85bca2c5 Diego Biurrun
disabled_all(){
405
    for opt; do
406
        disabled $opt || return 1
407
    done
408
}
409
410 44161118 Måns Rullgård
enabled_any(){
411
    for opt; do
412
        enabled $opt && return 0
413
    done
414
}
415
416 85bca2c5 Diego Biurrun
disabled_any(){
417
    for opt; do
418
        disabled $opt && return 0
419
    done
420 f7b230a7 Måns Rullgård
    return 1
421 85bca2c5 Diego Biurrun
}
422
423 c9d19248 Måns Rullgård
set_default(){
424
    for opt; do
425 88268e94 Måns Rullgård
        eval : \${$opt:=\$${opt}_default}
426 c9d19248 Måns Rullgård
    done
427
}
428
429 4a0d6686 Aurelien Jacobs
is_in(){
430
    value=$1
431
    shift
432
    for var in $*; do
433
        [ $var = $value ] && return 0
434
    done
435
    return 1
436
}
437
438 30fd06be Måns Rullgård
check_deps(){
439
    for cfg; do
440 3250003c Måns Rullgård
        cfg="${cfg#!}"
441 799c9e9b Måns Rullgård
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
442
        disabled ${cfg}_checking && continue
443
        enable ${cfg}_checking
444
445 30fd06be Måns Rullgård
        eval dep_all="\$${cfg}_deps"
446
        eval dep_any="\$${cfg}_deps_any"
447 7ef3425f Måns Rullgård
        eval dep_sel="\$${cfg}_select"
448 c510c7b5 Måns Rullgård
        eval dep_sgs="\$${cfg}_suggest"
449 799c9e9b Måns Rullgård
450 c510c7b5 Måns Rullgård
        pushvar cfg dep_all dep_any dep_sel dep_sgs
451
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
452
        popvar cfg dep_all dep_any dep_sel dep_sgs
453 799c9e9b Måns Rullgård
454 6a702d4c Måns Rullgård
        enabled_all  $dep_all || disable $cfg
455
        enabled_any  $dep_any || disable $cfg
456 7ef3425f Måns Rullgård
        disabled_any $dep_sel && disable $cfg
457 799c9e9b Måns Rullgård
458 4ec45764 Ramiro Polla
        if enabled $cfg; then
459
            eval dep_extralibs="\$${cfg}_extralibs"
460
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
461 f9d328da Måns Rullgård
            enable_deep $dep_sel
462 c510c7b5 Måns Rullgård
            enable_deep_weak $dep_sgs
463 4ec45764 Ramiro Polla
        fi
464
465 799c9e9b Måns Rullgård
        disable ${cfg}_checking
466 30fd06be Måns Rullgård
    done
467
}
468
469 44161118 Måns Rullgård
print_config(){
470
    pfx=$1
471
    header=$2
472
    makefile=$3
473
    shift 3
474
    for cfg; do
475 5e622c40 Diego Biurrun
        ucname="$(toupper $cfg)"
476 44161118 Måns Rullgård
        if enabled $cfg; then
477 3d907e22 Måns Rullgård
            echo "#define ${pfx}${ucname} 1" >> $header
478
            echo "${pfx}${ucname}=yes" >> $makefile
479
        else
480 b250f9c6 Aurelien Jacobs
            echo "#define ${pfx}${ucname} 0" >> $header
481 44161118 Måns Rullgård
        fi
482
    done
483 57bd82d4 Måns Rullgård
}
484
485
flags_saved(){
486 2270b4b2 Diego Biurrun
    (: ${SAVE_CFLAGS?}) 2> /dev/null
487 57bd82d4 Måns Rullgård
}
488
489 dcd479c0 Måns Rullgård
save_flags(){
490 57bd82d4 Måns Rullgård
    flags_saved && return
491 dcd479c0 Måns Rullgård
    SAVE_CFLAGS="$CFLAGS"
492
    SAVE_LDFLAGS="$LDFLAGS"
493
    SAVE_extralibs="$extralibs"
494
}
495
496
restore_flags(){
497 f5d28d10 Måns Rullgård
    flags_saved || return
498 dcd479c0 Måns Rullgård
    CFLAGS="$SAVE_CFLAGS"
499
    LDFLAGS="$SAVE_LDFLAGS"
500
    extralibs="$SAVE_extralibs"
501
    unset SAVE_CFLAGS
502
    unset SAVE_LDFLAGS
503
    unset SAVE_extralibs
504
}
505
506
temp_cflags(){
507
    save_flags
508
    CFLAGS="$CFLAGS $*"
509
}
510
511
temp_ldflags(){
512
    save_flags
513
    LDFLAGS="$LDFLAGS $*"
514
}
515
516
temp_extralibs(){
517
    save_flags
518
    extralibs="$extralibs $*"
519
}
520
521 57bd82d4 Måns Rullgård
append(){
522
    var=$1
523
    shift
524
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
525
    eval "$var=\"\$$var $*\""
526
}
527
528 50a334e4 Måns Rullgård
add_cppflags(){
529 caf458dd Måns Rullgård
    append CPPFLAGS $($filter_cppflags "$@")
530 50a334e4 Måns Rullgård
}
531
532 57bd82d4 Måns Rullgård
add_cflags(){
533 caf458dd Måns Rullgård
    append CFLAGS $($filter_cflags "$@")
534 57bd82d4 Måns Rullgård
}
535
536 2f2e6c7c Måns Rullgård
add_asflags(){
537 caf458dd Måns Rullgård
    append ASFLAGS $($filter_asflags "$@")
538 2f2e6c7c Måns Rullgård
}
539
540 57bd82d4 Måns Rullgård
add_ldflags(){
541
    append LDFLAGS "$@"
542
}
543
544
add_extralibs(){
545
    append extralibs "$@"
546
}
547
548 b0cfb663 Måns Rullgård
check_cmd(){
549 b3cb5d51 Måns Rullgård
    log "$@"
550 2270b4b2 Diego Biurrun
    "$@" >> $logfile 2>&1
551 b0cfb663 Måns Rullgård
}
552
553 dcd479c0 Måns Rullgård
check_cc(){
554 57bd82d4 Måns Rullgård
    log check_cc "$@"
555 2270b4b2 Diego Biurrun
    cat > $TMPC
556 720c69da Måns Rullgård
    log_file $TMPC
557 50a334e4 Måns Rullgård
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
558 57bd82d4 Måns Rullgård
}
559
560
check_cpp(){
561
    log check_cpp "$@"
562 2270b4b2 Diego Biurrun
    cat > $TMPC
563 720c69da Måns Rullgård
    log_file $TMPC
564 9e7f3277 Måns Rullgård
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
565 dcd479c0 Måns Rullgård
}
566
567 f65883c8 Måns Rullgård
check_as(){
568
    log check_as "$@"
569
    cat > $TMPC
570
    log_file $TMPC
571 2f2e6c7c Måns Rullgård
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
572 f65883c8 Måns Rullgård
}
573
574 940f335a Måns Rullgård
check_asm(){
575
    log check_asm "$@"
576
    name="$1"
577
    asm="$2"
578
    shift 2
579 49214f61 Måns Rullgård
    disable $name
580
    check_as "$@" <<EOF && enable $name
581 124c21d7 Marc Mason
void foo(void){ __asm__ volatile($asm); }
582 940f335a Måns Rullgård
EOF
583
}
584
585 304d586d Loren Merritt
check_yasm(){
586
    log check_yasm "$@"
587
    echo "$1" > $TMPS
588
    log_file $TMPS
589
    shift 1
590
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
591
}
592
593 dcd479c0 Måns Rullgård
check_ld(){
594 57bd82d4 Måns Rullgård
    log check_ld "$@"
595 0607887f Måns Rullgård
    check_cc || return
596 3155a644 Måns Rullgård
    flags=''
597
    libs=''
598
    for f; do
599
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
600
    done
601 684b28e0 Måns Rullgård
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
602 dcd479c0 Måns Rullgård
}
603
604 50a334e4 Måns Rullgård
check_cppflags(){
605
    log check_cppflags "$@"
606 caf458dd Måns Rullgård
    set -- $($filter_cppflags "$@")
607
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
608 50a334e4 Måns Rullgård
int x;
609
EOF
610
}
611
612 dcd479c0 Måns Rullgård
check_cflags(){
613 57bd82d4 Måns Rullgård
    log check_cflags "$@"
614 caf458dd Måns Rullgård
    set -- $($filter_cflags "$@")
615
    check_cc "$@" <<EOF && append CFLAGS "$@"
616 dcd479c0 Måns Rullgård
int x;
617
EOF
618
}
619
620
check_ldflags(){
621 57bd82d4 Måns Rullgård
    log check_ldflags "$@"
622
    check_ld "$@" <<EOF && add_ldflags "$@"
623 c23a0ac8 Diego Biurrun
int main(void){ return 0; }
624 dcd479c0 Måns Rullgård
EOF
625
}
626
627
check_header(){
628 57bd82d4 Måns Rullgård
    log check_header "$@"
629 dcd479c0 Måns Rullgård
    header=$1
630
    shift
631 b77df637 Måns Rullgård
    disable_safe $header
632
    check_cpp "$@" <<EOF && enable_safe $header
633 dcd479c0 Måns Rullgård
#include <$header>
634
int x;
635
EOF
636
}
637
638
check_func(){
639 57bd82d4 Måns Rullgård
    log check_func "$@"
640 dcd479c0 Måns Rullgård
    func=$1
641
    shift
642 d8bc5f06 Måns Rullgård
    disable $func
643
    check_ld "$@" <<EOF && enable $func
644 dcd479c0 Måns Rullgård
extern int $func();
645 c23a0ac8 Diego Biurrun
int main(void){ $func(); }
646 dcd479c0 Måns Rullgård
EOF
647
}
648
649 2446d3d6 Diego Biurrun
check_func_headers(){
650
    log check_func_headers "$@"
651 f8d7b072 Måns Rullgård
    headers=$1
652
    func=$2
653
    shift 2
654
    disable $func
655
    incs=""
656
    for hdr in $headers; do
657
        incs="$incs
658
#include <$hdr>"
659
    done
660 cd0d9a9d Måns Rullgård
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
661 f8d7b072 Måns Rullgård
$incs
662 d6773f56 Diego Biurrun
int main(int argc, char **argv){
663 2b2c2a81 Martin Storsjö
    return (long) $func;
664 f8d7b072 Måns Rullgård
}
665
EOF
666
}
667
668 a5344cf7 Stefano Sabatini
check_cpp_condition(){
669
    log check_cpp_condition "$@"
670
    header=$1
671
    condition=$2
672
    check_cpp <<EOF
673
#include <$header>
674
#if !($condition)
675
#error "unsatisfied condition: $condition"
676
#endif
677
EOF
678
}
679
680 57bd82d4 Måns Rullgård
check_lib(){
681
    log check_lib "$@"
682
    header="$1"
683
    func="$2"
684
    shift 2
685 fcfcde17 Måns Rullgård
    temp_extralibs "$@"
686
    check_header $header && check_func $func && add_extralibs "$@"
687
    err=$?
688
    restore_flags
689
    return $err
690 57bd82d4 Måns Rullgård
}
691
692 f8d7b072 Måns Rullgård
check_lib2(){
693
    log check_lib2 "$@"
694
    headers="$1"
695
    func="$2"
696
    shift 2
697
    temp_extralibs "$@"
698 2446d3d6 Diego Biurrun
    check_func_headers "$headers" $func && add_extralibs "$@"
699 f8d7b072 Måns Rullgård
    err=$?
700
    restore_flags
701
    return $err
702
}
703
704 dcd479c0 Måns Rullgård
check_exec(){
705 2270b4b2 Diego Biurrun
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
706 57bd82d4 Måns Rullgård
}
707
708 7dfef245 Måns Rullgård
check_exec_crash(){
709 5e622c40 Diego Biurrun
    code=$(cat)
710 7dfef245 Måns Rullgård
711
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
712
    # are safe but may not be available everywhere.  Thus we use
713
    # raise(SIGTERM) instead.  The check is run in a subshell so we
714
    # can redirect the "Terminated" message from the shell.  SIGBUS
715
    # is not defined by standard C so it is used conditionally.
716
717 2270b4b2 Diego Biurrun
    (check_exec "$@") >> $logfile 2>&1 <<EOF
718 7dfef245 Måns Rullgård
#include <signal.h>
719
static void sighandler(int sig){
720
    raise(SIGTERM);
721
}
722 e5af4a11 Diego Biurrun
int main(void){
723 7dfef245 Måns Rullgård
    signal(SIGILL, sighandler);
724
    signal(SIGFPE, sighandler);
725
    signal(SIGSEGV, sighandler);
726
#ifdef SIGBUS
727
    signal(SIGBUS, sighandler);
728
#endif
729
    { $code }
730
}
731
EOF
732
}
733
734 72be9e73 Dave Yeo
check_type(){
735
    log check_type "$@"
736
    headers=$1
737
    type=$2
738
    shift 2
739
    disable $type
740
    incs=""
741
    for hdr in $headers; do
742
        incs="$incs
743
#include <$hdr>"
744
    done
745
    check_cc "$@" <<EOF && enable $type
746
$incs
747
$type v;
748
EOF
749
}
750
751 57bd82d4 Måns Rullgård
require(){
752
    name="$1"
753
    header="$2"
754
    func="$3"
755
    shift 3
756
    check_lib $header $func "$@" || die "ERROR: $name not found"
757 dcd479c0 Måns Rullgård
}
758
759 f8d7b072 Måns Rullgård
require2(){
760
    name="$1"
761
    headers="$2"
762
    func="$3"
763
    shift 3
764
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
765
}
766
767 eea50282 Måns Rullgård
check_foo_config(){
768
    cfg=$1
769
    pkg=$2
770
    header=$3
771
    func=$4
772
    shift 4
773
    disable $cfg
774
    check_cmd ${pkg}-config --version
775
    err=$?
776
    if test "$err" = 0; then
777 5e622c40 Diego Biurrun
        temp_cflags $(${pkg}-config --cflags)
778
        temp_extralibs $(${pkg}-config --libs)
779 eea50282 Måns Rullgård
        check_lib "$@" $header $func && enable $cfg
780
    fi
781
    return $err
782
}
783
784 f0125de9 Måns Rullgård
check_host_cc(){
785
    log check_host_cc "$@"
786
    cat > $TMPC
787
    log_file $TMPC
788
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
789
}
790
791
check_host_cflags(){
792
    log check_host_cflags "$@"
793
    check_host_cc "$@" <<EOF && append host_cflags "$@"
794
int x;
795
EOF
796
}
797
798 c505dd31 Måns Rullgård
apply(){
799
    file=$1
800
    shift
801
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
802
}
803
804 dcd61286 Diego Biurrun
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
805
# system-dependent things.
806
807 4a0d6686 Aurelien Jacobs
COMPONENT_LIST="
808
    bsfs
809
    decoders
810
    demuxers
811
    encoders
812 3cde40aa Vitor Sessak
    filters
813 5666fd73 Gwenole Beauchesne
    hwaccels
814 c552605c Diego Biurrun
    indevs
815 4a0d6686 Aurelien Jacobs
    muxers
816 c552605c Diego Biurrun
    outdevs
817 4a0d6686 Aurelien Jacobs
    parsers
818
    protocols
819
"
820
821
CONFIG_LIST="
822
    $COMPONENT_LIST
823 e8ed9b7a Diego Biurrun
    aandct
824 f7679c54 Vitor Sessak
    avfilter
825
    avfilter_lavf
826 c88f5d72 Måns Rullgård
    avisynth
827
    beos_netserver
828 f402916e Aurelien Jacobs
    bzlib
829 c73f65d9 Måns Rullgård
    doc
830 27a9466b Måns Rullgård
    fastdiv
831 c88f5d72 Måns Rullgård
    ffmpeg
832
    ffplay
833
    ffserver
834 1848f7d9 Måns Rullgård
    fft
835 4f034993 Måns Rullgård
    golomb
836 c88f5d72 Måns Rullgård
    gpl
837 ecfc4f44 Måns Rullgård
    gprof
838 d8d0d0b2 Michael Niedermayer
    gray
839 3abe5fbd Aurelien Jacobs
    hardcoded_tables
840 c88f5d72 Måns Rullgård
    ipv6
841 f7b8bffe Ramiro Polla
    libdc1394
842 690bfceb Anuradha Suraparaju
    libdirac
843 2eed5a46 Diego Biurrun
    libfaac
844
    libfaad
845
    libfaadbin
846 c88f5d72 Måns Rullgård
    libgsm
847 6ebe07fb Diego Biurrun
    libmp3lame
848 c88f5d72 Måns Rullgård
    libnut
849 0b175caa Diego Biurrun
    libopencore_amrnb
850
    libopencore_amrwb
851 9a77d59a Jai Menon
    libopenjpeg
852 f7cd9eed Anuradha Suraparaju
    libschroedinger
853 ae14f311 David Conrad
    libspeex
854 150d2772 Diego Biurrun
    libtheora
855 c88f5d72 Måns Rullgård
    libvorbis
856 1cc60c47 Diego Biurrun
    libx264
857
    libxvid
858 f4d608e3 Justin Ruggles
    lpc
859 47a158cb Måns Rullgård
    mdct
860 c88f5d72 Måns Rullgård
    memalign_hack
861 a8150374 Diego Biurrun
    mlib
862 c88f5d72 Måns Rullgård
    mpegaudio_hp
863
    network
864 3fe142e2 Diego Biurrun
    nonfree
865 8a3c8627 Måns Rullgård
    pic
866 4a24ab64 Diego Biurrun
    postproc
867 2b4c3615 Måns Rullgård
    powerpc_perf
868 68602540 Alex Converse
    rdft
869 e90f5b5a Ramiro Polla
    runtime_cpudetect
870 2e35e684 Måns Rullgård
    shared
871 bd2216e4 Måns Rullgård
    small
872 2e35e684 Måns Rullgård
    static
873 a9ddb5b1 Cédric Schieli
    swscale_alpha
874 17492d5e Diego Biurrun
    vaapi
875
    vdpau
876 9cad0e4e Diego Biurrun
    version3
877 56a059ac Diego Biurrun
    x11grab
878 c88f5d72 Måns Rullgård
    zlib
879 4a0d6686 Aurelien Jacobs
"
880 c88f5d72 Måns Rullgård
881 8eee7025 Diego Biurrun
THREADS_LIST='
882
    beosthreads
883 d22e8442 Dave Yeo
    os2threads
884 8eee7025 Diego Biurrun
    pthreads
885
    w32threads
886
'
887
888 3f5b56e5 Måns Rullgård
ARCH_LIST='
889
    alpha
890 a2fc0f6a Måns Rullgård
    arm
891 fdcd782d Måns Rullgård
    avr32
892
    avr32_ap
893
    avr32_uc
894 3f5b56e5 Måns Rullgård
    bfin
895
    ia64
896
    m68k
897
    mips
898 bae3abb0 Måns Rullgård
    mips64
899 3f5b56e5 Måns Rullgård
    parisc
900 79cb09b2 Diego Biurrun
    ppc
901 34d11b87 Reimar Döffinger
    ppc64
902 3f5b56e5 Måns Rullgård
    s390
903
    sh4
904
    sparc
905
    sparc64
906
    x86
907
    x86_32
908
    x86_64
909
'
910
911
ARCH_EXT_LIST='
912 1ac9331a Måns Rullgård
    altivec
913 3bf96eec Diego Biurrun
    amd3dnow
914 a1ef9f08 Diego Biurrun
    amd3dnowext
915 1ac9331a Måns Rullgård
    armv5te
916 edab3048 Måns Rullgård
    armv6
917 ab5cb084 Måns Rullgård
    armv6t2
918 f55b299a Måns Rullgård
    armvfp
919 3f5b56e5 Måns Rullgård
    iwmmxt
920
    mmi
921
    mmx
922 d7f0920b Alexander Strange
    mmx2
923 6b18d278 Måns Rullgård
    neon
924 799fde37 Diego Biurrun
    ppc4xx
925 1bb04d5a Ramiro Polla
    sse
926 9eeed841 Måns Rullgård
    ssse3
927 bd9d34a0 Diego Biurrun
    vis
928 3f5b56e5 Måns Rullgård
'
929
930
HAVE_LIST="
931
    $ARCH_EXT_LIST
932
    $THREADS_LIST
933 35fd8122 Nicolas George
    alsa_asoundlib_h
934 3f5b56e5 Måns Rullgård
    altivec_h
935 c9fdab0d François Revol
    arpa_inet_h
936 e7ea5e3d Måns Rullgård
    attribute_packed
937 08a85a59 Måns Rullgård
    bigendian
938 6bd859d6 Måns Rullgård
    bswap
939 ecf97f22 Alex Beregszaszi
    closesocket
940 1ac9331a Måns Rullgård
    cmov
941 e16e49ac Ramiro Polla
    conio_h
942 c88f5d72 Måns Rullgård
    dcbzl
943 f8aa696f Diego Biurrun
    dev_bktr_ioctl_bt848_h
944
    dev_bktr_ioctl_meteor_h
945
    dev_ic_bt8xx_h
946
    dev_video_meteor_ioctl_meteor_h
947
    dev_video_bktr_ioctl_bt848_h
948 18b67ae5 Måns Rullgård
    dlfcn_h
949 c88f5d72 Måns Rullgård
    dlopen
950 bc574408 Ramiro Polla
    dos_paths
951 245626d0 Diego Biurrun
    ebp_available
952
    ebx_available
953 c2a29455 Aurelien Jacobs
    fast_64bit
954 7073e9fc Måns Rullgård
    fast_cmov
955 7b829d2a Ramiro Polla
    fast_unaligned
956 9d99cc5a Måns Rullgård
    fork
957 da9e86f8 Roman Shaposhnik
    gethrtime
958 4e68cb8a Roman Shaposhnik
    GetProcessTimes
959 66be5b45 Ramiro Polla
    getrusage
960 2e1913b1 Måns Rullgård
    inet_aton
961 61d251db Måns Rullgård
    inline_asm
962 abfc8d05 Martin Storsjö
    isatty
963 9f5ff83f Måns Rullgård
    ldbrx
964 0b4a1821 Alessandro Sappia
    libdc1394_1
965
    libdc1394_2
966 a33cab3a Michael Kostylev
    llrint
967 291fd18a Alex Converse
    log2
968 85dd97ad Måns Rullgård
    loongson
969 a33cab3a Michael Kostylev
    lrint
970 c88f5d72 Måns Rullgård
    lrintf
971 e4673692 Diego Biurrun
    lzo1x_999_compress
972 f8aa696f Diego Biurrun
    machine_ioctl_bt848_h
973
    machine_ioctl_meteor_h
974 c88f5d72 Måns Rullgård
    malloc_h
975
    memalign
976 6ffa87d3 Ramiro Polla
    mkstemp
977 b4e806b2 Matthieu Castet
    pld
978 1f91cdce Ramiro Polla
    posix_memalign
979 a33cab3a Michael Kostylev
    round
980
    roundf
981 c88f5d72 Måns Rullgård
    sdl
982
    sdl_video_size
983 b507ebd1 Ramiro Polla
    setmode
984 72be9e73 Dave Yeo
    socklen_t
985 deb29777 Måns Rullgård
    soundcard_h
986 f8cda19e Luca Abeni
    poll_h
987 b58412f1 Alexander Strange
    sys_mman_h
988 b091aa44 Ramiro Polla
    sys_resource_h
989 81644c2e Michael Kostylev
    sys_select_h
990 deb29777 Måns Rullgård
    sys_soundcard_h
991 1b6e8b73 Brad
    sys_videoio_h
992 d3a4b4e0 Diego Biurrun
    ten_operands
993 e16e49ac Ramiro Polla
    termios_h
994 b265431e Måns Rullgård
    threads
995 7b04b8a0 Michael Kostylev
    truncf
996 ce742de2 Måns Rullgård
    vfp_args
997 7c5bfe7a Ramiro Polla
    VirtualAlloc
998 6ff3f3e7 Ramiro Polla
    winsock2_h
999 cc078b5d Måns Rullgård
    xform_asm
1000 304d586d Loren Merritt
    yasm
1001 0cb78cef Diego Biurrun
"
1002 44161118 Måns Rullgård
1003 b6bb00b0 Måns Rullgård
# options emitted with CONFIG_ prefix but not available on command line
1004
CONFIG_EXTRA="
1005 9cad0e4e Diego Biurrun
    gplv3
1006
    lgplv3
1007 b6bb00b0 Måns Rullgård
"
1008
1009 520cc7f1 Måns Rullgård
CMDLINE_SELECT="
1010 3f5b56e5 Måns Rullgård
    $ARCH_EXT_LIST
1011 520cc7f1 Måns Rullgård
    $CONFIG_LIST
1012 8eee7025 Diego Biurrun
    $THREADS_LIST
1013 db6107b6 Diego Biurrun
    cross_compile
1014 520cc7f1 Måns Rullgård
    debug
1015
    extra_warnings
1016 8c6afa4d Diego Biurrun
    logging
1017 d2bbb2f7 Diego Biurrun
    optimizations
1018 87a0fb62 Diego Biurrun
    stripping
1019 7595a5e4 Måns Rullgård
    yasm
1020 520cc7f1 Måns Rullgård
"
1021 426be5dc Diego Biurrun
1022
PATHS_LIST='
1023 d156bede Diego Biurrun
    bindir
1024 14a8acf1 Måns Rullgård
    datadir
1025 26759c44 Måns Rullgård
    incdir
1026
    libdir
1027
    mandir
1028
    prefix
1029
    shlibdir
1030 426be5dc Diego Biurrun
'
1031
1032
CMDLINE_SET="
1033
    $PATHS_LIST
1034
    arch
1035 313c46a6 Måns Rullgård
    as
1036 426be5dc Diego Biurrun
    build_suffix
1037
    cc
1038
    cpu
1039
    cross_prefix
1040 50567afa Måns Rullgård
    dep_cc
1041 ac63af34 Diego Biurrun
    extra_version
1042 9da6609f Måns Rullgård
    host_cc
1043
    host_cflags
1044
    host_ldflags
1045
    host_libs
1046 82bb3329 Måns Rullgård
    host_os
1047 684b28e0 Måns Rullgård
    ld
1048 426be5dc Diego Biurrun
    logfile
1049 89641463 Reimar Döffinger
    nm
1050 26759c44 Måns Rullgård
    source_path
1051 c5200f17 Måns Rullgård
    sysinclude
1052
    sysroot
1053 a7ada2ba Måns Rullgård
    target_exec
1054 26759c44 Måns Rullgård
    target_os
1055 a7ada2ba Måns Rullgård
    target_path
1056 426be5dc Diego Biurrun
"
1057 520cc7f1 Måns Rullgård
1058 89f2932b Måns Rullgård
CMDLINE_APPEND="
1059
    extra_cflags
1060
"
1061
1062 912f3148 Diego Biurrun
# code dependency declarations
1063
1064 9eeed841 Måns Rullgård
# architecture extensions
1065 79cb09b2 Diego Biurrun
altivec_deps="ppc"
1066 3bf96eec Diego Biurrun
amd3dnow_deps="mmx"
1067 a1ef9f08 Diego Biurrun
amd3dnowext_deps="amd3dnow"
1068 a2fc0f6a Måns Rullgård
armv5te_deps="arm"
1069
armv6_deps="arm"
1070 ab5cb084 Måns Rullgård
armv6t2_deps="arm"
1071 a2fc0f6a Måns Rullgård
armvfp_deps="arm"
1072
iwmmxt_deps="arm"
1073 e241ba14 Diego Biurrun
mmi_deps="mips"
1074 9eeed841 Måns Rullgård
mmx_deps="x86"
1075 75aa95a6 Diego Biurrun
mmx2_deps="mmx"
1076 a2fc0f6a Måns Rullgård
neon_deps="arm"
1077 799fde37 Diego Biurrun
ppc4xx_deps="ppc"
1078 75aa95a6 Diego Biurrun
sse_deps="mmx"
1079
ssse3_deps="sse"
1080 bd9d34a0 Diego Biurrun
vis_deps="sparc"
1081 9eeed841 Måns Rullgård
1082 89e053f8 Måns Rullgård
need_memalign="altivec neon sse"
1083 6fec122a Måns Rullgård
inline_asm_deps="!tms470"
1084 89e053f8 Måns Rullgård
1085 5666fd73 Gwenole Beauchesne
# decoders / encoders / hardware accelerators
1086 47a158cb Måns Rullgård
aac_decoder_select="fft mdct"
1087 84c04e25 Aurelien Jacobs
aac_encoder_select="fft mdct"
1088 47a158cb Måns Rullgård
ac3_decoder_select="fft mdct"
1089 f4d608e3 Justin Ruggles
alac_encoder_select="lpc"
1090 47a158cb Måns Rullgård
atrac3_decoder_select="fft mdct"
1091 4f034993 Måns Rullgård
cavs_decoder_select="golomb"
1092 47a158cb Måns Rullgård
cook_decoder_select="fft mdct"
1093 2eef7c62 Aurelien Jacobs
cscd_decoder_suggest="zlib"
1094 47a158cb Måns Rullgård
dca_decoder_select="fft mdct"
1095 e8ed9b7a Diego Biurrun
dnxhd_encoder_select="aandct"
1096 2eef7c62 Aurelien Jacobs
dxa_decoder_select="zlib"
1097 baf91bb9 Diego Biurrun
eac3_decoder_select="ac3_decoder"
1098 84c04e25 Aurelien Jacobs
eamad_decoder_select="aandct"
1099 e8ed9b7a Diego Biurrun
eatgq_decoder_select="aandct"
1100 d52b39c7 Aurelien Jacobs
eatqi_decoder_select="aandct"
1101 4f034993 Måns Rullgård
ffv1_decoder_select="golomb"
1102
flac_decoder_select="golomb"
1103 f4d608e3 Justin Ruggles
flac_encoder_select="golomb lpc"
1104 2eef7c62 Aurelien Jacobs
flashsv_decoder_select="zlib"
1105
flashsv_encoder_select="zlib"
1106 4414137e Diego Biurrun
flv_decoder_select="h263_decoder"
1107 4d4b4bd1 Diego Biurrun
flv_encoder_select="h263_encoder"
1108 e8ed9b7a Diego Biurrun
h261_encoder_select="aandct"
1109 7f647ae0 Diego Biurrun
h263_decoder_select="h263_parser"
1110 e8ed9b7a Diego Biurrun
h263_encoder_select="aandct"
1111 ff418735 Gwenole Beauchesne
h263_vaapi_hwaccel_deps="va_va_h"
1112 95a61cfc Diego Biurrun
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1113 4414137e Diego Biurrun
h263i_decoder_select="h263_decoder"
1114 fe629c2d Diego Biurrun
h263p_encoder_select="h263_encoder"
1115 4f034993 Måns Rullgård
h264_decoder_select="golomb"
1116 ff418735 Gwenole Beauchesne
h264_vaapi_hwaccel_deps="va_va_h"
1117 17492d5e Diego Biurrun
h264_vaapi_hwaccel_select="vaapi"
1118 711dae77 Diego Biurrun
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1119 95a61cfc Diego Biurrun
h264_vdpau_decoder_select="vdpau h264_decoder"
1120 47a158cb Måns Rullgård
imc_decoder_select="fft mdct"
1121 4f034993 Måns Rullgård
jpegls_decoder_select="golomb"
1122
jpegls_encoder_select="golomb"
1123 e8ed9b7a Diego Biurrun
ljpeg_encoder_select="aandct"
1124 4f034993 Måns Rullgård
loco_decoder_select="golomb"
1125 e8ed9b7a Diego Biurrun
mjpeg_encoder_select="aandct"
1126
mpeg1video_encoder_select="aandct"
1127
mpeg2video_encoder_select="aandct"
1128 4414137e Diego Biurrun
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1129 c37de5e1 Diego Biurrun
mpeg4_encoder_select="h263_encoder"
1130 711dae77 Diego Biurrun
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1131 95a61cfc Diego Biurrun
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1132 711dae77 Diego Biurrun
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1133 95a61cfc Diego Biurrun
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1134 ff418735 Gwenole Beauchesne
mpeg2_vaapi_hwaccel_deps="va_va_h"
1135 95a61cfc Diego Biurrun
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1136 ff418735 Gwenole Beauchesne
mpeg4_vaapi_hwaccel_deps="va_va_h"
1137 95a61cfc Diego Biurrun
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1138 70e0c871 NVIDIA Corporation
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1139
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1140 8f6f050a Diego Biurrun
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1141 4d8eecf4 Diego Biurrun
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1142 4414137e Diego Biurrun
msmpeg4v1_decoder_select="h263_decoder"
1143 4e169d89 Diego Biurrun
msmpeg4v1_encoder_select="h263_encoder"
1144 4414137e Diego Biurrun
msmpeg4v2_decoder_select="h263_decoder"
1145 4e169d89 Diego Biurrun
msmpeg4v2_encoder_select="h263_encoder"
1146 4414137e Diego Biurrun
msmpeg4v3_decoder_select="h263_decoder"
1147 4e169d89 Diego Biurrun
msmpeg4v3_encoder_select="h263_encoder"
1148 47a158cb Måns Rullgård
nellymoser_decoder_select="fft mdct"
1149
nellymoser_encoder_select="fft mdct"
1150 2eef7c62 Aurelien Jacobs
png_decoder_select="zlib"
1151
png_encoder_select="zlib"
1152 63cae55d Alex Converse
qdm2_decoder_select="fft mdct rdft"
1153 a8beb22f Diego Biurrun
rv10_decoder_select="h263_decoder"
1154 b2bf38b4 Diego Biurrun
rv10_encoder_select="h263_encoder"
1155 a8beb22f Diego Biurrun
rv20_decoder_select="h263_decoder"
1156 b2bf38b4 Diego Biurrun
rv20_encoder_select="h263_encoder"
1157 d52b39c7 Aurelien Jacobs
rv30_decoder_select="golomb"
1158
rv40_decoder_select="golomb"
1159 4f034993 Måns Rullgård
shorten_decoder_select="golomb"
1160
sonic_decoder_select="golomb"
1161
sonic_encoder_select="golomb"
1162
sonic_ls_encoder_select="golomb"
1163
svq3_decoder_select="golomb"
1164 bee2eac5 Baptiste Coudurier
svq3_decoder_suggest="zlib"
1165 4eef77c1 Diego Biurrun
theora_decoder_select="vp3_decoder"
1166 2eef7c62 Aurelien Jacobs
tiff_decoder_suggest="zlib"
1167
tiff_encoder_suggest="zlib"
1168
tscc_decoder_select="zlib"
1169 f95bfab0 Diego Biurrun
vc1_decoder_select="h263_decoder"
1170 ff418735 Gwenole Beauchesne
vc1_vaapi_hwaccel_deps="va_va_h"
1171 95a61cfc Diego Biurrun
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1172 711dae77 Diego Biurrun
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1173 95a61cfc Diego Biurrun
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1174 47a158cb Måns Rullgård
vorbis_decoder_select="fft mdct"
1175
vorbis_encoder_select="fft mdct"
1176 e82dc4c9 Diego Biurrun
vp6a_decoder_select="vp6_decoder"
1177
vp6f_decoder_select="vp6_decoder"
1178 47a158cb Måns Rullgård
wmav1_decoder_select="fft mdct"
1179
wmav1_encoder_select="fft mdct"
1180
wmav2_decoder_select="fft mdct"
1181
wmav2_encoder_select="fft mdct"
1182 f95bfab0 Diego Biurrun
wmv1_decoder_select="h263_decoder"
1183 665507aa Diego Biurrun
wmv1_encoder_select="h263_encoder"
1184 f95bfab0 Diego Biurrun
wmv2_decoder_select="h263_decoder"
1185 1746e2a9 Diego Biurrun
wmv2_encoder_select="h263_encoder"
1186 015f8ee0 Diego Biurrun
wmv3_decoder_select="vc1_decoder"
1187
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1188
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1189 2eef7c62 Aurelien Jacobs
zlib_decoder_select="zlib"
1190
zlib_encoder_select="zlib"
1191
zmbv_decoder_select="zlib"
1192
zmbv_encoder_select="zlib"
1193 30fd06be Måns Rullgård
1194 28b80940 Diego Biurrun
# parsers
1195
h264_parser_select="golomb"
1196
1197 912f3148 Diego Biurrun
# external libraries
1198 1b71f045 Måns Rullgård
libdirac_decoder_deps="libdirac !libschroedinger"
1199 690bfceb Anuradha Suraparaju
libdirac_encoder_deps="libdirac"
1200 c9171a83 Diego Biurrun
libfaac_encoder_deps="libfaac"
1201 69ddbd1d Diego Biurrun
libfaad_decoder_deps="libfaad"
1202 4ec45764 Ramiro Polla
libfaadbin_decoder_extralibs='$ldl'
1203 299c77d5 Måns Rullgård
libgsm_decoder_deps="libgsm"
1204
libgsm_encoder_deps="libgsm"
1205 8ffed8d8 Måns Rullgård
libgsm_ms_decoder_deps="libgsm"
1206
libgsm_ms_encoder_deps="libgsm"
1207 1cc60c47 Diego Biurrun
libmp3lame_encoder_deps="libmp3lame"
1208 0b175caa Diego Biurrun
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1209
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1210
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1211 9a77d59a Jai Menon
libopenjpeg_decoder_deps="libopenjpeg"
1212 f7cd9eed Anuradha Suraparaju
libschroedinger_decoder_deps="libschroedinger"
1213
libschroedinger_encoder_deps="libschroedinger"
1214 ae14f311 David Conrad
libspeex_decoder_deps="libspeex"
1215 150d2772 Diego Biurrun
libtheora_encoder_deps="libtheora"
1216 b0caf888 Diego Biurrun
libvorbis_encoder_deps="libvorbis"
1217 1cc60c47 Diego Biurrun
libx264_encoder_deps="libx264"
1218
libxvid_encoder_deps="libxvid"
1219 30fd06be Måns Rullgård
1220 912f3148 Diego Biurrun
# demuxers / muxers
1221 03a76ba9 Diego Biurrun
ac3_demuxer_deps="ac3_parser"
1222 647c2356 Diego Biurrun
asf_stream_muxer_select="asf_muxer"
1223 4e622dea Stefano Sabatini
avisynth_demuxer_deps="avisynth"
1224
dirac_demuxer_deps="dirac_parser"
1225 647c2356 Diego Biurrun
ipod_muxer_select="mov_muxer"
1226 4e622dea Stefano Sabatini
libnut_demuxer_deps="libnut"
1227
libnut_muxer_deps="libnut"
1228 647c2356 Diego Biurrun
matroska_audio_muxer_select="matroska_muxer"
1229 4e622dea Stefano Sabatini
matroska_demuxer_suggest="zlib bzlib"
1230
mov_demuxer_suggest="zlib"
1231
mp3_demuxer_deps="mpegaudio_parser"
1232 647c2356 Diego Biurrun
mp4_muxer_select="mov_muxer"
1233
mpegtsraw_demuxer_select="mpegts_demuxer"
1234
mxf_d10_muxer_select="mxf_muxer"
1235
psp_muxer_select="mov_muxer"
1236 4e622dea Stefano Sabatini
rtp_muxer_deps="network rtp_protocol"
1237
rtsp_demuxer_deps="sdp_demuxer"
1238
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1239 647c2356 Diego Biurrun
tg2_muxer_select="mov_muxer"
1240
tgp_muxer_select="mov_muxer"
1241 6bdaa5f4 Diego Biurrun
w64_demuxer_deps="wav_demuxer"
1242 4e622dea Stefano Sabatini
1243
# indevs / outdevs
1244 38e54a75 Stefano Sabatini
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1245
alsa_indev_extralibs="-lasound"
1246
alsa_outdev_deps="alsa_asoundlib_h"
1247
alsa_outdev_extralibs="-lasound"
1248
audio_beos_indev_deps="audio_beos"
1249
audio_beos_indev_extralibs="-lmedia -lbe"
1250
audio_beos_outdev_deps="audio_beos"
1251
audio_beos_outdev_extralibs="-lmedia -lbe"
1252
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1253
dv1394_indev_deps="dv1394 dv_demuxer"
1254
jack_indev_deps="jack_jack_h"
1255
jack_indev_extralibs="-ljack"
1256
libdc1394_indev_deps="libdc1394"
1257
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1258
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1259
v4l_indev_deps="linux_videodev_h"
1260
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1261
vfwcap_indev_deps="capCreateCaptureWindow"
1262
vfwcap_indev_extralibs="-lvfw32"
1263
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1264 781c1aa6 Roxis
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1265 30fd06be Måns Rullgård
1266 912f3148 Diego Biurrun
# protocols
1267 3fff6382 Andreas Öman
gopher_protocol_deps="network"
1268 c08fb000 Alex Beregszaszi
http_protocol_deps="network"
1269 cbf29889 Måns Rullgård
rtmp_protocol_deps="tcp_protocol"
1270 c08fb000 Alex Beregszaszi
rtp_protocol_deps="udp_protocol"
1271
tcp_protocol_deps="network"
1272
udp_protocol_deps="network"
1273
1274 f7679c54 Vitor Sessak
# filters
1275 81124ba0 Vitor Sessak
movie_filter_deps="avfilter_lavf"
1276 f7679c54 Vitor Sessak
1277 912f3148 Diego Biurrun
# programs
1278 fa859b4d Måns Rullgård
ffplay_deps="sdl"
1279 6ad42348 Ramiro Polla
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1280 4ec45764 Ramiro Polla
ffserver_extralibs='$ldl'
1281 a2830dca Måns Rullgård
1282 c73f65d9 Måns Rullgård
doc_deps="texi2html"
1283 912f3148 Diego Biurrun
1284 de6d9b64 Fabrice Bellard
# default parameters
1285 8a608357 Måns Rullgård
1286 2ba042a7 Måns Rullgård
logfile="config.err"
1287 8a608357 Måns Rullgård
1288
# installation paths
1289 c9d19248 Måns Rullgård
prefix_default="/usr/local"
1290
bindir_default='${prefix}/bin'
1291 14a8acf1 Måns Rullgård
datadir_default='${prefix}/share/ffmpeg'
1292 c9d19248 Måns Rullgård
incdir_default='${prefix}/include'
1293
libdir_default='${prefix}/lib'
1294
mandir_default='${prefix}/share/man'
1295
shlibdir_default="$libdir_default"
1296 8a608357 Måns Rullgård
1297
# toolchain
1298 11e6d03a Diego Biurrun
ar="ar"
1299 13c7df3d Måns Rullgård
cc_default="gcc"
1300 a3d7c197 Diego Biurrun
cc_version=\"unknown\"
1301 9da6609f Måns Rullgård
host_cc_default="gcc"
1302 11e6d03a Diego Biurrun
ln_s="ln -sf"
1303 89641463 Reimar Döffinger
nm_default="nm"
1304 11e6d03a Diego Biurrun
objformat="elf"
1305 be7109c1 Michael Niedermayer
ranlib="ranlib"
1306 0f3cb305 Fabrice Bellard
strip="strip"
1307 11e6d03a Diego Biurrun
yasmexe="yasm"
1308 8a608357 Måns Rullgård
1309
# machine
1310 5e622c40 Diego Biurrun
arch=$(uname -m)
1311 38d0a8aa Guillaume Poirier
cpu="generic"
1312 8a608357 Måns Rullgård
1313
# OS
1314 4f854758 Diego Biurrun
target_os=$(tolower $(uname -s))
1315 82bb3329 Måns Rullgård
host_os=$target_os
1316 8a608357 Måns Rullgård
1317
# configurable options
1318 497237c7 Ramiro Polla
enable debug
1319 c73f65d9 Måns Rullgård
enable doc
1320 aa033b1e Måns Rullgård
enable fastdiv
1321 497237c7 Ramiro Polla
enable ffmpeg
1322
enable ffplay
1323
enable ffserver
1324
enable ipv6
1325
enable mpegaudio_hp
1326
enable network
1327 8400d6b8 Diego Biurrun
enable optimizations
1328 497237c7 Ramiro Polla
enable protocols
1329 530dc538 Diego Biurrun
enable static
1330 87a0fb62 Diego Biurrun
enable stripping
1331 a9ddb5b1 Cédric Schieli
enable swscale_alpha
1332 8a608357 Måns Rullgård
1333
# build settings
1334 9987769a Måns Rullgård
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1335 c536cb09 Diego Biurrun
FFSERVERLDFLAGS=-Wl,-E
1336 f3ec2d46 Slavik Gnatenko
LIBPREF="lib"
1337
LIBSUF=".a"
1338 c5f14466 Ramiro Polla
FULLNAME='$(NAME)$(BUILDSUF)'
1339
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1340 f3ec2d46 Slavik Gnatenko
SLIBPREF="lib"
1341
SLIBSUF=".so"
1342 c5f14466 Ramiro Polla
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1343 b29bddab Diego Biurrun
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1344
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1345 24743a76 Diego Biurrun
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1346 ef0bc4c9 François Revol
1347 7e6c86e6 Måns Rullgård
CC_O='-o $@'
1348
1349 f0125de9 Måns Rullgård
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1350 9da6609f Måns Rullgård
host_libs='-lm'
1351
1352 a7ada2ba Måns Rullgård
target_path='.'
1353
1354 0d7dca36 Diego Biurrun
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1355
# full relative path for objects in subdirectories for non-recursive Make.
1356 c1c3933a Måns Rullgård
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1357 d8059267 Måns Rullgård
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1358 315c741d Diego Biurrun
1359 c597172e Måns Rullgård
# find source path
1360 5e622c40 Diego Biurrun
source_path="$(dirname "$0")"
1361 497237c7 Ramiro Polla
enable source_path_used
1362 24524f36 Måns Rullgård
if test -f configure; then
1363 5e622c40 Diego Biurrun
    source_path="$(pwd)"
1364 497237c7 Ramiro Polla
    disable source_path_used
1365 c597172e Måns Rullgård
else
1366 5e622c40 Diego Biurrun
    source_path="$(cd "$source_path"; pwd)"
1367 c597172e Måns Rullgård
    echo "$source_path" | grep -q '[[:blank:]]' &&
1368 7483e694 Diego Biurrun
        die "Out of tree builds are impossible with whitespace in source path."
1369 337cee68 Matthieu Castet
    test -e "$source_path/config.h" &&
1370
        die "Out of tree builds are impossible with config.h in source dir."
1371 c597172e Måns Rullgård
fi
1372
1373 13cbe2c0 Måns Rullgård
for v in "$@"; do
1374 b04251c5 Måns Rullgård
    r=${v#*=}
1375
    l=${v%"$r"}
1376
    r=$(sh_quote "$r")
1377 13cbe2c0 Måns Rullgård
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1378
done
1379 c597172e Måns Rullgård
1380 73ef8980 Måns Rullgård
find_things(){
1381
    thing=$1
1382
    pattern=$2
1383
    file=$source_path/$3
1384 932ccf39 Måns Rullgård
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1385 73ef8980 Måns Rullgård
}
1386
1387
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1388
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1389 5666fd73 Gwenole Beauchesne
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1390 73ef8980 Måns Rullgård
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1391
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1392
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1393
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1394 38e54a75 Stefano Sabatini
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1395
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1396 73ef8980 Måns Rullgård
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1397 81124ba0 Vitor Sessak
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1398 c597172e Måns Rullgård
1399 7483e694 Diego Biurrun
enable $ARCH_EXT_LIST \
1400
       $DECODER_LIST \
1401
       $ENCODER_LIST \
1402 5666fd73 Gwenole Beauchesne
       $HWACCEL_LIST \
1403 7483e694 Diego Biurrun
       $PARSER_LIST \
1404
       $BSF_LIST \
1405
       $DEMUXER_LIST \
1406
       $MUXER_LIST \
1407 f7679c54 Vitor Sessak
       $FILTER_LIST \
1408 7483e694 Diego Biurrun
       $PROTOCOL_LIST \
1409
       $INDEV_LIST \
1410
       $OUTDEV_LIST \
1411 c597172e Måns Rullgård
1412
die_unknown(){
1413
    echo "Unknown option \"$1\"."
1414
    echo "See $0 --help for available options."
1415
    exit 1
1416
}
1417
1418 794f8e97 Panagiotis Issaris
show_list() {
1419 bf0c4afa Ramiro Polla
    suffix=_$1
1420
    shift
1421
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1422 794f8e97 Panagiotis Issaris
    exit 0
1423
}
1424
1425 c597172e Måns Rullgård
for opt do
1426 7483e694 Diego Biurrun
    optval="${opt#*=}"
1427
    case "$opt" in
1428 0f010b2f Diego Biurrun
    --extra-ldflags=*) add_ldflags $optval
1429 7483e694 Diego Biurrun
    ;;
1430 0f010b2f Diego Biurrun
    --extra-libs=*) add_extralibs $optval
1431 7483e694 Diego Biurrun
    ;;
1432 8fb1cb58 Diego Biurrun
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1433 9aa8ed9d Panagiotis Issaris
    ;;
1434 40bcf4c7 Benjamin Larsson
    --enable-debug=*) debuglevel="$optval"
1435
    ;;
1436 7483e694 Diego Biurrun
    --enable-*=*|--disable-*=*)
1437 8b93ddc3 Måns Rullgård
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1438 be8f2501 Måns Rullgård
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1439
    eval list=\$$(toupper $thing)_LIST
1440 8b93ddc3 Måns Rullgård
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1441
    $action $(filter "$name" $list)
1442 7483e694 Diego Biurrun
    ;;
1443
    --enable-?*|--disable-?*)
1444 5e622c40 Diego Biurrun
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1445 e3773a55 Måns Rullgård
    if is_in $option $COMPONENT_LIST; then
1446 fed5d54b Måns Rullgård
        test $action = disable && action=unset
1447 e3773a55 Måns Rullgård
        eval $action \$$(toupper ${option%s})_LIST
1448
    elif is_in $option $CMDLINE_SELECT; then
1449
        $action $option
1450
    else
1451
        die_unknown $opt
1452
    fi
1453 7483e694 Diego Biurrun
    ;;
1454
    --list-*)
1455
        NAME="${opt#--list-}"
1456
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1457
        NAME=${NAME%s}
1458
        eval show_list $NAME \$$(toupper $NAME)_LIST
1459
    ;;
1460
    --help|-h) show_help
1461
    ;;
1462
    *)
1463 884a36a7 Måns Rullgård
    optname="${opt%%=*}"
1464 26759c44 Måns Rullgård
    optname="${optname#--}"
1465
    optname=$(echo "$optname" | sed 's/-/_/g')
1466 89f2932b Måns Rullgård
    if is_in $optname $CMDLINE_SET; then
1467
        eval $optname='$optval'
1468
    elif is_in $optname $CMDLINE_APPEND; then
1469
        append $optname "$optval"
1470
    else
1471
         die_unknown $opt
1472
    fi
1473 7483e694 Diego Biurrun
    ;;
1474
    esac
1475 c597172e Måns Rullgård
done
1476
1477 bcea99bb Måns Rullgård
disabled logging && logfile=/dev/null
1478
1479 13cbe2c0 Måns Rullgård
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1480 bcea99bb Måns Rullgård
set >> $logfile
1481
1482 9da6609f Måns Rullgård
test -n "$cross_prefix" && enable cross_compile
1483
1484 adb2b908 Ramiro Polla
ar="${cross_prefix}${ar}"
1485 11e6d03a Diego Biurrun
cc_default="${cross_prefix}${cc_default}"
1486 20e0ed95 Måns Rullgård
nm_default="${cross_prefix}${nm_default}"
1487 adb2b908 Ramiro Polla
ranlib="${cross_prefix}${ranlib}"
1488
strip="${cross_prefix}${strip}"
1489
1490 c5200f17 Måns Rullgård
sysinclude_default="${sysroot}/usr/include"
1491
1492 75800dce Måns Rullgård
set_default cc nm sysinclude
1493 9da6609f Måns Rullgård
enabled cross_compile || host_cc_default=$cc
1494
set_default host_cc
1495 13c7df3d Måns Rullgård
1496 82bb3329 Måns Rullgård
exesuf() {
1497
    case $1 in
1498
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1499
    esac
1500
}
1501
1502
EXESUF=$(exesuf $target_os)
1503
HOSTEXESUF=$(exesuf $host_os)
1504 c0f5b7f1 Måns Rullgård
1505 e4e69e0b Måns Rullgård
# set temporary file name
1506 a49d42c2 Måns Rullgård
: ${TMPDIR:=$TEMPDIR}
1507 c51fafa1 Måns Rullgård
: ${TMPDIR:=$TMP}
1508 a49d42c2 Måns Rullgård
: ${TMPDIR:=/tmp}
1509 e4e69e0b Måns Rullgård
1510 54460a83 Måns Rullgård
if ! check_cmd type mktemp; then
1511
    # simple replacement for missing mktemp
1512
    # NOT SAFE FOR GENERAL USE
1513
    mktemp(){
1514
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1515
    }
1516
fi
1517
1518
tmpfile(){
1519
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1520
        (set -C; exec > $tmp) 2>/dev/null ||
1521 f7ba16a7 Reimar Döffinger
        die "Unable to create temporary file in $TMPDIR."
1522 54460a83 Måns Rullgård
    append TMPFILES $tmp
1523
    eval $1=$tmp
1524
}
1525
1526
trap 'rm -f -- $TMPFILES' EXIT
1527
trap exit HUP INT TERM
1528
1529
tmpfile TMPC  .c
1530
tmpfile TMPE  $EXESUF
1531
tmpfile TMPH  .h
1532
tmpfile TMPO  .o
1533
tmpfile TMPS  .S
1534
tmpfile TMPSH .sh
1535
1536
unset -f mktemp
1537 e4e69e0b Måns Rullgård
1538 993f2d0f Måns Rullgård
# make sure we can execute files in $TMPDIR
1539
cat > $TMPSH 2>> $logfile <<EOF
1540
#! /bin/sh
1541
EOF
1542
chmod +x $TMPSH >> $logfile 2>&1
1543
if ! $TMPSH >> $logfile 2>&1; then
1544
    cat <<EOF
1545
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1546
variable to another directory and make sure that it is not mounted noexec.
1547
EOF
1548
    die "Sanity test failed."
1549
fi
1550
1551 19b4c628 Måns Rullgård
filter_cflags=echo
1552
filter_cppflags=echo
1553
filter_asflags=echo
1554
1555 8f0c157a Måns Rullgård
if   $cc -v 2>&1 | grep -qi ^gcc; then
1556 629687f6 Måns Rullgård
    cc_type=gcc
1557 a3d7c197 Diego Biurrun
    cc_version=__VERSION__
1558 aef6bd1b Måns Rullgård
    if ! $cc -dumpversion | grep -q '^2\.'; then
1559
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1560
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1561
    fi
1562 629687f6 Måns Rullgård
elif $cc --version 2>/dev/null | grep -q Intel; then
1563
    cc_type=icc
1564 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1565 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1566
    AS_DEPFLAGS='-MMD'
1567 629687f6 Måns Rullgård
elif $cc -v 2>&1 | grep -q xlc; then
1568
    cc_type=xlc
1569 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__IBMC__)"
1570 df442a8d Måns Rullgård
elif $cc -V 2>/dev/null | grep -q Compaq; then
1571
    cc_type=ccc
1572 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__DECC_VER)"
1573 d8059267 Måns Rullgård
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1574 03754fcd Måns Rullgård
    debuglevel=3
1575 df442a8d Måns Rullgård
    add_ldflags -Wl,-z,now # calls to libots crash without this
1576 6a0d5493 Måns Rullgård
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1577 03e37762 Måns Rullgård
    test -d "$sysroot" || die "No valid sysroot specified."
1578
    cc_type=armcc
1579 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1580 03e37762 Måns Rullgård
    armcc_conf="$PWD/armcc.conf"
1581
    $cc --arm_linux_configure                 \
1582
        --arm_linux_config_file="$armcc_conf" \
1583
        --configure_sysroot="$sysroot"        \
1584
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1585
        die "Error creating armcc configuration file."
1586
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1587 75800dce Måns Rullgård
    as_default="${cross_prefix}gcc"
1588 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1589
    AS_DEPFLAGS='-MMD'
1590 6fec122a Måns Rullgård
elif $cc -version 2>/dev/null | grep -q TMS470; then
1591
    cc_type=tms470
1592 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1593 6fec122a Måns Rullgård
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1594
    CC_O='-fr=$(@D)'
1595
    as_default="${cross_prefix}gcc"
1596
    ld_default="${cross_prefix}gcc"
1597
    TMPO=$(basename $TMPC .c).o
1598
    append TMPFILES $TMPO
1599
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1600 07dec06e Måns Rullgård
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1601
    AS_DEPFLAGS='-MMD'
1602 6fec122a Måns Rullgård
    filter_cflags=tms470_flags
1603
    tms470_flags(){
1604
        for flag; do
1605
            case $flag in
1606
                -march=*|-mcpu=*)
1607
                    case "${flag#*=}" in
1608
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1609
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1610
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1611
                        armv6*|arm11*)          echo -mv=6   ;;
1612
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1613
                                                echo -mv=5e  ;;
1614
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1615
                    esac
1616
                    ;;
1617
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1618
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1619 a2709020 Måns Rullgård
                -msoft-float)   echo --float_support=vfplib       ;;
1620 6fec122a Måns Rullgård
                -Os)            echo -O3 -mf=2                    ;;
1621
                -O[0-3])        echo $flag -mf=5                  ;;
1622
                -g)             echo -g -mn                       ;;
1623
            esac
1624
        done
1625
    }
1626 06da6943 David Conrad
elif $cc -v 2>&1 | grep -q clang; then
1627
    cc_type=clang
1628
    cc_version=__VERSION__
1629
    CC_DEPFLAGS='-MMD'
1630
    AS_DEPFLAGS='-MMD'
1631 2a472e9c Michael Kostylev
elif $cc -V 2>&1 | grep -q Sun; then
1632
    cc_type=suncc
1633
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1634 faa374b7 Michael Kostylev
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1635 2a472e9c Michael Kostylev
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1636 03279bbe Michael Kostylev
    filter_cflags=suncc_flags
1637
    suncc_flags(){
1638
        for flag; do
1639
            case $flag in
1640
                -march=*|-mcpu=*)
1641
                    case "${flag#*=}" in
1642
                        native)                   echo -xtarget=native       ;;
1643
                        v9)                       echo -xarch=sparc          ;;
1644
                        ultrasparc)               echo -xarch=sparcvis       ;;
1645
                        ultrasparc3|niagara*)     echo -xarch=sparcvis2      ;;
1646
                        i586|pentium)             echo -xchip=pentium        ;;
1647
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1648
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1649
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1650
                        pentium4*)          echo -xtarget=pentium4           ;;
1651
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1652
                        *-sse3)             echo -xarch=sse3                 ;;
1653
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1654
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1655
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1656
                        k8|opteron|athlon64|athlon-fx)
1657
                                                  echo -xarch=sse2a          ;;
1658
                        athlon*)                  echo -xarch=pentium_proa   ;;
1659
                    esac
1660
                    ;;
1661
                -std=c99)             echo -xc99              ;;
1662
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1663
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1664
                -Os)                  echo -O5 -xspace        ;;
1665
                -W*,*)                echo $flag              ;;
1666
                -f*-*|-W*)                                    ;;
1667
                *)                    echo $flag              ;;
1668
            esac
1669
        done
1670
    }
1671 629687f6 Måns Rullgård
fi
1672
1673
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1674
1675 75bafbac Måns Rullgård
: ${as_default:=$cc}
1676 50567afa Måns Rullgård
: ${dep_cc_default:=$cc}
1677 684b28e0 Måns Rullgård
: ${ld_default:=$cc}
1678 50567afa Måns Rullgård
set_default as dep_cc ld
1679 75800dce Måns Rullgård
1680 07dec06e Måns Rullgård
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1681
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1682
1683 7f32f40c Måns Rullgård
add_cflags $extra_cflags
1684 2f2e6c7c Måns Rullgård
add_asflags $extra_cflags
1685 7f32f40c Måns Rullgård
1686 154d432c Måns Rullgård
if test -n "$sysroot"; then
1687
    case "$cc_type" in
1688
        gcc)
1689 467256f2 Måns Rullgård
            add_cppflags --sysroot="$sysroot"
1690 154d432c Måns Rullgård
            add_ldflags --sysroot="$sysroot"
1691
        ;;
1692 6fec122a Måns Rullgård
        tms470)
1693
            add_cppflags -I"$sysinclude"
1694
            add_ldflags  --sysroot="$sysroot"
1695
        ;;
1696 06da6943 David Conrad
        clang)
1697
            add_cppflags -isysroot="$sysroot"
1698
            add_ldflags -isysroot="$sysroot"
1699
        ;;
1700 154d432c Måns Rullgård
    esac
1701
fi
1702
1703 d22c13a8 Måns Rullgård
if test "$cpu" = host; then
1704
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1705
1706
    case "$cc_type" in
1707
        gcc)
1708
            check_native(){
1709
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1710
                awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1711
            }
1712
            cpu=$(check_native -march || check_native -mcpu)
1713
        ;;
1714
    esac
1715
1716
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1717
fi
1718
1719 df5cdc24 Måns Rullgård
# Add processor-specific flags
1720
case $cpu in
1721
    601|ppc601|PowerPC601)
1722
        cpuflags="-mcpu=601"
1723
    ;;
1724
    603*|ppc603*|PowerPC603*)
1725
        cpuflags="-mcpu=603"
1726
    ;;
1727
    604*|ppc604*|PowerPC604*)
1728
        cpuflags="-mcpu=604"
1729
    ;;
1730
    G3|g3|75*|ppc75*|PowerPC75*)
1731
        cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1732
    ;;
1733
    G4|g4|745*|ppc745*|PowerPC745*)
1734
        cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1735
    ;;
1736
    74*|ppc74*|PowerPC74*)
1737
        cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1738
    ;;
1739
    G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1740
        cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1741
    ;;
1742
    Cell|CELL|cell)
1743
        cpuflags="-mcpu=cell"
1744
        enable ldbrx
1745
    ;;
1746
    # targets that do NOT support conditional mov (cmov)
1747
    i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1748
        cpuflags="-march=$cpu"
1749
        disable cmov
1750
    ;;
1751
    # targets that do support conditional mov (cmov)
1752 d3ee7715 Reimar Döffinger
    i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1753 df5cdc24 Måns Rullgård
        cpuflags="-march=$cpu"
1754
        enable cmov
1755
        enable fast_cmov
1756
    ;;
1757
    # targets that do support conditional mov but on which it's slow
1758
    pentium4|pentium4m|prescott|nocona)
1759
        cpuflags="-march=$cpu"
1760
        enable cmov
1761
        disable fast_cmov
1762
    ;;
1763
    sparc64)
1764
        cpuflags="-mcpu=v9"
1765
    ;;
1766
    arm11*|cortex*)
1767
        cpuflags="-mcpu=$cpu"
1768
        enable fast_unaligned
1769
    ;;
1770
    armv[67]*)
1771
        cpuflags="-march=$cpu"
1772
        enable fast_unaligned
1773
    ;;
1774
    armv*)
1775
        cpuflags="-march=$cpu"
1776
    ;;
1777
    arm*)
1778
        cpuflags="-mcpu=$cpu"
1779
    ;;
1780
    ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1781
        enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1782
    ;;
1783
    bf*)
1784
        cpuflags="-mcpu=$cpu"
1785
    ;;
1786
    mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1787
        cpuflags="-march=$cpu"
1788
    ;;
1789 fdcd782d Måns Rullgård
    ap7[02]0[0-2])
1790
        subarch="avr32_ap"
1791
        cpuflags="-mpart=$cpu"
1792
    ;;
1793
    ap)
1794
        subarch="avr32_ap"
1795
        cpuflags="-march=$cpu"
1796
    ;;
1797
    uc3[ab]*)
1798
        subarch="avr32_uc"
1799
        cpuflags="-mcpu=$cpu"
1800
    ;;
1801
    uc)
1802
        subarch="avr32_uc"
1803
        cpuflags="-march=$cpu"
1804
    ;;
1805 df5cdc24 Måns Rullgård
    generic)
1806
    ;;
1807
    *)
1808
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1809
    ;;
1810
esac
1811
1812
add_cflags $cpuflags
1813
add_asflags $cpuflags
1814
1815 993f2d0f Måns Rullgård
# compiler sanity check
1816
check_exec <<EOF
1817
int main(void){ return 0; }
1818
EOF
1819
if test "$?" != 0; then
1820
    echo "$cc is unable to create an executable file."
1821
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1822
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1823
        echo "Only do this if you know what cross compiling means."
1824
    fi
1825
    die "C compiler test failed."
1826
fi
1827
1828 38a9c529 Måns Rullgård
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1829 e9b9a2f8 Michael Niedermayer
check_cflags -std=c99
1830 50a334e4 Måns Rullgård
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1831 9d821fc2 Diego Biurrun
#include <stdlib.h>
1832
EOF
1833 50a334e4 Måns Rullgård
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1834 9d821fc2 Diego Biurrun
#include <stdlib.h>
1835
EOF
1836 e9b9a2f8 Michael Niedermayer
1837 f0125de9 Måns Rullgård
check_host_cflags -std=c99
1838
1839 b24dbcbd Ramiro Polla
case "$arch" in
1840
    alpha)
1841
        arch="alpha"
1842
        enable fast_64bit
1843 c0a02a3e Måns Rullgård
        check_cflags -mieee
1844 8a3c8627 Måns Rullgård
        spic=$shared
1845 b24dbcbd Ramiro Polla
    ;;
1846 cfdb6148 Måns Rullgård
    arm|armv[4567]*l)
1847
        arch="arm"
1848 b24dbcbd Ramiro Polla
    ;;
1849 f4870943 Måns Rullgård
    avr32)
1850
    ;;
1851 cfdb6148 Måns Rullgård
    bfin)
1852
        arch="bfin"
1853
    ;;
1854
    ia64)
1855
        arch="ia64"
1856 b24dbcbd Ramiro Polla
        enable fast_64bit
1857 8a3c8627 Måns Rullgård
        spic=$shared
1858 0956bc9b Reimar Döffinger
        # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1859 ffa3bd54 Måns Rullgård
        enabled shared && enable_weak hardcoded_tables
1860 cfdb6148 Måns Rullgård
    ;;
1861
    m68k)
1862
        arch="m68k"
1863 b24dbcbd Ramiro Polla
    ;;
1864 de3a1240 Diego Biurrun
    mips|mipsel|IP*)
1865 b24dbcbd Ramiro Polla
        arch="mips"
1866 8a3c8627 Måns Rullgård
        spic=$shared
1867 b24dbcbd Ramiro Polla
    ;;
1868 de3a1240 Diego Biurrun
    mips64)
1869
        arch="mips"
1870 bae3abb0 Måns Rullgård
        subarch="mips64"
1871 de3a1240 Diego Biurrun
        enable fast_64bit
1872 8a3c8627 Måns Rullgård
        spic=$shared
1873 de3a1240 Diego Biurrun
    ;;
1874 61597a98 Diego Biurrun
    parisc|hppa)
1875 b24dbcbd Ramiro Polla
        arch="parisc"
1876 8a3c8627 Måns Rullgård
        spic=$shared
1877 b24dbcbd Ramiro Polla
    ;;
1878 61597a98 Diego Biurrun
    parisc64|hppa64)
1879 b24dbcbd Ramiro Polla
        arch="parisc"
1880
        enable fast_64bit
1881 8a3c8627 Måns Rullgård
        spic=$shared
1882 b24dbcbd Ramiro Polla
    ;;
1883 cfdb6148 Måns Rullgård
    "Power Macintosh"|ppc|powerpc)
1884
        arch="ppc"
1885
        enable fast_unaligned
1886
    ;;
1887
    ppc64)
1888
        arch="ppc"
1889 34d11b87 Reimar Döffinger
        subarch="ppc64"
1890 cfdb6148 Måns Rullgård
        enable fast_64bit
1891
        enable fast_unaligned
1892
    ;;
1893 b24dbcbd Ramiro Polla
    s390|s390x)
1894
        arch="s390"
1895
    ;;
1896 cfdb6148 Måns Rullgård
    sh4|sh)
1897
        arch="sh4"
1898 b24dbcbd Ramiro Polla
    ;;
1899 cfdb6148 Måns Rullgård
    sparc)
1900
        arch="sparc"
1901 8a3c8627 Måns Rullgård
        spic=$shared
1902 cfdb6148 Måns Rullgård
    ;;
1903
    sun4u|sparc64)
1904
        arch="sparc"
1905
        subarch="sparc64"
1906 b24dbcbd Ramiro Polla
        enable fast_64bit
1907 8a3c8627 Måns Rullgård
        spic=$shared
1908 b24dbcbd Ramiro Polla
    ;;
1909 de27f4d9 David Conrad
    i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1910 cfdb6148 Måns Rullgård
        arch="x86"
1911
        subarch="x86_32"
1912
        enable fast_unaligned
1913 8a3c8627 Måns Rullgård
        check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1914 58b3536d Måns Rullgård
        int test[(int)sizeof(char*) - 7];
1915 cfdb6148 Måns Rullgård
EOF
1916 de27f4d9 David Conrad
        if test "$subarch" = "x86_64"; then
1917
            enable cmov
1918
            enable fast_cmov
1919
        fi
1920 b24dbcbd Ramiro Polla
    ;;
1921
    *)
1922
        arch="unknown"
1923
    ;;
1924
esac
1925
1926 62045d48 Diego Biurrun
enable $arch $subarch
1927 8a3c8627 Måns Rullgård
enabled spic && enable pic
1928 5755bc88 Reimar Döffinger
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1929 b24dbcbd Ramiro Polla
1930 7483e694 Diego Biurrun
# OS specific
1931 4f854758 Diego Biurrun
case $target_os in
1932 7483e694 Diego Biurrun
    beos|haiku|zeta)
1933 c9d19248 Måns Rullgård
        prefix_default="$HOME/config"
1934 7483e694 Diego Biurrun
        # 3 gcc releases known for BeOS, each with ugly bugs
1935 5e622c40 Diego Biurrun
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1936 7483e694 Diego Biurrun
        case "$gcc_version" in
1937
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1938
            disable mmx
1939
            ;;
1940
          *20010315*) echo "BeBits gcc"
1941 0f010b2f Diego Biurrun
            add_cflags -fno-expensive-optimizations
1942 7483e694 Diego Biurrun
            ;;
1943
        esac
1944
        SHFLAGS=-nostart
1945
        # enable BeOS things
1946
        enable audio_beos
1947
        # no need for libm, but the inet stuff
1948
        # Check for BONE
1949
        # XXX: actually should check for NOT net_server
1950 78fe7631 Diego Biurrun
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1951 7483e694 Diego Biurrun
            network_extralibs="-lbind -lsocket"
1952
        else
1953
            enable beos_netserver
1954
            network_extralibs="-lnet"
1955
        fi ;;
1956
    sunos)
1957
        FFSERVERLDFLAGS=""
1958 9987769a Måns Rullgård
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1959 0600d30a Michael Kostylev
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1960 7483e694 Diego Biurrun
        network_extralibs="-lsocket -lnsl"
1961 50a334e4 Måns Rullgård
        add_cppflags -D__EXTENSIONS__
1962 7483e694 Diego Biurrun
        ;;
1963
    netbsd)
1964 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
1965
        oss_outdev_extralibs="-lossaudio"
1966 7483e694 Diego Biurrun
        ;;
1967
    openbsd)
1968 89e053f8 Måns Rullgård
        enable malloc_aligned
1969 7c4a001a Måns Rullgård
        # On OpenBSD 4.5. the compiler does not use PIC unless
1970
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
1971
        # however the generated executable will not do anything
1972
        # (simply quits with exit-code 1, no crash, no output).
1973 a7b9c8ae Reimar Döffinger
        # Thus explicitly enable PIC here.
1974 cd78208b Måns Rullgård
        enable pic
1975 7483e694 Diego Biurrun
        SHFLAGS='-shared'
1976 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
1977
        oss_outdev_extralibs="-lossaudio"
1978 7483e694 Diego Biurrun
        ;;
1979 90b4f091 Diego Biurrun
    freebsd|dragonfly)
1980 89e053f8 Måns Rullgård
        enable malloc_aligned
1981 7483e694 Diego Biurrun
        ;;
1982
    bsd/os)
1983
        osextralibs="-lpoll -lgnugetopt"
1984
        strip="strip -d"
1985
        ;;
1986
    darwin)
1987 89e053f8 Måns Rullgård
        enable malloc_aligned
1988 0138c54e Diego Biurrun
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1989 7483e694 Diego Biurrun
        strip="strip -x"
1990
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1991
        SLIBSUF=".dylib"
1992
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1993
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1994
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1995 304d586d Loren Merritt
        objformat="macho"
1996 1b0f6fb8 David Conrad
        enabled x86_64 && objformat="macho64"
1997 8dfa86f7 Måns Rullgård
        enabled_any pic shared ||
1998 2704bd1a Alexander Strange
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1999 7483e694 Diego Biurrun
        ;;
2000
    mingw32*)
2001 9d3f4f50 Martin Storsjö
        if test $target_os = "mingw32ce"; then
2002 1aa71e25 Martin Storsjö
            disable network
2003
        else
2004
            target_os=mingw32
2005
        fi
2006 dcc01c06 Ramiro Polla
        LIBTARGET=i386
2007 1fc9fb8a Diego Biurrun
        if enabled x86_64; then
2008 89e053f8 Måns Rullgård
            enable malloc_aligned
2009 dcc01c06 Ramiro Polla
            LIBTARGET=x64
2010 336cc1b0 Martin Storsjö
        elif enabled arm; then
2011
            LIBTARGET=arm
2012 dcc01c06 Ramiro Polla
        fi
2013 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2014 7483e694 Diego Biurrun
        disable ffserver
2015
        SLIBPREF=""
2016
        SLIBSUF=".dll"
2017
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2018
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2019 06abe7f5 Ramiro Polla
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2020 4c25d159 Ramiro Polla
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2021 b9349ff4 Martin Storsjö
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2022
            install -d "$(LIBDIR)"; \
2023
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2024 7483e694 Diego Biurrun
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2025 4b51fb1c Ramiro Polla
        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'
2026 304d586d Loren Merritt
        objformat="win32"
2027 bc574408 Ramiro Polla
        enable dos_paths
2028 1894e741 Ramiro Polla
        check_cflags -fno-common
2029 b1549d61 Ramiro Polla
        if ! enabled x86_64; then
2030 f7ad5aa2 Ramiro Polla
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2031
                die "ERROR: MinGW runtime version must be >= 3.15."
2032 8beb4178 Stefano Sabatini
            enabled_any avisynth vfwcap_indev &&
2033 f7ad5aa2 Ramiro Polla
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2034 8beb4178 Stefano Sabatini
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2035 f7ad5aa2 Ramiro Polla
            fi
2036 7483e694 Diego Biurrun
        ;;
2037
    cygwin*)
2038 4f854758 Diego Biurrun
        target_os=cygwin
2039 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2040 7483e694 Diego Biurrun
        SLIBPREF="cyg"
2041
        SLIBSUF=".dll"
2042
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2043
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2044
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2045 304d586d Loren Merritt
        objformat="win32"
2046 bc574408 Ramiro Polla
        enable dos_paths
2047 1894e741 Ramiro Polla
        check_cflags -fno-common
2048 7483e694 Diego Biurrun
        ;;
2049 4f365f37 Michael Kostylev
    *-dos|freedos|opendos)
2050 fdf11906 Diego Biurrun
        disable ffplay ffserver
2051 4f365f37 Michael Kostylev
        disable $INDEV_LIST $OUTDEV_LIST
2052
        network_extralibs="-lsocket"
2053 ff1c015d Michael Kostylev
        objformat="coff"
2054 bc574408 Ramiro Polla
        enable dos_paths
2055 4f365f37 Michael Kostylev
        ;;
2056 7483e694 Diego Biurrun
    linux)
2057
        enable dv1394
2058
        ;;
2059
    irix*)
2060 4f854758 Diego Biurrun
        target_os=irix
2061 7483e694 Diego Biurrun
        ranlib="echo ignoring ranlib"
2062
        ;;
2063 d22e8442 Dave Yeo
    os/2*)
2064
        strip="lxlite"
2065
        ln_s="cp -f"
2066
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2067 71c61f62 Måns Rullgård
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2068 d22e8442 Dave Yeo
        FFSERVERLDFLAGS=""
2069 287d3b13 Dave Yeo
        LIBSUF="_s.a"
2070 d22e8442 Dave Yeo
        SLIBPREF=""
2071
        SLIBSUF=".dll"
2072
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2073
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2074 71c61f62 Måns Rullgård
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2075
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2076
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2077
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2078
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2079
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2080
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2081
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2082
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2083 d22e8442 Dave Yeo
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2084 bc574408 Ramiro Polla
        enable dos_paths
2085 d22e8442 Dave Yeo
        ;;
2086 83993c1c Andres Mejia
    gnu/kfreebsd)
2087
        ;;
2088 34e82167 Andres Mejia
    gnu)
2089
        ;;
2090 d22e8442 Dave Yeo
2091 7483e694 Diego Biurrun
    *)
2092 4f924f9a Måns Rullgård
        die "Unknown OS '$target_os'."
2093 7483e694 Diego Biurrun
        ;;
2094
esac
2095
2096 c9d19248 Måns Rullgård
set_default $PATHS_LIST
2097
2098 c597172e Måns Rullgård
add_extralibs $osextralibs
2099 de6d9b64 Fabrice Bellard
2100 28d8e661 Diego Biurrun
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2101
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2102 e89b8b0a Diego Biurrun
2103 320d060a Diego Biurrun
# we need to build at least one lib type
2104 93b3c083 Måns Rullgård
if ! enabled_any static shared; then
2105 320d060a Diego Biurrun
    cat <<EOF
2106
At least one library type must be built.
2107
Specify --enable-static to build the static libraries or --enable-shared to
2108
build the shared libraries as well. To only build the shared libraries specify
2109
--disable-static in addition to --enable-shared.
2110
EOF
2111
    exit 1;
2112
fi
2113
2114 abc4e572 Diego Biurrun
disabled static && LIBNAME=""
2115 2a320695 Ramiro Polla
2116 a2234ceb Ramiro Polla
if enabled_any libfaad libfaadbin ; then
2117
    if check_header faad.h; then
2118 295b8c70 Diego Biurrun
        check_cc <<EOF
2119 a2234ceb Ramiro Polla
#include <faad.h>
2120
#ifndef FAAD2_VERSION
2121
ok faad1
2122
#endif
2123 db817cf3 Diego Biurrun
int main(void) { return 0; }
2124 a2234ceb Ramiro Polla
EOF
2125
        test $? = 0 && enable libfaad2
2126
    else
2127 ff3dac65 Diego Biurrun
        die "FAAD test failed."
2128 a2234ceb Ramiro Polla
    fi
2129
fi
2130
2131
2132 2184c6f7 Diego Biurrun
die_license_disabled() {
2133 4c27207c Måns Rullgård
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2134 2184c6f7 Diego Biurrun
}
2135
2136
die_license_disabled gpl libfaad2
2137
die_license_disabled gpl libx264
2138
die_license_disabled gpl libxvid
2139
die_license_disabled gpl postproc
2140
die_license_disabled gpl x11grab
2141
2142 2f7ae63b Diego Biurrun
die_license_disabled nonfree libfaac
2143 b2e3c528 Michael Niedermayer
2144 0b175caa Diego Biurrun
die_license_disabled version3 libopencore_amrnb
2145
die_license_disabled version3 libopencore_amrwb
2146
2147 9cad0e4e Diego Biurrun
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2148 3fe142e2 Diego Biurrun
2149 9eeed841 Måns Rullgård
check_deps $ARCH_EXT_LIST
2150 0f3cb305 Fabrice Bellard
2151 40617a6d Ben Taylor
disabled optimizations || check_cflags -fomit-frame-pointer
2152 cf9d24ad Dan Christiansen
2153 e276d9e8 Måns Rullgård
enable_pic() {
2154
    enable pic
2155 bce7b696 Måns Rullgård
    add_cppflags -DPIC
2156
    add_cflags   -fPIC
2157
    add_asflags  -fPIC
2158 e276d9e8 Måns Rullgård
}
2159
2160
enabled pic && enable_pic
2161 bce7b696 Måns Rullgård
2162 b4d96ba2 Måns Rullgård
check_cc <<EOF || die "Symbol mangling check failed."
2163
int ff_extern;
2164
EOF
2165 2f05d9c1 Matthieu Castet
sym=$($nm -P -g $TMPO | grep ff_extern)
2166 b4d96ba2 Måns Rullgård
extern_prefix=${sym%%ff_extern*}
2167
2168 f65883c8 Måns Rullgård
check_cc <<EOF && enable inline_asm
2169
void foo(void) { __asm__ volatile ("" ::); }
2170
EOF
2171 61d251db Måns Rullgård
2172 df5e3978 Måns Rullgård
_restrict=
2173
for restrict_keyword in restrict __restrict__ __restrict; do
2174
    check_cc <<EOF && _restrict=$restrict_keyword && break
2175
void foo(char * $restrict_keyword p);
2176
EOF
2177
done
2178
2179
check_cc <<EOF && enable attribute_packed
2180
struct { int x; } __attribute__((packed)) x;
2181
EOF
2182
2183
check_cc <<EOF || die "endian test failed"
2184
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2185
EOF
2186
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2187
2188 fa0912fe Måns Rullgård
if enabled arm; then
2189 e45391bb Måns Rullgård
2190 50fa82e6 Måns Rullgård
    check_cflags -marm
2191
2192 fa0912fe Måns Rullgård
    check_ld <<EOF && enable vfp_args
2193
__asm__ (".eabi_attribute 28, 1");
2194
int main(void) { return 0; }
2195
EOF
2196
2197
    # We have to check if pld is a nop and disable it.
2198
    check_asm pld '"pld [r0]"'
2199
2200
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2201
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2202
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2203
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2204
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2205
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2206 e45391bb Måns Rullgård
2207 e276d9e8 Måns Rullgård
    enabled_all armv6t2 shared !pic && enable_pic
2208
2209 fa0912fe Måns Rullgård
elif enabled mips; then
2210 e45391bb Måns Rullgård
2211 fa0912fe Måns Rullgård
    check_asm loongson '"dmult.g $1, $2, $3"'
2212
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2213 e45391bb Måns Rullgård
2214 fa0912fe Måns Rullgård
elif enabled ppc; then
2215 e45391bb Måns Rullgård
2216 fa0912fe Måns Rullgård
    check_asm dcbzl     '"dcbzl 0, 1"'
2217
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2218 64de20d1 Måns Rullgård
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2219 fa0912fe Måns Rullgård
2220
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2221
    if enabled altivec; then
2222
        check_cflags -maltivec -mabi=altivec &&
2223
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2224
        check_cflags -faltivec
2225
2226
        # check if our compiler supports Motorola AltiVec C API
2227
        check_cc <<EOF || disable altivec
2228
$inc_altivec_h
2229
int main(void) {
2230
    vector signed int v1, v2, v3;
2231
    v1 = vec_add(v2,v3);
2232
    return 0;
2233
}
2234
EOF
2235
2236
        # check if our compiler supports braces for vector declarations
2237
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2238
$inc_altivec_h
2239
int main (void) { (vector int) {1}; return 0; }
2240
EOF
2241
    fi
2242 e45391bb Måns Rullgård
2243 fa0912fe Måns Rullgård
elif enabled sparc; then
2244 e45391bb Måns Rullgård
2245 fa0912fe Måns Rullgård
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2246
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2247 e45391bb Måns Rullgård
2248 fa0912fe Måns Rullgård
elif enabled x86; then
2249 e45391bb Måns Rullgård
2250 44965991 Panagiotis Issaris
    # check whether EBP is available on x86
2251
    # As 'i' is stored on the stack, this program will crash
2252
    # if the base pointer is used to access it because the
2253
    # base pointer is cleared in the inline assembly code.
2254 7dfef245 Måns Rullgård
    check_exec_crash <<EOF && enable ebp_available
2255 44965991 Panagiotis Issaris
    volatile int i=0;
2256 be449fca Diego Pettenò
    __asm__ volatile (
2257 44965991 Panagiotis Issaris
        "xorl %%ebp, %%ebp"
2258
    ::: "%ebp");
2259
    return i;
2260
EOF
2261
2262 f494213c Reimar Döffinger
    # check whether EBX is available on x86
2263 7cee5421 Måns Rullgård
    check_asm ebx_available '""::"b"(0)' &&
2264
        check_asm ebx_available '"":::"%ebx"'
2265 8e380710 Loren Merritt
2266 d3a4b4e0 Diego Biurrun
    # check whether more than 10 operands are supported
2267
    check_cc <<EOF && enable ten_operands
2268
int main(void) {
2269
    int x=0;
2270
    __asm__ volatile(
2271
        ""
2272
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2273
    );
2274
    return 0;
2275
}
2276
EOF
2277
2278 d7f0920b Alexander Strange
    # check whether binutils is new enough to compile SSSE3/MMX2
2279 940f335a Måns Rullgård
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2280 5fd89ca0 Diego Biurrun
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2281 6bd859d6 Måns Rullgård
2282
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2283 304d586d Loren Merritt
2284 d52481b9 Ramiro Polla
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2285 304d586d Loren Merritt
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2286 a34ebe60 Reimar Döffinger
    enabled     pic           && append YASMFLAGS "-DPIC"
2287 5f36d94d Reimar Döffinger
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2288 304d586d Loren Merritt
    case "$objformat" in
2289
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2290
    esac
2291 7595a5e4 Måns Rullgård
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2292 e45391bb Måns Rullgård
2293 44965991 Panagiotis Issaris
fi
2294
2295 a98bb16d Ramiro Polla
if check_func dlopen; then
2296
    ldl=
2297
elif check_func dlopen -ldl; then
2298
    ldl=-ldl
2299 8bf5d58f Michael Niedermayer
fi
2300
2301 75ecf149 Diego Biurrun
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2302
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2303
2304 7483e694 Diego Biurrun
check_func  fork
2305
check_func  gethrtime
2306
check_func  getrusage
2307 094c09bb Michael Kostylev
check_func  inet_aton $network_extralibs
2308 abfc8d05 Martin Storsjö
check_func  isatty
2309 7483e694 Diego Biurrun
check_func  memalign
2310
check_func  mkstemp
2311 1f91cdce Ramiro Polla
check_func  posix_memalign
2312 b507ebd1 Ramiro Polla
check_func_headers io.h setmode
2313 e4673692 Diego Biurrun
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2314 2446d3d6 Diego Biurrun
check_func_headers windows.h GetProcessTimes
2315 7c5bfe7a Ramiro Polla
check_func_headers windows.h VirtualAlloc
2316 6ffa87d3 Ramiro Polla
2317 e16e49ac Ramiro Polla
check_header conio.h
2318 a98bb16d Ramiro Polla
check_header dlfcn.h
2319
check_header malloc.h
2320 bf6ce82d Diego Biurrun
check_header poll.h
2321 b58412f1 Alexander Strange
check_header sys/mman.h
2322 b091aa44 Ramiro Polla
check_header sys/resource.h
2323 bf6ce82d Diego Biurrun
check_header sys/select.h
2324 a98bb16d Ramiro Polla
check_header termios.h
2325 272081b0 Carl Eugen Hoyos
check_header vdpau/vdpau.h
2326
check_header vdpau/vdpau_x11.h
2327 68178ca9 Diego Biurrun
check_header X11/extensions/XvMClib.h
2328 a98bb16d Ramiro Polla
2329 89e053f8 Måns Rullgård
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2330
     enabled_any $need_memalign ; then
2331 1f91cdce Ramiro Polla
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2332 a98bb16d Ramiro Polla
fi
2333 e16e49ac Ramiro Polla
2334 a4fa192c Ramiro Polla
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2335 632948bd Ramiro Polla
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2336 57bd82d4 Måns Rullgård
2337
# check for some common methods of building with pthread support
2338
# do this before the optional library checks as some of them require pthreads
2339
if enabled pthreads; then
2340 9e7fd101 Måns Rullgård
    if check_func pthread_create; then
2341
        :
2342
    elif check_func pthread_create -pthread; then
2343
        add_cflags -pthread
2344 afc9aee2 Diego Biurrun
        add_extralibs -pthread
2345 9e7fd101 Måns Rullgård
    elif check_func pthread_create -pthreads; then
2346
        add_cflags -pthreads
2347 afc9aee2 Diego Biurrun
        add_extralibs -pthreads
2348 8d94f606 Gianluigi Tiesi
    elif check_func pthread_create -lpthreadGC2; then
2349
        add_extralibs -lpthreadGC2
2350 9e7fd101 Måns Rullgård
    elif ! check_lib pthread.h pthread_create -lpthread; then
2351
        die "ERROR: can't find pthreads library"
2352
    fi
2353 57bd82d4 Måns Rullgård
fi
2354
2355 8eee7025 Diego Biurrun
for thread in $THREADS_LIST; do
2356 e5f94c2b Ramiro Polla
    if enabled $thread; then
2357 3ae3b721 Ramiro Polla
        test -n "$thread_type" &&
2358
            die "ERROR: Only one thread type must be selected." ||
2359 e5f94c2b Ramiro Polla
            thread_type="$thread"
2360
    fi
2361
done
2362
2363 fdf88598 Måns Rullgård
check_lib math.h sin -lm
2364 ff418735 Gwenole Beauchesne
check_lib va/va.h vaInitialize -lva
2365 fdf88598 Måns Rullgård
2366 ad420e25 Måns Rullgård
check_func llrint
2367
check_func log2
2368
check_func lrint
2369
check_func lrintf
2370
check_func round
2371
check_func roundf
2372
check_func truncf
2373 f32adb22 Måns Rullgård
2374 57bd82d4 Måns Rullgård
# these are off by default, so fail if requested and not available
2375 79fda097 Diego Biurrun
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2376 e3cc7d6f Diego Biurrun
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2377 2513b2b4 Diego Biurrun
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2378
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2379 79fda097 Diego Biurrun
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2380
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2381 7483e694 Diego Biurrun
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2382 2bfecf73 Stefano Sabatini
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2383 7483e694 Diego Biurrun
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2384 0b175caa Diego Biurrun
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2385
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2386 3d6fac8c Mathieu Malaterre
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2387 36718e51 Diego Biurrun
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2388
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2389 ae14f311 David Conrad
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2390 c261a5d9 David Conrad
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2391 7483e694 Diego Biurrun
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2392 e69bb386 Måns Rullgård
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2393 096c87f6 Jason Garrett-Glaser
                      { check_cpp_condition x264.h "X264_BUILD >= 79" ||
2394
                        die "ERROR: libx264 version must be >= 0.79."; }
2395 2bfecf73 Stefano Sabatini
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2396 7483e694 Diego Biurrun
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2397 8ac17293 Steve L'Homme
2398 0b4a1821 Alessandro Sappia
# libdc1394 check
2399
if enabled libdc1394; then
2400
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2401
        enable libdc1394_2; } ||
2402
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2403
        enable libdc1394_1; } ||
2404
    die "ERROR: No version of libdc1394 found "
2405
fi
2406
2407 497237c7 Ramiro Polla
disable sdl_too_old
2408
disable sdl
2409 6a1a892f Frantisek Dvorak
SDL_CONFIG="${cross_prefix}sdl-config"
2410 2270b4b2 Diego Biurrun
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2411 5e622c40 Diego Biurrun
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2412 b4f93564 Måns Rullgård
    sdl_libs=$("${SDL_CONFIG}" --libs)
2413 225e21ef Måns Rullgård
    temp_cflags $sdl_cflags
2414 b4f93564 Måns Rullgård
    temp_extralibs $sdl_libs
2415 1ca5d97f KO Myung-Hun
    if check_lib2 SDL.h SDL_Init; then
2416 5e622c40 Diego Biurrun
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2417 29f3b38a Måns Rullgård
        if test "$_sdlversion" -lt 121 ; then
2418 497237c7 Ramiro Polla
            enable sdl_too_old
2419 dcd479c0 Måns Rullgård
        else
2420 497237c7 Ramiro Polla
            enable sdl
2421 225e21ef Måns Rullgård
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2422 29f3b38a Måns Rullgård
#include <SDL.h>
2423 d6773f56 Diego Biurrun
int main(int argc, char **argv){
2424 29f3b38a Måns Rullgård
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2425
    int w = vi->current_w;
2426
    return 0;
2427
}
2428
EOF
2429 dcd479c0 Måns Rullgård
        fi
2430
    fi
2431 29f3b38a Måns Rullgård
    restore_flags
2432 c3f6b472 Michael Niedermayer
fi
2433 57bd82d4 Måns Rullgård
2434 2270b4b2 Diego Biurrun
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2435 146ea952 Nicolas Boos
2436 73b46a95 Ramiro Polla
if enabled network; then
2437 96000432 Reimar Döffinger
    check_type "sys/types.h sys/socket.h" socklen_t
2438 73b46a95 Ramiro Polla
    # Prefer arpa/inet.h over winsock2
2439
    if check_header arpa/inet.h ; then
2440
        check_func closesocket
2441
    elif check_header winsock2.h ; then
2442 f4c13872 Martin Storsjö
        check_func_headers winsock2.h closesocket -lws2 && \
2443
            network_extralibs="-lws2" || \
2444
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2445
            network_extralibs="-lws2_32"; }
2446 72be9e73 Dave Yeo
        check_type ws2tcpip.h socklen_t
2447 28c9f069 Michael Kostylev
    else
2448
        disable network
2449 73b46a95 Ramiro Polla
    fi
2450
fi
2451
2452 b6f3d925 Måns Rullgård
enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2453 7a91333f Hans Zandbelt
#include <sys/types.h>
2454
#include <sys/socket.h>
2455
#include <netinet/in.h>
2456
#include <netdb.h>
2457 db817cf3 Diego Biurrun
int main(void) {
2458 7483e694 Diego Biurrun
    struct sockaddr_storage saddr;
2459
    struct ipv6_mreq mreq6;
2460
    getaddrinfo(0,0,0,0);
2461
    getnameinfo(0,0,0,0,0,0,0);
2462
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2463 7a91333f Hans Zandbelt
}
2464
EOF
2465
2466 06e31011 Ramiro Polla
check_header linux/videodev.h
2467
check_header linux/videodev2.h
2468 1b6e8b73 Brad
check_header sys/videoio.h
2469 47f38850 Luca Abeni
2470 2446d3d6 Diego Biurrun
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2471 c2345207 Ramiro Polla
2472 f8aa696f Diego Biurrun
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2473 1c915f83 Ramiro Polla
{ check_header dev/bktr/ioctl_meteor.h &&
2474
  check_header dev/bktr/ioctl_bt848.h; } ||
2475
{ check_header machine/ioctl_meteor.h &&
2476
  check_header machine/ioctl_bt848.h; } ||
2477
{ check_header dev/video/meteor/ioctl_meteor.h &&
2478
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2479
check_header dev/ic/bt8xx.h
2480 f8aa696f Diego Biurrun
2481 c7682de0 Ramiro Polla
check_header sys/soundcard.h
2482
check_header soundcard.h
2483 deb29777 Måns Rullgård
2484 b6f3d925 Måns Rullgård
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2485 35fd8122 Nicolas George
2486 0e57fe17 Carl Eugen Hoyos
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2487 80ff8a16 Olivier Guilyardi
2488 56a059ac Diego Biurrun
enabled x11grab                         &&
2489 f58f4ce1 Guillaume Poirier
check_header X11/Xlib.h                 &&
2490
check_header X11/extensions/XShm.h      &&
2491 0a045661 Baptiste Coudurier
check_header X11/extensions/Xfixes.h    &&
2492 f58f4ce1 Guillaume Poirier
check_func XOpenDisplay -lX11           &&
2493 781c1aa6 Roxis
check_func XShmCreateImage -lX11 -lXext &&
2494
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2495 f58f4ce1 Guillaume Poirier
2496 deda2a4a Alex Converse
check_cpp_condition \
2497
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2498 d1ebd4a9 Alex Converse
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2499
      disable vdpau; }
2500 deda2a4a Alex Converse
2501 95e561ec Måns Rullgård
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2502 57bd82d4 Måns Rullgård
2503
# add some useful compiler flags if supported
2504
check_cflags -Wdeclaration-after-statement
2505 dcd479c0 Måns Rullgård
check_cflags -Wall
2506
check_cflags -Wno-switch
2507 c07bd6a9 Michael Niedermayer
check_cflags -Wdisabled-optimization
2508
check_cflags -Wpointer-arith
2509
check_cflags -Wredundant-decls
2510 cc1fb623 Måns Rullgård
check_cflags -Wno-pointer-sign
2511 f4929996 Michael Niedermayer
check_cflags -Wcast-qual
2512 9aceb3cf Michael Niedermayer
check_cflags -Wwrite-strings
2513 652a5bf6 Michael Niedermayer
check_cflags -Wtype-limits
2514 764551c6 Aurelien Jacobs
check_cflags -Wundef
2515 5af4e0cc Måns Rullgård
enabled extra_warnings && check_cflags -Winline
2516 cf9d24ad Dan Christiansen
2517 57bd82d4 Måns Rullgård
# add some linker flags
2518 5c0e9479 Måns Rullgård
check_ldflags -Wl,--warn-common
2519 8351d2ba Diego Biurrun
check_ldflags -Wl,--as-needed
2520
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'
2521 c2fd6530 Måns Rullgård
check_ldflags -Wl,-Bsymbolic
2522 94a3401e Fabrice Bellard
2523 bd2216e4 Måns Rullgård
if enabled small; then
2524
    check_cflags -Os            # not all compilers support -Os
2525 8400d6b8 Diego Biurrun
    optimizations="small"
2526
elif enabled optimizations; then
2527 629687f6 Måns Rullgård
    if enabled xlc; then
2528 0f010b2f Diego Biurrun
        add_cflags  -O5
2529
        add_ldflags -O5
2530 03279bbe Michael Kostylev
    elif enabled suncc; then
2531
        add_cflags -O5
2532 df442a8d Måns Rullgård
    elif enabled ccc; then
2533
        add_cflags -fast
2534 cf9d24ad Dan Christiansen
    else
2535 0f010b2f Diego Biurrun
        add_cflags -O3
2536 cf9d24ad Dan Christiansen
    fi
2537 cddf3f45 Glenn Maynard
fi
2538 11fdbc44 Michael Niedermayer
check_cflags -fno-math-errno
2539 b2eb2ff0 Michael Niedermayer
check_cflags -fno-signed-zeros
2540 cddf3f45 Glenn Maynard
2541 629687f6 Måns Rullgård
if enabled icc; then
2542 b1598b58 Måns Rullgård
    # Just warnings, no remarks
2543
    check_cflags -w1
2544
    # -wd: Disable following warnings
2545
    # 144, 167, 556: -Wno-pointer-sign
2546
    # 10006: ignoring unknown option -fno-signed-zeros
2547
    # 10156: ignoring option '-W'; no argument required
2548
    check_cflags -wd144,167,556,10006,10156
2549
    # 11030: Warning unknown option --as-needed
2550
    # 10156: ignoring option '-export'; no argument required
2551
    check_ldflags -wd10156,11030
2552
    # Allow to compile with optimizations
2553
    check_ldflags -march=$cpu
2554 be2cf98a Carl Eugen Hoyos
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2555
    enable ebp_available
2556 df442a8d Måns Rullgård
elif enabled ccc; then
2557
    # disable some annoying warnings
2558
    add_cflags -msg_disable cvtu32to64
2559
    add_cflags -msg_disable embedcomment
2560
    add_cflags -msg_disable needconstext
2561
    add_cflags -msg_disable nomainieee
2562
    add_cflags -msg_disable ptrmismatch1
2563
    add_cflags -msg_disable unreachcode
2564 973859f5 Måns Rullgård
elif enabled gcc; then
2565
    check_cflags -fno-tree-vectorize
2566 06da6943 David Conrad
elif enabled clang; then
2567
    check_cflags -Qunused-arguments
2568 504a64b9 Carl Eugen Hoyos
fi
2569
2570 90be59ef Ramiro Polla
if enabled gprof; then
2571 0f010b2f Diego Biurrun
    add_cflags  -p
2572
    add_ldflags -p
2573 1db54e20 Diego Biurrun
fi
2574
2575 7f3c02fc Diego Biurrun
# Find out if the .align argument is a power of two or not.
2576 9377b6ce Måns Rullgård
check_asm asmalign_pot '".align 3"'
2577 4454dc1b John Dalgliesh
2578 7483e694 Diego Biurrun
enabled_any $DECODER_LIST      && enable decoders
2579
enabled_any $ENCODER_LIST      && enable encoders
2580 5666fd73 Gwenole Beauchesne
enabled_any $HWACCEL_LIST      && enable hwaccels
2581 7483e694 Diego Biurrun
enabled_any $BSF_LIST          && enable bsfs
2582
enabled_any $DEMUXER_LIST      && enable demuxers
2583
enabled_any $MUXER_LIST        && enable muxers
2584 f7679c54 Vitor Sessak
enabled_any $FILTER_LIST       && enable filters
2585 63d72fda Diego Biurrun
enabled_any $INDEV_LIST        && enable indevs
2586
enabled_any $OUTDEV_LIST       && enable outdevs
2587 7483e694 Diego Biurrun
enabled_any $PROTOCOL_LIST     && enable protocols
2588
2589
enabled_any $THREADS_LIST      && enable threads
2590
2591
check_deps $CONFIG_LIST       \
2592 b6bb00b0 Måns Rullgård
           $CONFIG_EXTRA      \
2593 7483e694 Diego Biurrun
           $HAVE_LIST         \
2594
           $DECODER_LIST      \
2595
           $ENCODER_LIST      \
2596 5666fd73 Gwenole Beauchesne
           $HWACCEL_LIST      \
2597 7483e694 Diego Biurrun
           $PARSER_LIST       \
2598
           $BSF_LIST          \
2599
           $DEMUXER_LIST      \
2600
           $MUXER_LIST        \
2601 f7679c54 Vitor Sessak
           $FILTER_LIST       \
2602 7483e694 Diego Biurrun
           $INDEV_LIST        \
2603
           $OUTDEV_LIST       \
2604
           $PROTOCOL_LIST     \
2605 f70f03f6 Måns Rullgård
2606 3e89171a Måns Rullgård
echo "install prefix            $prefix"
2607 f36958f8 Diego Biurrun
echo "source path               $source_path"
2608
echo "C compiler                $cc"
2609 bfd5afd8 Diego Biurrun
echo ".align is power-of-two    $asmalign_pot"
2610 f36958f8 Diego Biurrun
echo "ARCH                      $arch ($cpu)"
2611 ce8871c2 Måns Rullgård
if test "$build_suffix" != ""; then
2612
    echo "build suffix              $build_suffix"
2613 eb94aca9 Charles Yates
fi
2614 ac63af34 Diego Biurrun
if test "$extra_version" != ""; then
2615
    echo "version string suffix     $extra_version"
2616
fi
2617 0db2ce77 Måns Rullgård
echo "big-endian                ${bigendian-no}"
2618 e90f5b5a Ramiro Polla
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2619 5b6c2cbd Diego Biurrun
if enabled x86; then
2620 af44e8e4 Carl Eugen Hoyos
    echo "yasm                      ${yasm-no}"
2621 0db2ce77 Måns Rullgård
    echo "MMX enabled               ${mmx-no}"
2622 30e98e62 Diego Biurrun
    echo "MMX2 enabled              ${mmx2-no}"
2623 3bf96eec Diego Biurrun
    echo "3DNow! enabled            ${amd3dnow-no}"
2624 a1ef9f08 Diego Biurrun
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2625 1bb04d5a Ramiro Polla
    echo "SSE enabled               ${sse-no}"
2626 30e98e62 Diego Biurrun
    echo "SSSE3 enabled             ${ssse3-no}"
2627 0db2ce77 Måns Rullgård
    echo "CMOV enabled              ${cmov-no}"
2628
    echo "CMOV is fast              ${fast_cmov-no}"
2629 971cc990 Michael Niedermayer
    echo "EBX available             ${ebx_available-no}"
2630
    echo "EBP available             ${ebp_available-no}"
2631 d3a4b4e0 Diego Biurrun
    echo "10 operands supported     ${ten_operands-no}"
2632 e41e8342 Fabrice Bellard
fi
2633 5b6c2cbd Diego Biurrun
if enabled arm; then
2634 0db2ce77 Måns Rullgård
    echo "ARMv5TE enabled           ${armv5te-no}"
2635
    echo "ARMv6 enabled             ${armv6-no}"
2636 ab5cb084 Måns Rullgård
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2637 f55b299a Måns Rullgård
    echo "ARM VFP enabled           ${armvfp-no}"
2638 0db2ce77 Måns Rullgård
    echo "IWMMXT enabled            ${iwmmxt-no}"
2639 6b18d278 Måns Rullgård
    echo "NEON enabled              ${neon-no}"
2640 eba9ae3c Gildas Bazin
fi
2641 5b6c2cbd Diego Biurrun
if enabled mips; then
2642 0db2ce77 Måns Rullgård
    echo "MMI enabled               ${mmi-no}"
2643 e41e8342 Fabrice Bellard
fi
2644 5b6c2cbd Diego Biurrun
if enabled ppc; then
2645 0db2ce77 Måns Rullgård
    echo "AltiVec enabled           ${altivec-no}"
2646 30e98e62 Diego Biurrun
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2647 0db2ce77 Måns Rullgård
    echo "dcbzl available           ${dcbzl-no}"
2648 30e98e62 Diego Biurrun
    echo "performance report        ${powerpc_perf-no}"
2649
fi
2650
if enabled sparc; then
2651
    echo "VIS enabled               ${vis-no}"
2652 e41e8342 Fabrice Bellard
fi
2653 0db2ce77 Måns Rullgård
echo "gprof enabled             ${gprof-no}"
2654
echo "debug symbols             ${debug-no}"
2655 87a0fb62 Diego Biurrun
echo "strip symbols             ${stripping-no}"
2656 8400d6b8 Diego Biurrun
echo "optimizations             ${optimizations-no}"
2657 0db2ce77 Måns Rullgård
echo "static                    ${static-no}"
2658
echo "shared                    ${shared-no}"
2659 4a24ab64 Diego Biurrun
echo "postprocessing support    ${postproc-no}"
2660 f7679c54 Vitor Sessak
echo "new filter support        ${avfilter-no}"
2661 81124ba0 Vitor Sessak
echo "filters using lavformat   ${avfilter_lavf-no}"
2662 0db2ce77 Måns Rullgård
echo "network support           ${network-no}"
2663 90be59ef Ramiro Polla
if enabled network; then
2664 0db2ce77 Måns Rullgård
    echo "IPv6 support              ${ipv6-no}"
2665 bfd5afd8 Diego Biurrun
fi
2666 0db2ce77 Måns Rullgård
echo "threading support         ${thread_type-no}"
2667
echo "SDL support               ${sdl-no}"
2668 90be59ef Ramiro Polla
if enabled sdl_too_old; then
2669 bfd5afd8 Diego Biurrun
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2670
fi
2671 0db2ce77 Måns Rullgård
echo "Sun medialib support      ${mlib-no}"
2672
echo "AVISynth enabled          ${avisynth-no}"
2673 f7b8bffe Ramiro Polla
echo "libdc1394 support         ${libdc1394-no}"
2674 690bfceb Anuradha Suraparaju
echo "libdirac enabled          ${libdirac-no}"
2675 0db2ce77 Måns Rullgård
echo "libfaac enabled           ${libfaac-no}"
2676
echo "libfaad enabled           ${libfaad-no}"
2677 7e0871a7 Diego Biurrun
echo "libfaad dlopened          ${libfaadbin-no}"
2678 0db2ce77 Måns Rullgård
echo "libgsm enabled            ${libgsm-no}"
2679
echo "libmp3lame enabled        ${libmp3lame-no}"
2680
echo "libnut enabled            ${libnut-no}"
2681 0b175caa Diego Biurrun
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2682
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2683 9a77d59a Jai Menon
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2684 f7cd9eed Anuradha Suraparaju
echo "libschroedinger enabled   ${libschroedinger-no}"
2685 ae14f311 David Conrad
echo "libspeex enabled          ${libspeex-no}"
2686 0db2ce77 Måns Rullgård
echo "libtheora enabled         ${libtheora-no}"
2687
echo "libvorbis enabled         ${libvorbis-no}"
2688 d6bd62db Diego Biurrun
echo "libx264 enabled           ${libx264-no}"
2689
echo "libxvid enabled           ${libxvid-no}"
2690 0db2ce77 Måns Rullgård
echo "zlib enabled              ${zlib-no}"
2691 f402916e Aurelien Jacobs
echo "bzlib enabled             ${bzlib-no}"
2692 2c62e737 Diego Biurrun
echo
2693 de6d9b64 Fabrice Bellard
2694 5666fd73 Gwenole Beauchesne
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2695 8138b9db Ramiro Polla
    echo "Enabled ${type}s:"
2696 f65c9da1 Måns Rullgård
    eval list=\$$(toupper $type)_LIST
2697 8138b9db Ramiro Polla
    for part in $list; do
2698 f65c9da1 Måns Rullgård
        enabled $part && echo ${part%_*}
2699
    done | sort | pr -3 -t
2700
    echo
2701 8138b9db Ramiro Polla
done
2702
2703 ba7a7039 Diego Biurrun
license="LGPL version 2.1 or later"
2704 ba321adb Jeremy Kolb
if enabled nonfree; then
2705 ba7a7039 Diego Biurrun
    license="nonfree and unredistributable"
2706 9cad0e4e Diego Biurrun
elif enabled gplv3; then
2707
    license="GPL version 3 or later"
2708
elif enabled lgplv3; then
2709
    license="LGPL version 3 or later"
2710 ba321adb Jeremy Kolb
elif enabled gpl; then
2711 ba7a7039 Diego Biurrun
    license="GPL version 2 or later"
2712 ba321adb Jeremy Kolb
fi
2713
2714
echo "License: $license"
2715 ca5323af Roberto Togni
2716 cf1392e9 Diego Biurrun
echo "Creating config.mak and config.h..."
2717
2718 ad212cc6 Måns Rullgård
enabled stripping || strip="echo skipping strip"
2719
2720 173c983b Måns Rullgård
cat > config.mak <<EOF
2721
# Automatically generated by configure - do not modify!
2722
ifndef FFMPEG_CONFIG_MAK
2723
FFMPEG_CONFIG_MAK=1
2724
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2725
prefix=$prefix
2726
LIBDIR=\$(DESTDIR)$libdir
2727
SHLIBDIR=\$(DESTDIR)$shlibdir
2728
INCDIR=\$(DESTDIR)$incdir
2729
BINDIR=\$(DESTDIR)$bindir
2730
DATADIR=\$(DESTDIR)$datadir
2731
MANDIR=\$(DESTDIR)$mandir
2732
SRC_PATH="$source_path"
2733
SRC_PATH_BARE=$source_path
2734
BUILD_ROOT="$PWD"
2735
ARCH=$arch
2736
CC=$cc
2737
AS=$as
2738
LD=$ld
2739
DEPCC=$dep_cc
2740
YASM=$yasmexe
2741
AR=$ar
2742
RANLIB=$ranlib
2743
LN_S=$ln_s
2744
STRIP=$strip
2745
CPPFLAGS=$CPPFLAGS
2746
CFLAGS=$CFLAGS
2747
ASFLAGS=$ASFLAGS
2748
CC_O=$CC_O
2749
LDFLAGS=$LDFLAGS
2750
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2751
SHFLAGS=$SHFLAGS
2752
YASMFLAGS=$YASMFLAGS
2753
BUILDSUF=$build_suffix
2754
FULLNAME=$FULLNAME
2755
LIBPREF=$LIBPREF
2756
LIBSUF=$LIBSUF
2757
LIBNAME=$LIBNAME
2758
SLIBPREF=$SLIBPREF
2759
SLIBSUF=$SLIBSUF
2760
EXESUF=$EXESUF
2761
EXTRA_VERSION=$extra_version
2762
DEPFLAGS=$DEPFLAGS
2763
CCDEP=$CCDEP
2764
ASDEP=$ASDEP
2765
CC_DEPFLAGS=$CC_DEPFLAGS
2766
AS_DEPFLAGS=$AS_DEPFLAGS
2767
HOSTCC=$host_cc
2768
HOSTCFLAGS=$host_cflags
2769
HOSTEXESUF=$HOSTEXESUF
2770
HOSTLDFLAGS=$host_ldflags
2771
HOSTLIBS=$host_libs
2772
TARGET_EXEC=$target_exec
2773
TARGET_PATH=$target_path
2774
SDL_LIBS=$sdl_libs
2775
SDL_CFLAGS=$sdl_cflags
2776
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2777
EXTRALIBS=$extralibs
2778
EOF
2779 5a872801 Luca Barbato
2780 719c8e00 Måns Rullgård
get_version(){
2781
    name=$1
2782
    file=$source_path/$2
2783 147e7692 Måns Rullgård
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2784
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2785 0e32c8c6 Måns Rullgård
    lcname=$(tolower $name)
2786
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2787
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2788 719c8e00 Måns Rullgård
}
2789
2790 147e7692 Måns Rullgård
get_version LIBSWSCALE  libswscale/swscale.h
2791
get_version LIBPOSTPROC libpostproc/postprocess.h
2792
get_version LIBAVCODEC  libavcodec/avcodec.h
2793
get_version LIBAVDEVICE libavdevice/avdevice.h
2794
get_version LIBAVFORMAT libavformat/avformat.h
2795
get_version LIBAVUTIL   libavutil/avutil.h
2796 a6601d69 Måns Rullgård
get_version LIBAVFILTER libavfilter/avfilter.h
2797 5a872801 Luca Barbato
2798 173c983b Måns Rullgård
enabled shared && cat >> config.mak <<EOF
2799
LIBTARGET=${LIBTARGET}
2800
SLIBNAME=${SLIBNAME}
2801
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2802
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2803
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2804
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2805
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2806
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2807
EOF
2808 523ef551 Diego Biurrun
2809 173c983b Måns Rullgård
enabled asmalign_pot || align_shift="1 <<"
2810
2811
cat > $TMPH <<EOF
2812
/* Automatically generated by configure - do not modify! */
2813
#ifndef FFMPEG_CONFIG_H
2814
#define FFMPEG_CONFIG_H
2815
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2816 c1736936 Diego Biurrun
#define FFMPEG_LICENSE "$(c_escape $license)"
2817 173c983b Måns Rullgård
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2818
#define CC_TYPE "$cc_type"
2819
#define CC_VERSION $cc_version
2820
#define restrict $_restrict
2821
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2822
#define EXTERN_PREFIX "${extern_prefix}"
2823
#define EXTERN_ASM ${extern_prefix}
2824
EOF
2825 523ef551 Diego Biurrun
2826
if enabled small || disabled optimizations; then
2827
    echo "#define av_always_inline"  >> $TMPH
2828
fi
2829
2830 3d907e22 Måns Rullgård
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2831
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2832 7483e694 Diego Biurrun
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2833 b6bb00b0 Måns Rullgård
                                      $CONFIG_EXTRA      \
2834 7483e694 Diego Biurrun
                                      $DECODER_LIST      \
2835
                                      $ENCODER_LIST      \
2836 5666fd73 Gwenole Beauchesne
                                      $HWACCEL_LIST      \
2837 7483e694 Diego Biurrun
                                      $PARSER_LIST       \
2838
                                      $BSF_LIST          \
2839
                                      $DEMUXER_LIST      \
2840
                                      $MUXER_LIST        \
2841 f7679c54 Vitor Sessak
                                      $FILTER_LIST       \
2842 7483e694 Diego Biurrun
                                      $PROTOCOL_LIST     \
2843
                                      $INDEV_LIST        \
2844
                                      $OUTDEV_LIST       \
2845 8ac17293 Steve L'Homme
2846 9c05103f Diego Biurrun
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2847 8c6d2da5 Måns Rullgård
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2848 9c05103f Diego Biurrun
2849 b7860763 Diego Biurrun
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2850 3ae3b721 Ramiro Polla
cmp -s $TMPH config.h &&
2851
    echo "config.h is unchanged" ||
2852
    mv -f $TMPH config.h
2853 3d204385 Nick Kurshev
2854 165af439 Måns Rullgård
# build tree in object directory if source path is different from current one
2855 90be59ef Ramiro Polla
if enabled source_path_used; then
2856 b767b9cd Måns Rullgård
    DIRS="
2857
        doc
2858
        libavcodec
2859
        libavcodec/$arch
2860
        libavdevice
2861
        libavfilter
2862
        libavformat
2863
        libavutil
2864
        libavutil/$arch
2865
        libpostproc
2866
        libswscale
2867
        libswscale/$arch
2868
        tests
2869
        tools
2870
    "
2871
    FILES="
2872
        Makefile
2873
        common.mak
2874
        subdir.mak
2875
        doc/texi2pod.pl
2876
        libavcodec/Makefile
2877
        libavdevice/Makefile
2878
        libavfilter/Makefile
2879
        libavformat/Makefile
2880
        libavutil/Makefile
2881
        libpostproc/Makefile
2882
        libswscale/Makefile
2883
    "
2884 165af439 Måns Rullgård
    for dir in $DIRS ; do
2885 7483e694 Diego Biurrun
        mkdir -p $dir
2886 165af439 Måns Rullgård
    done
2887
    for f in $FILES ; do
2888 20369773 Dave Yeo
        $ln_s "$source_path/$f" $f
2889 165af439 Måns Rullgård
    done
2890
fi
2891 def4272a Aurelien Jacobs
2892
2893 d0674868 Diego Biurrun
# build pkg-config files
2894 def4272a Aurelien Jacobs
2895 d0674868 Diego Biurrun
pkgconfig_generate(){
2896
name=$1
2897 b0dfd108 Charles Yates
shortname=${name#lib}${build_suffix}
2898 d0674868 Diego Biurrun
comment=$2
2899
version=$3
2900
libs=$4
2901
requires=$5
2902 25cd5cb3 Diego Biurrun
cat <<EOF > $name/$name.pc
2903 3e89171a Måns Rullgård
prefix=$prefix
2904 a94e666c Diego Biurrun
exec_prefix=\${prefix}
2905 f2b7382c Anssi Hannula
libdir=$libdir
2906 7622778e Måns Rullgård
includedir=$incdir
2907 def4272a Aurelien Jacobs
2908 d0674868 Diego Biurrun
Name: $name
2909
Description: $comment
2910
Version: $version
2911 8cd6b388 Stefano Sabatini
Requires: $(enabled shared || echo $requires)
2912 5dcfe9f8 Anssi Hannula
Requires.private: $(enabled shared && echo $requires)
2913 def4272a Aurelien Jacobs
Conflicts:
2914 8cd6b388 Stefano Sabatini
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2915 12701f6e Anssi Hannula
Libs.private: $(enabled shared && echo $libs)
2916 76a448ed Måns Rullgård
Cflags: -I\${includedir}
2917 def4272a Aurelien Jacobs
EOF
2918 25cd5cb3 Diego Biurrun
cat <<EOF > $name/$name-uninstalled.pc
2919 def4272a Aurelien Jacobs
prefix=
2920
exec_prefix=
2921 46d1ff83 Aurelien Ja