Statistics
| Branch: | Revision:

ffmpeg / configure @ 1e80a0ea

History | View | Annotate | Download (98.2 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 19bd477d Stefano Sabatini
  --logfile=FILE           log tests and output to FILE [config.log]
65 06454877 Måns Rullgård
  --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 336ce917 Stefano Sabatini
  --disable-ffprobe        disable ffprobe build
86 06454877 Måns Rullgård
  --disable-ffserver       disable ffserver build
87 5a0f7131 Måns Rullgård
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89 aac6ca69 Stefano Sabatini
  --disable-avcore         disable libavcore build
90 5a0f7131 Måns Rullgård
  --disable-avformat       disable libavformat build
91
  --disable-swscale        disable libswscale build
92 06454877 Måns Rullgård
  --enable-postproc        enable GPLed postprocessing support [no]
93 cccc039f Michael Niedermayer
  --disable-avfilter       disable video filter support [no]
94 0dbfc1db Måns Rullgård
  --disable-pthreads       disable pthreads [auto]
95 06454877 Måns Rullgård
  --enable-w32threads      use Win32 threads [no]
96
  --enable-x11grab         enable X11 grabbing [no]
97
  --disable-network        disable network support [no]
98
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99
  --enable-gray            enable full grayscale support (slower color)
100
  --disable-swscale-alpha  disable alpha channel support in swscale
101
  --disable-fastdiv        disable table-based division
102
  --enable-small           optimize for size instead of speed
103
  --disable-aandct         disable AAN DCT code
104 7f3f5f46 Vitor Sessak
  --disable-dct            disable DCT code
105 06454877 Måns Rullgård
  --disable-fft            disable FFT code
106
  --disable-golomb         disable Golomb code
107 3447f12d Diego Biurrun
  --disable-huffman        disable Huffman code
108 06454877 Måns Rullgård
  --disable-lpc            disable LPC code
109
  --disable-mdct           disable MDCT code
110
  --disable-rdft           disable RDFT code
111
  --disable-vaapi          disable VAAPI code
112
  --disable-vdpau          disable VDPAU code
113 92c6a099 Laurent Aimar
  --disable-dxva2          disable DXVA2 code
114 06454877 Måns Rullgård
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
117 bb55e3a3 Ramiro Polla
  --disable-everything     disable all components listed below
118 06454877 Måns Rullgård
  --disable-encoder=NAME   disable encoder NAME
119
  --enable-encoder=NAME    enable encoder NAME
120
  --disable-encoders       disable all encoders
121
  --disable-decoder=NAME   disable decoder NAME
122
  --enable-decoder=NAME    enable decoder NAME
123
  --disable-decoders       disable all decoders
124
  --disable-hwaccel=NAME   disable hwaccel NAME
125
  --enable-hwaccel=NAME    enable hwaccel NAME
126
  --disable-hwaccels       disable all hwaccels
127
  --disable-muxer=NAME     disable muxer NAME
128
  --enable-muxer=NAME      enable muxer NAME
129
  --disable-muxers         disable all muxers
130
  --disable-demuxer=NAME   disable demuxer NAME
131
  --enable-demuxer=NAME    enable demuxer NAME
132
  --disable-demuxers       disable all demuxers
133
  --enable-parser=NAME     enable parser NAME
134
  --disable-parser=NAME    disable parser NAME
135
  --disable-parsers        disable all parsers
136
  --enable-bsf=NAME        enable bitstream filter NAME
137
  --disable-bsf=NAME       disable bitstream filter NAME
138
  --disable-bsfs           disable all bitstream filters
139
  --enable-protocol=NAME   enable protocol NAME
140
  --disable-protocol=NAME  disable protocol NAME
141
  --disable-protocols      disable all protocols
142
  --disable-indev=NAME     disable input device NAME
143
  --disable-outdev=NAME    disable output device NAME
144
  --disable-indevs         disable input devices
145
  --disable-outdevs        disable output devices
146
  --disable-devices        disable all devices
147
  --enable-filter=NAME     enable filter NAME
148
  --disable-filter=NAME    disable filter NAME
149
  --disable-filters        disable all filters
150
  --list-decoders          show all available decoders
151
  --list-encoders          show all available encoders
152
  --list-hwaccels          show all available hardware accelerators
153
  --list-muxers            show all available muxers
154
  --list-demuxers          show all available demuxers
155
  --list-parsers           show all available parsers
156
  --list-protocols         show all available protocols
157
  --list-bsfs              show all available bitstream filters
158
  --list-indevs            show all available input devices
159
  --list-outdevs           show all available output devices
160
  --list-filters           show all available filters
161
162
External library support:
163
  --enable-avisynth        enable reading of AVISynth script files [no]
164
  --enable-bzlib           enable bzlib [autodetect]
165 47941088 Stefano Sabatini
  --enable-frei0r          enable frei0r video filtering
166 06454877 Måns Rullgård
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
167
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
168 6ebf0bfc Stefano Sabatini
  --enable-libopencv       enable video filtering via libopencv [no]
169 06454877 Måns Rullgård
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
170
                           and libraw1394 [no]
171
  --enable-libdirac        enable Dirac support via libdirac [no]
172
  --enable-libfaac         enable FAAC support via libfaac [no]
173
  --enable-libgsm          enable GSM support via libgsm [no]
174
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
175
  --enable-libnut          enable NUT (de)muxing via libnut,
176
                           native (de)muxer exists [no]
177
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
178 0f943ce6 Howard Chu
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
179 06454877 Måns Rullgård
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
180
  --enable-libspeex        enable Speex decoding via libspeex [no]
181
  --enable-libtheora       enable Theora encoding via libtheora [no]
182
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
183
                           native implementation exists [no]
184 8299a7f8 James Zern
  --enable-libvpx          enable VP8 support via libvpx [no]
185 06454877 Måns Rullgård
  --enable-libx264         enable H.264 encoding via x264 [no]
186 de295976 Stefan Gehrer
  --enable-libxavs         enable AVS encoding via xavs [no]
187 06454877 Måns Rullgård
  --enable-libxvid         enable Xvid encoding via xvidcore,
188
                           native MPEG-4/Xvid encoder exists [no]
189
  --enable-mlib            enable Sun medialib [no]
190
  --enable-zlib            enable zlib [autodetect]
191
192
Advanced options (experts only):
193
  --source-path=PATH       path to source code [$source_path]
194
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
195
  --enable-cross-compile   assume a cross-compiler is used
196
  --sysroot=PATH           root of cross-build tree
197
  --sysinclude=PATH        location of cross-build system headers
198
  --target-os=OS           compiler targets OS [$target_os]
199
  --target-exec=CMD        command to run executables on target
200
  --target-path=DIR        path to view of build directory on target
201
  --nm=NM                  use nm tool
202 121d78d0 Carl Eugen Hoyos
  --ar=AR                  use archive tool AR [$ar_default]
203 06454877 Måns Rullgård
  --as=AS                  use assembler AS [$as_default]
204
  --cc=CC                  use C compiler CC [$cc_default]
205
  --ld=LD                  use linker LD
206
  --host-cc=HOSTCC         use host C compiler HOSTCC
207
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
208
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
209
  --host-libs=HLIBS        use libs HLIBS when linking for host
210
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
211
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
212
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
213
  --extra-version=STRING   version string suffix []
214
  --build-suffix=SUFFIX    library name suffix []
215
  --arch=ARCH              select architecture [$arch]
216
  --cpu=CPU                select the minimum required CPU (affects
217
                           instruction selection, may crash on older CPUs)
218 c8a4ae00 Måns Rullgård
  --disable-asm            disable all assembler optimizations
219 06454877 Måns Rullgård
  --disable-altivec        disable AltiVec optimizations
220
  --disable-amd3dnow       disable 3DNow! optimizations
221
  --disable-amd3dnowext    disable 3DNow! extended optimizations
222
  --disable-mmx            disable MMX optimizations
223
  --disable-mmx2           disable MMX2 optimizations
224
  --disable-sse            disable SSE optimizations
225
  --disable-ssse3          disable SSSE3 optimizations
226
  --disable-armv5te        disable armv5te optimizations
227
  --disable-armv6          disable armv6 optimizations
228
  --disable-armv6t2        disable armv6t2 optimizations
229
  --disable-armvfp         disable ARM VFP optimizations
230
  --disable-iwmmxt         disable iwmmxt optimizations
231
  --disable-mmi            disable MMI optimizations
232
  --disable-neon           disable neon optimizations
233
  --disable-vis            disable VIS optimizations
234
  --disable-yasm           disable use of yasm assembler
235
  --enable-pic             build position-independent code
236 4ae40685 Måns Rullgård
  --malloc-prefix=PFX      prefix malloc and related names with PFX
237 6b35d421 Måns Rullgård
  --enable-sram            allow use of on-chip SRAM
238 06454877 Måns Rullgård
239
Developer options (useful when working on FFmpeg itself):
240
  --disable-debug          disable debugging symbols
241
  --enable-debug=LEVEL     set the debug level [$debuglevel]
242
  --disable-optimizations  disable compiler optimizations
243
  --enable-extra-warnings  enable more compiler warnings
244
  --disable-stripping      disable stripping of executables and shared libraries
245 2fad0977 Måns Rullgård
  --samples=PATH           location of test samples for FATE
246 06454877 Måns Rullgård
247
NOTE: Object files are built at the place where configure is launched.
248
EOF
249 60e8bc13 Stefano Sabatini
  exit 0
250 74c53c2d Måns Rullgård
}
251 cf9d24ad Dan Christiansen
252 0884fadf Måns Rullgård
quotes='""'
253
254 57bd82d4 Måns Rullgård
log(){
255 2270b4b2 Diego Biurrun
    echo "$@" >> $logfile
256 57bd82d4 Måns Rullgård
}
257
258 720c69da Måns Rullgård
log_file(){
259 c8e9f801 Måns Rullgård
    log BEGIN $1
260 2270b4b2 Diego Biurrun
    pr -n -t $1 >> $logfile
261 c8e9f801 Måns Rullgård
    log END $1
262
}
263
264 2ba042a7 Måns Rullgård
echolog(){
265 c8e9f801 Måns Rullgård
    log "$@"
266 57bd82d4 Måns Rullgård
    echo "$@"
267 2ba042a7 Måns Rullgård
}
268
269 7bfc8ae6 Måns Rullgård
warn(){
270
    log "WARNING: $*"
271
    WARNINGS="${WARNINGS}WARNING: $*\n"
272
}
273
274 2ba042a7 Måns Rullgård
die(){
275
    echolog "$@"
276
    cat <<EOF
277 d326cf7f Diego Biurrun
278 2ba042a7 Måns Rullgård
If you think configure made a mistake, make sure you are using the latest
279
version from SVN.  If the latest version fails, report the problem to the
280 e5d8ccd7 Måns Rullgård
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
281 2ba042a7 Måns Rullgård
EOF
282 e155a21a Diego Biurrun
    if disabled logging; then
283 2ba042a7 Måns Rullgård
        cat <<EOF
284 e155a21a Diego Biurrun
Rerun configure with logging enabled (do not use --disable-logging), and
285
include the log this produces with your report.
286 2ba042a7 Måns Rullgård
EOF
287
    else
288
cat <<EOF
289 e155a21a Diego Biurrun
Include the log file "$logfile" produced by configure as this will help
290
solving the problem.
291 2ba042a7 Måns Rullgård
EOF
292
    fi
293 57bd82d4 Måns Rullgård
    exit 1
294
}
295
296 6c6007d6 Diego Biurrun
# Avoid locale weirdness, besides we really just want to translate ASCII.
297 44161118 Måns Rullgård
toupper(){
298 6c6007d6 Diego Biurrun
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
299 44161118 Måns Rullgård
}
300
301 4a5444db Måns Rullgård
tolower(){
302 6c6007d6 Diego Biurrun
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
303 4a5444db Måns Rullgård
}
304
305 14a8acf1 Måns Rullgård
c_escape(){
306
    echo "$*" | sed 's/["\\]/\\\0/g'
307
}
308
309 b04251c5 Måns Rullgård
sh_quote(){
310
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
311 d72c981c Måns Rullgård
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
312 b04251c5 Måns Rullgård
    echo "$v"
313
}
314
315 be8f2501 Måns Rullgård
filter(){
316
    pat=$1
317
    shift
318
    for v; do
319 98ef6079 Måns Rullgård
        eval "case $v in $pat) echo $v ;; esac"
320 be8f2501 Måns Rullgård
    done
321
}
322
323 36e2dea0 Måns Rullgård
map(){
324
    m=$1
325
    shift
326 e0e335a0 Måns Rullgård
    for v; do eval $m; done
327 36e2dea0 Måns Rullgård
}
328
329 a8d04fba Måns Rullgård
set_all(){
330
    value=$1
331
    shift
332
    for var in $*; do
333
        eval $var=$value
334
    done
335
}
336
337 72a43668 Måns Rullgård
set_weak(){
338
    value=$1
339
    shift
340
    for var; do
341
        eval : \${$var:=$value}
342
    done
343
}
344
345 799c9e9b Måns Rullgård
pushvar(){
346
    for var in $*; do
347
        eval level=\${${var}_level:=0}
348
        eval ${var}_${level}="\$$var"
349
        eval ${var}_level=$(($level+1))
350
    done
351
}
352
353
popvar(){
354
    for var in $*; do
355
        eval level=\${${var}_level:-0}
356
        test $level = 0 && continue
357
        eval level=$(($level-1))
358
        eval $var="\${${var}_${level}}"
359
        eval ${var}_level=$level
360
        eval unset ${var}_${level}
361
    done
362
}
363
364 a8d04fba Måns Rullgård
enable(){
365
    set_all yes $*
366
}
367
368
disable(){
369
    set_all no $*
370
}
371
372 72a43668 Måns Rullgård
enable_weak(){
373
    set_weak yes $*
374
}
375
376
disable_weak(){
377
    set_weak no $*
378
}
379
380 72702705 Måns Rullgård
enable_safe(){
381 fd07f803 Måns Rullgård
    for var; do
382
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
383
    done
384 72702705 Måns Rullgård
}
385
386
disable_safe(){
387 fd07f803 Måns Rullgård
    for var; do
388
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
389
    done
390 72702705 Måns Rullgård
}
391
392 f9d328da Måns Rullgård
do_enable_deep(){
393
    for var; do
394
        enabled $var && continue
395
        eval sel="\$${var}_select"
396 c510c7b5 Måns Rullgård
        eval sgs="\$${var}_suggest"
397
        pushvar var sgs
398 f9d328da Måns Rullgård
        enable_deep $sel
399 c510c7b5 Måns Rullgård
        popvar sgs
400
        enable_deep_weak $sgs
401 f9d328da Måns Rullgård
        popvar var
402
    done
403
}
404
405
enable_deep(){
406
    do_enable_deep $*
407
    enable $*
408
}
409
410 72a43668 Måns Rullgård
enable_deep_weak(){
411
    do_enable_deep $*
412
    enable_weak $*
413
}
414
415 57bd82d4 Måns Rullgård
enabled(){
416 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
417
    eval test "x\$${1#!}" $op "xyes"
418 44161118 Måns Rullgård
}
419
420 37970ebf Ramiro Polla
disabled(){
421 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
422
    eval test "x\$${1#!}" $op "xno"
423 37970ebf Ramiro Polla
}
424
425 44161118 Måns Rullgård
enabled_all(){
426
    for opt; do
427
        enabled $opt || return 1
428
    done
429
}
430
431 85bca2c5 Diego Biurrun
disabled_all(){
432
    for opt; do
433
        disabled $opt || return 1
434
    done
435
}
436
437 44161118 Måns Rullgård
enabled_any(){
438
    for opt; do
439
        enabled $opt && return 0
440
    done
441
}
442
443 85bca2c5 Diego Biurrun
disabled_any(){
444
    for opt; do
445
        disabled $opt && return 0
446
    done
447 f7b230a7 Måns Rullgård
    return 1
448 85bca2c5 Diego Biurrun
}
449
450 c9d19248 Måns Rullgård
set_default(){
451
    for opt; do
452 88268e94 Måns Rullgård
        eval : \${$opt:=\$${opt}_default}
453 c9d19248 Måns Rullgård
    done
454
}
455
456 4a0d6686 Aurelien Jacobs
is_in(){
457
    value=$1
458
    shift
459
    for var in $*; do
460
        [ $var = $value ] && return 0
461
    done
462
    return 1
463
}
464
465 30fd06be Måns Rullgård
check_deps(){
466
    for cfg; do
467 3250003c Måns Rullgård
        cfg="${cfg#!}"
468 799c9e9b Måns Rullgård
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
469
        disabled ${cfg}_checking && continue
470
        enable ${cfg}_checking
471
472 30fd06be Måns Rullgård
        eval dep_all="\$${cfg}_deps"
473
        eval dep_any="\$${cfg}_deps_any"
474 7ef3425f Måns Rullgård
        eval dep_sel="\$${cfg}_select"
475 c510c7b5 Måns Rullgård
        eval dep_sgs="\$${cfg}_suggest"
476 3d7453e0 Måns Rullgård
        eval dep_ifa="\$${cfg}_if"
477
        eval dep_ifn="\$${cfg}_if_any"
478 799c9e9b Måns Rullgård
479 3d7453e0 Måns Rullgård
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
480
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
481
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
482 799c9e9b Måns Rullgård
483 3d7453e0 Måns Rullgård
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
484
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
485 6a702d4c Måns Rullgård
        enabled_all  $dep_all || disable $cfg
486
        enabled_any  $dep_any || disable $cfg
487 7ef3425f Måns Rullgård
        disabled_any $dep_sel && disable $cfg
488 799c9e9b Måns Rullgård
489 4ec45764 Ramiro Polla
        if enabled $cfg; then
490
            eval dep_extralibs="\$${cfg}_extralibs"
491
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
492 f9d328da Måns Rullgård
            enable_deep $dep_sel
493 c510c7b5 Måns Rullgård
            enable_deep_weak $dep_sgs
494 4ec45764 Ramiro Polla
        fi
495
496 799c9e9b Måns Rullgård
        disable ${cfg}_checking
497 30fd06be Måns Rullgård
    done
498
}
499
500 72cfcf41 Måns Rullgård
print_config_h(){
501
    enabled $1 && v=1 || v=0
502
    echo "#define $2 $v"
503
}
504
505
print_config_mak(){
506
    enabled $1 && v= || v=!
507
    echo "$v$2=yes"
508
}
509
510 55127e7b Måns Rullgård
print_config_asm(){
511
    enabled $1 && echo "%define $2"
512
}
513
514 44161118 Måns Rullgård
print_config(){
515
    pfx=$1
516 72cfcf41 Måns Rullgård
    files=$2
517
    shift 2
518 44161118 Måns Rullgård
    for cfg; do
519 5e622c40 Diego Biurrun
        ucname="$(toupper $cfg)"
520 72cfcf41 Måns Rullgård
        for f in $files; do
521
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
522
        done
523 44161118 Måns Rullgård
    done
524 57bd82d4 Måns Rullgård
}
525
526 31c0121d Måns Rullgård
print_enabled(){
527
    test "$1" = -n && end=" " && shift || end="\n"
528
    suf=$1
529
    shift
530
    for v; do
531
        enabled $v && printf "%s$end" ${v%$suf};
532
    done
533
}
534
535 57bd82d4 Måns Rullgård
append(){
536
    var=$1
537
    shift
538
    eval "$var=\"\$$var $*\""
539
}
540
541 60361817 Måns Rullgård
prepend(){
542
    var=$1
543
    shift
544
    eval "$var=\"$* \$$var\""
545
}
546
547 50a334e4 Måns Rullgård
add_cppflags(){
548 caf458dd Måns Rullgård
    append CPPFLAGS $($filter_cppflags "$@")
549 50a334e4 Måns Rullgård
}
550
551 57bd82d4 Måns Rullgård
add_cflags(){
552 caf458dd Måns Rullgård
    append CFLAGS $($filter_cflags "$@")
553 57bd82d4 Måns Rullgård
}
554
555 2f2e6c7c Måns Rullgård
add_asflags(){
556 caf458dd Måns Rullgård
    append ASFLAGS $($filter_asflags "$@")
557 2f2e6c7c Måns Rullgård
}
558
559 57bd82d4 Måns Rullgård
add_ldflags(){
560
    append LDFLAGS "$@"
561
}
562
563
add_extralibs(){
564 60361817 Måns Rullgård
    prepend extralibs "$@"
565 57bd82d4 Måns Rullgård
}
566
567 b0cfb663 Måns Rullgård
check_cmd(){
568 b3cb5d51 Måns Rullgård
    log "$@"
569 2270b4b2 Diego Biurrun
    "$@" >> $logfile 2>&1
570 b0cfb663 Måns Rullgård
}
571
572 dcd479c0 Måns Rullgård
check_cc(){
573 57bd82d4 Måns Rullgård
    log check_cc "$@"
574 2270b4b2 Diego Biurrun
    cat > $TMPC
575 720c69da Måns Rullgård
    log_file $TMPC
576 50a334e4 Måns Rullgård
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
577 57bd82d4 Måns Rullgård
}
578
579
check_cpp(){
580
    log check_cpp "$@"
581 2270b4b2 Diego Biurrun
    cat > $TMPC
582 720c69da Måns Rullgård
    log_file $TMPC
583 9e7f3277 Måns Rullgård
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
584 dcd479c0 Måns Rullgård
}
585
586 f65883c8 Måns Rullgård
check_as(){
587
    log check_as "$@"
588
    cat > $TMPC
589
    log_file $TMPC
590 2f2e6c7c Måns Rullgård
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
591 f65883c8 Måns Rullgård
}
592
593 940f335a Måns Rullgård
check_asm(){
594
    log check_asm "$@"
595
    name="$1"
596 3784e82e Måns Rullgård
    code="$2"
597 940f335a Måns Rullgård
    shift 2
598 49214f61 Måns Rullgård
    disable $name
599
    check_as "$@" <<EOF && enable $name
600 3784e82e Måns Rullgård
void foo(void){ __asm__ volatile($code); }
601 940f335a Måns Rullgård
EOF
602
}
603
604 304d586d Loren Merritt
check_yasm(){
605
    log check_yasm "$@"
606
    echo "$1" > $TMPS
607
    log_file $TMPS
608
    shift 1
609
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
610
}
611
612 dcd479c0 Måns Rullgård
check_ld(){
613 57bd82d4 Måns Rullgård
    log check_ld "$@"
614 3155a644 Måns Rullgård
    flags=''
615
    libs=''
616
    for f; do
617
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
618
    done
619 2a194acd Måns Rullgård
    check_cc $($filter_cflags $flags) || return
620 684b28e0 Måns Rullgård
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
621 dcd479c0 Måns Rullgård
}
622
623 50a334e4 Måns Rullgård
check_cppflags(){
624
    log check_cppflags "$@"
625 caf458dd Måns Rullgård
    set -- $($filter_cppflags "$@")
626
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
627 50a334e4 Måns Rullgård
int x;
628
EOF
629
}
630
631 dcd479c0 Måns Rullgård
check_cflags(){
632 57bd82d4 Måns Rullgård
    log check_cflags "$@"
633 caf458dd Måns Rullgård
    set -- $($filter_cflags "$@")
634
    check_cc "$@" <<EOF && append CFLAGS "$@"
635 dcd479c0 Måns Rullgård
int x;
636
EOF
637
}
638
639 2ed46eea Måns Rullgård
test_ldflags(){
640
    log test_ldflags "$@"
641
    check_ld "$@" <<EOF
642 c23a0ac8 Diego Biurrun
int main(void){ return 0; }
643 dcd479c0 Måns Rullgård
EOF
644
}
645
646 2ed46eea Måns Rullgård
check_ldflags(){
647
    log check_ldflags "$@"
648
    test_ldflags "$@" && add_ldflags "$@"
649
}
650
651 dcd479c0 Måns Rullgård
check_header(){
652 57bd82d4 Måns Rullgård
    log check_header "$@"
653 dcd479c0 Måns Rullgård
    header=$1
654
    shift
655 b77df637 Måns Rullgård
    disable_safe $header
656
    check_cpp "$@" <<EOF && enable_safe $header
657 dcd479c0 Måns Rullgård
#include <$header>
658
int x;
659
EOF
660
}
661
662
check_func(){
663 57bd82d4 Måns Rullgård
    log check_func "$@"
664 dcd479c0 Måns Rullgård
    func=$1
665
    shift
666 d8bc5f06 Måns Rullgård
    disable $func
667
    check_ld "$@" <<EOF && enable $func
668 dcd479c0 Måns Rullgård
extern int $func();
669 c23a0ac8 Diego Biurrun
int main(void){ $func(); }
670 dcd479c0 Måns Rullgård
EOF
671
}
672
673 645d2652 Måns Rullgård
check_mathfunc(){
674 6b73c0ae Måns Rullgård
    log check_mathfunc "$@"
675 645d2652 Måns Rullgård
    func=$1
676
    shift
677
    disable $func
678
    check_ld "$@" <<EOF && enable $func
679
#include <math.h>
680 33bd38db Måns Rullgård
float foo(float f) { return $func(f); }
681
int main(void){ return 0; }
682 645d2652 Måns Rullgård
EOF
683
}
684
685 2446d3d6 Diego Biurrun
check_func_headers(){
686
    log check_func_headers "$@"
687 f8d7b072 Måns Rullgård
    headers=$1
688
    func=$2
689
    shift 2
690
    disable $func
691
    incs=""
692
    for hdr in $headers; do
693
        incs="$incs
694
#include <$hdr>"
695
    done
696 cd0d9a9d Måns Rullgård
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
697 f8d7b072 Måns Rullgård
$incs
698 d6773f56 Diego Biurrun
int main(int argc, char **argv){
699 2b2c2a81 Martin Storsjö
    return (long) $func;
700 f8d7b072 Måns Rullgård
}
701
EOF
702
}
703
704 a5344cf7 Stefano Sabatini
check_cpp_condition(){
705
    log check_cpp_condition "$@"
706
    header=$1
707
    condition=$2
708 f855b7b9 Måns Rullgård
    shift 2
709
    check_cpp $($filter_cppflags "$@") <<EOF
710 a5344cf7 Stefano Sabatini
#include <$header>
711
#if !($condition)
712
#error "unsatisfied condition: $condition"
713
#endif
714
EOF
715
}
716
717 57bd82d4 Måns Rullgård
check_lib(){
718
    log check_lib "$@"
719
    header="$1"
720
    func="$2"
721
    shift 2
722 84400e9d Måns Rullgård
    check_header $header && check_func $func "$@" && add_extralibs "$@"
723 57bd82d4 Måns Rullgård
}
724
725 f8d7b072 Måns Rullgård
check_lib2(){
726
    log check_lib2 "$@"
727
    headers="$1"
728
    func="$2"
729
    shift 2
730 300cde27 Måns Rullgård
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
731 f8d7b072 Måns Rullgård
}
732
733 dcd479c0 Måns Rullgård
check_exec(){
734 2270b4b2 Diego Biurrun
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
735 57bd82d4 Måns Rullgård
}
736
737 7dfef245 Måns Rullgård
check_exec_crash(){
738 5e622c40 Diego Biurrun
    code=$(cat)
739 7dfef245 Måns Rullgård
740
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
741
    # are safe but may not be available everywhere.  Thus we use
742
    # raise(SIGTERM) instead.  The check is run in a subshell so we
743
    # can redirect the "Terminated" message from the shell.  SIGBUS
744
    # is not defined by standard C so it is used conditionally.
745
746 2270b4b2 Diego Biurrun
    (check_exec "$@") >> $logfile 2>&1 <<EOF
747 7dfef245 Måns Rullgård
#include <signal.h>
748
static void sighandler(int sig){
749
    raise(SIGTERM);
750
}
751 e5af4a11 Diego Biurrun
int main(void){
752 7dfef245 Måns Rullgård
    signal(SIGILL, sighandler);
753
    signal(SIGFPE, sighandler);
754
    signal(SIGSEGV, sighandler);
755
#ifdef SIGBUS
756
    signal(SIGBUS, sighandler);
757
#endif
758
    { $code }
759
}
760
EOF
761
}
762
763 72be9e73 Dave Yeo
check_type(){
764
    log check_type "$@"
765
    headers=$1
766
    type=$2
767
    shift 2
768 ae550ce9 Martin Storsjö
    disable_safe "$type"
769 72be9e73 Dave Yeo
    incs=""
770
    for hdr in $headers; do
771
        incs="$incs
772
#include <$hdr>"
773
    done
774 ae550ce9 Martin Storsjö
    check_cc "$@" <<EOF && enable_safe "$type"
775 72be9e73 Dave Yeo
$incs
776
$type v;
777
EOF
778
}
779
780 14d36751 Måns Rullgård
check_struct(){
781
    log check_type "$@"
782
    headers=$1
783
    struct=$2
784
    member=$3
785
    shift 3
786
    disable_safe "${struct}_${member}"
787
    incs=""
788
    for hdr in $headers; do
789
        incs="$incs
790
#include <$hdr>"
791
    done
792
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
793
$incs
794
const void *p = &(($struct *)0)->$member;
795
EOF
796
}
797
798 57bd82d4 Måns Rullgård
require(){
799
    name="$1"
800
    header="$2"
801
    func="$3"
802
    shift 3
803
    check_lib $header $func "$@" || die "ERROR: $name not found"
804 dcd479c0 Måns Rullgård
}
805
806 f8d7b072 Måns Rullgård
require2(){
807
    name="$1"
808
    headers="$2"
809
    func="$3"
810
    shift 3
811
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
812
}
813
814 f0125de9 Måns Rullgård
check_host_cc(){
815
    log check_host_cc "$@"
816
    cat > $TMPC
817
    log_file $TMPC
818
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
819
}
820
821
check_host_cflags(){
822
    log check_host_cflags "$@"
823
    check_host_cc "$@" <<EOF && append host_cflags "$@"
824
int x;
825
EOF
826
}
827
828 c505dd31 Måns Rullgård
apply(){
829
    file=$1
830
    shift
831
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
832
}
833
834 c34681df Måns Rullgård
cp_if_changed(){
835
    cmp -s "$1" "$2" &&
836
        echo "$2 is unchanged" ||
837
        cp -f "$1" "$2"
838
}
839
840 dcd61286 Diego Biurrun
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
841
# system-dependent things.
842
843 4a0d6686 Aurelien Jacobs
COMPONENT_LIST="
844
    bsfs
