blob: ff0c726fc6e6ed0fc233dfb79a415617c89c3979 [file] [log] [blame]
Bram Moolenaar3f7d0902016-11-12 21:13:42 +01001dnl configure.ac: autoconf script for Vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3dnl Process this file with autoconf 2.12 or 2.13 to produce "configure".
4dnl Should also work with autoconf 2.54 and later.
5
6AC_INIT(vim.h)
7AC_CONFIG_HEADER(auto/config.h:config.h.in)
8
9dnl Being able to run configure means the system is Unix (compatible).
10AC_DEFINE(UNIX)
11AC_PROG_MAKE_SET
12
13dnl Checks for programs.
Bram Moolenaar2e324952018-04-14 14:37:07 +020014AC_PROG_CC_C89 dnl required by almost everything
Bram Moolenaarc0394412017-04-20 20:20:23 +020015AC_PROG_CPP dnl required by header file checks
16AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
17AC_PROG_FGREP dnl finds working grep -F
18AC_ISC_POSIX dnl required by AC_C_CROSS
19AC_PROG_AWK dnl required for "make html" in ../doc
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21dnl Don't strip if we don't have it
22AC_CHECK_PROG(STRIP, strip, strip, :)
23
Bram Moolenaar325b7a22004-07-05 15:58:32 +000024dnl Check for extension of executables
Bram Moolenaar071d4272004-06-13 20:20:40 +000025AC_EXEEXT
26
Bram Moolenaar446cb832008-06-24 21:56:24 +000027dnl Check for standard headers. We don't use this in Vim but other stuff
28dnl in autoconf needs it, where it uses STDC_HEADERS.
29AC_HEADER_STDC
30AC_HEADER_SYS_WAIT
31
Bram Moolenaarf788a062011-12-14 20:51:25 +010032dnl Check for the flag that fails if stuff are missing.
33
34AC_MSG_CHECKING(--enable-fail-if-missing argument)
35AC_ARG_ENABLE(fail_if_missing,
36 [ --enable-fail-if-missing Fail if dependencies on additional features
37 specified on the command line are missing.],
38 [fail_if_missing="yes"],
39 [fail_if_missing="no"])
40AC_MSG_RESULT($fail_if_missing)
41
Bram Moolenaar071d4272004-06-13 20:20:40 +000042dnl Set default value for CFLAGS if none is defined or it's empty
43if test -z "$CFLAGS"; then
44 CFLAGS="-O"
45 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
46fi
47if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000048 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020049 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000050 if test "x$gccversion" = "x"; then
51 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +020052 gccversion=`$CC --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[[^0-9]]*\([[0-9]]\.[[0-9.]]*\).*$/\1/g'`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000053 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +000054 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
55 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +000056 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +000057 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
58 else
59 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
60 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
61 CFLAGS="$CFLAGS -fno-strength-reduce"
62 fi
63 fi
64fi
65
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020066dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
67dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
68dnl the version number of the clang in use.
69dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +010070AC_MSG_CHECKING(for clang version)
71CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed -n -e 's/^.*clang[[^0-9]]*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020072if test x"$CLANG_VERSION_STRING" != x"" ; then
73 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
74 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
75 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
76 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
77 AC_MSG_RESULT($CLANG_VERSION)
78 dnl If you find the same issue with versions earlier than 500.2.75,
79 dnl change the constant 500002075 below appropriately. To get the
80 dnl integer corresponding to a version number, refer to the
81 dnl definition of CLANG_VERSION above.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +010082 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020083 if test "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +010084 AC_MSG_RESULT(no)
85 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
86 else
87 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020088 fi
89else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +010090 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020091fi
92
Bram Moolenaar446cb832008-06-24 21:56:24 +000093dnl If configure thinks we are cross compiling, there might be something
94dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +020095CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +000096if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +000097 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +020098 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +000099fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200100AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000102dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
103dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
105
106if test -f ./toolcheck; then
107 AC_CHECKING(for buggy tools)
108 sh ./toolcheck 1>&AC_FD_MSG
109fi
110
111OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
112
113dnl Check for BeOS, which needs an extra source file
114AC_MSG_CHECKING(for BeOS)
115case `uname` in
116 BeOS) OS_EXTRA_SRC=os_beos.c; OS_EXTRA_OBJ=objects/os_beos.o
117 BEOS=yes; AC_MSG_RESULT(yes);;
118 *) BEOS=no; AC_MSG_RESULT(no);;
119esac
120
121dnl If QNX is found, assume we don't want to use Xphoton
122dnl unless it was specifically asked for (--with-x)
123AC_MSG_CHECKING(for QNX)
124case `uname` in
125 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
126 test -z "$with_x" && with_x=no
127 QNX=yes; AC_MSG_RESULT(yes);;
128 *) QNX=no; AC_MSG_RESULT(no);;
129esac
130
131dnl Check for Darwin and MacOS X
132dnl We do a check for MacOS X in the very beginning because there
133dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134AC_MSG_CHECKING([for Darwin (Mac OS X)])
135if test "`(uname) 2>/dev/null`" = Darwin; then
136 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200137 MACOS_X=yes
Bram Moolenaar2e324952018-04-14 14:37:07 +0200138 CPPFLAGS="$CPPFLAGS -D_DARWIN_C_SOURCE -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
140 AC_MSG_CHECKING(--disable-darwin argument)
141 AC_ARG_ENABLE(darwin,
142 [ --disable-darwin Disable Darwin (Mac OS X) support.],
143 , [enable_darwin="yes"])
144 if test "$enable_darwin" = "yes"; then
145 AC_MSG_RESULT(no)
146 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200147 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148 AC_MSG_RESULT(yes)
149 else
150 AC_MSG_RESULT([no, Darwin support disabled])
151 enable_darwin=no
152 fi
153 else
154 AC_MSG_RESULT([yes, Darwin support excluded])
155 fi
156
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000157 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000158 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000159 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000160 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000161
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100162 AC_MSG_CHECKING(--with-developer-dir argument)
163 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
164 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100165 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100166
167 if test "x$DEVELOPER_DIR" = "x"; then
168 AC_PATH_PROG(XCODE_SELECT, xcode-select)
169 if test "x$XCODE_SELECT" != "x"; then
170 AC_MSG_CHECKING(for developer dir using xcode-select)
171 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
172 AC_MSG_RESULT([$DEVELOPER_DIR])
173 else
174 DEVELOPER_DIR=/Developer
175 fi
176 fi
177
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000178 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000179 AC_MSG_CHECKING(for 10.4 universal SDK)
180 dnl There is a terrible inconsistency (but we appear to get away with it):
181 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
182 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
183 dnl tests using the preprocessor are actually done with the wrong header
184 dnl files. $LDFLAGS is set at the end, because configure uses it together
185 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000186 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000187 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000188 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100189 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000190 AC_TRY_LINK([ ], [ ],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000191 AC_MSG_RESULT(found, will make universal binary),
192
193 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000194 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000195 AC_MSG_CHECKING(if Intel architecture is supported)
196 CPPFLAGS="$CPPFLAGS -arch i386"
197 LDFLAGS="$save_ldflags -arch i386"
198 AC_TRY_LINK([ ], [ ],
199 AC_MSG_RESULT(yes); MACARCH="intel",
200 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000201 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000202 CPPFLAGS="$save_cppflags -arch ppc"
203 LDFLAGS="$save_ldflags -arch ppc"))
204 elif test "x$MACARCH" = "xintel"; then
205 CPPFLAGS="$CPPFLAGS -arch intel"
206 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000207 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000208 CPPFLAGS="$CPPFLAGS -arch ppc"
209 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000210 fi
211
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200213 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200214 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000215 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000216 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100217 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200218 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219
220 dnl If Carbon is found, assume we don't want X11
221 dnl unless it was specifically asked for (--with-x)
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000222 dnl or Motif, Athena or GTK GUI is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223 AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes)
224 if test "x$CARBON" = "xyes"; then
Bram Moolenaar98921892016-02-23 17:14:37 +0100225 if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2 -a "X$enable_gui" != Xgtk3; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226 with_x=no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227 fi
228 fi
229 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000230
Bram Moolenaardb552d602006-03-23 22:59:57 +0000231 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000232 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000233 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000234 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
235 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
236 fi
237
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238else
239 AC_MSG_RESULT(no)
240fi
241
Bram Moolenaar39766a72013-11-03 00:41:00 +0100242dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
243dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100244AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100245
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246AC_SUBST(OS_EXTRA_SRC)
247AC_SUBST(OS_EXTRA_OBJ)
248
249dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
250dnl Only when the directory exists and it wasn't there yet.
251dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000252dnl Skip all of this when cross-compiling.
253if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000254 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000255 have_local_include=''
256 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000257 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
258 --without-local-dir do not search /usr/local for local libraries.], [
259 local_dir="$withval"
260 case "$withval" in
261 */*) ;;
262 no)
263 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200264 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000265 have_local_lib=yes
266 ;;
267 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
268 esac
269 AC_MSG_RESULT($local_dir)
270 ], [
271 local_dir=/usr/local
272 AC_MSG_RESULT(Defaulting to $local_dir)
273 ])
274 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000275 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100276 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
277 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000278 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000279 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000281 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
282 tt=`echo "$LDFLAGS" | sed -e "s+-L${local_dir}/lib ++g" -e "s+-L${local_dir}/lib$++g"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000283 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000284 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000285 fi
286 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000287 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
288 tt=`echo "$CPPFLAGS" | sed -e "s+-I${local_dir}/include ++g" -e "s+-I${local_dir}/include$++g"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000289 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000290 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000291 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292 fi
293fi
294
295AC_MSG_CHECKING(--with-vim-name argument)
296AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
297 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000298 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299AC_SUBST(VIMNAME)
300AC_MSG_CHECKING(--with-ex-name argument)
301AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
302 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
303 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
304AC_SUBST(EXNAME)
305AC_MSG_CHECKING(--with-view-name argument)
306AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
307 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
308 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
309AC_SUBST(VIEWNAME)
310
311AC_MSG_CHECKING(--with-global-runtime argument)
312AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath'],
313 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$withval"),
314 AC_MSG_RESULT(no))
315
316AC_MSG_CHECKING(--with-modified-by argument)
317AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
318 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
319 AC_MSG_RESULT(no))
320
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200321dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322AC_MSG_CHECKING(if character set is EBCDIC)
323AC_TRY_COMPILE([ ],
324[ /* TryCompile function for CharSet.
325 Treat any failure as ASCII for compatibility with existing art.
326 Use compile-time rather than run-time tests for cross-compiler
327 tolerance. */
328#if '0'!=240
329make an error "Character set is not EBCDIC"
330#endif ],
331[ # TryCompile action if true
332cf_cv_ebcdic=yes ],
333[ # TryCompile action if false
334cf_cv_ebcdic=no])
335# end of TryCompile ])
336# end of CacheVal CvEbcdic
337AC_MSG_RESULT($cf_cv_ebcdic)
338case "$cf_cv_ebcdic" in #(vi
339 yes) AC_DEFINE(EBCDIC)
340 line_break='"\\n"'
341 ;;
342 *) line_break='"\\012"';;
343esac
344AC_SUBST(line_break)
345
346if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200347dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200348AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349case `uname` in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200350 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351 dnl If using cc the environment variable _CC_CCMODE must be
352 dnl set to "1", so that some compiler extensions are enabled.
353 dnl If using c89 the environment variable is named _CC_C89MODE.
354 dnl Note: compile with c89 never tested.
355 if test "$CC" = "cc"; then
356 ccm="$_CC_CCMODE"
357 ccn="CC"
358 else
359 if test "$CC" = "c89"; then
360 ccm="$_CC_C89MODE"
361 ccn="C89"
362 else
363 ccm=1
364 fi
365 fi
366 if test "$ccm" != "1"; then
367 echo ""
368 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200369 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200370 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000371 echo " Do:"
372 echo " export _CC_${ccn}MODE=1"
373 echo " and then call configure again."
374 echo "------------------------------------------"
375 exit 1
376 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200377 # Set CFLAGS for configure process.
378 # This will be reset later for config.mk.
379 # Use haltonmsg to force error for missing H files.
380 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
381 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000382 AC_MSG_RESULT(yes)
383 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200384 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 AC_MSG_RESULT(no)
386 ;;
387esac
388fi
389
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200390dnl Set QUOTESED. Needs additional backslashes on zOS
391if test "$zOSUnix" = "yes"; then
392 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
393else
394 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
395fi
396AC_SUBST(QUOTESED)
397
398
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200399dnl Link with -lsmack for Smack stuff; if not found
400AC_MSG_CHECKING(--disable-smack argument)
401AC_ARG_ENABLE(smack,
402 [ --disable-smack Do not check for Smack support.],
403 , enable_smack="yes")
404if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200405 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200406 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200407else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200408 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200409fi
410if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200411 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
412fi
413if test "$enable_smack" = "yes"; then
414 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
415 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
416 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200417 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200418fi
419if test "$enable_smack" = "yes"; then
420 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200421 [LIBS="$LIBS -lattr"
422 found_smack="yes"
423 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000424fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200426dnl When smack was found don't search for SELinux
427if test "x$found_smack" = "x"; then
428 dnl Link with -lselinux for SELinux stuff; if not found
429 AC_MSG_CHECKING(--disable-selinux argument)
430 AC_ARG_ENABLE(selinux,
431 [ --disable-selinux Do not check for SELinux support.],
432 , enable_selinux="yes")
433 if test "$enable_selinux" = "yes"; then
434 AC_MSG_RESULT(no)
435 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100436 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200437 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100438 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200439 else
440 AC_MSG_RESULT(yes)
441 fi
442fi
443
Bram Moolenaar071d4272004-06-13 20:20:40 +0000444dnl Check user requested features.
445
446AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200447AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100449 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000450
451dovimdiff=""
452dogvimdiff=""
453case "$features" in
454 tiny) AC_DEFINE(FEAT_TINY) ;;
455 small) AC_DEFINE(FEAT_SMALL) ;;
456 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
457 dogvimdiff="installgvimdiff" ;;
458 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
459 dogvimdiff="installgvimdiff" ;;
460 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
461 dogvimdiff="installgvimdiff" ;;
462 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
463esac
464
465AC_SUBST(dovimdiff)
466AC_SUBST(dogvimdiff)
467
468AC_MSG_CHECKING(--with-compiledby argument)
469AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
470 compiledby="$withval"; AC_MSG_RESULT($withval),
471 compiledby=""; AC_MSG_RESULT(no))
472AC_SUBST(compiledby)
473
474AC_MSG_CHECKING(--disable-xsmp argument)
475AC_ARG_ENABLE(xsmp,
476 [ --disable-xsmp Disable XSMP session management],
477 , enable_xsmp="yes")
478
479if test "$enable_xsmp" = "yes"; then
480 AC_MSG_RESULT(no)
481 AC_MSG_CHECKING(--disable-xsmp-interact argument)
482 AC_ARG_ENABLE(xsmp-interact,
483 [ --disable-xsmp-interact Disable XSMP interaction],
484 , enable_xsmp_interact="yes")
485 if test "$enable_xsmp_interact" = "yes"; then
486 AC_MSG_RESULT(no)
487 AC_DEFINE(USE_XSMP_INTERACT)
488 else
489 AC_MSG_RESULT(yes)
490 fi
491else
492 AC_MSG_RESULT(yes)
493fi
494
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200495dnl Check for Lua feature.
496AC_MSG_CHECKING(--enable-luainterp argument)
497AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200498 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200499 [enable_luainterp="no"])
500AC_MSG_RESULT($enable_luainterp)
501
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200502if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100503 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
504 AC_MSG_ERROR([cannot use Lua with tiny or small features])
505 fi
506
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200507 dnl -- find the lua executable
508 AC_SUBST(vi_cv_path_lua)
509
510 AC_MSG_CHECKING(--with-lua-prefix argument)
511 AC_ARG_WITH(lua_prefix,
512 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
513 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200514 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200515
516 if test "X$with_lua_prefix" != "X"; then
517 vi_cv_path_lua_pfx="$with_lua_prefix"
518 else
519 AC_MSG_CHECKING(LUA_PREFIX environment var)
520 if test "X$LUA_PREFIX" != "X"; then
521 AC_MSG_RESULT("$LUA_PREFIX")
522 vi_cv_path_lua_pfx="$LUA_PREFIX"
523 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200524 AC_MSG_RESULT([not set, default to /usr])
525 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200526 fi
527 fi
528
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200529 AC_MSG_CHECKING(--with-luajit)
530 AC_ARG_WITH(luajit,
531 [ --with-luajit Link with LuaJIT instead of Lua.],
532 [vi_cv_with_luajit="$withval"],
533 [vi_cv_with_luajit="no"])
534 AC_MSG_RESULT($vi_cv_with_luajit)
535
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200536 LUA_INC=
537 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200538 if test "x$vi_cv_with_luajit" != "xno"; then
539 dnl -- try to find LuaJIT executable
540 AC_PATH_PROG(vi_cv_path_luajit, luajit)
541 if test "X$vi_cv_path_luajit" != "X"; then
542 dnl -- find LuaJIT version
543 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100544 [ vi_cv_version_luajit=`${vi_cv_path_luajit} -v 2>&1 | sed 's/LuaJIT \([[0-9.]]*\)\.[[0-9]]\(-[[a-z0-9]]*\)* .*/\1/'` ])
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200545 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
546 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
547 vi_cv_path_lua="$vi_cv_path_luajit"
548 vi_cv_version_lua="$vi_cv_version_lua_luajit"
549 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200550 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200551 dnl -- try to find Lua executable
552 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
553 if test "X$vi_cv_path_plain_lua" != "X"; then
554 dnl -- find Lua version
555 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
556 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
557 fi
558 vi_cv_path_lua="$vi_cv_path_plain_lua"
559 vi_cv_version_lua="$vi_cv_version_plain_lua"
560 fi
561 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
562 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100563 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200564 AC_MSG_RESULT(yes)
565 LUA_INC=/luajit-$vi_cv_version_luajit
566 fi
567 fi
568 if test "X$LUA_INC" = "X"; then
569 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100570 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200571 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200572 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200573 AC_MSG_RESULT(no)
574 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100575 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200576 AC_MSG_RESULT(yes)
577 LUA_INC=/lua$vi_cv_version_lua
578 else
579 AC_MSG_RESULT(no)
580 vi_cv_path_lua_pfx=
581 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200582 fi
583 fi
584 fi
585
586 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200587 if test "x$vi_cv_with_luajit" != "xno"; then
588 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
589 if test "X$multiarch" != "X"; then
590 lib_multiarch="lib/${multiarch}"
591 else
592 lib_multiarch="lib"
593 fi
594 if test "X$vi_cv_version_lua" = "X"; then
595 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
596 else
597 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
598 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200599 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200600 if test "X$LUA_INC" != "X"; then
601 dnl Test alternate location using version
602 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
603 else
604 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
605 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200606 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200607 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200608 lua_ok="yes"
609 else
610 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
611 libs_save=$LIBS
612 LIBS="$LIBS $LUA_LIBS"
613 AC_TRY_LINK(,[ ],
614 AC_MSG_RESULT(yes); lua_ok="yes",
615 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
616 LIBS=$libs_save
617 fi
618 if test "x$lua_ok" = "xyes"; then
619 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
620 LUA_SRC="if_lua.c"
621 LUA_OBJ="objects/if_lua.o"
622 LUA_PRO="if_lua.pro"
623 AC_DEFINE(FEAT_LUA)
624 fi
625 if test "$enable_luainterp" = "dynamic"; then
626 if test "x$vi_cv_with_luajit" != "xno"; then
627 luajit="jit"
628 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200629 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
630 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
631 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200632 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200633 ext="dylib"
634 indexes=""
635 else
636 ext="so"
637 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
638 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
639 if test "X$multiarch" != "X"; then
640 lib_multiarch="lib/${multiarch}"
641 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200642 fi
643 dnl Determine the sover for the current version, but fallback to
644 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200645 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200646 for subdir in "${lib_multiarch}" lib64 lib; do
647 if test -z "$subdir"; then
648 continue
649 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200650 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
651 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
652 for i in $indexes ""; do
653 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200654 sover2="$i"
655 break 3
656 fi
657 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100658 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200659 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200660 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200661 if test "X$sover" = "X"; then
662 AC_MSG_RESULT(no)
663 lua_ok="no"
664 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
665 else
666 AC_MSG_RESULT(yes)
667 lua_ok="yes"
668 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
669 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200670 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200671 AC_DEFINE(DYNAMIC_LUA)
672 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200673 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200674 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200675 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200676 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200677 test "`(uname -m) 2>/dev/null`" = "x86_64"; then
678 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
679 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
680 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200681 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200682 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100683 AC_MSG_ERROR([could not configure lua])
684 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200685 AC_SUBST(LUA_SRC)
686 AC_SUBST(LUA_OBJ)
687 AC_SUBST(LUA_PRO)
688 AC_SUBST(LUA_LIBS)
689 AC_SUBST(LUA_CFLAGS)
690fi
691
692
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000693dnl Check for MzScheme feature.
694AC_MSG_CHECKING(--enable-mzschemeinterp argument)
695AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200696 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000697 [enable_mzschemeinterp="no"])
698AC_MSG_RESULT($enable_mzschemeinterp)
699
700if test "$enable_mzschemeinterp" = "yes"; then
701 dnl -- find the mzscheme executable
702 AC_SUBST(vi_cv_path_mzscheme)
703
704 AC_MSG_CHECKING(--with-plthome argument)
705 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000706 [ --with-plthome=PLTHOME Use PLTHOME.],
707 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000708 with_plthome="";AC_MSG_RESULT("no"))
709
710 if test "X$with_plthome" != "X"; then
711 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100712 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000713 else
714 AC_MSG_CHECKING(PLTHOME environment var)
715 if test "X$PLTHOME" != "X"; then
716 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000717 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100718 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000719 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000720 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000721 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000722 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000723
724 dnl resolve symbolic link, the executable is often elsewhere and there
725 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000726 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000727 lsout=`ls -l $vi_cv_path_mzscheme`
728 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
729 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
730 fi
731 fi
732
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000733 if test "X$vi_cv_path_mzscheme" != "X"; then
734 dnl -- find where MzScheme thinks it was installed
735 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000736 dnl different versions of MzScheme differ in command line processing
737 dnl use universal approach
738 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000739 (build-path (call-with-values \
740 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000741 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
742 dnl Remove a trailing slash
743 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
744 sed -e 's+/$++'` ])
745 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000746 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000747 fi
748 fi
749
750 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100751 AC_MSG_CHECKING(for racket include directory)
752 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
753 if test "X$SCHEME_INC" != "X"; then
754 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000755 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100756 AC_MSG_RESULT(not found)
757 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
758 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
759 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000760 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000761 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000762 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100763 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
764 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000765 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100766 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000767 else
768 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100769 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
770 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100771 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100772 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100773 else
774 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100775 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
776 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100777 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100778 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100779 else
780 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100781 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
782 if test -f /usr/include/racket/scheme.h; then
783 AC_MSG_RESULT(yes)
784 SCHEME_INC=/usr/include/racket
785 else
786 AC_MSG_RESULT(no)
787 vi_cv_path_mzscheme_pfx=
788 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100789 fi
790 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000791 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000792 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000793 fi
794 fi
795
796 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100797
798 AC_MSG_CHECKING(for racket lib directory)
799 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
800 if test "X$SCHEME_LIB" != "X"; then
801 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000802 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100803 AC_MSG_RESULT(not found)
804 fi
805
806 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
807 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200808 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100809 MZSCHEME_LIBS="-framework Racket"
810 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
811 elif test -f "${path}/libmzscheme3m.a"; then
812 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
813 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
814 elif test -f "${path}/libracket3m.a"; then
815 MZSCHEME_LIBS="${path}/libracket3m.a"
816 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
817 elif test -f "${path}/libracket.a"; then
818 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
819 elif test -f "${path}/libmzscheme.a"; then
820 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
821 else
822 dnl Using shared objects
823 if test -f "${path}/libmzscheme3m.so"; then
824 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
825 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
826 elif test -f "${path}/libracket3m.so"; then
827 MZSCHEME_LIBS="-L${path} -lracket3m"
828 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
829 elif test -f "${path}/libracket.so"; then
830 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
831 else
832 dnl try next until last
833 if test "$path" != "$SCHEME_LIB"; then
834 continue
835 fi
836 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
837 fi
838 if test "$GCC" = yes; then
839 dnl Make Vim remember the path to the library. For when it's not in
840 dnl $LD_LIBRARY_PATH.
841 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
842 elif test "`(uname) 2>/dev/null`" = SunOS &&
843 uname -r | grep '^5' >/dev/null; then
844 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
845 fi
846 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000847 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100848 if test "X$MZSCHEME_LIBS" != "X"; then
849 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000850 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100851 done
852
853 AC_MSG_CHECKING([if racket requires -pthread])
854 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
855 AC_MSG_RESULT(yes)
856 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
857 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
858 else
859 AC_MSG_RESULT(no)
860 fi
861
862 AC_MSG_CHECKING(for racket config directory)
863 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
864 if test "X$SCHEME_CONFIGDIR" != "X"; then
865 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
866 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
867 else
868 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000869 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100870
871 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100872 SCHEME_COLLECTS=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-collects-dir))) (when (path? p) (let-values (((base _1 _2) (split-path p))) (display base))))'`
873 if test "X$SCHEME_COLLECTS" = "X"; then
874 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
875 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100876 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100877 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
878 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100879 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100880 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
881 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
882 else
883 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
884 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
885 fi
Bram Moolenaar75676462013-01-30 14:55:42 +0100886 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100887 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100888 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000889 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100890 if test "X$SCHEME_COLLECTS" != "X" ; then
891 AC_MSG_RESULT(${SCHEME_COLLECTS})
892 else
893 AC_MSG_RESULT(not found)
894 fi
895
896 AC_MSG_CHECKING(for mzscheme_base.c)
897 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000898 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100899 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
900 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100901 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100902 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100903 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100904 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
905 MZSCHEME_MOD="++lib scheme/base"
906 else
907 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
908 MZSCHEME_EXTRA="mzscheme_base.c"
909 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
910 MZSCHEME_MOD=""
911 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100912 fi
913 fi
914 if test "X$MZSCHEME_EXTRA" != "X" ; then
915 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000916 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100917 AC_MSG_RESULT(needed)
918 else
919 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000920 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100921
Bram Moolenaar9e902192013-07-17 18:58:11 +0200922 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
923 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
924
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000925 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100926 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200927
928 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
929 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
930 cflags_save=$CFLAGS
931 libs_save=$LIBS
932 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
933 LIBS="$LIBS $MZSCHEME_LIBS"
934 AC_TRY_LINK(,[ ],
935 AC_MSG_RESULT(yes); mzs_ok=yes,
936 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
937 CFLAGS=$cflags_save
938 LIBS=$libs_save
939 if test $mzs_ok = yes; then
940 MZSCHEME_SRC="if_mzsch.c"
941 MZSCHEME_OBJ="objects/if_mzsch.o"
942 MZSCHEME_PRO="if_mzsch.pro"
943 AC_DEFINE(FEAT_MZSCHEME)
944 else
945 MZSCHEME_CFLAGS=
946 MZSCHEME_LIBS=
947 MZSCHEME_EXTRA=
948 MZSCHEME_MZC=
949 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000950 fi
951 AC_SUBST(MZSCHEME_SRC)
952 AC_SUBST(MZSCHEME_OBJ)
953 AC_SUBST(MZSCHEME_PRO)
954 AC_SUBST(MZSCHEME_LIBS)
955 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000956 AC_SUBST(MZSCHEME_EXTRA)
957 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000958fi
959
960
Bram Moolenaar071d4272004-06-13 20:20:40 +0000961AC_MSG_CHECKING(--enable-perlinterp argument)
962AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +0200963 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000964 [enable_perlinterp="no"])
965AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +0200966if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100967 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
968 AC_MSG_ERROR([cannot use Perl with tiny or small features])
969 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000970 AC_SUBST(vi_cv_path_perl)
971 AC_PATH_PROG(vi_cv_path_perl, perl)
972 if test "X$vi_cv_path_perl" != "X"; then
973 AC_MSG_CHECKING(Perl version)
974 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
975 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +0200976 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000977 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
978 badthreads=no
979 else
980 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
981 eval `$vi_cv_path_perl -V:use5005threads`
982 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
983 badthreads=no
984 else
985 badthreads=yes
986 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
987 fi
988 else
989 badthreads=yes
990 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
991 fi
992 fi
993 if test $badthreads = no; then
994 AC_MSG_RESULT(OK)
995 eval `$vi_cv_path_perl -V:shrpenv`
996 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
997 shrpenv=""
998 fi
999 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1000 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001001 vi_cv_perl_extutils=unknown_perl_extutils_path
1002 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1003 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1004 if test -f "$xsubpp_path"; then
1005 vi_cv_perl_xsubpp="$xsubpp_path"
1006 fi
1007 done
1008 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001009 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001010 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001011 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001012 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001013 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001014 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1015 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001016 -e 's/-pipe //' \
1017 -e 's/-W[[^ ]]*//g' \
1018 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001019 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1020 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1021 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1022 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1023 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1024 dnl a test in configure may fail because of that.
1025 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1026 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1027
1028 dnl check that compiling a simple program still works with the flags
1029 dnl added for Perl.
1030 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1031 cflags_save=$CFLAGS
1032 libs_save=$LIBS
1033 ldflags_save=$LDFLAGS
1034 CFLAGS="$CFLAGS $perlcppflags"
1035 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001036 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001037 LDFLAGS="$perlldflags $LDFLAGS"
1038 AC_TRY_LINK(,[ ],
1039 AC_MSG_RESULT(yes); perl_ok=yes,
1040 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1041 CFLAGS=$cflags_save
1042 LIBS=$libs_save
1043 LDFLAGS=$ldflags_save
1044 if test $perl_ok = yes; then
1045 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001046 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001047 fi
1048 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001049 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001050 LDFLAGS="$perlldflags $LDFLAGS"
1051 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001052 fi
1053 PERL_LIBS=$perllibs
1054 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1055 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1056 PERL_PRO="if_perl.pro if_perlsfio.pro"
1057 AC_DEFINE(FEAT_PERL)
1058 fi
1059 fi
1060 else
1061 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1062 fi
1063 fi
1064
Bram Moolenaard0573012017-10-28 21:11:06 +02001065 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001066 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001067 dir=/System/Library/Perl
1068 darwindir=$dir/darwin
1069 if test -d $darwindir; then
1070 PERL=/usr/bin/perl
1071 else
1072 dnl Mac OS X 10.3
1073 dir=/System/Library/Perl/5.8.1
1074 darwindir=$dir/darwin-thread-multi-2level
1075 if test -d $darwindir; then
1076 PERL=/usr/bin/perl
1077 fi
1078 fi
1079 if test -n "$PERL"; then
1080 PERL_DIR="$dir"
1081 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1082 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1083 PERL_LIBS="-L$darwindir/CORE -lperl"
1084 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001085 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1086 dnl be included if requested by passing --with-mac-arch to
1087 dnl configure, so strip these flags first (if present)
1088 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1089 PERL_CFLAGS=`echo "$PERL_CFLAGS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001090 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001091 if test "$enable_perlinterp" = "dynamic"; then
1092 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1093 AC_DEFINE(DYNAMIC_PERL)
1094 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1095 fi
1096 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001097
1098 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1099 AC_MSG_ERROR([could not configure perl])
1100 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001101fi
1102AC_SUBST(shrpenv)
1103AC_SUBST(PERL_SRC)
1104AC_SUBST(PERL_OBJ)
1105AC_SUBST(PERL_PRO)
1106AC_SUBST(PERL_CFLAGS)
1107AC_SUBST(PERL_LIBS)
1108
1109AC_MSG_CHECKING(--enable-pythoninterp argument)
1110AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001111 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112 [enable_pythoninterp="no"])
1113AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001114if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001115 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1116 AC_MSG_ERROR([cannot use Python with tiny or small features])
1117 fi
1118
Bram Moolenaar071d4272004-06-13 20:20:40 +00001119 dnl -- find the python executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001120 AC_PATH_PROGS(vi_cv_path_python, python2 python)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001121 if test "X$vi_cv_path_python" != "X"; then
1122
1123 dnl -- get its version number
1124 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1125 [[vi_cv_var_python_version=`
1126 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1127 ]])
1128
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001129 dnl -- it must be at least version 2.3
1130 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001131 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001132 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001133 then
1134 AC_MSG_RESULT(yep)
1135
1136 dnl -- find where python thinks it was installed
1137 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1138 [ vi_cv_path_python_pfx=`
1139 ${vi_cv_path_python} -c \
1140 "import sys; print sys.prefix"` ])
1141
1142 dnl -- and where it thinks it runs
1143 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1144 [ vi_cv_path_python_epfx=`
1145 ${vi_cv_path_python} -c \
1146 "import sys; print sys.exec_prefix"` ])
1147
1148 dnl -- python's internal library path
1149
1150 AC_CACHE_VAL(vi_cv_path_pythonpath,
1151 [ vi_cv_path_pythonpath=`
1152 unset PYTHONPATH;
1153 ${vi_cv_path_python} -c \
1154 "import sys, string; print string.join(sys.path,':')"` ])
1155
1156 dnl -- where the Python implementation library archives are
1157
1158 AC_ARG_WITH(python-config-dir,
1159 [ --with-python-config-dir=PATH Python's config directory],
Bram Moolenaard0882402018-04-10 18:13:05 +02001160 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001161
1162 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1163 [
1164 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001165 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1166 if test -d "$d" && test -f "$d/config.c"; then
1167 vi_cv_path_python_conf="$d"
1168 else
1169 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1170 for subdir in lib64 lib share; do
1171 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1172 if test -d "$d" && test -f "$d/config.c"; then
1173 vi_cv_path_python_conf="$d"
1174 fi
1175 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001176 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001177 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001178 ])
1179
1180 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1181
1182 if test "X$PYTHON_CONFDIR" = "X"; then
1183 AC_MSG_RESULT([can't find it!])
1184 else
1185
1186 dnl -- we need to examine Python's config/Makefile too
1187 dnl see what the interpreter is built from
1188 AC_CACHE_VAL(vi_cv_path_python_plibs,
1189 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001190 pwd=`pwd`
1191 tmp_mkf="$pwd/config-PyMake$$"
1192 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001194 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001195 @echo "python_LIBS='$(LIBS)'"
1196 @echo "python_SYSLIBS='$(SYSLIBS)'"
1197 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001198 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001199 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001200 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1201 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1202 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001203eof
1204 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001205 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1206 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001207 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1209 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001210 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1211 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1212 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001213 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001214 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001215 dnl -- Check if the path contained in python_LINKFORSHARED is
1216 dnl usable for vim build. If not, make and try other
1217 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001218 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001219 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1220 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1221 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1222 dnl -- The path looks relative. Guess the absolute one using
1223 dnl the prefix and try that.
1224 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1225 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1226 dnl -- A last resort.
1227 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1228 dnl -- No check is done. The last word is left to the
1229 dnl "sanity" test on link flags that follows shortly.
1230 fi
1231 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1232 fi
1233 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001234 vi_cv_path_python_plibs="${vi_cv_path_python_plibs} ${python_BASEMODLIBS} ${python_LIBS} ${python_SYSLIBS} ${python_LINKFORSHARED}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1236 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1237 fi
1238 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001239 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001240 [
1241 if test "X$python_DLLLIBRARY" != "X"; then
1242 vi_cv_dll_name_python="$python_DLLLIBRARY"
1243 else
1244 vi_cv_dll_name_python="$python_INSTSONAME"
1245 fi
1246 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001247
1248 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1249 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001250 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001251 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001252 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001253 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001254 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001255 dnl Define PYTHON_HOME if --with-python-config-dir was used
1256 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1257
1258 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001259 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001260 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261
1262 dnl On FreeBSD linking with "-pthread" is required to use threads.
1263 dnl _THREAD_SAFE must be used for compiling then.
1264 dnl The "-pthread" is added to $LIBS, so that the following check for
1265 dnl sigaltstack() will look in libc_r (it's there in libc!).
1266 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1267 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1268 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1269 AC_MSG_CHECKING([if -pthread should be used])
1270 threadsafe_flag=
1271 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001272 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001273 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001274 test "$GCC" = yes && threadsafe_flag="-pthread"
1275 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1276 threadsafe_flag="-D_THREAD_SAFE"
1277 thread_lib="-pthread"
1278 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001279 if test "`(uname) 2>/dev/null`" = SunOS; then
1280 threadsafe_flag="-pthreads"
1281 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282 fi
1283 libs_save_old=$LIBS
1284 if test -n "$threadsafe_flag"; then
1285 cflags_save=$CFLAGS
1286 CFLAGS="$CFLAGS $threadsafe_flag"
1287 LIBS="$LIBS $thread_lib"
1288 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001289 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001290 AC_MSG_RESULT(no); LIBS=$libs_save_old
1291 )
1292 CFLAGS=$cflags_save
1293 else
1294 AC_MSG_RESULT(no)
1295 fi
1296
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001297 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001298 dnl added for Python.
1299 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1300 cflags_save=$CFLAGS
1301 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001302 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001303 LIBS="$LIBS $PYTHON_LIBS"
1304 AC_TRY_LINK(,[ ],
1305 AC_MSG_RESULT(yes); python_ok=yes,
1306 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1307 CFLAGS=$cflags_save
1308 LIBS=$libs_save
1309 if test $python_ok = yes; then
1310 AC_DEFINE(FEAT_PYTHON)
1311 else
1312 LIBS=$libs_save_old
1313 PYTHON_SRC=
1314 PYTHON_OBJ=
1315 PYTHON_LIBS=
1316 PYTHON_CFLAGS=
1317 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001318 fi
1319 else
1320 AC_MSG_RESULT(too old)
1321 fi
1322 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001323
1324 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1325 AC_MSG_ERROR([could not configure python])
1326 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001328
Bram Moolenaar071d4272004-06-13 20:20:40 +00001329AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001330AC_SUBST(PYTHON_CFLAGS)
1331AC_SUBST(PYTHON_SRC)
1332AC_SUBST(PYTHON_OBJ)
1333
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001334
1335AC_MSG_CHECKING(--enable-python3interp argument)
1336AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001337 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001338 [enable_python3interp="no"])
1339AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001340if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001341 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1342 AC_MSG_ERROR([cannot use Python with tiny or small features])
1343 fi
1344
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001345 dnl -- find the python3 executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001346 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001347 if test "X$vi_cv_path_python3" != "X"; then
1348
1349 dnl -- get its version number
1350 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1351 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001352 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001353 ]])
1354
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001355 dnl -- it must be at least version 3
1356 AC_MSG_CHECKING(Python is 3.0 or better)
1357 if ${vi_cv_path_python3} -c \
1358 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1359 then
1360 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001361
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001362 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1363 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001364 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001365 vi_cv_var_python3_abiflags=
1366 if ${vi_cv_path_python3} -c \
1367 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1368 then
1369 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1370 "import sys; print(sys.abiflags)"`
1371 fi ])
1372
1373 dnl -- find where python3 thinks it was installed
1374 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1375 [ vi_cv_path_python3_pfx=`
1376 ${vi_cv_path_python3} -c \
1377 "import sys; print(sys.prefix)"` ])
1378
1379 dnl -- and where it thinks it runs
1380 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1381 [ vi_cv_path_python3_epfx=`
1382 ${vi_cv_path_python3} -c \
1383 "import sys; print(sys.exec_prefix)"` ])
1384
1385 dnl -- python3's internal library path
1386
1387 AC_CACHE_VAL(vi_cv_path_python3path,
1388 [ vi_cv_path_python3path=`
1389 unset PYTHONPATH;
1390 ${vi_cv_path_python3} -c \
1391 "import sys, string; print(':'.join(sys.path))"` ])
1392
1393 dnl -- where the Python implementation library archives are
1394
1395 AC_ARG_WITH(python3-config-dir,
1396 [ --with-python3-config-dir=PATH Python's config directory],
Bram Moolenaard0882402018-04-10 18:13:05 +02001397 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001398
1399 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1400 [
1401 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001402 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001403 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1404 if test -d "$d" && test -f "$d/config.c"; then
1405 vi_cv_path_python3_conf="$d"
1406 else
1407 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1408 for subdir in lib64 lib share; do
1409 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1410 if test -d "$d" && test -f "$d/config.c"; then
1411 vi_cv_path_python3_conf="$d"
1412 fi
1413 done
1414 done
1415 fi
1416 ])
1417
1418 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1419
1420 if test "X$PYTHON3_CONFDIR" = "X"; then
1421 AC_MSG_RESULT([can't find it!])
1422 else
1423
1424 dnl -- we need to examine Python's config/Makefile too
1425 dnl see what the interpreter is built from
1426 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1427 [
1428 pwd=`pwd`
1429 tmp_mkf="$pwd/config-PyMake$$"
1430 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001431__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001432 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001433 @echo "python3_LIBS='$(LIBS)'"
1434 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001435 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001436 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001437eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001438 dnl -- delete the lines from make about Entering/Leaving directory
1439 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1440 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001441 vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001442 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1443 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1444 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1445 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1446 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001447 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001448 [
1449 if test "X$python3_DLLLIBRARY" != "X"; then
1450 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1451 else
1452 vi_cv_dll_name_python3="$python3_INSTSONAME"
1453 fi
1454 ])
1455
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001456 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1457 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001458 PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001459 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001460 PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001461 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001462 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001463 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1464 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1465 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001466 PYTHON3_SRC="if_python3.c"
1467 PYTHON3_OBJ="objects/if_python3.o"
1468
1469 dnl On FreeBSD linking with "-pthread" is required to use threads.
1470 dnl _THREAD_SAFE must be used for compiling then.
1471 dnl The "-pthread" is added to $LIBS, so that the following check for
1472 dnl sigaltstack() will look in libc_r (it's there in libc!).
1473 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1474 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1475 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1476 AC_MSG_CHECKING([if -pthread should be used])
1477 threadsafe_flag=
1478 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001479 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001480 if test "`(uname) 2>/dev/null`" != Darwin; then
1481 test "$GCC" = yes && threadsafe_flag="-pthread"
1482 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1483 threadsafe_flag="-D_THREAD_SAFE"
1484 thread_lib="-pthread"
1485 fi
1486 if test "`(uname) 2>/dev/null`" = SunOS; then
1487 threadsafe_flag="-pthreads"
1488 fi
1489 fi
1490 libs_save_old=$LIBS
1491 if test -n "$threadsafe_flag"; then
1492 cflags_save=$CFLAGS
1493 CFLAGS="$CFLAGS $threadsafe_flag"
1494 LIBS="$LIBS $thread_lib"
1495 AC_TRY_LINK(,[ ],
1496 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1497 AC_MSG_RESULT(no); LIBS=$libs_save_old
1498 )
1499 CFLAGS=$cflags_save
1500 else
1501 AC_MSG_RESULT(no)
1502 fi
1503
1504 dnl check that compiling a simple program still works with the flags
1505 dnl added for Python.
1506 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1507 cflags_save=$CFLAGS
1508 libs_save=$LIBS
1509 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1510 LIBS="$LIBS $PYTHON3_LIBS"
1511 AC_TRY_LINK(,[ ],
1512 AC_MSG_RESULT(yes); python3_ok=yes,
1513 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1514 CFLAGS=$cflags_save
1515 LIBS=$libs_save
1516 if test "$python3_ok" = yes; then
1517 AC_DEFINE(FEAT_PYTHON3)
1518 else
1519 LIBS=$libs_save_old
1520 PYTHON3_SRC=
1521 PYTHON3_OBJ=
1522 PYTHON3_LIBS=
1523 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001524 fi
1525 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001526 else
1527 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001528 fi
1529 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001530 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1531 AC_MSG_ERROR([could not configure python3])
1532 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001533fi
1534
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001535AC_SUBST(PYTHON3_LIBS)
1536AC_SUBST(PYTHON3_CFLAGS)
1537AC_SUBST(PYTHON3_SRC)
1538AC_SUBST(PYTHON3_OBJ)
1539
1540dnl if python2.x and python3.x are enabled one can only link in code
1541dnl with dlopen(), dlsym(), dlclose()
1542if test "$python_ok" = yes && test "$python3_ok" = yes; then
1543 AC_DEFINE(DYNAMIC_PYTHON)
1544 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001545 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001546 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001547 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001548 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001549 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001550 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001551 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001552 #include <dlfcn.h>
1553 /* If this program fails, then RTLD_GLOBAL is needed.
1554 * RTLD_GLOBAL will be used and then it is not possible to
1555 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001556 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001557 */
1558
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001559 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001560 {
1561 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001562 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001563 if (pylib != 0)
1564 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001565 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001566 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1567 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1568 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001569 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001570 (*init)();
1571 needed = (*simple)("import termios") == -1;
1572 (*final)();
1573 dlclose(pylib);
1574 }
1575 return !needed;
1576 }
1577
1578 int main(int argc, char** argv)
1579 {
1580 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001581 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001582 not_needed = 1;
1583 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001584 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001585 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001586
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001587 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001588 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001589
1590 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1591 cflags_save=$CFLAGS
1592 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001593 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001594 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001595 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001596 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001597 #include <dlfcn.h>
1598 #include <wchar.h>
1599 /* If this program fails, then RTLD_GLOBAL is needed.
1600 * RTLD_GLOBAL will be used and then it is not possible to
1601 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001602 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001603 */
1604
1605 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1606 {
1607 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001608 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001609 if (pylib != 0)
1610 {
1611 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1612 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1613 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1614 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1615 (*pfx)(prefix);
1616 (*init)();
1617 needed = (*simple)("import termios") == -1;
1618 (*final)();
1619 dlclose(pylib);
1620 }
1621 return !needed;
1622 }
1623
1624 int main(int argc, char** argv)
1625 {
1626 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001627 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001628 not_needed = 1;
1629 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001630 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001631 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1632
1633 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001634 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001635
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001636 PYTHON_SRC="if_python.c"
1637 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001638 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001639 PYTHON_LIBS=
1640 PYTHON3_SRC="if_python3.c"
1641 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001642 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001643 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001644elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1645 AC_DEFINE(DYNAMIC_PYTHON)
1646 PYTHON_SRC="if_python.c"
1647 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001648 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001649 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001650elif test "$python_ok" = yes; then
1651 dnl Check that adding -fPIE works. It may be needed when using a static
1652 dnl Python library.
1653 AC_MSG_CHECKING([if -fPIE can be added for Python])
1654 cflags_save=$CFLAGS
1655 libs_save=$LIBS
1656 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1657 LIBS="$LIBS $PYTHON_LIBS"
1658 AC_TRY_LINK(,[ ],
1659 AC_MSG_RESULT(yes); fpie_ok=yes,
1660 AC_MSG_RESULT(no); fpie_ok=no)
1661 CFLAGS=$cflags_save
1662 LIBS=$libs_save
1663 if test $fpie_ok = yes; then
1664 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1665 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001666elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1667 AC_DEFINE(DYNAMIC_PYTHON3)
1668 PYTHON3_SRC="if_python3.c"
1669 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001670 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001671 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001672elif test "$python3_ok" = yes; then
1673 dnl Check that adding -fPIE works. It may be needed when using a static
1674 dnl Python library.
1675 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1676 cflags_save=$CFLAGS
1677 libs_save=$LIBS
1678 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1679 LIBS="$LIBS $PYTHON3_LIBS"
1680 AC_TRY_LINK(,[ ],
1681 AC_MSG_RESULT(yes); fpie_ok=yes,
1682 AC_MSG_RESULT(no); fpie_ok=no)
1683 CFLAGS=$cflags_save
1684 LIBS=$libs_save
1685 if test $fpie_ok = yes; then
1686 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1687 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001688fi
1689
Bram Moolenaar071d4272004-06-13 20:20:40 +00001690AC_MSG_CHECKING(--enable-tclinterp argument)
1691AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001692 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001693 [enable_tclinterp="no"])
1694AC_MSG_RESULT($enable_tclinterp)
1695
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001696if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001697
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001698 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001699 AC_MSG_CHECKING(--with-tclsh argument)
1700 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1701 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001702 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001703 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1704 AC_SUBST(vi_cv_path_tcl)
1705
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001706 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1707 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1708 tclsh_name="tclsh8.4"
1709 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1710 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001711 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001712 tclsh_name="tclsh8.2"
1713 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1714 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001715 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1716 tclsh_name="tclsh8.0"
1717 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1718 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001719 dnl still didn't find it, try without version number
1720 if test "X$vi_cv_path_tcl" = "X"; then
1721 tclsh_name="tclsh"
1722 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1723 fi
1724 if test "X$vi_cv_path_tcl" != "X"; then
1725 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001726 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001727 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1728 AC_MSG_RESULT($tclver - OK);
1729 tclloc=`echo 'set l [[info library]];set i [[string last lib $l]];incr i -2;puts [[string range $l 0 $i]]' | $vi_cv_path_tcl -`
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001730 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001731
1732 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001733 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001734 tclinc="$tclloc/include $tclloc/include/tcl $tclloc/include/tcl$tclver /usr/local/include /usr/local/include/tcl$tclver /usr/include /usr/include/tcl$tclver"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001735 else
1736 dnl For Mac OS X 10.3, use the OS-provided framework location
1737 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1738 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001739 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001740 for try in $tclinc; do
1741 if test -f "$try/tcl.h"; then
1742 AC_MSG_RESULT($try/tcl.h)
1743 TCL_INC=$try
1744 break
1745 fi
1746 done
1747 if test -z "$TCL_INC"; then
1748 AC_MSG_RESULT(<not found>)
1749 SKIP_TCL=YES
1750 fi
1751 if test -z "$SKIP_TCL"; then
1752 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001753 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001754 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001755 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001756 else
1757 dnl For Mac OS X 10.3, use the OS-provided framework location
1758 tclcnf="/System/Library/Frameworks/Tcl.framework"
1759 fi
1760 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001761 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001762 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001763 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001764 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001765 if test "$enable_tclinterp" = "dynamic"; then
1766 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1767 else
1768 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1769 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001770 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001771 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001772 TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' | tr ' ' '\012' | sed -e '/^[[^-]]/d' -e '/^-[[^D]]/d' -e '/-D[[^_]]/d' -e 's/-D_/ -D_/' | tr '\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001773 break
1774 fi
1775 done
1776 if test -z "$TCL_LIBS"; then
1777 AC_MSG_RESULT(<not found>)
1778 AC_MSG_CHECKING(for Tcl library by myself)
1779 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001780 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001781 for ext in .so .a ; do
1782 for ver in "" $tclver ; do
1783 for try in $tcllib ; do
1784 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001785 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001786 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001787 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001788 if test "`(uname) 2>/dev/null`" = SunOS &&
1789 uname -r | grep '^5' >/dev/null; then
1790 TCL_LIBS="$TCL_LIBS -R $try"
1791 fi
1792 break 3
1793 fi
1794 done
1795 done
1796 done
1797 if test -z "$TCL_LIBS"; then
1798 AC_MSG_RESULT(<not found>)
1799 SKIP_TCL=YES
1800 fi
1801 fi
1802 if test -z "$SKIP_TCL"; then
1803 AC_DEFINE(FEAT_TCL)
1804 TCL_SRC=if_tcl.c
1805 TCL_OBJ=objects/if_tcl.o
1806 TCL_PRO=if_tcl.pro
1807 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1808 fi
1809 fi
1810 else
1811 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1812 fi
1813 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001814 if test "$enable_tclinterp" = "dynamic"; then
1815 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1816 AC_DEFINE(DYNAMIC_TCL)
1817 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1818 fi
1819 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001820 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1821 AC_MSG_ERROR([could not configure Tcl])
1822 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001823fi
1824AC_SUBST(TCL_SRC)
1825AC_SUBST(TCL_OBJ)
1826AC_SUBST(TCL_PRO)
1827AC_SUBST(TCL_CFLAGS)
1828AC_SUBST(TCL_LIBS)
1829
1830AC_MSG_CHECKING(--enable-rubyinterp argument)
1831AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001832 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001833 [enable_rubyinterp="no"])
1834AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001835if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001836 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1837 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1838 fi
1839
Bram Moolenaar165641d2010-02-17 16:23:09 +01001840 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001841 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001842 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1843 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1844 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001845 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001846 if test "X$vi_cv_path_ruby" != "X"; then
1847 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001848 if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001850 AC_MSG_CHECKING(Ruby rbconfig)
1851 ruby_rbconfig="RbConfig"
1852 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1853 ruby_rbconfig="Config"
1854 fi
1855 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001856 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001857 rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001858 if test "X$rubyhdrdir" != "X"; then
1859 AC_MSG_RESULT($rubyhdrdir)
1860 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001861 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1862 if test -d "$rubyarchdir"; then
1863 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001864 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001865 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001866 if test "X$rubyversion" = "X"; then
1867 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1868 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001869 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001870 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001871 if test "X$rubylibs" != "X"; then
1872 RUBY_LIBS="$rubylibs"
1873 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001874 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1875 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001876 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001877 if test -f "$rubylibdir/$librubya"; then
1878 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001879 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1880 elif test "$librubyarg" = "libruby.a"; then
1881 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1882 librubyarg="-lruby"
1883 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001884 fi
1885
1886 if test "X$librubyarg" != "X"; then
1887 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1888 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001889 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001890 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001891 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1892 dnl be included if requested by passing --with-mac-arch to
1893 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001894 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001895 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001896 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001897 LDFLAGS="$rubyldflags $LDFLAGS"
1898 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001899 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001900 fi
1901 RUBY_SRC="if_ruby.c"
1902 RUBY_OBJ="objects/if_ruby.o"
1903 RUBY_PRO="if_ruby.pro"
1904 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001905 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02001906 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001907 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar92021622017-10-12 12:33:43 +02001908 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001909 RUBY_LIBS=
1910 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001911 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01001912 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001913 fi
1914 else
1915 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1916 fi
1917 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001918
1919 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1920 AC_MSG_ERROR([could not configure Ruby])
1921 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001922fi
1923AC_SUBST(RUBY_SRC)
1924AC_SUBST(RUBY_OBJ)
1925AC_SUBST(RUBY_PRO)
1926AC_SUBST(RUBY_CFLAGS)
1927AC_SUBST(RUBY_LIBS)
1928
1929AC_MSG_CHECKING(--enable-cscope argument)
1930AC_ARG_ENABLE(cscope,
1931 [ --enable-cscope Include cscope interface.], ,
1932 [enable_cscope="no"])
1933AC_MSG_RESULT($enable_cscope)
1934if test "$enable_cscope" = "yes"; then
1935 AC_DEFINE(FEAT_CSCOPE)
1936fi
1937
1938AC_MSG_CHECKING(--enable-workshop argument)
1939AC_ARG_ENABLE(workshop,
1940 [ --enable-workshop Include Sun Visual Workshop support.], ,
1941 [enable_workshop="no"])
1942AC_MSG_RESULT($enable_workshop)
1943if test "$enable_workshop" = "yes"; then
1944 AC_DEFINE(FEAT_SUN_WORKSHOP)
1945 WORKSHOP_SRC="workshop.c integration.c"
1946 AC_SUBST(WORKSHOP_SRC)
1947 WORKSHOP_OBJ="objects/workshop.o objects/integration.o"
1948 AC_SUBST(WORKSHOP_OBJ)
1949 if test "${enable_gui-xxx}" = xxx; then
1950 enable_gui=motif
1951 fi
1952fi
1953
1954AC_MSG_CHECKING(--disable-netbeans argument)
1955AC_ARG_ENABLE(netbeans,
1956 [ --disable-netbeans Disable NetBeans integration support.],
1957 , [enable_netbeans="yes"])
1958if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001959 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1960 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
1961 enable_netbeans="no"
1962 else
1963 AC_MSG_RESULT(no)
1964 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01001965else
1966 AC_MSG_RESULT(yes)
1967fi
1968
1969AC_MSG_CHECKING(--disable-channel argument)
1970AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001971 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01001972 , [enable_channel="yes"])
1973if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001974 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1975 AC_MSG_RESULT([cannot use channels with tiny or small features])
1976 enable_channel="no"
1977 else
1978 AC_MSG_RESULT(no)
1979 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01001980else
1981 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01001982 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01001983 enable_netbeans="no"
1984 else
1985 AC_MSG_RESULT(yes)
1986 fi
1987fi
1988
Bram Moolenaar16435482016-01-24 21:31:54 +01001989if test "$enable_channel" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001990 dnl On Solaris we need the socket and nsl library.
1991 AC_CHECK_LIB(socket, socket)
1992 AC_CHECK_LIB(nsl, gethostbyname)
Bram Moolenaare0874f82016-01-24 20:36:41 +01001993 AC_MSG_CHECKING(whether compiling with process communication is possible)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001994 AC_TRY_LINK([
1995#include <stdio.h>
1996#include <stdlib.h>
1997#include <stdarg.h>
1998#include <fcntl.h>
1999#include <netdb.h>
2000#include <netinet/in.h>
2001#include <errno.h>
2002#include <sys/types.h>
2003#include <sys/socket.h>
2004 /* Check bitfields */
2005 struct nbbuf {
2006 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002007 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002008 };
2009 ], [
2010 /* Check creating a socket. */
2011 struct sockaddr_in server;
2012 (void)socket(AF_INET, SOCK_STREAM, 0);
2013 (void)htons(100);
2014 (void)gethostbyname("microsoft.com");
2015 if (errno == ECONNREFUSED)
2016 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2017 ],
2018 AC_MSG_RESULT(yes),
Bram Moolenaare0874f82016-01-24 20:36:41 +01002019 AC_MSG_RESULT(no); enable_netbeans="no"; enable_channel="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002020fi
2021if test "$enable_netbeans" = "yes"; then
2022 AC_DEFINE(FEAT_NETBEANS_INTG)
2023 NETBEANS_SRC="netbeans.c"
2024 AC_SUBST(NETBEANS_SRC)
2025 NETBEANS_OBJ="objects/netbeans.o"
2026 AC_SUBST(NETBEANS_OBJ)
2027fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002028if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002029 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaare0874f82016-01-24 20:36:41 +01002030 CHANNEL_SRC="channel.c"
2031 AC_SUBST(CHANNEL_SRC)
2032 CHANNEL_OBJ="objects/channel.o"
2033 AC_SUBST(CHANNEL_OBJ)
2034fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002035
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002036AC_MSG_CHECKING(--enable-terminal argument)
2037AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002038 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002039 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002040if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002041 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2042 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2043 enable_terminal="no"
2044 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002045 if test "$enable_terminal" = "auto"; then
2046 enable_terminal="yes"
2047 AC_MSG_RESULT(defaulting to yes)
2048 else
2049 AC_MSG_RESULT(yes)
2050 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002051 fi
2052else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002053 if test "$enable_terminal" = "auto"; then
2054 enable_terminal="no"
2055 AC_MSG_RESULT(defaulting to no)
2056 else
2057 AC_MSG_RESULT(no)
2058 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002059fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002060if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002061 AC_DEFINE(FEAT_TERMINAL)
2062 TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/screen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
2063 AC_SUBST(TERM_SRC)
2064 TERM_OBJ="objects/term_encoding.o objects/term_keyboard.o objects/term_mouse.o objects/term_parser.o objects/term_pen.o objects/term_screen.o objects/term_state.o objects/term_unicode.o objects/term_vterm.o"
2065 AC_SUBST(TERM_OBJ)
2066fi
2067
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002068AC_MSG_CHECKING(--enable-autoservername argument)
2069AC_ARG_ENABLE(autoservername,
2070 [ --enable-autoservername Automatically define servername at vim startup.], ,
2071 [enable_autoservername="no"])
2072AC_MSG_RESULT($enable_autoservername)
2073if test "$enable_autoservername" = "yes"; then
2074 AC_DEFINE(FEAT_AUTOSERVERNAME)
2075fi
2076
Bram Moolenaar071d4272004-06-13 20:20:40 +00002077AC_MSG_CHECKING(--enable-multibyte argument)
2078AC_ARG_ENABLE(multibyte,
2079 [ --enable-multibyte Include multibyte editing support.], ,
2080 [enable_multibyte="no"])
2081AC_MSG_RESULT($enable_multibyte)
2082if test "$enable_multibyte" = "yes"; then
2083 AC_DEFINE(FEAT_MBYTE)
2084fi
2085
2086AC_MSG_CHECKING(--enable-hangulinput argument)
2087AC_ARG_ENABLE(hangulinput,
2088 [ --enable-hangulinput Include Hangul input support.], ,
2089 [enable_hangulinput="no"])
2090AC_MSG_RESULT($enable_hangulinput)
2091
2092AC_MSG_CHECKING(--enable-xim argument)
2093AC_ARG_ENABLE(xim,
2094 [ --enable-xim Include XIM input support.],
2095 AC_MSG_RESULT($enable_xim),
2096 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002097
2098AC_MSG_CHECKING(--enable-fontset argument)
2099AC_ARG_ENABLE(fontset,
2100 [ --enable-fontset Include X fontset output support.], ,
2101 [enable_fontset="no"])
2102AC_MSG_RESULT($enable_fontset)
2103dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2104
2105test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002106test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002107if test "$with_x" = no; then
2108 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2109else
2110 dnl Do this check early, so that its failure can override user requests.
2111
2112 AC_PATH_PROG(xmkmfpath, xmkmf)
2113
2114 AC_PATH_XTRA
2115
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002116 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002117 dnl be compiled with a special option.
2118 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002119 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002120 CFLAGS="$CFLAGS -W c,dll"
2121 LDFLAGS="$LDFLAGS -W l,dll"
2122 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2123 fi
2124
2125 dnl On my HPUX system the X include dir is found, but the lib dir not.
2126 dnl This is a desparate try to fix this.
2127
2128 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2129 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2130 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2131 X_LIBS="$X_LIBS -L$x_libraries"
2132 if test "`(uname) 2>/dev/null`" = SunOS &&
2133 uname -r | grep '^5' >/dev/null; then
2134 X_LIBS="$X_LIBS -R $x_libraries"
2135 fi
2136 fi
2137
2138 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2139 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2140 AC_MSG_RESULT(Corrected X includes to $x_includes)
2141 X_CFLAGS="$X_CFLAGS -I$x_includes"
2142 fi
2143
2144 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2145 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2146 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2147 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2148 dnl Same for "-R/usr/lib ".
2149 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2150
2151
2152 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002153 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2154 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002155 AC_MSG_CHECKING(if X11 header files can be found)
2156 cflags_save=$CFLAGS
2157 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002158 AC_TRY_COMPILE([#include <X11/Xlib.h>
2159#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002160 AC_MSG_RESULT(yes),
2161 AC_MSG_RESULT(no); no_x=yes)
2162 CFLAGS=$cflags_save
2163
2164 if test "${no_x-no}" = yes; then
2165 with_x=no
2166 else
2167 AC_DEFINE(HAVE_X11)
2168 X_LIB="-lXt -lX11";
2169 AC_SUBST(X_LIB)
2170
2171 ac_save_LDFLAGS="$LDFLAGS"
2172 LDFLAGS="-L$x_libraries $LDFLAGS"
2173
2174 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2175 dnl For HP-UX 10.20 it must be before -lSM -lICE
2176 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2177 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2178
2179 dnl Some systems need -lnsl -lsocket when testing for ICE.
2180 dnl The check above doesn't do this, try here (again). Also needed to get
2181 dnl them after Xdmcp. link.sh will remove them when not needed.
2182 dnl Check for other function than above to avoid the cached value
2183 AC_CHECK_LIB(ICE, IceOpenConnection,
2184 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2185
2186 dnl Check for -lXpm (needed for some versions of Motif)
2187 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2188 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2189 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2190
2191 dnl Check that the X11 header files don't use implicit declarations
2192 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2193 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002194 dnl -Werror is GCC only, others like Solaris Studio might not like it
2195 if test "$GCC" = yes; then
2196 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2197 else
2198 CFLAGS="$CFLAGS $X_CFLAGS"
2199 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002200 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2201 AC_MSG_RESULT(no),
2202 CFLAGS="$CFLAGS -Wno-implicit-int"
2203 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2204 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2205 AC_MSG_RESULT(test failed)
2206 )
2207 )
2208 CFLAGS=$cflags_save
2209
2210 LDFLAGS="$ac_save_LDFLAGS"
2211
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002212 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2213 AC_CACHE_VAL(ac_cv_small_wchar_t,
2214 [AC_TRY_RUN([
2215#include <X11/Xlib.h>
2216#if STDC_HEADERS
2217# include <stdlib.h>
2218# include <stddef.h>
2219#endif
2220 main()
2221 {
2222 if (sizeof(wchar_t) <= 2)
2223 exit(1);
2224 exit(0);
2225 }],
2226 ac_cv_small_wchar_t="no",
2227 ac_cv_small_wchar_t="yes",
2228 AC_MSG_ERROR(failed to compile test program))])
2229 AC_MSG_RESULT($ac_cv_small_wchar_t)
2230 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2231 AC_DEFINE(SMALL_WCHAR_T)
2232 fi
2233
Bram Moolenaar071d4272004-06-13 20:20:40 +00002234 fi
2235fi
2236
Bram Moolenaard0573012017-10-28 21:11:06 +02002237test "x$with_x" = xno -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002238
2239AC_MSG_CHECKING(--enable-gui argument)
2240AC_ARG_ENABLE(gui,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002241 [ --enable-gui[=OPTS] X11 GUI. [default=auto] [OPTS=auto/no/gtk2/gnome2/gtk3/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002242
2243dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2244dnl Do not use character classes for portability with old tools.
2245enable_gui_canon=`echo "_$enable_gui" | \
2246 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2247
2248dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002249SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002250SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002251SKIP_GNOME=YES
2252SKIP_MOTIF=YES
2253SKIP_ATHENA=YES
2254SKIP_NEXTAW=YES
2255SKIP_PHOTON=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002256SKIP_CARBON=YES
2257GUITYPE=NONE
2258
Bram Moolenaarb11160e2005-01-04 21:31:43 +00002259if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002260 SKIP_PHOTON=
2261 case "$enable_gui_canon" in
2262 no) AC_MSG_RESULT(no GUI support)
2263 SKIP_PHOTON=YES ;;
2264 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2265 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2266 photon) AC_MSG_RESULT(Photon GUI support) ;;
2267 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2268 SKIP_PHOTON=YES ;;
2269 esac
2270
Bram Moolenaard0573012017-10-28 21:11:06 +02002271elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002272 SKIP_CARBON=
2273 case "$enable_gui_canon" in
2274 no) AC_MSG_RESULT(no GUI support)
2275 SKIP_CARBON=YES ;;
2276 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002277 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2278 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002279 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2280 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2281 SKIP_CARBON=YES ;;
2282 esac
2283
2284else
2285
Bram Moolenaar071d4272004-06-13 20:20:40 +00002286 case "$enable_gui_canon" in
2287 no|none) AC_MSG_RESULT(no GUI support) ;;
2288 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002289 SKIP_GTK2=
2290 SKIP_GNOME=
2291 SKIP_MOTIF=
2292 SKIP_ATHENA=
2293 SKIP_NEXTAW=
2294 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002295 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002296 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002297 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2298 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002299 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002300 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2301 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002302 motif) AC_MSG_RESULT(Motif GUI support)
2303 SKIP_MOTIF=;;
2304 athena) AC_MSG_RESULT(Athena GUI support)
2305 SKIP_ATHENA=;;
2306 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2307 SKIP_NEXTAW=;;
2308 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2309 esac
2310
2311fi
2312
Bram Moolenaar071d4272004-06-13 20:20:40 +00002313if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2314 -a "$enable_gui_canon" != "gnome2"; then
2315 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2316 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002317 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002318 , enable_gtk2_check="yes")
2319 AC_MSG_RESULT($enable_gtk2_check)
2320 if test "x$enable_gtk2_check" = "xno"; then
2321 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002322 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002323 fi
2324fi
2325
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002326if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002327 AC_MSG_CHECKING(whether or not to look for GNOME)
2328 AC_ARG_ENABLE(gnome-check,
2329 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2330 , enable_gnome_check="no")
2331 AC_MSG_RESULT($enable_gnome_check)
2332 if test "x$enable_gnome_check" = "xno"; then
2333 SKIP_GNOME=YES
2334 fi
2335fi
2336
Bram Moolenaar98921892016-02-23 17:14:37 +01002337if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2338 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2339 AC_ARG_ENABLE(gtk3-check,
2340 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2341 , enable_gtk3_check="yes")
2342 AC_MSG_RESULT($enable_gtk3_check)
2343 if test "x$enable_gtk3_check" = "xno"; then
2344 SKIP_GTK3=YES
2345 fi
2346fi
2347
Bram Moolenaar071d4272004-06-13 20:20:40 +00002348if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2349 AC_MSG_CHECKING(whether or not to look for Motif)
2350 AC_ARG_ENABLE(motif-check,
2351 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2352 , enable_motif_check="yes")
2353 AC_MSG_RESULT($enable_motif_check)
2354 if test "x$enable_motif_check" = "xno"; then
2355 SKIP_MOTIF=YES
2356 fi
2357fi
2358
2359if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2360 AC_MSG_CHECKING(whether or not to look for Athena)
2361 AC_ARG_ENABLE(athena-check,
2362 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2363 , enable_athena_check="yes")
2364 AC_MSG_RESULT($enable_athena_check)
2365 if test "x$enable_athena_check" = "xno"; then
2366 SKIP_ATHENA=YES
2367 fi
2368fi
2369
2370if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2371 AC_MSG_CHECKING(whether or not to look for neXtaw)
2372 AC_ARG_ENABLE(nextaw-check,
2373 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2374 , enable_nextaw_check="yes")
2375 AC_MSG_RESULT($enable_nextaw_check);
2376 if test "x$enable_nextaw_check" = "xno"; then
2377 SKIP_NEXTAW=YES
2378 fi
2379fi
2380
2381if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2382 AC_MSG_CHECKING(whether or not to look for Carbon)
2383 AC_ARG_ENABLE(carbon-check,
2384 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2385 , enable_carbon_check="yes")
2386 AC_MSG_RESULT($enable_carbon_check);
2387 if test "x$enable_carbon_check" = "xno"; then
2388 SKIP_CARBON=YES
2389 fi
2390fi
2391
Bram Moolenaar843ee412004-06-30 16:16:41 +00002392
Bram Moolenaard0573012017-10-28 21:11:06 +02002393if test "x$MACOS_X" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002394 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002395 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002396 AC_MSG_RESULT(yes);
2397 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002398 if test "$VIMNAME" = "vim"; then
2399 VIMNAME=Vim
2400 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002401
Bram Moolenaar164fca32010-07-14 13:58:07 +02002402 if test "x$MACARCH" = "xboth"; then
2403 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2404 else
2405 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2406 fi
2407
Bram Moolenaar14716812006-05-04 21:54:08 +00002408 dnl Default install directory is not /usr/local
2409 if test x$prefix = xNONE; then
2410 prefix=/Applications
2411 fi
2412
2413 dnl Sorry for the hard coded default
2414 datadir='${prefix}/Vim.app/Contents/Resources'
2415
Bram Moolenaar071d4272004-06-13 20:20:40 +00002416 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002417 SKIP_GTK2=YES;
2418 SKIP_GNOME=YES;
2419 SKIP_MOTIF=YES;
2420 SKIP_ATHENA=YES;
2421 SKIP_NEXTAW=YES;
2422 SKIP_PHOTON=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002423 SKIP_CARBON=YES
2424fi
2425
Bram Moolenaar071d4272004-06-13 20:20:40 +00002426dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002427dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002428dnl
2429dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002430dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002431dnl
2432AC_DEFUN(AM_PATH_GTK,
2433[
2434 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2435 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002436 no_gtk=""
2437 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2438 && $PKG_CONFIG --exists gtk+-2.0; then
2439 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002440 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2441 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002442 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2443 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2444 dnl something like that.
2445 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002446 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002447 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2448 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2449 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2450 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2451 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2452 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2453 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2454 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002455 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2456 && $PKG_CONFIG --exists gtk+-3.0; then
2457 {
2458 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2459 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2460
2461 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2462 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2463 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2464 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2465 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2466 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2467 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2468 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2469 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2470 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002471 else
2472 no_gtk=yes
2473 fi
2474
2475 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2476 {
2477 ac_save_CFLAGS="$CFLAGS"
2478 ac_save_LIBS="$LIBS"
2479 CFLAGS="$CFLAGS $GTK_CFLAGS"
2480 LIBS="$LIBS $GTK_LIBS"
2481
2482 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002483 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002484 dnl
2485 rm -f conf.gtktest
2486 AC_TRY_RUN([
2487#include <gtk/gtk.h>
2488#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002489#if STDC_HEADERS
2490# include <stdlib.h>
2491# include <stddef.h>
2492#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002493
2494int
2495main ()
2496{
2497int major, minor, micro;
2498char *tmp_version;
2499
2500system ("touch conf.gtktest");
2501
2502/* HP/UX 9 (%@#!) writes to sscanf strings */
2503tmp_version = g_strdup("$min_gtk_version");
2504if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2505 printf("%s, bad version string\n", "$min_gtk_version");
2506 exit(1);
2507 }
2508
2509if ((gtk_major_version > major) ||
2510 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2511 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2512 (gtk_micro_version >= micro)))
2513{
2514 return 0;
2515}
2516return 1;
2517}
2518],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2519 CFLAGS="$ac_save_CFLAGS"
2520 LIBS="$ac_save_LIBS"
2521 }
2522 fi
2523 if test "x$no_gtk" = x ; then
2524 if test "x$enable_gtktest" = "xyes"; then
2525 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2526 else
2527 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2528 fi
2529 ifelse([$2], , :, [$2])
2530 else
2531 {
2532 AC_MSG_RESULT(no)
2533 GTK_CFLAGS=""
2534 GTK_LIBS=""
2535 ifelse([$3], , :, [$3])
2536 }
2537 fi
2538 }
2539 else
2540 GTK_CFLAGS=""
2541 GTK_LIBS=""
2542 ifelse([$3], , :, [$3])
2543 fi
2544 AC_SUBST(GTK_CFLAGS)
2545 AC_SUBST(GTK_LIBS)
2546 rm -f conf.gtktest
2547])
2548
2549dnl ---------------------------------------------------------------------------
2550dnl gnome
2551dnl ---------------------------------------------------------------------------
2552AC_DEFUN([GNOME_INIT_HOOK],
2553[
2554 AC_SUBST(GNOME_LIBS)
2555 AC_SUBST(GNOME_LIBDIR)
2556 AC_SUBST(GNOME_INCLUDEDIR)
2557
2558 AC_ARG_WITH(gnome-includes,
2559 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2560 [CFLAGS="$CFLAGS -I$withval"]
2561 )
2562
2563 AC_ARG_WITH(gnome-libs,
2564 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2565 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2566 )
2567
2568 AC_ARG_WITH(gnome,
2569 [ --with-gnome Specify prefix for GNOME files],
2570 if test x$withval = xyes; then
2571 want_gnome=yes
2572 ifelse([$1], [], :, [$1])
2573 else
2574 if test "x$withval" = xno; then
2575 want_gnome=no
2576 else
2577 want_gnome=yes
2578 LDFLAGS="$LDFLAGS -L$withval/lib"
2579 CFLAGS="$CFLAGS -I$withval/include"
2580 gnome_prefix=$withval/lib
2581 fi
2582 fi,
2583 want_gnome=yes)
2584
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002585 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002586 {
2587 AC_MSG_CHECKING(for libgnomeui-2.0)
2588 if $PKG_CONFIG --exists libgnomeui-2.0; then
2589 AC_MSG_RESULT(yes)
2590 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2591 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2592 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002593
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002594 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2595 dnl This might not be the right way but it works for me...
2596 AC_MSG_CHECKING(for FreeBSD)
2597 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2598 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002599 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002600 GNOME_LIBS="$GNOME_LIBS -pthread"
2601 else
2602 AC_MSG_RESULT(no)
2603 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002604 $1
2605 else
2606 AC_MSG_RESULT(not found)
2607 if test "x$2" = xfail; then
2608 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2609 fi
2610 fi
2611 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002612 fi
2613])
2614
2615AC_DEFUN([GNOME_INIT],[
2616 GNOME_INIT_HOOK([],fail)
2617])
2618
2619
2620dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002621dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002622dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002623if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002624
2625 AC_MSG_CHECKING(--disable-gtktest argument)
2626 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2627 , enable_gtktest=yes)
2628 if test "x$enable_gtktest" = "xyes" ; then
2629 AC_MSG_RESULT(gtk test enabled)
2630 else
2631 AC_MSG_RESULT(gtk test disabled)
2632 fi
2633
Bram Moolenaar071d4272004-06-13 20:20:40 +00002634 if test "X$PKG_CONFIG" = "X"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01002635 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002636 fi
2637
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002638 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002639 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2640 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002641 AM_PATH_GTK(2.2.0,
2642 [GUI_LIB_LOC="$GTK_LIBDIR"
2643 GTK_LIBNAME="$GTK_LIBS"
2644 GUI_INC_LOC="$GTK_CFLAGS"], )
2645 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002646 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002647 SKIP_ATHENA=YES
2648 SKIP_NEXTAW=YES
2649 SKIP_MOTIF=YES
2650 GUITYPE=GTK
2651 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002652 fi
2653 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002654 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002655 dnl
2656 dnl if GTK exists, then check for GNOME.
2657 dnl
2658 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002659 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002660 GNOME_INIT_HOOK([have_gnome=yes])
2661 if test "x$have_gnome" = xyes ; then
2662 AC_DEFINE(FEAT_GUI_GNOME)
2663 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2664 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002665 fi
2666 }
2667 fi
2668 fi
2669fi
2670
Bram Moolenaar98921892016-02-23 17:14:37 +01002671
2672dnl ---------------------------------------------------------------------------
2673dnl Check for GTK3.
2674dnl ---------------------------------------------------------------------------
2675if test -z "$SKIP_GTK3"; then
2676
2677 AC_MSG_CHECKING(--disable-gtktest argument)
2678 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2679 , enable_gtktest=yes)
2680 if test "x$enable_gtktest" = "xyes" ; then
2681 AC_MSG_RESULT(gtk test enabled)
2682 else
2683 AC_MSG_RESULT(gtk test disabled)
2684 fi
2685
2686 if test "X$PKG_CONFIG" = "X"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01002687 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
Bram Moolenaar98921892016-02-23 17:14:37 +01002688 fi
2689
2690 if test "x$PKG_CONFIG" != "xno"; then
2691 AM_PATH_GTK(3.0.0,
2692 [GUI_LIB_LOC="$GTK_LIBDIR"
2693 GTK_LIBNAME="$GTK_LIBS"
2694 GUI_INC_LOC="$GTK_CFLAGS"], )
2695 if test "x$GTK_CFLAGS" != "x"; then
2696 SKIP_GTK2=YES
2697 SKIP_GNOME=YES
2698 SKIP_ATHENA=YES
2699 SKIP_NEXTAW=YES
2700 SKIP_MOTIF=YES
2701 GUITYPE=GTK
2702 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002703 AC_DEFINE(USE_GTK3)
2704 fi
2705 fi
2706fi
2707
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002708dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002709dnl glib-compile-resources is found in PATH, use GResource.
2710if test "x$GUITYPE" = "xGTK"; then
2711 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2712 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2713 if test "x$gdk_pixbuf_version" != x ; then
2714 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2715 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2716 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002717 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002718 AC_MSG_RESULT([OK.])
2719 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2720 AC_MSG_CHECKING([glib-compile-resources])
2721 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002722 GLIB_COMPILE_RESOURCES=""
2723 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002724 else
2725 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002726 AC_DEFINE(USE_GRESOURCE)
2727 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2728 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002729 fi
2730 else
2731 AC_MSG_RESULT([not usable.])
2732 fi
2733 else
2734 AC_MSG_RESULT([cannot obtain from pkg_config.])
2735 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002736
2737 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2738 AC_ARG_ENABLE(icon_cache_update,
2739 [ --disable-icon-cache-update update disabled],
2740 [],
2741 [enable_icon_cache_update="yes"])
2742 if test "$enable_icon_cache_update" = "yes"; then
2743 AC_MSG_RESULT([not set])
2744 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2745 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2746 AC_MSG_RESULT([not found in PATH.])
2747 fi
2748 else
2749 AC_MSG_RESULT([update disabled])
2750 fi
2751
2752 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2753 AC_ARG_ENABLE(desktop_database_update,
2754 [ --disable-desktop-database-update update disabled],
2755 [],
2756 [enable_desktop_database_update="yes"])
2757 if test "$enable_desktop_database_update" = "yes"; then
2758 AC_MSG_RESULT([not set])
2759 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2760 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2761 AC_MSG_RESULT([not found in PATH.])
2762 fi
2763 else
2764 AC_MSG_RESULT([update disabled])
2765 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002766fi
2767AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002768AC_SUBST(GRESOURCE_SRC)
2769AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002770AC_SUBST(GTK_UPDATE_ICON_CACHE)
2771AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002772
Bram Moolenaar071d4272004-06-13 20:20:40 +00002773dnl Check for Motif include files location.
2774dnl The LAST one found is used, this makes the highest version to be used,
2775dnl e.g. when Motif1.2 and Motif2.0 are both present.
2776
2777if test -z "$SKIP_MOTIF"; then
2778 gui_XXX="/usr/XXX/Motif* /usr/Motif*/XXX /usr/XXX /usr/shlib /usr/X11*/XXX /usr/XXX/X11* /usr/dt/XXX /local/Motif*/XXX /local/XXX/Motif* /usr/local/Motif*/XXX /usr/local/XXX/Motif* /usr/local/XXX /usr/local/X11*/XXX /usr/local/LessTif/Motif*/XXX $MOTIFHOME/XXX"
2779 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2780 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2781
2782 AC_MSG_CHECKING(for location of Motif GUI includes)
2783 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2784 GUI_INC_LOC=
2785 for try in $gui_includes; do
2786 if test -f "$try/Xm/Xm.h"; then
2787 GUI_INC_LOC=$try
2788 fi
2789 done
2790 if test -n "$GUI_INC_LOC"; then
2791 if test "$GUI_INC_LOC" = /usr/include; then
2792 GUI_INC_LOC=
2793 AC_MSG_RESULT(in default path)
2794 else
2795 AC_MSG_RESULT($GUI_INC_LOC)
2796 fi
2797 else
2798 AC_MSG_RESULT(<not found>)
2799 SKIP_MOTIF=YES
2800 fi
2801fi
2802
2803dnl Check for Motif library files location. In the same order as the include
2804dnl files, to avoid a mixup if several versions are present
2805
2806if test -z "$SKIP_MOTIF"; then
2807 AC_MSG_CHECKING(--with-motif-lib argument)
2808 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002809 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002810 [ MOTIF_LIBNAME="${withval}" ] )
2811
2812 if test -n "$MOTIF_LIBNAME"; then
2813 AC_MSG_RESULT($MOTIF_LIBNAME)
2814 GUI_LIB_LOC=
2815 else
2816 AC_MSG_RESULT(no)
2817
2818 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2819 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2820
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002821 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2822 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002823 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002824 gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002825 GUI_LIB_LOC=
2826 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002827 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002828 if test -f "$libtry"; then
2829 GUI_LIB_LOC=$try
2830 fi
2831 done
2832 done
2833 if test -n "$GUI_LIB_LOC"; then
2834 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002835 if test "$GUI_LIB_LOC" = /usr/lib \
2836 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2837 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002838 GUI_LIB_LOC=
2839 AC_MSG_RESULT(in default path)
2840 else
2841 if test -n "$GUI_LIB_LOC"; then
2842 AC_MSG_RESULT($GUI_LIB_LOC)
2843 if test "`(uname) 2>/dev/null`" = SunOS &&
2844 uname -r | grep '^5' >/dev/null; then
2845 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2846 fi
2847 fi
2848 fi
2849 MOTIF_LIBNAME=-lXm
2850 else
2851 AC_MSG_RESULT(<not found>)
2852 SKIP_MOTIF=YES
2853 fi
2854 fi
2855fi
2856
2857if test -z "$SKIP_MOTIF"; then
2858 SKIP_ATHENA=YES
2859 SKIP_NEXTAW=YES
2860 GUITYPE=MOTIF
2861 AC_SUBST(MOTIF_LIBNAME)
2862fi
2863
2864dnl Check if the Athena files can be found
2865
2866GUI_X_LIBS=
2867
2868if test -z "$SKIP_ATHENA"; then
2869 AC_MSG_CHECKING(if Athena header files can be found)
2870 cflags_save=$CFLAGS
2871 CFLAGS="$CFLAGS $X_CFLAGS"
2872 AC_TRY_COMPILE([
2873#include <X11/Intrinsic.h>
2874#include <X11/Xaw/Paned.h>], ,
2875 AC_MSG_RESULT(yes),
2876 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2877 CFLAGS=$cflags_save
2878fi
2879
2880if test -z "$SKIP_ATHENA"; then
2881 GUITYPE=ATHENA
2882fi
2883
2884if test -z "$SKIP_NEXTAW"; then
2885 AC_MSG_CHECKING(if neXtaw header files can be found)
2886 cflags_save=$CFLAGS
2887 CFLAGS="$CFLAGS $X_CFLAGS"
2888 AC_TRY_COMPILE([
2889#include <X11/Intrinsic.h>
2890#include <X11/neXtaw/Paned.h>], ,
2891 AC_MSG_RESULT(yes),
2892 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2893 CFLAGS=$cflags_save
2894fi
2895
2896if test -z "$SKIP_NEXTAW"; then
2897 GUITYPE=NEXTAW
2898fi
2899
2900if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2901 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2902 dnl Avoid adding it when it twice
2903 if test -n "$GUI_INC_LOC"; then
2904 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
2905 fi
2906 if test -n "$GUI_LIB_LOC"; then
2907 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
2908 fi
2909
2910 dnl Check for -lXext and then for -lXmu
2911 ldflags_save=$LDFLAGS
2912 LDFLAGS="$X_LIBS $LDFLAGS"
2913 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
2914 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2915 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
2916 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
2917 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2918 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
2919 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2920 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
2921 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2922 if test -z "$SKIP_MOTIF"; then
2923 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
2924 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2925 fi
2926 LDFLAGS=$ldflags_save
2927
2928 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
2929 AC_MSG_CHECKING(for extra X11 defines)
2930 NARROW_PROTO=
2931 rm -fr conftestdir
2932 if mkdir conftestdir; then
2933 cd conftestdir
2934 cat > Imakefile <<'EOF'
2935acfindx:
2936 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
2937EOF
2938 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
2939 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
2940 fi
2941 cd ..
2942 rm -fr conftestdir
2943 fi
2944 if test -z "$NARROW_PROTO"; then
2945 AC_MSG_RESULT(no)
2946 else
2947 AC_MSG_RESULT($NARROW_PROTO)
2948 fi
2949 AC_SUBST(NARROW_PROTO)
2950fi
2951
2952dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
2953dnl use the X11 include path
2954if test "$enable_xsmp" = "yes"; then
2955 cppflags_save=$CPPFLAGS
2956 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2957 AC_CHECK_HEADERS(X11/SM/SMlib.h)
2958 CPPFLAGS=$cppflags_save
2959fi
2960
2961
Bram Moolenaar98921892016-02-23 17:14:37 +01002962if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002963 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
2964 cppflags_save=$CPPFLAGS
2965 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2966 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
2967
2968 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
2969 if test ! "$enable_xim" = "no"; then
2970 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
2971 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
2972 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02002973 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002974 fi
2975 CPPFLAGS=$cppflags_save
2976
2977 dnl automatically enable XIM when hangul input isn't enabled
2978 if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
2979 -a "x$GUITYPE" != "xNONE" ; then
2980 AC_MSG_RESULT(X GUI selected; xim has been enabled)
2981 enable_xim="yes"
2982 fi
2983fi
2984
2985if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2986 cppflags_save=$CPPFLAGS
2987 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00002988dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
2989 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
2990 AC_TRY_COMPILE([
2991#include <X11/Intrinsic.h>
2992#include <X11/Xmu/Editres.h>],
2993 [int i; i = 0;],
2994 AC_MSG_RESULT(yes)
2995 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
2996 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00002997 CPPFLAGS=$cppflags_save
2998fi
2999
3000dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3001if test -z "$SKIP_MOTIF"; then
3002 cppflags_save=$CPPFLAGS
3003 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003004 if test "$zOSUnix" = "yes"; then
3005 xmheader="Xm/Xm.h"
3006 else
3007 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003008 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003009 fi
3010 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003011
Bram Moolenaar77c19352012-06-13 19:19:41 +02003012 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003013 dnl Solaris uses XpmAttributes_21, very annoying.
3014 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3015 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3016 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3017 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3018 )
3019 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003020 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003021 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003022 CPPFLAGS=$cppflags_save
3023fi
3024
3025if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3026 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3027 enable_xim="no"
3028fi
3029if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3030 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3031 enable_fontset="no"
3032fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003033if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003034 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3035 enable_fontset="no"
3036fi
3037
Bram Moolenaar071d4272004-06-13 20:20:40 +00003038if test -z "$SKIP_PHOTON"; then
3039 GUITYPE=PHOTONGUI
3040fi
3041
3042AC_SUBST(GUI_INC_LOC)
3043AC_SUBST(GUI_LIB_LOC)
3044AC_SUBST(GUITYPE)
3045AC_SUBST(GUI_X_LIBS)
3046
3047if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3048 AC_MSG_ERROR([cannot use workshop without Motif])
3049fi
3050
3051dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3052if test "$enable_xim" = "yes"; then
3053 AC_DEFINE(FEAT_XIM)
3054fi
3055if test "$enable_fontset" = "yes"; then
3056 AC_DEFINE(FEAT_XFONTSET)
3057fi
3058
3059
3060dnl ---------------------------------------------------------------------------
3061dnl end of GUI-checking
3062dnl ---------------------------------------------------------------------------
3063
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003064AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003065if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003066 dnl Linux
3067 AC_MSG_RESULT([/proc/self/exe])
3068 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3069elif test -L "/proc/self/path/a.out"; then
3070 dnl Solaris
3071 AC_MSG_RESULT([/proc/self/path/a.out])
3072 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3073elif test -L "/proc/curproc/file"; then
3074 dnl FreeBSD
3075 AC_MSG_RESULT([/proc/curproc/file])
3076 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003077else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003078 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003079fi
3080
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003081dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003082AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003083case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003084 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003085 AC_MSG_CHECKING(for CYGWIN clipboard support)
3086 if test "x$with_x" = "xno" ; then
3087 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3088 AC_MSG_RESULT(yes)
3089 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3090 else
3091 AC_MSG_RESULT(no - using X11)
3092 fi ;;
3093
3094 *) CYGWIN=no; AC_MSG_RESULT(no);;
3095esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003096
3097dnl Only really enable hangul input when GUI and XFONTSET are available
3098if test "$enable_hangulinput" = "yes"; then
3099 if test "x$GUITYPE" = "xNONE"; then
3100 AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
3101 enable_hangulinput=no
3102 else
3103 AC_DEFINE(FEAT_HANGULIN)
3104 HANGULIN_SRC=hangulin.c
3105 AC_SUBST(HANGULIN_SRC)
3106 HANGULIN_OBJ=objects/hangulin.o
3107 AC_SUBST(HANGULIN_OBJ)
3108 fi
3109fi
3110
3111dnl Checks for libraries and include files.
3112
Bram Moolenaar446cb832008-06-24 21:56:24 +00003113AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3114 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003115 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003116#include "confdefs.h"
3117#include <ctype.h>
3118#if STDC_HEADERS
3119# include <stdlib.h>
3120# include <stddef.h>
3121#endif
3122main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003123 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003124 vim_cv_toupper_broken=yes
3125 ],[
3126 vim_cv_toupper_broken=no
3127 ],[
3128 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3129 ])])
3130
3131if test "x$vim_cv_toupper_broken" = "xyes" ; then
3132 AC_DEFINE(BROKEN_TOUPPER)
3133fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003134
3135AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003136AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003137 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3138 AC_MSG_RESULT(no))
3139
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003140AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3141AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3142 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3143 AC_MSG_RESULT(no))
3144
Bram Moolenaar071d4272004-06-13 20:20:40 +00003145dnl Checks for header files.
3146AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3147dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3148if test "$HAS_ELF" = 1; then
3149 AC_CHECK_LIB(elf, main)
3150fi
3151
3152AC_HEADER_DIRENT
3153
Bram Moolenaar071d4272004-06-13 20:20:40 +00003154dnl If sys/wait.h is not found it might still exist but not be POSIX
3155dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3156if test $ac_cv_header_sys_wait_h = no; then
3157 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3158 AC_TRY_COMPILE([#include <sys/wait.h>],
3159 [union wait xx, yy; xx = yy],
3160 AC_MSG_RESULT(yes)
3161 AC_DEFINE(HAVE_SYS_WAIT_H)
3162 AC_DEFINE(HAVE_UNION_WAIT),
3163 AC_MSG_RESULT(no))
3164fi
3165
Bram Moolenaar779a7752016-01-30 23:26:34 +01003166AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003167 sys/select.h sys/utsname.h termcap.h fcntl.h \
3168 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3169 termio.h iconv.h inttypes.h langinfo.h math.h \
3170 unistd.h stropts.h errno.h sys/resource.h \
3171 sys/systeminfo.h locale.h sys/stream.h termios.h \
3172 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
3173 utime.h sys/param.h libintl.h libgen.h \
3174 util/debug.h util/msg18n.h frame.h sys/acl.h \
3175 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003176
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003177dnl sys/ptem.h depends on sys/stream.h on Solaris
3178AC_CHECK_HEADERS(sys/ptem.h, [], [],
3179[#if defined HAVE_SYS_STREAM_H
3180# include <sys/stream.h>
3181#endif])
3182
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003183dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3184AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3185[#if defined HAVE_SYS_PARAM_H
3186# include <sys/param.h>
3187#endif])
3188
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003189
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003190dnl pthread_np.h may exist but can only be used after including pthread.h
3191AC_MSG_CHECKING([for pthread_np.h])
3192AC_TRY_COMPILE([
3193#include <pthread.h>
3194#include <pthread_np.h>],
3195 [int i; i = 0;],
3196 AC_MSG_RESULT(yes)
3197 AC_DEFINE(HAVE_PTHREAD_NP_H),
3198 AC_MSG_RESULT(no))
3199
Bram Moolenaare344bea2005-09-01 20:46:49 +00003200AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003201if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003202 dnl The strings.h file on OS/X contains a warning and nothing useful.
3203 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3204else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003205
3206dnl Check if strings.h and string.h can both be included when defined.
3207AC_MSG_CHECKING([if strings.h can be included after string.h])
3208cppflags_save=$CPPFLAGS
3209CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3210AC_TRY_COMPILE([
3211#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3212# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3213 /* but don't do it on AIX 5.1 (Uribarri) */
3214#endif
3215#ifdef HAVE_XM_XM_H
3216# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3217#endif
3218#ifdef HAVE_STRING_H
3219# include <string.h>
3220#endif
3221#if defined(HAVE_STRINGS_H)
3222# include <strings.h>
3223#endif
3224 ], [int i; i = 0;],
3225 AC_MSG_RESULT(yes),
3226 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3227 AC_MSG_RESULT(no))
3228CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003229fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003230
3231dnl Checks for typedefs, structures, and compiler characteristics.
3232AC_PROG_GCC_TRADITIONAL
3233AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003234AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003235AC_TYPE_MODE_T
3236AC_TYPE_OFF_T
3237AC_TYPE_PID_T
3238AC_TYPE_SIZE_T
3239AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003240AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003241
Bram Moolenaar071d4272004-06-13 20:20:40 +00003242AC_HEADER_TIME
3243AC_CHECK_TYPE(ino_t, long)
3244AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003245AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003246AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003247
3248AC_MSG_CHECKING(for rlim_t)
3249if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3250 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3251else
3252 AC_EGREP_CPP(dnl
3253changequote(<<,>>)dnl
3254<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3255changequote([,]),
3256 [
3257#include <sys/types.h>
3258#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003259# include <stdlib.h>
3260# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003261#endif
3262#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003263# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003264#endif
3265 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3266 AC_MSG_RESULT($ac_cv_type_rlim_t)
3267fi
3268if test $ac_cv_type_rlim_t = no; then
3269 cat >> confdefs.h <<\EOF
3270#define rlim_t unsigned long
3271EOF
3272fi
3273
3274AC_MSG_CHECKING(for stack_t)
3275if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3276 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3277else
3278 AC_EGREP_CPP(stack_t,
3279 [
3280#include <sys/types.h>
3281#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003282# include <stdlib.h>
3283# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003284#endif
3285#include <signal.h>
3286 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3287 AC_MSG_RESULT($ac_cv_type_stack_t)
3288fi
3289if test $ac_cv_type_stack_t = no; then
3290 cat >> confdefs.h <<\EOF
3291#define stack_t struct sigaltstack
3292EOF
3293fi
3294
3295dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3296AC_MSG_CHECKING(whether stack_t has an ss_base field)
3297AC_TRY_COMPILE([
3298#include <sys/types.h>
3299#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003300# include <stdlib.h>
3301# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003302#endif
3303#include <signal.h>
3304#include "confdefs.h"
3305 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3306 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3307 AC_MSG_RESULT(no))
3308
3309olibs="$LIBS"
3310AC_MSG_CHECKING(--with-tlib argument)
3311AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3312if test -n "$with_tlib"; then
3313 AC_MSG_RESULT($with_tlib)
3314 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003315 AC_MSG_CHECKING(for linking with $with_tlib library)
3316 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3317 dnl Need to check for tgetent() below.
3318 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003319else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003320 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003321 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3322 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003323 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003324 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003325 dnl Older versions of ncurses have bugs, get a new one!
3326 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003327 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003328 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003329 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3330 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003331 esac
3332 for libname in $tlibs; do
3333 AC_CHECK_LIB(${libname}, tgetent,,)
3334 if test "x$olibs" != "x$LIBS"; then
3335 dnl It's possible that a library is found but it doesn't work
3336 dnl e.g., shared library that cannot be found
3337 dnl compile and run a test program to be sure
3338 AC_TRY_RUN([
3339#ifdef HAVE_TERMCAP_H
3340# include <termcap.h>
3341#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003342#if STDC_HEADERS
3343# include <stdlib.h>
3344# include <stddef.h>
3345#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003346main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3347 res="OK", res="FAIL", res="FAIL")
3348 if test "$res" = "OK"; then
3349 break
3350 fi
3351 AC_MSG_RESULT($libname library is not usable)
3352 LIBS="$olibs"
3353 fi
3354 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003355 if test "x$olibs" = "x$LIBS"; then
3356 AC_MSG_RESULT(no terminal library found)
3357 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003358fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003359
3360if test "x$olibs" = "x$LIBS"; then
3361 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003362 AC_TRY_LINK([],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003363 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3364 AC_MSG_RESULT(yes),
3365 AC_MSG_ERROR([NOT FOUND!
3366 You need to install a terminal library; for example ncurses.
3367 Or specify the name of the library with --with-tlib.]))
3368fi
3369
Bram Moolenaar446cb832008-06-24 21:56:24 +00003370AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3371 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003372 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003373#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003374#ifdef HAVE_TERMCAP_H
3375# include <termcap.h>
3376#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003377#ifdef HAVE_STRING_H
3378# include <string.h>
3379#endif
3380#if STDC_HEADERS
3381# include <stdlib.h>
3382# include <stddef.h>
3383#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003384main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003385{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003386 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003387 vim_cv_terminfo=no
3388 ],[
3389 vim_cv_terminfo=yes
3390 ],[
3391 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3392 ])
3393 ])
3394
3395if test "x$vim_cv_terminfo" = "xyes" ; then
3396 AC_DEFINE(TERMINFO)
3397fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003398
Bram Moolenaara88254f2017-11-02 23:04:14 +01003399AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003400 [
3401 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003402#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003403#ifdef HAVE_TERMCAP_H
3404# include <termcap.h>
3405#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003406#if STDC_HEADERS
3407# include <stdlib.h>
3408# include <stddef.h>
3409#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003410main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003411{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003412 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003413 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003414 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003415 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003416 ],[
3417 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003418 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003419 ])
3420
Bram Moolenaara88254f2017-11-02 23:04:14 +01003421if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003422 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003423fi
3424
3425AC_MSG_CHECKING(whether termcap.h contains ospeed)
3426AC_TRY_LINK([
3427#ifdef HAVE_TERMCAP_H
3428# include <termcap.h>
3429#endif
3430 ], [ospeed = 20000],
3431 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3432 [AC_MSG_RESULT(no)
3433 AC_MSG_CHECKING(whether ospeed can be extern)
3434 AC_TRY_LINK([
3435#ifdef HAVE_TERMCAP_H
3436# include <termcap.h>
3437#endif
3438extern short ospeed;
3439 ], [ospeed = 20000],
3440 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3441 AC_MSG_RESULT(no))]
3442 )
3443
3444AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3445AC_TRY_LINK([
3446#ifdef HAVE_TERMCAP_H
3447# include <termcap.h>
3448#endif
3449 ], [if (UP == 0 && BC == 0) PC = 1],
3450 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3451 [AC_MSG_RESULT(no)
3452 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3453 AC_TRY_LINK([
3454#ifdef HAVE_TERMCAP_H
3455# include <termcap.h>
3456#endif
3457extern char *UP, *BC, PC;
3458 ], [if (UP == 0 && BC == 0) PC = 1],
3459 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3460 AC_MSG_RESULT(no))]
3461 )
3462
3463AC_MSG_CHECKING(whether tputs() uses outfuntype)
3464AC_TRY_COMPILE([
3465#ifdef HAVE_TERMCAP_H
3466# include <termcap.h>
3467#endif
3468 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3469 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3470 AC_MSG_RESULT(no))
3471
3472dnl On some SCO machines sys/select redefines struct timeval
3473AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3474AC_TRY_COMPILE([
3475#include <sys/types.h>
3476#include <sys/time.h>
3477#include <sys/select.h>], ,
3478 AC_MSG_RESULT(yes)
3479 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3480 AC_MSG_RESULT(no))
3481
3482dnl AC_DECL_SYS_SIGLIST
3483
3484dnl Checks for pty.c (copied from screen) ==========================
3485AC_MSG_CHECKING(for /dev/ptc)
3486if test -r /dev/ptc; then
3487 AC_DEFINE(HAVE_DEV_PTC)
3488 AC_MSG_RESULT(yes)
3489else
3490 AC_MSG_RESULT(no)
3491fi
3492
3493AC_MSG_CHECKING(for SVR4 ptys)
3494if test -c /dev/ptmx ; then
3495 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3496 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3497 AC_MSG_RESULT(no))
3498else
3499 AC_MSG_RESULT(no)
3500fi
3501
3502AC_MSG_CHECKING(for ptyranges)
3503if test -d /dev/ptym ; then
3504 pdir='/dev/ptym'
3505else
3506 pdir='/dev'
3507fi
3508dnl SCO uses ptyp%d
3509AC_EGREP_CPP(yes,
3510[#ifdef M_UNIX
3511 yes;
3512#endif
3513 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3514dnl if test -c /dev/ptyp19; then
3515dnl ptys=`echo /dev/ptyp??`
3516dnl else
3517dnl ptys=`echo $pdir/pty??`
3518dnl fi
3519if test "$ptys" != "$pdir/pty??" ; then
3520 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3521 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3522 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3523 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3524 AC_MSG_RESULT([$p0 / $p1])
3525else
3526 AC_MSG_RESULT([don't know])
3527fi
3528
3529dnl **** pty mode/group handling ****
3530dnl
3531dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
Bram Moolenaar071d4272004-06-13 20:20:40 +00003532rm -f conftest_grp
Bram Moolenaar446cb832008-06-24 21:56:24 +00003533AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3534 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003535 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003536#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003537#include <sys/types.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003538#if STDC_HEADERS
3539# include <stdlib.h>
3540# include <stddef.h>
3541#endif
3542#ifdef HAVE_UNISTD_H
3543#include <unistd.h>
3544#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003545#include <sys/stat.h>
3546#include <stdio.h>
3547main()
3548{
3549 struct stat sb;
3550 char *x,*ttyname();
3551 int om, m;
3552 FILE *fp;
3553
3554 if (!(x = ttyname(0))) exit(1);
3555 if (stat(x, &sb)) exit(1);
3556 om = sb.st_mode;
3557 if (om & 002) exit(0);
3558 m = system("mesg y");
3559 if (m == -1 || m == 127) exit(1);
3560 if (stat(x, &sb)) exit(1);
3561 m = sb.st_mode;
3562 if (chmod(x, om)) exit(1);
3563 if (m & 002) exit(0);
3564 if (sb.st_gid == getgid()) exit(1);
3565 if (!(fp=fopen("conftest_grp", "w")))
3566 exit(1);
3567 fprintf(fp, "%d\n", sb.st_gid);
3568 fclose(fp);
3569 exit(0);
3570}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003571 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003572 if test -f conftest_grp; then
3573 vim_cv_tty_group=`cat conftest_grp`
3574 if test "x$vim_cv_tty_mode" = "x" ; then
3575 vim_cv_tty_mode=0620
3576 fi
3577 AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3578 else
3579 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003580 AC_MSG_RESULT([ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003581 fi
3582 ],[
3583 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003584 AC_MSG_RESULT([can't determine - assume ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003585 ],[
3586 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3587 ])
3588 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003589rm -f conftest_grp
3590
Bram Moolenaar446cb832008-06-24 21:56:24 +00003591if test "x$vim_cv_tty_group" != "xworld" ; then
3592 AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3593 if test "x$vim_cv_tty_mode" = "x" ; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02003594 AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003595 else
3596 AC_DEFINE(PTYMODE, 0620)
3597 fi
3598fi
3599
Bram Moolenaar071d4272004-06-13 20:20:40 +00003600dnl Checks for library functions. ===================================
3601
3602AC_TYPE_SIGNAL
3603
3604dnl find out what to use at the end of a signal function
3605if test $ac_cv_type_signal = void; then
3606 AC_DEFINE(SIGRETURN, [return])
3607else
3608 AC_DEFINE(SIGRETURN, [return 0])
3609fi
3610
3611dnl check if struct sigcontext is defined (used for SGI only)
3612AC_MSG_CHECKING(for struct sigcontext)
3613AC_TRY_COMPILE([
3614#include <signal.h>
3615test_sig()
3616{
3617 struct sigcontext *scont;
3618 scont = (struct sigcontext *)0;
3619 return 1;
3620} ], ,
3621 AC_MSG_RESULT(yes)
3622 AC_DEFINE(HAVE_SIGCONTEXT),
3623 AC_MSG_RESULT(no))
3624
3625dnl tricky stuff: try to find out if getcwd() is implemented with
3626dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003627AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3628 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003629 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003630#include "confdefs.h"
3631#ifdef HAVE_UNISTD_H
3632#include <unistd.h>
3633#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003634char *dagger[] = { "IFS=pwd", 0 };
3635main()
3636{
3637 char buffer[500];
3638 extern char **environ;
3639 environ = dagger;
3640 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003641}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003642 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003643 vim_cv_getcwd_broken=no
3644 ],[
3645 vim_cv_getcwd_broken=yes
3646 ],[
3647 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3648 ])
3649 ])
3650
3651if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3652 AC_DEFINE(BAD_GETCWD)
3653fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003654
Bram Moolenaar25153e12010-02-24 14:47:08 +01003655dnl Check for functions in one big call, to reduce the size of configure.
3656dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003657AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaarb129a442016-12-01 17:25:20 +01003658 getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003659 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003660 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaarbb09ceb2016-10-18 16:27:23 +02003661 sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00003662 strnicmp strpbrk strtol tgetent towlower towupper iswupper \
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003663 usleep utime utimes mblen ftruncate)
Bram Moolenaar25153e12010-02-24 14:47:08 +01003664AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003665
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003666dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3667dnl appropriate, so that off_t is 64 bits when needed.
3668AC_SYS_LARGEFILE
3669
Bram Moolenaar071d4272004-06-13 20:20:40 +00003670dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3671AC_MSG_CHECKING(for st_blksize)
3672AC_TRY_COMPILE(
3673[#include <sys/types.h>
3674#include <sys/stat.h>],
3675[ struct stat st;
3676 int n;
3677
3678 stat("/", &st);
3679 n = (int)st.st_blksize;],
3680 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3681 AC_MSG_RESULT(no))
3682
Bram Moolenaar446cb832008-06-24 21:56:24 +00003683AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3684 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003685 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003686#include "confdefs.h"
3687#if STDC_HEADERS
3688# include <stdlib.h>
3689# include <stddef.h>
3690#endif
3691#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003692#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003693main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003694 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003695 vim_cv_stat_ignores_slash=yes
3696 ],[
3697 vim_cv_stat_ignores_slash=no
3698 ],[
3699 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3700 ])
3701 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003702
Bram Moolenaar446cb832008-06-24 21:56:24 +00003703if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3704 AC_DEFINE(STAT_IGNORES_SLASH)
3705fi
3706
Bram Moolenaar071d4272004-06-13 20:20:40 +00003707dnl Link with iconv for charset translation, if not found without library.
3708dnl check for iconv() requires including iconv.h
3709dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3710dnl has been installed.
3711AC_MSG_CHECKING(for iconv_open())
3712save_LIBS="$LIBS"
3713LIBS="$LIBS -liconv"
3714AC_TRY_LINK([
3715#ifdef HAVE_ICONV_H
3716# include <iconv.h>
3717#endif
3718 ], [iconv_open("fr", "to");],
3719 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3720 LIBS="$save_LIBS"
3721 AC_TRY_LINK([
3722#ifdef HAVE_ICONV_H
3723# include <iconv.h>
3724#endif
3725 ], [iconv_open("fr", "to");],
3726 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3727 AC_MSG_RESULT(no)))
3728
3729
3730AC_MSG_CHECKING(for nl_langinfo(CODESET))
3731AC_TRY_LINK([
3732#ifdef HAVE_LANGINFO_H
3733# include <langinfo.h>
3734#endif
3735], [char *cs = nl_langinfo(CODESET);],
3736 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3737 AC_MSG_RESULT(no))
3738
Bram Moolenaar446cb832008-06-24 21:56:24 +00003739dnl Need various functions for floating point support. Only enable
3740dnl floating point when they are all present.
3741AC_CHECK_LIB(m, strtod)
3742AC_MSG_CHECKING([for strtod() and other floating point functions])
3743AC_TRY_LINK([
3744#ifdef HAVE_MATH_H
3745# include <math.h>
3746#endif
3747#if STDC_HEADERS
3748# include <stdlib.h>
3749# include <stddef.h>
3750#endif
3751], [char *s; double d;
3752 d = strtod("1.1", &s);
3753 d = fabs(1.11);
3754 d = ceil(1.11);
3755 d = floor(1.11);
3756 d = log10(1.11);
3757 d = pow(1.11, 2.22);
3758 d = sqrt(1.11);
3759 d = sin(1.11);
3760 d = cos(1.11);
3761 d = atan(1.11);
3762 ],
3763 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3764 AC_MSG_RESULT(no))
3765
Bram Moolenaara6b89762016-02-29 21:38:26 +01003766dnl isinf() and isnan() need to include header files and may need -lm.
3767AC_MSG_CHECKING([for isinf()])
3768AC_TRY_LINK([
3769#ifdef HAVE_MATH_H
3770# include <math.h>
3771#endif
3772#if STDC_HEADERS
3773# include <stdlib.h>
3774# include <stddef.h>
3775#endif
3776], [int r = isinf(1.11); ],
3777 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3778 AC_MSG_RESULT(no))
3779
3780AC_MSG_CHECKING([for isnan()])
3781AC_TRY_LINK([
3782#ifdef HAVE_MATH_H
3783# include <math.h>
3784#endif
3785#if STDC_HEADERS
3786# include <stdlib.h>
3787# include <stddef.h>
3788#endif
3789], [int r = isnan(1.11); ],
3790 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3791 AC_MSG_RESULT(no))
3792
Bram Moolenaar071d4272004-06-13 20:20:40 +00003793dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3794dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003795dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003796AC_MSG_CHECKING(--disable-acl argument)
3797AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003798 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003799 , [enable_acl="yes"])
3800if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003801 AC_MSG_RESULT(no)
3802 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003803 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3804 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3805
Bram Moolenaard6d30422018-01-28 22:48:55 +01003806 AC_MSG_CHECKING(for POSIX ACL support)
3807 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003808#include <sys/types.h>
3809#ifdef HAVE_SYS_ACL_H
3810# include <sys/acl.h>
3811#endif
3812acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3813 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3814 acl_free(acl);],
3815 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3816 AC_MSG_RESULT(no))
3817
Bram Moolenaard6d30422018-01-28 22:48:55 +01003818 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3819 AC_MSG_CHECKING(for Solaris ACL support)
3820 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003821#ifdef HAVE_SYS_ACL_H
3822# include <sys/acl.h>
3823#endif], [acl("foo", GETACLCNT, 0, NULL);
3824 ],
3825 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003826 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003827
Bram Moolenaard6d30422018-01-28 22:48:55 +01003828 AC_MSG_CHECKING(for AIX ACL support)
3829 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003830#if STDC_HEADERS
3831# include <stdlib.h>
3832# include <stddef.h>
3833#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003834#ifdef HAVE_SYS_ACL_H
3835# include <sys/acl.h>
3836#endif
3837#ifdef HAVE_SYS_ACCESS_H
3838# include <sys/access.h>
3839#endif
3840#define _ALL_SOURCE
3841
3842#include <sys/stat.h>
3843
3844int aclsize;
3845struct acl *aclent;], [aclsize = sizeof(struct acl);
3846 aclent = (void *)malloc(aclsize);
3847 statacl("foo", STX_NORMAL, aclent, aclsize);
3848 ],
3849 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3850 AC_MSG_RESULT(no))
3851else
3852 AC_MSG_RESULT(yes)
3853fi
3854
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003855if test "x$GTK_CFLAGS" != "x"; then
3856 dnl pango_shape_full() is new, fall back to pango_shape().
3857 AC_MSG_CHECKING(for pango_shape_full)
3858 ac_save_CFLAGS="$CFLAGS"
3859 ac_save_LIBS="$LIBS"
3860 CFLAGS="$CFLAGS $GTK_CFLAGS"
3861 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003862 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003863 [#include <gtk/gtk.h>],
3864 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3865 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3866 AC_MSG_RESULT(no))
3867 CFLAGS="$ac_save_CFLAGS"
3868 LIBS="$ac_save_LIBS"
3869fi
3870
Bram Moolenaar071d4272004-06-13 20:20:40 +00003871AC_MSG_CHECKING(--disable-gpm argument)
3872AC_ARG_ENABLE(gpm,
3873 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3874 [enable_gpm="yes"])
3875
3876if test "$enable_gpm" = "yes"; then
3877 AC_MSG_RESULT(no)
3878 dnl Checking if gpm support can be compiled
3879 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3880 [olibs="$LIBS" ; LIBS="-lgpm"]
3881 AC_TRY_LINK(
3882 [#include <gpm.h>
3883 #include <linux/keyboard.h>],
3884 [Gpm_GetLibVersion(NULL);],
3885 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3886 dnl FEAT_MOUSE_GPM if mouse support is included
3887 [vi_cv_have_gpm=yes],
3888 [vi_cv_have_gpm=no])
3889 [LIBS="$olibs"]
3890 )
3891 if test $vi_cv_have_gpm = yes; then
3892 LIBS="$LIBS -lgpm"
3893 AC_DEFINE(HAVE_GPM)
3894 fi
3895else
3896 AC_MSG_RESULT(yes)
3897fi
3898
Bram Moolenaar446cb832008-06-24 21:56:24 +00003899AC_MSG_CHECKING(--disable-sysmouse argument)
3900AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003901 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00003902 [enable_sysmouse="yes"])
3903
3904if test "$enable_sysmouse" = "yes"; then
3905 AC_MSG_RESULT(no)
3906 dnl Checking if sysmouse support can be compiled
3907 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3908 dnl defines FEAT_SYSMOUSE if mouse support is included
3909 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3910 AC_TRY_LINK(
3911 [#include <sys/consio.h>
3912 #include <signal.h>
3913 #include <sys/fbio.h>],
3914 [struct mouse_info mouse;
3915 mouse.operation = MOUSE_MODE;
3916 mouse.operation = MOUSE_SHOW;
3917 mouse.u.mode.mode = 0;
3918 mouse.u.mode.signal = SIGUSR2;],
3919 [vi_cv_have_sysmouse=yes],
3920 [vi_cv_have_sysmouse=no])
3921 )
3922 if test $vi_cv_have_sysmouse = yes; then
3923 AC_DEFINE(HAVE_SYSMOUSE)
3924 fi
3925else
3926 AC_MSG_RESULT(yes)
3927fi
3928
Bram Moolenaarf05da212009-11-17 16:13:15 +00003929dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3930AC_MSG_CHECKING(for FD_CLOEXEC)
3931AC_TRY_COMPILE(
3932[#if HAVE_FCNTL_H
3933# include <fcntl.h>
3934#endif],
3935[ int flag = FD_CLOEXEC;],
3936 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
3937 AC_MSG_RESULT(not usable))
3938
Bram Moolenaar071d4272004-06-13 20:20:40 +00003939dnl rename needs to be checked separately to work on Nextstep with cc
3940AC_MSG_CHECKING(for rename)
3941AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
3942 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
3943 AC_MSG_RESULT(no))
3944
3945dnl sysctl() may exist but not the arguments we use
3946AC_MSG_CHECKING(for sysctl)
3947AC_TRY_COMPILE(
3948[#include <sys/types.h>
3949#include <sys/sysctl.h>],
3950[ int mib[2], r;
3951 size_t len;
3952
3953 mib[0] = CTL_HW;
3954 mib[1] = HW_USERMEM;
3955 len = sizeof(r);
3956 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
3957 ],
3958 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
3959 AC_MSG_RESULT(not usable))
3960
3961dnl sysinfo() may exist but not be Linux compatible
3962AC_MSG_CHECKING(for sysinfo)
3963AC_TRY_COMPILE(
3964[#include <sys/types.h>
3965#include <sys/sysinfo.h>],
3966[ struct sysinfo sinfo;
3967 int t;
3968
3969 (void)sysinfo(&sinfo);
3970 t = sinfo.totalram;
3971 ],
3972 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
3973 AC_MSG_RESULT(not usable))
3974
Bram Moolenaar914572a2007-05-01 11:37:47 +00003975dnl struct sysinfo may have the mem_unit field or not
3976AC_MSG_CHECKING(for sysinfo.mem_unit)
3977AC_TRY_COMPILE(
3978[#include <sys/types.h>
3979#include <sys/sysinfo.h>],
3980[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003981 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00003982 ],
3983 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
3984 AC_MSG_RESULT(no))
3985
Bram Moolenaar071d4272004-06-13 20:20:40 +00003986dnl sysconf() may exist but not support what we want to use
3987AC_MSG_CHECKING(for sysconf)
3988AC_TRY_COMPILE(
3989[#include <unistd.h>],
3990[ (void)sysconf(_SC_PAGESIZE);
3991 (void)sysconf(_SC_PHYS_PAGES);
3992 ],
3993 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
3994 AC_MSG_RESULT(not usable))
3995
Bram Moolenaar914703b2010-05-31 21:59:46 +02003996AC_CHECK_SIZEOF([int])
3997AC_CHECK_SIZEOF([long])
3998AC_CHECK_SIZEOF([time_t])
3999AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004000
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004001dnl Use different names to avoid clashing with other header files.
4002AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4003AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4004
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004005dnl Make sure that uint32_t is really 32 bits unsigned.
4006AC_MSG_CHECKING([uint32_t is 32 bits])
4007AC_TRY_RUN([
4008#ifdef HAVE_STDINT_H
4009# include <stdint.h>
4010#endif
4011#ifdef HAVE_INTTYPES_H
4012# include <inttypes.h>
4013#endif
4014main() {
4015 uint32_t nr1 = (uint32_t)-1;
4016 uint32_t nr2 = (uint32_t)0xffffffffUL;
4017 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
4018 exit(0);
4019}],
4020AC_MSG_RESULT(ok),
4021AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004022AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004023
Bram Moolenaar446cb832008-06-24 21:56:24 +00004024dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4025dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4026
Bram Moolenaar071d4272004-06-13 20:20:40 +00004027[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004028#include "confdefs.h"
4029#ifdef HAVE_STRING_H
4030# include <string.h>
4031#endif
4032#if STDC_HEADERS
4033# include <stdlib.h>
4034# include <stddef.h>
4035#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036main() {
4037 char buf[10];
4038 strcpy(buf, "abcdefghi");
4039 mch_memmove(buf, buf + 2, 3);
4040 if (strncmp(buf, "ababcf", 6))
4041 exit(1);
4042 strcpy(buf, "abcdefghi");
4043 mch_memmove(buf + 2, buf, 3);
4044 if (strncmp(buf, "cdedef", 6))
4045 exit(1);
4046 exit(0); /* libc version works properly. */
4047}']
4048
Bram Moolenaar446cb832008-06-24 21:56:24 +00004049AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4050 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004051 AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog]])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004052 [
4053 vim_cv_memmove_handles_overlap=yes
4054 ],[
4055 vim_cv_memmove_handles_overlap=no
4056 ],[
4057 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4058 ])
4059 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004060
Bram Moolenaar446cb832008-06-24 21:56:24 +00004061if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4062 AC_DEFINE(USEMEMMOVE)
4063else
4064 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4065 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004066 AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_bcopy(s,d,l) bcopy(d,s,l) $bcopy_test_prog]])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004067 [
4068 vim_cv_bcopy_handles_overlap=yes
4069 ],[
4070 vim_cv_bcopy_handles_overlap=no
4071 ],[
4072 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4073 ])
4074 ])
4075
4076 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4077 AC_DEFINE(USEBCOPY)
4078 else
4079 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4080 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004081 AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memcpy(s,d,l) memcpy(d,s,l) $bcopy_test_prog]])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004082 [
4083 vim_cv_memcpy_handles_overlap=yes
4084 ],[
4085 vim_cv_memcpy_handles_overlap=no
4086 ],[
4087 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4088 ])
4089 ])
4090
4091 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4092 AC_DEFINE(USEMEMCPY)
4093 fi
4094 fi
4095fi
4096
Bram Moolenaar071d4272004-06-13 20:20:40 +00004097
4098dnl Check for multibyte locale functions
4099dnl Find out if _Xsetlocale() is supported by libX11.
4100dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004101if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004102 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004103 libs_save=$LIBS
4104 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4105 CFLAGS="$CFLAGS $X_CFLAGS"
4106
4107 AC_MSG_CHECKING(whether X_LOCALE needed)
4108 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4109 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4110 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4111 AC_MSG_RESULT(no))
4112
4113 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4114 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4115 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4116
Bram Moolenaar071d4272004-06-13 20:20:40 +00004117 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004118 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004119fi
4120
4121dnl Link with xpg4, it is said to make Korean locale working
4122AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4123
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004124dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004125dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004126dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004127dnl -t for typedefs (many ctags have this)
4128dnl -s for static functions (Elvis ctags only?)
4129dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4130dnl -i+m to test for older Exuberant ctags
4131AC_MSG_CHECKING(how to create tags)
4132test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004133if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004134 TAGPRG="ctags -I INIT+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004135elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4136 TAGPRG="exctags -I INIT+ --fields=+S"
4137elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4138 TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004139else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004140 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004141 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4142 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4143 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4144 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4145 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4146 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4147 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4148fi
4149test -f tags.save && mv tags.save tags
4150AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4151
4152dnl Check how we can run man with a section number
4153AC_MSG_CHECKING(how to run man with a section nr)
4154MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004155(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AC_FD_CC && MANDEF="man -s"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004156AC_MSG_RESULT($MANDEF)
4157if test "$MANDEF" = "man -s"; then
4158 AC_DEFINE(USEMAN_S)
4159fi
4160
4161dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004162dnl We take care to base this on an empty LIBS: on some systems libelf would be
4163dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4164dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004165AC_MSG_CHECKING(--disable-nls argument)
4166AC_ARG_ENABLE(nls,
4167 [ --disable-nls Don't support NLS (gettext()).], ,
4168 [enable_nls="yes"])
4169
4170if test "$enable_nls" = "yes"; then
4171 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004172
4173 INSTALL_LANGS=install-languages
4174 AC_SUBST(INSTALL_LANGS)
4175 INSTALL_TOOL_LANGS=install-tool-languages
4176 AC_SUBST(INSTALL_TOOL_LANGS)
4177
Bram Moolenaar071d4272004-06-13 20:20:40 +00004178 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4179 AC_MSG_CHECKING([for NLS])
4180 if test -f po/Makefile; then
4181 have_gettext="no"
4182 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004183 olibs=$LIBS
4184 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004185 AC_TRY_LINK(
4186 [#include <libintl.h>],
4187 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004188 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4189 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004190 AC_TRY_LINK(
4191 [#include <libintl.h>],
4192 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004193 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4194 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004195 AC_MSG_RESULT([gettext() doesn't work]);
4196 LIBS=$olibs))
4197 else
4198 AC_MSG_RESULT([msgfmt not found - disabled]);
4199 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004200 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004201 AC_DEFINE(HAVE_GETTEXT)
4202 MAKEMO=yes
4203 AC_SUBST(MAKEMO)
4204 dnl this was added in GNU gettext 0.10.36
4205 AC_CHECK_FUNCS(bind_textdomain_codeset)
4206 dnl _nl_msg_cat_cntr is required for GNU gettext
4207 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4208 AC_TRY_LINK(
4209 [#include <libintl.h>
4210 extern int _nl_msg_cat_cntr;],
4211 [++_nl_msg_cat_cntr;],
4212 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4213 AC_MSG_RESULT([no]))
4214 fi
4215 else
4216 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4217 fi
4218else
4219 AC_MSG_RESULT(yes)
4220fi
4221
4222dnl Check for dynamic linking loader
4223AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4224if test x${DLL} = xdlfcn.h; then
4225 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4226 AC_MSG_CHECKING([for dlopen()])
4227 AC_TRY_LINK(,[
4228 extern void* dlopen();
4229 dlopen();
4230 ],
4231 AC_MSG_RESULT(yes);
4232 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4233 AC_MSG_RESULT(no);
4234 AC_MSG_CHECKING([for dlopen() in -ldl])
4235 olibs=$LIBS
4236 LIBS="$LIBS -ldl"
4237 AC_TRY_LINK(,[
4238 extern void* dlopen();
4239 dlopen();
4240 ],
4241 AC_MSG_RESULT(yes);
4242 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4243 AC_MSG_RESULT(no);
4244 LIBS=$olibs))
4245 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4246 dnl ick :-)
4247 AC_MSG_CHECKING([for dlsym()])
4248 AC_TRY_LINK(,[
4249 extern void* dlsym();
4250 dlsym();
4251 ],
4252 AC_MSG_RESULT(yes);
4253 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4254 AC_MSG_RESULT(no);
4255 AC_MSG_CHECKING([for dlsym() in -ldl])
4256 olibs=$LIBS
4257 LIBS="$LIBS -ldl"
4258 AC_TRY_LINK(,[
4259 extern void* dlsym();
4260 dlsym();
4261 ],
4262 AC_MSG_RESULT(yes);
4263 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4264 AC_MSG_RESULT(no);
4265 LIBS=$olibs))
4266elif test x${DLL} = xdl.h; then
4267 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4268 AC_MSG_CHECKING([for shl_load()])
4269 AC_TRY_LINK(,[
4270 extern void* shl_load();
4271 shl_load();
4272 ],
4273 AC_MSG_RESULT(yes);
4274 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4275 AC_MSG_RESULT(no);
4276 AC_MSG_CHECKING([for shl_load() in -ldld])
4277 olibs=$LIBS
4278 LIBS="$LIBS -ldld"
4279 AC_TRY_LINK(,[
4280 extern void* shl_load();
4281 shl_load();
4282 ],
4283 AC_MSG_RESULT(yes);
4284 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4285 AC_MSG_RESULT(no);
4286 LIBS=$olibs))
4287fi
4288AC_CHECK_HEADERS(setjmp.h)
4289
Bram Moolenaard0573012017-10-28 21:11:06 +02004290if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004291 dnl -ldl must come after DynaLoader.a
4292 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4293 LIBS=`echo $LIBS | sed s/-ldl//`
4294 PERL_LIBS="$PERL_LIBS -ldl"
4295 fi
4296fi
4297
Bram Moolenaard0573012017-10-28 21:11:06 +02004298if test "$MACOS_X" = "yes"; then
4299 AC_MSG_CHECKING([whether we need macOS frameworks])
4300 if test "$GUITYPE" = "CARBONGUI"; then
4301 AC_MSG_RESULT([yes, we need Carbon])
4302 LIBS="$LIBS -framework Carbon"
4303 elif test "$MACOS_X_DARWIN" = "yes"; then
4304 if test "$features" = "tiny"; then
4305 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4306 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4307 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4308 if test "$enable_multibyte" = "yes"; then
4309 AC_MSG_RESULT([yes, we need CoreServices])
4310 LIBS="$LIBS -framework CoreServices"
4311 else
4312 dnl Since no FEAT_MBYTE, no longer need for os_mac_conv.c.
4313 AC_MSG_RESULT([no])
4314 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_mac_conv.c++'`
4315 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_mac_conv.o++'`
4316 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's+-DMACOS_X_DARWIN++'`
4317 fi
4318 else
4319 AC_MSG_RESULT([yes, we need AppKit])
4320 LIBS="$LIBS -framework AppKit"
4321 if test "$features" = "small" -a "$enable_multibyte" = "no"; then
4322 dnl Since FEAT_CLIPBOARD is to be defined in vim.h for FEAT_SMALL, define
4323 dnl FEAT_MBYTE in order not to compromise the interoperability of the
4324 dnl clipboard.
4325 AC_MSG_NOTICE([+multi_byte will be set in favor of +clipboard])
4326 enable_multibyte=yes
4327 AC_DEFINE(FEAT_MBYTE)
4328 fi
4329 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004330 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004331 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004332 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004333fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004334if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004335 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004336fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004337
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004338dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4339dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4340dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004341dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4342dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004343DEPEND_CFLAGS_FILTER=
4344if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004345 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar2217cae2006-03-25 21:55:52 +00004346 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004347 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004348 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004349 AC_MSG_RESULT(yes)
4350 else
4351 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004352 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004353 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4354 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004355 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004356 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004357 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4358 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004359 CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004360 AC_MSG_RESULT(yes)
4361 else
4362 AC_MSG_RESULT(no)
4363 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004364fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004365AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004366
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004367dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4368dnl isn't required, but the CFLAGS for some of the libraries we're using
4369dnl include the define. Since the define changes the size of some datatypes
4370dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4371dnl consistent value. It's therefore safest to force the use of the define
4372dnl if it's present in any of the *_CFLAGS variables.
4373AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004374if echo "$CFLAGS $LUA_CFLAGS $MZSCHEME_CFLAGS $PERL_CFLAGS $PYTHON_CFLAGS $PYTHON3_CFLAGS $TCL_CFLAGS $RUBY_CFLAGS $GTK_CFLAGS" | grep -q D_FILE_OFFSET_BITS 2>/dev/null; then
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004375 AC_MSG_RESULT(yes)
4376 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4377else
4378 AC_MSG_RESULT(no)
4379fi
4380
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004381dnl link.sh tries to avoid overlinking in a hackish way.
4382dnl At least GNU ld supports --as-needed which provides the same functionality
4383dnl at linker level. Let's use it.
4384AC_MSG_CHECKING(linker --as-needed support)
4385LINK_AS_NEEDED=
4386# Check if linker supports --as-needed and --no-as-needed options
4387if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004388 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004389 LINK_AS_NEEDED=yes
4390fi
4391if test "$LINK_AS_NEEDED" = yes; then
4392 AC_MSG_RESULT(yes)
4393else
4394 AC_MSG_RESULT(no)
4395fi
4396AC_SUBST(LINK_AS_NEEDED)
4397
Bram Moolenaar77c19352012-06-13 19:19:41 +02004398# IBM z/OS reset CFLAGS for config.mk
4399if test "$zOSUnix" = "yes"; then
4400 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4401fi
4402
Bram Moolenaar071d4272004-06-13 20:20:40 +00004403dnl write output files
4404AC_OUTPUT(auto/config.mk:config.mk.in)
4405
4406dnl vim: set sw=2 tw=78 fo+=l: