Statistics
| Branch: | Revision:

ffmpeg / configure @ ad7da0b5

History | View | Annotate | Download (84 KB)

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