845
    decoders
846
    demuxers
847
    encoders
848 3cde40aa Vitor Sessak
    filters
849 5666fd73 Gwenole Beauchesne
    hwaccels
850 c552605c Diego Biurrun
    indevs
851 4a0d6686 Aurelien Jacobs
    muxers
852 c552605c Diego Biurrun
    outdevs
853 4a0d6686 Aurelien Jacobs
    parsers
854
    protocols
855
"
856
857
CONFIG_LIST="
858
    $COMPONENT_LIST
859 e8ed9b7a Diego Biurrun
    aandct
860 5a0f7131 Måns Rullgård
    avcodec
861 aac6ca69 Stefano Sabatini
    avcore
862 5a0f7131 Måns Rullgård
    avdevice
863 f7679c54 Vitor Sessak
    avfilter
864 5a0f7131 Måns Rullgård
    avformat
865 c88f5d72 Måns Rullgård
    avisynth
866 f402916e Aurelien Jacobs
    bzlib
867 7f3f5f46 Vitor Sessak
    dct
868 c73f65d9 Måns Rullgård
    doc
869 05aec7bb Måns Rullgård
    dwt
870 92c6a099 Laurent Aimar
    dxva2
871 27a9466b Måns Rullgård
    fastdiv
872 c88f5d72 Måns Rullgård
    ffmpeg
873
    ffplay
874 336ce917 Stefano Sabatini
    ffprobe
875 c88f5d72 Måns Rullgård
    ffserver
876 1848f7d9 Måns Rullgård
    fft
877 47941088 Stefano Sabatini
    frei0r
878 4f034993 Måns Rullgård
    golomb
879 c88f5d72 Måns Rullgård
    gpl
880 d8d0d0b2 Michael Niedermayer
    gray
881 4693b031 Måns Rullgård
    h264dsp
882 4a384de5 Jason Garrett-Glaser
    h264pred
883 3abe5fbd Aurelien Jacobs
    hardcoded_tables
884 3447f12d Diego Biurrun
    huffman
885 f7b8bffe Ramiro Polla
    libdc1394
