Statistics
| Branch: | Revision:

ffmpeg / configure @ 47a158cb

History | View | Annotate | Download (68.2 KB)

1 aeb29222 Måns Rullgård
#!/bin/sh
2 0f3cb305 Fabrice Bellard
#
3 f57620d5 Måns Rullgård
# FFmpeg configure script
4
#
5 949906ea Diego Biurrun
# Copyright (c) 2000-2002 Fabrice Bellard
6
# Copyright (c) 2005-2008 Diego Biurrun
7
# Copyright (c) 2005-2008 Mans Rullgard
8 0f3cb305 Fabrice Bellard
#
9 cf9d24ad Dan Christiansen
10 31e647f8 Diego Biurrun
# Prevent locale nonsense from breaking basic text processing.
11 79ab96ba Diego Biurrun
LC_ALL=C
12
export LC_ALL
13 31e647f8 Diego Biurrun
14 cde2d79a Måns Rullgård
# make sure we are running under a compatible shell
15 c21d6325 Måns Rullgård
# try to make this part work with most shells
16
17
try_exec(){
18 0dbe81bb Måns Rullgård
    echo "Trying shell $1"
19 2270b4b2 Diego Biurrun
    type "$1" > /dev/null 2>&1 && exec "$@"
20 c21d6325 Måns Rullgård
}
21
22 5237ce67 Måns Rullgård
unset foo
23 2270b4b2 Diego Biurrun
(: ${foo%%bar}) 2> /dev/null
24 0dbe81bb Måns Rullgård
E1="$?"
25
26 2270b4b2 Diego Biurrun
(: ${foo?}) 2> /dev/null
27 0dbe81bb Måns Rullgård
E2="$?"
28
29
if test "$E1" != 0 || test "$E2" = 0; then
30
    echo "Broken shell detected.  Trying alternatives."
31 c21d6325 Måns Rullgård
    export FF_CONF_EXEC
32
    if test "0$FF_CONF_EXEC" -lt 1; then
33
        FF_CONF_EXEC=1
34
        try_exec bash "$0" "$@"
35
    fi
36
    if test "0$FF_CONF_EXEC" -lt 2; then
37
        FF_CONF_EXEC=2
38
        try_exec ksh "$0" "$@"
39
    fi
40
    if test "0$FF_CONF_EXEC" -lt 3; then
41
        FF_CONF_EXEC=3
42
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43 cde2d79a Måns Rullgård
    fi
44
    echo "No compatible shell script interpreter found."
45 fc53da20 Diego Biurrun
    echo "This configure script requires a POSIX-compatible shell"
46 c21d6325 Måns Rullgård
    echo "such as bash or ksh."
47 505dfb09 Diego Biurrun
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48
    echo "Instead, install a working POSIX-compatible shell."
49
    echo "Disabling this configure test will create a broken FFmpeg."
50 c21d6325 Måns Rullgård
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51
        echo "This bash version ($BASH_VERSION) is broken on your platform."
52
        echo "Upgrade to a later version if available."
53
    fi
54 cde2d79a Måns Rullgård
    exit 1
