Statistics
| Branch: | Revision:

ffmpeg / configure @ 4869f47e

History | View | Annotate | Download (65.7 KB)

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