source: roaraudio/configure @ 1071:b4270280c314

Last change on this file since 1071:b4270280c314 was 1071:b4270280c314, checked in by phi, 15 years ago

added --target-win32

  • Property exe set to *
File size: 14.5 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"
32OSS_DEV="none"
33PROC_NET_DECNET="/proc/net/decnet"
34
35DEFAULT_GRP=''
36
37AO_INST_DIR=''
38XMMS_INST_DIR=''
39
40DEFAULT_RATE=''
41DEFAULT_CHANNELS=''
42DEFAULT_BITS=''
43
44ALAW=true
45MULAW=true
46ALAW_RW=true
47MULAW_RW=true
48
49echo -n "checking for C compiler... "
50if [ "$CC" != '' ]
51then
52 echo $CC
53else
54 CC=$(which gcc cc 2> /dev/null | grep ^/ | head -n 1)
55 if [ "$CC" = '' ]
56 then
57  echo 'none'
58  exit 1;
59 fi
60 echo $CC
61fi
62
63echo -n "checking for pkg-config... "
64PKG_CONFIG=$(which pkg-config false 2> /dev/null | grep ^/ | head -n 1)
65if $PKG_CONFIG --help > /dev/null 2> /dev/null
66then
67 echo $PKG_CONFIG
68else
69 echo no
70fi
71
72#Makefile.conf not yet open, write it later
73
74echo -n "checking for sysname... "
75SYSNAME=$(uname -s)
76echo "$SYSNAME"
77
78while [ "$1" != '' ]
79do
80 case "$1" in
81  '--help')
82   echo '--help                      - This Help'
83   echo '--ldpath DIR                - Add DIR to (compile time) search list for libs'
84   echo '--incpath DIR               - Add DIR to search list for headers'
85   echo '--addpath DIR               - Add DIR/lib to lib, DIR/include to header search list'
86   echo '--cdrom DEV                 - Set default CDRum device'
87   echo '--proc-net-decnet FILE      - Set DECnet file for DECnet support auto detecting'
88   echo '                              (ignore this on non-Linux)'
89   echo '--no-LIB                    - disable LIB'
90   echo '--runtime-detect            - do as much as posible auto detecting on runtime (for distributors)'
91   echo '--ao-install-dir DIR'
92   echo '--xmms-install-dir DIR'
93   echo '--prefix DIR'
94   echo '--prefix-bin DIR'
95   echo '--prefix-lib DIR'
96   echo '--prefix-inc DIR'
97   echo '--prefix-man DIR'
98   echo '--default-rate RATE'
99   echo '--default-channels CHANNELS'
100   echo '--default-bits BITS'
101   echo '--without-alaw'
102   echo '--without-alaw-rw'
103   echo '--without-mulaw'
104   echo '--without-mulaw-rw'
105   echo '--target-win32'
106   exit 0;
107  ;;
108  '--ldpath')
109   LDPATH="$LDPATH -L$2"
110   shift;
111  ;;
112  '--incpath')
113   INCPATH="$INCPATH -I$2"
114   shift;
115  ;;
116  '--addpath')
117   LDPATH="$LDPATH -L$2/lib/"
118   INCPATH="$INCPATH -I$2/include/"
119   shift;
120  ;;
121  '--cc')
122   CC="$2"
123   shift;
124  ;;
125  '--cdrom')
126   CDROM="$2"
127   shift;
128  ;;
129  '--oss-dev')
130   OSS_DEV="$2"
131   shift;
132  ;;
133  '--audio-group')
134   DEFAULT_GRP="$2"
135   shift;
136  ;;
137  '--no-'*)
138   lib=$(echo "$1" | sed 's/^--no-//')
139   eval no_lib_$lib=true
140  ;;
141  '--runtime-detect')
142   RUNTIME_DETECT=true
143  ;;
144  '--ao-install-dir')
145   AO_INST_DIR="$2"
146   shift;
147  ;;
148  '--xmms-install-dir')
149   XMMS_INST_DIR="$2"
150   shift;
151  ;;
152  '--default-rate')
153   DEFAULT_RATE="$2"
154   shift;
155  ;;
156  '--default-channels')
157   DEFAULT_CHANNELS="$2"
158   shift;
159  ;;
160  '--default-bits')
161   DEFAULT_BITS="$2"
162   shift;
163  ;;
164  '--without-alaw')
165   ALAW=false
166   ALAW_RW=false
167  ;;
168  '--without-alaw-rw')
169   ALAW_RW=false
170  ;;
171  '--without-mulaw')
172   MULAW=false
173   MULAW_RW=false
174  ;;
175  '--without-mulaw-rw')
176   MULAW_RW=false
177  ;;
178  '--prefix')
179   PREFIX="$2"
180   shift;
181  ;;
182  '--prefix-bin')
183   PREFIX_BIN="$2"
184   shift;
185  ;;
186  '--prefix-lib')
187   PREFIX_LIB="$2"
188   shift;
189  ;;
190  '--prefix-inc')
191   PREFIX_INC="$2"
192   shift;
193  ;;
194  '--prefix-man')
195   PREFIX_MAN="$2"
196   shift;
197  ;;
198  '--target-win32')
199   RUNTIME_DETECT=true
200   no_lib_dnet=true
201  ;;
202 esac;
203
204 shift;
205done
206
207
208CCTF="false"
209
210test_lib () {
211 echo > $TF_C
212
213 echo -n "checking for $1... "
214 shift;
215
216 LIBS=''
217
218 while [ "$1" != '--' ]
219 do
220  LIBS="$LIBS -l$1"
221  shift;
222 done
223
224 shift;
225
226 LIBS=$(echo "$LIBS" | sed 's/-l-l/-l/g; s/-l-L/-L/g;')
227
228 while [ "$1" != '' ]
229 do
230  echo "#include <$1>" >> $TF_C
231  shift;
232 done
233
234 echo 'int main (void) { return 0; }' >> $TF_C
235
236 $CCTF $LIBS 2> /dev/null;
237
238 R=$?
239
240 if [ "$R" = '0' ]
241 then
242  echo 'yes'
243 else
244  echo 'no'
245 fi
246
247 return $R
248}
249
250test_lib_defmake () {
251 def="$1"
252 subdir="$2"
253 shift
254 shift
255 name="$1"
256 lib="$2"
257 shift
258
259 [ "$subdir" = '%' ] && subdir=''
260
261 if [ "$lib" != '--' ]
262 then
263  eval _no="\$no_lib_$lib";
264
265  if [ "$_no" != '' ]
266  then
267    echo "checking for $1... disabled by user"
268   [ "$subdir" != '' ] && \
269    echo "subdir_$subdir=" >&4
270   echo "lib_$lib=" >&4
271   return;
272  fi
273 fi
274
275 LIBS=$($PKG_CONFIG --silence-errors --libs $lib)
276 if [ "$?" != '0' ]
277 then
278  LIBS="-l$lib"
279 fi
280
281 if test_lib "$name" $LIBS "$@"
282 then
283  subdir_var='subdir_'"`echo $subdir | tr / _`"
284  echo "#define $def"            >&3
285  [ "$subdir" != '' ] && \
286   echo "$subdir_var=$subdir" >&4
287  echo "lib_$lib=$LIBS" >&4
288 else
289  [ "$subdir" != '' ] && \
290   echo "subdir_$subdir=" >&4
291  echo "lib_$lib=" >&4
292 fi
293}
294
295test_tool_defmake () {
296 DEF="$1"
297 NAME="$2"
298 shift;
299 shift;
300 echo -n "checking for $NAME... "
301
302 if $RUNTIME_DETECT
303 then
304  echo "$1 (runtime detect)"
305 echo "#define $DEF "\""$1"\" >&3
306 else
307
308  LIST=$(which "$@" 2> /dev/null | grep ^/ | head -n 1)
309
310  if [ "$LIST" = '' ]
311  then
312   echo 'no'
313  else
314   echo $LIST
315   echo "#define $DEF "\""$LIST"\" >&3
316  fi
317 fi
318}
319
320exec 3> config.h 4> Makefile.conf
321
322if [ "$SYSNAME" = 'Darwin' ]
323then
324 echo "Adding $SYSNAME shared lib arguments..."
325 SHARED="$SHARED -fno-common -dynamiclib -compatibility_version 0.1 -current_version 0.1.0"
326 SHARED_CF="$SHARED_CF -fno-common"
327elif [ "$SYSNAME" = 'NetBSD' ]
328then
329 echo "Adding $SYSNAME libpath arguments..."
330 LDPATH="$LDPATH -L/usr/local/lib/"
331elif [ "$SYSNAME" = 'FreeBSD' ]
332then
333 echo "Adding $SYSNAME search path arguments..."
334 LDPATH="$LDPATH -L/usr/local/lib/"
335 INCPATH="$INCPATH -I/usr/local/include/"
336 [ "$DEFAULT_GRP" = '' ] && DEFAULT_GRP='wheel'
337fi
338
339[ "$PREFIX_BIN" = '' ] && PREFIX_BIN="$PREFIX/bin/"
340[ "$PREFIX_LIB" = '' ] && PREFIX_LIB="$PREFIX/lib/"
341[ "$PREFIX_INC" = '' ] && PREFIX_INC="$PREFIX/include/"
342[ "$PREFIX_MAN" = '' ] && PREFIX_MAN="$PREFIX/share/man/"
343
344[ "$DEFAULT_GRP" = '' ] && DEFAULT_GRP='audio'
345
346# now write the cc name to Makefile.conf
347{
348 echo "SHARED=$SHARED"
349 echo "SHARED_CF=$SHARED_CF"
350 echo "CC=$CC"
351 echo "LDPATH=$LDPATH"
352 echo "INCPATH=$INCPATH"
353 echo "PREFIX=$PREFIX"
354 echo "PREFIX_BIN=$PREFIX_BIN"
355 echo "PREFIX_LIB=$PREFIX_LIB"
356 echo "PREFIX_INC=$PREFIX_INC"
357 echo "PREFIX_MAN=$PREFIX_MAN"
358} >&4
359
360CCTF="$CC $LDPATH $INCPATH -Iinclude/ -o $TF_E $TF_C"
361
362cat >&3 << EOF
363//config.h:
364
365#ifndef _ROARAUDIO_CONFIG_H_
366#define _ROARAUDIO_CONFIG_H_
367
368EOF
369
370{
371 echo '/* uname: ' $(uname -a) '*/'
372 echo '/* Date : ' $(date)  '*/'
373 echo
374 [ "$DEFAULT_RATE"     = '' ] || echo "#define ROAR_RATE_DEFAULT     $DEFAULT_RATE"
375 [ "$DEFAULT_CHANNELS" = '' ] || echo "#define ROAR_CHANNELS_DEFAULT $DEFAULT_CHANNELS"
376 [ "$DEFAULT_BITS"     = '' ] || echo "#define ROAR_BITS_DEFAULT     $DEFAULT_BITS"
377 echo
378 $ALAW     && echo '#define ROAR_SUPPORT_ALAW'
379 $ALAW_RW  && echo '#define ROAR_SUPPORT_ALAW_RW'
380 $MULAW    && echo '#define ROAR_SUPPORT_MULAW'
381 $MULAW_RW && echo '#define ROAR_SUPPORT_MULAW_RW'
382 echo
383} >&3
384
385#                 #define                  name         cmds...
386test_tool_defmake ROAR_HAVE_BIN_OGG123     ogg123       ogg123
387test_tool_defmake ROAR_HAVE_BIN_FLAC       flac         flac
388test_tool_defmake ROAR_HAVE_BIN_TIMIDITY   TiMidity++   timidity
389test_tool_defmake ROAR_HAVE_BIN_CDPARANOIA cdparanoia   cdparanoia
390test_tool_defmake ROAR_HAVE_BIN_WGET       Wget         wget
391test_tool_defmake ROAR_HAVE_BIN_GNUPLOT    gnuplot      gnuplot
392test_tool_defmake ROAR_HAVE_BIN_SSH        OpenSSH      ssh
393
394echo >&3
395
396test_lib 'Math Library' m          -- math.h                         && echo '#define ROAR_HAVE_LIBM' >&3
397if test_lib 'realtime Library' rt -- sys/mman.h mqueue.h semaphore.h
398then
399 {
400  echo '#define ROAR_HAVE_LIBRT'
401  echo '#define ROAR_NEED_LIBRT'
402 } >&3
403fi
404
405echo >&3
406
407#                #define                 subdir       name          -lxxx      -- header
408test_lib_defmake ROAR_HAVE_ESD           libroaresd   EsounD        esd        -- esd.h
409test_lib_defmake ROAR_HAVE_LIBAO         plugins/ao   libao         ao         -- ao/ao.h ao/plugin.h
410test_lib_defmake ROAR_HAVE_LIBVORBIS     %            libvorbis     vorbis     -- vorbis/codec.h
411test_lib_defmake ROAR_HAVE_LIBVORBISFILE %            libvorbisfile vorbisfile -- vorbis/vorbisfile.h
412test_lib_defmake ROAR_HAVE_LIBVORBISENC  %            libvorbisenc  vorbisenc  -- vorbis/vorbisenc.h
413test_lib_defmake ROAR_HAVE_LIBSPEEX      %            libspeex      speex      -- speex/speex.h speex/speex_stereo.h
414test_lib_defmake ROAR_HAVE_LIBCELT       %            libcelt       celt       -- celt/celt.h celt/celt_header.h
415test_lib_defmake ROAR_HAVE_LIBOGGZ       %            liboggz       oggz       -- oggz/oggz.h
416test_lib_defmake ROAR_HAVE_LIBSNDFILE    %            libsndfile    sndfile    -- sndfile.h
417test_lib_defmake ROAR_HAVE_LIBFISHSOUND  roarfish     libfishsound  fishsound  -- fishsound/fishsound.h
418test_lib_defmake ROAR_HAVE_LIBSHOUT      %            libshout      shout      -- shout/shout.h
419test_lib_defmake ROAR_HAVE_LIBPULSE      libroarpulse libpulse      pulse      -- pulse/pulseaudio.h pulse/simple.h
420test_lib_defmake ROAR_HAVE_LIBY2         libroaryiff  libyiff       Y2         -- Y2/Y.h Y2/Ylib.h
421test_lib_defmake ROAR_HAVE_LIBARTSC      libroararts  libartsc      artsc      -- kde/artsc/artsc.h
422test_lib_defmake ROAR_HAVE_LIBOSSAUDIO   %            libossaudio   ossaudio   -- sys/ioctl.h
423test_lib_defmake ROAR_HAVE_LIBDNET       %            libdnet       dnet       -- sys/socket.h netdnet/dn.h netdnet/dnetdb.h
424test_lib_defmake ROAR_HAVE_IPX           %            IPX           c          -- netipx/ipx.h
425test_lib_defmake ROAR_HAVE_OSS           %            OSS           c          -- sys/ioctl.h sys/soundcard.h
426test_lib_defmake ROAR_HAVE_OSS_BSD       %            BSDOSS        c          -- sys/ioctl.h soundcard.h
427test_lib_defmake ROAR_HAVE_LIBWSOCK32    %            WinSock       wsock32    -- winsock2.h
428
429# add a better test here
430test_lib 'linux sendfile()'       -- sys/sendfile.h && echo '#define ROAR_HAVE_LINUX_SENDFILE' >&3
431
432
433echo -n 'checking for IPv6... '
434
435echo '#include <sys/socket.h>'  > $TF_C
436echo '#include <netinet/in.h>' >> $TF_C
437echo 'int main (void) { struct sockaddr_in6 in6; return 0; }' >> $TF_C
438
439if $CCTF 2> /dev/null;
440then
441 echo '#define ROAR_HAVE_IPV6' >&3
442 echo yes
443else
444 echo no
445fi
446
447
448echo -n 'checking for mlock()... '
449
450echo '#include <sys/mman.h>' > $TF_C
451echo 'int main (void) { mlock((void*)0, 0); return 0; }' >> $TF_C
452
453if $CCTF 2> /dev/null;
454then
455 echo '#define ROAR_HAVE_MLOCK' >&3
456 echo yes
457else
458 echo no
459fi
460
461echo -n 'checking for square root func... '
462
463echo "$SYSNAME" | if grep CYGWIN > /dev/null
464then
465 echo 'sqrt() (cygwin)'
466else
467 echo '#include <math.h>' > $TF_C
468 echo 'int main (void) { sqrtl(0); return 0; }' >> $TF_C
469
470 if $CCTF -lm 2> /dev/null;
471 then
472  echo '#define ROAR_HAVE_SQRTL' >&3
473  echo 'sqrtl()'
474 else
475  echo 'sqrt()'
476 fi
477fi
478
479echo -n 'checking for inline funcs... '
480
481echo 'inline int test (void) { return 0; }' > $TF_C
482echo 'int main (void) { return test(); }'  >> $TF_C
483
484if $CCTF 2> /dev/null;
485then
486 echo '#define ROAR_HAVE_INLINE' >&3
487 echo yes
488else
489 echo no
490fi
491
492echo -n 'checking for broken peercred... '
493echo '#include <roaraudio.h>' > $TF_C
494echo 'int main (void) { struct ucred cred; return 0; }'  >> $TF_C
495
496if $CCTF 2> /dev/null;
497then
498 echo working
499else
500 echo '#define ROAR_BROKEN_PEERCRED' >&3
501 echo broken
502fi
503
504echo -n 'checking for safe 32 bit integer overflow... '
505
506cat > $TF_C << EOF
507#include <stdio.h>
508#include <stdint.h>
509#define TYPE uint32_t
510#define MAX  ((TYPE)4294967295U)
511
512int main (void) {
513 TYPE a = MAX;
514
515 a += 2;
516
517 if ( a == 1 ) {
518  printf("#define ROAR_HAVE_SAFE_OVERFLOW\n");
519  return 0;
520 }
521
522 return 1;
523}
524EOF
525
526if $CCTF 2> /dev/null;
527then
528 $TF_E >&3
529 if [ "$?" = '0' ]
530 then
531  echo yes
532 else
533  echo no
534 fi
535else
536 echo 'no (can not compile!, no stdint.h?)'
537fi
538
539echo -n 'checking for __LP64__... '
540cat > $TF_C << EOF
541#include <stdio.h>
542
543int main (void) {
544#ifdef __LP64__
545 fprintf(stderr, "set by compiler\n");
546#else
547 if ( sizeof(int) == sizeof(void*) ) {
548  fprintf(stderr, "no need to set\n");
549 } else {
550  fprintf(stderr, "need to set\n");
551  printf("\n#ifndef __LP64__\n#define __LP64__\n#endif\n\n");
552 }
553#endif
554 return 0;
555}
556EOF
557if $CCTF 2> /dev/null;
558then
559 $TF_E >&3
560else
561 echo 'error, can not compile'
562 exit 1
563fi
564
565echo -n 'checking for 64 bit types... '
566cat > $TF_C << EOF
567#include <stdio.h>
568#include <stdint.h>
569
570int main (void) {
571 char * i64 = NULL, * ui64 = NULL;
572
573 if ( sizeof(int) == 8 ) {
574  i64 = "int"; ui64 = "unsigned int";
575 } else if ( sizeof(long int) == 8 ) {
576  i64 = "long int"; ui64 = "unsigned long int";
577 } else if ( sizeof(long long int) == 8 ) {
578  i64 = "long long int"; ui64 = "unsigned long long int";
579 } else if ( sizeof(int64_t) == 8 ) {
580  i64 = "int64_t"; ui64 = "uint64_t";
581 } else {
582  fprintf(stderr, "none\n");
583  return 0;
584 }
585
586 fprintf(stderr, "%s, %s\n", i64, ui64);
587 printf("#define ROAR_NATIVE_INT64 %s\n#define ROAR_NATIVE_UINT64 %s\n", i64, ui64);
588
589 return 0;
590}
591EOF
592if $CCTF 2> /dev/null;
593then
594 $TF_E >&3
595else
596 echo 'error, can not compile'
597 exit 1
598fi
599
600
601echo -n 'checking if cp supports -v... '
602if cp -v --help > /dev/null 2> /dev/null
603then
604 echo "cp_v=-v" >&4
605 echo yes
606else
607 echo "cp_v=" >&4
608 echo no
609fi
610
611echo -n 'checking for cdrom device... '
612if [ -e "$CDROM" ]
613then
614 echo "$CDROM"
615 echo '#define ROAR_DEFAULT_CDROM "'"$CDROM"'"' >&3
616else
617 CDROM=$(ls /dev/cdrom /dev/rcd0c 2> /dev/null | head -n 1);
618 if [ -e "$CDROM" ]
619 then
620  echo "$CDROM"
621  echo '#define ROAR_DEFAULT_CDROM "'"$CDROM"'"' >&3
622 else
623  echo 'none'
624 fi
625fi
626
627echo -n 'checking for OSS device... '
628if [ -e "$OSS_DEV" ]
629then
630 echo "$OSS_DEV"
631 echo '#define ROAR_DEFAULT_OSS_DEV "'"$OSS_DEV"'"' >&3
632else
633 OSS_DEV=$(ls /dev/dsp /dev/audio 2> /dev/null | head -n 1);
634 if [ -e "$OSS_DEV" ]
635 then
636  echo "$OSS_DEV"
637  echo '#define ROAR_DEFAULT_OSS_DEV "'"$OSS_DEV"'"' >&3
638 else
639  echo 'none'
640 fi
641fi
642
643echo 'checking for decnet status file... '"$PROC_NET_DECNET"
644echo '#define ROAR_PROC_NET_DECNET "'"$PROC_NET_DECNET"'"' >&3
645
646
647echo 'checking for default audio group... '"$DEFAULT_GRP"
648echo '#define ROAR_DEFAULT_SOCKGRP "'"$DEFAULT_GRP"'"' >&3
649
650cat >&3 << EOF
651
652#endif
653
654//ll
655EOF
656
657echo 'running libao plugin configure...'
658 cd plugins/ao/
659if [ "$AO_INST_DIR" = '' ]
660then
661 ./configure --force-have-roar
662else
663 ./configure --force-have-roar --inst-dir "$AO_INST_DIR"
664fi
665
666echo 'running xmms plugin configure...'
667 cd ../xmms/
668if [ "$XMMS_INST_DIR" = '' ]
669then
670 ./configure --force-have-roar
671else
672 ./configure --force-have-roar --inst-dir "$XMMS_INST_DIR"
673fi
674
675cd ../..
676
677rm -f $TF_C $TF_E
678
679mv config.h include/roaraudio/
680echo 'config.h created and moved into include/roaraudio/'
681
682echo "$SYSNAME" | if grep CYGWIN > /dev/null
683then
684 rm -f $TF_E.exe
685 echo 'patching Makefiles for cygwin...'
686 find . -name Makefile -print0 | xargs -0 sed 's/\.so/.dll'/g -i
687fi
688
689#ll
Note: See TracBrowser for help on using the repository browser.