darwin patches by Heliodoro Tammaro <helio at interactives dot org>
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # ffmpeg configure script (c) 2000, 2001, 2002 Fabrice Bellard
4 #
5 # set temporary file name
6 if test ! -z "$TMPDIR" ; then
7     TMPDIR1="${TMPDIR}"
8 elif test ! -z "$TEMPDIR" ; then
9     TMPDIR1="${TEMPDIR}"
10 else
11     TMPDIR1="/tmp"
12 fi
13
14 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
15 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
16 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
17 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
18
19 # default parameters
20 prefix="/usr/local"
21 cross_prefix=""
22 cc="gcc"
23 ar="ar"
24 make="make"
25 strip="strip"
26 cpu=`uname -m`
27 mmx="default"
28 case "$cpu" in
29   i386|i486|i586|i686|i86pc|BePC)
30     cpu="x86"
31   ;;
32   armv4l)
33     cpu="armv4l"
34   ;;
35   alpha)
36     cpu="alpha"
37   ;;
38   "Power Macintosh")
39     cpu="powerpc"
40   ;;
41   *)
42     cpu="unknown"
43   ;;
44 esac
45 gprof="no"
46 v4l="yes"
47 audio_oss="yes"
48 network="yes"
49 zlib="yes"
50 mp3lame="no"
51 a52="yes"
52 a52bin="no"
53 win32="no"
54 lshared="no"
55 extralibs="-lm"
56 simpleidct="yes"
57 bigendian="no"
58 vhook="no"
59 mpegaudio_hp="yes"
60 SHFLAGS=-shared
61
62 # OS specific
63 targetos=`uname -s`
64 case $targetos in
65 BeOS)
66 prefix="/boot/home/config"
67 # helps building libavcodec
68 CFLAGS="-O3 -DPIC -fomit-frame-pointer"
69 SHFLAGS=-nostart
70 # disable linux things
71 audio_oss="no"
72 v4l="no"
73 # no need for libm, but the inet stuff
74 # Check for BONE
75 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
76 extralibs="-lbind -lsocket"
77 else
78 echo "Not sure building for net_server will succeed... good luck."
79 extralibs="-lsocket"
80 fi ;;
81 BSD/OS)
82 v4l="no"
83 audio_oss="yes"
84 extralibs="-lpoll -lgnugetopt -lm"
85 make="gmake"
86 ;;
87 Darwin)
88 v4l="no"
89 audio_oss="no"
90 CFLAGS="-no-cpp-precomp -pipe -O3 -fomit-frame-pointer"
91 SHFLAGS=-dynamic
92 extralibs=""
93 darwin=yes
94 ;;
95 *) ;;
96 esac
97
98 # find source path
99 # XXX: we assume an absolute path is given when launching configure, 
100 # except in './configure' case.
101 source_path=${0%configure}
102 source_path=${source_path%/}
103 source_path_used="yes"
104 if test -z "$source_path" -o "$source_path" = "." ; then
105     source_path=`pwd`
106     source_path_used="no"
107 fi
108
109 cat > $TMPC << EOF
110 #include <dlfcn.h>
111 int main( void ) { return (int) dlopen("foo", 0); }
112 EOF
113
114 if $cc -o $TMPO $TMPC -ldl 2> /dev/null  ; then
115 : vhook=yes
116 fi
117
118 cat > $TMPC << EOF
119 #include <X11/Xlib.h>
120 #include <Imlib2.h>
121 int main( void ) { return (int) imlib_load_font("foo"); }
122 EOF
123
124 imlib2=no
125 if $cc -o $TMPO $TMPC -lImlib2 2> /dev/null  ; then
126 imlib2=yes
127 fi
128
129 for opt do
130   case "$opt" in
131   --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
132   ;;
133   --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
134   ;;
135   --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2`
136   ;;
137   --cc=*) cc=`echo $opt | cut -d '=' -f 2`
138   ;;
139   --make=*) make=`echo $opt | cut -d '=' -f 2`
140   ;;
141   --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}"
142   ;;
143   --extra-ldflags=*) LDFLAGS=${opt#--extra-ldflags=}
144   ;;
145   --extra-libs=*) extralibs=${opt#--extra-libs=}
146   ;;
147   --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
148   ;;
149   --disable-mmx) mmx="no"
150   ;;
151   --enable-gprof) gprof="yes"
152   ;;
153   --disable-v4l) v4l="no"
154   ;;
155   --disable-audio-oss) audio_oss="no"
156   ;;
157   --disable-network) network="no"
158   ;;
159   --disable-zlib) zlib="no"
160   ;;
161   --disable-a52) a52="no"
162   ;;
163   --enable-a52bin) a52bin="yes" ; extralibs="-ldl $extralibs"
164   ;;
165   --enable-mp3lame) mp3lame="yes"
166   ;;
167   --disable-vhook) vhook="no"
168   ;;
169   --disable-simple_idct) simpleidct="no"
170   ;;
171   --enable-win32) win32="yes"
172   ;;
173   --enable-shared) lshared="yes"
174   ;;
175   --disable-mpegaudio-hp) mpegaudio_hp="no"
176   ;;
177   esac
178 done
179
180 # compute mmx state
181 if test $mmx = "default"; then
182     if test $cpu = "x86"; then
183         mmx="yes"
184     else
185         mmx="no"
186     fi
187 fi
188
189 # Checking for CFLAGS
190 if test -z "$CFLAGS"; then
191     CFLAGS="-O3"
192 fi
193
194 if test "$win32" = "yes" ; then
195     cross_prefix="i386-mingw32msvc-"
196     v4l="no"
197     audio_oss="no"
198     network="no"
199 fi
200
201 cc="${cross_prefix}${cc}"
202 ar="${cross_prefix}${ar}"
203 strip="${cross_prefix}${strip}"
204
205 # ---
206 # big/little endian test
207 cat > $TMPC << EOF
208 #include <inttypes.h>
209 int main(int argc, char ** argv){
210         volatile uint32_t i=0x01234567;
211         return (*((uint8_t*)(&i))) == 0x67;
212 }
213 EOF
214
215 if $cc -o $TMPO $TMPC 2>/dev/null ; then
216 $TMPO && bigendian="yes"
217 else
218 echo big/little test failed
219 fi
220
221 # ---
222 # check availability of some header files
223
224 cat > $TMPC << EOF
225 #include <malloc.h>
226 int main( void ) { return 0; }
227 EOF
228
229 _memalign=no
230 _malloc_h=no
231 if $cc -o $TMPO $TMPC 2> /dev/null ; then
232 _malloc_h=yes
233 _memalign=yes
234 # check for memalign - atmos
235 cat > $TMPC << EOF
236 #include <malloc.h>
237 int main ( void ) {
238 char *string = NULL;
239 string = memalign(64, sizeof(char));
240 return 0;
241 }
242 EOF
243 $cc -o $TMPO $TMPC 2> /dev/null || _memalign=no
244 fi
245
246 cat > $TMPC << EOF
247 #define _GNU_SOURCE
248 #include <time.h>
249 int main( void ) { return *strptime("", "", 0); }
250 EOF
251
252 strptime=no
253 if $cc -o $TMPO $TMPC 2> /dev/null ; then
254   strptime=yes
255 fi
256
257 if test "$zlib" = "yes"; then
258 # check for zlib - mmu_man
259 cat > $TMPC << EOF
260 #include <zlib.h>
261 int main ( void ) {
262 if (zlibVersion() != ZLIB_VERSION)
263    puts("zlib version differs !!!");
264    return 1;
265 return 0;
266 }
267 EOF
268 $cc -o $TMPO $TMPC -lz 2> /dev/null || zlib="no"
269 # $TMPO 2> /dev/null > /dev/null || zlib="no"
270 # XXX: more tests needed - runtime test
271 fi
272 if test "$zlib" = "yes"; then
273 extralibs="$extralibs -lz"
274 fi
275
276 _restrict=
277 for restrict_keyword in restrict __restrict__ __restrict; do
278   echo "void foo(char * $restrict_keyword p);" > $TMPC
279   if $cc -c -o $TMPO $TMPC 2> /dev/null; then
280     _restrict=$restrict_keyword
281     break;
282   fi
283 done
284
285 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
286 cat << EOF
287
288 Usage: configure [options]
289 Options: [defaults in brackets after descriptions]
290
291 EOF
292 echo "Standard options:"
293 echo "  --help                   print this message"
294 echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
295 echo "  --enable-mp3lame         enable mp3 encoding via libmp3lame [default=no]"
296 echo "  --enable-win32           enable win32 cross compile"
297 echo "  --disable-a52            disable GPL'ed A52 support [default=no]"
298 echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
299 echo "  --enable-shared          build shared libraries [default=no]"
300 echo ""
301 echo "Advanced options (experts only):"
302 echo "  --source-path=PATH       path of source code [$source_path]"
303 echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
304 echo "  --cc=CC                  use C compiler CC [$cc]"
305 echo "  --make=MAKE              use specified make [$make]"
306 echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
307 echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
308 echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
309 echo "  --cpu=CPU                force cpu to CPU  [$cpu]"
310 echo "  --disable-mmx            disable mmx usage"
311 echo "  --disable-audio-oss      disable OSS audio support [default=no]"
312 echo "  --disable-v4l            disable video4linux grabbing [default=no]"
313 echo "  --disable-network        disable network support [default=no]"
314 echo "  --disable-zlib           disable zlib [default=no]"
315 echo "  --disable-simple_idct    disable simple IDCT routines [default=no]"
316 # echo "  --disable-vhook          disable video hooking support"
317 echo "  --enable-gprof           enable profiling with gprof [$gprof]"
318 echo "  --disable-mpegaudio-hp   faster (but less accurate)"
319 echo "                           mpegaudio decoding [default=no]"
320 echo ""
321 echo "NOTE: The object files are build at the place where configure is launched"
322 exit 1
323 fi
324
325 echo "Install prefix   $prefix"
326 echo "Source path      $source_path"
327 echo "C compiler       $cc"
328 echo "make             $make"
329 echo "CPU              $cpu"
330 echo "Big Endian       $bigendian"
331 echo "MMX enabled      $mmx"
332 echo "gprof enabled    $gprof"
333 echo "zlib enabled     $zlib"
334 echo "mp3lame enabled  $mp3lame"
335 echo "a52 support      $a52"
336 echo "a52 dlopened     $a52bin"
337 # echo "Video hooking    $vhook"
338
339 if test "$vhook" = "yes" ; then
340 : echo "Imlib2 support   $imlib2"
341 fi
342
343 echo "Creating config.mak and config.h"
344
345 echo "# Automatically generated by configure - do not modify" > config.mak
346 echo "/* Automatically generated by configure - do not modify */" > $TMPH
347
348 echo "prefix=$prefix" >> config.mak
349 echo "MAKE=$make" >> config.mak
350 echo "CC=$cc" >> config.mak
351 echo "AR=$ar" >> config.mak
352 echo "STRIP=$strip" >> config.mak
353 echo "OPTFLAGS=$CFLAGS" >> config.mak
354 echo "LDFLAGS=$LDFLAGS" >> config.mak
355 echo "SHFLAGS=$SHFLAGS" >> config.mak
356 if test "$cpu" = "x86" ; then
357   echo "TARGET_ARCH_X86=yes" >> config.mak
358   echo "#define ARCH_X86 1" >> $TMPH
359 elif test "$cpu" = "armv4l" ; then
360   echo "TARGET_ARCH_ARMV4L=yes" >> config.mak
361   echo "#define ARCH_ARMV4L 1" >> $TMPH
362 elif test "$cpu" = "alpha" ; then
363   echo "TARGET_ARCH_ALPHA=yes" >> config.mak
364   echo "#define ARCH_ALPHA 1" >> $TMPH
365 elif test "$cpu" = "powerpc" ; then
366   echo "TARGET_ARCH_POWERPC=yes" >> config.mak
367   echo "#define ARCH_POWERPC 1" >> $TMPH
368 fi
369 if test "$bigendian" = "yes" ; then
370   echo "WORDS_BIGENDIAN=yes" >> config.mak
371   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
372 fi
373 if test "$mmx" = "yes" ; then
374   echo "TARGET_MMX=yes" >> config.mak
375   echo "#define HAVE_MMX 1" >> $TMPH
376 fi
377 if test "$gprof" = "yes" ; then
378   echo "TARGET_GPROF=yes" >> config.mak
379   echo "#define HAVE_GPROF 1" >> $TMPH
380 fi
381 if test "$strptime" = "yes" ; then
382   echo "#define HAVE_STRPTIME 1" >> $TMPH
383 else
384   echo "BUILD_STRPTIME=yes" >> config.mak
385 fi
386 if test "$imlib2" = "yes" ; then
387   echo "HAVE_IMLIB2=yes" >> config.mak
388 fi
389 if test "$vhook" = "yes" ; then
390   echo "BUILD_VHOOK=yes" >> config.mak
391   echo "#define HAVE_VHOOK 1" >> $TMPH
392   extralibs="$extralibs -ldl"
393 fi
394 if test "$lshared" = "yes" ; then
395   echo "BUILD_SHARED=yes" >> config.mak
396   echo "PIC=-fPIC" >> config.mak
397 fi
398 echo "EXTRALIBS=$extralibs" >> config.mak
399 echo -n "VERSION=" >>config.mak
400 head $source_path/VERSION >>config.mak
401 echo "" >>config.mak
402 # if you do not want to use encoders, disable that.
403 echo "#define CONFIG_ENCODERS 1" >> $TMPH
404 echo "CONFIG_ENCODERS=yes" >> config.mak
405
406 # if you do not want to use decoders, disable that.
407 echo "#define CONFIG_DECODERS 1" >> $TMPH
408 echo "CONFIG_DECODERS=yes" >> config.mak
409
410 # AC3
411 if test "$a52" = "yes" ; then
412   echo "#define CONFIG_AC3 1" >> $TMPH
413   echo "CONFIG_AC3=yes" >> config.mak
414
415   if test "$a52bin" = "yes" ; then
416     echo "#define CONFIG_A52BIN 1" >> $TMPH
417     echo "CONFIG_A52BIN=yes" >> config.mak
418   fi
419 fi
420
421 # mpeg audio high precision mode
422 if test "$mpegaudio_hp" = "yes" ; then
423   echo "#define CONFIG_MPEGAUDIO_HP 1" >> $TMPH
424 fi
425
426 if test "$v4l" = "yes" ; then
427   echo "#define CONFIG_VIDEO4LINUX 1" >> $TMPH
428   echo "CONFIG_VIDEO4LINUX=yes" >> config.mak
429 fi
430
431 if test "$audio_oss" = "yes" ; then
432   echo "#define CONFIG_AUDIO_OSS 1" >> $TMPH
433   echo "CONFIG_AUDIO_OSS=yes" >> config.mak
434 fi
435
436 if test "$network" = "yes" ; then
437   echo "#define CONFIG_NETWORK 1" >> $TMPH
438   echo "CONFIG_NETWORK=yes" >> config.mak
439 fi
440
441 if test "$zlib" = "yes" ; then
442   echo "#define CONFIG_ZLIB 1" >> $TMPH
443   echo "CONFIG_ZLIB=yes" >> config.mak
444 fi
445
446 if test "$mp3lame" = "yes" ; then
447   echo "#define CONFIG_MP3LAME 1" >> $TMPH
448   echo "CONFIG_MP3LAME=yes" >> config.mak
449 fi
450
451 if test "$win32" = "yes" ; then
452   echo "#define CONFIG_WIN32 1" >> $TMPH
453   echo "CONFIG_WIN32=yes" >> config.mak
454 fi
455
456 if test "$darwin" = "yes"; then
457   echo "#define CONFIG_DARWIN 1"  >> $TMPH
458   echo "CONFIG_DARWIN=yes" >> config.mak
459 fi
460
461 if test "$_malloc_h" = "yes" ; then
462   echo "#define HAVE_MALLOC_H 1" >> $TMPH
463 else
464   echo "#undef  HAVE_MALLOC_H" >> $TMPH
465 fi
466
467 if test "$_memalign" = "yes" ; then
468   echo "#define HAVE_MEMALIGN 1" >> $TMPH
469 else
470   echo "#undef  HAVE_MEMALIGN" >> $TMPH
471 fi
472
473 if test "$simpleidct" = "yes" ; then
474   echo "#define SIMPLE_IDCT 1" >> $TMPH
475 fi
476
477 echo "#define restrict $_restrict" >> $TMPH
478
479 # build tree in object directory if source path is different from current one
480 if test "$source_path_used" = "yes" ; then
481     DIRS="libav libavcodec libavcodec/alpha libavcodec/armv4l libavcodec/i386 \
482           libavcodec/liba52 libavcodec/mlib tests"
483     FILES="Makefile libav/Makefile libavcodec/Makefile tests/Makefile"
484     for dir in $DIRS ; do
485             mkdir -p $dir
486     done
487     for f in $FILES ; do
488         ln -sf $source_path/$f $f
489     done
490 fi
491 echo "SRC_PATH=$source_path" >> config.mak
492
493 diff $TMPH config.h >/dev/null 2>&1
494 if test $? -ne 0 ; then
495         mv -f $TMPH config.h
496 else
497         echo "config.h is unchanged"
498 fi
499
500 rm -f $TMPO $TMPC $TMPS $TMPH