886 690bfceb Anuradha Suraparaju
    libdirac
887 2eed5a46 Diego Biurrun
    libfaac
888 c88f5d72 Måns Rullgård
    libgsm
889 6ebe07fb Diego Biurrun
    libmp3lame
890 c88f5d72 Måns Rullgård
    libnut
891 0b175caa Diego Biurrun
    libopencore_amrnb
892
    libopencore_amrwb
893 6ebf0bfc Stefano Sabatini
    libopencv
894 9a77d59a Jai Menon
    libopenjpeg
895 0f943ce6 Howard Chu
    librtmp
896 f7cd9eed Anuradha Suraparaju
    libschroedinger
897 ae14f311 David Conrad
    libspeex
898 150d2772 Diego Biurrun
    libtheora
899 c88f5d72 Måns Rullgård
    libvorbis
900 8299a7f8 James Zern
    libvpx
901 1cc60c47 Diego Biurrun
    libx264
902 de295976 Stefan Gehrer
    libxavs
903 1cc60c47 Diego Biurrun
    libxvid
904 f4d608e3 Justin Ruggles
    lpc
905 b781cc12 Måns Rullgård
    lsp
906 47a158cb Måns Rullgård
    mdct
907 c88f5d72 Måns Rullgård
    memalign_hack
908 a8150374 Diego Biurrun
    mlib
909 c88f5d72 Måns Rullgård
    mpegaudio_hp
910
    network
911 3fe142e2 Diego Biurrun
    nonfree
912 8a3c8627 Måns Rullgård
    pic
913 4a24ab64 Diego Biurrun
    postproc
914 68602540 Alex Converse
    rdft
915 44b70ce5 Martin Storsjö
    rtpdec
916 e90f5b5a Ramiro Polla
    runtime_cpudetect
917 2e35e684 Måns Rullgård
    shared
918 bd2216e4 Måns Rullgård
    small
919 6b35d421 Måns Rullgård
    sram
920 2e35e684 Måns Rullgård
    static
921 5a0f7131 Måns Rullgård
    swscale
922 a9ddb5b1 Cédric Schieli
    swscale_alpha
923 17492d5e Diego Biurrun
    vaapi
924
    vdpau
925 9cad0e4e Diego Biurrun
    version3
926 56a059ac Diego Biurrun
    x11grab
927 c88f5d72 Måns Rullgård
    zlib
928 4a0d6686 Aurelien Jacobs
"
929 c88f5d72 Måns Rullgård
930 8eee7025 Diego Biurrun
THREADS_LIST='
931
    pthreads
932
    w32threads
933
'
934
935 3f5b56e5 Måns Rullgård
ARCH_LIST='
936
    alpha
937 a2fc0f6a Måns Rullgård
    arm
938 fdcd782d Måns Rullgård
    avr32
939
    avr32_ap
940
    avr32_uc
941 3f5b56e5 Måns Rullgård
    bfin
942
    ia64
943
    m68k
944
    mips
945 bae3abb0 Måns Rullgård
    mips64
946 3f5b56e5 Måns Rullgård
    parisc
947 79cb09b2 Diego Biurrun
    ppc
948 34d11b87 Reimar Döffinger
    ppc64
949 3f5b56e5 Måns Rullgård
    s390
950
    sh4
951
    sparc
952
    sparc64
953 0844bae1 Måns Rullgård
    tomi
954 3f5b56e5 Måns Rullgård
    x86
955
    x86_32
956
    x86_64
957
'
958
959
ARCH_EXT_LIST='
960 1ac9331a Måns Rullgård
    altivec
961 3bf96eec Diego Biurrun
    amd3dnow
962 a1ef9f08 Diego Biurrun
    amd3dnowext
963 1ac9331a Måns Rullgård
    armv5te
964 edab3048 Måns Rullgård
    armv6
965 ab5cb084 Måns Rullgård
    armv6t2
966 f55b299a Måns Rullgård
    armvfp
967 3f5b56e5 Måns Rullgård
    iwmmxt
968
    mmi
969
    mmx
970 d7f0920b Alexander Strange
    mmx2
971 6b18d278 Måns Rullgård
    neon
972 799fde37 Diego Biurrun
    ppc4xx
973 1bb04d5a Ramiro Polla
    sse
974 9eeed841 Måns Rullgård
    ssse3
975 bd9d34a0 Diego Biurrun
    vis
976 3f5b56e5 Måns Rullgård
'
977
978 a3e02a8c Måns Rullgård
HAVE_LIST_PUB='
979
    bigendian
980 d268eee9 Måns Rullgård
    fast_unaligned
981 a3e02a8c Måns Rullgård
'
982
983 3f5b56e5 Måns Rullgård
HAVE_LIST="
984
    $ARCH_EXT_LIST
985 a3e02a8c Måns Rullgård
    $HAVE_LIST_PUB
986 3f5b56e5 Måns Rullgård
    $THREADS_LIST
987 59782b82 Måns Rullgård
    aligned_stack
988 35fd8122 Nicolas George
    alsa_asoundlib_h
989 3f5b56e5 Måns Rullgård
    altivec_h
990 c9fdab0d François Revol
    arpa_inet_h
991 dffb41b9 Måns Rullgård
    attribute_may_alias
992 e7ea5e3d Måns Rullgård
    attribute_packed
993 6bd859d6 Måns Rullgård
    bswap
994 ecf97f22 Alex Beregszaszi
    closesocket
995 1ac9331a Måns Rullgård
    cmov
996 e16e49ac Ramiro Polla
    conio_h
997 c88f5d72 Måns Rullgård
    dcbzl
998 f8aa696f Diego Biurrun
    dev_bktr_ioctl_bt848_h
999
    dev_bktr_ioctl_meteor_h
1000
    dev_ic_bt8xx_h
1001
    dev_video_meteor_ioctl_meteor_h
1002
    dev_video_bktr_ioctl_bt848_h
1003 18b67ae5 Måns Rullgård
    dlfcn_h
1004 c88f5d72 Måns Rullgård
    dlopen
1005 bc574408 Ramiro Polla
    dos_paths
1006 245626d0 Diego Biurrun
    ebp_available
1007
    ebx_available
1008 6b7c7703 Vitor Sessak
    exp2
1009
    exp2f
1010 c2a29455 Aurelien Jacobs
    fast_64bit
1011 669b5583 Måns Rullgård
    fast_clz
1012 7073e9fc Måns Rullgård
    fast_cmov
1013 534a2231 Måns Rullgård
    fcntl
1014 9d99cc5a Måns Rullgård
    fork
1015 84882df6 Martin Storsjö
    getaddrinfo
1016 da9e86f8 Roman Shaposhnik
    gethrtime
1017 fc5607f8 Reimar Döffinger
    GetProcessMemoryInfo
1018 4e68cb8a Roman Shaposhnik
    GetProcessTimes
1019 66be5b45 Ramiro Polla
    getrusage
1020 a49d3025 Måns Rullgård
    gnu_as
1021 fc5607f8 Reimar Döffinger
    struct_rusage_ru_maxrss
1022 2f0c136e Måns Rullgård
    ibm_asm
1023 2e1913b1 Måns Rullgård
    inet_aton
1024 61d251db Måns Rullgård
    inline_asm
1025 abfc8d05 Martin Storsjö
    isatty
1026 9f5ff83f Måns Rullgård
    ldbrx
1027 0b4a1821 Alessandro Sappia
    libdc1394_1
1028
    libdc1394_2
1029 a33cab3a Michael Kostylev
    llrint
1030 07876e25 Måns Rullgård
    llrintf
1031 d96cd429 Måns Rullgård
    local_aligned_16
1032
    local_aligned_8
1033 291fd18a Alex Converse
    log2
1034 6b7c7703 Vitor Sessak
    log2f
1035 85dd97ad Måns Rullgård
    loongson
1036 a33cab3a Michael Kostylev
    lrint
1037 c88f5d72 Måns Rullgård
    lrintf
1038 e4673692 Diego Biurrun
    lzo1x_999_compress
1039 f8aa696f Diego Biurrun
    machine_ioctl_bt848_h
1040
    machine_ioctl_meteor_h
1041 c88f5d72 Måns Rullgård
    malloc_h
1042
    memalign
1043 6ffa87d3 Ramiro Polla
    mkstemp
1044 b4e806b2 Matthieu Castet
    pld
1045 1f91cdce Ramiro Polla
    posix_memalign
1046 a33cab3a Michael Kostylev
    round
1047
    roundf
1048 c88f5d72 Måns Rullgård
    sdl
1049
    sdl_video_size
1050 b507ebd1 Ramiro Polla
    setmode
1051 72be9e73 Dave Yeo
    socklen_t
1052 deb29777 Måns Rullgård
    soundcard_h
1053 f8cda19e Luca Abeni
    poll_h
1054 0104b608 Måns Rullgård
    setrlimit
1055 87958234 Stefano Sabatini
    strerror_r
1056 47941088 Stefano Sabatini
    strtok_r
1057 c0018613 Martin Storsjö
    struct_addrinfo
1058 b4d68544 Martin Storsjö
    struct_ipv6_mreq
1059
    struct_sockaddr_in6
1060 3b2372bf Ronald S. Bultje
    struct_sockaddr_sa_len
1061 33a4dbdd Martin Storsjö
    struct_sockaddr_storage
1062 b462d132 Måns Rullgård
    symver
1063
    symver_gnu_asm
1064
    symver_asm_label
1065 b58412f1 Alexander Strange
    sys_mman_h
1066 b091aa44 Ramiro Polla
    sys_resource_h
1067 81644c2e Michael Kostylev
    sys_select_h
1068 deb29777 Måns Rullgård
    sys_soundcard_h
1069 1b6e8b73 Brad
    sys_videoio_h
1070 d3a4b4e0 Diego Biurrun
    ten_operands
1071 e16e49ac Ramiro Polla
    termios_h
1072 b265431e Måns Rullgård
    threads
1073 7b04b8a0 Michael Kostylev
    truncf
1074 ce742de2 Måns Rullgård
    vfp_args
1075 7c5bfe7a Ramiro Polla
    VirtualAlloc
1076 6ff3f3e7 Ramiro Polla
    winsock2_h
1077 cc078b5d Måns Rullgård
    xform_asm
1078 6f74fb03 Ramiro Polla
    xmm_clobbers
1079 304d586d Loren Merritt
    yasm
1080 0cb78cef Diego Biurrun
"
1081 44161118 Måns Rullgård
1082 b6bb00b0 Måns Rullgård
# options emitted with CONFIG_ prefix but not available on command line
1083
CONFIG_EXTRA="
1084 dc4f5a1c Måns Rullgård
    avutil
1085 9cad0e4e Diego Biurrun
    gplv3
1086
    lgplv3
1087 b6bb00b0 Måns Rullgård
"
1088
1089 520cc7f1 Måns Rullgård
CMDLINE_SELECT="
1090 3f5b56e5 Måns Rullgård
    $ARCH_EXT_LIST
1091 520cc7f1 Måns Rullgård
    $CONFIG_LIST
1092 8eee7025 Diego Biurrun
    $THREADS_LIST
1093 c8a4ae00 Måns Rullgård
    asm
1094 db6107b6 Diego Biurrun
    cross_compile
1095 520cc7f1 Måns Rullgård
    debug
1096
    extra_warnings
1097 8c6afa4d Diego Biurrun
    logging
1098 d2bbb2f7 Diego Biurrun
    optimizations
1099 87a0fb62 Diego Biurrun
    stripping
1100 7595a5e4 Måns Rullgård
    yasm
1101 520cc7f1 Måns Rullgård
"
1102 426be5dc Diego Biurrun
1103
PATHS_LIST='
1104 d156bede Diego Biurrun
    bindir
1105 14a8acf1 Måns Rullgård
    datadir
1106 26759c44 Måns Rullgård
    incdir
1107
    libdir
1108
    mandir
1109
    prefix
1110
    shlibdir
1111 426be5dc Diego Biurrun
'
1112
1113
CMDLINE_SET="
1114
    $PATHS_LIST
1115 121d78d0 Carl Eugen Hoyos
    ar
1116 426be5dc Diego Biurrun
    arch
1117 313c46a6 Måns Rullgård
    as
1118 426be5dc Diego Biurrun
    build_suffix
1119
    cc
1120
    cpu
1121
    cross_prefix
1122 50567afa Måns Rullgård
    dep_cc
1123 ac63af34 Diego Biurrun
    extra_version
1124 9da6609f Måns Rullgård
    host_cc
1125
    host_cflags
1126
    host_ldflags
1127
    host_libs
1128 82bb3329 Måns Rullgård
    host_os
1129 684b28e0 Måns Rullgård
    ld
1130 426be5dc Diego Biurrun
    logfile
1131 4ae40685 Måns Rullgård
    malloc_prefix
1132 89641463 Reimar Döffinger
    nm
1133 2fad0977 Måns Rullgård
    samples
1134 26759c44 Måns Rullgård
    source_path
1135 4f837398 Måns Rullgård
    strip
1136 c5200f17 Måns Rullgård
    sysinclude
1137
    sysroot
1138 a7ada2ba Måns Rullgård
    target_exec
1139 26759c44 Måns Rullgård
    target_os
1140 a7ada2ba Måns Rullgård
    target_path
1141 426be5dc Diego Biurrun
"
1142 520cc7f1 Måns Rullgård
1143 89f2932b Måns Rullgård
CMDLINE_APPEND="
1144
    extra_cflags