55
fi
56
57 74c53c2d Måns Rullgård
show_help(){
58
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63 8c6afa4d Diego Biurrun
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65 3e89171a Måns Rullgård
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66 d156bede Diego Biurrun
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67 74c53c2d Måns Rullgård
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68 84c22efd Diego Biurrun
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69 5341d856 Diego Biurrun
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70 4ca5ece5 Stefano Sabatini
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71 74c53c2d Måns Rullgård
  echo "  --enable-static          build static libraries [default=yes]"
72
  echo "  --disable-static         do not build static libraries [default=no]"
73
  echo "  --enable-shared          build shared libraries [default=no]"
74
  echo "  --disable-shared         do not build shared libraries [default=yes]"
75 0a622b98 Måns Rullgård
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
76
  echo "                           and ffmpeg will be under GPL [default=no]"
77 3fe142e2 Diego Biurrun
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libav*"
78
  echo "                           and ffmpeg will be unredistributable [default=no]"
79 4a24ab64 Diego Biurrun
  echo "  --enable-postproc        enable GPLed postprocessing support [default=no]"
80 13ca50f3 Diego Biurrun
  echo "  --enable-swscale         software scaler support [default=no]"
81 f7679c54 Vitor Sessak
  echo "  --enable-avfilter        video filter support (replaces vhook) [default=no]"
82
  echo "  --enable-avfilter-lavf   video filters dependant on avformat [default=no]"
83 e5f94c2b Ramiro Polla
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
84 d22e8442 Dave Yeo
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
85 74c53c2d Måns Rullgård
  echo "  --enable-pthreads        use pthreads [default=no]"
86 eb113804 Diego Biurrun
  echo "  --enable-w32threads      use Win32 threads [default=no]"
87 56a059ac Diego Biurrun
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
88 0a622b98 Måns Rullgård
  echo
89
  echo "External library support:"
90 5ce265a1 Diego Biurrun
  echo "  --enable-mlib            use Sun medialib [default=no]"
91 8ac17293 Steve L'Homme
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
92 f5a756ef Diego Biurrun
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
93
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
94 f7b8bffe Ramiro Polla
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
95
  echo "                           and libraw1394 [default=no]"
96 690bfceb Anuradha Suraparaju
  echo "  --enable-libdirac        enable Dirac support via libdirac [default=no]"
97 e2745046 Måns Rullgård
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
98
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
99 06f32b26 Diego Biurrun
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
100 dc922953 Diego Biurrun
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
101 e2745046 Måns Rullgård
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
102 31235134 Diego Biurrun
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
103
  echo "                           native demuxer exists [default=no]"
104 f7cd9eed Anuradha Suraparaju
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
105 ae14f311 David Conrad
  echo "  --enable-libspeex        enable Speex decoding via libspeex [default=no]"
106 71757822 Diego Biurrun
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
107 f9def9cc Diego Biurrun
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
108
  echo "                           native implementation exists [default=no]"
109 1cc60c47 Diego Biurrun
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
110
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
111 31235134 Diego Biurrun
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
112 74c53c2d Måns Rullgård
  echo ""
113
  echo "Advanced options (experts only):"
114
  echo "  --source-path=PATH       path to source code [$source_path]"
115
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
116 db6107b6 Diego Biurrun
  echo "  --enable-cross-compile   assume a cross-compiler is used"
117 4f854758 Diego Biurrun
  echo "  --target-os=OS           compiler targets OS [$target_os]"
118 74c53c2d Måns Rullgård
  echo "  --cc=CC                  use C compiler CC [$cc]"
119
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
120
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
121
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
122 ac63af34 Diego Biurrun
  echo "  --extra-version=STRING   version string suffix []"
123 74c53c2d Måns Rullgård
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
124 cc6a90dd Guillaume Poirier
  echo "  --arch=ARCH              select architecture  [$arch]"
125 7c758d33 Diego Biurrun
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
126
  echo "                           instruction selection, may crash on older CPUs)"
127 2b4c3615 Måns Rullgård
  echo "  --enable-powerpc-perf    enable performance report on PPC"
128 74c53c2d Måns Rullgård
  echo "                           (requires enabling PMC)"
129
  echo "  --disable-mmx            disable MMX usage"
130 064df5a9 Panagiotis Issaris
  echo "  --disable-mmx2           disable MMX2 usage"
131
  echo "  --disable-ssse3          disable SSSE3 usage"
132 1839e854 Siarhei Siamashka
  echo "  --disable-armv5te        disable armv5te usage"
133 edab3048 Måns Rullgård
  echo "  --disable-armv6          disable armv6 usage"
134 f55b299a Måns Rullgård
  echo "  --disable-armvfp         disable ARM VFP usage"
135 74c53c2d Måns Rullgård
  echo "  --disable-iwmmxt         disable iwmmxt usage"
136
  echo "  --disable-altivec        disable AltiVec usage"
137
  echo "  --disable-network        disable network support [default=no]"
138 0c7bb0e5 Luca Barbato
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
139 74c53c2d Måns Rullgård
  echo "  --disable-zlib           disable zlib [default=no]"
140 f402916e Aurelien Jacobs
  echo "  --disable-bzlib          disable bzlib [default=no]"
141 74c53c2d Måns Rullgård
  echo "  --disable-vhook          disable video hooking support"
142
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
143
  echo "                           MPEG audio decoding [default=no]"
144 cde9e780 Michael Niedermayer
  echo "  --enable-gray            enable full grayscale support (slower color)"
145 786b30af Diego Biurrun
  echo "  --disable-ffmpeg         disable ffmpeg build"
146 74c53c2d Måns Rullgård
  echo "  --disable-ffserver       disable ffserver build"
147
  echo "  --disable-ffplay         disable ffplay build"
148
  echo "  --enable-small           optimize for size instead of speed"
149 3abe5fbd Aurelien Jacobs
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150 74c53c2d Måns Rullgård
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
151
  echo "  --disable-encoder=NAME   disables encoder NAME"
152
  echo "  --enable-encoder=NAME    enables encoder NAME"
153
  echo "  --disable-decoder=NAME   disables decoder NAME"
154
  echo "  --enable-decoder=NAME    enables decoder NAME"
155
  echo "  --disable-encoders       disables all encoders"
156
  echo "  --disable-decoders       disables all decoders"
157 ff70e601 Måns Rullgård
  echo "  --disable-muxer=NAME     disables muxer NAME"
158
  echo "  --enable-muxer=NAME      enables muxer NAME"
159 74c53c2d Måns Rullgård
  echo "  --disable-muxers         disables all muxers"
160 ff70e601 Måns Rullgård
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
161
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
162 74c53c2d Måns Rullgård
  echo "  --disable-demuxers       disables all demuxers"
163 af9e7d18 Måns Rullgård
  echo "  --enable-parser=NAME     enables parser NAME"
164
  echo "  --disable-parser=NAME    disables parser NAME"
165
  echo "  --disable-parsers        disables all parsers"
166 cd61e407 Jason Millard
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
167
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
168
  echo "  --disable-bsfs           disables all bitstream filters"
169 c08fb000 Alex Beregszaszi
  echo "  --enable-protocol=NAME   enables protocol NAME"
170
  echo "  --disable-protocol=NAME  disables protocol NAME"
171
  echo "  --disable-protocols      disables all protocols"
172 10d46dd0 Diego Biurrun
  echo "  --disable-devices        disables all devices"
173 1865259f Stefano Sabatini
  echo "  --enable-filter=NAME     enables filter NAME"
174
  echo "  --disable-filter=NAME    disables filter NAME"
175
  echo "  --disable-filters        disables all filters"
176 794f8e97 Panagiotis Issaris
  echo "  --list-decoders          show all available decoders"
177
  echo "  --list-encoders          show all available encoders"
178
  echo "  --list-muxers            show all available muxers"
179
  echo "  --list-demuxers          show all available demuxers"
180
  echo "  --list-parsers           show all available parsers"
181
  echo "  --list-protocols         show all available protocols"
182
  echo "  --list-bsfs              show all available bitstream filters"
183 c552605c Diego Biurrun
  echo "  --list-indevs            show all available input devices"
184
  echo "  --list-outdevs           show all available output devices"
185 1865259f Stefano Sabatini
  echo "  --list-filters           show all available filters"
186 0a622b98 Måns Rullgård
  echo
187
  echo "Developer options (useful when working on FFmpeg itself):"
188 9c56a1f9 Diego Biurrun
  echo "  --disable-debug          disable debugging symbols"
189 b7d49373 Stefano Sabatini
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
190 0a622b98 Måns Rullgård
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
191 d2bbb2f7 Diego Biurrun
  echo "  --disable-optimizations  disable compiler optimizations"
192 0a622b98 Måns Rullgård
  echo "  --enable-extra-warnings  enable more compiler warnings"
193 87a0fb62 Diego Biurrun
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
194 74c53c2d Måns Rullgård
  echo ""
195
  echo "NOTE: Object files are built at the place where configure is launched."
196 60e8bc13 Stefano Sabatini
  exit 0
197 74c53c2d Måns Rullgård
}
198 cf9d24ad Dan Christiansen
199 57bd82d4 Måns Rullgård
log(){
200 2270b4b2 Diego Biurrun
    echo "$@" >> $logfile
201 57bd82d4 Måns Rullgård
}
202
203 720c69da Måns Rullgård
log_file(){
204 c8e9f801 Måns Rullgård
    log BEGIN $1
205 2270b4b2 Diego Biurrun
    pr -n -t $1 >> $logfile
206 c8e9f801 Måns Rullgård
    log END $1
207
}
208
209 2ba042a7 Måns Rullgård
echolog(){
210 c8e9f801 Måns Rullgård
    log "$@"
211 57bd82d4 Måns Rullgård
    echo "$@"
212 2ba042a7 Måns Rullgård
}
213
214
die(){
215
    echolog "$@"
216
    cat <<EOF
217
If you think configure made a mistake, make sure you are using the latest
218
version from SVN.  If the latest version fails, report the problem to the
219 e5d8ccd7 Måns Rullgård
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
220 2ba042a7 Måns Rullgård
EOF
221 e155a21a Diego Biurrun
    if disabled logging; then
222 2ba042a7 Måns Rullgård
        cat <<EOF
223 e155a21a Diego Biurrun
Rerun configure with logging enabled (do not use --disable-logging), and
224
include the log this produces with your report.
225 2ba042a7 Måns Rullgård
EOF
226
    else
227
cat <<EOF
228 e155a21a Diego Biurrun
Include the log file "$logfile" produced by configure as this will help
229
solving the problem.
230 2ba042a7 Måns Rullgård
EOF
231
    fi
232 cea0ac52 Diego Biurrun
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233 57bd82d4 Måns Rullgård
    exit 1
234
}
235
236 6c6007d6 Diego Biurrun
# Avoid locale weirdness, besides we really just want to translate ASCII.
237 44161118 Måns Rullgård
toupper(){
238 6c6007d6 Diego Biurrun
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239 44161118 Måns Rullgård
}
240
241 4a5444db Måns Rullgård
tolower(){
242 6c6007d6 Diego Biurrun
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
243 4a5444db Måns Rullgård
}
244
245 a8d04fba Måns Rullgård
set_all(){
246
    value=$1
247
    shift
248
    for var in $*; do
249
        eval $var=$value
250
    done
251
}
252
253 72a43668 Måns Rullgård
set_weak(){
254
    value=$1
255
    shift
256
    for var; do
257
        eval : \${$var:=$value}
258
    done
259
}
260
261 799c9e9b Måns Rullgård
pushvar(){
262
    for var in $*; do
263
        eval level=\${${var}_level:=0}
264
        eval ${var}_${level}="\$$var"
265
        eval ${var}_level=$(($level+1))
266
    done
267
}
268
269
popvar(){
270
    for var in $*; do
271
        eval level=\${${var}_level:-0}
272
        test $level = 0 && continue
273
        eval level=$(($level-1))
274
        eval $var="\${${var}_${level}}"
275
        eval ${var}_level=$level
276
        eval unset ${var}_${level}
277
    done
278
}
279
280 a8d04fba Måns Rullgård
enable(){
281
    set_all yes $*
282
}
283
284
disable(){
285
    set_all no $*
286
}
287
288 72a43668 Måns Rullgård
enable_weak(){
289
    set_weak yes $*
290
}
291
292
disable_weak(){
293
    set_weak no $*
294
}
295
296 f9d328da Måns Rullgård
do_enable_deep(){
297
    for var; do
298
        enabled $var && continue
299
        eval sel="\$${var}_select"
300 c510c7b5 Måns Rullgård
        eval sgs="\$${var}_suggest"
301
        pushvar var sgs
302 f9d328da Måns Rullgård
        enable_deep $sel
303 c510c7b5 Måns Rullgård
        popvar sgs
304
        enable_deep_weak $sgs
305 f9d328da Måns Rullgård
        popvar var
306
    done
307
}
308
309
enable_deep(){
310
    do_enable_deep $*
311
    enable $*
312
}
313
314 72a43668 Måns Rullgård
enable_deep_weak(){
315
    do_enable_deep $*
316
    enable_weak $*
317
}
318
319 57bd82d4 Måns Rullgård
enabled(){
320 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
321
    eval test "x\$${1#!}" $op "xyes"
322 44161118 Måns Rullgård
}
323
324 37970ebf Ramiro Polla
disabled(){
325 3250003c Måns Rullgård
    test "${1#!}" = "$1" && op== || op=!=
326
    eval test "x\$${1#!}" $op "xno"
327 37970ebf Ramiro Polla
}
328
329 44161118 Måns Rullgård
enabled_all(){
330
    for opt; do
331
        enabled $opt || return 1
332
    done
333
}
334
335 85bca2c5 Diego Biurrun
disabled_all(){
336
    for opt; do
337
        disabled $opt || return 1
338
    done
339
}
340
341 44161118 Måns Rullgård
enabled_any(){
342
    for opt; do
343
        enabled $opt && return 0
344
    done
345
}
346
347 85bca2c5 Diego Biurrun
disabled_any(){
348
    for opt; do
349
        disabled $opt && return 0
350
    done
351 f7b230a7 Måns Rullgård
    return 1
352 85bca2c5 Diego Biurrun
}
353
354 c9d19248 Måns Rullgård
set_default(){
355
    for opt; do
356
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
357
    done
358
}
359
360 4a0d6686 Aurelien Jacobs
is_in(){
361
    value=$1
362
    shift
363
    for var in $*; do
364
        [ $var = $value ] && return 0
365
    done
366
    return 1
367
}
368
369 30fd06be Måns Rullgård
check_deps(){
370
    for cfg; do
371 3250003c Måns Rullgård
        cfg="${cfg#!}"
372 799c9e9b Måns Rullgård
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
373
        disabled ${cfg}_checking && continue
374
        enable ${cfg}_checking
375
376 30fd06be Måns Rullgård
        eval dep_all="\$${cfg}_deps"
377
        eval dep_any="\$${cfg}_deps_any"
378 7ef3425f Måns Rullgård
        eval dep_sel="\$${cfg}_select"
379 c510c7b5 Måns Rullgård
        eval dep_sgs="\$${cfg}_suggest"
380 799c9e9b Måns Rullgård
381 c510c7b5 Måns Rullgård
        pushvar cfg dep_all dep_any dep_sel dep_sgs
382
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
383
        popvar cfg dep_all dep_any dep_sel dep_sgs
384 799c9e9b Måns Rullgård
385 6a702d4c Måns Rullgård
        enabled_all  $dep_all || disable $cfg
386
        enabled_any  $dep_any || disable $cfg
387 7ef3425f Måns Rullgård
        disabled_any $dep_sel && disable $cfg
388 799c9e9b Måns Rullgård
389 4ec45764 Ramiro Polla
        if enabled $cfg; then
390
            eval dep_extralibs="\$${cfg}_extralibs"
391
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
392 f9d328da Måns Rullgård
            enable_deep $dep_sel
393 c510c7b5 Måns Rullgård
            enable_deep_weak $dep_sgs
394 4ec45764 Ramiro Polla
        fi
395
396 799c9e9b Måns Rullgård
        disable ${cfg}_checking
397 30fd06be Måns Rullgård
    done
398
}
399
400 44161118 Måns Rullgård
print_config(){
401
    pfx=$1
402
    header=$2
403
    makefile=$3
404
    shift 3
405
    for cfg; do
406 3d907e22 Måns Rullgård
        ucname="`toupper $cfg`"
407 44161118 Måns Rullgård
        if enabled $cfg; then
408 3d907e22 Måns Rullgård
            echo "#define ${pfx}${ucname} 1" >> $header
409
            echo "#define ENABLE_${ucname} 1" >> $header
410
            echo "${pfx}${ucname}=yes" >> $makefile
411
        else
412
            echo "#define ENABLE_${ucname} 0" >> $header
413 44161118 Måns Rullgård
        fi
414
    done
415 57bd82d4 Måns Rullgård
}
416
417
flags_saved(){
418 2270b4b2 Diego Biurrun
    (: ${SAVE_CFLAGS?}) 2> /dev/null
419 57bd82d4 Måns Rullgård
}
420
421 dcd479c0 Måns Rullgård
save_flags(){
422 57bd82d4 Måns Rullgård
    flags_saved && return
423 dcd479c0 Måns Rullgård
    SAVE_CFLAGS="$CFLAGS"
424
    SAVE_LDFLAGS="$LDFLAGS"
425
    SAVE_extralibs="$extralibs"
426
}
427
428
restore_flags(){
429 f5d28d10 Måns Rullgård
    flags_saved || return
430 dcd479c0 Måns Rullgård
    CFLAGS="$SAVE_CFLAGS"
431
    LDFLAGS="$SAVE_LDFLAGS"
432
    extralibs="$SAVE_extralibs"
433
    unset SAVE_CFLAGS
434
    unset SAVE_LDFLAGS
435
    unset SAVE_extralibs
436
}
437
438
temp_cflags(){
439
    save_flags
440
    CFLAGS="$CFLAGS $*"
441
}
442
443
temp_ldflags(){
444
    save_flags
445
    LDFLAGS="$LDFLAGS $*"
446
}
447
448
temp_extralibs(){
449
    save_flags
450
    extralibs="$extralibs $*"
451
}
452
453 57bd82d4 Måns Rullgård
append(){
454
    var=$1
455
    shift
456
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
457
    eval "$var=\"\$$var $*\""
458
}
459
460
add_cflags(){
461
    append CFLAGS "$@"
462
}
463
464
add_ldflags(){
465
    append LDFLAGS "$@"
466
}
467
468
add_extralibs(){
469
    append extralibs "$@"
470
}
471
472 b0cfb663 Måns Rullgård
check_cmd(){
473 b3cb5d51 Måns Rullgård
    log "$@"
474 2270b4b2 Diego Biurrun
    "$@" >> $logfile 2>&1
475 b0cfb663 Måns Rullgård
}
476
477 dcd479c0 Måns Rullgård
check_cc(){
478 57bd82d4 Måns Rullgård
    log check_cc "$@"
479 2270b4b2 Diego Biurrun
    cat > $TMPC
480 720c69da Måns Rullgård
    log_file $TMPC
481 b0cfb663 Måns Rullgård
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
482 57bd82d4 Måns Rullgård
}
483
484
check_cpp(){
485
    log check_cpp "$@"
486 2270b4b2 Diego Biurrun
    cat > $TMPC
487 720c69da Måns Rullgård
    log_file $TMPC
488 b0cfb663 Måns Rullgård
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
489 dcd479c0 Måns Rullgård
}
490
491 940f335a Måns Rullgård
check_asm(){
492
    log check_asm "$@"
493
    name="$1"
494
    asm="$2"
495
    shift 2
496
    check_cc "$@" <<EOF && enable $name || disable $name
497 be449fca Diego Pettenò
int foo(void){ __asm__ volatile($asm); }
498 940f335a Måns Rullgård
EOF
499
}
500
501 304d586d Loren Merritt
check_yasm(){
502
    log check_yasm "$@"
503
    echo "$1" > $TMPS
504
    log_file $TMPS
505
    shift 1
506
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
507
}
508
509 dcd479c0 Måns Rullgård
check_ld(){
510 57bd82d4 Måns Rullgård
    log check_ld "$@"
511 0607887f Måns Rullgård
    check_cc || return
512 3155a644 Måns Rullgård
    flags=''
513
    libs=''
514
    for f; do
515
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
516
    done
517
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
518 dcd479c0 Måns Rullgård
}
519
520
check_cflags(){
521 57bd82d4 Måns Rullgård
    log check_cflags "$@"
522
    check_cc "$@" <<EOF && add_cflags "$@"
523 dcd479c0 Måns Rullgård
int x;
524
EOF
525
}
526
527
check_ldflags(){
528 57bd82d4 Måns Rullgård
    log check_ldflags "$@"
529
    check_ld "$@" <<EOF && add_ldflags "$@"
530 c23a0ac8 Diego Biurrun
int main(void){ return 0; }
531 dcd479c0 Måns Rullgård
EOF
532
}
533
534
check_header(){
535 57bd82d4 Måns Rullgård
    log check_header "$@"
536 dcd479c0 Måns Rullgård
    header=$1
537
    shift
538 d8bc5f06 Måns Rullgård
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
539
    disable $var
540
    check_cpp "$@" <<EOF && enable $var
541 dcd479c0 Måns Rullgård
#include <$header>
542
int x;
543
EOF
544
}
545
546
check_func(){
547 57bd82d4 Måns Rullgård
    log check_func "$@"
548 dcd479c0 Måns Rullgård
    func=$1
549
    shift
550 d8bc5f06 Måns Rullgård
    disable $func
551
    check_ld "$@" <<EOF && enable $func
552 dcd479c0 Måns Rullgård
extern int $func();
553 c23a0ac8 Diego Biurrun
int main(void){ $func(); }
554 dcd479c0 Måns Rullgård
EOF
555
}
556
557 2446d3d6 Diego Biurrun
check_func_headers(){
558
    log check_func_headers "$@"
559 f8d7b072 Måns Rullgård
    headers=$1
560
    func=$2
561
    shift 2
562
    disable $func
563
    incs=""
564
    for hdr in $headers; do
565
        incs="$incs
566
#include <$hdr>"
567
    done
568
    check_ld "$@" <<EOF && enable $func
569
$incs
570 d6773f56 Diego Biurrun
int main(int argc, char **argv){
571 f8d7b072 Måns Rullgård
    (void) $func;
572
    return 0;
573
}
574
EOF
575
}
576
577 a5344cf7 Stefano Sabatini
check_cpp_condition(){
578
    log check_cpp_condition "$@"
579
    header=$1
580
    condition=$2
581
    check_cpp <<EOF
582
#include <$header>
583
#if !($condition)
584
#error "unsatisfied condition: $condition"
585
#endif
586
EOF
587
}
588
589 57bd82d4 Måns Rullgård
check_lib(){
590
    log check_lib "$@"
591
    header="$1"
592
    func="$2"
593
    shift 2
594 fcfcde17 Måns Rullgård
    temp_extralibs "$@"
595
    check_header $header && check_func $func && add_extralibs "$@"
596
    err=$?
597
    restore_flags
598
    return $err
599 57bd82d4 Måns Rullgård
}
600
601 f8d7b072 Måns Rullgård
check_lib2(){
602
    log check_lib2 "$@"
603
    headers="$1"
604
    func="$2"
605
    shift 2
606
    temp_extralibs "$@"
607 2446d3d6 Diego Biurrun
    check_func_headers "$headers" $func && add_extralibs "$@"
608 f8d7b072 Måns Rullgård
    err=$?
609
    restore_flags
610
    return $err
611
}
612
613 dcd479c0 Måns Rullgård
check_exec(){
614 2270b4b2 Diego Biurrun
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
615 57bd82d4 Måns Rullgård
}
616
617 7dfef245 Måns Rullgård
check_exec_crash(){
618
    code=`cat`
619
620
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
621
    # are safe but may not be available everywhere.  Thus we use
622
    # raise(SIGTERM) instead.  The check is run in a subshell so we
623
    # can redirect the "Terminated" message from the shell.  SIGBUS
624
    # is not defined by standard C so it is used conditionally.
625
626 2270b4b2 Diego Biurrun
    (check_exec "$@") >> $logfile 2>&1 <<EOF
627 7dfef245 Måns Rullgård
#include <signal.h>
628
static void sighandler(int sig){
629
    raise(SIGTERM);
630
}
631 e5af4a11 Diego Biurrun
int main(void){
632 7dfef245 Måns Rullgård
    signal(SIGILL, sighandler);
633
    signal(SIGFPE, sighandler);
634
    signal(SIGSEGV, sighandler);
635
#ifdef SIGBUS
636
    signal(SIGBUS, sighandler);
637
#endif
638
    { $code }
639
}
640
EOF
641
}
642
643 72be9e73 Dave Yeo
check_type(){
644
    log check_type "$@"
645
    headers=$1
646
    type=$2
647
    shift 2
648
    disable $type
649
    incs=""
650
    for hdr in $headers; do
651
        incs="$incs
652
#include <$hdr>"
653
    done
654
    check_cc "$@" <<EOF && enable $type
655
$incs
656
$type v;
657
EOF
658
}
659
660 57bd82d4 Måns Rullgård
require(){
661
    name="$1"
662
    header="$2"
663
    func="$3"
664
    shift 3
665
    check_lib $header $func "$@" || die "ERROR: $name not found"
666 dcd479c0 Måns Rullgård
}
667
668 f8d7b072 Måns Rullgård
require2(){
669
    name="$1"
670
    headers="$2"
671
    func="$3"
672
    shift 3
673
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
674
}
675
676 eea50282 Måns Rullgård
check_foo_config(){
677
    cfg=$1
678
    pkg=$2
679
    header=$3
680
    func=$4
681
    shift 4
682
    disable $cfg
683
    check_cmd ${pkg}-config --version
684
    err=$?
685
    if test "$err" = 0; then
686
        temp_cflags `${pkg}-config --cflags`
687
        temp_extralibs `${pkg}-config --libs`
688
        check_lib "$@" $header $func && enable $cfg
689
    fi
690
    return $err
691
}
692
693 c505dd31 Måns Rullgård
apply(){
694
    file=$1
695
    shift
696
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
697
}
698
699 dcd61286 Diego Biurrun
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
700
# system-dependent things.
701
702 4a0d6686 Aurelien Jacobs
COMPONENT_LIST="
703
    bsfs
704
    decoders
705
    demuxers
706
    encoders
707 3cde40aa Vitor Sessak
    filters
708 c552605c Diego Biurrun
    indevs
709 4a0d6686 Aurelien Jacobs
    muxers
710 c552605c Diego Biurrun
    outdevs
711 4a0d6686 Aurelien Jacobs
    parsers
712
    protocols
713
"
714
715
CONFIG_LIST="
716
    $COMPONENT_LIST
717 f7679c54 Vitor Sessak
    avfilter
718
    avfilter_lavf
719 c88f5d72 Måns Rullgård
    avisynth
720
    beos_netserver
721 f402916e Aurelien Jacobs
    bzlib
722 c88f5d72 Måns Rullgård
    ffmpeg
723
    ffplay
724
    ffserver
725 1848f7d9 Måns Rullgård
    fft
726 c88f5d72 Måns Rullgård
    gpl
727 ecfc4f44 Måns Rullgård
    gprof
728 d8d0d0b2 Michael Niedermayer
    gray
729 3abe5fbd Aurelien Jacobs
    hardcoded_tables
730 c88f5d72 Måns Rullgård
    ipv6
731 f5a756ef Diego Biurrun
    libamr_nb
732
    libamr_wb
733 f7b8bffe Ramiro Polla
    libdc1394
734 690bfceb Anuradha Suraparaju
    libdirac
735 2eed5a46 Diego Biurrun
    libfaac
736
    libfaad
737
    libfaadbin
738 c88f5d72 Måns Rullgård
    libgsm
739 6ebe07fb Diego Biurrun
    libmp3lame
740 c88f5d72 Måns Rullgård
    libnut
741 f7cd9eed Anuradha Suraparaju
    libschroedinger
742 ae14f311 David Conrad
    libspeex
743 150d2772 Diego Biurrun
    libtheora
744 c88f5d72 Måns Rullgård
    libvorbis
745 1cc60c47 Diego Biurrun
    libx264
746
    libxvid
747 47a158cb Måns Rullgård
    mdct
748 c88f5d72 Måns Rullgård
    memalign_hack
749 a8150374 Diego Biurrun
    mlib
750 c88f5d72 Måns Rullgård
    mpegaudio_hp
751
    network
752 3fe142e2 Diego Biurrun
    nonfree
753 4a24ab64 Diego Biurrun
    postproc
754 2b4c3615 Måns Rullgård
    powerpc_perf
755 bd2216e4 Måns Rullgård
    small
756 13ca50f3 Diego Biurrun
    swscale
757 c88f5d72 Måns Rullgård
    vhook
758 56a059ac Diego Biurrun
    x11grab
759 c88f5d72 Måns Rullgård
    zlib
760 4a0d6686 Aurelien Jacobs
"
761 c88f5d72 Måns Rullgård
762 8eee7025 Diego Biurrun
THREADS_LIST='
763
    beosthreads
764 d22e8442 Dave Yeo
    os2threads
765 8eee7025 Diego Biurrun
    pthreads
766
    w32threads
767
'
768
769 3f5b56e5 Måns Rullgård
ARCH_LIST='
770
    alpha
771
    armv4l
772
    bfin
773
    ia64
774
    m68k
775
    mips
776
    parisc
777
    powerpc
778
    s390
779
    sh4
780
    sparc
781
    sparc64
782
    x86
783
    x86_32
784
    x86_64
785
'
786
787
ARCH_EXT_LIST='
788 1ac9331a Måns Rullgård
    altivec
789
    armv5te
790 edab3048 Måns Rullgård
    armv6
791 f55b299a Måns Rullgård
    armvfp
792 3f5b56e5 Måns Rullgård
    iwmmxt
793
    mmi
794
    mmx
795 d7f0920b Alexander Strange
    mmx2
796 6b18d278 Måns Rullgård
    neon
797 9eeed841 Måns Rullgård
    ssse3
798 bd9d34a0 Diego Biurrun
    vis
799 3f5b56e5 Måns Rullgård
'
800
801
HAVE_LIST="
802
    $ARCH_EXT_LIST
803
    $THREADS_LIST
804
    altivec_h
805 c9fdab0d François Revol
    arpa_inet_h
806 6bd859d6 Måns Rullgård
    bswap
807 ecf97f22 Alex Beregszaszi
    closesocket
808 1ac9331a Måns Rullgård
    cmov
809 e16e49ac Ramiro Polla
    conio_h
810 c88f5d72 Måns Rullgård
    dcbzl
811 f8aa696f Diego Biurrun
    dev_bktr_ioctl_bt848_h
812
    dev_bktr_ioctl_meteor_h
813
    dev_ic_bt8xx_h
814
    dev_video_meteor_ioctl_meteor_h
815
    dev_video_bktr_ioctl_bt848_h
816 18b67ae5 Måns Rullgård
    dlfcn_h
817 c88f5d72 Måns Rullgård
    dlopen
818 bc574408 Ramiro Polla
    dos_paths
819 245626d0 Diego Biurrun
    ebp_available
820
    ebx_available
821 c2a29455 Aurelien Jacobs
    fast_64bit
822 7073e9fc Måns Rullgård
    fast_cmov
823 7b829d2a Ramiro Polla
    fast_unaligned
824 9d99cc5a Måns Rullgård
    fork
825 c88f5d72 Måns Rullgård
    freetype2
826 da9e86f8 Roman Shaposhnik
    gethrtime
827 4e68cb8a Roman Shaposhnik
    GetProcessTimes
828 66be5b45 Ramiro Polla
    getrusage
829 c88f5d72 Måns Rullgård
    imlib2
830 2e1913b1 Måns Rullgård
    inet_aton
831 61d251db Måns Rullgård
    inline_asm
832 0b4a1821 Alessandro Sappia
    libdc1394_1
833
    libdc1394_2
834 a33cab3a Michael Kostylev
    llrint
835
    lrint
836 c88f5d72 Måns Rullgård
    lrintf
837 f8aa696f Diego Biurrun
    machine_ioctl_bt848_h
838
    machine_ioctl_meteor_h
839 c88f5d72 Måns Rullgård
    malloc_h
840
    memalign
841 6ffa87d3 Ramiro Polla
    mkstemp
842 b4e806b2 Matthieu Castet
    pld
843 9cafbd6c Måns Rullgård
    ppc64
844 a33cab3a Michael Kostylev
    round
845
    roundf
846 c88f5d72 Måns Rullgård
    sdl
847
    sdl_video_size
848 72be9e73 Dave Yeo
    socklen_t
849 deb29777 Måns Rullgård
    soundcard_h
850 f8cda19e Luca Abeni
    poll_h
851 b58412f1 Alexander Strange
    sys_mman_h
852 b091aa44 Ramiro Polla
    sys_resource_h
853 81644c2e Michael Kostylev
    sys_select_h
854 deb29777 Måns Rullgård
    sys_soundcard_h
855 1b6e8b73 Brad
    sys_videoio_h
856 e16e49ac Ramiro Polla
    termios_h
857 b265431e Måns Rullgård
    threads
858 6ff3f3e7 Ramiro Polla
    winsock2_h
859 304d586d Loren Merritt
    yasm
860 0cb78cef Diego Biurrun
"
861 44161118 Måns Rullgård
862 b6bb00b0 Måns Rullgård
# options emitted with CONFIG_ prefix but not available on command line
863
CONFIG_EXTRA="
864
    fft_mmx
865
"
866
867 520cc7f1 Måns Rullgård
CMDLINE_SELECT="
868 3f5b56e5 Måns Rullgård
    $ARCH_EXT_LIST
869 520cc7f1 Måns Rullgård
    $CONFIG_LIST
870 8eee7025 Diego Biurrun
    $THREADS_LIST
871 db6107b6 Diego Biurrun
    cross_compile
872 520cc7f1 Måns Rullgård
    debug
873
    extra_warnings
874 8c6afa4d Diego Biurrun
    logging
875 d2bbb2f7 Diego Biurrun
    optimizations
876 520cc7f1 Måns Rullgård
    shared
877
    static
878 87a0fb62 Diego Biurrun
    stripping
879 520cc7f1 Måns Rullgård
"
880 426be5dc Diego Biurrun
881
PATHS_LIST='
882 d156bede Diego Biurrun
    bindir
883 26759c44 Måns Rullgård
    incdir
884
    libdir
885
    mandir
886
    prefix
887
    shlibdir
888 426be5dc Diego Biurrun
'
889
890
CMDLINE_SET="
891
    $PATHS_LIST
892
    arch
893
    build_suffix
894
    cc
895
    cpu
896
    cross_prefix
897 ac63af34 Diego Biurrun
    extra_version
898 426be5dc Diego Biurrun
    logfile
899 26759c44 Måns Rullgård
    source_path
900
    target_os
