Statistics
| Branch: | Revision:

ffmpeg / configure @ 0810a584

History | View | Annotate | Download (97.8 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 e90f5b5a Ramiro Polla
    runtime_cpudetect
916 2e35e684 Måns Rullgård
    shared
917 bd2216e4 Måns Rullgård
    small
918 6b35d421 Måns Rullgård
    sram
919 2e35e684 Måns Rullgård
    static
920 5a0f7131 Måns Rullgård
    swscale
921 a9ddb5b1 Cédric Schieli
    swscale_alpha
922 17492d5e Diego Biurrun
    vaapi
923
    vdpau
924 9cad0e4e Diego Biurrun
    version3
925 56a059ac Diego Biurrun
    x11grab
926 c88f5d72 Måns Rullgård
    zlib
927 4a0d6686 Aurelien Jacobs
"
928 c88f5d72 Måns Rullgård
929 8eee7025 Diego Biurrun
THREADS_LIST='
930
    pthreads
931
    w32threads
932
'
933
934 3f5b56e5 Måns Rullgård
ARCH_LIST='
935
    alpha
936 a2fc0f6a Måns Rullgård
    arm
937 fdcd782d Måns Rullgård
    avr32
938
    avr32_ap
939
    avr32_uc
940 3f5b56e5 Måns Rullgård
    bfin
941
    ia64
942
    m68k
943
    mips
944 bae3abb0 Måns Rullgård
    mips64
945 3f5b56e5 Måns Rullgård
    parisc
946 79cb09b2 Diego Biurrun
    ppc
947 34d11b87 Reimar Döffinger
    ppc64
948 3f5b56e5 Måns Rullgård
    s390
949
    sh4
950
    sparc
951
    sparc64
952 0844bae1 Måns Rullgård
    tomi
953 3f5b56e5 Måns Rullgård
    x86
954
    x86_32
955
    x86_64
956
'
957
958
ARCH_EXT_LIST='
959 1ac9331a Måns Rullgård
    altivec
960 3bf96eec Diego Biurrun
    amd3dnow
961 a1ef9f08 Diego Biurrun
    amd3dnowext
962 1ac9331a Måns Rullgård
    armv5te
963 edab3048 Måns Rullgård
    armv6
964 ab5cb084 Måns Rullgård
    armv6t2
965 f55b299a Måns Rullgård
    armvfp
966 3f5b56e5 Måns Rullgård
    iwmmxt
967
    mmi
968
    mmx
969 d7f0920b Alexander Strange
    mmx2
970 6b18d278 Måns Rullgård
    neon
971 799fde37 Diego Biurrun
    ppc4xx
972 1bb04d5a Ramiro Polla
    sse
973 9eeed841 Måns Rullgård
    ssse3
974 bd9d34a0 Diego Biurrun
    vis
975 3f5b56e5 Måns Rullgård
'
976
977 a3e02a8c Måns Rullgård
HAVE_LIST_PUB='
978
    bigendian
979 d268eee9 Måns Rullgård
    fast_unaligned
980 a3e02a8c Måns Rullgård
'
981
982 3f5b56e5 Måns Rullgård
HAVE_LIST="
983
    $ARCH_EXT_LIST
984 a3e02a8c Måns Rullgård
    $HAVE_LIST_PUB
985 3f5b56e5 Måns Rullgård
    $THREADS_LIST
986 59782b82 Måns Rullgård
    aligned_stack
987 35fd8122 Nicolas George
    alsa_asoundlib_h
988 3f5b56e5 Måns Rullgård
    altivec_h
989 c9fdab0d François Revol
    arpa_inet_h
990 dffb41b9 Måns Rullgård
    attribute_may_alias
991 e7ea5e3d Måns Rullgård
    attribute_packed
992 6bd859d6 Måns Rullgård
    bswap
993 ecf97f22 Alex Beregszaszi
    closesocket
994 1ac9331a Måns Rullgård
    cmov
995 e16e49ac Ramiro Polla
    conio_h
996 c88f5d72 Måns Rullgård
    dcbzl
997 f8aa696f Diego Biurrun
    dev_bktr_ioctl_bt848_h
998
    dev_bktr_ioctl_meteor_h
999
    dev_ic_bt8xx_h
1000
    dev_video_meteor_ioctl_meteor_h
1001
    dev_video_bktr_ioctl_bt848_h
1002 18b67ae5 Måns Rullgård
    dlfcn_h
1003 c88f5d72 Måns Rullgård
    dlopen
1004 bc574408 Ramiro Polla
    dos_paths
1005 245626d0 Diego Biurrun
    ebp_available
1006
    ebx_available
1007 6b7c7703 Vitor Sessak
    exp2
1008
    exp2f
1009 c2a29455 Aurelien Jacobs
    fast_64bit
1010 669b5583 Måns Rullgård
    fast_clz
1011 7073e9fc Måns Rullgård
    fast_cmov
1012 534a2231 Måns Rullgård
    fcntl
1013 9d99cc5a Måns Rullgård
    fork
1014 84882df6 Martin Storsjö
    getaddrinfo
1015 da9e86f8 Roman Shaposhnik
    gethrtime
1016 fc5607f8 Reimar Döffinger
    GetProcessMemoryInfo
1017 4e68cb8a Roman Shaposhnik
    GetProcessTimes
1018 66be5b45 Ramiro Polla
    getrusage
1019 a49d3025 Måns Rullgård
    gnu_as
1020 fc5607f8 Reimar Döffinger
    struct_rusage_ru_maxrss
1021 2f0c136e Måns Rullgård
    ibm_asm
1022 2e1913b1 Måns Rullgård
    inet_aton
1023 61d251db Måns Rullgård
    inline_asm
1024 abfc8d05 Martin Storsjö
    isatty
1025 9f5ff83f Måns Rullgård
    ldbrx
1026 0b4a1821 Alessandro Sappia
    libdc1394_1
1027
    libdc1394_2
1028 a33cab3a Michael Kostylev
    llrint
1029 07876e25 Måns Rullgård
    llrintf
1030 d96cd429 Måns Rullgård
    local_aligned_16
1031
    local_aligned_8
1032 291fd18a Alex Converse
    log2
1033 6b7c7703 Vitor Sessak
    log2f
1034 85dd97ad Måns Rullgård
    loongson
1035 a33cab3a Michael Kostylev
    lrint
1036 c88f5d72 Måns Rullgård
    lrintf
1037 e4673692 Diego Biurrun
    lzo1x_999_compress
1038 f8aa696f Diego Biurrun
    machine_ioctl_bt848_h
1039
    machine_ioctl_meteor_h
1040 c88f5d72 Måns Rullgård
    malloc_h
1041
    memalign
1042 6ffa87d3 Ramiro Polla
    mkstemp
1043 b4e806b2 Matthieu Castet
    pld
1044 1f91cdce Ramiro Polla
    posix_memalign
1045 a33cab3a Michael Kostylev
    round
1046
    roundf
1047 c88f5d72 Måns Rullgård
    sdl
1048
    sdl_video_size
1049 b507ebd1 Ramiro Polla
    setmode
1050 72be9e73 Dave Yeo
    socklen_t
1051 deb29777 Måns Rullgård
    soundcard_h
1052 f8cda19e Luca Abeni
    poll_h
1053 0104b608 Måns Rullgård
    setrlimit
1054 87958234 Stefano Sabatini
    strerror_r
1055 47941088 Stefano Sabatini
    strtok_r
1056 c0018613 Martin Storsjö
    struct_addrinfo
1057 b4d68544 Martin Storsjö
    struct_ipv6_mreq
1058
    struct_sockaddr_in6
1059 3b2372bf Ronald S. Bultje
    struct_sockaddr_sa_len
1060 33a4dbdd Martin Storsjö
    struct_sockaddr_storage
1061 b462d132 Måns Rullgård
    symver
1062
    symver_gnu_asm
1063
    symver_asm_label
1064 b58412f1 Alexander Strange
    sys_mman_h
1065 b091aa44 Ramiro Polla
    sys_resource_h
1066 81644c2e Michael Kostylev
    sys_select_h
1067 deb29777 Måns Rullgård
    sys_soundcard_h
1068 1b6e8b73 Brad
    sys_videoio_h
1069 d3a4b4e0 Diego Biurrun
    ten_operands
1070 e16e49ac Ramiro Polla
    termios_h
1071 b265431e Måns Rullgård
    threads
1072 7b04b8a0 Michael Kostylev
    truncf
1073 ce742de2 Måns Rullgård
    vfp_args
1074 7c5bfe7a Ramiro Polla
    VirtualAlloc
1075 6ff3f3e7 Ramiro Polla
    winsock2_h
1076 cc078b5d Måns Rullgård
    xform_asm
1077 304d586d Loren Merritt
    yasm
1078 0cb78cef Diego Biurrun
"
1079 44161118 Måns Rullgård
1080 b6bb00b0 Måns Rullgård
# options emitted with CONFIG_ prefix but not available on command line
1081
CONFIG_EXTRA="
1082 dc4f5a1c Måns Rullgård
    avutil
1083 9cad0e4e Diego Biurrun
    gplv3
1084
    lgplv3
1085 b6bb00b0 Måns Rullgård
"
1086
1087 520cc7f1 Måns Rullgård
CMDLINE_SELECT="
1088 3f5b56e5 Måns Rullgård
    $ARCH_EXT_LIST
1089 520cc7f1 Måns Rullgård
    $CONFIG_LIST
1090 8eee7025 Diego Biurrun
    $THREADS_LIST
1091 c8a4ae00 Måns Rullgård
    asm
1092 db6107b6 Diego Biurrun
    cross_compile
1093 520cc7f1 Måns Rullgård
    debug
1094
    extra_warnings
1095 8c6afa4d Diego Biurrun
    logging
1096 d2bbb2f7 Diego Biurrun
    optimizations
1097 87a0fb62 Diego Biurrun
    stripping
1098 7595a5e4 Måns Rullgård
    yasm
1099 520cc7f1 Måns Rullgård
"
1100 426be5dc Diego Biurrun
1101
PATHS_LIST='
1102 d156bede Diego Biurrun
    bindir
1103 14a8acf1 Måns Rullgård
    datadir
1104 26759c44 Måns Rullgård
    incdir
1105
    libdir
1106
    mandir
1107
    prefix
1108
    shlibdir
1109 426be5dc Diego Biurrun
'
1110
1111
CMDLINE_SET="
1112
    $PATHS_LIST
1113 121d78d0 Carl Eugen Hoyos
    ar
1114 426be5dc Diego Biurrun
    arch
1115 313c46a6 Måns Rullgård
    as
1116 426be5dc Diego Biurrun
    build_suffix
1117
    cc
1118
    cpu
1119
    cross_prefix
1120 50567afa Måns Rullgård
    dep_cc
1121 ac63af34 Diego Biurrun
    extra_version
1122 9da6609f Måns Rullgård
    host_cc
1123
    host_cflags
1124
    host_ldflags
1125
    host_libs
1126 82bb3329 Måns Rullgård
    host_os
1127 684b28e0 Måns Rullgård
    ld
1128 426be5dc Diego Biurrun
    logfile
1129 4ae40685 Måns Rullgård
    malloc_prefix
1130 89641463 Reimar Döffinger
    nm
1131 2fad0977 Måns Rullgård
    samples
1132 26759c44 Måns Rullgård
    source_path
1133 4f837398 Måns Rullgård
    strip
1134 c5200f17 Måns Rullgård
    sysinclude
1135
    sysroot
1136 a7ada2ba Måns Rullgård
    target_exec
1137 26759c44 Måns Rullgård
    target_os
1138 a7ada2ba Måns Rullgård
    target_path
1139 426be5dc Diego Biurrun
"
1140 520cc7f1 Måns Rullgård
1141 89f2932b Måns Rullgård
CMDLINE_APPEND="
1142
    extra_cflags
1143
"
1144
1145 912f3148 Diego Biurrun
# code dependency declarations
1146
1147 9eeed841 Måns Rullgård
# architecture extensions
1148 808fa33c Måns Rullgård
1149 a2fc0f6a Måns Rullgård
armv5te_deps="arm"
1150
armv6_deps="arm"
1151 ab5cb084 Måns Rullgård
armv6t2_deps="arm"
1152 a2fc0f6a Måns Rullgård
armvfp_deps="arm"
1153
iwmmxt_deps="arm"
1154 808fa33c Måns Rullgård
neon_deps="arm"
1155
1156 e241ba14 Diego Biurrun
mmi_deps="mips"
1157 808fa33c Måns Rullgård
1158
altivec_deps="ppc"
1159
ppc4xx_deps="ppc"
1160
1161
vis_deps="sparc"
1162
1163 7f8c3d1f Måns Rullgård
x86_64_suggest="cmov fast_cmov"
1164 808fa33c Måns Rullgård
amd3dnow_deps="mmx"
1165
amd3dnowext_deps="amd3dnow"
1166 9eeed841 Måns Rullgård
mmx_deps="x86"
1167 75aa95a6 Diego Biurrun
mmx2_deps="mmx"
1168
sse_deps="mmx"
1169
ssse3_deps="sse"
1170 9eeed841 Måns Rullgård
1171 59782b82 Måns Rullgård
aligned_stack_if_any="ppc x86"
1172 e939cedd Måns Rullgård
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1173 669b5583 Måns Rullgård
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1174 e939cedd Måns Rullgård
fast_unaligned_if_any="armv6 ppc x86"
1175 669b5583 Måns Rullgård
1176 89e053f8 Måns Rullgård
need_memalign="altivec neon sse"
1177 6fec122a Måns Rullgård
inline_asm_deps="!tms470"
1178 89e053f8 Måns Rullgård
1179 b462d132 Måns Rullgård
symver_if_any="symver_asm_label symver_gnu_asm"
1180
1181 26fbcc85 Måns Rullgård
# subsystems
1182 dc609252 Vitor Sessak
dct_select="rdft"
1183 26fbcc85 Måns Rullgård
mdct_select="fft"
1184
rdft_select="fft"
1185
1186 5666fd73 Gwenole Beauchesne
# decoders / encoders / hardware accelerators
1187 3cac899a Alex Converse
aac_decoder_select="mdct rdft"
1188 26fbcc85 Måns Rullgård
aac_encoder_select="mdct"
1189
ac3_decoder_select="mdct ac3_parser"
1190 f4d608e3 Justin Ruggles
alac_encoder_select="lpc"
1191 b781cc12 Måns Rullgård
amrnb_decoder_select="lsp"
1192 084cbbaa Måns Rullgård
atrac1_decoder_select="mdct"
1193 26fbcc85 Måns Rullgård
atrac3_decoder_select="mdct"
1194
binkaudio_dct_decoder_select="mdct rdft dct"
1195
binkaudio_rdft_decoder_select="mdct rdft"
1196 4f034993 Måns Rullgård
cavs_decoder_select="golomb"
1197 26fbcc85 Måns Rullgård
cook_decoder_select="mdct"
1198 2eef7c62 Aurelien Jacobs
cscd_decoder_suggest="zlib"
1199 26fbcc85 Måns Rullgård
dca_decoder_select="mdct"
1200 e8ed9b7a Diego Biurrun
dnxhd_encoder_select="aandct"
1201 2eef7c62 Aurelien Jacobs
dxa_decoder_select="zlib"
1202 baf91bb9 Diego Biurrun
eac3_decoder_select="ac3_decoder"
1203 84c04e25 Aurelien Jacobs
eamad_decoder_select="aandct"
1204 e8ed9b7a Diego Biurrun
eatgq_decoder_select="aandct"
1205 d52b39c7 Aurelien Jacobs
eatqi_decoder_select="aandct"
1206 4f034993 Måns Rullgård
ffv1_decoder_select="golomb"
1207
flac_decoder_select="golomb"
1208 f4d608e3 Justin Ruggles
flac_encoder_select="golomb lpc"
1209 2eef7c62 Aurelien Jacobs
flashsv_decoder_select="zlib"
1210
flashsv_encoder_select="zlib"
1211 4414137e Diego Biurrun
flv_decoder_select="h263_decoder"
1212 4d4b4bd1 Diego Biurrun
flv_encoder_select="h263_encoder"
1213 3447f12d Diego Biurrun
fraps_decoder_select="huffman"
1214 e8ed9b7a Diego Biurrun
h261_encoder_select="aandct"
1215 7f647ae0 Diego Biurrun
h263_decoder_select="h263_parser"
1216 e8ed9b7a Diego Biurrun
h263_encoder_select="aandct"
1217 95a61cfc Diego Biurrun
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1218 4414137e Diego Biurrun
h263i_decoder_select="h263_decoder"
1219 fe629c2d Diego Biurrun
h263p_encoder_select="h263_encoder"
1220 4a384de5 Jason Garrett-Glaser
h264_decoder_select="golomb h264dsp h264pred"
1221 92c6a099 Laurent Aimar
h264_dxva2_hwaccel_deps="dxva2api_h"
1222
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1223 17492d5e Diego Biurrun
h264_vaapi_hwaccel_select="vaapi"
1224 95a61cfc Diego Biurrun
h264_vdpau_decoder_select="vdpau h264_decoder"
1225 47a158cb Måns Rullgård
imc_decoder_select="fft mdct"
1226 4f034993 Måns Rullgård
jpegls_decoder_select="golomb"
1227
jpegls_encoder_select="golomb"
1228 e8ed9b7a Diego Biurrun
ljpeg_encoder_select="aandct"
1229 4f034993 Måns Rullgård
loco_decoder_select="golomb"
1230 e8ed9b7a Diego Biurrun
mjpeg_encoder_select="aandct"
1231 2cca233b Diego Biurrun
mlp_decoder_select="mlp_parser"
1232 d9da8f10 Aurelien Jacobs
mp1float_decoder_select="dct"
1233
mp2float_decoder_select="dct"
1234
mp3adufloat_decoder_select="dct"
1235
mp3float_decoder_select="dct"
1236
mp3on4float_decoder_select="dct"
1237 e8ed9b7a Diego Biurrun
mpeg1video_encoder_select="aandct"
1238
mpeg2video_encoder_select="aandct"
1239 4414137e Diego Biurrun
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1240 c37de5e1 Diego Biurrun
mpeg4_encoder_select="h263_encoder"
1241 95a61cfc Diego Biurrun
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1242
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1243 164aab02 Laurent Aimar
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1244
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1245 95a61cfc Diego Biurrun
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1246
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1247 70e0c871 NVIDIA Corporation
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1248 8f6f050a Diego Biurrun
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1249 4d8eecf4 Diego Biurrun
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1250 4414137e Diego Biurrun
msmpeg4v1_decoder_select="h263_decoder"
1251 4e169d89 Diego Biurrun
msmpeg4v1_encoder_select="h263_encoder"
1252 4414137e Diego Biurrun
msmpeg4v2_decoder_select="h263_decoder"
1253 4e169d89 Diego Biurrun
msmpeg4v2_encoder_select="h263_encoder"
1254 4414137e Diego Biurrun
msmpeg4v3_decoder_select="h263_decoder"
1255 4e169d89 Diego Biurrun
msmpeg4v3_encoder_select="h263_encoder"
1256 26fbcc85 Måns Rullgård
nellymoser_decoder_select="mdct"
1257
nellymoser_encoder_select="mdct"
1258 2eef7c62 Aurelien Jacobs
png_decoder_select="zlib"
1259
png_encoder_select="zlib"
1260 b781cc12 Måns Rullgård
qcelp_decoder_select="lsp"
1261 26fbcc85 Måns Rullgård
qdm2_decoder_select="mdct rdft"
1262 31ed3f1f Francesco Lavra
ra_144_encoder_select="lpc"
1263 a8beb22f Diego Biurrun
rv10_decoder_select="h263_decoder"
1264 b2bf38b4 Diego Biurrun
rv10_encoder_select="h263_encoder"
1265 a8beb22f Diego Biurrun
rv20_decoder_select="h263_decoder"
1266 b2bf38b4 Diego Biurrun
rv20_encoder_select="h263_encoder"
1267 4a384de5 Jason Garrett-Glaser
rv30_decoder_select="golomb h264pred"
1268
rv40_decoder_select="golomb h264pred"
1269 4f034993 Måns Rullgård
shorten_decoder_select="golomb"
1270 b781cc12 Måns Rullgård
sipr_decoder_select="lsp"
1271 05aec7bb Måns Rullgård
snow_decoder_select="dwt"
1272
snow_encoder_select="aandct dwt"
1273 4f034993 Måns Rullgård
sonic_decoder_select="golomb"
1274
sonic_encoder_select="golomb"
1275
sonic_ls_encoder_select="golomb"
1276 19ecfb8a Daniel Verkamp
svq1_encoder_select="aandct"
1277 4a384de5 Jason Garrett-Glaser
svq3_decoder_select="golomb h264dsp h264pred"
1278 bee2eac5 Baptiste Coudurier
svq3_decoder_suggest="zlib"
1279 4eef77c1 Diego Biurrun
theora_decoder_select="vp3_decoder"
1280 2eef7c62 Aurelien Jacobs
tiff_decoder_suggest="zlib"
1281
tiff_encoder_suggest="zlib"
1282 aec09a00 Diego Biurrun
truehd_decoder_select="mlp_decoder"
1283 2eef7c62 Aurelien Jacobs
tscc_decoder_select="zlib"
1284 b781cc12 Måns Rullgård
twinvq_decoder_select="mdct lsp"
1285 f95bfab0 Diego Biurrun
vc1_decoder_select="h263_decoder"
1286 9104cd51 Ramiro Polla
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1287 f0f86627 Laurent Aimar
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1288 95a61cfc Diego Biurrun
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1289
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1290 26fbcc85 Måns Rullgård
vorbis_decoder_select="mdct"
1291
vorbis_encoder_select="mdct"
1292 3447f12d Diego Biurrun
vp6_decoder_select="huffman"
1293 e82dc4c9 Diego Biurrun
vp6a_decoder_select="vp6_decoder"
1294
vp6f_decoder_select="vp6_decoder"
1295 4a384de5 Jason Garrett-Glaser
vp8_decoder_select="h264pred"
1296 084cbbaa Måns Rullgård
wmapro_decoder_select="mdct"
1297 26fbcc85 Måns Rullgård
wmav1_decoder_select="mdct"
1298
wmav1_encoder_select="mdct"
1299
wmav2_decoder_select="mdct"
1300
wmav2_encoder_select="mdct"
1301 df0a6d0d Aurelien Jacobs
wmavoice_decoder_select="lsp rdft dct mdct"
1302 f95bfab0 Diego Biurrun
wmv1_decoder_select="h263_decoder"
1303 665507aa Diego Biurrun
wmv1_encoder_select="h263_encoder"
1304 f95bfab0 Diego Biurrun
wmv2_decoder_select="h263_decoder"
1305 1746e2a9 Diego Biurrun
wmv2_encoder_select="h263_encoder"
1306 015f8ee0 Diego Biurrun
wmv3_decoder_select="vc1_decoder"
1307 f0f86627 Laurent Aimar
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1308 015f8ee0 Diego Biurrun
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1309
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1310 2eef7c62 Aurelien Jacobs
zlib_decoder_select="zlib"
1311
zlib_encoder_select="zlib"
1312
zmbv_decoder_select="zlib"
1313
zmbv_encoder_select="zlib"
1314 30fd06be Måns Rullgård
1315 0afab17e Måns Rullgård
vaapi_deps="va_va_h"
1316 c89c96e9 Måns Rullgård
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1317
1318 28b80940 Diego Biurrun
# parsers
1319 4a384de5 Jason Garrett-Glaser
h264_parser_select="golomb h264dsp h264pred"
1320 28b80940 Diego Biurrun
1321 912f3148 Diego Biurrun
# external libraries
1322 1b71f045 Måns Rullgård
libdirac_decoder_deps="libdirac !libschroedinger"
1323 690bfceb Anuradha Suraparaju
libdirac_encoder_deps="libdirac"
1324 c9171a83 Diego Biurrun
libfaac_encoder_deps="libfaac"
1325 299c77d5 Måns Rullgård
libgsm_decoder_deps="libgsm"
1326
libgsm_encoder_deps="libgsm"
1327 8ffed8d8 Måns Rullgård
libgsm_ms_decoder_deps="libgsm"
1328
libgsm_ms_encoder_deps="libgsm"
1329 1cc60c47 Diego Biurrun
libmp3lame_encoder_deps="libmp3lame"
1330 0b175caa Diego Biurrun
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1331
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1332
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1333 9a77d59a Jai Menon
libopenjpeg_decoder_deps="libopenjpeg"
1334 f7cd9eed Anuradha Suraparaju
libschroedinger_decoder_deps="libschroedinger"
1335
libschroedinger_encoder_deps="libschroedinger"
1336 ae14f311 David Conrad
libspeex_decoder_deps="libspeex"
1337 150d2772 Diego Biurrun
libtheora_encoder_deps="libtheora"
1338 b0caf888 Diego Biurrun
libvorbis_encoder_deps="libvorbis"
1339 8299a7f8 James Zern
libvpx_decoder_deps="libvpx"
1340 ee0e9146 James Zern
libvpx_encoder_deps="libvpx"
1341 1cc60c47 Diego Biurrun
libx264_encoder_deps="libx264"
1342 de295976 Stefan Gehrer
libxavs_encoder_deps="libxavs"
1343 1cc60c47 Diego Biurrun
libxvid_encoder_deps="libxvid"
1344 30fd06be Måns Rullgård
1345 912f3148 Diego Biurrun
# demuxers / muxers
1346 03a76ba9 Diego Biurrun
ac3_demuxer_deps="ac3_parser"
1347 647c2356 Diego Biurrun
asf_stream_muxer_select="asf_muxer"
1348 4e622dea Stefano Sabatini
avisynth_demuxer_deps="avisynth"
1349
dirac_demuxer_deps="dirac_parser"
1350 5b423887 Diego Biurrun
eac3_demuxer_select="ac3_parser"
1351 647c2356 Diego Biurrun
ipod_muxer_select="mov_muxer"
1352 4e622dea Stefano Sabatini
libnut_demuxer_deps="libnut"
1353
libnut_muxer_deps="libnut"
1354 647c2356 Diego Biurrun
matroska_audio_muxer_select="matroska_muxer"
1355 4e622dea Stefano Sabatini
matroska_demuxer_suggest="zlib bzlib"
1356
mov_demuxer_suggest="zlib"
1357
mp3_demuxer_deps="mpegaudio_parser"
1358 647c2356 Diego Biurrun
mp4_muxer_select="mov_muxer"
1359
mpegtsraw_demuxer_select="mpegts_demuxer"
1360
mxf_d10_muxer_select="mxf_muxer"
1361 24ca518b David Conrad
ogg_demuxer_select="golomb"
1362 647c2356 Diego Biurrun
psp_muxer_select="mov_muxer"
1363 4e622dea Stefano Sabatini
rtsp_demuxer_deps="sdp_demuxer"
1364 6f5a3d0a Martin Storsjö
rtsp_muxer_deps="sdp_demuxer"
1365
rtsp_muxer_select="rtp_muxer"
1366 4e622dea Stefano Sabatini
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1367 0298cc04 Martin Storsjö
sdp_demuxer_select="asf_demuxer rm_demuxer"
1368 f1e94694 Diego Biurrun
spdif_muxer_select="aac_parser"
1369 647c2356 Diego Biurrun
tg2_muxer_select="mov_muxer"
1370
tgp_muxer_select="mov_muxer"
1371 6bdaa5f4 Diego Biurrun
w64_demuxer_deps="wav_demuxer"
1372 4e622dea Stefano Sabatini
1373
# indevs / outdevs
1374 38e54a75 Stefano Sabatini
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1375
alsa_outdev_deps="alsa_asoundlib_h"
1376
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1377
dv1394_indev_deps="dv1394 dv_demuxer"
1378
jack_indev_deps="jack_jack_h"
1379
libdc1394_indev_deps="libdc1394"
1380
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1381
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1382
v4l_indev_deps="linux_videodev_h"
1383
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1384 ec1ee802 Ramiro Polla
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1385 a1b3c5a3 kemuri
vfwcap_indev_extralibs="-lavicap32"
1386 38e54a75 Stefano Sabatini
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1387 781c1aa6 Roxis
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1388 30fd06be Måns Rullgård
1389 912f3148 Diego Biurrun
# protocols
1390 3fff6382 Andreas Öman
gopher_protocol_deps="network"
1391 c08fb000 Alex Beregszaszi
http_protocol_deps="network"
1392 279a0c97 Peter Ross
http_protocol_select="tcp_protocol"
1393 c60a2d70 Måns Rullgård
mmsh_protocol_select="http_protocol"
1394 b4cf3f6c Måns Rullgård
mmst_protocol_deps="network"
1395 deeb7012 Martin Storsjö
rtmp_protocol_select="tcp_protocol"
1396
rtp_protocol_select="udp_protocol"
1397 c08fb000 Alex Beregszaszi
tcp_protocol_deps="network"
1398
udp_protocol_deps="network"
1399
1400 6ebf0bfc Stefano Sabatini
# filters
1401 13fabd7a Stefano Sabatini
blackframe_filter_deps="gpl"
1402 2e5ff4d0 Stefano Sabatini
frei0r_filter_deps="frei0r dlopen strtok_r"
1403 6ebf0bfc Stefano Sabatini
ocv_smooth_filter_deps="libopencv"
1404 acbac567 Michael Niedermayer
yadif_filter_deps="gpl"
1405 6ebf0bfc Stefano Sabatini
1406 5a0f7131 Måns Rullgård
# libraries
1407
avdevice_deps="avcodec avformat"
1408
avformat_deps="avcodec"
1409 f7679c54 Vitor Sessak
1410 912f3148 Diego Biurrun
# programs
1411 5a0f7131 Måns Rullgård
ffmpeg_deps="avcodec avformat swscale"
1412 21ae6790 Peter Ross
ffmpeg_select="buffer_filter"
1413 5a0f7131 Måns Rullgård
ffplay_deps="avcodec avformat swscale sdl"
1414 43689902 Måns Rullgård
ffplay_select="rdft"
1415 336ce917 Stefano Sabatini
ffprobe_deps="avcodec avformat"
1416 5a0f7131 Måns Rullgård
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1417 4ec45764 Ramiro Polla
ffserver_extralibs='$ldl'
1418 a2830dca Måns Rullgård
1419 c73f65d9 Måns Rullgård
doc_deps="texi2html"
1420 912f3148 Diego Biurrun
1421 57442411 Måns Rullgård
# tests
1422
1423
test_deps(){
1424
    suf1=$1
1425
    suf2=$2
1426
    shift 2
1427
    for v; do
1428
        dep=${v%=*}
1429
        tests=${v#*=}
1430
        for name in ${tests}; do
1431
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1432
        done
1433
    done
1434
}
1435
1436 9c261f83 Stefano Sabatini
set_ne_test_deps(){
1437
    eval ${1}_be_test_deps="bigendian"
1438
    eval ${1}_le_test_deps="!bigendian"
1439
}
1440
1441 57442411 Måns Rullgård
test_deps _encoder _decoder                                             \
1442
    ac3                                                                 \
1443
    adpcm_g726=g726                                                     \
1444
    adpcm_ima_qt                                                        \
1445
    adpcm_ima_wav                                                       \
1446
    adpcm_ms                                                            \
1447
    adpcm_swf                                                           \
1448
    adpcm_yamaha=adpcm_yam                                              \
1449
    alac                                                                \
1450
    asv1                                                                \
1451
    asv2                                                                \
1452
    bmp                                                                 \
1453 a7638957 Måns Rullgård
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1454 57442411 Måns Rullgård
    dvvideo="dv dv50"                                                   \
1455
    ffv1                                                                \
1456
    flac                                                                \
1457
    flashsv                                                             \
1458
    flv                                                                 \
1459
    gif                                                                 \
1460
    h261                                                                \
1461
    h263="h263 h263p"                                                   \
1462
    huffyuv                                                             \
1463
    jpegls                                                              \
1464
    mjpeg="jpg mjpeg ljpeg"                                             \
1465
    mp2                                                                 \
1466
    mpeg1video="mpeg mpeg1b"                                            \
1467
    mpeg2video="mpeg2 mpeg2thread"                                      \
1468
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1469 c0b16605 Måns Rullgård
    msmpeg4v3=msmpeg4                                                   \
1470 57442411 Måns Rullgård
    msmpeg4v2                                                           \
1471
    pbm=pbmpipe                                                         \
1472
    pcx                                                                 \
1473
    pgm="pgm pgmpipe"                                                   \
1474
    ppm="ppm ppmpipe"                                                   \
1475
    rawvideo="rgb yuv"                                                  \
1476
    roq                                                                 \
1477
    rv10                                                                \
1478
    rv20                                                                \
1479
    sgi                                                                 \
1480
    snow="snow snowll"                                                  \
1481
    svq1                                                                \
1482
    targa=tga                                                           \
1483
    tiff                                                                \
1484
    wmav1                                                               \
1485
    wmav2                                                               \
1486
    wmv1                                                                \
1487
    wmv2                                                                \
1488
1489
test_deps _muxer _demuxer                                               \
1490
    aiff                                                                \
1491
    pcm_alaw=alaw                                                       \
1492
    asf                                                                 \
1493
    au                                                                  \
1494
    avi                                                                 \
1495
    dv=dv_fmt                                                           \
1496
    ffm                                                                 \
1497
    flv=flv_fmt                                                         \
1498
    gxf                                                                 \
1499
    matroska=mkv                                                        \
1500
    mmf                                                                 \
1501
    mov                                                                 \
1502
    pcm_mulaw=mulaw                                                     \
1503
    mxf                                                                 \
1504
    nut                                                                 \
1505
    ogg                                                                 \
1506
    rawvideo=pixfmt                                                     \
1507
    rm                                                                  \
1508
    swf                                                                 \
1509
    mpegts=ts                                                           \
1510
    voc                                                                 \
1511
    wav                                                                 \
1512
    yuv4mpegpipe=yuv4mpeg                                               \
1513
1514
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1515 9c261f83 Stefano Sabatini
1516
set_ne_test_deps pixdesc
1517 213a4cbb Stefano Sabatini
set_ne_test_deps pixfmts_crop
1518 a1e171df Stefano Sabatini
set_ne_test_deps pixfmts_hflip
1519 213a4cbb Stefano Sabatini
set_ne_test_deps pixfmts_null
1520
set_ne_test_deps pixfmts_pad
1521
set_ne_test_deps pixfmts_scale
1522
set_ne_test_deps pixfmts_vflip
1523 57442411 Måns Rullgård
1524 de6d9b64 Fabrice Bellard
# default parameters
1525 8a608357 Måns Rullgård
1526 19bd477d Stefano Sabatini
logfile="config.log"
1527 8a608357 Måns Rullgård
1528
# installation paths
1529 c9d19248 Måns Rullgård
prefix_default="/usr/local"
1530
bindir_default='${prefix}/bin'
1531 14a8acf1 Måns Rullgård
datadir_default='${prefix}/share/ffmpeg'
1532 c9d19248 Måns Rullgård
incdir_default='${prefix}/include'
1533
libdir_default='${prefix}/lib'
1534
mandir_default='${prefix}/share/man'
1535
shlibdir_default="$libdir_default"
1536 8a608357 Måns Rullgård
1537
# toolchain
1538 121d78d0 Carl Eugen Hoyos
ar_default="ar"
1539 13c7df3d Måns Rullgård
cc_default="gcc"
1540 a3d7c197 Diego Biurrun
cc_version=\"unknown\"
1541 9da6609f Måns Rullgård
host_cc_default="gcc"
1542 11e6d03a Diego Biurrun
ln_s="ln -sf"
1543 89641463 Reimar Döffinger
nm_default="nm"
1544 11e6d03a Diego Biurrun
objformat="elf"
1545 be7109c1 Michael Niedermayer
ranlib="ranlib"
1546 4f837398 Måns Rullgård
strip_default="strip"
1547 11e6d03a Diego Biurrun
yasmexe="yasm"
1548 301ab19d Måns Rullgård
nogas=":"
1549 8a608357 Måns Rullgård
1550 8182dc34 Måns Rullgård
nm_opts='-g'
1551
1552 8a608357 Måns Rullgård
# machine
1553 8d4c00ed Måns Rullgård
arch_default=$(uname -m)
1554 38d0a8aa Guillaume Poirier
cpu="generic"
1555 8a608357 Måns Rullgård
1556
# OS
1557 8d4c00ed Måns Rullgård
target_os_default=$(tolower $(uname -s))
1558
host_os=$target_os_default
1559 8a608357 Måns Rullgård
1560
# configurable options
1561 5a0f7131 Måns Rullgård
enable avcodec
1562 aac6ca69 Stefano Sabatini
enable avcore
1563 5a0f7131 Måns Rullgård
enable avdevice
1564 cccc039f Michael Niedermayer
enable avfilter
1565 5a0f7131 Måns Rullgård
enable avformat
1566 dc4f5a1c Måns Rullgård
enable avutil
1567 c8a4ae00 Måns Rullgård
enable asm
1568 497237c7 Ramiro Polla
enable debug
1569 c73f65d9 Måns Rullgård
enable doc
1570 aa033b1e Måns Rullgård
enable fastdiv
1571 497237c7 Ramiro Polla
enable ffmpeg
1572
enable ffplay
1573 336ce917 Stefano Sabatini
enable ffprobe
1574 497237c7 Ramiro Polla
enable ffserver
1575
enable mpegaudio_hp
1576
enable network
1577 8400d6b8 Diego Biurrun
enable optimizations
1578 497237c7 Ramiro Polla
enable protocols
1579 530dc538 Diego Biurrun
enable static
1580 87a0fb62 Diego Biurrun
enable stripping
1581 5a0f7131 Måns Rullgård
enable swscale
1582 a9ddb5b1 Cédric Schieli
enable swscale_alpha
1583 8a608357 Måns Rullgård
1584
# build settings
1585 9987769a Måns Rullgård
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1586 c536cb09 Diego Biurrun
FFSERVERLDFLAGS=-Wl,-E
1587 f3ec2d46 Slavik Gnatenko
LIBPREF="lib"
1588
LIBSUF=".a"
1589 c5f14466 Ramiro Polla
FULLNAME='$(NAME)$(BUILDSUF)'
1590
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1591 f3ec2d46 Slavik Gnatenko
SLIBPREF="lib"
1592
SLIBSUF=".so"
1593 c5f14466 Ramiro Polla
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1594 b29bddab Diego Biurrun
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1595
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1596 6cfac0e9 Måns Rullgård
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1597 ef0bc4c9 François Revol
1598 7e6c86e6 Måns Rullgård
CC_O='-o $@'
1599
1600 f0125de9 Måns Rullgård
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1601 9da6609f Måns Rullgård
host_libs='-lm'
1602
1603 9b861379 Måns Rullgård
target_path='$(CURDIR)'
1604 a7ada2ba Måns Rullgård
1605 a158446b Måns Rullgård
# since the object filename is not given with the -MM flag, the compiler
1606
# is only able to print the basename, and we must add the path ourselves
1607 c1c3933a Måns Rullgård
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1608 d8059267 Måns Rullgård
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1609 315c741d Diego Biurrun
1610 c597172e Måns Rullgård
# find source path
1611 5e622c40 Diego Biurrun
source_path="$(dirname "$0")"
1612 497237c7 Ramiro Polla
enable source_path_used
1613 24524f36 Måns Rullgård
if test -f configure; then
1614 5e622c40 Diego Biurrun
    source_path="$(pwd)"
1615 497237c7 Ramiro Polla
    disable source_path_used
1616 c597172e Måns Rullgård
else
1617 5e622c40 Diego Biurrun
    source_path="$(cd "$source_path"; pwd)"
1618 c597172e Måns Rullgård
    echo "$source_path" | grep -q '[[:blank:]]' &&
1619 7483e694 Diego Biurrun
        die "Out of tree builds are impossible with whitespace in source path."
1620 337cee68 Matthieu Castet
    test -e "$source_path/config.h" &&
1621
        die "Out of tree builds are impossible with config.h in source dir."
1622 c597172e Måns Rullgård
fi
1623
1624 13cbe2c0 Måns Rullgård
for v in "$@"; do
1625 b04251c5 Måns Rullgård
    r=${v#*=}
1626
    l=${v%"$r"}
1627
    r=$(sh_quote "$r")
1628 13cbe2c0 Måns Rullgård
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1629
done
1630 c597172e Måns Rullgård
1631 73ef8980 Måns Rullgård
find_things(){
1632
    thing=$1
1633
    pattern=$2
1634
    file=$source_path/$3
1635 932ccf39 Måns Rullgård
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1636 73ef8980 Måns Rullgård
}
1637
1638
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1639
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1640 5666fd73 Gwenole Beauchesne
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1641 73ef8980 Måns Rullgård
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1642
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1643
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1644
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1645 38e54a75 Stefano Sabatini
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1646
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1647 73ef8980 Måns Rullgård
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1648 81124ba0 Vitor Sessak
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1649 c597172e Måns Rullgård
1650 57442411 Måns Rullgård
find_tests(){
1651 b9d5f1b7 Måns Rullgård
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1652 57442411 Måns Rullgård
}
1653
1654
ACODEC_TESTS=$(find_tests acodec)
1655
VCODEC_TESTS=$(find_tests vsynth1)
1656
LAVF_TESTS=$(find_tests lavf)
1657 48c28162 Måns Rullgård
LAVFI_TESTS=$(find_tests lavfi)
1658 b9d5f1b7 Måns Rullgård
SEEK_TESTS=$(find_tests seek seek_)
1659 57442411 Måns Rullgård
1660 40fe5019 Måns Rullgård
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1661
1662 8469ae22 Måns Rullgård
for n in $COMPONENT_LIST; do
1663
    v=$(toupper ${n%s})_LIST
1664
    eval enable \$$v
1665
    eval ${n}_if_any="\$$v"
1666
done
1667
1668 b9d5f1b7 Måns Rullgård
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1669 c597172e Måns Rullgård
1670
die_unknown(){
1671
    echo "Unknown option \"$1\"."
1672
    echo "See $0 --help for available options."
1673
    exit 1
1674
}
1675
1676 794f8e97 Panagiotis Issaris
show_list() {
1677 bf0c4afa Ramiro Polla
    suffix=_$1
1678
    shift
1679 2b444ea7 Måns Rullgård
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1680 794f8e97 Panagiotis Issaris
    exit 0
1681
}
1682
1683 c597172e Måns Rullgård
for opt do
1684 7483e694 Diego Biurrun
    optval="${opt#*=}"
1685
    case "$opt" in
1686 0f010b2f Diego Biurrun
    --extra-ldflags=*) add_ldflags $optval
1687 7483e694 Diego Biurrun
    ;;
1688 0f010b2f Diego Biurrun
    --extra-libs=*) add_extralibs $optval
1689 7483e694 Diego Biurrun
    ;;
1690 8fb1cb58 Diego Biurrun
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1691 9aa8ed9d Panagiotis Issaris
    ;;
1692 40bcf4c7 Benjamin Larsson
    --enable-debug=*) debuglevel="$optval"