1145
"
1146
1147 912f3148 Diego Biurrun
# code dependency declarations
1148
1149 9eeed841 Måns Rullgård
# architecture extensions
1150 808fa33c Måns Rullgård
1151 a2fc0f6a Måns Rullgård
armv5te_deps="arm"
1152
armv6_deps="arm"
1153 ab5cb084 Måns Rullgård
armv6t2_deps="arm"
1154 a2fc0f6a Måns Rullgård
armvfp_deps="arm"
1155
iwmmxt_deps="arm"
1156 808fa33c Måns Rullgård
neon_deps="arm"
1157
1158 e241ba14 Diego Biurrun
mmi_deps="mips"
1159 808fa33c Måns Rullgård
1160
altivec_deps="ppc"
1161
ppc4xx_deps="ppc"
1162
1163
vis_deps="sparc"
1164
1165 7f8c3d1f Måns Rullgård
x86_64_suggest="cmov fast_cmov"
1166 808fa33c Måns Rullgård
amd3dnow_deps="mmx"
1167
amd3dnowext_deps="amd3dnow"
1168 9eeed841 Måns Rullgård
mmx_deps="x86"
1169 75aa95a6 Diego Biurrun
mmx2_deps="mmx"
1170
sse_deps="mmx"
1171
ssse3_deps="sse"
1172 9eeed841 Måns Rullgård
1173 59782b82 Måns Rullgård
aligned_stack_if_any="ppc x86"
1174 e939cedd Måns Rullgård
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1175 669b5583 Måns Rullgård
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1176 e939cedd Måns Rullgård
fast_unaligned_if_any="armv6 ppc x86"
1177 669b5583 Måns Rullgård
1178 89e053f8 Måns Rullgård
need_memalign="altivec neon sse"
1179 6fec122a Måns Rullgård
inline_asm_deps="!tms470"
1180 89e053f8 Måns Rullgård
1181 b462d132 Måns Rullgård
symver_if_any="symver_asm_label symver_gnu_asm"
1182
1183 26fbcc85 Måns Rullgård
# subsystems
1184 dc609252 Vitor Sessak
dct_select="rdft"
1185 26fbcc85 Måns Rullgård
mdct_select="fft"
1186
rdft_select="fft"
1187
1188 5666fd73 Gwenole Beauchesne
# decoders / encoders / hardware accelerators
1189 3cac899a Alex Converse
aac_decoder_select="mdct rdft"
1190 26fbcc85 Måns Rullgård
aac_encoder_select="mdct"
1191 136e19e1 Janne Grunau
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1192 26fbcc85 Måns Rullgård
ac3_decoder_select="mdct ac3_parser"
1193 f4d608e3 Justin Ruggles
alac_encoder_select="lpc"
1194 b781cc12 Måns Rullgård
amrnb_decoder_select="lsp"
1195 084cbbaa Måns Rullgård
atrac1_decoder_select="mdct"
1196 26fbcc85 Måns Rullgård
atrac3_decoder_select="mdct"
1197
binkaudio_dct_decoder_select="mdct rdft dct"
1198
binkaudio_rdft_decoder_select="mdct rdft"
1199 4f034993 Måns Rullgård
cavs_decoder_select="golomb"
1200 26fbcc85 Måns Rullgård
cook_decoder_select="mdct"
1201 2eef7c62 Aurelien Jacobs
cscd_decoder_suggest="zlib"
1202 26fbcc85 Måns Rullgård
dca_decoder_select="mdct"
1203 e8ed9b7a Diego Biurrun
dnxhd_encoder_select="aandct"
1204 2eef7c62 Aurelien Jacobs
dxa_decoder_select="zlib"
1205 baf91bb9 Diego Biurrun
eac3_decoder_select="ac3_decoder"
1206 84c04e25 Aurelien Jacobs
eamad_decoder_select="aandct"
1207 e8ed9b7a Diego Biurrun
eatgq_decoder_select="aandct"
1208 d52b39c7 Aurelien Jacobs
eatqi_decoder_select="aandct"
1209 4f034993 Måns Rullgård
ffv1_decoder_select="golomb"
1210
flac_decoder_select="golomb"
1211 f4d608e3 Justin Ruggles
flac_encoder_select="golomb lpc"
1212 2eef7c62 Aurelien Jacobs
flashsv_decoder_select="zlib"
1213
flashsv_encoder_select="zlib"
1214 4414137e Diego Biurrun
flv_decoder_select="h263_decoder"
1215 4d4b4bd1 Diego Biurrun
flv_encoder_select="h263_encoder"
1216 3447f12d Diego Biurrun
fraps_decoder_select="huffman"
1217 e8ed9b7a Diego Biurrun
h261_encoder_select="aandct"
1218 7f647ae0 Diego Biurrun
h263_decoder_select="h263_parser"
1219 e8ed9b7a Diego Biurrun
h263_encoder_select="aandct"
1220 95a61cfc Diego Biurrun
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1221 4414137e Diego Biurrun
h263i_decoder_select="h263_decoder"
1222 fe629c2d Diego Biurrun
h263p_encoder_select="h263_encoder"
1223 4a384de5 Jason Garrett-Glaser
h264_decoder_select="golomb h264dsp h264pred"
1224 92c6a099 Laurent Aimar
h264_dxva2_hwaccel_deps="dxva2api_h"
1225
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1226 17492d5e Diego Biurrun
h264_vaapi_hwaccel_select="vaapi"
1227 95a61cfc Diego Biurrun
h264_vdpau_decoder_select="vdpau h264_decoder"
1228 47a158cb Måns Rullgård
imc_decoder_select="fft mdct"
1229 4f034993 Måns Rullgård
jpegls_decoder_select="golomb"
1230
jpegls_encoder_select="golomb"
1231 e8ed9b7a Diego Biurrun
ljpeg_encoder_select="aandct"
1232 4f034993 Måns Rullgård
loco_decoder_select="golomb"
1233 e8ed9b7a Diego Biurrun
mjpeg_encoder_select="aandct"
1234 2cca233b Diego Biurrun
mlp_decoder_select="mlp_parser"
1235 d9da8f10 Aurelien Jacobs
mp1float_decoder_select="dct"
1236
mp2float_decoder_select="dct"
1237
mp3adufloat_decoder_select="dct"
1238
mp3float_decoder_select="dct"
1239
mp3on4float_decoder_select="dct"
1240 e8ed9b7a Diego Biurrun
mpeg1video_encoder_select="aandct"
1241
mpeg2video_encoder_select="aandct"
1242 4414137e Diego Biurrun
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1243 c37de5e1 Diego Biurrun
mpeg4_encoder_select="h263_encoder"
1244 95a61cfc Diego Biurrun
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1245
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1246 164aab02 Laurent Aimar
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1247
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1248 95a61cfc Diego Biurrun
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1249
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1250 70e0c871 NVIDIA Corporation
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1251 8f6f050a Diego Biurrun
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1252 4d8eecf4 Diego Biurrun
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1253 4414137e Diego Biurrun
msmpeg4v1_decoder_select="h263_decoder"
1254 4e169d89 Diego Biurrun
msmpeg4v1_encoder_select="h263_encoder"
1255 4414137e Diego Biurrun
msmpeg4v2_decoder_select="h263_decoder"
1256 4e169d89 Diego Biurrun
msmpeg4v2_encoder_select="h263_encoder"
1257 4414137e Diego Biurrun
msmpeg4v3_decoder_select="h263_decoder"
1258 4e169d89 Diego Biurrun
msmpeg4v3_encoder_select="h263_encoder"
1259 26fbcc85 Måns Rullgård
nellymoser_decoder_select="mdct"
1260
nellymoser_encoder_select="mdct"
1261 2eef7c62 Aurelien Jacobs
png_decoder_select="zlib"
1262
png_encoder_select="zlib"
1263 b781cc12 Måns Rullgård
qcelp_decoder_select="lsp"
1264 26fbcc85 Måns Rullgård
qdm2_decoder_select="mdct rdft"
1265 31ed3f1f Francesco Lavra
ra_144_encoder_select="lpc"
1266 a8beb22f Diego Biurrun
rv10_decoder_select="h263_decoder"
1267 b2bf38b4 Diego Biurrun
rv10_encoder_select="h263_encoder"
1268 a8beb22f Diego Biurrun
rv20_decoder_select="h263_decoder"
1269 b2bf38b4 Diego Biurrun
rv20_encoder_select="h263_encoder"
1270 4a384de5 Jason Garrett-Glaser
rv30_decoder_select="golomb h264pred"
1271
rv40_decoder_select="golomb h264pred"
1272 4f034993 Måns Rullgård
shorten_decoder_select="golomb"
1273 b781cc12 Måns Rullgård
sipr_decoder_select="lsp"
1274 05aec7bb Måns Rullgård
snow_decoder_select="dwt"
1275
snow_encoder_select="aandct dwt"
1276 4f034993 Måns Rullgård
sonic_decoder_select="golomb"
1277
sonic_encoder_select="golomb"
1278
sonic_ls_encoder_select="golomb"
1279 19ecfb8a Daniel Verkamp
svq1_encoder_select="aandct"
1280 4a384de5 Jason Garrett-Glaser
svq3_decoder_select="golomb h264dsp h264pred"
1281 bee2eac5 Baptiste Coudurier
svq3_decoder_suggest="zlib"
1282 4eef77c1 Diego Biurrun
theora_decoder_select="vp3_decoder"
1283 2eef7c62 Aurelien Jacobs
tiff_decoder_suggest="zlib"
1284
tiff_encoder_suggest="zlib"
1285 aec09a00 Diego Biurrun
truehd_decoder_select="mlp_decoder"
1286 2eef7c62 Aurelien Jacobs
tscc_decoder_select="zlib"
1287 b781cc12 Måns Rullgård
twinvq_decoder_select="mdct lsp"
1288 f95bfab0 Diego Biurrun
vc1_decoder_select="h263_decoder"
1289 9104cd51 Ramiro Polla
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1290 f0f86627 Laurent Aimar
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1291 95a61cfc Diego Biurrun
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1292
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1293 26fbcc85 Måns Rullgård
vorbis_decoder_select="mdct"
1294
vorbis_encoder_select="mdct"
1295 3447f12d Diego Biurrun
vp6_decoder_select="huffman"
1296 e82dc4c9 Diego Biurrun
vp6a_decoder_select="vp6_decoder"
1297
vp6f_decoder_select="vp6_decoder"
1298 4a384de5 Jason Garrett-Glaser
vp8_decoder_select="h264pred"
1299 084cbbaa Måns Rullgård
wmapro_decoder_select="mdct"
1300 26fbcc85 Måns Rullgård
wmav1_decoder_select="mdct"
1301
wmav1_encoder_select="mdct"
1302
wmav2_decoder_select="mdct"
1303
wmav2_encoder_select="mdct"
1304 df0a6d0d Aurelien Jacobs
wmavoice_decoder_select="lsp rdft dct mdct"
1305 f95bfab0 Diego Biurrun
wmv1_decoder_select="h263_decoder"
1306 665507aa Diego Biurrun
wmv1_encoder_select="h263_encoder"
1307 f95bfab0 Diego Biurrun
wmv2_decoder_select="h263_decoder"
1308 1746e2a9 Diego Biurrun
wmv2_encoder_select="h263_encoder"
1309 015f8ee0 Diego Biurrun
wmv3_decoder_select="vc1_decoder"
1310 f0f86627 Laurent Aimar
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1311 015f8ee0 Diego Biurrun
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1312
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1313 2eef7c62 Aurelien Jacobs
zlib_decoder_select="zlib"
1314
zlib_encoder_select="zlib"
1315
zmbv_decoder_select="zlib"
1316
zmbv_encoder_select="zlib"
1317 30fd06be Måns Rullgård
1318 0afab17e Måns Rullgård
vaapi_deps="va_va_h"
1319 c89c96e9 Måns Rullgård
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1320
1321 28b80940 Diego Biurrun
# parsers
1322 4a384de5 Jason Garrett-Glaser
h264_parser_select="golomb h264dsp h264pred"
1323 28b80940 Diego Biurrun
1324 912f3148 Diego Biurrun
# external libraries
1325 1b71f045 Måns Rullgård
libdirac_decoder_deps="libdirac !libschroedinger"
1326 690bfceb Anuradha Suraparaju
libdirac_encoder_deps="libdirac"
1327 c9171a83 Diego Biurrun
libfaac_encoder_deps="libfaac"
1328 299c77d5 Måns Rullgård
libgsm_decoder_deps="libgsm"
1329
libgsm_encoder_deps="libgsm"
1330 8ffed8d8 Måns Rullgård
libgsm_ms_decoder_deps="libgsm"
1331
libgsm_ms_encoder_deps="libgsm"
1332 1cc60c47 Diego Biurrun
libmp3lame_encoder_deps="libmp3lame"
1333 0b175caa Diego Biurrun
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1334
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1335
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1336 9a77d59a Jai Menon
libopenjpeg_decoder_deps="libopenjpeg"
1337 f7cd9eed Anuradha Suraparaju
libschroedinger_decoder_deps="libschroedinger"
1338
libschroedinger_encoder_deps="libschroedinger"
1339 ae14f311 David Conrad
libspeex_decoder_deps="libspeex"
1340 150d2772 Diego Biurrun
libtheora_encoder_deps="libtheora"
1341 b0caf888 Diego Biurrun
libvorbis_encoder_deps="libvorbis"
1342 8299a7f8 James Zern
libvpx_decoder_deps="libvpx"
1343 ee0e9146 James Zern
libvpx_encoder_deps="libvpx"
1344 1cc60c47 Diego Biurrun
libx264_encoder_deps="libx264"
1345 de295976 Stefan Gehrer
libxavs_encoder_deps="libxavs"
1346 1cc60c47 Diego Biurrun
libxvid_encoder_deps="libxvid"
1347 30fd06be Måns Rullgård
1348 912f3148 Diego Biurrun
# demuxers / muxers
1349 03a76ba9 Diego Biurrun
ac3_demuxer_deps="ac3_parser"
1350 647c2356 Diego Biurrun
asf_stream_muxer_select="asf_muxer"
1351 4e622dea Stefano Sabatini
avisynth_demuxer_deps="avisynth"
1352
dirac_demuxer_deps="dirac_parser"
1353 5b423887 Diego Biurrun
eac3_demuxer_select="ac3_parser"
1354 647c2356 Diego Biurrun
ipod_muxer_select="mov_muxer"
1355 4e622dea Stefano Sabatini
libnut_demuxer_deps="libnut"
1356
libnut_muxer_deps="libnut"
1357 647c2356 Diego Biurrun
matroska_audio_muxer_select="matroska_muxer"
1358 4e622dea Stefano Sabatini
matroska_demuxer_suggest="zlib bzlib"
1359
mov_demuxer_suggest="zlib"
1360
mp3_demuxer_deps="mpegaudio_parser"
1361 647c2356 Diego Biurrun
mp4_muxer_select="mov_muxer"
1362
mpegtsraw_demuxer_select="mpegts_demuxer"
1363
mxf_d10_muxer_select="mxf_muxer"
1364 24ca518b David Conrad
ogg_demuxer_select="golomb"
1365 647c2356 Diego Biurrun
psp_muxer_select="mov_muxer"
1366 44594cc7 Martin Storsjö
rtp_demuxer_select="sdp_demuxer"
1367 44b70ce5 Martin Storsjö
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1368
rtsp_demuxer_select="http_protocol rtpdec"
1369
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1370 01c8d258 Martin Storsjö
sap_demuxer_select="sdp_demuxer"
1371 2aab70c4 Martin Storsjö
sap_muxer_select="rtp_muxer rtp_protocol"
1372 44b70ce5 Martin Storsjö
sdp_demuxer_select="rtpdec"
1373 f1e94694 Diego Biurrun
spdif_muxer_select="aac_parser"
1374 647c2356 Diego Biurrun
tg2_muxer_select="mov_muxer"
1375
tgp_muxer_select="mov_muxer"
1376 6bdaa5f4 Diego Biurrun
w64_demuxer_deps="wav_demuxer"
1377 4e622dea Stefano Sabatini
1378
# indevs / outdevs
1379 38e54a75 Stefano Sabatini
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1380
alsa_outdev_deps="alsa_asoundlib_h"
1381
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1382
dv1394_indev_deps="dv1394 dv_demuxer"
1383
jack_indev_deps="jack_jack_h"
1384
libdc1394_indev_deps="libdc1394"
1385
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1386
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1387
v4l_indev_deps="linux_videodev_h"
1388
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1389 ec1ee802 Ramiro Polla
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1390 a1b3c5a3 kemuri
vfwcap_indev_extralibs="-lavicap32"
1391 38e54a75 Stefano Sabatini
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1392 781c1aa6 Roxis
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1393 30fd06be Måns Rullgård
1394 912f3148 Diego Biurrun
# protocols
1395 3fff6382 Andreas Öman
gopher_protocol_deps="network"
1396 c08fb000 Alex Beregszaszi
http_protocol_deps="network"
1397 279a0c97 Peter Ross
http_protocol_select="tcp_protocol"
1398 c60a2d70 Måns Rullgård
mmsh_protocol_select="http_protocol"
1399 b4cf3f6c Måns Rullgård
mmst_protocol_deps="network"
1400 deeb7012 Martin Storsjö
rtmp_protocol_select="tcp_protocol"
1401
rtp_protocol_select="udp_protocol"
1402 c08fb000 Alex Beregszaszi
tcp_protocol_deps="network"
1403
udp_protocol_deps="network"
1404
1405 6ebf0bfc Stefano Sabatini
# filters
1406 13fabd7a Stefano Sabatini
blackframe_filter_deps="gpl"
1407 68b79bfc Stefano Sabatini
cropdetect_filter_deps="gpl"
1408 2e5ff4d0 Stefano Sabatini
frei0r_filter_deps="frei0r dlopen strtok_r"
1409 6ebf0bfc Stefano Sabatini
ocv_smooth_filter_deps="libopencv"
1410 acbac567 Michael Niedermayer
yadif_filter_deps="gpl"
1411 6ebf0bfc Stefano Sabatini
1412 5a0f7131 Måns Rullgård
# libraries
1413
avdevice_deps="avcodec avformat"
1414
avformat_deps="avcodec"
1415 f7679c54 Vitor Sessak
1416 912f3148 Diego Biurrun
# programs
1417 5a0f7131 Måns Rullgård
ffmpeg_deps="avcodec avformat swscale"
1418 21ae6790 Peter Ross
ffmpeg_select="buffer_filter"
1419 5a0f7131 Måns Rullgård
ffplay_deps="avcodec avformat swscale sdl"
1420 43689902 Måns Rullgård
ffplay_select="rdft"
1421 336ce917 Stefano Sabatini
ffprobe_deps="avcodec avformat"
1422 5a0f7131 Måns Rullgård
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1423 4ec45764 Ramiro Polla
ffserver_extralibs='$ldl'
1424 a2830dca Måns Rullgård
1425 c73f65d9 Måns Rullgård
doc_deps="texi2html"
1426 912f3148 Diego Biurrun
1427 57442411 Måns Rullgård
# tests
1428
1429
test_deps(){
1430
    suf1=$1
1431
    suf2=$2
1432
    shift 2
1433
    for v; do
1434
        dep=${v%=*}
1435
        tests=${v#*=}
1436
        for name in ${tests}; do
1437
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1438
        done
1439
    done
1440
}
1441
1442 9c261f83 Stefano Sabatini
set_ne_test_deps(){
1443
    eval ${1}_be_test_deps="bigendian"
1444
    eval ${1}_le_test_deps="!bigendian"
1445
}
1446
1447 57442411 Måns Rullgård
test_deps _encoder _decoder                                             \
1448
    ac3                                                                 \
1449
    adpcm_g726=g726                                                     \
1450
    adpcm_ima_qt                                                        \
1451
    adpcm_ima_wav                                                       \
1452
    adpcm_ms                                                            \
1453
    adpcm_swf                                                           \
1454
    adpcm_yamaha=adpcm_yam                                              \
1455
    alac                                                                \
1456
    asv1                                                                \
1457
    asv2                                                                \
1458
    bmp                                                                 \
1459 a7638957 Måns Rullgård
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1460 57442411 Måns Rullgård
    dvvideo="dv dv50"                                                   \
1461
    ffv1                                                                \
1462
    flac                                                                \
1463
    flashsv                                                             \
1464
    flv                                                                 \
1465
    gif                                                                 \
1466
    h261                                                                \
1467
    h263="h263 h263p"                                                   \
1468
    huffyuv                                                             \
1469
    jpegls                                                              \
1470
    mjpeg="jpg mjpeg ljpeg"                                             \
1471
    mp2                                                                 \
1472
    mpeg1video="mpeg mpeg1b"                                            \
1473
    mpeg2video="mpeg2 mpeg2thread"                                      \
1474
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1475 c0b16605 Måns Rullgård
    msmpeg4v3=msmpeg4                                                   \
1476 57442411 Måns Rullgård
    msmpeg4v2                                                           \
1477
    pbm=pbmpipe                                                         \
1478
    pcx                                                                 \
1479
    pgm="pgm pgmpipe"                                                   \
1480
    ppm="ppm ppmpipe"                                                   \
1481
    rawvideo="rgb yuv"                                                  \
1482
    roq                                                                 \
1483
    rv10                                                                \
1484
    rv20                                                                \
1485
    sgi                                                                 \
1486
    snow="snow snowll"                                                  \
1487
    svq1                                                                \
1488
    targa=tga                                                           \
1489
    tiff                                                                \
1490
    wmav1                                                               \
1491
    wmav2                                                               \
1492
    wmv1                                                                \
1493
    wmv2                                                                \
1494
1495
test_deps _muxer _demuxer                                               \
1496
    aiff                                                                \
1497
    pcm_alaw=alaw                                                       \
1498
    asf                                                                 \
1499
    au                                                                  \
1500
    avi                                                                 \
1501
    dv=dv_fmt                                                           \
1502
    ffm                                                                 \
1503
    flv=flv_fmt                                                         \
1504
    gxf                                                                 \
1505
    matroska=mkv                                                        \
1506
    mmf                                                                 \
1507
    mov                                                                 \
1508
    pcm_mulaw=mulaw                                                     \
1509
    mxf                                                                 \
1510
    nut                                                                 \
1511
    ogg                                                                 \
1512
    rawvideo=pixfmt                                                     \
1513
    rm                                                                  \
1514
    swf                                                                 \
1515
    mpegts=ts                                                           \
1516
    voc                                                                 \
1517
    wav                                                                 \
1518
    yuv4mpegpipe=yuv4mpeg                                               \
1519
1520
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1521 9c261f83 Stefano Sabatini
1522
set_ne_test_deps pixdesc
1523 213a4cbb Stefano Sabatini
set_ne_test_deps pixfmts_crop
1524 a1e171df Stefano Sabatini
set_ne_test_deps pixfmts_hflip
1525 213a4cbb Stefano Sabatini
set_ne_test_deps pixfmts_null
1526
set_ne_test_deps pixfmts_pad
1527
set_ne_test_deps pixfmts_scale
1528
set_ne_test_deps pixfmts_vflip
1529 57442411 Måns Rullgård
1530 de6d9b64 Fabrice Bellard
# default parameters
1531 8a608357 Måns Rullgård
1532 19bd477d Stefano Sabatini
logfile="config.log"
1533 8a608357 Måns Rullgård
1534
# installation paths
1535 c9d19248 Måns Rullgård
prefix_default="/usr/local"
1536
bindir_default='${prefix}/bin'
1537 14a8acf1 Måns Rullgård
datadir_default='${prefix}/share/ffmpeg'
1538 c9d19248 Måns Rullgård
incdir_default='${prefix}/include'
1539
libdir_default='${prefix}/lib'
1540
mandir_default='${prefix}/share/man'
1541
shlibdir_default="$libdir_default"
1542 8a608357 Måns Rullgård
1543
# toolchain
1544 121d78d0 Carl Eugen Hoyos
ar_default="ar"
1545 13c7df3d Måns Rullgård
cc_default="gcc"
1546 a3d7c197 Diego Biurrun
cc_version=\"unknown\"
1547 9da6609f Måns Rullgård
host_cc_default="gcc"
1548 11e6d03a Diego Biurrun
ln_s="ln -sf"
1549 89641463 Reimar Döffinger
nm_default="nm"
1550 11e6d03a Diego Biurrun
objformat="elf"
1551 be7109c1 Michael Niedermayer
ranlib="ranlib"
1552 4f837398 Måns Rullgård
strip_default="strip"
1553 11e6d03a Diego Biurrun
yasmexe="yasm"
1554 301ab19d Måns Rullgård
nogas=":"
1555 8a608357 Måns Rullgård
1556 8182dc34 Måns Rullgård
nm_opts='-g'
1557
1558 8a608357 Måns Rullgård
# machine
1559 8d4c00ed Måns Rullgård
arch_default=$(uname -m)
1560 38d0a8aa Guillaume Poirier
cpu="generic"
1561 8a608357 Måns Rullgård
1562
# OS
1563 8d4c00ed Måns Rullgård
target_os_default=$(tolower $(uname -s))
1564
host_os=$target_os_default
1565 8a608357 Måns Rullgård
1566
# configurable options
1567 5a0f7131 Måns Rullgård
enable avcodec
1568 aac6ca69 Stefano Sabatini
enable avcore
1569 5a0f7131 Måns Rullgård
enable avdevice
1570 cccc039f Michael Niedermayer
enable avfilter
1571 5a0f7131 Måns Rullgård
enable avformat
1572 dc4f5a1c Måns Rullgård
enable avutil
1573 c8a4ae00 Måns Rullgård
enable asm
1574 497237c7 Ramiro Polla
enable debug
1575 c73f65d9 Måns Rullgård
enable doc
1576 aa033b1e Måns Rullgård
enable fastdiv
1577 497237c7 Ramiro Polla
enable ffmpeg
1578
enable ffplay
1579 336ce917 Stefano Sabatini
enable ffprobe
1580 497237c7 Ramiro Polla
enable ffserver
1581
enable mpegaudio_hp
1582
enable network
1583 8400d6b8 Diego Biurrun
enable optimizations
1584 497237c7 Ramiro Polla
enable protocols
1585 530dc538 Diego Biurrun
enable static
1586 87a0fb62 Diego Biurrun
enable stripping
1587 5a0f7131 Måns Rullgård
enable swscale
1588 a9ddb5b1 Cédric Schieli
enable swscale_alpha
1589 8a608357 Måns Rullgård
1590
# build settings
1591 9987769a Måns Rullgård
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1592 c536cb09 Diego Biurrun
FFSERVERLDFLAGS=-Wl,-E
1593 f3ec2d46 Slavik Gnatenko
LIBPREF="lib"
1594
LIBSUF=".a"
1595 c5f14466 Ramiro Polla
FULLNAME='$(NAME)$(BUILDSUF)'
1596
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1597 f3ec2d46 Slavik Gnatenko
SLIBPREF="lib"
1598
SLIBSUF=".so"
1599 c5f14466 Ramiro Polla
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1600 b29bddab Diego Biurrun
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1601
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1602 6cfac0e9 Måns Rullgård
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1603 ef0bc4c9 François Revol
1604 7e6c86e6 Måns Rullgård
CC_O='-o $@'
1605
1606 f0125de9 Måns Rullgård
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1607 9da6609f Måns Rullgård
host_libs='-lm'
1608
1609 9b861379 Måns Rullgård
target_path='$(CURDIR)'
1610 a7ada2ba Måns Rullgård
1611 a158446b Måns Rullgård
# since the object filename is not given with the -MM flag, the compiler
1612
# is only able to print the basename, and we must add the path ourselves
1613 c1c3933a Måns Rullgård
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1614 d8059267 Måns Rullgård
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1615 315c741d Diego Biurrun
1616 c597172e Måns Rullgård
# find source path
1617 5e622c40 Diego Biurrun
source_path="$(dirname "$0")"
1618 497237c7 Ramiro Polla
enable source_path_used
1619 24524f36 Måns Rullgård
if test -f configure; then
1620 5e622c40 Diego Biurrun
    source_path="$(pwd)"
1621 497237c7 Ramiro Polla
    disable source_path_used
1622 c597172e Måns Rullgård
else
1623 5e622c40 Diego Biurrun
    source_path="$(cd "$source_path"; pwd)"
1624 c597172e Måns Rullgård
    echo "$source_path" | grep -q '[[:blank:]]' &&
1625 7483e694 Diego Biurrun
        die "Out of tree builds are impossible with whitespace in source path."
1626 337cee68 Matthieu Castet
    test -e "$source_path/config.h" &&
1627
        die "Out of tree builds are impossible with config.h in source dir."
1628 c597172e Måns Rullgård
fi
1629
1630 13cbe2c0 Måns Rullgård
for v in "$@"; do
1631 b04251c5 Måns Rullgård
    r=${v#*=}
1632
    l=${v%"$r"}
1633
    r=$(sh_quote "$r")
1634 13cbe2c0 Måns Rullgård
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1635
done
1636 c597172e Måns Rullgård
1637 73ef8980 Måns Rullgård
find_things(){
1638
    thing=$1
1639
    pattern=$2
1640
    file=$source_path/$3
1641 932ccf39 Måns Rullgård
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1642 73ef8980 Måns Rullgård
}
1643
1644
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1645
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1646 5666fd73 Gwenole Beauchesne
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1647 73ef8980 Måns Rullgård
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1648
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1649
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1650
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1651 38e54a75 Stefano Sabatini
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1652
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1653 73ef8980 Måns Rullgård
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1654 81124ba0 Vitor Sessak
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1655 c597172e Måns Rullgård
1656 57442411 Måns Rullgård
find_tests(){
1657 b9d5f1b7 Måns Rullgård
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1658 57442411 Måns Rullgård
}
1659
1660
ACODEC_TESTS=$(find_tests acodec)
1661
VCODEC_TESTS=$(find_tests vsynth1)
1662
LAVF_TESTS=$(find_tests lavf)
1663 48c28162 Måns Rullgård
LAVFI_TESTS=$(find_tests lavfi)
1664 b9d5f1b7 Måns Rullgård
SEEK_TESTS=$(find_tests seek seek_)
1665 57442411 Måns Rullgård
1666 40fe5019 Måns Rullgård
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1667
1668 8469ae22 Måns Rullgård
for n in $COMPONENT_LIST; do
1669
    v=$(toupper ${n%s})_LIST
1670
    eval enable \$$v
1671
    eval ${n}_if_any="\$$v"
1672
done
1673
1674 b9d5f1b7 Måns Rullgård
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1675 c597172e Måns Rullgård
1676
die_unknown(){
1677
    echo "Unknown option \"$1\"."
1678
    echo "See $0 --help for available options."
1679
    exit 1
1680
}
1681
1682 794f8e97 Panagiotis Issaris
show_list() {
1683 bf0c4afa Ramiro Polla
    suffix=_$1
1684
    shift
1685 2b444ea7 Måns Rullgård
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1686 794f8e97 Panagiotis Issaris
    exit 0
1687
}
1688
1689 c597172e Måns Rullgård
for opt do
1690 7483e694 Diego Biurrun
    optval="${opt#*=}"
1691
    case "$opt" in
1692 0f010b2f Diego Biurrun
    --extra-ldflags=*) add_ldflags $optval
1693 7483e694 Diego Biurrun
    ;;
1694 0f010b2f Diego Biurrun
    --extra-libs=*) add_extralibs $optval
