1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT([jim], [0.63], [steveb@workware.net.au])
AC_CONFIG_HEADER(jimautoconf.h)
# Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
# Checks for types
AC_CHECK_TYPES(long long, AC_SUBST(DEFINE_HAVE_LONG_LONG,["#define HAVE_LONG_LONG 1"]),AC_SUBST(DEFINE_HAVE_LONG_LONG,["#undef HAVE_LONG_LONG"]))
# Shared library support. Because we don't believe in automake!
AC_CANONICAL_HOST
case $host in
*-*-darwin*)
AC_SUBST(SH_CFLAGS,-dynamic)
AC_SUBST(SH_LDFLAGS,"-dynamiclib -undefined suppress -flat_namespace");;
*)
AC_SUBST(SH_CFLAGS,-fPIC)
AC_SUBST(SH_LDFLAGS,-shared);;
esac
if test -n "$host_alias"; then
AC_SUBST(CROSS,$host_alias-)
fi
AC_ARG_ENABLE(fork,
[ --disable-fork do not use fork (no exec, etc.)],
[
if test "x$enableval" = "xno" ; then
AC_MSG_RESULT(* disabling fork)
EXTRA_CFLAGS="-DJIM_NOFORK"
fi
],
)
AC_ARG_ENABLE(math,
[ --enable-math include support for math functions],
[
if test "x$enableval" = "xyes" ; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -DJIM_MATH_FUNCTIONS"
fi
]
)
AC_ARG_ENABLE(ipv6,
[ --enable-ipv6 include ipv6 support in the aio extension],
[
if test "x$enableval" = "xyes" ; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -DJIM_IPV6"
fi
]
)
# All extensions
ext_all=$(echo stdlib load package readdir glob array clock exec file posix regexp signal tclcompat aio bio eventloop syslog nvp tree | tr ' ' '\n' | sort)
# Default extensions
ext_default=$(echo stdlib load package readdir glob array clock exec file posix regexp signal tclcompat aio eventloop syslog | tr ' ' '\n' | sort)
AC_ARG_WITH(jim-ext,
[ --with-jim-ext="ext1 ext2 ..."
Specify additional jim extensions to include.
These are enabled by default:
aio - ANSI I/O, including open and socket
eventloop - after, vwait, update
array - Tcl-compatible array command
clock - Tcl-compatible clock command
exec - Tcl-compatible exec command
file - Tcl-compatible file command
glob - Tcl-compatible glob command
readdir - Required for glob
package - Package management with the package command
load - Load binary extensions at runtime with load or package
posix - Posix APIs including os.fork, os.wait, pid
regexp - Tcl-compatible regexp, regsub commands
signal - Signal handling
stdlib - Built-in commands including lassign, lambda, alias
syslog - System logging with syslog
tclcompat - Tcl compatible read, gets, puts, parray, case, ...
These are disabled by default:
bio - Binary I/O, mostly for bio copy/file copy
nvp - Name-value pairs C-only API
tree - Similar to tcllib ::struct::tree using references
])
AC_ARG_WITH(out-jim-ext,
[ --with-out-jim-ext="default|ext1 ext2 ..."
Specify jim extensions to exclude.
If 'default' is given, the default extensions will not be added.
])
if test "$with_out_jim_ext" = "default"; then
# but we always include stdlib
ext_default=stdlib
with_out_jim_ext=
fi
# Check valid extension names
for i in $with_jim_ext $with_out_jim_ext; do
echo "$ext_all" | grep "^$i\$" >/dev/null || AC_MSG_ERROR([Unknown extension: $i])
done
JIM_LIBTYPE=static
AC_ARG_WITH(jim-shared,
[ --with-jim-shared build a shared library instead of a static library],
[
if test "x$withval" = "xyes" ; then
JIM_LIBTYPE=shared
fi
]
)
AC_SUBST(JIM_LIBTYPE,$JIM_LIBTYPE)
AC_CHECK_HEADERS([sys/un.h])
AC_CHECK_FUNCS([ualarm sysinfo lstat fork vfork])
AC_CHECK_FUNCS([backtrace geteuid mkstemp realpath strptime])
AC_CHECK_FUNCS([regcomp waitpid sigaction sys_signame sys_siglist])
AC_CHECK_FUNCS([syslog opendir readlink sleep usleep pipe inet_ntop getaddrinfo])
AC_SEARCH_LIBS(dlopen, dl,
AC_SUBST(LIBDL,${ac_cv_search_dlopen%none required})
AC_DEFINE([HAVE_DLOPEN],[1],[Have the dlopen function])
)
dnl AC_SEARCH_LIBS doesn't work for mingw, so check for winsock.h instead
AC_CHECK_HEADER(winsock.h,[AC_SUBST(LIBSOCK,-lwsock32)],
AC_SEARCH_LIBS(socket, socket,
AC_SUBST(LIBSOCK,${ac_cv_search_socket%none required})
)
)
dnl Look for environ alternatives. Possibility #1: is environ in unistd.h?
AC_MSG_CHECKING([for environ in unistd.h])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#define _GNU_SOURCE
#include <unistd.h>
int main(int argc, char **argv) { char **ep = environ; }
]])], [
AC_MSG_RESULT([yes])
has_environ=yes
], [
AC_MSG_RESULT([no])
# Possibility #2: can environ be found in an available library?
AC_MSG_CHECKING([for extern environ])
AC_LINK_IFELSE([
AC_LANG_SOURCE([[
extern char **environ;
int main(int argc, char **argv) { char **ep = environ; }
]])
], [
AC_DEFINE(NEED_ENVIRON_EXTERN, [1], [Must declare 'environ' to use it.])
has_environ=yes
], [
has_environ=no
])
AC_MSG_RESULT([${has_environ}])
])
if test "${has_environ}" != "yes" ; then
AC_MSG_FAILURE([Could find 'environ' in unistd.h or available libraries.])
fi
# Now that we know what the platform supports:
# For all known extensions:
# - If it is disabled, remove it
# - Otherwise, check to see if it's pre-requisites are met
# - If yes, add it if it is enabled or is a default
# - If no, error if it is enabled, or do nothing otherwise
needs_regexp="ac_cv_func_regcomp"
needs_syslog="ac_cv_func_syslog"
needs_exec="ac_cv_func_vfork"
needs_posix="ac_cv_func_waitpid"
needs_load="ac_cv_search_dlopen"
needs_signal="ac_cv_func_sigaction ac_cv_func_vfork"
needs_readdir="ac_cv_func_opendir"
ext_add=$(echo $with_jim_ext | tr ' ' '\n')
ext_del=$(echo $with_out_jim_ext | tr ' ' '\n')
for i in $ext_all; do
AC_MSG_CHECKING(extension $i)
echo "$ext_del" | grep "^$i\$" >/dev/null
if test $? -eq 0; then
AC_MSG_RESULT(disabled)
continue
fi
# Check dependencies
eval "dep=\$needs_$i"
met=1
for d in $dep; do
eval "check=\$$d"
if test "$check" = "no" -o -z "$check" ; then
met=0
break
fi
done
echo "$ext_add" | grep "^$i\$" >/dev/null
if test $? -eq 0; then
if test $met -eq 0; then
AC_MSG_ERROR(dependencies not met)
fi
AC_MSG_RESULT(enabled)
ext="$ext $i"
continue
fi
echo "$ext_default" | grep "^$i\$" >/dev/null
if test $? -eq 0; then
if test $met -eq 0; then
AC_MSG_RESULT(disabled (dependencies))
continue
fi
AC_MSG_RESULT(enabled (default))
ext="$ext $i"
continue
fi
AC_MSG_RESULT(not enabled)
done
ext=$(echo $ext | tr '\n' ' ')
AC_MSG_RESULT(Jim extensions: $ext)
AC_SUBST(JIM_EXTENSIONS,$ext)
for i in $ext; do
EXTRA_CFLAGS="$EXTRA_CFLAGS -Djim_ext_$i"
done
AC_SUBST(EXTRA_CFLAGS,$EXTRA_CFLAGS)
AC_SUBST(SRCDIR,`dirname $0`)
AC_CONFIG_FILES([Makefile jimautoconfext.h])
AC_OUTPUT
|