1693
    ;;
1694 36e2dea0 Måns Rullgård
    --disable-everything)
1695 1b15dc3c Måns Rullgård
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1696 36e2dea0 Måns Rullgård
    ;;
1697 7483e694 Diego Biurrun
    --enable-*=*|--disable-*=*)
1698 8b93ddc3 Måns Rullgård
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1699 be8f2501 Måns Rullgård
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1700
    eval list=\$$(toupper $thing)_LIST
1701 8b93ddc3 Måns Rullgård
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1702
    $action $(filter "$name" $list)
1703 7483e694 Diego Biurrun
    ;;
1704
    --enable-?*|--disable-?*)
1705 5e622c40 Diego Biurrun
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1706 e3773a55 Måns Rullgård
    if is_in $option $COMPONENT_LIST; then
1707 fed5d54b Måns Rullgård
        test $action = disable && action=unset
1708 e3773a55 Måns Rullgård
        eval $action \$$(toupper ${option%s})_LIST
1709
    elif is_in $option $CMDLINE_SELECT; then
1710
        $action $option
1711
    else
1712
        die_unknown $opt
1713
    fi
1714 7483e694 Diego Biurrun
    ;;
1715
    --list-*)
1716
        NAME="${opt#--list-}"
1717
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1718
        NAME=${NAME%s}