1695 7483e694 Diego Biurrun
    ;;
1696 8fb1cb58 Diego Biurrun
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1697 9aa8ed9d Panagiotis Issaris
    ;;
1698 40bcf4c7 Benjamin Larsson
    --enable-debug=*) debuglevel="$optval"
1699
    ;;
1700 36e2dea0 Måns Rullgård
    --disable-everything)
1701 1b15dc3c Måns Rullgård
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1702 36e2dea0 Måns Rullgård
    ;;
1703 7483e694 Diego Biurrun
    --enable-*=*|--disable-*=*)
1704 8b93ddc3 Måns Rullgård
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1705 be8f2501 Måns Rullgård
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1706
    eval list=\$$(toupper $thing)_LIST
1707 8b93ddc3 Måns Rullgård
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1708
    $action $(filter "$name" $list)
1709 7483e694 Diego Biurrun
    ;;
1710
    --enable-?*|--disable-?*)
1711 5e622c40 Diego Biurrun
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1712 e3773a55 Måns Rullgård
    if is_in $option $COMPONENT_LIST; then
1713 fed5d54b Måns Rullgård
        test $action = disable && action=unset
1714 e3773a55 Måns Rullgård
        eval $action \$$(toupper ${option%s})_LIST
1715
    elif is_in $option $CMDLINE_SELECT; then
1716
        $action $option
1717
    else
1718
        die_unknown $opt
1719
    fi
1720 7483e694 Diego Biurrun
    ;;
1721
    --list-*)
1722
        NAME="${opt#--list-}"
1723
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1724
        NAME=${NAME%s}
1725
        eval show_list $NAME \$$(toupper $NAME)_LIST
1726
    ;;
1727
    --help|-h) show_help
1728
    ;;
1729
    *)
1730 884a36a7 Måns Rullgård
    optname="${opt%%=*}"
1731 26759c44 Måns Rullgård
    optname="${optname#--}"
1732
    optname=$(echo "$optname" | sed 's/-/_/g')
1733 89f2932b Måns Rullgård
    if is_in $optname $CMDLINE_SET; then
1734
        eval $optname='$optval'
1735
    elif is_in $optname $CMDLINE_APPEND; then
1736
        append $optname "$optval"
1737
    else
1738
         die_unknown $opt
1739
    fi
1740 7483e694 Diego Biurrun
    ;;
1741
    esac
1742 c597172e Måns Rullgård
done
1743
1744 bcea99bb Måns Rullgård
disabled logging && logfile=/dev/null
1745
1746 13cbe2c0 Måns Rullgård
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1747 bcea99bb Måns Rullgård
set >> $logfile
1748
1749 9da6609f Måns Rullgård
test -n "$cross_prefix" && enable cross_compile
1750
1751 8d4c00ed Måns Rullgård
if enabled cross_compile; then
1752
    test -n "$arch" && test -n "$target_os" ||
1753
        die "Must specify target arch and OS when cross-compiling"
1754
fi
1755
1756
set_default arch target_os
1757
1758 121d78d0 Carl Eugen Hoyos
ar_default="${cross_prefix}${ar_default}"
1759 11e6d03a Diego Biurrun
cc_default="${cross_prefix}${cc_default}"
1760 20e0ed95 Måns Rullgård
nm_default="${cross_prefix}${nm_default}"
1761 adb2b908 Ramiro Polla
ranlib="${cross_prefix}${ranlib}"
1762 4f837398 Måns Rullgård
strip_default="${cross_prefix}${strip_default}"
1763 adb2b908 Ramiro Polla
1764 c5200f17 Måns Rullgård
sysinclude_default="${sysroot}/usr/include"
1765
1766 4f837398 Måns Rullgård
set_default cc nm strip sysinclude
1767 9da6609f Måns Rullgård
enabled cross_compile || host_cc_default=$cc
1768
set_default host_cc
1769 13c7df3d Måns Rullgård
1770 82bb3329 Måns Rullgård
exesuf() {
1771
    case $1 in
1772
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1773
    esac
1774
}
1775
1776
EXESUF=$(exesuf $target_os)
1777
HOSTEXESUF=$(exesuf $host_os)
1778 c0f5b7f1 Måns Rullgård
1779 e4e69e0b Måns Rullgård
# set temporary file name
1780 a49d42c2 Måns Rullgård
: ${TMPDIR:=$TEMPDIR}
1781 c51fafa1 Måns Rullgård
: ${TMPDIR:=$TMP}
1782 a49d42c2 Måns Rullgård
: ${TMPDIR:=/tmp}
1783 e4e69e0b Måns Rullgård
1784 54460a83 Måns Rullgård
if ! check_cmd type mktemp; then
1785
    # simple replacement for missing mktemp