901 426be5dc Diego Biurrun
"
902 520cc7f1 Måns Rullgård
903 912f3148 Diego Biurrun
# code dependency declarations
904
905 9eeed841 Måns Rullgård
# architecture extensions
906
altivec_deps="powerpc"
907
armv5te_deps="armv4l"
908
armv6_deps="armv4l"
909 f55b299a Måns Rullgård
armvfp_deps="armv4l"
910 9eeed841 Måns Rullgård
iwmmxt_deps="armv4l"
911 e241ba14 Diego Biurrun
mmi_deps="mips"
912 9eeed841 Måns Rullgård
mmx_deps="x86"
913 fbef871d Diego Biurrun
mmx2_deps="x86 mmx"
914 6b18d278 Måns Rullgård
neon_deps="armv4l"
915 9eeed841 Måns Rullgård
ssse3_deps="x86"
916 bd9d34a0 Diego Biurrun
vis_deps="sparc"
917 9eeed841 Måns Rullgård
918 b6bb00b0 Måns Rullgård
# common features
919
fft_suggest="fft_mmx"
920
fft_mmx_deps="mmx yasm"
921
922 912f3148 Diego Biurrun
# decoders / encoders
923 47a158cb Måns Rullgård
aac_decoder_select="fft mdct"
924 d8d12c15 Diego Biurrun
ac3_decoder_deps="gpl"
925 47a158cb Måns Rullgård
ac3_decoder_select="fft mdct"
926
atrac3_decoder_select="fft mdct"
927
cook_decoder_select="fft mdct"
928
dca_decoder_select="fft mdct"
929 33a0dd37 Kostya Shishkov
dxa_decoder_deps="zlib"
930 406ab5cc Justin Ruggles
eac3_decoder_deps="gpl"
931 47a158cb Måns Rullgård
eac3_decoder_select="fft mdct"
932 30fd06be Måns Rullgård
flashsv_decoder_deps="zlib"
933 773be23a Aurelien Jacobs
flashsv_encoder_deps="zlib"
934 47a158cb Måns Rullgård
imc_decoder_select="fft mdct"
935 30fd06be Måns Rullgård
mpeg_xvmc_decoder_deps="xvmc"
936 47a158cb Måns Rullgård
nellymoser_decoder_select="fft mdct"
937
nellymoser_encoder_select="fft mdct"
938 30fd06be Måns Rullgård
png_decoder_deps="zlib"
939
png_encoder_deps="zlib"
940 47a158cb Måns Rullgård
qdm2_decoder_select="fft mdct"
941
vorbis_decoder_select="fft mdct"
942
vorbis_encoder_select="fft mdct"
943
wmav1_decoder_select="fft mdct"
944
wmav1_encoder_select="fft mdct"
945
wmav2_decoder_select="fft mdct"
946
wmav2_encoder_select="fft mdct"
947 30fd06be Måns Rullgård
zmbv_decoder_deps="zlib"
948
zmbv_encoder_deps="zlib"
949
950 912f3148 Diego Biurrun
# external libraries
951 f5a756ef Diego Biurrun
libamr_nb_decoder_deps="libamr_nb"
952
libamr_nb_encoder_deps="libamr_nb"
953
libamr_wb_decoder_deps="libamr_wb"
954
libamr_wb_encoder_deps="libamr_wb"
955 1b71f045 Måns Rullgård
libdirac_decoder_deps="libdirac !libschroedinger"
956 690bfceb Anuradha Suraparaju
libdirac_encoder_deps="libdirac"
957 c9171a83 Diego Biurrun
libfaac_encoder_deps="libfaac"
958 69ddbd1d Diego Biurrun
libfaad_decoder_deps="libfaad"
959 4ec45764 Ramiro Polla
libfaadbin_decoder_extralibs='$ldl'
960 299c77d5 Måns Rullgård
libgsm_decoder_deps="libgsm"
961
libgsm_encoder_deps="libgsm"
962 8ffed8d8 Måns Rullgård
libgsm_ms_decoder_deps="libgsm"
963
libgsm_ms_encoder_deps="libgsm"
964 1cc60c47 Diego Biurrun
libmp3lame_encoder_deps="libmp3lame"
965 f7cd9eed Anuradha Suraparaju
libschroedinger_decoder_deps="libschroedinger"
966
libschroedinger_encoder_deps="libschroedinger"
967 ae14f311 David Conrad
libspeex_decoder_deps="libspeex"
968 150d2772 Diego Biurrun
libtheora_encoder_deps="libtheora"
969 b0caf888 Diego Biurrun
libvorbis_encoder_deps="libvorbis"
970 1cc60c47 Diego Biurrun
libx264_encoder_deps="libx264"
971
libxvid_encoder_deps="libxvid"
972 13566c31 Diego Biurrun
mpeg4aac_decoder_deps="libfaad"
973 30fd06be Måns Rullgård
974 912f3148 Diego Biurrun
# demuxers / muxers
975 03a76ba9 Diego Biurrun
ac3_demuxer_deps="ac3_parser"
976 50383e88 Ramiro Polla
audio_beos_demuxer_deps="audio_beos"
977 4ec45764 Ramiro Polla
audio_beos_demuxer_extralibs="-lmedia -lbe"
978 50383e88 Ramiro Polla
audio_beos_muxer_deps="audio_beos"
979 4ec45764 Ramiro Polla
audio_beos_muxer_extralibs="-lmedia -lbe"
980 53b73365 Ramiro Polla
avisynth_demuxer_deps="avisynth"
981 73483024 Ramiro Polla
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
982 17ac9f1c Luca Barbato
dirac_demuxer_deps="dirac_parser"
983 fe9bb347 Diego Biurrun
dv1394_demuxer_deps="dv1394 dv_demuxer"
984 f7b8bffe Ramiro Polla
libdc1394_demuxer_deps="libdc1394"
985 d7c59247 Diego Biurrun
libnut_demuxer_deps="libnut"
986
libnut_muxer_deps="libnut"
987 4bd8e17c Aurelien Jacobs
mp3_demuxer_deps="mpegaudio_parser"
988 c7682de0 Ramiro Polla
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
989
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
990 30fd06be Måns Rullgård
redir_demuxer_deps="network"
991 8eb793c4 Luca Abeni
rtp_muxer_deps="network rtp_protocol"
992 95c21842 Luca Abeni
rtsp_demuxer_deps="sdp_demuxer"
993
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
994 06e31011 Ramiro Polla
v4l_demuxer_deps="linux_videodev_h"
995 1b6e8b73 Brad
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
996 c2345207 Ramiro Polla
vfwcap_demuxer_deps="capCreateCaptureWindow"
997
vfwcap_demuxer_extralibs="-lvfw32"
998 06eab4ba Ramiro Polla
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
999 4ec45764 Ramiro Polla
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1000 30fd06be Måns Rullgård
1001 912f3148 Diego Biurrun
# protocols
1002 c08fb000 Alex Beregszaszi
http_protocol_deps="network"
1003
rtp_protocol_deps="udp_protocol"
1004
tcp_protocol_deps="network"
1005
udp_protocol_deps="network"
1006
1007 f7679c54 Vitor Sessak
# filters
1008 81124ba0 Vitor Sessak
movie_filter_deps="avfilter_lavf"
1009 f7679c54 Vitor Sessak
1010 912f3148 Diego Biurrun
# programs
1011 fa859b4d Måns Rullgård
ffplay_deps="sdl"
1012 6ad42348 Ramiro Polla
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1013 4ec45764 Ramiro Polla
ffserver_extralibs='$ldl'
1014
vhook_extralibs='$ldl'
1015 a2830dca Måns Rullgård
1016 912f3148 Diego Biurrun
1017 de6d9b64 Fabrice Bellard
# default parameters
1018 8a608357 Måns Rullgård
1019 2ba042a7 Måns Rullgård
logfile="config.err"
1020 8a608357 Måns Rullgård
1021
# installation paths
1022 c9d19248 Måns Rullgård
prefix_default="/usr/local"
1023
bindir_default='${prefix}/bin'
1024
incdir_default='${prefix}/include'
1025
libdir_default='${prefix}/lib'
1026
mandir_default='${prefix}/share/man'
1027
shlibdir_default="$libdir_default"
1028 8a608357 Måns Rullgård
1029
# toolchain
1030 13c7df3d Måns Rullgård
cc_default="gcc"
1031 304d586d Loren Merritt
yasmexe="yasm"
1032 de6d9b64 Fabrice Bellard
ar="ar"
1033 503d5b58 Michael Kostylev
nm="nm"
1034 be7109c1 Michael Niedermayer
ranlib="ranlib"
1035 0f3cb305 Fabrice Bellard
strip="strip"
1036 8a608357 Måns Rullgård
asmalign_pot="unknown"
1037 20369773 Dave Yeo
ln_s="ln -sf"
1038 304d586d Loren Merritt
objformat="elf"
1039 8a608357 Måns Rullgård
1040
# machine
1041 cc6a90dd Guillaume Poirier
arch=`uname -m`
1042 38d0a8aa Guillaume Poirier
cpu="generic"
1043 8a608357 Måns Rullgård
1044
# OS
1045 4f854758 Diego Biurrun
target_os=$(tolower $(uname -s))
1046 8a608357 Måns Rullgård
1047
# libraries
1048 f402916e Aurelien Jacobs
enable bzlib
1049 497237c7 Ramiro Polla
enable zlib
1050 8a608357 Måns Rullgård
1051
# configurable options
1052 497237c7 Ramiro Polla
enable debug
1053
enable ffmpeg
1054
enable ffplay
1055
enable ffserver
1056
enable ipv6
1057
enable mpegaudio_hp
1058
enable network
1059 8400d6b8 Diego Biurrun
enable optimizations
1060 497237c7 Ramiro Polla
enable protocols
1061 530dc538 Diego Biurrun
enable static
1062 87a0fb62 Diego Biurrun
enable stripping
1063 8a608357 Måns Rullgård
vhook="default"
1064
1065
# build settings
1066 11a9d3e8 Michael Niedermayer
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1067 9987769a Måns Rullgård
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1068 cab3ef82 Diego Biurrun
VHOOKSHFLAGS='$(SHFLAGS)'
1069 c536cb09 Diego Biurrun
FFSERVERLDFLAGS=-Wl,-E
1070 f3ec2d46 Slavik Gnatenko
LIBPREF="lib"
1071
LIBSUF=".a"
1072 c5f14466 Ramiro Polla
FULLNAME='$(NAME)$(BUILDSUF)'
1073
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1074 f3ec2d46 Slavik Gnatenko
SLIBPREF="lib"
1075
SLIBSUF=".so"
1076 c5f14466 Ramiro Polla
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1077 b29bddab Diego Biurrun
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1078
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1079 24743a76 Diego Biurrun
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1080 ef0bc4c9 François Revol
1081 0d7dca36 Diego Biurrun
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1082
# full relative path for objects in subdirectories for non-recursive Make.
1083 ec0bd3b9 Måns Rullgård
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1084 315c741d Diego Biurrun
1085 c597172e Måns Rullgård
# find source path
1086
source_path="`dirname \"$0\"`"
1087 497237c7 Ramiro Polla
enable source_path_used
1088 c597172e Måns Rullgård
if test -z "$source_path" -o "$source_path" = "." ; then
1089
    source_path="`pwd`"
1090 497237c7 Ramiro Polla
    disable source_path_used
1091 c597172e Måns Rullgård
else
1092
    source_path="`cd \"$source_path\"; pwd`"
1093
    echo "$source_path" | grep -q '[[:blank:]]' &&
1094 7483e694 Diego Biurrun
        die "Out of tree builds are impossible with whitespace in source path."
1095 c597172e Måns Rullgård
fi
1096
1097
FFMPEG_CONFIGURATION="$@"
1098
1099 73ef8980 Måns Rullgård
find_things(){
1100
    thing=$1
1101
    pattern=$2
1102
    file=$source_path/$3
1103 932ccf39 Måns Rullgård
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1104 73ef8980 Måns Rullgård
}
1105
1106
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1107
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1108
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1109
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1110
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1111
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1112
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1113
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1114
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1115 81124ba0 Vitor Sessak
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1116 c597172e Måns Rullgård
1117 7483e694 Diego Biurrun
enable $ARCH_EXT_LIST \
1118
       $DECODER_LIST \
1119
       $ENCODER_LIST \
1120
       $PARSER_LIST \
1121
       $BSF_LIST \
1122
       $DEMUXER_LIST \
1123
       $MUXER_LIST \
1124 f7679c54 Vitor Sessak
       $FILTER_LIST \
1125 7483e694 Diego Biurrun
       $PROTOCOL_LIST \
1126
       $INDEV_LIST \
1127
       $OUTDEV_LIST \
1128 c597172e Måns Rullgård
1129
die_unknown(){
1130
    echo "Unknown option \"$1\"."
1131
    echo "See $0 --help for available options."
1132
    exit 1
1133
}
1134
1135 794f8e97 Panagiotis Issaris
show_list() {
1136 bf0c4afa Ramiro Polla
    suffix=_$1
1137
    shift
1138
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1139 794f8e97 Panagiotis Issaris
    exit 0
1140
}
1141
1142 c597172e Måns Rullgård
for opt do
1143 7483e694 Diego Biurrun
    optval="${opt#*=}"
1144
    case "$opt" in
1145
    --extra-cflags=*) add_cflags "$optval"
1146
    ;;
1147
    --extra-ldflags=*) add_ldflags "$optval"
1148
    ;;
1149
    --extra-libs=*) add_extralibs "$optval"
1150
    ;;
1151 8fb1cb58 Diego Biurrun
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1152 9aa8ed9d Panagiotis Issaris
    ;;
1153 40bcf4c7 Benjamin Larsson
    --enable-debug=*) debuglevel="$optval"
1154
    ;;
1155 7483e694 Diego Biurrun
    --enable-*=*|--disable-*=*)
1156
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1157
    case "$thing" in
1158 81124ba0 Vitor Sessak
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1159 7483e694 Diego Biurrun
        *) die_unknown "$opt" ;;
1160
    esac
1161
    ;;
1162
    --enable-?*|--disable-?*)
1163
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1164 e3773a55 Måns Rullgård
    if is_in $option $COMPONENT_LIST; then
1165
        eval $action \$$(toupper ${option%s})_LIST
1166
    elif is_in $option $CMDLINE_SELECT; then
1167
        $action $option
1168
    else
1169
        die_unknown $opt
1170
    fi
1171 7483e694 Diego Biurrun
    ;;
1172
    --list-*)
1173
        NAME="${opt#--list-}"
1174
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1175
        NAME=${NAME%s}
1176
        eval show_list $NAME \$$(toupper $NAME)_LIST
1177
    ;;
1178
    --help|-h) show_help
1179
    ;;
1180
    *)
1181 884a36a7 Måns Rullgård
    optname="${opt%%=*}"
1182 26759c44 Måns Rullgård
    optname="${optname#--}"
1183
    optname=$(echo "$optname" | sed 's/-/_/g')
1184
    is_in $optname $CMDLINE_SET || die_unknown $opt
1185
    eval $optname='$optval'
1186 7483e694 Diego Biurrun
    ;;
1187
    esac
1188 c597172e Måns Rullgård
done
1189
1190 bcea99bb Måns Rullgård
disabled logging && logfile=/dev/null
1191
1192
echo "# $0 $@" > $logfile
1193
set >> $logfile
1194
1195 13c7df3d Måns Rullgård
cc_default="${cross_prefix}${cc_default}"
1196 304d586d Loren Merritt
yasmexe="${cross_prefix}${yasmexe}"
1197 adb2b908 Ramiro Polla
ar="${cross_prefix}${ar}"
1198
nm="${cross_prefix}${nm}"
1199
ranlib="${cross_prefix}${ranlib}"
1200
strip="${cross_prefix}${strip}"
1201
1202 13c7df3d Måns Rullgård
set_default cc
1203
1204 e4e69e0b Måns Rullgård
# set temporary file name
1205
if test ! -z "$TMPDIR" ; then
1206
    TMPDIR1="${TMPDIR}"
1207
elif test ! -z "$TEMPDIR" ; then
1208
    TMPDIR1="${TEMPDIR}"
1209
else
1210
    TMPDIR1="/tmp"
1211
fi
1212
1213
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1214
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1215
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1216
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1217
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1218
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1219
1220 e9b9a2f8 Michael Niedermayer
check_cflags -std=c99
1221
1222 b24dbcbd Ramiro Polla
case "$arch" in
1223
    i386|i486|i586|i686|i86pc|BePC)
1224
        arch="x86_32"
1225
        enable fast_unaligned
1226
    ;;
1227
    x86_64|amd64)
1228
        arch="x86_32"
1229
        enable fast_unaligned
1230
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1231
        int test[sizeof(char*) - 7];
1232
EOF
1233
    ;;
1234
    # armv4l is a subset of armv[567]*l
1235
    arm|armv[4567]*l)
1236
        arch="armv4l"
1237
    ;;
1238
    alpha)
1239
        arch="alpha"
1240
        enable fast_64bit
1241
    ;;
1242
    "Power Macintosh"|ppc|powerpc)
1243
        arch="powerpc"
1244 aa8bc0f1 Måns Rullgård
        enable fast_unaligned
1245 b24dbcbd Ramiro Polla
    ;;
1246
    ppc64)
1247
        arch="powerpc"
1248
        enable fast_64bit
1249 aa8bc0f1 Måns Rullgård
        enable fast_unaligned
1250 b24dbcbd Ramiro Polla
    ;;
1251
    mips|mipsel|IP*)
1252
        arch="mips"
1253
    ;;
1254
    sun4u|sparc64)
1255
        arch="sparc64"
1256
        enable fast_64bit
1257
    ;;
1258
    sparc)
1259
        arch="sparc"
1260
    ;;
1261
    sh4)
1262
        arch="sh4"
1263
    ;;
1264
    parisc)
1265
        arch="parisc"
1266
    ;;
1267
    parisc64)
1268
        arch="parisc"
1269
        enable fast_64bit
1270
    ;;
1271
    s390|s390x)
1272
        arch="s390"
1273
    ;;
1274
    m68k)
1275
        arch="m68k"
1276
    ;;
1277
    ia64)
1278
        arch="ia64"
1279
        enable fast_64bit
1280
    ;;
1281
    bfin)
1282
        arch="bfin"
1283
    ;;
1284
    *)
1285
        arch="unknown"
1286
    ;;