1719
        eval show_list $NAME \$$(toupper $NAME)_LIST
1720
    ;;
1721
    --help|-h) show_help
1722
    ;;
1723
    *)
1724 884a36a7 Måns Rullgård
    optname="${opt%%=*}"
1725 26759c44 Måns Rullgård
    optname="${optname#--}"
1726
    optname=$(echo "$optname" | sed 's/-/_/g')
1727 89f2932b Måns Rullgård
    if is_in $optname $CMDLINE_SET; then
1728
        eval $optname='$optval'
1729
    elif is_in $optname $CMDLINE_APPEND; then
1730
        append $optname "$optval"
1731
    else
1732
         die_unknown $opt
1733
    fi
1734 7483e694 Diego Biurrun
    ;;
1735
    esac
1736 c597172e Måns Rullgård
done
1737
1738 bcea99bb Måns Rullgård
disabled logging && logfile=/dev/null
1739
1740 13cbe2c0 Måns Rullgård
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1741 bcea99bb Måns Rullgård
set >> $logfile
1742
1743 9da6609f Måns Rullgård
test -n "$cross_prefix" && enable cross_compile
1744
1745 8d4c00ed Måns Rullgård
if enabled cross_compile; then
1746
    test -n "$arch" && test -n "$target_os" ||
1747
        die "Must specify target arch and OS when cross-compiling"
1748
fi
1749
1750
set_default arch target_os
1751
1752 121d78d0 Carl Eugen Hoyos
ar_default="${cross_prefix}${ar_default}"
1753 11e6d03a Diego Biurrun
cc_default="${cross_prefix}${cc_default}"
1754 20e0ed95 Måns Rullgård
nm_default="${cross_prefix}${nm_default}"
1755 adb2b908 Ramiro Polla
ranlib="${cross_prefix}${ranlib}"
1756 4f837398 Måns Rullgård
strip_default="${cross_prefix}${strip_default}"
1757 adb2b908 Ramiro Polla
1758 c5200f17 Måns Rullgård
sysinclude_default="${sysroot}/usr/include"
1759
1760 4f837398 Måns Rullgård
set_default cc nm strip sysinclude
1761 9da6609f Måns Rullgård
enabled cross_compile || host_cc_default=$cc
1762
set_default host_cc
1763 13c7df3d Måns Rullgård
1764 82bb3329 Måns Rullgård
exesuf() {
1765
    case $1 in
1766
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1767
    esac
1768
}
1769
1770
EXESUF=$(exesuf $target_os)
1771
HOSTEXESUF=$(exesuf $host_os)
1772 c0f5b7f1 Måns Rullgård
1773 e4e69e0b Måns Rullgård
# set temporary file name
1774 a49d42c2 Måns Rullgård
: ${TMPDIR:=$TEMPDIR}
1775 c51fafa1 Måns Rullgård
: ${TMPDIR:=$TMP}
1776 a49d42c2 Måns Rullgård
: ${TMPDIR:=/tmp}
1777 e4e69e0b Måns Rullgård
1778 54460a83 Måns Rullgård
if ! check_cmd type mktemp; then
1779
    # simple replacement for missing mktemp
1780
    # NOT SAFE FOR GENERAL USE
1781
    mktemp(){
1782
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1783
    }
1784
fi
1785
1786
tmpfile(){
1787
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1788
        (set -C; exec > $tmp) 2>/dev/null ||
1789 f7ba16a7 Reimar Döffinger
        die "Unable to create temporary file in $TMPDIR."
1790 54460a83 Måns Rullgård
    append TMPFILES $tmp
1791
    eval $1=$tmp
1792
}
1793
1794
trap 'rm -f -- $TMPFILES' EXIT
1795
trap exit HUP INT TERM
1796
1797
tmpfile TMPC  .c
1798
tmpfile TMPE  $EXESUF
1799
tmpfile TMPH  .h
1800
tmpfile TMPO  .o
1801
tmpfile TMPS  .S
1802 a482e61b Måns Rullgård
tmpfile TMPV  .ver
1803 54460a83 Måns Rullgård
tmpfile TMPSH .sh
1804 55127e7b Måns Rullgård
tmpfile TMPASM .asm
1805 54460a83 Måns Rullgård
1806
unset -f mktemp
1807 e4e69e0b Måns Rullgård
1808 993f2d0f Måns Rullgård
# make sure we can execute files in $TMPDIR
1809
cat > $TMPSH 2>> $logfile <<EOF
1810
#! /bin/sh
1811
EOF
1812
chmod +x $TMPSH >> $logfile 2>&1
1813
if ! $TMPSH >> $logfile 2>&1; then
1814
    cat <<EOF
1815
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1816
variable to another directory and make sure that it is not mounted noexec.
1817
EOF
1818
    die "Sanity test failed."
1819
fi
1820
1821 19b4c628 Måns Rullgård
filter_cflags=echo
1822
filter_cppflags=echo
1823
filter_asflags=echo
1824
1825 613a4e3f Måns Rullgård
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1826
    cc_type=llvm_gcc
1827
    cc_version=__VERSION__
1828
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1829
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1830
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1831
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1832
    speed_cflags='-O3'
1833
    size_cflags='-Os'
1834
elif $cc -v 2>&1 | grep -qi ^gcc; then
1835 629687f6 Måns Rullgård
    cc_type=gcc
1836 a3d7c197 Diego Biurrun
    cc_version=__VERSION__
1837 bb5cecdc Måns Rullgård
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1838
    cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1839 aef6bd1b Måns Rullgård
    if ! $cc -dumpversion | grep -q '^2\.'; then
1840
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1841
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1842
    fi
1843 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1844
    size_cflags='-Os'
1845 629687f6 Måns Rullgård
elif $cc --version 2>/dev/null | grep -q Intel; then
1846
    cc_type=icc
1847 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1848 bb5cecdc Måns Rullgård
    cc_ident=$($cc --version | head -n1)
1849 bdefad73 Måns Rullgård
    icc_version=$($cc -dumpversion)
1850 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1851
    AS_DEPFLAGS='-MMD'
1852 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1853
    size_cflags='-Os'
1854 b05394a0 Måns Rullgård
    noopt_cflags='-O1'
1855 629687f6 Måns Rullgård
elif $cc -v 2>&1 | grep -q xlc; then
1856
    cc_type=xlc
1857 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__IBMC__)"
1858 bb5cecdc Måns Rullgård
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1859 14ca9cd0 Måns Rullgård
    speed_cflags='-O5'
1860
    size_cflags='-O5 -qcompact'
1861 df442a8d Måns Rullgård
elif $cc -V 2>/dev/null | grep -q Compaq; then
1862
    cc_type=ccc
1863 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__DECC_VER)"
1864 bb5cecdc Måns Rullgård
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1865 d8059267 Måns Rullgård
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1866 03754fcd Måns Rullgård
    debuglevel=3
1867 df442a8d Måns Rullgård
    add_ldflags -Wl,-z,now # calls to libots crash without this
1868 14ca9cd0 Måns Rullgård
    speed_cflags='-fast'
1869
    size_cflags='-O1'
1870 6a0d5493 Måns Rullgård
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1871 03e37762 Måns Rullgård
    test -d "$sysroot" || die "No valid sysroot specified."
1872
    cc_type=armcc
1873 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1874 bb5cecdc Måns Rullgård
    cc_ident=$($cc --vsn | head -n1)
1875 03e37762 Måns Rullgård
    armcc_conf="$PWD/armcc.conf"
1876
    $cc --arm_linux_configure                 \
1877
        --arm_linux_config_file="$armcc_conf" \
1878
        --configure_sysroot="$sysroot"        \
1879
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1880
        die "Error creating armcc configuration file."
1881 bcafde61 Måns Rullgård
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1882 03e37762 Måns Rullgård
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1883 75800dce Måns Rullgård
    as_default="${cross_prefix}gcc"
1884 07dec06e Måns Rullgård
    CC_DEPFLAGS='-MMD'
1885
    AS_DEPFLAGS='-MMD'
1886 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1887
    size_cflags='-Os'
1888 6fec122a Måns Rullgård
elif $cc -version 2>/dev/null | grep -q TMS470; then
1889
    cc_type=tms470
1890 6e3fa35d Måns Rullgård
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1891 bb5cecdc Måns Rullgård
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
1892 6fec122a Måns Rullgård
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1893
    CC_O='-fr=$(@D)'
1894
    as_default="${cross_prefix}gcc"
1895
    ld_default="${cross_prefix}gcc"
1896
    TMPO=$(basename $TMPC .c).o
1897
    append TMPFILES $TMPO
1898
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1899 07dec06e Måns Rullgård
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1900
    AS_DEPFLAGS='-MMD'
1901 14ca9cd0 Måns Rullgård
    speed_cflags='-O3 -mf=5'
1902
    size_cflags='-O3 -mf=2'
1903 6fec122a Måns Rullgård
    filter_cflags=tms470_flags
1904
    tms470_flags(){
1905
        for flag; do
1906
            case $flag in
1907
                -march=*|-mcpu=*)
1908
                    case "${flag#*=}" in
1909
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1910
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1911
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1912
                        armv6*|arm11*)          echo -mv=6   ;;
1913
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1914
                                                echo -mv=5e  ;;
1915
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1916
                    esac
1917
                    ;;
1918
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1919
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1920 5fcb865b Måns Rullgård
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1921 a2709020 Måns Rullgård
                -msoft-float)   echo --float_support=vfplib       ;;
1922 14ca9cd0 Måns Rullgård
                -O[0-3]|-mf=*)  echo $flag                        ;;
1923 6fec122a Måns Rullgård
                -g)             echo -g -mn                       ;;
1924 587d24ff Måns Rullgård
                -pds=*)         echo $flag                        ;;
1925 6fec122a Måns Rullgård
            esac
1926
        done
1927
    }
1928 06da6943 David Conrad
elif $cc -v 2>&1 | grep -q clang; then
1929
    cc_type=clang
1930 b67a8f49 David Conrad
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
1931
        cc_version=__clang_version__ || cc_version=__VERSION__
1932 bb5cecdc Måns Rullgård
    cc_ident=$($cc --version | head -n1)
1933 06da6943 David Conrad
    CC_DEPFLAGS='-MMD'
1934
    AS_DEPFLAGS='-MMD'
1935 14ca9cd0 Måns Rullgård
    speed_cflags='-O3'
1936
    size_cflags='-Os'
1937 2a472e9c Michael Kostylev
elif $cc -V 2>&1 | grep -q Sun; then
1938
    cc_type=suncc
1939
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1940 448f5b83 Måns Rullgård
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1941 faa374b7 Michael Kostylev
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1942 2a472e9c Michael Kostylev
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1943 14ca9cd0 Måns Rullgård
    speed_cflags='-O5'
1944
    size_cflags='-O5 -xspace'
1945 03279bbe Michael Kostylev
    filter_cflags=suncc_flags
1946
    suncc_flags(){
1947
        for flag; do
1948
            case $flag in
1949
                -march=*|-mcpu=*)
1950
                    case "${flag#*=}" in
1951
                        native)                   echo -xtarget=native       ;;
1952 87ddc38b Michael Kostylev
                        v9|niagara)               echo -xarch=sparc          ;;
1953 03279bbe Michael Kostylev
                        ultrasparc)               echo -xarch=sparcvis       ;;
1954 87ddc38b Michael Kostylev
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1955 03279bbe Michael Kostylev
                        i586|pentium)             echo -xchip=pentium        ;;
1956
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1957
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1958
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1959
                        pentium4*)          echo -xtarget=pentium4           ;;
1960
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1961
                        *-sse3)             echo -xarch=sse3                 ;;
1962
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1963
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1964
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1965
                        k8|opteron|athlon64|athlon-fx)
1966
                                                  echo -xarch=sse2a          ;;
1967
                        athlon*)                  echo -xarch=pentium_proa   ;;
1968
                    esac
1969
                    ;;
1970
                -std=c99)             echo -xc99              ;;
1971
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1972
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1973
                -W*,*)                echo $flag              ;;
1974
                -f*-*|-W*)                                    ;;
1975
                *)                    echo $flag              ;;
1976
            esac
1977
        done
1978
    }
1979 180ec37d Måns Rullgård
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
1980 349d78fe Måns Rullgård
    cc_type=pathscale
1981
    cc_version=__PATHSCALE__
1982
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1983
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1984
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1985
    speed_cflags='-O2'
1986
    size_cflags='-Os'
1987 6de163e9 Måns Rullgård
elif $cc -v 2>&1 | grep -q Open64; then
1988
    cc_type=open64
1989
    cc_version=__OPEN64__
1990
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1991
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1992
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1993
    speed_cflags='-O2'
1994
    size_cflags='-Os'
1995 629687f6 Måns Rullgård
fi
1996
1997 851ffa80 Måns Rullgård
test -n "$cc_type" && enable $cc_type ||
1998
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1999 629687f6 Måns Rullgård
2000 75bafbac Måns Rullgård
: ${as_default:=$cc}
2001 50567afa Måns Rullgård
: ${dep_cc_default:=$cc}
2002 684b28e0 Måns Rullgård
: ${ld_default:=$cc}
2003 121d78d0 Carl Eugen Hoyos
set_default ar as dep_cc ld
2004 75800dce Måns Rullgård
2005 07dec06e Måns Rullgård
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2006
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2007
2008 7f32f40c Måns Rullgård
add_cflags $extra_cflags
2009 2f2e6c7c Måns Rullgård
add_asflags $extra_cflags
2010 7f32f40c Måns Rullgård
2011 154d432c Måns Rullgård
if test -n "$sysroot"; then
2012
    case "$cc_type" in
2013 613a4e3f Måns Rullgård
        gcc|llvm_gcc)
2014 467256f2 Måns Rullgård
            add_cppflags --sysroot="$sysroot"
2015 154d432c Måns Rullgård
            add_ldflags --sysroot="$sysroot"
2016
        ;;
2017 6fec122a Måns Rullgård
        tms470)
2018
            add_cppflags -I"$sysinclude"
2019
            add_ldflags  --sysroot="$sysroot"
2020
        ;;
2021 06da6943 David Conrad
        clang)
2022 4def700e David Conrad
            add_cppflags -isysroot "$sysroot"
2023
            add_ldflags -isysroot "$sysroot"
2024 06da6943 David Conrad
        ;;
2025 154d432c Måns Rullgård
    esac
2026
fi
2027
2028 d22c13a8 Måns Rullgård
if test "$cpu" = host; then
2029
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2030
2031
    case "$cc_type" in
2032 613a4e3f Måns Rullgård
        gcc|llvm_gcc)
2033 d22c13a8 Måns Rullgård
            check_native(){
2034
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2035 27ce1be8 Måns Rullgård
                sed -n "/$1=/{
2036
                            s/.*$1=\\([^ ]*\\).*/\\1/
2037
                            p
2038
                            q
2039
                        }" $TMPE
2040 d22c13a8 Måns Rullgård
            }
2041
            cpu=$(check_native -march || check_native -mcpu)
2042
        ;;
2043
    esac
2044
2045
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2046
fi
2047
2048 e939cedd Måns Rullgård
# Deal with common $arch aliases
2049
case "$arch" in
2050
    arm*)
2051
        arch="arm"
2052
    ;;
2053
    mips|mipsel|IP*)
2054
        arch="mips"
2055
    ;;
2056 47b1860e Måns Rullgård
    mips64*)
2057 e939cedd Måns Rullgård
        arch="mips"
2058
        subarch="mips64"
2059
    ;;
2060
    parisc|hppa)
2061
        arch="parisc"
2062
    ;;
2063
    parisc64|hppa64)
2064
        arch="parisc"
2065
        subarch="parisc64"
2066
    ;;
2067
    "Power Macintosh"|ppc|powerpc)
2068
        arch="ppc"
2069
    ;;
2070 47b1860e Måns Rullgård
    ppc64|powerpc64)
2071 e939cedd Måns Rullgård
        arch="ppc"
2072
        subarch="ppc64"
2073
    ;;
2074
    s390|s390x)
2075
        arch="s390"
2076
    ;;
2077
    sh4|sh)
2078
        arch="sh4"
2079
    ;;
2080
    sun4u|sparc64)
2081
        arch="sparc"
2082
        subarch="sparc64"
2083
    ;;
2084
    i[3-6]86|i86pc|BePC|x86_64|amd64)
2085
        arch="x86"
2086
    ;;
2087
esac
2088
2089 851ffa80 Måns Rullgård
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2090 343aef9b Måns Rullgård
enable $arch
2091 e939cedd Måns Rullgård
2092 df5cdc24 Måns Rullgård
# Add processor-specific flags
2093 5d54c126 Måns Rullgård
if test "$cpu" = generic; then
2094
    : do nothing
2095
elif enabled ppc; then
2096 343aef9b Måns Rullgård
2097 56348891 Måns Rullgård
    case $(tolower $cpu) in
2098
        601|ppc601|powerpc601)
2099 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=601"
2100 64ad53ff Carl Eugen Hoyos
            disable altivec
2101 9dbd5c3d Måns Rullgård
        ;;
2102 56348891 Måns Rullgård
        603*|ppc603*|powerpc603*)
2103 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=603"
2104 64ad53ff Carl Eugen Hoyos
            disable altivec
2105 9dbd5c3d Måns Rullgård
        ;;
2106 56348891 Måns Rullgård
        604*|ppc604*|powerpc604*)
2107 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=604"
2108 64ad53ff Carl Eugen Hoyos
            disable altivec
2109 9dbd5c3d Måns Rullgård
        ;;
2110 56348891 Måns Rullgård
        g3|75*|ppc75*|powerpc75*)
2111 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2112 64ad53ff Carl Eugen Hoyos
            disable altivec
2113 9dbd5c3d Måns Rullgård
        ;;
2114 56348891 Måns Rullgård
        g4|745*|ppc745*|powerpc745*)
2115 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2116
        ;;
2117 56348891 Måns Rullgård
        74*|ppc74*|powerpc74*)
2118 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2119
        ;;
2120 56348891 Måns Rullgård
        g5|970|ppc970|powerpc970|power4*)
2121 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2122
        ;;
2123 56348891 Måns Rullgård
        cell)
2124 9dbd5c3d Måns Rullgård
            cpuflags="-mcpu=cell"
2125
            enable ldbrx
2126
        ;;
2127 7b0b81a1 Ancoron Luciferis
        e500v2)
2128
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2129
            disable altivec
2130
        ;;
2131
        e500)
2132
            cpuflags="-mcpu=8540 -mhard-float"
2133
            disable altivec
2134
        ;;
2135 9dbd5c3d Måns Rullgård
    esac
2136 343aef9b Måns Rullgård
2137
elif enabled x86; then
2138
2139 9dbd5c3d Måns Rullgård
    case $cpu in
2140
        i[345]86|pentium)
2141
            cpuflags="-march=$cpu"
2142
            disable mmx
2143
        ;;
2144
        # targets that do NOT support conditional mov (cmov)
2145
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2146
            cpuflags="-march=$cpu"
2147
            disable cmov
2148
        ;;
2149
        # targets that do support conditional mov (cmov)
2150 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)
2151 9dbd5c3d Måns Rullgård
            cpuflags="-march=$cpu"
2152
            enable cmov
2153
            enable fast_cmov
2154
        ;;
2155
        # targets that do support conditional mov but on which it's slow
2156
        pentium4|pentium4m|prescott|nocona)
2157
            cpuflags="-march=$cpu"
2158
            enable cmov
2159
            disable fast_cmov
2160
        ;;
2161
    esac
2162 343aef9b Måns Rullgård
2163
elif enabled sparc; then
2164
2165 9dbd5c3d Måns Rullgård
    case $cpu in
2166 26b7199e Michael Kostylev
        niagara)
2167
            cpuflags="-mcpu=$cpu"
2168
            disable vis
2169
        ;;
2170 9dbd5c3d Måns Rullgård
        sparc64)
2171
            cpuflags="-mcpu=v9"
2172
        ;;
2173
    esac
2174 343aef9b Måns Rullgård
2175
elif enabled arm; then
2176
2177 34ba23c9 Måns Rullgård
    case $cpu in
2178
        armv*)
2179
            cpuflags="-march=$cpu"
2180 c2eae137 Måns Rullgård
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2181 34ba23c9 Måns Rullgård
        ;;
2182
        *)
2183
            cpuflags="-mcpu=$cpu"
2184 c2eae137 Måns Rullgård
            case $cpu in
2185
                cortex-a*)                               subarch=armv7a  ;;
2186
                cortex-r*)                               subarch=armv7r  ;;
2187
                cortex-m*)                               subarch=armv7m  ;;
2188
                arm11*)                                  subarch=armv6   ;;
2189
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2190
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2191
            esac
2192 34ba23c9 Måns Rullgård
        ;;
2193
    esac
2194 343aef9b Måns Rullgård
2195
elif enabled alpha; then
2196
2197 34ba23c9 Måns Rullgård
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2198 343aef9b Måns Rullgård
2199
elif enabled bfin; then
2200
2201 34ba23c9 Måns Rullgård
    cpuflags="-mcpu=$cpu"
2202 343aef9b Måns Rullgård
2203
elif enabled mips; then
2204
2205 34ba23c9 Måns Rullgård
    cpuflags="-march=$cpu"
2206 343aef9b Måns Rullgård
2207
elif enabled avr32; then
2208
2209 9dbd5c3d Måns Rullgård
    case $cpu in
2210
        ap7[02]0[0-2])
2211
            subarch="avr32_ap"
2212
            cpuflags="-mpart=$cpu"
2213
        ;;
2214
        ap)
2215
            subarch="avr32_ap"
2216
            cpuflags="-march=$cpu"
2217
        ;;
2218
        uc3[ab]*)
2219
            subarch="avr32_uc"
2220
            cpuflags="-mcpu=$cpu"
2221
        ;;
2222
        uc)
2223
            subarch="avr32_uc"
2224
            cpuflags="-march=$cpu"
2225
        ;;
2226
    esac
2227 df5cdc24 Måns Rullgård
2228 343aef9b Måns Rullgård
fi
2229
2230 df5cdc24 Måns Rullgård
add_cflags $cpuflags
2231
add_asflags $cpuflags
2232
2233 993f2d0f Måns Rullgård
# compiler sanity check
2234
check_exec <<EOF
2235
int main(void){ return 0; }
2236
EOF
2237
if test "$?" != 0; then
2238
    echo "$cc is unable to create an executable file."
2239
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2240
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2241
        echo "Only do this if you know what cross compiling means."
2242
    fi
2243
    die "C compiler test failed."
2244
fi
2245
2246 38a9c529 Måns Rullgård
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2247 e9b9a2f8 Michael Niedermayer
check_cflags -std=c99
2248 50a334e4 Måns Rullgård
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2249 9d821fc2 Diego Biurrun
#include <stdlib.h>
2250
EOF
2251 50a334e4 Måns Rullgård
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2252 9d821fc2 Diego Biurrun
#include <stdlib.h>
2253
EOF
2254 e9b9a2f8 Michael Niedermayer
2255 f0125de9 Måns Rullgård
check_host_cflags -std=c99
2256
2257 b24dbcbd Ramiro Polla
case "$arch" in
2258 e939cedd Måns Rullgård
    alpha|ia64|mips|parisc|sparc)
2259 8a3c8627 Måns Rullgård
        spic=$shared
2260 b24dbcbd Ramiro Polla
    ;;
2261 e939cedd Måns Rullgård
    x86)
2262 cfdb6148 Måns Rullgård
        subarch="x86_32"
2263 e939cedd Måns Rullgård
        check_cc <<EOF && subarch="x86_64"
2264 58b3536d Måns Rullgård
        int test[(int)sizeof(char*) - 7];
2265 cfdb6148 Måns Rullgård
EOF
2266 de27f4d9 David Conrad
        if test "$subarch" = "x86_64"; then
2267 e939cedd Måns Rullgård
            spic=$shared
2268 de27f4d9 David Conrad
        fi
2269 b24dbcbd Ramiro Polla
    ;;
2270
esac
2271
2272 343aef9b Måns Rullgård
enable $subarch
2273 8a3c8627 Måns Rullgård
enabled spic && enable pic
2274 b24dbcbd Ramiro Polla
2275 7483e694 Diego Biurrun
# OS specific
2276 4f854758 Diego Biurrun
case $target_os in
2277 a1629e28 Diego Biurrun
    haiku)
2278 63ae7e7c Diego Biurrun
        prefix_default="/boot/common"
2279 108caaaa François Revol
        network_extralibs="-lnetwork"
2280 a1629e28 Diego Biurrun
        ;;
2281 7483e694 Diego Biurrun
    sunos)
2282
        FFSERVERLDFLAGS=""
2283 9987769a Måns Rullgård
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2284 0600d30a Michael Kostylev
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2285 7483e694 Diego Biurrun
        network_extralibs="-lsocket -lnsl"
2286 50a334e4 Måns Rullgård
        add_cppflags -D__EXTENSIONS__
2287 8182dc34 Måns Rullgård
        nm_opts='-P -g'
2288 7483e694 Diego Biurrun
        ;;
2289
    netbsd)
2290 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
2291
        oss_outdev_extralibs="-lossaudio"
2292 2138dc99 Diego Biurrun
        add_cppflags -D_XOPEN_SOURCE=600
2293 7483e694 Diego Biurrun
        ;;
2294
    openbsd)
2295 89e053f8 Måns Rullgård
        enable malloc_aligned
2296 7c4a001a Måns Rullgård
        # On OpenBSD 4.5. the compiler does not use PIC unless
2297
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2298
        # however the generated executable will not do anything
2299
        # (simply quits with exit-code 1, no crash, no output).
2300 a7b9c8ae Reimar Döffinger
        # Thus explicitly enable PIC here.
2301 cd78208b Måns Rullgård
        enable pic
2302 7483e694 Diego Biurrun
        SHFLAGS='-shared'
2303 07a8eef6 Måns Rullgård
        oss_indev_extralibs="-lossaudio"
2304
        oss_outdev_extralibs="-lossaudio"
2305 7483e694 Diego Biurrun
        ;;
2306 90b4f091 Diego Biurrun
    freebsd|dragonfly)
2307 89e053f8 Måns Rullgård
        enable malloc_aligned
2308 7483e694 Diego Biurrun
        ;;
2309
    bsd/os)
2310 355d81df Måns Rullgård
        add_extralibs -lpoll -lgnugetopt
2311 7483e694 Diego Biurrun
        strip="strip -d"
2312
        ;;
2313
    darwin)
2314 89e053f8 Måns Rullgård
        enable malloc_aligned
2315 301ab19d Måns Rullgård
        gas="gas-preprocessor.pl $cc"
2316 e08b8239 Måns Rullgård
        enabled ppc && add_asflags -force_cpusubtype_ALL
2317 0138c54e Diego Biurrun
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2318 be90cd27 Ramiro Polla
        strip="${strip} -x"
2319 355d81df Måns Rullgård
        add_ldflags -Wl,-dynamic,-search_paths_first
2320 7483e694 Diego Biurrun
        SLIBSUF=".dylib"
2321
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2322
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2323
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2324 304d586d Loren Merritt
        objformat="macho"
2325 1b0f6fb8 David Conrad
        enabled x86_64 && objformat="macho64"
2326 8dfa86f7 Måns Rullgård
        enabled_any pic shared ||
2327 2704bd1a Alexander Strange
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2328 7483e694 Diego Biurrun
        ;;
2329
    mingw32*)
2330 9d3f4f50 Martin Storsjö
        if test $target_os = "mingw32ce"; then
2331 1aa71e25 Martin Storsjö
            disable network
2332
        else
2333
            target_os=mingw32
2334
        fi
2335 dcc01c06 Ramiro Polla
        LIBTARGET=i386
2336 1fc9fb8a Diego Biurrun
        if enabled x86_64; then
2337 89e053f8 Måns Rullgård
            enable malloc_aligned
2338 dcc01c06 Ramiro Polla
            LIBTARGET=x64
2339 336cc1b0 Martin Storsjö
        elif enabled arm; then
2340
            LIBTARGET=arm
2341 dcc01c06 Ramiro Polla
        fi
2342 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2343 7483e694 Diego Biurrun
        disable ffserver
2344
        SLIBPREF=""
2345
        SLIBSUF=".dll"
2346
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2347
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2348 06abe7f5 Ramiro Polla
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2349 4c25d159 Ramiro Polla
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2350 b9349ff4 Martin Storsjö
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2351
            install -d "$(LIBDIR)"; \
2352
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2353 7483e694 Diego Biurrun
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2354 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'
2355 304d586d Loren Merritt
        objformat="win32"
2356 bc574408 Ramiro Polla
        enable dos_paths
2357 1894e741 Ramiro Polla
        check_cflags -fno-common
2358 e26011d0 Ramiro Polla
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2359
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2360 f7ad5aa2 Ramiro Polla
                die "ERROR: MinGW runtime version must be >= 3.15."
2361 7483e694 Diego Biurrun
        ;;
2362
    cygwin*)
2363 4f854758 Diego Biurrun
        target_os=cygwin
2364 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
2365 7483e694 Diego Biurrun
        SLIBPREF="cyg"
2366
        SLIBSUF=".dll"
2367
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2368
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2369
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2370 304d586d Loren Merritt
        objformat="win32"
2371 bc574408 Ramiro Polla
        enable dos_paths
2372 1894e741 Ramiro Polla
        check_cflags -fno-common
2373 7483e694 Diego Biurrun
        ;;
2374 4f365f37 Michael Kostylev
    *-dos|freedos|opendos)
2375 fdf11906 Diego Biurrun
        disable ffplay ffserver
2376 4f365f37 Michael Kostylev
        disable $INDEV_LIST $OUTDEV_LIST
2377
        network_extralibs="-lsocket"
2378 ff1c015d Michael Kostylev
        objformat="coff"
2379 bc574408 Ramiro Polla
        enable dos_paths
2380 4f365f37 Michael Kostylev
        ;;
2381 7483e694 Diego Biurrun
    linux)
2382
        enable dv1394
2383
        ;;
2384
    irix*)
2385 4f854758 Diego Biurrun
        target_os=irix
2386 7483e694 Diego Biurrun
        ranlib="echo ignoring ranlib"
2387
        ;;
2388 d22e8442 Dave Yeo
    os/2*)
2389
        strip="lxlite"
2390
        ln_s="cp -f"
2391 355d81df Måns Rullgård
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2392 71c61f62 Måns Rullgård
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2393 d22e8442 Dave Yeo
        FFSERVERLDFLAGS=""
2394 287d3b13 Dave Yeo
        LIBSUF="_s.a"
2395 d22e8442 Dave Yeo
        SLIBPREF=""
2396
        SLIBSUF=".dll"
2397
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2398
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2399 71c61f62 Måns Rullgård
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2400
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2401
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2402
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2403
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2404
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2405
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2406
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2407
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2408 d22e8442 Dave Yeo
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2409 bc574408 Ramiro Polla
        enable dos_paths
2410 d22e8442 Dave Yeo
        ;;
2411 83993c1c Andres Mejia
    gnu/kfreebsd)
2412
        ;;
2413 34e82167 Andres Mejia
    gnu)
2414
        ;;
2415 614d8911 Måns Rullgård
    none)
2416
        ;;
2417 7483e694 Diego Biurrun
    *)
2418 4f924f9a Måns Rullgård
        die "Unknown OS '$target_os'."
2419 7483e694 Diego Biurrun
        ;;
2420
esac
2421
2422 db7515fd Måns Rullgård
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2423
2424 13cb2187 Alexander Strange
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2425
2426 c9d19248 Måns Rullgård
set_default $PATHS_LIST
2427
2428 320d060a Diego Biurrun
# we need to build at least one lib type
2429 93b3c083 Måns Rullgård
if ! enabled_any static shared; then
2430 320d060a Diego Biurrun
    cat <<EOF
2431
At least one library type must be built.
2432
Specify --enable-static to build the static libraries or --enable-shared to
2433
build the shared libraries as well. To only build the shared libraries specify
2434
--disable-static in addition to --enable-shared.
2435
EOF
2436
    exit 1;
2437
fi
2438
2439 abc4e572 Diego Biurrun
disabled static && LIBNAME=""
2440 2a320695 Ramiro Polla
2441 2184c6f7 Diego Biurrun
die_license_disabled() {
2442 4c27207c Måns Rullgård
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2443 2184c6f7 Diego Biurrun
}
2444
2445
die_license_disabled gpl libx264
2446 de295976 Stefan Gehrer
die_license_disabled gpl libxavs
2447 2184c6f7 Diego Biurrun
die_license_disabled gpl libxvid
2448
die_license_disabled gpl postproc
2449
die_license_disabled gpl x11grab
2450
2451 2f7ae63b Diego Biurrun
die_license_disabled nonfree libfaac
2452 b2e3c528 Michael Niedermayer
2453 0b175caa Diego Biurrun
die_license_disabled version3 libopencore_amrnb
2454
die_license_disabled version3 libopencore_amrwb
2455
2456 9cad0e4e Diego Biurrun
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2457 3fe142e2 Diego Biurrun
2458 9eeed841 Måns Rullgård
check_deps $ARCH_EXT_LIST
2459 0f3cb305 Fabrice Bellard
2460 40617a6d Ben Taylor
disabled optimizations || check_cflags -fomit-frame-pointer
2461 cf9d24ad Dan Christiansen
2462 e276d9e8 Måns Rullgård
enable_pic() {
2463
    enable pic
2464 bce7b696 Måns Rullgård
    add_cppflags -DPIC
2465
    add_cflags   -fPIC
2466
    add_asflags  -fPIC
2467 e276d9e8 Måns Rullgård
}
2468
2469
enabled pic && enable_pic
2470 bce7b696 Måns Rullgård
2471 b4d96ba2 Måns Rullgård
check_cc <<EOF || die "Symbol mangling check failed."
2472
int ff_extern;
2473
EOF
2474 8182dc34 Måns Rullgård
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2475 b4d96ba2 Måns Rullgård
extern_prefix=${sym%%ff_extern*}
2476
2477 f65883c8 Måns Rullgård
check_cc <<EOF && enable inline_asm
2478
void foo(void) { __asm__ volatile ("" ::); }
2479
EOF
2480 61d251db Måns Rullgård
2481 df5e3978 Måns Rullgård
_restrict=
2482
for restrict_keyword in restrict __restrict__ __restrict; do
2483
    check_cc <<EOF && _restrict=$restrict_keyword && break
2484
void foo(char * $restrict_keyword p);
2485
EOF
2486
done
2487
2488
check_cc <<EOF && enable attribute_packed
2489
struct { int x; } __attribute__((packed)) x;
2490
EOF
2491
2492 dffb41b9 Måns Rullgård
check_cc <<EOF && enable attribute_may_alias
2493
union { int x; } __attribute__((may_alias)) x;
2494
EOF
2495
2496 df5e3978 Måns Rullgård
check_cc <<EOF || die "endian test failed"
2497
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2498
EOF
2499 48fc536a Måns Rullgård
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2500 df5e3978 Måns Rullgård
2501 e939cedd Måns Rullgård
if enabled alpha; then
2502
2503
    check_cflags -mieee
2504
2505
elif enabled arm; then
2506 e45391bb Måns Rullgård
2507 50fa82e6 Måns Rullgård
    check_cflags -marm
2508 301ab19d Måns Rullgård
    nogas=die
2509 50fa82e6 Måns Rullgård
2510 fa0912fe Måns Rullgård
    check_ld <<EOF && enable vfp_args
2511
__asm__ (".eabi_attribute 28, 1");
2512
int main(void) { return 0; }
2513
EOF
2514
2515
    # We have to check if pld is a nop and disable it.
2516
    check_asm pld '"pld [r0]"'
2517
2518
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2519
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2520
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2521
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2522
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2523
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2524 e45391bb Måns Rullgård
2525 e276d9e8 Måns Rullgård
    enabled_all armv6t2 shared !pic && enable_pic
2526
2527 fa0912fe Måns Rullgård
elif enabled mips; then
2528 e45391bb Måns Rullgård
2529 fa0912fe Måns Rullgård
    check_asm loongson '"dmult.g $1, $2, $3"'
2530
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2531 e45391bb Måns Rullgård
2532 fa0912fe Måns Rullgård
elif enabled ppc; then
2533 e45391bb Måns Rullgård
2534 e6a0c354 Måns Rullgård
    enable local_aligned_8 local_aligned_16
2535
2536 135448fa Måns Rullgård
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2537 2f0c136e Måns Rullgård
    check_asm ibm_asm   '"add 0, 0, 0"'
2538 fa0912fe Måns Rullgård
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2539 64de20d1 Måns Rullgård
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2540 fa0912fe Måns Rullgård
2541
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2542
    if enabled altivec; then
2543 301ab19d Måns Rullgård
        nogas=warn
2544 fa0912fe Måns Rullgård
        check_cflags -maltivec -mabi=altivec &&
2545
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2546
        check_cflags -faltivec
2547
2548
        # check if our compiler supports Motorola AltiVec C API
2549
        check_cc <<EOF || disable altivec
2550
$inc_altivec_h
2551
int main(void) {
2552
    vector signed int v1, v2, v3;
2553
    v1 = vec_add(v2,v3);
2554
    return 0;
2555
}
2556
EOF
2557
2558
        # check if our compiler supports braces for vector declarations
2559
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2560
$inc_altivec_h
2561
int main (void) { (vector int) {1}; return 0; }
2562
EOF
2563
    fi
2564 e45391bb Måns Rullgård
2565 fa0912fe Måns Rullgård
elif enabled sparc; then
2566 e45391bb Måns Rullgård
2567 fa0912fe Måns Rullgård
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2568
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2569 e45391bb Måns Rullgård
2570 fa0912fe Måns Rullgård
elif enabled x86; then
2571 e45391bb Måns Rullgård
2572 e6a0c354 Måns Rullgård
    enable local_aligned_8 local_aligned_16
2573
2574 44965991 Panagiotis Issaris
    # check whether EBP is available on x86
2575
    # As 'i' is stored on the stack, this program will crash
2576
    # if the base pointer is used to access it because the
2577
    # base pointer is cleared in the inline assembly code.
2578 7dfef245 Måns Rullgård
    check_exec_crash <<EOF && enable ebp_available
2579 44965991 Panagiotis Issaris
    volatile int i=0;
2580 be449fca Diego Pettenò
    __asm__ volatile (
2581 44965991 Panagiotis Issaris
        "xorl %%ebp, %%ebp"
2582
    ::: "%ebp");
2583
    return i;
2584
EOF
2585
2586 f494213c Reimar Döffinger
    # check whether EBX is available on x86
2587 7cee5421 Måns Rullgård
    check_asm ebx_available '""::"b"(0)' &&
2588
        check_asm ebx_available '"":::"%ebx"'
2589 8e380710 Loren Merritt
2590 d3a4b4e0 Diego Biurrun
    # check whether more than 10 operands are supported
2591
    check_cc <<EOF && enable ten_operands
2592
int main(void) {
2593
    int x=0;
2594
    __asm__ volatile(
2595
        ""
2596
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2597
    );
2598
    return 0;
2599
}
2600
EOF
2601
2602 d7f0920b Alexander Strange
    # check whether binutils is new enough to compile SSSE3/MMX2
2603 940f335a Måns Rullgård
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2604 5fd89ca0 Diego Biurrun
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2605 6bd859d6 Måns Rullgård
2606
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2607 304d586d Loren Merritt
2608 9cca1e40 Alex Converse
    if ! disabled_any asm mmx yasm; then
2609 b6c06894 Måns Rullgård
        if check_cmd $yasmexe --version; then
2610
            enabled x86_64 && yasm_extra="-m amd64"
2611
            yasm_debug="-g dwarf2"
2612
        elif check_cmd nasm -v; then
2613
            yasmexe=nasm
2614
            yasm_debug="-g -F dwarf"
