Statistics
| Branch: | Revision:

ffmpeg / configure @ 2513b2b4

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