Statistics
| Branch: | Revision:

ffmpeg / configure @ 448f5b83

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