1786
    # NOT SAFE FOR GENERAL USE
1787
    mktemp(){
1788
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1789
    }
1790
fi
1791
1792
tmpfile(){
1793
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1794
        (set -C; exec > $tmp) 2>/dev/null ||
1795 f7ba16a7 Reimar Döffinger
        die "Unable to create temporary file in $TMPDIR."
1796 54460a83 Måns Rullgård
    append TMPFILES $tmp
1797
    eval $1=$tmp
1798
}
1799
1800
trap 'rm -f -- $TMPFILES' EXIT
1801
trap exit HUP INT TERM
1802
1803
tmpfile TMPC  .c
1804
tmpfile TMPE  $EXESUF
1805
tmpfile TMPH  .h
1806
tmpfile TMPO  .o
1807
tmpfile TMPS  .S
1808 a482e61b Måns Rullgård
tmpfile TMPV  .ver
1809 54460a83 Måns Rullgård
tmpfile TMPSH .sh
1810 55127e7b Måns Rullgård
tmpfile TMPASM .asm
1811 54460a83 Måns Rullgård
1812
unset -f mktemp
1813 e4e69e0b Måns Rullgård
1814 993f2d0f Måns Rullgård
# make sure we can execute files in $TMPDIR
1815
cat > $TMPSH 2>> $logfile <<EOF
1816
#! /bin/sh
1817
EOF
1818
chmod +x $TMPSH >> $logfile 2>&1
1819
if ! $TMPSH >> $logfile 2>&1; then
1820
    cat <<EOF
1821
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1822
variable to another directory and make sure that it is not mounted noexec.
1823
EOF
1824
    die "Sanity test failed."
1825
fi
1826
1827 19b4c628 Måns Rullgård
filter_cflags=echo
1828
filter_cppflags=echo
1829
filter_asflags=echo
1830
1831 613a4e3f Måns Rullgård
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1832
    cc_type=llvm_gcc
1833
    cc_version=__VERSION__
1834
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1835
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1836
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1837
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1838
    speed_cflags='-O3'
1839
    size_cflags='-Os'
1840
elif $cc -v 2>&1 | grep -qi ^gcc; then
1841 629687f6 Måns Rullgård
    cc_type=gcc
1842 a3d7c197 Diego Biurrun
    cc_version=__VERSION__
1843 bb5cecdc Måns Rullgård
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1844
    cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1845 aef6bd1b Måns Rullgård
    if ! $cc -dumpversion | grep -q '^2\.'; then
1846
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1847
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1848
    fi
1849 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1850
    size_cflags='-Os'
1851 629687f6 Måns Rullgård
elif $cc --version 2>/dev/null | grep -q Intel; then
1852
    cc_type=icc
1853 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1854 bb5cecdc Måns Rullgård
    cc_ident=$($cc --version | head -n1)
1855 bdefad73 Måns Rullgård
    icc_version=$($cc -dumpversion)
1856 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1857
    AS_DEPFLAGS='-MMD'
1858 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1859
    size_cflags='-Os'
1860 b05394a0 Måns Rullgård
    noopt_cflags='-O1'
1861 629687f6 Måns Rullgård
elif $cc -v 2>&1 | grep -q xlc; then
1862
    cc_type=xlc
1863 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__IBMC__)"
1864 bb5cecdc Måns Rullgård
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1865 14ca9cd0 Måns Rullgård
    speed_cflags='-O5'
1866
    size_cflags='-O5 -qcompact'
1867 df442a8d Måns Rullgård
elif $cc -V 2>/dev/null | grep -q Compaq; then
1868
    cc_type=ccc
1869 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__DECC_VER)"
1870 bb5cecdc Måns Rullgård
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1871 d8059267 Måns Rullgård
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1872 03754fcd Måns Rullgård
    debuglevel=3
1873 df442a8d Måns Rullgård
    add_ldflags -Wl,-z,now # calls to libots crash without this
1874 14ca9cd0 Måns Rullgård
    speed_cflags='-fast'
1875
    size_cflags='-O1'
1876 6a0d5493 Måns Rullgård
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1877 03e37762 Måns Rullgård
    test -d "$sysroot" || die "No valid sysroot specified."
1878
    cc_type=armcc
1879 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1880 bb5cecdc Måns Rullgård
    cc_ident=$($cc --vsn | head -n1)
1881 03e37762 Måns Rullgård
    armcc_conf="$PWD/armcc.conf"
1882
    $cc --arm_linux_configure                 \
1883
        --arm_linux_config_file="$armcc_conf" \
1884
        --configure_sysroot="$sysroot"        \
1885
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1886
        die "Error creating armcc configuration file."
1887 bcafde61 Måns Rullgård
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1888 03e37762 Måns Rullgård
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1889 75800dce Måns Rullgård
    as_default="${cross_prefix}gcc"
1890 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1891
    AS_DEPFLAGS='-MMD'
1892 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1893
    size_cflags='-Os'
1894 6fec122a Måns Rullgård
elif $cc -version 2>/dev/null | grep -q TMS470; then
1895
    cc_type=tms470
1896 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1897 bb5cecdc Måns Rullgård
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1898 6fec122a Måns Rullgård
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1899
    CC_O='-fr=$(@D)'
1900
    as_default="${cross_prefix}gcc"
1901
    ld_default="${cross_prefix}gcc"
1902
    TMPO=$(basename $TMPC .c).o
1903
    append TMPFILES $TMPO
1904
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1905 07dec06e Måns Rullgård
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1906
    AS_DEPFLAGS='-MMD'
1907 14ca9cd0 Måns Rullgård
    speed_cflags='-O3 -mf=5'
1908
    size_cflags='-O3 -mf=2'
1909 6fec122a Måns Rullgård
    filter_cflags=tms470_flags
1910
    tms470_flags(){
1911
        for flag; do
1912
            case $flag in
1913
                -march=*|-mcpu=*)
1914
                    case "${flag#*=}" in
1915
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1916
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1917
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1918
                        armv6*|arm11*)          echo -mv=6   ;;
1919
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1920
                                                echo -mv=5e  ;;
1921
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1922
                    esac
1923
                    ;;
1924
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1925
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1926 5fcb865b Måns Rullgård
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1927 a2709020 Måns Rullgård
                -msoft-float)   echo --float_support=vfplib       ;;
1928 14ca9cd0 Måns Rullgård
                -O[0-3]|-mf=*)  echo $flag                        ;;
1929 6fec122a Måns Rullgård
                -g)             echo -g -mn                       ;;
1930 587d24ff Måns Rullgård
                -pds=*)         echo $flag                        ;;
1931 6fec122a Måns Rullgård
            esac
1932
        done
1933
    }
1934 06da6943 David Conrad
elif $cc -v 2>&1 | grep -q clang; then
1935
    cc_type=clang
1936 b67a8f49 David Conrad
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
1937
        cc_version=__clang_version__ || cc_version=__VERSION__
1938 bb5cecdc Måns Rullgård
    cc_ident=$($cc --version | head -n1)
1939 06da6943 David Conrad
    CC_DEPFLAGS='-MMD'
1940
    AS_DEPFLAGS='-MMD'
1941 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1942
    size_cflags='-Os'
1943 2a472e9c Michael Kostylev
elif $cc -V 2>&1 | grep -q Sun; then
1944
    cc_type=suncc
1945
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1946 448f5b83 Måns Rullgård
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1947 faa374b7 Michael Kostylev
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1948 2a472e9c Michael Kostylev
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1949 14ca9cd0 Måns Rullgård
    speed_cflags='-O5'
1950
    size_cflags='-O5 -xspace'
1951 03279bbe Michael Kostylev
    filter_cflags=suncc_flags
1952
    suncc_flags(){
1953
        for flag; do
1954
            case $flag in
1955
                -march=*|-mcpu=*)
1956
                    case "${flag#*=}" in
1957
                        native)                   echo -xtarget=native       ;;
1958 87ddc38b Michael Kostylev
                        v9|niagara)               echo -xarch=sparc          ;;
1959 03279bbe Michael Kostylev
                        ultrasparc)               echo -xarch=sparcvis       ;;
1960 87ddc38b Michael Kostylev
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1961 03279bbe Michael Kostylev
                        i586|pentium)             echo -xchip=pentium        ;;
1962
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1963
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1964
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1965
                        pentium4*)          echo -xtarget=pentium4           ;;
1966
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1967
                        *-sse3)             echo -xarch=sse3                 ;;
1968
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1969
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1970
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1971
                        k8|opteron|athlon64|athlon-fx)
1972
                                                  echo -xarch=sse2a          ;;
1973
                        athlon*)                  echo -xarch=pentium_proa   ;;
1974
                    esac
1975
                    ;;
1976
                -std=c99)             echo -xc99              ;;
1977
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1978
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1979
                -W*,*)                echo $flag              ;;
1980
                -f*-*|-W*)                                    ;;
1981
                *)                    echo $flag              ;;
1982
            esac
1983
        done
1984
    }
1985 180ec37d Måns Rullgård
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
1986 349d78fe Måns Rullgård
    cc_type=pathscale
1987
    cc_version=__PATHSCALE__
1988
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1989
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1990
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1991
    speed_cflags='-O2'
1992
    size_cflags='-Os'
1993 6de163e9 Måns Rullgård
elif $cc -v 2>&1 | grep -q Open64; then
1994
    cc_type=open64
1995
    cc_version=__OPEN64__
1996
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1997
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1998
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1999
    speed_cflags='-O2'
2000
    size_cflags='-Os'
2001 629687f6 Måns Rullgård
fi
2002
2003 851ffa80 Måns Rullgård
test -n "$cc_type" && enable $cc_type ||
2004
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2005 629687f6 Måns Rullgård
2006 75bafbac Måns Rullgård
: ${as_default:=$cc}
2007 50567afa Måns Rullgård
: ${dep_cc_default:=$cc}
2008 684b28e0 Måns Rullgård
: ${ld_default:=$cc}
2009 121d78d0 Carl Eugen Hoyos
set_default ar as dep_cc ld
2010 75800dce Måns Rullgård
2011 07dec06e Måns Rullgård
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2012
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2013
2014 7f32f40c Måns Rullgård
add_cflags $extra_cflags
2015 2f2e6c7c Måns Rullgård
add_asflags $extra_cflags
2016 7f32f40c Måns Rullgård
2017 154d432c Måns Rullgård
if test -n "$sysroot"; then
2018
    case "$cc_type" in
2019 613a4e3f Måns Rullgård
        gcc|llvm_gcc)
2020 467256f2 Måns Rullgård
            add_cppflags --sysroot="$sysroot"
2021 154d432c Måns Rullgård
            add_ldflags --sysroot="$sysroot"
2022
        ;;
2023 6fec122a Måns Rullgård
        tms470)
2024
            add_cppflags -I"$sysinclude"
2025
            add_ldflags  --sysroot="$sysroot"
2026
        ;;
2027 06da6943 David Conrad
        clang)
2028 4def700e David Conrad
            add_cppflags -isysroot "$sysroot"
2029
            add_ldflags -isysroot "$sysroot"
2030 06da6943 David Conrad
        ;;
2031 154d432c Måns Rullgård
    esac
2032
fi
2033
2034 d22c13a8 Måns Rullgård
if test "$cpu" = host; then
2035
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2036
2037
    case "$cc_type" in
2038 613a4e3f Måns Rullgård
        gcc|llvm_gcc)
2039 d22c13a8 Måns Rullgård
            check_native(){
2040
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2041 27ce1be8 Måns Rullgård
                sed -n "/$1=/{
2042
                            s/.*$1=\\([^ ]*\\).*/\\1/
2043
                            p
2044
                            q
2045
                        }" $TMPE
2046 d22c13a8 Måns Rullgård
            }
2047
            cpu=$(check_native -march || check_native -mcpu)
2048
        ;;
2049
    esac
2050
2051
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2052
fi
2053
2054 e939cedd Måns Rullgård
# Deal with common $arch aliases
2055
case "$arch" in
2056
    arm*)
2057
        arch="arm"
2058
    ;;
2059
    mips|mipsel|IP*)
2060
        arch="mips"
2061
    ;;
2062 47b1860e Måns Rullgård
    mips64*)
2063 e939cedd Måns Rullgård
        arch="mips"
2064
        subarch="mips64"
2065
    ;;
2066
    parisc|hppa)
2067
        arch="parisc"
2068
    ;;
2069
    parisc64|hppa64)
2070
        arch="parisc"
2071
        subarch="parisc64"
2072
    ;;
2073
    "Power Macintosh"|ppc|powerpc)
2074
        arch="ppc"
2075
    ;;
2076 47b1860e Måns Rullgård
    ppc64|powerpc64)
2077 e939cedd Måns Rullgård
        arch="ppc"
2078
        subarch="ppc64"
2079
    ;;
2080
    s390|s390x)
2081
        arch="s390"
2082
    ;;
2083
    sh4|sh)
2084
        arch="sh4"
2085
    ;;
2086
    sun4u|sparc64)
2087
        arch="sparc"
2088
        subarch="sparc64"
2089
    ;;
2090
    i[3-6]86|i86pc|BePC|x86_64|amd64)
2091
        arch="x86"
2092
    ;;
2093
esac
2094
2095 851ffa80 Måns Rullgård
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2096 343aef9b Måns Rullgård
enable $arch
2097 e939cedd Måns Rullgård
2098 df5cdc24 Måns Rullgård
# Add processor-specific flags
2099 5d54c126 Måns Rullgård
if test "$cpu" = generic; then
2100
    : do nothing
2101
elif enabled ppc; then
2102 343aef9b Måns Rullgård
2103 56348891 Måns Rullgård
    case $(tolower $cpu) in
2104
        601|ppc601|powerpc601)
2105 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=601"
2106 64ad53ff Carl Eugen Hoyos
            disable altivec
2107 9dbd5c3d Måns Rullgård
        ;;
2108 56348891 Måns Rullgård
        603*|ppc603*|powerpc603*)
2109 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=603"
2110 64ad53ff Carl Eugen Hoyos
            disable altivec
2111 9dbd5c3d Måns Rullgård
        ;;
2112 56348891 Måns Rullgård
        604*|ppc604*|powerpc604*)
2113 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=604"
2114 64ad53ff Carl Eugen Hoyos
            disable altivec
2115 9dbd5c3d Måns Rullgård
        ;;
2116 56348891 Måns Rullgård
        g3|75*|ppc75*|powerpc75*)
2117 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2118 64ad53ff Carl Eugen Hoyos
            disable altivec
2119 9dbd5c3d Måns Rullgård
        ;;
2120 56348891 Måns Rullgård
        g4|745*|ppc745*|powerpc745*)
2121 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2122
        ;;
2123 56348891 Måns Rullgård
        74*|ppc74*|powerpc74*)
2124 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2125
        ;;
2126 56348891 Måns Rullgård
        g5|970|ppc970|powerpc970|power4*)
2127 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2128
        ;;
2129 56348891 Måns Rullgård
        cell)
2130 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=cell"
2131
            enable ldbrx
2132
        ;;
2133 7b0b81a1 Ancoron Luciferis
        e500v2)
2134
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2135
            disable altivec
2136
        ;;
2137
        e500)
2138
            cpuflags="-mcpu=8540 -mhard-float"
2139
            disable altivec
2140
        ;;
2141 9dbd5c3d Måns Rullgård
    esac
2142 343aef9b Måns Rullgård
2143
elif enabled x86; then
2144
2145 9dbd5c3d Måns Rullgård
    case $cpu in
2146
        i[345]86|pentium)
2147
            cpuflags="-march=$cpu"
2148
            disable mmx
2149
        ;;
2150
        # targets that do NOT support conditional mov (cmov)
2151
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2152
            cpuflags="-march=$cpu"