1287
esac
1288
1289
enable $arch
1290
enabled_any x86_32 x86_64 && enable x86
1291
enabled     sparc64       && enable sparc
1292
1293 7483e694 Diego Biurrun
# OS specific
1294 4f854758 Diego Biurrun
case $target_os in
1295 7483e694 Diego Biurrun
    beos|haiku|zeta)
1296 c9d19248 Måns Rullgård
        prefix_default="$HOME/config"
1297 7483e694 Diego Biurrun
        # helps building libavcodec
1298
        add_cflags "-DPIC -fomit-frame-pointer"
1299
        # 3 gcc releases known for BeOS, each with ugly bugs
1300
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1301
        case "$gcc_version" in
1302
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1303
            disable mmx
1304
            ;;
1305
          *20010315*) echo "BeBits gcc"
1306
            add_cflags "-fno-expensive-optimizations"
1307
            ;;
1308
        esac
1309
        SHFLAGS=-nostart
1310
        # enable BeOS things
1311
        enable audio_beos
1312
        # no need for libm, but the inet stuff
1313
        # Check for BONE
1314
        # XXX: actually should check for NOT net_server
1315 78fe7631 Diego Biurrun
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1316 7483e694 Diego Biurrun
            network_extralibs="-lbind -lsocket"
1317
        else
1318
            enable beos_netserver
1319
            network_extralibs="-lnet"
1320
        fi ;;
1321
    sunos)
1322
        FFSERVERLDFLAGS=""
1323 9987769a Måns Rullgård
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1324 7483e694 Diego Biurrun
        network_extralibs="-lsocket -lnsl"
1325
        ;;
1326
    netbsd)
1327
        oss_demuxer_extralibs="-lossaudio"
1328
        oss_muxer_extralibs="-lossaudio"
1329
        ;;
1330
    openbsd)
1331
        disable need_memalign
1332
        LIBOBJFLAGS='$(PIC)'
1333
        SHFLAGS='-shared'
1334
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1335
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1336
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1337
        oss_demuxer_extralibs="-lossaudio"
1338
        oss_muxer_extralibs="-lossaudio"
1339
        ;;
1340
    freebsd)
1341
        disable need_memalign
1342
        ;;
1343
    bsd/os)
1344
        osextralibs="-lpoll -lgnugetopt"
1345
        strip="strip -d"
1346
        ;;
1347
    darwin)
1348
        disable need_memalign
1349 0138c54e Diego Biurrun
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1350 9987769a Måns Rullgård
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1351 7483e694 Diego Biurrun
        strip="strip -x"
1352
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1353
        SLIBSUF=".dylib"
1354
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1355
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1356
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1357 304d586d Loren Merritt
        objformat="macho"
1358 1b0f6fb8 David Conrad
        enabled x86_64 && objformat="macho64"
1359 7483e694 Diego Biurrun
        ;;
1360
    mingw32*)
1361 4f854758 Diego Biurrun
        target_os=mingw32
1362 dcc01c06 Ramiro Polla
        LIBTARGET=i386
1363
        if test $arch = x86_64; then
1364
            disable need_memalign
1365
            LIBTARGET=x64
1366
        fi
1367 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
1368 7483e694 Diego Biurrun
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1369
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1370 13ca50f3 Diego Biurrun
        if enabled swscale; then
1371 7483e694 Diego Biurrun
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1372
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1373
        fi
1374
        disable ffserver
1375
        SLIBPREF=""
1376
        SLIBSUF=".dll"
1377
        EXESUF=".exe"
1378
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1379
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1380 dcc01c06 Ramiro Polla
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1381 4c25d159 Ramiro Polla
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1382
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1383 7483e694 Diego Biurrun
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1384 71c61f62 Måns Rullgård
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1385 304d586d Loren Merritt
        objformat="win32"
1386 bc574408 Ramiro Polla
        enable dos_paths
1387 7483e694 Diego Biurrun
        ;;
1388
    cygwin*)
1389 4f854758 Diego Biurrun
        target_os=cygwin
1390 fbd971a4 Diego Biurrun
        shlibdir_default="$bindir_default"
1391 7483e694 Diego Biurrun
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1392
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1393 13ca50f3 Diego Biurrun
        if enabled swscale; then
1394 7483e694 Diego Biurrun
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1395
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1396
        fi
1397
        EXESUF=".exe"
1398
        SLIBPREF="cyg"
1399
        SLIBSUF=".dll"
1400
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1401
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1402
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1403 304d586d Loren Merritt
        objformat="win32"
1404 bc574408 Ramiro Polla
        enable dos_paths
1405 7483e694 Diego Biurrun
        ;;
1406 4f365f37 Michael Kostylev
    *-dos|freedos|opendos)
1407
        disable ffplay ffserver vhook
1408
        disable $INDEV_LIST $OUTDEV_LIST
1409
        network_extralibs="-lsocket"
1410
        EXESUF=".exe"
1411 304d586d Loren Merritt
        objformat="win32"
1412 bc574408 Ramiro Polla
        enable dos_paths
1413 4f365f37 Michael Kostylev
        ;;
1414 7483e694 Diego Biurrun
    linux)
1415
        enable dv1394
1416
        ;;
1417
    irix*)
1418 4f854758 Diego Biurrun
        target_os=irix
1419 7483e694 Diego Biurrun
        ranlib="echo ignoring ranlib"
1420
        ;;
1421 d22e8442 Dave Yeo
    os/2*)
1422
        strip="lxlite"
1423
        ln_s="cp -f"
1424
        EXESUF=".exe"
1425
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1426 71c61f62 Måns Rullgård
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1427 d22e8442 Dave Yeo
        FFSERVERLDFLAGS=""
1428 287d3b13 Dave Yeo
        LIBSUF="_s.a"
1429 d22e8442 Dave Yeo
        SLIBPREF=""
1430
        SLIBSUF=".dll"
1431
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1432
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1433 71c61f62 Måns Rullgård
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1434
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1435
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1436
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1437
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1438
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1439
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1440
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1441
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1442 d22e8442 Dave Yeo
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1443 c6eed369 Ramiro Polla
        disable vhook
1444 bc574408 Ramiro Polla
        enable dos_paths
1445 d22e8442 Dave Yeo
        ;;
1446 269820f1 Peter Ross
    interix)
1447
        disable vhook
1448
        ;;
1449 d22e8442 Dave Yeo
1450 7483e694 Diego Biurrun
    *)
1451 4f854758 Diego Biurrun
        target_os="${target_os}-UNKNOWN"
1452 7483e694 Diego Biurrun
        ;;
1453
esac
1454
1455 c9d19248 Måns Rullgård
set_default $PATHS_LIST
1456
1457 c597172e Måns Rullgård
add_extralibs $osextralibs
1458 de6d9b64 Fabrice Bellard
1459 28d8e661 Diego Biurrun
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1460
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1461 e89b8b0a Diego Biurrun
1462 497237c7 Ramiro Polla
test -n "$cross_prefix" && enable cross_compile
1463 1ea46bed Måns Rullgård
1464 320d060a Diego Biurrun
# we need to build at least one lib type
1465 93b3c083 Måns Rullgård
if ! enabled_any static shared; then
1466 320d060a Diego Biurrun
    cat <<EOF
1467
At least one library type must be built.
1468
Specify --enable-static to build the static libraries or --enable-shared to
1469
build the shared libraries as well. To only build the shared libraries specify
1470
--disable-static in addition to --enable-shared.
1471
EOF
1472
    exit 1;
1473
fi
1474
1475 abc4e572 Diego Biurrun
disabled static && LIBNAME=""
1476 2a320695 Ramiro Polla
1477 a2234ceb Ramiro Polla
if enabled_any libfaad libfaadbin ; then
1478
    if check_header faad.h; then
1479 295b8c70 Diego Biurrun
        check_cc <<EOF
1480 a2234ceb Ramiro Polla
#include <faad.h>
1481
#ifndef FAAD2_VERSION
1482
ok faad1
1483
#endif
1484 db817cf3 Diego Biurrun
int main(void) { return 0; }
1485 a2234ceb Ramiro Polla
EOF
1486
        test $? = 0 && enable libfaad2
1487
    else
1488 ff3dac65 Diego Biurrun
        die "FAAD test failed."
1489 a2234ceb Ramiro Polla
    fi
1490
fi
1491
1492
1493 93b3c083 Måns Rullgård
if ! enabled gpl; then
1494 54118497 Ramiro Polla
    die_gpl_disabled(){
1495
        name=$1
1496
        shift
1497
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1498
    }
1499 4a24ab64 Diego Biurrun
    die_gpl_disabled "The Postprocessing code" postproc
1500 1cc60c47 Diego Biurrun
    die_gpl_disabled "libx264"                 libx264
1501
    die_gpl_disabled "libxvidcore"             libxvid
1502 54118497 Ramiro Polla
    die_gpl_disabled "FAAD2"                   libfaad2
1503
    die_gpl_disabled "The X11 grabber"         x11grab
1504 13ca50f3 Diego Biurrun
    die_gpl_disabled "The software scaler"     swscale
1505 ebb810d9 Ramiro Polla
fi
1506 b2e3c528 Michael Niedermayer
1507 3fe142e2 Diego Biurrun
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1508
    die "libamr is nonfree and --enable-nonfree is not specified."
1509
fi
1510
1511 9eeed841 Måns Rullgård
check_deps $ARCH_EXT_LIST
1512 0f3cb305 Fabrice Bellard
1513 5d323602 Måns Rullgård
test -z "$need_memalign" && need_memalign="$mmx"
1514
1515 cf9d24ad Dan Christiansen
#Darwin CC versions
1516 4f854758 Diego Biurrun
if test $target_os = darwin; then
1517 3dddba4b Diego Biurrun
    if $cc -v 2>&1 | grep -q xlc; then
1518 30a3e5d4 Nigel Pearson
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1519 cf9d24ad Dan Christiansen
    else
1520 8541cc27 İsmail Dönmez
        add_cflags "-pipe"
1521 26c1b3be Diego Biurrun
        check_cflags "-force_cpusubtype_ALL"
1522
        check_cflags "-Wno-sign-compare"
1523 f946a9a4 Alexander Strange
        enabled shared || check_cflags -mdynamic-no-pic
1524 cf9d24ad Dan Christiansen
    fi
1525 2a1a6b64 Michael Niedermayer
fi
1526
1527 40617a6d Ben Taylor
disabled optimizations || check_cflags -fomit-frame-pointer
1528 cf9d24ad Dan Christiansen
1529 a4adb608 Michael Niedermayer
# Add processor-specific flags
1530 38d0a8aa Guillaume Poirier
if test $cpu != "generic"; then
1531 bc8ec47b Måns Rullgård
    warn_altivec(){
1532
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1533 1658bc4f Diego Biurrun
    }
1534 38d0a8aa Guillaume Poirier
    case $cpu in
1535 bb270c08 Diego Biurrun
        601|ppc601|PowerPC601)
1536 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=601"
1537 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC601
1538 bb270c08 Diego Biurrun
        ;;
1539
        603*|ppc603*|PowerPC603*)
1540 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=603"
1541 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC603
1542 bb270c08 Diego Biurrun
        ;;
1543
        604*|ppc604*|PowerPC604*)
1544 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=604"
1545 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC604
1546 bb270c08 Diego Biurrun
        ;;
1547
        G3|g3|75*|ppc75*|PowerPC75*)
1548 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1549 bc8ec47b Måns Rullgård
            warn_altivec enabled PPC75x
1550 bb270c08 Diego Biurrun
        ;;
1551
        G4|g4|745*|ppc745*|PowerPC745*)
1552 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1553 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC745x
1554 bb270c08 Diego Biurrun
        ;;
1555
        74*|ppc74*|PowerPC74*)
1556 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1557 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC74xx
1558 bb270c08 Diego Biurrun
        ;;
1559
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1560 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1561 bc8ec47b Måns Rullgård
            warn_altivec disabled PPC970
1562 9cafbd6c Måns Rullgård
            enable ppc64
1563 bb270c08 Diego Biurrun
        ;;
1564 e07e357d Luca Barbato
        Cell|CELL|cell)
1565
            add_cflags "-mcpu=cell"
1566
            warn_altivec disabled Cell
1567 9cafbd6c Måns Rullgård
            enable ppc64
1568 e07e357d Luca Barbato
        ;;
1569 e7768fc5 Guillaume Poirier
        # targets that do NOT support conditional mov (cmov)
1570
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1571 38d0a8aa Guillaume Poirier
            add_cflags "-march=$cpu"
1572 497237c7 Ramiro Polla
            disable cmov
1573 e7768fc5 Guillaume Poirier
        ;;
1574
        # targets that do support conditional mov (cmov)
1575 416519dd Måns Rullgård
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1576 e7768fc5 Guillaume Poirier
            add_cflags "-march=$cpu"
1577 497237c7 Ramiro Polla
            enable cmov
1578
            enable fast_cmov
1579 94e4c3a3 Guillaume Poirier
        ;;
1580
        # targets that do support conditional mov but on which it's slow
1581 800a5a19 Igor Mozolevsky
        pentium4|pentium4m|prescott|nocona)
1582 94e4c3a3 Guillaume Poirier
            add_cflags "-march=$cpu"
1583 497237c7 Ramiro Polla
            enable cmov
1584
            disable fast_cmov
1585 bb270c08 Diego Biurrun
        ;;
1586 d7b34d08 Diego Biurrun
        sparc64)
1587 1c5d830c Guillaume Poirier
            add_cflags "-mcpu=v9"
1588 d7b34d08 Diego Biurrun
        ;;
1589 f2e49553 Måns Rullgård
        arm11*|cortex*)
1590
            add_cflags "-mcpu=$cpu"
1591
            enable fast_unaligned
1592
        ;;
1593 0223bd6f Måns Rullgård
        armv*)
1594
            add_cflags "-march=$cpu"
1595
        ;;
1596 f2e49553 Måns Rullgård
        arm*)
1597 6b19786b Måns Rullgård
            add_cflags "-mcpu=$cpu"
1598
        ;;
1599 bb270c08 Diego Biurrun
        *)
1600 7483e694 Diego Biurrun
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1601 bb270c08 Diego Biurrun
        ;;