2615
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
2616
        fi
2617
2618
        YASMFLAGS="-f $objformat $yasm_extra"
2619
        enabled pic               && append YASMFLAGS "-DPIC"
2620
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2621
        case "$objformat" in
2622
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2623
        esac
2624
2625 31a0dcb2 Måns Rullgård
        check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2626 25432e85 Måns Rullgård
            die "yasm not found, use --disable-yasm for a crippled build"
2627 31a0dcb2 Måns Rullgård
    fi
2628 e45391bb Måns Rullgård
2629 669b5583 Måns Rullgård
    case "$cpu" in
2630
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2631
            disable fast_clz
2632
        ;;
2633
    esac
2634
2635 44965991 Panagiotis Issaris
fi
2636
2637 301ab19d Måns Rullgård
if enabled asm; then
2638
    as=${gas:=$as}
2639
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2640
        $nogas "GNU assembler not found, install gas-preprocessor"
2641
fi
2642
2643 a98bb16d Ramiro Polla
if check_func dlopen; then
2644
    ldl=
2645
elif check_func dlopen -ldl; then
2646
    ldl=-ldl
2647 8bf5d58f Michael Niedermayer
fi
2648
2649 75ecf149 Diego Biurrun
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2650
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2651
2652 534a2231 Måns Rullgård
check_func  fcntl
2653 7483e694 Diego Biurrun
check_func  fork
2654 84882df6 Martin Storsjö
check_func  getaddrinfo $network_extralibs
2655 7483e694 Diego Biurrun
check_func  gethrtime
2656
check_func  getrusage
2657 fc5607f8 Reimar Döffinger
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2658 094c09bb Michael Kostylev
check_func  inet_aton $network_extralibs
2659 abfc8d05 Martin Storsjö
check_func  isatty
2660 4ae40685 Måns Rullgård
check_func  ${malloc_prefix}memalign            && enable memalign
2661 7483e694 Diego Biurrun
check_func  mkstemp
2662 4ae40685 Måns Rullgård
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2663 0104b608 Måns Rullgård
check_func  setrlimit
2664 87958234 Stefano Sabatini
check_func  strerror_r
2665 47941088 Stefano Sabatini
check_func  strtok_r
2666 b507ebd1 Ramiro Polla
check_func_headers io.h setmode
2667 e4673692 Diego Biurrun
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2668 fc5607f8 Reimar Döffinger
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2669 2446d3d6 Diego Biurrun
check_func_headers windows.h GetProcessTimes
2670 7c5bfe7a Ramiro Polla
check_func_headers windows.h VirtualAlloc
2671 6ffa87d3 Ramiro Polla
2672 e16e49ac Ramiro Polla
check_header conio.h
2673 a98bb16d Ramiro Polla
check_header dlfcn.h
2674 92c6a099 Laurent Aimar
check_header dxva2api.h
2675 a98bb16d Ramiro Polla
check_header malloc.h
2676 bf6ce82d Diego Biurrun
check_header poll.h
2677 b58412f1 Alexander Strange
check_header sys/mman.h
2678 b091aa44 Ramiro Polla
check_header sys/resource.h
2679 bf6ce82d Diego Biurrun
check_header sys/select.h
2680 a98bb16d Ramiro Polla
check_header termios.h
2681 272081b0 Carl Eugen Hoyos
check_header vdpau/vdpau.h
2682
check_header vdpau/vdpau_x11.h
2683 68178ca9 Diego Biurrun
check_header X11/extensions/XvMClib.h
2684 a98bb16d Ramiro Polla
2685 9104cd51 Ramiro Polla
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2686
2687 89e053f8 Måns Rullgård
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2688
     enabled_any $need_memalign ; then
2689 1f91cdce Ramiro Polla
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2690 a98bb16d Ramiro Polla
fi
2691 e16e49ac Ramiro Polla
2692 a4fa192c Ramiro Polla
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2693 632948bd Ramiro Polla
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2694 57bd82d4 Måns Rullgård
2695
# check for some common methods of building with pthread support
2696
# do this before the optional library checks as some of them require pthreads
2697 0dbfc1db Måns Rullgård
if ! disabled pthreads && ! enabled w32threads; then
2698
    enable pthreads
2699 9e7fd101 Måns Rullgård
    if check_func pthread_create; then
2700
        :
2701
    elif check_func pthread_create -pthread; then
2702
        add_cflags -pthread
2703 afc9aee2 Diego Biurrun
        add_extralibs -pthread
2704 9e7fd101 Måns Rullgård
    elif check_func pthread_create -pthreads; then
2705
        add_cflags -pthreads
2706 afc9aee2 Diego Biurrun
        add_extralibs -pthreads
2707 8d94f606 Gianluigi Tiesi
    elif check_func pthread_create -lpthreadGC2; then
2708
        add_extralibs -lpthreadGC2
2709 9e7fd101 Måns Rullgård
    elif ! check_lib pthread.h pthread_create -lpthread; then
2710 0dbfc1db Måns Rullgård
        disable pthreads
2711 9e7fd101 Måns Rullgård
    fi
2712 57bd82d4 Måns Rullgård
fi
2713
2714 8eee7025 Diego Biurrun
for thread in $THREADS_LIST; do
2715 e5f94c2b Ramiro Polla
    if enabled $thread; then
2716 3ae3b721 Ramiro Polla
        test -n "$thread_type" &&
2717
            die "ERROR: Only one thread type must be selected." ||
2718 e5f94c2b Ramiro Polla
            thread_type="$thread"
2719
    fi
2720
done
2721
2722 fdf88598 Måns Rullgård
check_lib math.h sin -lm
2723 edd43c95 Reimar Döffinger
disabled vaapi || check_lib va/va.h vaInitialize -lva
2724 fdf88598 Måns Rullgård
2725 645d2652 Måns Rullgård
check_mathfunc exp2
2726
check_mathfunc exp2f
2727
check_mathfunc llrint
2728 07876e25 Måns Rullgård
check_mathfunc llrintf
2729 645d2652 Måns Rullgård
check_mathfunc log2
2730
check_mathfunc log2f
2731
check_mathfunc lrint
2732
check_mathfunc lrintf
2733
check_mathfunc round
2734
check_mathfunc roundf
2735
check_mathfunc truncf
2736 f32adb22 Måns Rullgård
2737 57bd82d4 Måns Rullgård
# these are off by default, so fail if requested and not available
2738 a1b3c5a3 kemuri
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2739 47941088 Stefano Sabatini
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2740 e3cc7d6f Diego Biurrun
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2741 2513b2b4 Diego Biurrun
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2742
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2743 79fda097 Diego Biurrun
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2744 5af41508 Reinhard Tartler
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2745 8328ad13 James Darnley
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h hip_decode_init -lmp3lame
2746 7483e694 Diego Biurrun
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2747 eb7626a3 Måns Rullgård
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2748
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2749 6ebf0bfc Stefano Sabatini
enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2750
                        die "ERROR: libopencv not found"; }
2751 3d6fac8c Mathieu Malaterre
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2752 42ebfc54 Ramiro Polla
enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2753
                        die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2754 36718e51 Diego Biurrun
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2755
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2756 ae14f311 David Conrad
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2757 c261a5d9 David Conrad
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2758 7483e694 Diego Biurrun
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2759 7d07d6f5 Diego Biurrun
enabled libvpx     && {
2760
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2761
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2762
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2763
                                die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2764 eb7626a3 Måns Rullgård
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2765 652d9d24 Jason Garrett-Glaser
                      { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2766
                        die "ERROR: libx264 version must be >= 0.98."; }
2767 de295976 Stefan Gehrer
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2768 2bfecf73 Stefano Sabatini
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2769 7483e694 Diego Biurrun
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2770 8ac17293 Steve L'Homme
2771 0b4a1821 Alessandro Sappia
# libdc1394 check
2772
if enabled libdc1394; then
2773
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2774
        enable libdc1394_2; } ||
2775
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2776
        enable libdc1394_1; } ||
2777
    die "ERROR: No version of libdc1394 found "
2778
fi
2779
2780 6a1a892f Frantisek Dvorak
SDL_CONFIG="${cross_prefix}sdl-config"
2781 2270b4b2 Diego Biurrun
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2782 5e622c40 Diego Biurrun
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2783 b4f93564 Måns Rullgård
    sdl_libs=$("${SDL_CONFIG}" --libs)
2784 aa692d54 Måns Rullgård
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2785
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2786
    enable sdl &&
2787
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2788 c3f6b472 Michael Niedermayer
fi
2789 57bd82d4 Måns Rullgård
2790 2270b4b2 Diego Biurrun
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2791 146ea952 Nicolas Boos
2792 73b46a95 Ramiro Polla
if enabled network; then
2793 96000432 Reimar Döffinger
    check_type "sys/types.h sys/socket.h" socklen_t
2794 c0018613 Martin Storsjö
    check_type netdb.h "struct addrinfo"
2795 b4d68544 Martin Storsjö
    check_type netinet/in.h "struct ipv6_mreq"
2796
    check_type netinet/in.h "struct sockaddr_in6"
2797 ff6e82a9 Måns Rullgård
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2798 3b2372bf Ronald S. Bultje
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2799 73b46a95 Ramiro Polla
    # Prefer arpa/inet.h over winsock2
2800
    if check_header arpa/inet.h ; then
2801
        check_func closesocket
2802
    elif check_header winsock2.h ; then
2803 f4c13872 Martin Storsjö
        check_func_headers winsock2.h closesocket -lws2 && \
2804
            network_extralibs="-lws2" || \
2805
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2806
            network_extralibs="-lws2_32"; }
2807 72be9e73 Dave Yeo
        check_type ws2tcpip.h socklen_t
2808 c0018613 Martin Storsjö
        check_type ws2tcpip.h "struct addrinfo"
2809 b4d68544 Martin Storsjö
        check_type ws2tcpip.h "struct ipv6_mreq"
2810
        check_type ws2tcpip.h "struct sockaddr_in6"
2811 33a4dbdd Martin Storsjö
        check_type ws2tcpip.h "struct sockaddr_storage"
2812 3b2372bf Ronald S. Bultje
        check_struct winsock2.h "struct sockaddr" sa_len
2813 28c9f069 Michael Kostylev
    else
2814
        disable network
2815 73b46a95 Ramiro Polla
    fi
2816
fi
2817
2818 06e31011 Ramiro Polla
check_header linux/videodev.h
2819
check_header linux/videodev2.h
2820 1b6e8b73 Brad
check_header sys/videoio.h
2821 47f38850 Luca Abeni
2822 27796dc3 Ramiro Polla
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2823 ec1ee802 Ramiro Polla
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2824
# w32api 3.12 had it defined wrong
2825
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2826 c2345207 Ramiro Polla
2827 f8aa696f Diego Biurrun
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2828 1c915f83 Ramiro Polla
{ check_header dev/bktr/ioctl_meteor.h &&
2829
  check_header dev/bktr/ioctl_bt848.h; } ||
2830
{ check_header machine/ioctl_meteor.h &&
2831
  check_header machine/ioctl_bt848.h; } ||
2832
{ check_header dev/video/meteor/ioctl_meteor.h &&
2833
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2834
check_header dev/ic/bt8xx.h
2835 f8aa696f Diego Biurrun
2836 c7682de0 Ramiro Polla
check_header sys/soundcard.h
2837
check_header soundcard.h
2838 deb29777 Måns Rullgård
2839 b6f3d925 Måns Rullgård
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2840 35fd8122 Nicolas George
2841 0e57fe17 Carl Eugen Hoyos
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2842 80ff8a16 Olivier Guilyardi
2843 56a059ac Diego Biurrun
enabled x11grab                         &&
2844 f58f4ce1 Guillaume Poirier
check_header X11/Xlib.h                 &&
2845
check_header X11/extensions/XShm.h      &&
2846 0a045661 Baptiste Coudurier
check_header X11/extensions/Xfixes.h    &&
2847 f58f4ce1 Guillaume Poirier
check_func XOpenDisplay -lX11           &&
2848 781c1aa6 Roxis
check_func XShmCreateImage -lX11 -lXext &&
2849
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2850 f58f4ce1 Guillaume Poirier
2851 598ef02b Jai Menon
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2852