2153
            disable cmov
2154
        ;;
2155
        # targets that do support conditional mov (cmov)
2156 e90aa6ed Måns Rullgård
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2157 9dbd5c3d Måns Rullgård
            cpuflags="-march=$cpu"
2158
            enable cmov
2159
            enable fast_cmov
2160
        ;;
2161
        # targets that do support conditional mov but on which it's slow
2162
        pentium4|pentium4m|prescott|nocona)
2163
            cpuflags="-march=$cpu"
2164
            enable cmov
2165
            disable fast_cmov
2166
        ;;
2167
    esac
2168 343aef9b Måns Rullgård
2169
elif enabled sparc; then
2170
2171 9dbd5c3d Måns Rullgård
    case $cpu in
2172 26b7199e Michael Kostylev
        niagara)
2173
            cpuflags="-mcpu=$cpu"
2174
            disable vis
2175
        ;;
2176 9dbd5c3d Måns Rullgård
        sparc64)
2177
            cpuflags="-mcpu=v9"
2178
        ;;
2179
    esac
2180 343aef9b Måns Rullgård
2181
elif enabled arm; then
2182
2183 34ba23c9 Måns Rullgård
    case $cpu in
2184
        armv*)
2185
            cpuflags="-march=$cpu"
2186 c2eae137 Måns Rullgård
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2187 34ba23c9 Måns Rullgård
        ;;
2188
        *)
2189
            cpuflags="-mcpu=$cpu"
2190 c2eae137 Måns Rullgård
            case $cpu in
2191
                cortex-a*)                               subarch=armv7a  ;;
2192
                cortex-r*)                               subarch=armv7r  ;;
2193
                cortex-m*)                               subarch=armv7m  ;;
2194
                arm11*)                                  subarch=armv6   ;;
2195
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2196
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2197
            esac
2198 34ba23c9 Måns Rullgård
        ;;
2199
    esac
2200 343aef9b Måns Rullgård
2201
elif enabled alpha; then
2202
2203 34ba23c9 Måns Rullgård
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2204 343aef9b Måns Rullgård
2205
elif enabled bfin; then
2206
2207 34ba23c9 Måns Rullgård
    cpuflags="-mcpu=$cpu"
2208 343aef9b Måns Rullgård
2209
elif enabled mips; then
2210
2211 34ba23c9 Måns Rullgård
    cpuflags="-march=$cpu"
2212 343aef9b Måns Rullgård
2213
elif enabled avr32; then
2214
2215 9dbd5c3d Måns Rullgård
    case $cpu in
2216
        ap7[02]0[0-2])
2217
            subarch="avr32_ap"
2218
            cpuflags="-mpart=$cpu"
2219
        ;;
2220
        ap)
2221
            subarch="avr32_ap"
2222
            cpuflags="-march=$cpu"
2223
        ;;
2224
        uc3[ab]*)
2225
            subarch="avr32_uc"
2226
            cpuflags="-mcpu=$cpu"
2227
        ;;
2228
        uc)
2229
            subarch="avr32_uc"
2230
            cpuflags="-march=$cpu"
2231
        ;;
2232
    esac
2233 df5cdc24 Måns Rullgård
2234 343aef9b Måns Rullgård
fi
2235
2236 df5cdc24 Måns Rullgård
add_cflags $cpuflags
2237
add_asflags $cpuflags
2238
2239 993f2d0f Måns Rullgård
# compiler sanity check
2240
check_exec <<EOF
2241
int main(void){ return 0; }
2242
EOF
2243
if test "$?" != 0; then
2244
    echo "$cc is unable to create an executable file."
2245
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2246
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2247
        echo "Only do this if you know what cross compiling means."
2248
    fi
2249
    die "C compiler test failed."
2250
fi
2251
2252 38a9c529 Måns Rullgård
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2253 e9b9a2f8 Michael Niedermayer
check_cflags -std=c99
2254 50a334e4 Måns Rullgård
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2255 9d821fc2 Diego Biurrun
#include <stdlib.h>
2256
EOF
2257 50a334e4 Måns Rullgård
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2258 9d821fc2 Diego Biurrun
#include <stdlib.h>
2259
EOF
2260 e9b9a2f8 Michael Niedermayer
2261 f0125de9 Måns Rullgård
check_host_cflags -std=c99
2262
2263 b24dbcbd Ramiro Polla
case "$arch" in
2264 e939cedd Måns Rullgård
    alpha|ia64|mips|parisc|sparc)
2265 8a3c8627 Måns Rullgård
        spic=$shared
2266 b24dbcbd Ramiro Polla
    ;;
2267 e939cedd Måns Rullgård
    x86)
2268 cfdb6148 Måns Rullgård
        subarch="x86_32"
2269 e939cedd Måns Rullgård
        check_cc <<EOF && subarch="x86_64"
2270 58b3536d Måns Rullgård
        int test[(int)sizeof(char*) - 7];
2271 cfdb6148 Måns Rullgård
EOF
2272 de27f4d9 David Conrad
        if test "$subarch" = "x86_64"; then
2273 e939cedd Måns Rullgård
            spic=$shared
2274 de27f4d9 David Conrad
        fi
2275 b24dbcbd Ramiro Polla
    ;;
2276
esac
2277
2278 343aef9b Måns Rullgård
enable $subarch
2279 8a3c8627 Måns Rullgård
enabled spic && enable pic
2280 b24dbcbd Ramiro Polla
2281 7483e694 Diego Biurrun
# OS specific
2282 4f854758 Diego Biurrun
case $target_os in
2283 a1629e28 Diego Biurrun
    haiku)
2284 63ae7e7c Diego Biurrun
        prefix_default="/boot/common"
2285 108caaaa François Revol
        network_extralibs="-lnetwork"
2286 a1629e28 Diego Biurrun
        ;;
2287 7483e694 Diego Biurrun
    sunos)
2288
        FFSERVERLDFLAGS=""
2289 9987769a Måns Rullgård
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2290 0600d30a Michael Kostylev
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2291 7483e694 Diego Biurrun
        network_extralibs="-lsocket -lnsl"
2292 50a334e4 Måns Rullgård
        add_cppflags -D__EXTENSIONS__
2293 8182dc34 Måns Rullgård
        nm_opts='-P -g'
2294 7483e694 Diego Biurrun
        ;;
2295
    netbsd)
2296 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
2297
        oss_outdev_extralibs="-lossaudio"
2298 2138dc99 Diego Biurrun
        add_cppflags -D_XOPEN_SOURCE=600
2299 7483e694 Diego Biurrun
        ;;
2300
    openbsd)
2301 89e053f8 Måns Rullgård
        enable malloc_aligned
2302 7c4a001a Måns Rullgård
        # On OpenBSD 4.5. the compiler does not use PIC unless
2303
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2304
        # however the generated executable will not do anything
2305
        # (simply quits with exit-code 1, no crash, no output).
2306 a7b9c8ae Reimar Döffinger
        # Thus explicitly enable PIC here.
2307 cd78208b Måns Rullgård
        enable pic
2308 7483e694 Diego Biurrun
        SHFLAGS='-shared'
2309 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
2310
        oss_outdev_extralibs="-lossaudio"
2311 7483e694 Diego Biurrun
        ;;
2312 90b4f091 Diego Biurrun
    freebsd|dragonfly)
2313 89e053f8 Måns Rullgård
        enable malloc_aligned
2314 7483e694 Diego Biurrun
        ;;
2315
    bsd/os)
2316 355d81df Måns Rullgård
        add_extralibs -lpoll -lgnugetopt
2317 7483e694 Diego Biurrun
        strip="strip -d"
2318
        ;;
2319
    darwin)
2320 89e053f8 Måns Rullgård
        enable malloc_aligned
2321 301ab19d Måns Rullgård
        gas="gas-preprocessor.pl $cc"
2322 e08b8239 Måns Rullgård
        enabled ppc && add_asflags -force_cpusubtype_ALL
2323 0138c54e Diego Biurrun
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2324 be90cd27 Ramiro Polla
        strip="${strip} -x"
2325 355d81df Måns Rullgård
        add_ldflags -Wl,-dynamic,-search_paths_first
2326 7483e694 Diego Biurrun
        SLIBSUF=".dylib"
2327
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2328
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2329
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2330 304d586d Loren Merritt
        objformat="macho"
2331 1b0f6fb8 David Conrad
        enabled x86_64 && objformat="macho64"
2332 8dfa86f7 Måns Rullgård
        enabled_any pic shared ||
2333 2704bd1a Alexander Strange
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2334 7483e694 Diego Biurrun
        ;;
2335
    mingw32*)
2336 9d3f4f50 Martin Storsjö
        if test $target_os = "mingw32ce"; then
2337 1aa71e25 Martin Storsjö
            disable network
2338
        else
2339
            target_os=mingw32
2340
        fi
2341 dcc01c06 Ramiro Polla
        LIBTARGET=i386
2342 1fc9fb8a Diego Biurrun
        if enabled x86_64; then
2343 89e053f8 Måns Rullgård
            enable malloc_aligned
2344 dcc01c06 Ramiro Polla
            LIBTARGET=x64
2345 336cc1b0 Martin Storsjö
        elif enabled arm; then
2346
            LIBTARGET=arm
2347 dcc01c06 Ramiro Polla
        fi
2348 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2349 7483e694 Diego Biurrun
        disable ffserver
2350
        SLIBPREF=""
2351
        SLIBSUF=".dll"
2352
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2353
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2354 06abe7f5 Ramiro Polla
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2355 4c25d159 Ramiro Polla
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2356 b9349ff4 Martin Storsjö
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2357
            install -d "$(LIBDIR)"; \
2358
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2359 7483e694 Diego Biurrun
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2360 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'
2361 304d586d Loren Merritt
        objformat="win32"
2362 bc574408 Ramiro Polla
        enable dos_paths
2363 1894e741 Ramiro Polla
        check_cflags -fno-common
2364 e26011d0 Ramiro Polla
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2365
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2366 f7ad5aa2 Ramiro Polla
                die "ERROR: MinGW runtime version must be >= 3.15."
2367 7483e694 Diego Biurrun
        ;;
2368
    cygwin*)
2369 4f854758 Diego Biurrun
        target_os=cygwin
2370 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2371 7483e694 Diego Biurrun
        SLIBPREF="cyg"
2372
        SLIBSUF=".dll"
2373
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2374
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2375
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2376 304d586d Loren Merritt
        objformat="win32"
2377 bc574408 Ramiro Polla
        enable dos_paths
2378 1894e741 Ramiro Polla
        check_cflags -fno-common
2379 7483e694 Diego Biurrun
        ;;
2380 4f365f37 Michael Kostylev
    *-dos|freedos|opendos)
2381 fdf11906 Diego Biurrun
        disable ffplay ffserver
2382 4f365f37 Michael Kostylev
        disable $INDEV_LIST $OUTDEV_LIST
2383
        network_extralibs="-lsocket"
2384 ff1c015d Michael Kostylev
        objformat="coff"
2385 bc574408 Ramiro Polla
        enable dos_paths
2386 4f365f37 Michael Kostylev
        ;;
2387 7483e694 Diego Biurrun
    linux)
2388
        enable dv1394
2389
        ;;
2390
    irix*)
2391 4f854758 Diego Biurrun
        target_os=irix
2392 7483e694 Diego Biurrun
        ranlib="echo ignoring ranlib"
2393
        ;;
2394 d22e8442 Dave Yeo
    os/2*)
2395
        strip="lxlite"
2396
        ln_s="cp -f"
2397 355d81df Måns Rullgård
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2398 71c61f62 Måns Rullgård
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2399 d22e8442 Dave Yeo
        FFSERVERLDFLAGS=""
2400 287d3b13 Dave Yeo
        LIBSUF="_s.a"
2401 d22e8442 Dave Yeo
        SLIBPREF=""
2402
        SLIBSUF=".dll"
2403
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2404
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2405 71c61f62 Måns Rullgård
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2406
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2407
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2408
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2409
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2410
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2411
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2412
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2413
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2414 d22e8442 Dave Yeo
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2415 bc574408 Ramiro Polla
        enable dos_paths
2416 d22e8442 Dave Yeo
        ;;
2417 83993c1c Andres Mejia
    gnu/kfreebsd)
2418
        ;;
2419 34e82167 Andres Mejia
    gnu)
2420
        ;;
2421 614d8911 Måns Rullgård
    none)
2422
        ;;
2423 7483e694 Diego Biurrun
    *)
2424 4f924f9a Måns Rullgård
        die "Unknown OS '$target_os'."
2425 7483e694 Diego Biurrun
        ;;
2426
esac
2427
2428 db7515fd Måns Rullgård
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2429
2430 13cb2187 Alexander Strange
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2431
2432 c9d19248 Måns Rullgård
set_default $PATHS_LIST
2433
2434 320d060a Diego Biurrun
# we need to build at least one lib type
2435 93b3c083 Måns Rullgård
if ! enabled_any static shared; then
2436 320d060a Diego Biurrun
    cat <<EOF
2437
At least one library type must be built.
2438
Specify --enable-static to build the static libraries or --enable-shared to
2439
build the shared libraries as well. To only build the shared libraries specify
2440
--disable-static in addition to --enable-shared.
2441
EOF
2442
    exit 1;
2443
fi
2444
2445 abc4e572 Diego Biurrun
disabled static && LIBNAME=""
2446 2a320695 Ramiro Polla
2447 2184c6f7 Diego Biurrun
die_license_disabled() {
2448 4c27207c Måns Rullgård
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2449 2184c6f7 Diego Biurrun
}
2450
2451
die_license_disabled gpl libx264
2452 de295976 Stefan Gehrer
die_license_disabled gpl libxavs
2453 2184c6f7 Diego Biurrun
die_license_disabled gpl libxvid
2454
die_license_disabled gpl postproc
2455
die_license_disabled gpl x11grab
2456
2457 2f7ae63b Diego Biurrun
die_license_disabled nonfree libfaac
2458 b2e3c528 Michael Niedermayer
2459 0b175caa Diego Biurrun
die_license_disabled version3 libopencore_amrnb
2460
die_license_disabled version3 libopencore_amrwb
2461
2462 9cad0e4e Diego Biurrun
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2463 3fe142e2 Diego Biurrun
2464 9eeed841 Måns Rullgård
check_deps $ARCH_EXT_LIST
2465 0f3cb305 Fabrice Bellard
2466 40617a6d Ben Taylor
disabled optimizations || check_cflags -fomit-frame-pointer
2467 cf9d24ad Dan Christiansen
2468 e276d9e8 Måns Rullgård
enable_pic() {
2469
    enable pic
2470 bce7b696 Måns Rullgård
    add_cppflags -DPIC
2471
    add_cflags   -fPIC
2472
    add_asflags  -fPIC
2473 e276d9e8 Måns Rullgård
}
2474
2475
enabled pic && enable_pic
2476 bce7b696 Måns Rullgård
2477 b4d96ba2 Måns Rullgård
check_cc <<EOF || die "Symbol mangling check failed."
2478
int ff_extern;
2479
EOF
2480 8182dc34 Måns Rullgård
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2481 b4d96ba2 Måns Rullgård
extern_prefix=${sym%%ff_extern*}
2482
2483 f65883c8 Måns Rullgård
check_cc <<EOF && enable inline_asm
2484
void foo(void) { __asm__ volatile ("" ::); }
2485
EOF
2486 61d251db Måns Rullgård
2487 df5e3978 Måns Rullgård
_restrict=
2488
for restrict_keyword in restrict __restrict__ __restrict; do
2489
    check_cc <<EOF && _restrict=$restrict_keyword && break
2490
void foo(char * $restrict_keyword p);
2491
EOF
2492
done
2493
2494
check_cc <<EOF && enable attribute_packed
2495
struct { int x; } __attribute__((packed)) x;
2496
EOF
2497
2498 dffb41b9 Måns Rullgård
check_cc <<EOF && enable attribute_may_alias
2499
union { int x; } __attribute__((may_alias)) x;
2500
EOF
2501
2502 df5e3978 Måns Rullgård
check_cc <<EOF || die "endian test failed"
2503
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2504
EOF
2505 48fc536a Måns Rullgård
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2506 df5e3978 Måns Rullgård
2507 e939cedd Måns Rullgård
if enabled alpha; then
2508
2509
    check_cflags -mieee