1602 a4adb608 Michael Niedermayer
    esac
1603
fi
1604
1605 be0d52ab Måns Rullgård
# make sure we can execute files in $TMPDIR
1606 2270b4b2 Diego Biurrun
cat > $TMPSH 2>> $logfile <<EOF
1607 be0d52ab Måns Rullgård
#! /bin/sh
1608
EOF
1609 2270b4b2 Diego Biurrun
chmod +x $TMPSH >> $logfile 2>&1
1610
if ! $TMPSH >> $logfile 2>&1; then
1611 be0d52ab Måns Rullgård
    cat <<EOF
1612
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1613 68300911 Diego Biurrun
variable to another directory and make sure that $TMPDIR1 is not mounted
1614
noexec.
1615 be0d52ab Måns Rullgård
EOF
1616
    die "Sanity test failed."
1617
fi
1618 edd08265 Diego Biurrun
rm $TMPSH
1619 be0d52ab Måns Rullgård
1620 1a268acc Måns Rullgård
# compiler sanity check
1621
check_exec <<EOF
1622 c23a0ac8 Diego Biurrun
int main(void){ return 0; }
1623 1a268acc Måns Rullgård
EOF
1624
if test "$?" != 0; then
1625
    echo "$cc is unable to create an executable file."
1626 93b3c083 Måns Rullgård
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1627 db6107b6 Diego Biurrun
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1628 c7ae6345 Måns Rullgård
        echo "Only do this if you know what cross compiling means."
1629 1a268acc Måns Rullgård
    fi
1630
    die "C compiler test failed."
1631
fi
1632
1633 b4d96ba2 Måns Rullgård
check_cc <<EOF || die "Symbol mangling check failed."
1634
int ff_extern;
1635
EOF
1636 2f05d9c1 Matthieu Castet
sym=$($nm -P -g $TMPO | grep ff_extern)
1637 b4d96ba2 Måns Rullgård
extern_prefix=${sym%%ff_extern*}
1638
1639 61d251db Måns Rullgård
check_asm inline_asm '""'
1640
1641 9eeed841 Måns Rullgård
if enabled x86; then
1642 44965991 Panagiotis Issaris
    # check whether EBP is available on x86
1643
    # As 'i' is stored on the stack, this program will crash
1644
    # if the base pointer is used to access it because the
1645
    # base pointer is cleared in the inline assembly code.
1646 7dfef245 Måns Rullgård
    check_exec_crash <<EOF && enable ebp_available
1647 44965991 Panagiotis Issaris
    volatile int i=0;
1648 be449fca Diego Pettenò
    __asm__ volatile (
1649 44965991 Panagiotis Issaris
        "xorl %%ebp, %%ebp"
1650
    ::: "%ebp");
1651
    return i;
1652
EOF
1653
1654
    # check wether EBX is available on x86
1655 940f335a Måns Rullgård
    check_asm ebx_available '"":::"%ebx"'
1656 8e380710 Loren Merritt
1657 d7f0920b Alexander Strange
    # check whether binutils is new enough to compile SSSE3/MMX2
1658 940f335a Måns Rullgård
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1659 d7f0920b Alexander Strange
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1660 6bd859d6 Måns Rullgård
1661
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1662 304d586d Loren Merritt
1663
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1664
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1665
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1666
    case "$objformat" in
1667
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1668 1b0f6fb8 David Conrad
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1669 304d586d Loren Merritt
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1670
    esac
1671
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1672 44965991 Panagiotis Issaris
fi
1673
1674 87ea51e0 Luca Barbato
# check for assembler specific support
1675
1676 cc6a90dd Guillaume Poirier
if test $arch = "powerpc"; then
1677 5eb39de9 Måns Rullgård
    check_asm dcbzl '"dcbzl 0, 1"'
1678 87ea51e0 Luca Barbato
fi
1679
1680 57bd82d4 Måns Rullgård
# check for SIMD availability
1681
1682 115329f1 Diego Biurrun
# AltiVec flags: The FSF version of GCC differs from the Apple version
1683 9eeed841 Måns Rullgård
if enabled altivec; then
1684 3ed1a2ee Diego Biurrun
    check_cflags -maltivec -mabi=altivec &&
1685
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1686 4477b9f4 Diego Biurrun
        check_cflags -faltivec
1687 b6e52719 Magnus Damm
1688 0182fee8 Måns Rullgård
    # check if our compiler supports Motorola AltiVec C API
1689 497237c7 Ramiro Polla
    check_cc <<EOF || disable altivec
1690 dcd479c0 Måns Rullgård
$inc_altivec_h
1691 a9a07762 Michael Niedermayer
int main(void) {
1692
    vector signed int v1, v2, v3;
1693
    v1 = vec_add(v2,v3);
1694
    return 0;
1695
}
1696
EOF
1697 b006b26c Diego Biurrun
1698
    # check if our compiler supports braces for vector declarations
1699 80a61f08 Diego Biurrun
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1700 b006b26c Diego Biurrun
$inc_altivec_h
1701 80a61f08 Diego Biurrun
int main (void) { (vector int) {1}; return 0; }
1702 b006b26c Diego Biurrun
EOF
1703 a9a07762 Michael Niedermayer
fi
1704 ab6c65f6 Brian Foley
1705 b4e806b2 Matthieu Castet
# We have to check if pld is a nop and disable it.
1706
enabled armv4l  && check_asm pld     '"pld [r0]"'
1707 940f335a Måns Rullgård
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1708
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1709 f55b299a Måns Rullgård
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1710 940f335a Måns Rullgård
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1711
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1712 6b18d278 Måns Rullgård
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1713 940f335a Måns Rullgård
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1714 bd9d34a0 Diego Biurrun
1715 8b03def6 Diego Biurrun
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1716
1717 57bd82d4 Måns Rullgård
# ---
1718
# big/little-endian test
1719 9eebe687 Måns Rullgård
check_cc <<EOF || die "endian test failed"
1720
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1721 a3999908 Michael Niedermayer
EOF
1722 d04d9e16 Måns Rullgård
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1723 487a54d7 Fabrice Bellard
1724 a3999908 Michael Niedermayer
# ---
1725 3d204385 Nick Kurshev
# check availability of some header files
1726
1727 a98bb16d Ramiro Polla
if check_func dlopen; then
1728
    ldl=
1729
elif check_func dlopen -ldl; then
1730
    ldl=-ldl
1731 8bf5d58f Michael Niedermayer
fi
1732
1733 7483e694 Diego Biurrun
check_func  fork
1734
check_func  gethrtime
1735
check_func  getrusage
1736 094c09bb Michael Kostylev
check_func  inet_aton $network_extralibs
1737 7483e694 Diego Biurrun
check_func  memalign
1738
check_func  mkstemp
1739 2446d3d6 Diego Biurrun
check_func_headers windows.h GetProcessTimes
1740 6ffa87d3 Ramiro Polla
1741 e16e49ac Ramiro Polla
check_header conio.h
1742 a98bb16d Ramiro Polla
check_header dlfcn.h
1743
check_header malloc.h
1744 bf6ce82d Diego Biurrun
check_header poll.h
1745 b58412f1 Alexander Strange
check_header sys/mman.h
1746 b091aa44 Ramiro Polla
check_header sys/resource.h
1747 bf6ce82d Diego Biurrun
check_header sys/select.h
1748 a98bb16d Ramiro Polla
check_header termios.h
1749
1750
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1751
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1752
fi
1753 e16e49ac Ramiro Polla
1754 e8214e0e Aurelien Jacobs
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1755 f402916e Aurelien Jacobs
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1756 57bd82d4 Måns Rullgård
1757
# check for some common methods of building with pthread support
1758
# do this before the optional library checks as some of them require pthreads
1759
if enabled pthreads; then
1760 9e7fd101 Måns Rullgård
    if check_func pthread_create; then
1761
        :
1762
    elif check_func pthread_create -pthread; then
1763
        add_cflags -pthread
1764 afc9aee2 Diego Biurrun
        add_extralibs -pthread
1765 9e7fd101 Måns Rullgård
    elif check_func pthread_create -pthreads; then
1766
        add_cflags -pthreads
1767 afc9aee2 Diego Biurrun
        add_extralibs -pthreads
1768 8d94f606 Gianluigi Tiesi
    elif check_func pthread_create -lpthreadGC2; then
1769
        add_extralibs -lpthreadGC2
1770 9e7fd101 Måns Rullgård
    elif ! check_lib pthread.h pthread_create -lpthread; then
1771
        die "ERROR: can't find pthreads library"
1772
    fi
1773 57bd82d4 Måns Rullgård
fi
1774
1775 8eee7025 Diego Biurrun
for thread in $THREADS_LIST; do
1776 e5f94c2b Ramiro Polla
    if enabled $thread; then
1777 3ae3b721 Ramiro Polla
        test -n "$thread_type" &&
1778
            die "ERROR: Only one thread type must be selected." ||
1779 e5f94c2b Ramiro Polla
            thread_type="$thread"
1780
    fi
1781
done
1782
1783 fdf88598 Måns Rullgård
check_lib math.h sin -lm
1784
1785 a33cab3a Michael Kostylev
# test for C99 functions in math.h
1786
for func in llrint lrint lrintf round roundf; do
1787
    check_exec <<EOF && enable $func || disable $func
1788 f32adb22 Måns Rullgård
#include <math.h>
1789 a33cab3a Michael Kostylev
int main(void) { return ($func(3.999f) > 0)?0:1; }
1790 f32adb22 Måns Rullgård
EOF
1791 a33cab3a Michael Kostylev
done
1792 f32adb22 Måns Rullgård
1793 57bd82d4 Måns Rullgård
# these are off by default, so fail if requested and not available
1794 79fda097 Diego Biurrun
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1795 7483e694 Diego Biurrun
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1796
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1797 e3cc7d6f Diego Biurrun
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1798 36718e51 Diego Biurrun
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1799
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1800 79fda097 Diego Biurrun
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1801
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1802 7483e694 Diego Biurrun
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1803
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1804
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1805 36718e51 Diego Biurrun
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1806
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1807 ae14f311 David Conrad
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1808 7483e694 Diego Biurrun
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1809
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1810 36718e51 Diego Biurrun
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1811 57f0ec6e Måns Rullgård
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1812
                        die "ERROR: libx264 version must be >= 0.65."; }
1813 7483e694 Diego Biurrun
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1814
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1815 8ac17293 Steve L'Homme
1816 0b4a1821 Alessandro Sappia
# libdc1394 check
1817
if enabled libdc1394; then
1818
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1819
        enable libdc1394_2; } ||
1820
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1821
        enable libdc1394_1; } ||
1822
    die "ERROR: No version of libdc1394 found "
1823
fi
1824
1825
1826 c13e1abd Falk Hüffner
_restrict=
1827
for restrict_keyword in restrict __restrict__ __restrict; do
1828 57bd82d4 Måns Rullgård
    check_cc <<EOF && _restrict=$restrict_keyword && break
1829 dcd479c0 Måns Rullgård
void foo(char * $restrict_keyword p);
1830
EOF
1831 c13e1abd Falk Hüffner
done
1832
1833 703afd07 Måns Rullgård
test "$vhook" = "default" && vhook="$dlopen"
1834 a8721c09 Fabrice Bellard
1835 4f854758 Diego Biurrun
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1836 497237c7 Ramiro Polla
    disable vhook
1837 fbb9d104 Víctor Paesa
    echo
1838 b0268cc0 Ramiro Polla
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1839 fbb9d104 Víctor Paesa
    echo "Patches welcome."
1840
    echo
1841
fi
1842
1843 8d923001 Måns Rullgård
if enabled vhook; then
1844
    check_ldflags -rdynamic
1845
    check_ldflags -export-dynamic
1846
fi
1847 bfd2edeb Michael Niedermayer
1848 eea50282 Måns Rullgård
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1849
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1850 04511d53 Philip Gladstone
1851 a86b921c Fabrice Bellard
##########################################
1852 29799f8b Diego Biurrun
# SDL check
1853 a86b921c Fabrice Bellard
1854 497237c7 Ramiro Polla
disable sdl_too_old
1855
disable sdl
1856 6a1a892f Frantisek Dvorak
SDL_CONFIG="${cross_prefix}sdl-config"
1857 2270b4b2 Diego Biurrun
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1858 225e21ef Måns Rullgård
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1859
    temp_cflags $sdl_cflags
1860 dcd479c0 Måns Rullgård
    temp_extralibs `"${SDL_CONFIG}" --libs`
1861 1ca5d97f KO Myung-Hun
    if check_lib2 SDL.h SDL_Init; then
1862 dcd479c0 Måns Rullgård
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1863 29f3b38a Måns Rullgård
        if test "$_sdlversion" -lt 121 ; then
1864 497237c7 Ramiro Polla
            enable sdl_too_old
1865 dcd479c0 Måns Rullgård
        else
1866 497237c7 Ramiro Polla
            enable sdl
1867 225e21ef Måns Rullgård
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1868 29f3b38a Måns Rullgård
#include <SDL.h>
1869 d6773f56 Diego Biurrun
int main(int argc, char **argv){
1870 29f3b38a Måns Rullgård
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1871
    int w = vi->current_w;
1872
    return 0;
1873
}
1874
EOF
1875 dcd479c0 Måns Rullgård
        fi
1876
    fi
1877 29f3b38a Måns Rullgård
    restore_flags
1878 c3f6b472 Michael Niedermayer
fi
1879 57bd82d4 Måns Rullgård
1880 2270b4b2 Diego Biurrun
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1881 146ea952 Nicolas Boos
1882 7a91333f Hans Zandbelt
##########################################
1883 73b46a95 Ramiro Polla
# Network check
1884
1885
if enabled network; then
1886 668b65bd Diego Biurrun
    check_type sys/socket.h socklen_t
1887 73b46a95 Ramiro Polla
    # Prefer arpa/inet.h over winsock2
1888
    if check_header arpa/inet.h ; then
1889
        check_func closesocket
1890
    elif check_header winsock2.h ; then
1891 ea10ddde Ramiro Polla
        network_extralibs="-lws2_32"
1892 72be9e73 Dave Yeo
        check_type ws2tcpip.h socklen_t
