1dnl Copyright (c) 1991-2007 Kawahara Lab., Kyoto University
2dnl Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
3dnl Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology
4dnl All rights reserved
5dnl
6dnl  $Id: configure.in,v 1.14 2009/02/11 07:22:45 sumomo Exp $
7dnl
8
9dnl Process this file with autoconf to produce a configure script.
10AC_INIT(src/phmm/outprob.c)
11AC_CONFIG_HEADER(include/sent/config.h)
12AC_CONFIG_AUX_DIR(../support)
13
14LIBSENT_VERSION=4.1.2
15
16dnl Checks for options
17# specify mic type
18AC_ARG_WITH(mictype,
19[  --with-mictype=TYPE     specify mic I/O (oss|alsa|freebsd|coreaudio|sol2|sun4|irix|esd|sp|portaudio|pa-oss|pa-winmm|pa-dsound)],,with_mictype=auto)
20
21# NetAudio support
22AC_ARG_WITH(netaudio-dir,
23[  --with-netaudio-dir=DIR DatLink/NetAudio include/lib are in DIR],,with_netaudio_dir=auto)
24
25dnl use addlog array function
26AC_ARG_ENABLE(addarray,
27[  --disable-addarray      [debug] do not use addlog_array() function],
28want_addarray=$enableval
29,want_addarray=yes)
30
31dnl extend to int
32AC_ARG_ENABLE(words-int,
33[  --enable-words-int      use integer instead of unsigned short for word ID
34                           to extend vocabulary limit to 2^31=2G words],
35want_words_int=$enableval
36,want_words_int=no)
37
38dnl class N-gram support
39AC_ARG_ENABLE(class-ngram,
40[  --disable-class-ngram   disable class N-gram support],
41use_class_ngram=$enableval
42,use_class_ngram=yes)
43
44dnl enable fork for adinnet
45AC_ARG_ENABLE(fork,
46[  --enable-fork           enable process forking on adinnet],
47use_fork=$enableval
48,use_fork=no)
49
50dnl sin/cos table for MFCC calc
51AC_ARG_ENABLE(mfcc-table,
52[  --disable-mfcc-table    disable sin/cos table for MFCC calculation],
53use_mfcc_table=$enableval
54,use_mfcc_table=yes)
55
56dnl MSD model support
57AC_ARG_ENABLE(msd,
58[  --enable-msd            enable MSD model support],
59want_msd=$enableval
60,want_msd=no)
61
62
63
64dnl enable/disable use of zlib library
65AC_ARG_ENABLE(zlib,
66[  --disable-zlib          disable zlib library],
67use_zlib=$enableval
68,use_zlib=yes)
69
70dnl libsndfile
71AC_ARG_WITH(sndfile,
72[  --without-sndfile       does not link libsndfile library])
73
74dnl multipath version
75dnl AC_ARG_ENABLE(multipath,
76dnl [  --enable-multipath      Compile as multipath version],
77dnl want_multipath=$enableval
78dnl ,want_multipath=no)
79
80if test "$want_addarray" = yes; then
81	AC_DEFINE(USE_ADDLOG_ARRAY)
82fi
83if test "$want_words_int" = yes; then
84	AC_DEFINE(WORDS_INT)
85fi
86if test "$use_class_ngram" = yes; then
87	AC_DEFINE(CLASS_NGRAM)
88fi
89if test "$use_fork" = yes; then
90	AC_DEFINE(FORK_ADINNET)
91fi
92if test "$use_mfcc_table" = yes; then
93	AC_DEFINE(MFCC_SINCOS_TABLE)
94fi
95if test "$want_msd" = yes; then
96	AC_DEFINE(ENABLE_MSD)
97fi
98
99dnl Checks for system.
100AC_CANONICAL_HOST
101
102dnl Checks for optimization flag
103AC_MSG_CHECKING([host specific optimization flag])
104if test -z "$CFLAGS" ; then
105    OPTFLAG=../support/cflags.${host_cpu}-${host_vendor}-${host_os}
106    if test -f "$OPTFLAG" ; then
107	. $OPTFLAG
108	AC_MSG_RESULT([$OPTFLAG])
109    else
110	AC_MSG_RESULT([no])
111    fi
112else
113    AC_MSG_RESULT([skipped])
114fi
115
116dnl Checks for compiler.
117AC_PROG_CC
118AC_PROG_CPP
119
120dnl Checks for programs.
121AC_PROG_INSTALL
122AC_PATH_PROG(RM, rm)
123AC_PATH_PROG(AR, ar)
124AC_PROG_RANLIB
125
126dnl Checks for header files.
127AC_HEADER_STDC
128AC_CHECK_HEADERS(unistd.h)
129
130dnl Checks for typedefs, structures, and compiler characteristics.
131AC_C_BIGENDIAN
132AC_C_CONST
133dnl AC_TYPE_SIZE_T
134AC_MSG_CHECKING([for socklen_t])
135AC_TRY_COMPILE([#include <sys/types.h>
136#include <sys/socket.h>
137],[socklen_t dummy;],
138AC_DEFINE(HAVE_SOCKLEN_T)
139AC_MSG_RESULT([yes]),
140AC_MSG_RESULT([no]))
141
142dnl Checks for library functions.
143dnl AC_PROG_GCC_TRADITIONAL
144dnl AC_FUNC_VPRINTF
145dnl AC_CHECK_FUNCS(strdup strstr)
146AC_CHECK_FUNC(gethostbyname,,AC_CHECK_LIB(nsl,gethostbyname))
147AC_CHECK_FUNC(connect,,AC_CHECK_LIB(socket, connect))
148AC_CHECK_FUNCS(strcasecmp)
149AC_CHECK_FUNCS(sleep)
150case "$host_os" in
151mingw*)
152	EXTRALIB="$EXTRALIB -lws2_32"
153	;;
154esac
155
156dnl Check for avaiable common adin files
157# ALSA
158has_alsa=yes
159AC_CHECK_HEADERS(alsa/asoundlib.h,,
160  AC_CHECK_HEADERS(sys/asoundlib.h,,
161    has_alsa=no
162))
163# OSS
164has_oss=yes
165AC_CHECK_HEADERS(sys/soundcard.h,,
166  AC_CHECK_HEADERS(machine/soundcard.h,,
167    has_oss=no
168))
169# ESounD
170has_esd=yes
171AC_CHECK_HEADERS(esd.h,,has_esd=no)
172
173dnl Checks for default audio input API (order is important)
174if test "$with_mictype" = auto; then
175  AC_MSG_CHECKING(for input device type)
176  altype=no
177  case "$host_os" in
178  linux*)
179	# Linux - availability already checked, set default
180	if test "$has_alsa" = yes; then
181	   altype=alsa
182	elif test "$has_oss" = yes; then
183	   altype=oss
184	elif test "$has_esd" = yes; then
185	   altype=esd
186	else
187	   AC_MSG_ERROR([no audio io avaiable!])
188	fi
189	;;
190  freebsd*)
191	# FreeBSD (snd driver)
192	if test "$has_oss" = yes; then
193	    altype=freebsd
194	else
195	    AC_MSG_ERROR([no soundcard.h found])
196	fi
197	;;
198  darwin*)
199        # MacOSX (CoreAudio)
200	AC_TRY_CPP([#include <CoreAudio/CoreAudio.h>],altype=coreaudio)
201	;;
202  solaris2*)
203	# Solaris2.x Built-in Audio
204	AC_TRY_CPP([#include <sys/audioio.h>],altype=sol2)
205	;;
206  sunos4*)
207	# SunOS4 Audio
208	AC_TRY_CPP([#include <multimedia/libaudio.h>],altype=sun4)
209	;;
210  irix6*)
211 	# O2 (SGI IRIX6.3)
212	AC_TRY_CPP([#include <audio.h>],altype=irix)
213	;;
214#  osf*)
215#	# Digital Unix 4.0 --- not yet
216#	AC_TRY_CPP([#include <mme/mme_api.h>],altype=osf1)
217#	;;
218  cygwin*|mingw*)
219      # minGW - portaudio (auto select winmm / dsound)
220      altype=portaudio
221      ;;
222  esac
223  AC_MSG_RESULT($altype)
224else
225  altype=$with_mictype
226fi
227
228# if default is portaudio, guess WinMM / DirectSound / OSS / Solaris
229case $altype in
230    portaudio)
231      case "$host_os" in
232        linux*)
233	  altype="pa-oss"
234          ;;
235	solaris*)
236	  altype="pa-solaris"
237	  ;;
238        cygwin*|mingw*)
239	  AC_CHECK_LIB(dsound,main,
240	      AC_CHECK_HEADERS(DSound.h,
241	          altype="pa-dsound",
242		altype="pa-winmm"),
243	    altype="pa-winmm")
244          ;;
245      esac
246      ;;
247esac
248
249# set appropritate parameters for the determined API
250SOUNDLIB=""
251ADINOBJ=""
252# if esd exist, include it
253if test "$has_esd" = yes; then
254    SOUNDLIB="$SOUNDLIB -lesd"
255    ADINOBJ="$ADINOBJ src/adin/adin_esd.o"
256fi
257# if alsa exist, include it
258if test "$has_alsa" = yes; then
259    SOUNDLIB="$SOUNDLIB -lasound"
260    ADINOBJ="$ADINOBJ src/adin/adin_mic_linux_alsa.o"
261fi
262# if oss exist, include it
263if test "$has_oss" = yes; then
264    ADINOBJ="$ADINOBJ src/adin/adin_mic_linux_oss.o"
265fi
266
267# altype-specific setup
268case $altype in
269    sp)
270      aldesc="spAudio"
271      ADINOBJ="$ADINOBJ src/adin/adin_mic_sp.o"
272      AC_DEFINE(USE_MIC)
273      AC_DEFINE(USE_SPLIB)
274      case "$host_os" in
275        linux*)
276          AC_CHECK_LIB(spa.linux, spInitAudio,
277              SOUNDLIB="$SOUNDLIB -lspa.linux -lspb.linux",
278            AC_CHECK_LIB(spa.linux-glibc, spInitAudio,
279                SOUNDLIB="$SOUNDLIB -lspa.linux-glibc -lspb.linux-glibc",
280              AC_MSG_ERROR([spAudio library not found!]),
281              [-lspb.linux-glibc -lm]),
282            [-lspb.linux -lm])
283          ;;
284        solaris2*)
285          SOUNDLIB="$SOUNDLIB -L/usr/local/lib -lspa.sun -lspb.sun"
286          ;;
287        sunos4*)
288          SOUNDLIB="$SOUNDLIB -L/usr/local/lib -lspa.sun -lspb.sun -laudio"
289          ;;
290        irix6*)
291          SOUNDLIB="$SOUNDLIB -L/usr/local/lib -lspa.sgi -lspb.sgi -laudio"
292          ;;
293        cygwin*)
294          SOUNDLIB="$SOUNDLIB -L/usr/local/lib -lspa.win -lspb.win -lwinmm -liconv"
295          ;;
296        darwin*)
297          SOUNDLIB="$SOUNDLIB -arch ppc -framework CoreAudio -framework Carbon -L/usr/local/lib -lspa.mac -lspb.mac"
298          ;;
299      esac
300      ;;
301    pa-*)
302      aldesc="PortAudio library"
303      ADINOBJ="$ADINOBJ src/adin/pa/pa_lib.o src/adin/pa/pa_convert.o src/adin/pa/pa_trace.o src/adin/pa/pablio.o src/adin/pa/ringbuffer.o"
304      AC_DEFINE(USE_MIC)
305      case "$altype" in
306        pa-winmm)
307	  aldesc="$aldesc (WinMM)"
308          ADINOBJ="$ADINOBJ src/adin/pa/pa_win_wmme.o"
309          SOUNDLIB="$SOUNDLIB -lwinmm"
310          ;;
311        pa-dsound)
312	  aldesc="$aldesc (DirectSound)"
313          ADINOBJ="$ADINOBJ src/adin/pa/dsound_wrapper.o src/adin/pa/pa_dsound.o"
314          SOUNDLIB="$SOUNDLIB -lwinmm -ldsound"
315          ;;
316        pa-oss)
317	  aldesc="$aldesc (Unix/OSS)"
318          ADINOBJ="$ADINOBJ src/adin/pa/pa_unix.o src/adin/pa/pa_unix_oss.o"
319          SOUNDLIB="$SOUNDLIB -lpthread"
320          ;;
321        pa-solaris)
322	  aldesc="$aldesc (Solaris)"
323          ADINOBJ="$ADINOBJ src/adin/pa/pa_unix.o src/adin/pa/pa_unix_solaris.o"
324          SOUNDLIB="$SOUNDLIB -lpthread"
325          ;;
326      esac
327      ADINOBJ="$ADINOBJ src/adin/adin_portaudio.o"
328      ;;
329    oss)
330      if test "$has_oss" = no; then
331        AC_MSG_ERROR([no OSS header!])
332      fi
333      aldesc="Open Sound System compatible"
334      AC_DEFINE(USE_MIC)
335      ADINOBJ="$ADINOBJ src/adin/adin_mic_linux.o"
336      ;;
337    alsa)
338      if test "$has_alsa" = no; then
339        AC_MSG_ERROR([no ALSA header!])
340      fi
341      aldesc="Advanced Linux Sound Architecture"
342      AC_DEFINE(USE_MIC)
343      ADINOBJ="$ADINOBJ src/adin/adin_mic_linux.o"
344      ;;
345    esd)
346      if test "$has_esd" = no; then
347        AC_MSG_ERROR([no ESounD header!])
348      fi
349      aldesc="EsoundD - The Enlightened Sound Daemon"
350      AC_DEFINE(USE_MIC)
351      ADINOBJ="$ADINOBJ src/adin/adin_mic_linux.o"
352      ;;
353
354    freebsd)
355	if test "$has_oss" = no; then
356	  AC_MSG_ERROR([neither sys/soundcard.h nor machine/soundcard.h exist])
357	fi
358	aldesc="FreeBSD snd driver"
359	ADINOBJ="$ADINOBJ src/adin/adin_mic_freebsd.o"
360	AC_DEFINE(USE_MIC)
361	;;
362    coreaudio)
363	aldesc="MacOSX CoreAudio"
364	ADINOBJ="$ADINOBJ src/adin/adin_mic_darwin_coreaudio.o"
365	AC_DEFINE(USE_MIC)
366	SOUNDLIB="$SOUNDLIB -Wl,-framework -Wl,CoreServices -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,AudioToolbox"
367	;;
368    sol2)
369	aldesc="Solaris2.x audio interface"
370	ADINOBJ="$ADINOBJ src/adin/adin_mic_sol2.o"
371	AC_DEFINE(USE_MIC)
372	;;
373    sun4)
374	aldesc="SunOS4.x audio interface"
375	ADINOBJ="$ADINOBJ src/adin/adin_mic_sun4.o"
376	AC_DEFINE(USE_MIC)
377	SOUNDLIB="$SOUNDLIB -laudio"
378	;;
379    irix)
380	aldesc="IRIX6.x audio interface"
381	ADINOBJ="$ADINOBJ src/adin/adin_mic_o2.o"
382	AC_DEFINE(USE_MIC)
383	SOUNDLIB="$SOUNDLIB -laudio"
384	 ;;
385#    osf1)
386#	aldesc="Digital/Unix 4.0"
387#	ADINOBJ=src/adin/adin_mic_osf1.o
388#	AC_DEFINE(USE_MIC)
389#	SOUNDLIB="-L/usr/opt/MME242/lib -lmme")
390#	;;
391    *)
392	aldesc="no support"
393	AC_MSG_ERROR([mictype not supported, or specified type not exist])
394	;;
395esac
396
397dnl check for NetAudio support
398if test "$with_netaudio_dir" = auto ; then
399	AC_MSG_CHECKING([for DatLink/NetAudio support])
400else
401	AC_MSG_CHECKING([for DatLink/NetAudio support on ${with_netaudio_dir}])
402fi
403TMPCPPFLAGS="$CPPFLAGS"
404CPPFLAGS="$CPPFLAGS -I${with_netaudio_dir}/include"
405use_netaudio=no
406AC_TRY_CPP([#include <netaudio.h>],
407	use_netaudio=yes
408	AC_DEFINE(USE_NETAUDIO)
409	SOUNDINC="-I${with_netaudio_dir}/include"
410	ADINOBJ="$ADINOBJ src/adin/adin_netaudio.o src/adin/adin_na.o "
411	SOUNDLIB="$SOUNDLIB -L${with_netaudio_dir}/lib -lnetaudio -lsupport")
412AC_MSG_RESULT($use_netaudio)
413CPPFLAGS="$TMPCPPFLAGS"
414EXTRAOBJ="$EXTRAOBJ $ADINOBJ"
415
416dnl check for file decompression using zlib
417have_zlib=no;
418if test "$use_zlib" = yes; then
419  AC_CHECK_LIB(z, deflate,
420    AC_CHECK_HEADERS(zlib.h,
421      have_zlib=yes;
422      gzdesc="zlib library";
423      EXTRALIB="$EXTRALIB -lz"
424      AC_DEFINE(HAVE_ZLIB)))
425  if test "$have_zlib" = no; then
426      AC_MSG_WARN([not found])
427      use_zlib=no;
428  fi
429fi
430dnl next, check for built-in file decompression using gzip
431if test "$use_zlib" = no; then
432  AC_CHECK_PROG(GZIP, gzip, found, no)
433  if test "$GZIP" = no; then
434    gzdesc="none";
435    AC_MSG_WARN([not found, compressed file input disabled])
436  else
437    gzdesc="gzip command";
438    AC_DEFINE(ZCAT, ["gzip -d -c"])
439  fi
440fi
441
442dnl check for iconv library
443dnl macro "AM_ICONV" will check for availability of iconv function,
444dnl and if found, define HAVE_ICONV.  If the iconv function is defined
445dnl in libiconv, it defines LIBICONV="-liconv".
446dnl it also detects if function is const and set the result to ICONV_CONST.
447dnl it also adds "--with-libiconv-prefix=DIR" option.
448
449dnl check for libsndfile
450wavefile_support="RAW and WAV only"
451if test -z "$with_sndfile"; then
452   with_sndfile=yes
453fi
454if test "$with_sndfile" = yes; then
455 have_libsndfile=no
456 AC_CHECK_LIB(sndfile, sf_open,
457  AC_CHECK_HEADERS(sndfile.h,
458    wavefile_support='various formats by libsndfile ver.1'
459    AC_DEFINE(HAVE_LIBSNDFILE)
460    AC_DEFINE(HAVE_LIBSNDFILE_VER1)
461    EXTRALIB="$EXTRALIB -lsndfile"
462    have_libsndfile=yes))
463 if test "$have_libsndfile" = no; then
464  AC_CHECK_LIB(sndfile, sf_open_read,
465    AC_CHECK_HEADERS(sndfile.h,
466      wavefile_support='various formats by libsndfile ver.0'
467      AC_DEFINE(HAVE_LIBSNDFILE)
468      EXTRALIB="$EXTRALIB -lsndfile"
469      have_libsndfile=yes))
470 fi
471 if test "$have_libsndfile" = no; then
472  AC_MSG_WARN([libsndfile enables AIFF AU SND NIST format for Julius.
473It's available at http://www.mega-nerd.com/libsndfile/])
474 fi
475fi
476
477dnl cygwin and max os 10 needs extra iconv library
478case "$host_os" in
479  cygwin*|darwin*)
480    EXTRALIB="$EXTRALIB -liconv"
481    ;;
482esac
483
484dnl substitute some definitions in libsent-config
485AC_SUBST(LIBSENT_VERSION)
486AC_SUBST(altype)
487AC_SUBST(aldesc)
488AC_SUBST(use_netaudio)
489AC_SUBST(use_pthread)
490AC_SUBST(wavefile_support)
491AC_SUBST(use_class_ngram)
492AC_SUBST(use_fork)
493AC_SUBST(gzdesc)
494
495dnl define configuration descriptions
496AC_DEFINE_UNQUOTED(LIBSENT_VERSION, "$LIBSENT_VERSION")
497AC_DEFINE_UNQUOTED(AUDIO_API_NAME, "$altype")
498AC_DEFINE_UNQUOTED(AUDIO_API_DESC, "$aldesc")
499AC_DEFINE_UNQUOTED(AUDIO_FORMAT_DESC, "$wavefile_support")
500AC_DEFINE_UNQUOTED(GZIP_READING_DESC, "$gzdesc")
501
502dnl substitute in Makefile
503AC_SUBST(EXTRAOBJ)
504AC_SUBST(EXTRALIB)
505AC_SUBST(SOUNDINC)
506AC_SUBST(SOUNDLIB)
507
508AC_OUTPUT_COMMANDS(
509[chmod +x libsent-config libsent-config-dist
510./libsent-config --info
511],
512altype=$altype
513aldesc="$aldesc"
514use_netaudio=$use_netaudio
515use_pthread=$use_pthread
516wavefile_support="$wavefile_support"
517gzdesc="$gzdesc"
518)
519AC_OUTPUT(Makefile libsent-config libsent-config-dist)
520