Statistics
| Branch: | Revision:

ffmpeg / configure @ be449fca

History | View | Annotate | Download (66.4 KB)

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