1893 2446d3d6 Diego Biurrun
        check_func_headers winsock2.h closesocket
1894 73b46a95 Ramiro Polla
    fi
1895
fi
1896
1897
##########################################
1898 29799f8b Diego Biurrun
# IPv6 check
1899 7a91333f Hans Zandbelt
1900 497237c7 Ramiro Polla
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1901 7a91333f Hans Zandbelt
#include <sys/types.h>
1902
#include <sys/socket.h>
1903
#include <netinet/in.h>
1904
#include <netdb.h>
1905 db817cf3 Diego Biurrun
int main(void) {
1906 7483e694 Diego Biurrun
    struct sockaddr_storage saddr;
1907
    struct ipv6_mreq mreq6;
1908
    getaddrinfo(0,0,0,0);
1909
    getnameinfo(0,0,0,0,0,0,0);
1910
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1911 7a91333f Hans Zandbelt
}
1912
EOF
1913
1914 06e31011 Ramiro Polla
check_header linux/videodev.h
1915
check_header linux/videodev2.h
1916 1b6e8b73 Brad
check_header sys/videoio.h
1917 47f38850 Luca Abeni
1918 2446d3d6 Diego Biurrun
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1919 c2345207 Ramiro Polla
1920 f8aa696f Diego Biurrun
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1921 1c915f83 Ramiro Polla
{ check_header dev/bktr/ioctl_meteor.h &&
1922
  check_header dev/bktr/ioctl_bt848.h; } ||
1923
{ check_header machine/ioctl_meteor.h &&
1924
  check_header machine/ioctl_bt848.h; } ||
