1dnl
2dnl Process this file with autoconf to produce a configure script.
3dnl
4AC_REVISION($Id: configure.in,v 1.15 2004/06/03 23:39:13 patthoyts Exp $)
5dnl
6AC_INIT(Makefile.in)
7
8MEMCHAN_VERSION=2.2.0
9MEMCHAN_MAJOR_VERSION=2
10MEMCHAN_MINOR_VERSION=2
11VERSION=${MEMCHAN_VERSION}
12
13TCL_REQ_MAJOR_VERSION=8
14TCL_REQ_MINOR_VERSION=0
15
16
17dnl
18dnl use location of tclsh (wish?) as default for prefix, exec-prefix
19dnl
20
21AC_PREFIX_PROGRAM(tclsh)
22
23if test "x${prefix}" = "xNONE"
24then
25    prefix=/usr/local
26fi
27if test "x${exec_prefix}" = "xNONE"
28then
29    exec_prefix="${prefix}"
30fi
31
32# -------------------------------------------------------------------
33
34BUILD_DIR=`pwd`
35cd ${srcdir}
36TOP_DIR=`pwd`
37cd ${BUILD_DIR}
38
39AC_SUBST(TOP_DIR)
40AC_SUBST(BUILD_DIR)
41
42dnl
43dnl ----------------------------------------------------------------
44dnl let configure understand more options.  they allow the caller to
45dnl specify library- and include-directory for Tcl more explicitly.
46dnl
47dnl '--with-tcl=DIR' is a shorthand to
48dnl '-with-tcl-include-dir=DIR/include --with-tcl-lib-dir=DIR/lib'
49dnl
50
51AC_ARG_WITH(tcl,
52	[  --with-tcl=DIR		tcl.h resides in DIR/include, libtcl resides in DIR/lib],
53	[TCL_LIB_DIR=$withval/lib; TCL_INCLUDE_DIR=$withval/include],
54	[])
55dnl
56AC_ARG_WITH(tcl-include-dir,
57	[  --with-tcl-include-dir=DIR	tcl.h resides in DIR],
58	[TCL_INCLUDE_DIR=$withval],
59	[])
60dnl
61AC_ARG_WITH(tcl-lib-dir,
62	[  --with-tcl-lib-dir=DIR	libtcl resides in DIR],
63	[TCL_LIB_DIR=$withval],
64	[])
65
66AC_ARG_ENABLE(shared,
67	[  --disable-shared		don't build memchan as a shared library],
68	[ok=$enableval], [ok=yes])
69
70dnl ----------------------------------------------------------------
71dnl
72dnl Crossover between --with-tcl-include-dir and --with-tcl-lib-dir
73dnl Setting one, but not the other will cause automatic definition
74dnl of the missing part.
75
76if test "X" = "X$TCL_LIB_DIR" -a "X" != "X$TCL_INCLUDE_DIR"
77then
78    TCL_LIB_DIR="$TCL_INCLUDE_DIR/../lib"
79fi
80
81if test "X" = "X$TCL_INCLUDE_DIR" -a "X" != "X$TCL_LIB_DIR"
82then
83    TCL_INCLUDE_DIR="$TCL_LIB_DIR/../include"
84fi
85
86dnl ----------------------------------------------------------------
87dnl
88dnl	checks for alternative programs:
89dnl		GNU cc, cpp, install, ranlib, makeinfo
90dnl
91AC_PROG_CC
92AC_PROG_CPP
93AC_PROG_RANLIB
94dnl
95dnl ----------------------------------------------------------------
96dnl
97dnl	checks for typedefs
98dnl	checks for library functions
99dnl	checks for compiler characteristics
100dnl		ANSI 'const' available, correct ?
101dnl
102dnl
103dnl ----------------------------------------------------------------
104dnl
105dnl Locate tcl.h
106dnl Searches:
107dnl	TCL_INCLUDE_DIR		(--with-tcl, --with-tcl-include-dir)
108dnl	../../tcl8.2*/generic	(assume tcl source in sibling directory)
109dnl	../../tcl8.1*/generic	(assume tcl source in sibling directory)
110dnl	../../tcl8.0/generic	(assume tcl source in sibling directory)
111dnl	../../tcl/generic	(see above)
112dnl	../../tcl		(should be old version)
113dnl	$prefix/include		(--prefix)
114dnl	/usr/local/include
115dnl	/usr/include
116dnl
117
118AC_CACHE_CHECK(for directory with tcl.h,
119	memchan_cv_path_TCL_INCLUDE_DIR,
120	[memchan_cv_path_TCL_INCLUDE_DIR=""
121	 places="$TCL_INCLUDE_DIR \
122		../../tcl8.3.*/generic \
123		../../tcl8.3/generic \
124		../../tcl8.2.*/generic \
125		../../tcl8.2/generic \
126		../../tcl8.2b*/generic \
127		../../tcl8.2a*/generic \
128		../../tcl8.2.*/generic \
129		../../tcl8.1/generic \
130		../../tcl8.1b*/generic \
131		../../tcl8.1a*/generic \
132		../../tcl8.0.*/generic \
133		../../tcl8.0/generic \
134		../../tcl/generic \
135		../../tcl \
136		$prefix/include \
137		/usr/local/include \
138		/usr/include"
139     for dir in $places; do
140         if test -r $dir/tcl.h ; then
141            memchan_cv_path_TCL_INCLUDE_DIR=$dir
142            break
143         fi
144     done])
145dnl
146dnl verify success of search
147dnl
148TCL_INCLUDE_DIR=$memchan_cv_path_TCL_INCLUDE_DIR
149if test -z "$TCL_INCLUDE_DIR" ; then
150    AC_MSG_ERROR(not found; use --with-tcl=DIR or --with-tcl-include-dir=DIR)
151fi
152dnl
153dnl tcl.h found, now check for acceptable version of Tcl
154dnl
155AC_CACHE_CHECK(for up-to-date version of Tcl,
156    memchan_cv_vers_good_tcl_version,
157[AC_REQUIRE_CPP()
158    ac_save_cppflags="$CPPFLAGS"
159    CPPFLAGS="-I$TCL_INCLUDE_DIR $CPPFLAGS"
160    AC_EGREP_CPP(good_tcl_version,
161[#include <tcl.h>
162#if ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 0))
163    good_tcl_version
164#endif
165#if (TCL_MAJOR_VERSION > 8)
166    good_tcl_version
167#endif],memchan_cv_vers_good_tcl_version=yes,memchan_cv_vers_good_tcl_version=no)
168    CPPFLAGS=$ac_save_cppflags])
169
170if test "$memchan_cv_vers_good_tcl_version" = "no"; then
171    AC_MSG_ERROR(Your Tcl must be at least version 8.0)
172fi
173
174AC_SUBST(TCL_INCLUDE_DIR)
175dnl
176dnl ----------------------------------------------------------------
177dnl
178dnl Locate tcl library
179dnl Searches:
180dnl	TCL_LIB_DIR		(--with-tcl, --with-tcl-lib-dir)
181dnl	../../tcl8.2*/unix	(assume tcl source in sibling directory)
182dnl	../../tcl8.1*/unix	(assume tcl source in sibling directory)
183dnl	../../tcl8.0/unix	(assume tcl source in sibling directory)
184dnl	../../tcl/unix		(see above)
185dnl	../../tcl			(should be old version)
186dnl	$exec_prefix/lib	(--exec-prefix)
187dnl	$prefix/lib		(--prefix)
188dnl	/usr/local/lib
189dnl	/usr/lib
190dnl
191AC_CACHE_CHECK(for tcl library,
192	memchan_cv_lib_TCL_LIB,
193	[memchan_cv_lib_TCL_LIB=""
194	 places="$TCL_LIB_DIR \
195	../../tcl8.2.*/unix \
196	../../tcl8.2/unix \
197	../../tcl8.3.*/unix \
198	../../tcl8.3/unix \
199	../../tcl8.2b*/unix \
200	../../tcl8.2a*/unix \
201	../../tcl8.1.*/unix \
202	../../tcl8.1/unix \
203	../../tcl8.1b*/unix \
204	../../tcl8.1a*/unix \
205	../../tcl8.0.*/unix \
206	../../tcl8.0/unix \
207	../../tcl/unix \
208	../../tcl \
209	 $exec_prefix/lib \
210	 $prefix/lib \
211	 /usr/local/lib \
212	 /usr/lib"
213    for dir in $places; do
214        if test -n "$memchan_cv_lib_TCL_LIB"; then
215            break
216        fi
217        for version in 8.3 8.2 8.1.1 8.1 8.0.5 8.0.4 8.0.3 8.0 83 82 811 81 805 804 803 80 ""; do
218            if test -n "$memchan_cv_lib_TCL_LIB"; then
219                break
220            fi
221            for libsuff in .so ".so.*" .sl .a; do
222                if test -n "$memchan_cv_lib_TCL_LIB"; then
223                    break
224                fi
225                if test -f $dir/libtcl$version$libsuff; then
226                    memchan_cv_lib_TCL_LIB="-L$dir -ltcl$version"
227		    TCL_LIB_DIR="$dir"
228                fi
229            done
230        done
231    done])
232
233TCL_LIB="$memchan_cv_lib_TCL_LIB"
234if test -z "$TCL_LIB" ; then
235    AC_MSG_ERROR(not found; use --with-tcl-lib-dir=path)
236fi
237
238AC_SUBST(TCL_LIB)
239
240AC_CACHE_VAL(memchan_cv_TCL_LIB_DIR, [memchan_cv_TCL_LIB_DIR="$TCL_LIB_DIR"])
241TCL_LIB_DIR="$memchan_cv_TCL_LIB_DIR"
242
243dnl
244dnl ----------------------------------------------------------------
245dnl
246dnl load 'tclConfig.sh' and integrate its information
247dnl
248
249#--------------------------------------------------------------------
250#	Read in configuration information generated by Tcl for shared
251#	libraries, and arrange for it to be substituted into our
252#	Makefile.
253#--------------------------------------------------------------------
254
255file=$TCL_LIB_DIR/tclConfig.sh
256. $file
257CC=$TCL_CC
258SHLIB_CFLAGS=$TCL_SHLIB_CFLAGS
259SHLIB_LD=$TCL_SHLIB_LD
260SHLIB_LD_LIBS=$TCL_SHLIB_LD_LIBS
261SHLIB_SUFFIX=$TCL_SHLIB_SUFFIX
262SHLIB_VERSION=$TCL_SHLIB_VERSION
263DL_LIBS=$TCL_DL_LIBS
264LD_FLAGS=$TCL_LD_FLAGS
265
266eval "MEMCHAN_CC_SEARCH_FLAGS=\"$TCL_LD_SEARCH_FLAGS\""
267
268case $SHLIB_LD in
269*ld*)
270      MEMCHAN_LD_SEARCH_FLAGS=`echo ${MEMCHAN_CC_SEARCH_FLAGS} |sed -e "s|-Wl,||g" -e "s|,| |g"`
271      ;;
272*)
273      MEMCHAN_LD_SEARCH_FLAGS="${MEMCHAN_CC_SEARCH_FLAGS}"
274      ;;
275esac
276
277
278TCL_BASE=`echo ${TCL_LIB_SPEC} |sed -e "s|^.*-l||"`
279TCL_STUB_BASE=`echo ${TCL_STUB_LIB_SPEC} |sed -e "s|^.*-l||"`
280
281
282TCL_LIB_SPEC="-L${TCL_LIB_DIR} -l${TCL_BASE}"
283TCL_STUB_LIB_SPEC="-L${TCL_LIB_DIR} -l${TCL_STUB_BASE}"
284VERSION=""
285eval "TCL_UNSHARED_LIB_FILE=lib${TCL_BASE}${TCL_UNSHARED_LIB_SUFFIX}"
286eval "TCL_SHARED_LIB_FILE=lib${TCL_BASE}${TCL_SHARED_LIB_SUFFIX}"
287
288
289#--------------------------------------------------------------------
290#	The statements below define a collection of symbols related to
291#	building libmemchan as a shared library instead of a static library.
292#--------------------------------------------------------------------
293
294TCL_SHARED_LIBS=""
295#--------------------------------------------------------------------
296
297# Use stubs <=> (((major == 8) && (minor > 0)) || (major > 8)) && 'memchan as shared library'
298
299AC_MSG_CHECKING(for stubs)
300
301if test \( \( $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -gt 0 \) -o $TCL_MAJOR_VERSION -gt 8 \) -a "x$ok" = "xyes"
302then
303    AC_MSG_RESULT(yes)
304    MC_USING_STUBS=1
305    # Stubs
306    TCL_DEFS="$TCL_DEFS -DUSE_TCL_STUBS"
307    TCL_SHARED_LIBS="${TCL_STUB_LIB_SPEC}"
308else
309    AC_MSG_RESULT(no)
310    MC_USING_STUBS=0
311    # No stubs
312    case "$SHLIB_LD" in
313	*ldAix*)
314	TCL_SHARED_LIBS='${TCL_LIB_SPEC}'
315	;;
316    esac
317fi
318
319case "$SHLIB_LD" in
320    *ldAix*)
321    TCL_SHARED_LIBS="${TCL_SHARED_LIBS}"
322    ;;
323esac
324
325if test "x$ok" = "xyes" -a "x${SHLIB_SUFFIX}" != "x"; then
326    MEMCHAN_SHLIB_CFLAGS="${SHLIB_CFLAGS}"
327    eval "MEMCHAN_LIB_FILE=libmemchan${TCL_SHARED_LIB_SUFFIX}"
328    MAKE_LIB="\${SHLIB_LD} -o ${MEMCHAN_LIB_FILE} \${OBJECTS} ${TCL_SHARED_LIBS} ${SHLIB_LD_LIBS}"
329    RANLIB=":"
330
331    install_other=''
332else
333    MEMCHAN_SHLIB_CFLAGS=""
334    eval "MEMCHAN_LIB_FILE=libmemchan${TCL_UNSHARED_LIB_SUFFIX}"
335    MAKE_LIB="ar cr ${MEMCHAN_LIB_FILE} \${OBJECTS}"
336
337    install_other='install-bin'
338fi
339
340# Note:  in the following variable, it's important to use the absolute
341# path name of the Tcl directory rather than "..":  this is because
342# AIX remembers this path and will attempt to use it at run-time to look
343# up the Tcl library.
344
345if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
346    MEMCHAN_BUILD_LIB_SPEC="-L`pwd` -lmemchan${VERSION}"
347    MEMCHAN_LIB_SPEC="-L${exec_prefix}/lib -lmemchan${VERSION}"
348else
349    MEMCHAN_BUILD_LIB_SPEC="-L`pwd` -lmemchan`echo ${VERSION} | tr -d .`"
350    MEMCHAN_LIB_SPEC="-L${exec_prefix}/lib -lmemchan`echo ${VERSION} | tr -d .`"
351fi
352
353if test "x$exec_prefix" = "xNONE" ; then
354	MEMCHAN_LIB_DIR=${prefix}/lib
355else
356	MEMCHAN_LIB_DIR=${exec_prefix}/lib
357fi
358
359dnl
360dnl
361dnl  Check for some libraries we need for the tclsh application
362dnl
363dnl AC_CHECK_LIB(socket, main, [LIBS="$LIBS -lsocket"])
364dnl AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"])
365dnl AC_SUBST(LIBS)
366
367AC_CHECK_FUNCS(ltoa)
368
369dnl ----------------------------------------------------------------
370dnl non-standard substitutions
371dnl
372
373dnl don't bother with -ltclX.Y if not running under AIX
374if test "x${TCL_SHARED_LIB_SUFFIX}" != 'x${VERSION}.a' -o "x${SHLIB_SUFFIX}" != "x.so"; then
375	TCL_LIB_SPEC=""
376fi
377
378
379AC_SUBST(CC)
380AC_SUBST(DL_LIBS)
381AC_SUBST(LD_FLAGS)
382AC_SUBST(TCL_LIBS)
383AC_SUBST(MAKE_LIB)
384AC_SUBST(SHLIB_CFLAGS)
385AC_SUBST(SHLIB_LD)
386AC_SUBST(SHLIB_LD_LIBS)
387AC_SUBST(SHLIB_SUFFIX)
388AC_SUBST(SHLIB_VERSION)
389AC_SUBST(TCL_BUILD_LIB_SPEC)
390AC_SUBST(TCL_LIB_SPEC)
391AC_SUBST(TCL_SRC_DIR)
392AC_SUBST(TCL_LIB_DIR)
393AC_SUBST(TCL_INCLUDE_DIR)
394AC_SUBST(TCL_VERSION)
395AC_SUBST(TCL_DEFS)
396AC_SUBST(MC_USING_STUBS)
397AC_SUBST(MEMCHAN_BUILD_LIB_SPEC)
398AC_SUBST(MEMCHAN_LD_SEARCH_FLAGS)
399AC_SUBST(MEMCHAN_LIB_FILE)
400AC_SUBST(MEMCHAN_LIB_SPEC)
401AC_SUBST(MEMCHAN_LIB_DIR)
402AC_SUBST(MEMCHAN_SHLIB_CFLAGS)
403AC_SUBST(MEMCHAN_VERSION)
404AC_SUBST(MEMCHAN_MAJOR_VERSION)
405AC_SUBST(MEMCHAN_MINOR_VERSION)
406AC_SUBST(install_other)
407
408dnl for GCC activate -Wall
409if test ! -z "$GCC"; then
410	CC="$CC -Wall"
411fi
412
413
414dnl
415AC_OUTPUT(Makefile pkgIndex.tcl)
416
417