2510
2511
elif enabled arm; then
2512 e45391bb Måns Rullgård
2513 50fa82e6 Måns Rullgård
    check_cflags -marm
2514 301ab19d Måns Rullgård
    nogas=die
2515 50fa82e6 Måns Rullgård
2516 fa0912fe Måns Rullgård
    check_ld <<EOF && enable vfp_args
2517
__asm__ (".eabi_attribute 28, 1");
2518
int main(void) { return 0; }
2519
EOF
2520
2521
    # We have to check if pld is a nop and disable it.
2522
    check_asm pld '"pld [r0]"'
2523
2524
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2525
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2526
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2527
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2528
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2529
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2530 e45391bb Måns Rullgård
2531 e276d9e8 Måns Rullgård
    enabled_all armv6t2 shared !pic && enable_pic
2532
2533 fa0912fe Måns Rullgård
elif enabled mips; then
2534 e45391bb Måns Rullgård
2535 fa0912fe Måns Rullgård
    check_asm loongson '"dmult.g $1, $2, $3"'
2536
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2537 e45391bb Måns Rullgård
2538 fa0912fe Måns Rullgård
elif enabled ppc; then
2539 e45391bb Måns Rullgård
2540 e6a0c354 Måns Rullgård
    enable local_aligned_8 local_aligned_16
2541
2542 135448fa Måns Rullgård
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2543 2f0c136e Måns Rullgård
    check_asm ibm_asm   '"add 0, 0, 0"'
2544 fa0912fe Måns Rullgård
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2545 64de20d1 Måns Rullgård
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2546 fa0912fe Måns Rullgård
2547
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2548
    if enabled altivec; then
2549 301ab19d Måns Rullgård
        nogas=warn
2550 fa0912fe Måns Rullgård
        check_cflags -maltivec -mabi=altivec &&
2551
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2552
        check_cflags -faltivec
2553
2554
        # check if our compiler supports Motorola AltiVec C API
2555
        check_cc <<EOF || disable altivec
2556
$inc_altivec_h
2557
int main(void) {
2558
    vector signed int v1, v2, v3;
2559
    v1 = vec_add(v2,v3);
2560
    return 0;
2561
}
2562
EOF
2563
2564
        # check if our compiler supports braces for vector declarations
2565
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2566
$inc_altivec_h
2567
int main (void) { (vector int) {1}; return 0; }
2568
EOF
2569
    fi
2570 e45391bb Måns Rullgård
2571 fa0912fe Måns Rullgård
elif enabled sparc; then
2572 e45391bb Måns Rullgård
2573 fa0912fe Måns Rullgård
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2574
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2575 e45391bb Måns Rullgård
2576 fa0912fe Måns Rullgård
elif enabled x86; then
2577 e45391bb Måns Rullgård
2578 e6a0c354 Måns Rullgård
    enable local_aligned_8 local_aligned_16
2579
2580 44965991 Panagiotis Issaris
    # check whether EBP is available on x86
2581
    # As 'i' is stored on the stack, this program will crash
2582
    # if the base pointer is used to access it because the
2583
    # base pointer is cleared in the inline assembly code.
2584 7dfef245 Måns Rullgård
    check_exec_crash <<EOF && enable ebp_available
2585 44965991 Panagiotis Issaris
    volatile int i=0;
2586 be449fca Diego Pettenò
    __asm__ volatile (
2587 44965991 Panagiotis Issaris
        "xorl %%ebp, %%ebp"
2588
    ::: "%ebp");
2589
    return i;
2590
EOF
2591
2592 f494213c Reimar Döffinger
    # check whether EBX is available on x86
2593 7cee5421 Måns Rullgård
    check_asm ebx_available '""::"b"(0)' &&
2594
        check_asm ebx_available '"":::"%ebx"'
2595 8e380710 Loren Merritt
2596 6f74fb03 Ramiro Polla
    # check whether xmm clobbers are supported
2597
    check_asm xmm_clobbers '"":::"%xmm0"'
2598
2599 d3a4b4e0 Diego Biurrun
    # check whether more than 10 operands are supported
2600
    check_cc <<EOF && enable ten_operands
2601
int main(void) {
2602
    int x=0;
2603
    __asm__ volatile(
2604
        ""
2605
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2606
    );
2607
    return 0;
2608
}
2609
EOF
2610
2611 d7f0920b Alexander Strange
    # check whether binutils is new enough to compile SSSE3/MMX2
2612 940f335a Måns Rullgård
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2613 5fd89ca0 Diego Biurrun
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2614 6bd859d6 Måns Rullgård
2615
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2616 304d586d Loren Merritt
2617 9cca1e40 Alex Converse
    if ! disabled_any asm mmx yasm; then
2618 b6c06894 Måns Rullgård
        if check_cmd $yasmexe --version; then
2619
            enabled x86_64 && yasm_extra="-m amd64"
2620
            yasm_debug="-g dwarf2"
2621
        elif check_cmd nasm -v; then
2622
            yasmexe=nasm
2623
            yasm_debug="-g -F dwarf"
2624
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2625
        fi
2626
2627
        YASMFLAGS="-f $objformat $yasm_extra"
2628
        enabled pic               && append YASMFLAGS "-DPIC"
2629
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2630
        case "$objformat" in
2631
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2632
        esac
2633
2634 31a0dcb2 Måns Rullgård
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2635 25432e85 Måns Rullgård
            die "yasm not found, use --disable-yasm for a crippled build"
2636 31a0dcb2 Måns Rullgård
    fi
2637 e45391bb Måns Rullgård
2638 669b5583 Måns Rullgård
    case "$cpu" in
2639
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2640
            disable fast_clz
2641
        ;;
2642
    esac
2643
2644 44965991 Panagiotis Issaris
fi
2645
2646 301ab19d Måns Rullgård
if enabled asm; then
2647
    as=${gas:=$as}
2648
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2649
        $nogas "GNU assembler not found, install gas-preprocessor"
2650
fi
2651
2652 a98bb16d Ramiro Polla
if check_func dlopen; then
2653
    ldl=
2654
elif check_func dlopen -ldl; then
2655
    ldl=-ldl
2656 8bf5d58f Michael Niedermayer
fi
2657
2658 75ecf149 Diego Biurrun
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2659
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2660
2661 534a2231 Måns Rullgård
check_func  fcntl
2662 7483e694 Diego Biurrun
check_func  fork
2663 84882df6 Martin Storsjö
check_func  getaddrinfo $network_extralibs
2664 7483e694 Diego Biurrun
check_func  gethrtime
2665
check_func  getrusage
2666 fc5607f8 Reimar Döffinger
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2667 094c09bb Michael Kostylev
check_func  inet_aton $network_extralibs
2668 abfc8d05 Martin Storsjö
check_func  isatty
2669 4ae40685 Måns Rullgård
check_func  ${malloc_prefix}memalign            && enable memalign
2670 7483e694 Diego Biurrun
check_func  mkstemp
2671 4ae40685 Måns Rullgård
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2672 0104b608 Måns Rullgård
check_func  setrlimit
2673 87958234 Stefano Sabatini
check_func  strerror_r
2674 47941088 Stefano Sabatini
check_func  strtok_r
2675 b507ebd1 Ramiro Polla
check_func_headers io.h setmode
2676 e4673692 Diego Biurrun
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2677 fc5607f8 Reimar Döffinger
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2678 2446d3d6 Diego Biurrun
check_func_headers windows.h GetProcessTimes
2679 7c5bfe7a Ramiro Polla
check_func_headers windows.h VirtualAlloc
2680 6ffa87d3 Ramiro Polla
2681 e16e49ac Ramiro Polla
check_header conio.h
2682 a98bb16d Ramiro Polla
check_header dlfcn.h
2683 92c6a099 Laurent Aimar
check_header dxva2api.h
2684 a98bb16d Ramiro Polla
check_header malloc.h
2685 bf6ce82d Diego Biurrun
check_header poll.h
2686 b58412f1 Alexander Strange
check_header sys/mman.h
2687 b091aa44 Ramiro Polla
check_header sys/resource.h
2688 bf6ce82d Diego Biurrun
check_header sys/select.h
2689 a98bb16d Ramiro Polla
check_header termios.h
2690 272081b0 Carl Eugen Hoyos
check_header vdpau/vdpau.h
2691
check_header vdpau/vdpau_x11.h
2692 68178ca9 Diego Biurrun
check_header X11/extensions/XvMClib.h
2693 a98bb16d Ramiro Polla
2694 9104cd51 Ramiro Polla
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2695
2696 89e053f8 Måns Rullgård
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2697
     enabled_any $need_memalign ; then
2698 1f91cdce Ramiro Polla
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2699 a98bb16d Ramiro Polla
fi
2700 e16e49ac Ramiro Polla
2701 a4fa192c Ramiro Polla
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2702 632948bd Ramiro Polla
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2703 57bd82d4 Måns Rullgård
2704
# check for some common methods of building with pthread support
2705
# do this before the optional library checks as some of them require pthreads
2706 0dbfc1db Måns Rullgård
if ! disabled pthreads && ! enabled w32threads; then
2707
    enable pthreads
2708 9e7fd101 Måns Rullgård
    if check_func pthread_create; then
2709
        :
2710
    elif check_func pthread_create -pthread; then
2711
        add_cflags -pthread
2712 afc9aee2 Diego Biurrun
        add_extralibs -pthread
2713 9e7fd101 Måns Rullgård
    elif check_func pthread_create -pthreads; then
2714
        add_cflags -pthreads
2715 afc9aee2 Diego Biurrun
        add_extralibs -pthreads
2716 8d94f606 Gianluigi Tiesi
    elif check_func pthread_create -lpthreadGC2; then
2717
        add_extralibs -lpthreadGC2
2718 9e7fd101 Måns Rullgård
    elif ! check_lib pthread.h pthread_create -lpthread; then
2719 0dbfc1db Måns Rullgård
        disable pthreads
2720 9e7fd101 Måns Rullgård
    fi
2721 57bd82d4 Måns Rullgård
fi
2722
2723 8eee7025 Diego Biurrun
for thread in $THREADS_LIST; do
2724 e5f94c2b Ramiro Polla
    if enabled $thread; then
2725 3ae3b721 Ramiro Polla
        test -n "$thread_type" &&
2726
            die "ERROR: Only one thread type must be selected." ||
2727 e5f94c2b Ramiro Polla
            thread_type="$thread"
2728
    fi
2729
done
2730
2731 fdf88598 Måns Rullgård
check_lib math.h sin -lm
2732 edd43c95 Reimar Döffinger
disabled vaapi || check_lib va/va.h vaInitialize -lva
2733 fdf88598 Måns Rullgård
2734 645d2652 Måns Rullgård
check_mathfunc exp2
2735
check_mathfunc exp2f
2736
check_mathfunc llrint
2737 07876e25 Måns Rullgård
check_mathfunc llrintf
2738 645d2652 Måns Rullgård
check_mathfunc log2
2739
check_mathfunc log2f
2740
check_mathfunc lrint
2741
check_mathfunc lrintf
2742
check_mathfunc round
2743
check_mathfunc roundf
2744
check_mathfunc truncf
2745 f32adb22 Måns Rullgård
2746 57bd82d4 Måns Rullgård
# these are off by default, so fail if requested and not available
2747 a1b3c5a3 kemuri
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2748 47941088 Stefano Sabatini
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2749 e3cc7d6f Diego Biurrun
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2750 2513b2b4 Diego Biurrun
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2751
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2752 79fda097 Diego Biurrun
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2753 5af41508 Reinhard Tartler
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2754 9b9d3868 Rafaël Carré
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2755 7483e694 Diego Biurrun
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2756 eb7626a3 Måns Rullgård
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2757
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2758 6ebf0bfc Stefano Sabatini
enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2759
                        die "ERROR: libopencv not found"; }
2760 3d6fac8c Mathieu Malaterre
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2761 42ebfc54 Ramiro Polla
enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2762
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2763 36718e51 Diego Biurrun
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2764
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2765 ae14f311 David Conrad
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2766 c261a5d9 David Conrad
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2767 7483e694 Diego Biurrun
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2768 7d07d6f5 Diego Biurrun
enabled libvpx     && {
2769
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2770
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2771
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2772
                                die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2773 eb7626a3 Måns Rullgård
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2774 5dd97520 Jason Garrett-Glaser
                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2775
                        die "ERROR: libx264 version must be >= 0.99."; }
2776 de295976 Stefan Gehrer
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2777 2bfecf73 Stefano Sabatini
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2778 7483e694 Diego Biurrun
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2779 8ac17293 Steve L'Homme
2780 0b4a1821 Alessandro Sappia
# libdc1394 check
2781
if enabled libdc1394; then
2782
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2783
        enable libdc1394_2; } ||
2784
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2785
        enable libdc1394_1; } ||
2786
    die "ERROR: No version of libdc1394 found "
2787
fi
2788
2789 6a1a892f Frantisek Dvorak
SDL_CONFIG="${cross_prefix}sdl-config"
2790 2270b4b2 Diego Biurrun
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2791 5e622c40 Diego Biurrun
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2792 b4f93564 Måns Rullgård
    sdl_libs=$("${SDL_CONFIG}" --libs)
2793 aa692d54 Måns Rullgård
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2794
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2795
    enable sdl &&
2796
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2797 c3f6b472 Michael Niedermayer
fi
2798 57bd82d4 Måns Rullgård
2799 2270b4b2 Diego Biurrun
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2800 146ea952 Nicolas Boos
2801 73b46a95 Ramiro Polla
if enabled network; then
2802 96000432 Reimar Döffinger
    check_type "sys/types.h sys/socket.h" socklen_t
2803 c0018613 Martin Storsjö
    check_type netdb.h "struct addrinfo"
2804 9fd5f39b Martin Storsjö
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2805 b4d68544 Martin Storsjö
    check_type netinet/in.h "struct sockaddr_in6"
2806 ff6e82a9 Måns Rullgård
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2807 3b2372bf Ronald S. Bultje
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2808 73b46a95 Ramiro Polla
    # Prefer arpa/inet.h over winsock2
2809
    if check_header arpa/inet.h ; then
2810
        check_func closesocket
2811
    elif check_header winsock2.h ; then
2812 f4c13872 Martin Storsjö
        check_func_headers winsock2.h closesocket -lws2 && \
2813
            network_extralibs="-lws2" || \
2814
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2815
            network_extralibs="-lws2_32"; }
2816 72be9e73 Dave Yeo
        check_type ws2tcpip.h socklen_t
2817 c0018613 Martin Storsjö
        check_type ws2tcpip.h "struct addrinfo"
2818 b4d68544 Martin Storsjö
        check_type ws2tcpip.h "struct ipv6_mreq"
2819
        check_type ws2tcpip.h "struct sockaddr_in6"
2820 33a4dbdd Martin Storsjö
        check_type ws2tcpip.h "struct sockaddr_storage"
2821 3b2372bf Ronald S. Bultje
        check_struct winsock2.h "struct sockaddr" sa_len
2822 28c9f069 Michael Kostylev
    else
2823
        disable network
2824 73b46a95 Ramiro Polla
    fi
2825
fi
2826
2827 06e31011 Ramiro Polla
check_header linux/videodev.h
2828
check_header linux/videodev2.h
2829 1b6e8b73 Brad
check_header sys/videoio.h
2830 47f38850 Luca Abeni
2831 27796dc3 Ramiro Polla
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2832 ec1ee802 Ramiro Polla
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2833
# w32api 3.12 had it defined wrong
2834
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2835 c2345207 Ramiro Polla
2836 f8aa696f Diego Biurrun
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2837 1c915f83 Ramiro Polla
{ check_header dev/bktr/ioctl_meteor.h &&
2838
  check_header dev/bktr/ioctl_bt848.h; } ||
2839
{ check_header machine/ioctl_meteor.h &&
2840
  check_header machine/ioctl_bt848.h; } ||
2841
{ check_header dev/video/meteor/ioctl_meteor.h &&
2842
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2843
check_header dev/ic/bt8xx.h
2844 f8aa696f Diego Biurrun
2845 c7682de0 Ramiro Polla
check_header sys/soundcard.h
2846
check_header soundcard.h
2847 deb29777 Måns Rullgård
2848 b6f3d925 Måns Rullgård
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2849 35fd8122 Nicolas George
2850 0e57fe17 Carl Eugen Hoyos
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2851 80ff8a16