1925
{ check_header dev/video/meteor/ioctl_meteor.h &&
1926
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1927
check_header dev/ic/bt8xx.h
1928 f8aa696f Diego Biurrun
1929 c7682de0 Ramiro Polla
check_header sys/soundcard.h
1930
check_header soundcard.h
1931 deb29777 Måns Rullgård
1932 7483e694 Diego Biurrun
# deal with the X11 frame grabber
1933 56a059ac Diego Biurrun
enabled x11grab                         &&
1934 f58f4ce1 Guillaume Poirier
check_header X11/Xlib.h                 &&
1935
check_header X11/extensions/XShm.h      &&
1936
check_func XOpenDisplay -lX11           &&
1937 06eab4ba Ramiro Polla
check_func XShmCreateImage -lX11 -lXext
1938 f58f4ce1 Guillaume Poirier
1939 40bcf4c7 Benjamin Larsson
enabled debug && add_cflags -g"$debuglevel"
1940 57bd82d4 Måns Rullgård
1941
# add some useful compiler flags if supported
1942
check_cflags -Wdeclaration-after-statement
1943 dcd479c0 Måns Rullgård
check_cflags -Wall
1944
check_cflags -Wno-switch
1945 c07bd6a9 Michael Niedermayer
check_cflags -Wdisabled-optimization
1946
check_cflags -Wpointer-arith
1947
check_cflags -Wredundant-decls
1948 cc1fb623 Måns Rullgård
check_cflags -Wno-pointer-sign
1949 f4929996 Michael Niedermayer
check_cflags -Wcast-qual
1950 9aceb3cf Michael Niedermayer
check_cflags -Wwrite-strings
1951 652a5bf6 Michael Niedermayer
check_cflags -Wtype-limits
1952 5af4e0cc Måns Rullgård
enabled extra_warnings && check_cflags -Winline
1953 cf9d24ad Dan Christiansen
1954 57bd82d4 Måns Rullgård
# add some linker flags
1955 5c0e9479 Måns Rullgård
check_ldflags -Wl,--warn-common
1956 8351d2ba Diego Biurrun
check_ldflags -Wl,--as-needed
1957
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'
1958 c2fd6530 Måns Rullgård
check_ldflags -Wl,-Bsymbolic
1959 94a3401e Fabrice Bellard
1960 bd2216e4 Måns Rullgård
if enabled small; then
1961
    check_cflags -Os            # not all compilers support -Os
1962 8400d6b8 Diego Biurrun
    optimizations="small"
1963
elif enabled optimizations; then
1964 3dddba4b Diego Biurrun
    if $cc -v 2>&1 | grep -q xlc; then
1965 30a3e5d4 Nigel Pearson
        add_cflags  "-O5"
1966
        add_ldflags "-O5"
1967 cf9d24ad Dan Christiansen
    else
1968 30a3e5d4 Nigel Pearson
        add_cflags "-O3"
1969 cf9d24ad Dan Christiansen
    fi
1970 cddf3f45 Glenn Maynard
fi
1971 11fdbc44 Michael Niedermayer
check_cflags -fno-math-errno
1972 b2eb2ff0 Michael Niedermayer
check_cflags -fno-signed-zeros
1973 cddf3f45 Glenn Maynard
1974 504a64b9 Carl Eugen Hoyos
# add some flags for Intel C Compiler
1975 0c45cd07 Diego Pettenò
if $cc --version 2> /dev/null | grep -q Intel; then
1976 504a64b9 Carl Eugen Hoyos
  # Just warnings, no remarks
1977
  check_cflags -w1
1978
  # -wd: Disable following warnings
1979
  # 144, 167, 556: -Wno-pointer-sign
1980
  # 10006: ignoring unknown option -fno-signed-zeros
1981
  # 10156: ignoring option '-W'; no argument required
1982
  check_cflags -wd144,167,556,10006,10156
1983
  # 11030: Warning unknown option --as-needed
1984
  # 10156: ignoring option '-export'; no argument required
1985
  check_ldflags -wd10156,11030
1986 907eb3b5 Carl Eugen Hoyos
  # Allow to compile with optimizations
1987
  check_ldflags -march=$cpu
1988 504a64b9 Carl Eugen Hoyos
fi
1989
1990 80581e98 Michael Niedermayer
# PIC flags for shared library objects where they are needed
1991 5af4e0cc Måns Rullgård
if enabled shared; then
1992 569cb218 Måns Rullgård
    # LIBOBJFLAGS may have already been set in the OS configuration
1993
    if test -z "$LIBOBJFLAGS" ; then
1994
        case "$arch" in
1995 b6bd7268 Diego Biurrun
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1996 569cb218 Måns Rullgård
        esac
1997
    fi
1998 80581e98 Michael Niedermayer
fi
1999
2000 90be59ef Ramiro Polla
if enabled gprof; then
2001 30a3e5d4 Nigel Pearson
    add_cflags  "-p"
2002
    add_ldflags "-p"
2003 1db54e20 Diego Biurrun
fi
2004
2005 3b26ee47 Måns Rullgård
VHOOKCFLAGS="-fPIC"
2006 18451f7d Måns Rullgård
2007 7f3c02fc Diego Biurrun
# Find out if the .align argument is a power of two or not.
2008 4454dc1b John Dalgliesh
if test $asmalign_pot = "unknown"; then
2009 497237c7 Ramiro Polla
    disable asmalign_pot
2010 be449fca Diego Pettenò
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2011 4454dc1b John Dalgliesh
fi
2012
2013 7483e694 Diego Biurrun
enabled_any $DECODER_LIST      && enable decoders
2014
enabled_any $ENCODER_LIST      && enable encoders
2015
enabled_any $BSF_LIST          && enable bsfs
2016
enabled_any $DEMUXER_LIST      && enable demuxers
2017
enabled_any $MUXER_LIST        && enable muxers
2018 f7679c54 Vitor Sessak
enabled_any $FILTER_LIST       && enable filters
2019 7483e694 Diego Biurrun
enabled_any $INDEV_LIST        && enable demuxers
2020
enabled_any $OUTDEV_LIST       && enable muxers
2021
enabled_any $PROTOCOL_LIST     && enable protocols
2022
2023
enabled_any $THREADS_LIST      && enable threads
2024
2025
check_deps $CONFIG_LIST       \
2026 b6bb00b0 Måns Rullgård
           $CONFIG_EXTRA      \
2027 7483e694 Diego Biurrun
           $HAVE_LIST         \
2028
           $DECODER_LIST      \
2029
           $ENCODER_LIST      \
2030
           $PARSER_LIST       \
2031
           $BSF_LIST          \
2032
           $DEMUXER_LIST      \
2033
           $MUXER_LIST        \
2034 f7679c54 Vitor Sessak
           $FILTER_LIST       \
2035 7483e694 Diego Biurrun
           $INDEV_LIST        \
2036
           $OUTDEV_LIST       \
2037
           $PROTOCOL_LIST     \
2038 f70f03f6 Måns Rullgård
2039 f7b8bffe Ramiro Polla
enabled libdc1394 && append pkg_requires "libraw1394"
2040 690bfceb Anuradha Suraparaju
enabled libdirac  && append pkg_requires "dirac"
2041 fb2ce7d9 Måns Rullgård
enabled libtheora && append pkg_requires "theora"
2042 f9def9cc Diego Biurrun
enabled libvorbis && append pkg_requires "vorbisenc"
2043 fb2ce7d9 Måns Rullgård
2044 3e89171a Måns Rullgård
echo "install prefix            $prefix"
2045 f36958f8 Diego Biurrun
echo "source path               $source_path"
2046
echo "C compiler                $cc"
2047 bfd5afd8 Diego Biurrun
echo ".align is power-of-two    $asmalign_pot"
2048 f36958f8 Diego Biurrun
echo "ARCH                      $arch ($cpu)"
2049 ce8871c2 Måns Rullgård
if test "$build_suffix" != ""; then
2050
    echo "build suffix              $build_suffix"
2051 eb94aca9 Charles Yates
fi
2052 ac63af34 Diego Biurrun
if test "$extra_version" != ""; then
2053
    echo "version string suffix     $extra_version"
2054
fi
2055 0db2ce77 Måns Rullgård
echo "big-endian                ${bigendian-no}"
2056 419b8784 Diego Biurrun
if test $arch = "x86_32" -o $arch = "x86_64"; then
2057 af44e8e4 Carl Eugen Hoyos
    echo "yasm                      ${yasm-no}"
2058 0db2ce77 Måns Rullgård
    echo "MMX enabled               ${mmx-no}"
2059
    echo "CMOV enabled              ${cmov-no}"
2060
    echo "CMOV is fast              ${fast_cmov-no}"
2061 971cc990 Michael Niedermayer
    echo "EBX available             ${ebx_available-no}"
2062
    echo "EBP available             ${ebp_available-no}"
2063 e41e8342 Fabrice Bellard
fi
2064 cc6a90dd Guillaume Poirier
if test $arch = "armv4l"; then
2065 0db2ce77 Måns Rullgård
    echo "ARMv5TE enabled           ${armv5te-no}"
2066
    echo "ARMv6 enabled             ${armv6-no}"
2067 f55b299a Måns Rullgård
    echo "ARM VFP enabled           ${armvfp-no}"
2068 0db2ce77 Måns Rullgård
    echo "IWMMXT enabled            ${iwmmxt-no}"
2069 6b18d278 Måns Rullgård
    echo "NEON enabled              ${neon-no}"
2070 eba9ae3c Gildas Bazin
fi
2071 e241ba14 Diego Biurrun
if test $arch = "mips"; then
2072 0db2ce77 Måns Rullgård
    echo "MMI enabled               ${mmi-no}"
2073 e41e8342 Fabrice Bellard
fi
2074 cc6a90dd Guillaume Poirier
if test $arch = "powerpc"; then
2075 0db2ce77 Måns Rullgård
    echo "AltiVec enabled           ${altivec-no}"
2076
    echo "dcbzl available           ${dcbzl-no}"
2077 e41e8342 Fabrice Bellard
fi
2078 0db2ce77 Måns Rullgård
echo "gprof enabled             ${gprof-no}"
2079
echo "debug symbols             ${debug-no}"
2080 87a0fb62 Diego Biurrun
echo "strip symbols             ${stripping-no}"
2081 8400d6b8 Diego Biurrun
echo "optimizations             ${optimizations-no}"
2082 0db2ce77 Måns Rullgård
echo "static                    ${static-no}"
2083
echo "shared                    ${shared-no}"
2084 4a24ab64 Diego Biurrun
echo "postprocessing support    ${postproc-no}"
2085 13ca50f3 Diego Biurrun
echo "software scaler enabled   ${swscale-no}"
2086 f7679c54 Vitor Sessak
echo "new filter support        ${avfilter-no}"
2087 81124ba0 Vitor Sessak
echo "filters using lavformat   ${avfilter_lavf-no}"
2088 0db2ce77 Måns Rullgård
echo "video hooking             ${vhook-no}"
2089 90be59ef Ramiro Polla
if enabled vhook; then
2090 0db2ce77 Måns Rullgård
    echo "Imlib2 support            ${imlib2-no}"
2091
    echo "FreeType support          ${freetype2-no}"
2092 68892110 Philip Gladstone
fi
2093 0db2ce77 Måns Rullgård
echo "network support           ${network-no}"
2094 90be59ef Ramiro Polla
if enabled network; then
2095 0db2ce77 Måns Rullgård
    echo "IPv6 support              ${ipv6-no}"
2096 bfd5afd8 Diego Biurrun
fi
2097 0db2ce77 Måns Rullgård
echo "threading support         ${thread_type-no}"
2098
echo "SDL support               ${sdl-no}"
2099 90be59ef Ramiro Polla
if enabled sdl_too_old; then
2100 bfd5afd8 Diego Biurrun
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2101
fi
2102 0db2ce77 Måns Rullgård
echo "Sun medialib support      ${mlib-no}"
2103
echo "AVISynth enabled          ${avisynth-no}"
2104
echo "libamr-nb support         ${libamr_nb-no}"
2105
echo "libamr-wb support         ${libamr_wb-no}"
2106 f7b8bffe Ramiro Polla
echo "libdc1394 support         ${libdc1394-no}"
2107 690bfceb Anuradha Suraparaju
echo "libdirac enabled          ${libdirac-no}"
2108 0db2ce77 Måns Rullgård
echo "libfaac enabled           ${libfaac-no}"
2109
echo "libfaad enabled           ${libfaad-no}"
2110 7e0871a7 Diego Biurrun
echo "libfaad dlopened          ${libfaadbin-no}"
2111 0db2ce77 Måns Rullgård
echo "libgsm enabled            ${libgsm-no}"
2112
echo "libmp3lame enabled        ${libmp3lame-no}"
2113
echo "libnut enabled            ${libnut-no}"
2114 f7cd9eed Anuradha Suraparaju
echo "libschroedinger enabled   ${libschroedinger-no}"
2115 ae14f311 David Conrad
echo "libspeex enabled          ${libspeex-no}"
2116 0db2ce77 Måns Rullgård
echo "libtheora enabled         ${libtheora-no}"
2117
echo "libvorbis enabled         ${libvorbis-no}"
2118 d6bd62db Diego Biurrun
echo "libx264 enabled           ${libx264-no}"
2119
echo "libxvid enabled           ${libxvid-no}"
2120 0db2ce77 Måns Rullgård
echo "zlib enabled              ${zlib-no}"
2121 f402916e Aurelien Jacobs
echo "bzlib enabled             ${bzlib-no}"
2122 2c62e737 Diego Biurrun
echo
2123 de6d9b64 Fabrice Bellard
2124 f7679c54 Vitor Sessak
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2125 8138b9db Ramiro Polla
    echo "Enabled ${type}s:"
2126 f65c9da1 Måns Rullgård
    eval list=\$$(toupper $type)_LIST
2127 8138b9db Ramiro Polla
    for part in $list; do
2128 f65c9da1 Måns Rullgård
        enabled $part && echo ${part%_*}
2129
    done | sort | pr -3 -t
2130
    echo
2131 8138b9db Ramiro Polla
done
2132
2133 ba321adb Jeremy Kolb
license="LGPL"
2134
if enabled nonfree; then
2135
    license="unredistributable"
2136
elif enabled gpl; then
2137
    license="GPL"
2138
fi
2139
2140
echo "License: $license"
2141 ca5323af Roberto Togni
2142 cf1392e9 Diego Biurrun
echo "Creating config.mak and config.h..."
2143
2144 29799f8b Diego Biurrun
echo "# Automatically generated by configure - do not modify!" > config.mak
2145
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2146 9c05103f Diego Biurrun
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2147
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2148 0fd12426 Diego Biurrun
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2149 de6d9b64 Fabrice Bellard
2150 d921f03f Diego Biurrun
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2151 c9d19248 Måns Rullgård
echo "prefix=$prefix" >> config.mak
2152 22a324da Diego Biurrun
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2153
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2154
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2155
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2156
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2157 980fc7b8 Fabrice Bellard
echo "CC=$cc" >> config.mak
2158 304d586d Loren Merritt
echo "YASM=$yasmexe" >> config.mak
2159 980fc7b8 Fabrice Bellard
echo "AR=$ar" >> config.mak
2160 be7109c1 Michael Niedermayer
echo "RANLIB=$ranlib" >> config.mak
2161 20369773 Dave Yeo
echo "LN_S=$ln_s" >> config.mak
2162 87a0fb62 Diego Biurrun
enabled stripping &&
2163 3ae3b721 Ramiro Polla
    echo "STRIP=$strip" >> config.mak ||
2164 f25fc9b1 Måns Rullgård
    echo "STRIP=echo ignoring strip" >> config.mak
2165 75388c74 Michael Niedermayer
2166 a9b3f630 Nick Kurshev
echo "OPTFLAGS=$CFLAGS" >> config.mak
2167 2270b4b2 Diego Biurrun
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2168 0f3cb305 Fabrice Bellard
echo "LDFLAGS=$LDFLAGS" >> config.mak
2169 c536cb09 Diego Biurrun
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2170 e1707f52 Michael Niedermayer
echo "SHFLAGS=$SHFLAGS" >> config.mak
2171 304d586d Loren Merritt
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2172 408382a4 Diego Biurrun
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2173 fbb9d104 Víctor Paesa
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2174 80581e98 Michael Niedermayer
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2175 5af4e0cc Måns Rullgård
echo "BUILD_STATIC=$static" >> config.mak
2176 ce8871c2 Måns Rullgård
echo "BUILDSUF=$build_suffix" >> config.mak
2177 c5f14466 Ramiro Polla
echo "FULLNAME=$FULLNAME" >> config.mak
2178 f3ec2d46 Slavik Gnatenko
echo "LIBPREF=$LIBPREF" >> config.mak
2179 c5f14466 Ramiro Polla
echo "LIBSUF=$LIBSUF" >> config.mak
2180 24743a76 Diego Biurrun
echo "LIBNAME=$LIBNAME" >> config.mak
2181 f3ec2d46 Slavik Gnatenko
echo "SLIBPREF=$SLIBPREF" >> config.mak
2182 c5f14466 Ramiro Polla
echo "SLIBSUF=$SLIBSUF" >> config.mak
2183
echo "EXESUF=$EXESUF" >> config.mak
2184 ac63af34 Diego Biurrun
echo "EXTRA_VERSION=$extra_version" >> config.mak
2185 315c741d Diego Biurrun
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2186 4dc62701 Måns Rullgård
2187 90be59ef Ramiro Polla
if enabled bigendian; then
2188 7483e694 Diego Biurrun
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2189
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2190 91d1f1a4 Nick Kurshev
fi
2191 44161118 Måns Rullgård
2192 90be59ef Ramiro Polla
if enabled sdl; then
2193 7483e694 Diego Biurrun
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2194
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2195 a86b921c Fabrice Bellard
fi
2196 90be59ef Ramiro Polla
if enabled texi2html; then
2197 7483e694 Diego Biurrun
    echo "BUILD_DOC=yes" >> config.mak
2198 146ea952 Nicolas Boos
fi
2199 5a872801 Luca Barbato
2200 719c8e00 Måns Rullgård
get_version(){
2201
    name=$1
2202
    file=$source_path/$2
2203 147e7692 Måns Rullgård
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2204
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2205 0e32c8c6 Måns Rullgård
    lcname=$(tolower $name)
2206
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2207
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2208 719c8e00 Måns Rullgård
}
2209
2210 147e7692 Måns Rullgård
get_version LIBSWSCALE  libswscale/swscale.h
2211
get_version LIBPOSTPROC libpostproc/postprocess.h
2212
get_version LIBAVCODEC  libavcodec/avcodec.h
2213
get_version LIBAVDEVICE libavdevice/avdevice.h
2214
get_version LIBAVFORMAT libavformat/avformat.h
2215
get_version LIBAVUTIL   libavutil/avutil.h
2216 a6601d69 Måns Rullgård
get_version LIBAVFILTER libavfilter/avfilter.h
2217 5a872801 Luca Barbato
2218 5af4e0cc Måns Rullgård
if enabled shared; then
2219 7483e694 Diego Biurrun
    echo "BUILD_SHARED=yes" >> config.mak
2220
    echo "PIC=-fPIC -DPIC" >> config.mak
2221 dcc01c06 Ramiro Polla
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2222 7483e694 Diego Biurrun
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2223
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2224
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2225 d22e8442 Dave Yeo
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2226 7483e694 Diego Biurrun
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2227
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2228
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2229 0319c531 Nick Kurshev
fi
2230 d7e27559 Diego Biurrun
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2231 ef0bc4c9 François Revol
echo "EXTRALIBS=$extralibs" >> config.mak
2232 d2845d68 Diego Biurrun
2233 3d907e22 Måns Rullgård
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2234
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2235 7483e694 Diego Biurrun
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2236 b6bb00b0 Måns Rullgård
                                      $CONFIG_EXTRA      \
2237 7483e694 Diego Biurrun
                                      $DECODER_LIST      \
2238
                                      $ENCODER_LIST      \
2239
                                      $PARSER_LIST       \
2240
                                      $BSF_LIST          \
2241
                                      $DEMUXER_LIST      \
2242
                                      $MUXER_LIST        \
2243 f7679c54 Vitor Sessak
                                      $FILTER_LIST       \
2244 7483e694 Diego Biurrun
                                      $PROTOCOL_LIST     \
2245
                                      $INDEV_LIST        \
2246
                                      $OUTDEV_LIST       \
2247 8ac17293 Steve L'Homme
2248 c13e1abd Falk Hüffner
echo "#define restrict $_restrict" >> $TMPH
2249
2250 bd2216e4 Måns Rullgård
if enabled small; then
2251 7483e694 Diego Biurrun
    echo "#define av_always_inline"  >> $TMPH
2252 bb801c97 Michael Niedermayer
fi
2253
2254 997baf01 Måns Rullgård
echo "SRC_PATH=\"$source_path\"" >> config.mak
2255
echo "SRC_PATH_BARE=$source_path" >> config.mak
2256
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2257 0f3cb305 Fabrice Bellard
2258 8156056e John Dalgliesh
# Apparently it's not possible to portably echo a backslash.
2259 3ae3b721 Ramiro Polla
enabled asmalign_pot &&
2260 7483e694 Diego Biurrun
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2261 295b8c70 Diego Biurrun
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2262 4454dc1b John Dalgliesh
2263 b4d96ba2 Måns Rullgård
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2264 bc634f6f Zdenek Kabelac
2265 9c05103f Diego Biurrun
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2266
2267 b7860763 Diego Biurrun
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2268 3ae3b721 Ramiro Polla
cmp -s $TMPH config.h &&
2269
    echo "config.h is unchanged" ||
2270
    mv -f $TMPH config.h
2271 3d204385 Nick Kurshev
2272 cea0ac52 Diego Biurrun
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2273 def4272a Aurelien Jacobs
2274 165af439 Måns Rullgård
# build tree in object directory if source path is different from current one
2275 90be59ef Ramiro Polla
if enabled source_path_used; then
2276 165af439 Måns Rullgård
    DIRS="\
2277 7483e694 Diego Biurrun
        doc               \
2278
        libavcodec        \
2279
        libavcodec/alpha  \
2280
        libavcodec/armv4l \
2281
        libavcodec/bfin   \
2282
        libavcodec/i386   \
2283
        libavcodec/mlib   \
2284
        libavcodec/ppc    \
2285
        libavcodec/sh4    \
2286
        libavcodec/sparc  \
2287 52a9cf34 Diego Biurrun
        libavdevice       \
2288 f7679c54 Vitor Sessak
        libavfilter       \
2289 7483e694 Diego Biurrun
        libavformat       \
2290
        libavutil         \
2291
        libpostproc       \
2292
        libswscale        \
2293
        tests             \
2294
        tools             \
2295
        vhook             \
2296
        "
2297 165af439 Måns Rullgård
    FILES="\
2298 7483e694 Diego Biurrun
        Makefile             \
2299
        common.mak           \
2300 71c61f62 Måns Rullgård
        subdir.mak           \
2301 7483e694 Diego Biurrun
        doc/texi2pod.pl      \
2302
        libavcodec/Makefile  \
2303 52a9cf34 Diego Biurrun
        libavdevice/Makefile \
2304 f7679c54 Vitor Sessak
        libavfilter/Makefile \
2305 7483e694 Diego Biurrun
        libavformat/Makefile \
2306
        libavutil/Makefile   \
2307
        libpostproc/Makefile \
2308
        libswscale/Makefile  \
2309
        "
2310 165af439 Måns Rullgård
    for dir in $DIRS ; do
2311 7483e694 Diego Biurrun
        mkdir -p $dir
2312 165af439 Måns Rullgård
    done
2313
    for f in $FILES ; do
2314 20369773 Dave Yeo
        $ln_s "$source_path/$f" $f
2315 165af439 Måns Rullgård
    done
2316
fi
2317 def4272a Aurelien Jacobs
2318
2319 d0674868 Diego Biurrun
# build pkg-config files
2320 def4272a Aurelien Jacobs
2321 d0674868 Diego Biurrun
pkgconfig_generate(){
2322
name=$1
2323 e426941d Diego Biurrun
shortname=${name#lib}
2324 d0674868 Diego Biurrun
comment=$2
2325
version=$3
2326
libs=$4
2327
requires=$5
2328 25cd5cb3 Diego Biurrun
cat <<EOF > $name/$name.pc
2329 3e89171a Måns Rullgård
prefix=$prefix
2330 a94e666c Diego Biurrun
exec_prefix=\${prefix}
2331 f2b7382c Anssi Hannula
libdir=$libdir
2332 7622778e Måns Rullgård
includedir=$incdir
2333 def4272a Aurelien Jacobs
2334 d0674868 Diego Biurrun
Name: $name
2335
Description: $comment
2336
Version: $version
2337 5dcfe9f8 Anssi Hannula
Requires: $(disabled shared && echo $requires)
2338
Requires.private: $(enabled shared && echo $requires)
2339 def4272a Aurelien Jacobs
Conflicts:
2340 12701f6e Anssi Hannula
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2341
Libs.private: $(enabled shared && echo $libs)
2342 76a448ed Måns Rullgård
Cflags: -I\${includedir}
2343 def4272a Aurelien Jacobs
EOF
2344 25cd5cb3 Diego Biurrun
cat <<EOF > $name/$name-uninstalled.pc
2345 def4272a Aurelien Jacobs
prefix=
2346
exec_prefix=
2347 46d1ff83 Aurelien Jacobs
libdir=\${pcfiledir}
2348 1d44d365 Diego Pettenò
includedir=${source_path}
2349 def4272a Aurelien Jacobs
2350 d0674868 Diego Biurrun
Name: $name
2351
Description: $comment
2352
Version: $version
2353
Requires: $requires
2354 def4272a Aurelien Jacobs
Conflicts:
2355 12701f6e Anssi Hannula
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2356 def4272a Aurelien Jacobs
Cflags: -I\${includedir}
2357
EOF
2358 d0674868 Diego Biurrun
}
2359 def4272a Aurelien Jacobs
2360 e426941d Diego Biurrun
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2361
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2362
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2363
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2364 3ed1a2ee Diego Biurrun
enabled avfilter &&
2365 35a71f1d Diego Biurrun
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2366 3ed1a2ee Diego Biurrun
enabled postproc &&
2367 e426941d Diego Biurrun
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2368 13ca50f3 Diego Biurrun
if enabled swscale; then
2369 e426941d Diego Biurrun
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2370 6c0d0413 j@v2v.cc
else
2371 f436a23e Måns Rullgård
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2372 25cd5cb3 Diego Biurrun
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2373 6c0d0413 j@v2v.cc
fi