source: roaraudio/configure @ 899:00d17c1876d0

Last change on this file since 899:00d17c1876d0 was 899:00d17c1876d0, checked in by phi, 15 years ago

give a way to set the CC

  • Property exe set to *
File size: 11.0 KB
Line 
1#!/bin/sh
2
3# check for bash...
4
5if [ "$(echo -n)" = '-n' ]
6then
7 SHELL=$(which bash sh 2> /dev/null | grep ^/ | head -n 1)
8 exec $SHELL $0 "$@"
9fi
10
11
12#set -x
13
14TF_C=testit.c
15TF_E=./testit
16LDPATH=''
17INCPATH=''
18
19SYSNAME='unknown'
20SHARED='-shared'
21SHARED_CF=''
22PKG_CONFIG=false
23RUNTIME_DETECT=false
24
25PREFIX='/usr/local'
26PREFIX_BIN=''
27PREFIX_LIB=''
28PREFIX_INC=''
29PREFIX_MAN=''
30
31CDROM="none"
32PROC_NET_DECNET="/proc/net/decnet"
33
34AO_INST_DIR=''
35
36echo -n "checking for C compiler... "
37if [ "$CC" != '' ]
38then
39 echo $CC
40else
41 CC=$(which gcc cc 2> /dev/null | grep ^/ | head -n 1)
42 if [ "$CC" = '' ]
43 then
44  echo 'none'
45  exit 1;
46 fi
47 echo $CC
48fi
49
50echo -n "checking for pkg-config... "
51PKG_CONFIG=$(which pkg-config false 2> /dev/null | grep ^/ | head -n 1)
52if $PKG_CONFIG --help > /dev/null 2> /dev/null
53then
54 echo $PKG_CONFIG
55else
56 echo no
57fi
58
59#Makefile.conf not yet open, write it later
60
61echo -n "checking for sysname... "
62SYSNAME=$(uname -s)
63echo "$SYSNAME"
64
65while [ "$1" != '' ]
66do
67 case "$1" in
68  '--help')
69   echo '--help                      - This Help'
70   echo '--ldpath DIR                - Add DIR to (compile time) search list for libs'
71   echo '--incpath DIR               - Add DIR to search list for headers'
72   echo '--addpath DIR               - Add DIR/lib to lib, DIR/include to header search list'
73   echo '--cdrom DEV                 - Set default CDRum device'
74   echo '--proc-net-decnet FILE      - Set DECnet file for DECnet support auto detecting'
75   echo '                              (ignore this on non-Linux)'
76   echo '--no-LIB                    - disable LIB'
77   echo '--runtime-detect            - do as much as posible auto detecting on runtime (for distributors)'
78   echo '--ao-install-dir DIR'
79   echo '--prefix DIR'
80   echo '--prefix-bin DIR'
81   echo '--prefix-lib DIR'
82   echo '--prefix-inc DIR'
83   echo '--prefix-man DIR'
84   exit 0;
85  ;;
86  '--ldpath')
87   LDPATH="$LDPATH -L$2"
88   shift;
89  ;;
90  '--incpath')
91   INCPATH="$INCPATH -I$2"
92   shift;
93  ;;
94  '--addpath')
95   LDPATH="$LDPATH -L$2/lib/"
96   INCPATH="$INCPATH -I$2/include/"
97   shift;
98  ;;
99  '--cc')
100   CC="$2"
101   shift;
102  ;;
103  '--cdrom')
104   CDROM="$2"
105   shift;
106  ;;
107  '--no-'*)
108   lib=$(echo "$1" | sed 's/^--no-//')
109   eval no_lib_$lib=true
110  ;;
111  '--runtime-detect')
112   RUNTIME_DETECT=true
113  ;;
114  '--ao-install-dir')
115   AO_INST_DIR="$2"
116   shift;
117  ;;
118  '--prefix')
119   PREFIX="$2"
120   shift;
121  ;;
122  '--prefix-bin')
123   PREFIX_BIN="$2"
124   shift;
125  ;;
126  '--prefix-lib')
127   PREFIX_LIB="$2"
128   shift;
129  ;;
130  '--prefix-inc')
131   PREFIX_INC="$2"
132   shift;
133  ;;
134  '--prefix-man')
135   PREFIX_MAN="$2"
136   shift;
137  ;;
138 esac;
139
140 shift;
141done
142
143
144CCTF="false"
145
146test_lib () {
147 echo > $TF_C
148
149 echo -n "checking for $1... "
150 shift;
151
152 LIBS=''
153
154 while [ "$1" != '--' ]
155 do
156  LIBS="$LIBS -l$1"
157  shift;
158 done
159
160 shift;
161
162 LIBS=$(echo "$LIBS" | sed 's/-l-l/-l/g; s/-l-L/-L/g;')
163
164 while [ "$1" != '' ]
165 do
166  echo "#include <$1>" >> $TF_C
167  shift;
168 done
169
170 echo 'int main (void) { return 0; }' >> $TF_C
171
172 $CCTF $LIBS 2> /dev/null;
173
174 R=$?
175
176 if [ "$R" = '0' ]
177 then
178  echo 'yes'
179 else
180  echo 'no'
181 fi
182
183 return $R
184}
185
186test_lib_defmake () {
187 def="$1"
188 subdir="$2"
189 shift
190 shift
191 name="$1"
192 lib="$2"
193 shift
194
195 [ "$subdir" = '%' ] && subdir=''
196
197 if [ "$lib" != '--' ]
198 then
199  eval _no="\$no_lib_$lib";
200
201  if [ "$_no" != '' ]
202  then
203    echo "checking for $1... disabled by user"
204   [ "$subdir" != '' ] && \
205    echo "subdir_$subdir=" >&4
206   echo "lib_$lib=" >&4
207   return;
208  fi
209 fi
210
211 LIBS=$($PKG_CONFIG --silence-errors --libs $lib)
212 if [ "$?" != '0' ]
213 then
214  LIBS="-l$lib"
215 fi
216
217 if test_lib "$name" $LIBS "$@"
218 then
219  echo "#define $def"            >&3
220  [ "$subdir" != '' ] && \
221   echo "subdir_$subdir=$subdir" >&4
222  echo "lib_$lib=$LIBS" >&4
223 else
224  [ "$subdir" != '' ] && \
225   echo "subdir_$subdir=" >&4
226  echo "lib_$lib=" >&4
227 fi
228}
229
230test_tool_defmake () {
231 DEF="$1"
232 NAME="$2"
233 shift;
234 shift;
235 echo -n "checking for $NAME... "
236
237 if $RUNTIME_DETECT
238 then
239  echo "$1 (runtime detect)"
240 echo "#define $DEF "\""$1"\" >&3
241 else
242
243  LIST=$(which "$@" 2> /dev/null | grep ^/ | head -n 1)
244
245  if [ "$LIST" = '' ]
246  then
247   echo 'no'
248  else
249   echo $LIST
250   echo "#define $DEF "\""$LIST"\" >&3
251  fi
252 fi
253}
254
255exec 3> config.h 4> Makefile.conf
256
257if [ "$SYSNAME" = 'Darwin' ]
258then
259 echo "Adding $SYSNAME shared lib arguments..."
260 SHARED="$SHARED -fno-common -dynamiclib -compatibility_version 0.1 -current_version 0.1.0"
261 SHARED_CF="$SHARED_CF -fno-common"
262elif [ "$SYSNAME" = 'NetBSD' ]
263then
264 echo "Adding $SYSNAME libpath arguments..."
265 LDPATH="$LDPATH -L/usr/local/lib/"
266fi
267
268[ "$PREFIX_BIN" = '' ] && PREFIX_BIN="$PREFIX/bin/"
269[ "$PREFIX_LIB" = '' ] && PREFIX_LIB="$PREFIX/lib/"
270[ "$PREFIX_INC" = '' ] && PREFIX_INC="$PREFIX/include/"
271[ "$PREFIX_MAN" = '' ] && PREFIX_MAN="$PREFIX/share/man/"
272
273# now write the cc name to Makefile.conf
274{
275 echo "SHARED=$SHARED"
276 echo "SHARED_CF=$SHARED_CF"
277 echo "CC=$CC"
278 echo "LDPATH=$LDPATH"
279 echo "INCPATH=$INCPATH"
280 echo "PREFIX=$PREFIX"
281 echo "PREFIX_BIN=$PREFIX_BIN"
282 echo "PREFIX_LIB=$PREFIX_LIB"
283 echo "PREFIX_INC=$PREFIX_INC"
284 echo "PREFIX_MAN=$PREFIX_MAN"
285} >&4
286
287CCTF="$CC $LDPATH $INCPATH -o $TF_E $TF_C"
288
289cat >&3 << EOF
290//config.h:
291
292#ifndef _ROARAUDIO_CONFIG_H_
293#define _ROARAUDIO_CONFIG_H_
294
295EOF
296
297{
298 echo '/* uname: ' $(uname -a) '*/'
299 echo '/* Date : ' $(date)  '*/'
300 echo
301} >&3
302
303#                 #define                  name         cmds...
304test_tool_defmake ROAR_HAVE_BIN_OGG123     ogg123       ogg123
305test_tool_defmake ROAR_HAVE_BIN_FLAC       flac         flac
306test_tool_defmake ROAR_HAVE_BIN_TIMIDITY   TiMidity++   timidity
307test_tool_defmake ROAR_HAVE_BIN_CDPARANOIA cdparanoia   cdparanoia
308test_tool_defmake ROAR_HAVE_BIN_WGET       Wget         wget
309
310echo >&3
311
312test_lib 'Math Library' m          -- math.h                         && echo '#define ROAR_HAVE_LIBM' >&3
313if test_lib 'realtime Library' rt -- sys/mman.h mqueue.h semaphore.h
314then
315 {
316  echo '#define ROAR_HAVE_LIBRT'
317  echo '#define ROAR_NEED_LIBRT'
318 } >&3
319fi
320
321echo >&3
322
323#                #define                 subdir       name          -lxxx      -- header
324test_lib_defmake ROAR_HAVE_ESD           libroaresd   EsounD        esd        -- esd.h
325test_lib_defmake ROAR_HAVE_LIBAO         %            libao         ao         -- ao/ao.h ao/plugin.h
326test_lib_defmake ROAR_HAVE_LIBVORBIS     %            libvorbis     vorbis     -- vorbis/codec.h
327test_lib_defmake ROAR_HAVE_LIBVORBISFILE %            libvorbisfile vorbisfile -- vorbis/vorbisfile.h
328test_lib_defmake ROAR_HAVE_LIBVORBISENC  %            libvorbisenc  vorbisenc  -- vorbis/vorbisenc.h
329test_lib_defmake ROAR_HAVE_LIBSPEEX      %            libspeex      speex      -- speex/speex.h speex/speex_stereo.h
330test_lib_defmake ROAR_HAVE_LIBCELT       %            libcelt       celt       -- celt/celt.h celt/celt_header.h
331test_lib_defmake ROAR_HAVE_LIBOGGZ       %            liboggz       oggz       -- oggz/oggz.h
332test_lib_defmake ROAR_HAVE_LIBSNDFILE    %            libsndfile    sndfile    -- sndfile.h
333test_lib_defmake ROAR_HAVE_LIBFISHSOUND  roarfish     libfishsound  fishsound  -- fishsound/fishsound.h
334test_lib_defmake ROAR_HAVE_LIBSHOUT      %            libshout      shout      -- shout/shout.h
335test_lib_defmake ROAR_HAVE_LIBPULSE      libroarpulse libpulse      pulse      -- pulse/pulseaudio.h pulse/simple.h
336test_lib_defmake ROAR_HAVE_LIBY2         libroaryiff  libyiff       Y2         -- Y2/Y.h Y2/Ylib.h
337test_lib_defmake ROAR_HAVE_LIBARTSC      libroararts  libartsc      artsc      -- kde/artsc/artsc.h
338test_lib_defmake ROAR_HAVE_LIBDNET       %            libdnet       dnet       -- sys/socket.h netdnet/dn.h netdnet/dnetdb.h
339test_lib_defmake ROAR_HAVE_IPX           %            IPX           c          -- netipx/ipx.h
340
341# add a better test here
342test_lib 'linux sendfile()'       -- sys/sendfile.h && echo '#define ROAR_HAVE_LINUX_SENDFILE' >&3
343
344
345echo -n 'checking for IPv6... '
346
347echo '#include <sys/socket.h>'  > $TF_C
348echo '#include <netinet/in.h>' >> $TF_C
349echo 'int main (void) { struct sockaddr_in6 in6; return 0; }' >> $TF_C
350
351if $CCTF 2> /dev/null;
352then
353 echo '#define ROAR_HAVE_IPV6' >&3
354 echo yes
355else
356 echo no
357fi
358
359
360echo -n 'checking for mlock()... '
361
362echo '#include <sys/mman.h>' > $TF_C
363echo 'int main (void) { mlock((void*)0, 0); return 0; }' >> $TF_C
364
365if $CCTF 2> /dev/null;
366then
367 echo '#define ROAR_HAVE_MLOCK' >&3
368 echo yes
369else
370 echo no
371fi
372
373echo -n 'checking for inline funcs... '
374
375echo 'inline int test (void) { return 0; }' > $TF_C
376echo 'int main (void) { return test(); }'  >> $TF_C
377
378if $CCTF 2> /dev/null;
379then
380 echo '#define ROAR_HAVE_INLINE' >&3
381 echo yes
382else
383 echo no
384fi
385
386echo -n 'checking for safe 32 bit integer overflow... '
387
388cat > $TF_C << EOF
389#include <stdio.h>
390#include <stdint.h>
391#define TYPE uint32_t
392#define MAX  ((TYPE)4294967295U)
393
394int main (void) {
395 TYPE a = MAX;
396
397 a += 2;
398
399 if ( a == 1 ) {
400  printf("#define ROAR_HAVE_SAFE_OVERFLOW\n");
401  return 0;
402 }
403
404 return 1;
405}
406EOF
407
408if $CCTF 2> /dev/null;
409then
410 $TF_E >&3
411 if [ "$?" = '0' ]
412 then
413  echo yes
414 else
415  echo no
416 fi
417else
418 echo 'no (can not compile!, no stdint.h?)'
419fi
420
421echo -n 'checking for __LP64__... '
422cat > $TF_C << EOF
423#include <stdio.h>
424
425int main (void) {
426#ifdef __LP64__
427 fprintf(stderr, "set by compiler\n");
428#else
429 if ( sizeof(int) == sizeof(void*) ) {
430  fprintf(stderr, "no need to set\n");
431 } else {
432  fprintf(stderr, "need to set\n");
433  printf("\n#ifndef __LP64__\n#define __LP64__\n#endif\n\n");
434 }
435#endif
436 return 0;
437}
438EOF
439if $CCTF 2> /dev/null;
440then
441 $TF_E >&3
442else
443 echo 'error, can not compile'
444 exit 1
445fi
446
447echo -n 'checking for 64 bit types... '
448cat > $TF_C << EOF
449#include <stdio.h>
450#include <stdint.h>
451
452int main (void) {
453 char * i64 = NULL, * ui64 = NULL;
454
455 if ( sizeof(int) == 8 ) {
456  i64 = "int"; ui64 = "unsigned int";
457 } else if ( sizeof(long int) == 8 ) {
458  i64 = "long int"; ui64 = "unsigned long int";
459 } else if ( sizeof(long long int) == 8 ) {
460  i64 = "long long int"; ui64 = "unsigned long long int";
461 } else if ( sizeof(int64_t) == 8 ) {
462  i64 = "int64_t"; ui64 = "uint64_t";
463 } else {
464  fprintf(stderr, "none\n");
465  return 0;
466 }
467
468 fprintf(stderr, "%s, %s\n", i64, ui64);
469 printf("#define ROAR_NATIVE_INT64 %s\n#define ROAR_NATIVE_UINT64 %s\n", i64, ui64);
470
471 return 0;
472}
473EOF
474if $CCTF 2> /dev/null;
475then
476 $TF_E >&3
477else
478 echo 'error, can not compile'
479 exit 1
480fi
481
482
483echo -n 'checking if cp supports -v... '
484if cp -v --help > /dev/null 2> /dev/null
485then
486 echo "cp_v=-v" >&4
487 echo yes
488else
489 echo "cp_v=" >&4
490 echo no
491fi
492
493echo -n 'checking for cdrom device... '
494if [ -e "$CDROM" ]
495then
496 echo "$CDROM"
497else
498 CDROM=$(ls /dev/cdrom /dev/rcd0c 2> /dev/null | head -n 1);
499 if [ -e "$CDROM" ]
500 then
501  echo "$CDROM"
502  echo '#define ROAR_DEFAULT_CDROM "'"$CDROM"'"' >&3
503 else
504  echo 'none'
505 fi
506fi
507
508echo 'checking for decnet status file... '"$PROC_NET_DECNET"
509echo '#define ROAR_PROC_NET_DECNET "'"$PROC_NET_DECNET"'"' >&3
510
511cat >&3 << EOF
512
513#endif
514
515//ll
516EOF
517
518echo 'running libao plugin configure...'
519 cd plugins/ao/
520if [ "$AO_INST_DIR" = '' ]
521then
522 ./configure
523else
524 ./configure --inst-dir "$AO_INST_DIR"
525fi
526cd ../..
527
528rm -f $TF_C $TF_E
529
530mv config.h include/roaraudio/
531echo 'config.h created and moved into include/roaraudio/'
532
533echo "$SYSNAME" | if grep CYGWIN > /dev/null
534then
535 echo 'patching Makefiles for cygwin...'
536 find . -name Makefile -print0 | xargs -0 sed 's/\.so/.dll'/g -i
537fi
538
539#ll
Note: See TracBrowser for help on using the repository browser.