blob: e37a26790f788a81143c6d1ade473a7b0bed8ab9 [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 Moolenaare1a32312018-04-15 16:03:25 +02001120 AC_MSG_CHECKING(--with-python-command argument)
1121 AC_SUBST(vi_cv_path_python)
1122 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1123 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1124 AC_MSG_RESULT(no))
1125
1126 if test "X$vi_cv_path_python" = "X"; then
1127 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1128 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001129 if test "X$vi_cv_path_python" != "X"; then
1130
1131 dnl -- get its version number
1132 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1133 [[vi_cv_var_python_version=`
1134 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1135 ]])
1136
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001137 dnl -- it must be at least version 2.3
1138 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001140 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001141 then
1142 AC_MSG_RESULT(yep)
1143
1144 dnl -- find where python thinks it was installed
1145 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1146 [ vi_cv_path_python_pfx=`
1147 ${vi_cv_path_python} -c \
1148 "import sys; print sys.prefix"` ])
1149
1150 dnl -- and where it thinks it runs
1151 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1152 [ vi_cv_path_python_epfx=`
1153 ${vi_cv_path_python} -c \
1154 "import sys; print sys.exec_prefix"` ])
1155
1156 dnl -- python's internal library path
1157
1158 AC_CACHE_VAL(vi_cv_path_pythonpath,
1159 [ vi_cv_path_pythonpath=`
1160 unset PYTHONPATH;
1161 ${vi_cv_path_python} -c \
1162 "import sys, string; print string.join(sys.path,':')"` ])
1163
1164 dnl -- where the Python implementation library archives are
1165
1166 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001167 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001168 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001169
1170 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1171 [
1172 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001173 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1174 if test -d "$d" && test -f "$d/config.c"; then
1175 vi_cv_path_python_conf="$d"
1176 else
1177 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1178 for subdir in lib64 lib share; do
1179 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1180 if test -d "$d" && test -f "$d/config.c"; then
1181 vi_cv_path_python_conf="$d"
1182 fi
1183 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001185 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001186 ])
1187
1188 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1189
1190 if test "X$PYTHON_CONFDIR" = "X"; then
1191 AC_MSG_RESULT([can't find it!])
1192 else
1193
1194 dnl -- we need to examine Python's config/Makefile too
1195 dnl see what the interpreter is built from
1196 AC_CACHE_VAL(vi_cv_path_python_plibs,
1197 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001198 pwd=`pwd`
1199 tmp_mkf="$pwd/config-PyMake$$"
1200 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001202 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001203 @echo "python_LIBS='$(LIBS)'"
1204 @echo "python_SYSLIBS='$(SYSLIBS)'"
1205 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001206 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001207 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001208 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1209 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1210 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001211eof
1212 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001213 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1214 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001215 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1217 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001218 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1219 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1220 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001221 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001222 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001223 dnl -- Check if the path contained in python_LINKFORSHARED is
1224 dnl usable for vim build. If not, make and try other
1225 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001226 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001227 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1228 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1229 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1230 dnl -- The path looks relative. Guess the absolute one using
1231 dnl the prefix and try that.
1232 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1233 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1234 dnl -- A last resort.
1235 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1236 dnl -- No check is done. The last word is left to the
1237 dnl "sanity" test on link flags that follows shortly.
1238 fi
1239 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1240 fi
1241 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001242 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 +00001243 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1244 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1245 fi
1246 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001247 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001248 [
1249 if test "X$python_DLLLIBRARY" != "X"; then
1250 vi_cv_dll_name_python="$python_DLLLIBRARY"
1251 else
1252 vi_cv_dll_name_python="$python_INSTSONAME"
1253 fi
1254 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255
1256 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1257 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001258 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001259 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001260 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 +00001261 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001262 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001263 dnl Define PYTHON_HOME if --with-python-config-dir was used
1264 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1265
1266 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001267 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001268 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001269
1270 dnl On FreeBSD linking with "-pthread" is required to use threads.
1271 dnl _THREAD_SAFE must be used for compiling then.
1272 dnl The "-pthread" is added to $LIBS, so that the following check for
1273 dnl sigaltstack() will look in libc_r (it's there in libc!).
1274 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1275 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1276 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1277 AC_MSG_CHECKING([if -pthread should be used])
1278 threadsafe_flag=
1279 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001280 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001281 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282 test "$GCC" = yes && threadsafe_flag="-pthread"
1283 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1284 threadsafe_flag="-D_THREAD_SAFE"
1285 thread_lib="-pthread"
1286 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001287 if test "`(uname) 2>/dev/null`" = SunOS; then
1288 threadsafe_flag="-pthreads"
1289 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001290 fi
1291 libs_save_old=$LIBS
1292 if test -n "$threadsafe_flag"; then
1293 cflags_save=$CFLAGS
1294 CFLAGS="$CFLAGS $threadsafe_flag"
1295 LIBS="$LIBS $thread_lib"
1296 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001297 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001298 AC_MSG_RESULT(no); LIBS=$libs_save_old
1299 )
1300 CFLAGS=$cflags_save
1301 else
1302 AC_MSG_RESULT(no)
1303 fi
1304
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001305 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001306 dnl added for Python.
1307 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1308 cflags_save=$CFLAGS
1309 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001310 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311 LIBS="$LIBS $PYTHON_LIBS"
1312 AC_TRY_LINK(,[ ],
1313 AC_MSG_RESULT(yes); python_ok=yes,
1314 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1315 CFLAGS=$cflags_save
1316 LIBS=$libs_save
1317 if test $python_ok = yes; then
1318 AC_DEFINE(FEAT_PYTHON)
1319 else
1320 LIBS=$libs_save_old
1321 PYTHON_SRC=
1322 PYTHON_OBJ=
1323 PYTHON_LIBS=
1324 PYTHON_CFLAGS=
1325 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326 fi
1327 else
1328 AC_MSG_RESULT(too old)
1329 fi
1330 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001331
1332 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1333 AC_MSG_ERROR([could not configure python])
1334 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001335fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001336
Bram Moolenaar071d4272004-06-13 20:20:40 +00001337AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338AC_SUBST(PYTHON_CFLAGS)
1339AC_SUBST(PYTHON_SRC)
1340AC_SUBST(PYTHON_OBJ)
1341
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001342
1343AC_MSG_CHECKING(--enable-python3interp argument)
1344AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001345 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001346 [enable_python3interp="no"])
1347AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001348if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001349 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1350 AC_MSG_ERROR([cannot use Python with tiny or small features])
1351 fi
1352
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001353 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001354 AC_MSG_CHECKING(--with-python3-command argument)
1355 AC_SUBST(vi_cv_path_python3)
1356 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1357 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1358 AC_MSG_RESULT(no))
1359
1360 if test "X$vi_cv_path_python3" = "X"; then
1361 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1362 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001363 if test "X$vi_cv_path_python3" != "X"; then
1364
1365 dnl -- get its version number
1366 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1367 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001368 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001369 ]])
1370
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001371 dnl -- it must be at least version 3
1372 AC_MSG_CHECKING(Python is 3.0 or better)
1373 if ${vi_cv_path_python3} -c \
1374 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1375 then
1376 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001377
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001378 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1379 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001380 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001381 vi_cv_var_python3_abiflags=
1382 if ${vi_cv_path_python3} -c \
1383 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1384 then
1385 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1386 "import sys; print(sys.abiflags)"`
1387 fi ])
1388
1389 dnl -- find where python3 thinks it was installed
1390 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1391 [ vi_cv_path_python3_pfx=`
1392 ${vi_cv_path_python3} -c \
1393 "import sys; print(sys.prefix)"` ])
1394
1395 dnl -- and where it thinks it runs
1396 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1397 [ vi_cv_path_python3_epfx=`
1398 ${vi_cv_path_python3} -c \
1399 "import sys; print(sys.exec_prefix)"` ])
1400
1401 dnl -- python3's internal library path
1402
1403 AC_CACHE_VAL(vi_cv_path_python3path,
1404 [ vi_cv_path_python3path=`
1405 unset PYTHONPATH;
1406 ${vi_cv_path_python3} -c \
1407 "import sys, string; print(':'.join(sys.path))"` ])
1408
1409 dnl -- where the Python implementation library archives are
1410
1411 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001412 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001413 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001414
1415 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1416 [
1417 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001418 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001419 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1420 if test -d "$d" && test -f "$d/config.c"; then
1421 vi_cv_path_python3_conf="$d"
1422 else
1423 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1424 for subdir in lib64 lib share; do
1425 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1426 if test -d "$d" && test -f "$d/config.c"; then
1427 vi_cv_path_python3_conf="$d"
1428 fi
1429 done
1430 done
1431 fi
1432 ])
1433
1434 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1435
1436 if test "X$PYTHON3_CONFDIR" = "X"; then
1437 AC_MSG_RESULT([can't find it!])
1438 else
1439
1440 dnl -- we need to examine Python's config/Makefile too
1441 dnl see what the interpreter is built from
1442 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1443 [
1444 pwd=`pwd`
1445 tmp_mkf="$pwd/config-PyMake$$"
1446 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001447__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001448 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001449 @echo "python3_LIBS='$(LIBS)'"
1450 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001451 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001452 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001453eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001454 dnl -- delete the lines from make about Entering/Leaving directory
1455 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1456 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001457 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 +02001458 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1459 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1460 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1461 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1462 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001463 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001464 [
1465 if test "X$python3_DLLLIBRARY" != "X"; then
1466 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1467 else
1468 vi_cv_dll_name_python3="$python3_INSTSONAME"
1469 fi
1470 ])
1471
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001472 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1473 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001474 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 +02001475 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001476 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 +02001477 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001478 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001479 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1480 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1481 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001482 PYTHON3_SRC="if_python3.c"
1483 PYTHON3_OBJ="objects/if_python3.o"
1484
1485 dnl On FreeBSD linking with "-pthread" is required to use threads.
1486 dnl _THREAD_SAFE must be used for compiling then.
1487 dnl The "-pthread" is added to $LIBS, so that the following check for
1488 dnl sigaltstack() will look in libc_r (it's there in libc!).
1489 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1490 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1491 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1492 AC_MSG_CHECKING([if -pthread should be used])
1493 threadsafe_flag=
1494 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001495 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001496 if test "`(uname) 2>/dev/null`" != Darwin; then
1497 test "$GCC" = yes && threadsafe_flag="-pthread"
1498 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1499 threadsafe_flag="-D_THREAD_SAFE"
1500 thread_lib="-pthread"
1501 fi
1502 if test "`(uname) 2>/dev/null`" = SunOS; then
1503 threadsafe_flag="-pthreads"
1504 fi
1505 fi
1506 libs_save_old=$LIBS
1507 if test -n "$threadsafe_flag"; then
1508 cflags_save=$CFLAGS
1509 CFLAGS="$CFLAGS $threadsafe_flag"
1510 LIBS="$LIBS $thread_lib"
1511 AC_TRY_LINK(,[ ],
1512 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1513 AC_MSG_RESULT(no); LIBS=$libs_save_old
1514 )
1515 CFLAGS=$cflags_save
1516 else
1517 AC_MSG_RESULT(no)
1518 fi
1519
1520 dnl check that compiling a simple program still works with the flags
1521 dnl added for Python.
1522 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1523 cflags_save=$CFLAGS
1524 libs_save=$LIBS
1525 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1526 LIBS="$LIBS $PYTHON3_LIBS"
1527 AC_TRY_LINK(,[ ],
1528 AC_MSG_RESULT(yes); python3_ok=yes,
1529 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1530 CFLAGS=$cflags_save
1531 LIBS=$libs_save
1532 if test "$python3_ok" = yes; then
1533 AC_DEFINE(FEAT_PYTHON3)
1534 else
1535 LIBS=$libs_save_old
1536 PYTHON3_SRC=
1537 PYTHON3_OBJ=
1538 PYTHON3_LIBS=
1539 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001540 fi
1541 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001542 else
1543 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001544 fi
1545 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001546 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1547 AC_MSG_ERROR([could not configure python3])
1548 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001549fi
1550
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001551AC_SUBST(PYTHON3_LIBS)
1552AC_SUBST(PYTHON3_CFLAGS)
1553AC_SUBST(PYTHON3_SRC)
1554AC_SUBST(PYTHON3_OBJ)
1555
1556dnl if python2.x and python3.x are enabled one can only link in code
1557dnl with dlopen(), dlsym(), dlclose()
1558if test "$python_ok" = yes && test "$python3_ok" = yes; then
1559 AC_DEFINE(DYNAMIC_PYTHON)
1560 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001561 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001562 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001563 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001564 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001565 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001566 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001567 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001568 #include <dlfcn.h>
1569 /* If this program fails, then RTLD_GLOBAL is needed.
1570 * RTLD_GLOBAL will be used and then it is not possible to
1571 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001572 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001573 */
1574
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001575 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001576 {
1577 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001578 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001579 if (pylib != 0)
1580 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001581 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001582 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1583 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1584 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001585 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001586 (*init)();
1587 needed = (*simple)("import termios") == -1;
1588 (*final)();
1589 dlclose(pylib);
1590 }
1591 return !needed;
1592 }
1593
1594 int main(int argc, char** argv)
1595 {
1596 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001597 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001598 not_needed = 1;
1599 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001600 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001601 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001602
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001603 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001604 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001605
1606 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1607 cflags_save=$CFLAGS
1608 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001609 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001610 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001611 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001612 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001613 #include <dlfcn.h>
1614 #include <wchar.h>
1615 /* If this program fails, then RTLD_GLOBAL is needed.
1616 * RTLD_GLOBAL will be used and then it is not possible to
1617 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001618 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001619 */
1620
1621 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1622 {
1623 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001624 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001625 if (pylib != 0)
1626 {
1627 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1628 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1629 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1630 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1631 (*pfx)(prefix);
1632 (*init)();
1633 needed = (*simple)("import termios") == -1;
1634 (*final)();
1635 dlclose(pylib);
1636 }
1637 return !needed;
1638 }
1639
1640 int main(int argc, char** argv)
1641 {
1642 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001643 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001644 not_needed = 1;
1645 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001646 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001647 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1648
1649 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001650 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001651
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001652 PYTHON_SRC="if_python.c"
1653 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001654 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001655 PYTHON_LIBS=
1656 PYTHON3_SRC="if_python3.c"
1657 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001658 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001659 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001660elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1661 AC_DEFINE(DYNAMIC_PYTHON)
1662 PYTHON_SRC="if_python.c"
1663 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001664 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001665 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001666elif test "$python_ok" = yes; then
1667 dnl Check that adding -fPIE works. It may be needed when using a static
1668 dnl Python library.
1669 AC_MSG_CHECKING([if -fPIE can be added for Python])
1670 cflags_save=$CFLAGS
1671 libs_save=$LIBS
1672 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1673 LIBS="$LIBS $PYTHON_LIBS"
1674 AC_TRY_LINK(,[ ],
1675 AC_MSG_RESULT(yes); fpie_ok=yes,
1676 AC_MSG_RESULT(no); fpie_ok=no)
1677 CFLAGS=$cflags_save
1678 LIBS=$libs_save
1679 if test $fpie_ok = yes; then
1680 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1681 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001682elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1683 AC_DEFINE(DYNAMIC_PYTHON3)
1684 PYTHON3_SRC="if_python3.c"
1685 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001686 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001687 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001688elif test "$python3_ok" = yes; then
1689 dnl Check that adding -fPIE works. It may be needed when using a static
1690 dnl Python library.
1691 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1692 cflags_save=$CFLAGS
1693 libs_save=$LIBS
1694 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1695 LIBS="$LIBS $PYTHON3_LIBS"
1696 AC_TRY_LINK(,[ ],
1697 AC_MSG_RESULT(yes); fpie_ok=yes,
1698 AC_MSG_RESULT(no); fpie_ok=no)
1699 CFLAGS=$cflags_save
1700 LIBS=$libs_save
1701 if test $fpie_ok = yes; then
1702 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1703 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001704fi
1705
Bram Moolenaar071d4272004-06-13 20:20:40 +00001706AC_MSG_CHECKING(--enable-tclinterp argument)
1707AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001708 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001709 [enable_tclinterp="no"])
1710AC_MSG_RESULT($enable_tclinterp)
1711
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001712if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001713
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001714 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001715 AC_MSG_CHECKING(--with-tclsh argument)
1716 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1717 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001718 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001719 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1720 AC_SUBST(vi_cv_path_tcl)
1721
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001722 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1723 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1724 tclsh_name="tclsh8.4"
1725 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1726 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001727 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001728 tclsh_name="tclsh8.2"
1729 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1730 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001731 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1732 tclsh_name="tclsh8.0"
1733 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1734 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001735 dnl still didn't find it, try without version number
1736 if test "X$vi_cv_path_tcl" = "X"; then
1737 tclsh_name="tclsh"
1738 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1739 fi
1740 if test "X$vi_cv_path_tcl" != "X"; then
1741 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001742 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001743 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1744 AC_MSG_RESULT($tclver - OK);
1745 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 +01001746 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001747
1748 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001749 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001750 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 +00001751 else
1752 dnl For Mac OS X 10.3, use the OS-provided framework location
1753 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1754 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001755 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001756 for try in $tclinc; do
1757 if test -f "$try/tcl.h"; then
1758 AC_MSG_RESULT($try/tcl.h)
1759 TCL_INC=$try
1760 break
1761 fi
1762 done
1763 if test -z "$TCL_INC"; then
1764 AC_MSG_RESULT(<not found>)
1765 SKIP_TCL=YES
1766 fi
1767 if test -z "$SKIP_TCL"; then
1768 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001769 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001770 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001771 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001772 else
1773 dnl For Mac OS X 10.3, use the OS-provided framework location
1774 tclcnf="/System/Library/Frameworks/Tcl.framework"
1775 fi
1776 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001777 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001778 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001779 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001781 if test "$enable_tclinterp" = "dynamic"; then
1782 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1783 else
1784 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1785 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001786 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001787 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001788 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 +00001789 break
1790 fi
1791 done
1792 if test -z "$TCL_LIBS"; then
1793 AC_MSG_RESULT(<not found>)
1794 AC_MSG_CHECKING(for Tcl library by myself)
1795 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001796 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001797 for ext in .so .a ; do
1798 for ver in "" $tclver ; do
1799 for try in $tcllib ; do
1800 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001801 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001802 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001803 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001804 if test "`(uname) 2>/dev/null`" = SunOS &&
1805 uname -r | grep '^5' >/dev/null; then
1806 TCL_LIBS="$TCL_LIBS -R $try"
1807 fi
1808 break 3
1809 fi
1810 done
1811 done
1812 done
1813 if test -z "$TCL_LIBS"; then
1814 AC_MSG_RESULT(<not found>)
1815 SKIP_TCL=YES
1816 fi
1817 fi
1818 if test -z "$SKIP_TCL"; then
1819 AC_DEFINE(FEAT_TCL)
1820 TCL_SRC=if_tcl.c
1821 TCL_OBJ=objects/if_tcl.o
1822 TCL_PRO=if_tcl.pro
1823 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1824 fi
1825 fi
1826 else
1827 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1828 fi
1829 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001830 if test "$enable_tclinterp" = "dynamic"; then
1831 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1832 AC_DEFINE(DYNAMIC_TCL)
1833 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1834 fi
1835 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001836 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1837 AC_MSG_ERROR([could not configure Tcl])
1838 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001839fi
1840AC_SUBST(TCL_SRC)
1841AC_SUBST(TCL_OBJ)
1842AC_SUBST(TCL_PRO)
1843AC_SUBST(TCL_CFLAGS)
1844AC_SUBST(TCL_LIBS)
1845
1846AC_MSG_CHECKING(--enable-rubyinterp argument)
1847AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001848 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 [enable_rubyinterp="no"])
1850AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001851if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001852 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1853 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1854 fi
1855
Bram Moolenaar165641d2010-02-17 16:23:09 +01001856 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001857 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001858 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1859 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1860 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001861 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001862 if test "X$vi_cv_path_ruby" != "X"; then
1863 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001864 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 +00001865 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001866 AC_MSG_CHECKING(Ruby rbconfig)
1867 ruby_rbconfig="RbConfig"
1868 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1869 ruby_rbconfig="Config"
1870 fi
1871 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001872 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001873 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 +00001874 if test "X$rubyhdrdir" != "X"; then
1875 AC_MSG_RESULT($rubyhdrdir)
1876 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001877 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1878 if test -d "$rubyarchdir"; then
1879 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001880 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001881 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001882 if test "X$rubyversion" = "X"; then
1883 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1884 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001885 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001886 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001887 if test "X$rubylibs" != "X"; then
1888 RUBY_LIBS="$rubylibs"
1889 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001890 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1891 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001892 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001893 if test -f "$rubylibdir/$librubya"; then
1894 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001895 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1896 elif test "$librubyarg" = "libruby.a"; then
1897 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1898 librubyarg="-lruby"
1899 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001900 fi
1901
1902 if test "X$librubyarg" != "X"; then
1903 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1904 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001905 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001906 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001907 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1908 dnl be included if requested by passing --with-mac-arch to
1909 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001910 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001911 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001912 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001913 LDFLAGS="$rubyldflags $LDFLAGS"
1914 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001915 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001916 fi
1917 RUBY_SRC="if_ruby.c"
1918 RUBY_OBJ="objects/if_ruby.o"
1919 RUBY_PRO="if_ruby.pro"
1920 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001921 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02001922 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001923 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar92021622017-10-12 12:33:43 +02001924 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001925 RUBY_LIBS=
1926 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001927 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01001928 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001929 fi
1930 else
1931 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1932 fi
1933 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001934
1935 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1936 AC_MSG_ERROR([could not configure Ruby])
1937 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001938fi
1939AC_SUBST(RUBY_SRC)
1940AC_SUBST(RUBY_OBJ)
1941AC_SUBST(RUBY_PRO)
1942AC_SUBST(RUBY_CFLAGS)
1943AC_SUBST(RUBY_LIBS)
1944
1945AC_MSG_CHECKING(--enable-cscope argument)
1946AC_ARG_ENABLE(cscope,
1947 [ --enable-cscope Include cscope interface.], ,
1948 [enable_cscope="no"])
1949AC_MSG_RESULT($enable_cscope)
1950if test "$enable_cscope" = "yes"; then
1951 AC_DEFINE(FEAT_CSCOPE)
1952fi
1953
1954AC_MSG_CHECKING(--enable-workshop argument)
1955AC_ARG_ENABLE(workshop,
1956 [ --enable-workshop Include Sun Visual Workshop support.], ,
1957 [enable_workshop="no"])
1958AC_MSG_RESULT($enable_workshop)
1959if test "$enable_workshop" = "yes"; then
1960 AC_DEFINE(FEAT_SUN_WORKSHOP)
1961 WORKSHOP_SRC="workshop.c integration.c"
1962 AC_SUBST(WORKSHOP_SRC)
1963 WORKSHOP_OBJ="objects/workshop.o objects/integration.o"
1964 AC_SUBST(WORKSHOP_OBJ)
1965 if test "${enable_gui-xxx}" = xxx; then
1966 enable_gui=motif
1967 fi
1968fi
1969
1970AC_MSG_CHECKING(--disable-netbeans argument)
1971AC_ARG_ENABLE(netbeans,
1972 [ --disable-netbeans Disable NetBeans integration support.],
1973 , [enable_netbeans="yes"])
1974if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001975 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1976 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
1977 enable_netbeans="no"
1978 else
1979 AC_MSG_RESULT(no)
1980 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01001981else
1982 AC_MSG_RESULT(yes)
1983fi
1984
1985AC_MSG_CHECKING(--disable-channel argument)
1986AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001987 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01001988 , [enable_channel="yes"])
1989if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001990 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1991 AC_MSG_RESULT([cannot use channels with tiny or small features])
1992 enable_channel="no"
1993 else
1994 AC_MSG_RESULT(no)
1995 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01001996else
1997 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01001998 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01001999 enable_netbeans="no"
2000 else
2001 AC_MSG_RESULT(yes)
2002 fi
2003fi
2004
Bram Moolenaar16435482016-01-24 21:31:54 +01002005if test "$enable_channel" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002006 dnl On Solaris we need the socket and nsl library.
2007 AC_CHECK_LIB(socket, socket)
2008 AC_CHECK_LIB(nsl, gethostbyname)
Bram Moolenaare0874f82016-01-24 20:36:41 +01002009 AC_MSG_CHECKING(whether compiling with process communication is possible)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002010 AC_TRY_LINK([
2011#include <stdio.h>
2012#include <stdlib.h>
2013#include <stdarg.h>
2014#include <fcntl.h>
2015#include <netdb.h>
2016#include <netinet/in.h>
2017#include <errno.h>
2018#include <sys/types.h>
2019#include <sys/socket.h>
2020 /* Check bitfields */
2021 struct nbbuf {
2022 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002023 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002024 };
2025 ], [
2026 /* Check creating a socket. */
2027 struct sockaddr_in server;
2028 (void)socket(AF_INET, SOCK_STREAM, 0);
2029 (void)htons(100);
2030 (void)gethostbyname("microsoft.com");
2031 if (errno == ECONNREFUSED)
2032 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2033 ],
2034 AC_MSG_RESULT(yes),
Bram Moolenaare0874f82016-01-24 20:36:41 +01002035 AC_MSG_RESULT(no); enable_netbeans="no"; enable_channel="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002036fi
2037if test "$enable_netbeans" = "yes"; then
2038 AC_DEFINE(FEAT_NETBEANS_INTG)
2039 NETBEANS_SRC="netbeans.c"
2040 AC_SUBST(NETBEANS_SRC)
2041 NETBEANS_OBJ="objects/netbeans.o"
2042 AC_SUBST(NETBEANS_OBJ)
2043fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002044if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002045 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaare0874f82016-01-24 20:36:41 +01002046 CHANNEL_SRC="channel.c"
2047 AC_SUBST(CHANNEL_SRC)
2048 CHANNEL_OBJ="objects/channel.o"
2049 AC_SUBST(CHANNEL_OBJ)
2050fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002051
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002052AC_MSG_CHECKING(--enable-terminal argument)
2053AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002054 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002055 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002056if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002057 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2058 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2059 enable_terminal="no"
2060 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002061 if test "$enable_terminal" = "auto"; then
2062 enable_terminal="yes"
2063 AC_MSG_RESULT(defaulting to yes)
2064 else
2065 AC_MSG_RESULT(yes)
2066 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002067 fi
2068else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002069 if test "$enable_terminal" = "auto"; then
2070 enable_terminal="no"
2071 AC_MSG_RESULT(defaulting to no)
2072 else
2073 AC_MSG_RESULT(no)
2074 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002075fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002076if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002077 AC_DEFINE(FEAT_TERMINAL)
2078 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"
2079 AC_SUBST(TERM_SRC)
2080 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"
2081 AC_SUBST(TERM_OBJ)
2082fi
2083
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002084AC_MSG_CHECKING(--enable-autoservername argument)
2085AC_ARG_ENABLE(autoservername,
2086 [ --enable-autoservername Automatically define servername at vim startup.], ,
2087 [enable_autoservername="no"])
2088AC_MSG_RESULT($enable_autoservername)
2089if test "$enable_autoservername" = "yes"; then
2090 AC_DEFINE(FEAT_AUTOSERVERNAME)
2091fi
2092
Bram Moolenaar071d4272004-06-13 20:20:40 +00002093AC_MSG_CHECKING(--enable-multibyte argument)
2094AC_ARG_ENABLE(multibyte,
2095 [ --enable-multibyte Include multibyte editing support.], ,
2096 [enable_multibyte="no"])
2097AC_MSG_RESULT($enable_multibyte)
2098if test "$enable_multibyte" = "yes"; then
2099 AC_DEFINE(FEAT_MBYTE)
2100fi
2101
2102AC_MSG_CHECKING(--enable-hangulinput argument)
2103AC_ARG_ENABLE(hangulinput,
2104 [ --enable-hangulinput Include Hangul input support.], ,
2105 [enable_hangulinput="no"])
2106AC_MSG_RESULT($enable_hangulinput)
2107
2108AC_MSG_CHECKING(--enable-xim argument)
2109AC_ARG_ENABLE(xim,
2110 [ --enable-xim Include XIM input support.],
2111 AC_MSG_RESULT($enable_xim),
2112 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002113
2114AC_MSG_CHECKING(--enable-fontset argument)
2115AC_ARG_ENABLE(fontset,
2116 [ --enable-fontset Include X fontset output support.], ,
2117 [enable_fontset="no"])
2118AC_MSG_RESULT($enable_fontset)
2119dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2120
2121test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002122test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002123if test "$with_x" = no; then
2124 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2125else
2126 dnl Do this check early, so that its failure can override user requests.
2127
2128 AC_PATH_PROG(xmkmfpath, xmkmf)
2129
2130 AC_PATH_XTRA
2131
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002132 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002133 dnl be compiled with a special option.
2134 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002135 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002136 CFLAGS="$CFLAGS -W c,dll"
2137 LDFLAGS="$LDFLAGS -W l,dll"
2138 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2139 fi
2140
2141 dnl On my HPUX system the X include dir is found, but the lib dir not.
2142 dnl This is a desparate try to fix this.
2143
2144 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2145 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2146 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2147 X_LIBS="$X_LIBS -L$x_libraries"
2148 if test "`(uname) 2>/dev/null`" = SunOS &&
2149 uname -r | grep '^5' >/dev/null; then
2150 X_LIBS="$X_LIBS -R $x_libraries"
2151 fi
2152 fi
2153
2154 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2155 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2156 AC_MSG_RESULT(Corrected X includes to $x_includes)
2157 X_CFLAGS="$X_CFLAGS -I$x_includes"
2158 fi
2159
2160 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2161 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2162 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2163 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2164 dnl Same for "-R/usr/lib ".
2165 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2166
2167
2168 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002169 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2170 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002171 AC_MSG_CHECKING(if X11 header files can be found)
2172 cflags_save=$CFLAGS
2173 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002174 AC_TRY_COMPILE([#include <X11/Xlib.h>
2175#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002176 AC_MSG_RESULT(yes),
2177 AC_MSG_RESULT(no); no_x=yes)
2178 CFLAGS=$cflags_save
2179
2180 if test "${no_x-no}" = yes; then
2181 with_x=no
2182 else
2183 AC_DEFINE(HAVE_X11)
2184 X_LIB="-lXt -lX11";
2185 AC_SUBST(X_LIB)
2186
2187 ac_save_LDFLAGS="$LDFLAGS"
2188 LDFLAGS="-L$x_libraries $LDFLAGS"
2189
2190 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2191 dnl For HP-UX 10.20 it must be before -lSM -lICE
2192 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2193 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2194
2195 dnl Some systems need -lnsl -lsocket when testing for ICE.
2196 dnl The check above doesn't do this, try here (again). Also needed to get
2197 dnl them after Xdmcp. link.sh will remove them when not needed.
2198 dnl Check for other function than above to avoid the cached value
2199 AC_CHECK_LIB(ICE, IceOpenConnection,
2200 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2201
2202 dnl Check for -lXpm (needed for some versions of Motif)
2203 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2204 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2205 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2206
2207 dnl Check that the X11 header files don't use implicit declarations
2208 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2209 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002210 dnl -Werror is GCC only, others like Solaris Studio might not like it
2211 if test "$GCC" = yes; then
2212 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2213 else
2214 CFLAGS="$CFLAGS $X_CFLAGS"
2215 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002216 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2217 AC_MSG_RESULT(no),
2218 CFLAGS="$CFLAGS -Wno-implicit-int"
2219 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2220 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2221 AC_MSG_RESULT(test failed)
2222 )
2223 )
2224 CFLAGS=$cflags_save
2225
2226 LDFLAGS="$ac_save_LDFLAGS"
2227
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002228 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2229 AC_CACHE_VAL(ac_cv_small_wchar_t,
2230 [AC_TRY_RUN([
2231#include <X11/Xlib.h>
2232#if STDC_HEADERS
2233# include <stdlib.h>
2234# include <stddef.h>
2235#endif
2236 main()
2237 {
2238 if (sizeof(wchar_t) <= 2)
2239 exit(1);
2240 exit(0);
2241 }],
2242 ac_cv_small_wchar_t="no",
2243 ac_cv_small_wchar_t="yes",
2244 AC_MSG_ERROR(failed to compile test program))])
2245 AC_MSG_RESULT($ac_cv_small_wchar_t)
2246 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2247 AC_DEFINE(SMALL_WCHAR_T)
2248 fi
2249
Bram Moolenaar071d4272004-06-13 20:20:40 +00002250 fi
2251fi
2252
Bram Moolenaard0573012017-10-28 21:11:06 +02002253test "x$with_x" = xno -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002254
2255AC_MSG_CHECKING(--enable-gui argument)
2256AC_ARG_ENABLE(gui,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002257 [ --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 +00002258
2259dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2260dnl Do not use character classes for portability with old tools.
2261enable_gui_canon=`echo "_$enable_gui" | \
2262 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2263
2264dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002265SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002266SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002267SKIP_GNOME=YES
2268SKIP_MOTIF=YES
2269SKIP_ATHENA=YES
2270SKIP_NEXTAW=YES
2271SKIP_PHOTON=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002272SKIP_CARBON=YES
2273GUITYPE=NONE
2274
Bram Moolenaarb11160e2005-01-04 21:31:43 +00002275if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002276 SKIP_PHOTON=
2277 case "$enable_gui_canon" in
2278 no) AC_MSG_RESULT(no GUI support)
2279 SKIP_PHOTON=YES ;;
2280 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2281 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2282 photon) AC_MSG_RESULT(Photon GUI support) ;;
2283 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2284 SKIP_PHOTON=YES ;;
2285 esac
2286
Bram Moolenaard0573012017-10-28 21:11:06 +02002287elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002288 SKIP_CARBON=
2289 case "$enable_gui_canon" in
2290 no) AC_MSG_RESULT(no GUI support)
2291 SKIP_CARBON=YES ;;
2292 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002293 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2294 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002295 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2296 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2297 SKIP_CARBON=YES ;;
2298 esac
2299
2300else
2301
Bram Moolenaar071d4272004-06-13 20:20:40 +00002302 case "$enable_gui_canon" in
2303 no|none) AC_MSG_RESULT(no GUI support) ;;
2304 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002305 SKIP_GTK2=
2306 SKIP_GNOME=
2307 SKIP_MOTIF=
2308 SKIP_ATHENA=
2309 SKIP_NEXTAW=
2310 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002311 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002312 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002313 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2314 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002315 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002316 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2317 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002318 motif) AC_MSG_RESULT(Motif GUI support)
2319 SKIP_MOTIF=;;
2320 athena) AC_MSG_RESULT(Athena GUI support)
2321 SKIP_ATHENA=;;
2322 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2323 SKIP_NEXTAW=;;
2324 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2325 esac
2326
2327fi
2328
Bram Moolenaar071d4272004-06-13 20:20:40 +00002329if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2330 -a "$enable_gui_canon" != "gnome2"; then
2331 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2332 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002333 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002334 , enable_gtk2_check="yes")
2335 AC_MSG_RESULT($enable_gtk2_check)
2336 if test "x$enable_gtk2_check" = "xno"; then
2337 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002338 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002339 fi
2340fi
2341
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002342if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002343 AC_MSG_CHECKING(whether or not to look for GNOME)
2344 AC_ARG_ENABLE(gnome-check,
2345 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2346 , enable_gnome_check="no")
2347 AC_MSG_RESULT($enable_gnome_check)
2348 if test "x$enable_gnome_check" = "xno"; then
2349 SKIP_GNOME=YES
2350 fi
2351fi
2352
Bram Moolenaar98921892016-02-23 17:14:37 +01002353if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2354 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2355 AC_ARG_ENABLE(gtk3-check,
2356 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2357 , enable_gtk3_check="yes")
2358 AC_MSG_RESULT($enable_gtk3_check)
2359 if test "x$enable_gtk3_check" = "xno"; then
2360 SKIP_GTK3=YES
2361 fi
2362fi
2363
Bram Moolenaar071d4272004-06-13 20:20:40 +00002364if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2365 AC_MSG_CHECKING(whether or not to look for Motif)
2366 AC_ARG_ENABLE(motif-check,
2367 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2368 , enable_motif_check="yes")
2369 AC_MSG_RESULT($enable_motif_check)
2370 if test "x$enable_motif_check" = "xno"; then
2371 SKIP_MOTIF=YES
2372 fi
2373fi
2374
2375if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2376 AC_MSG_CHECKING(whether or not to look for Athena)
2377 AC_ARG_ENABLE(athena-check,
2378 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2379 , enable_athena_check="yes")
2380 AC_MSG_RESULT($enable_athena_check)
2381 if test "x$enable_athena_check" = "xno"; then
2382 SKIP_ATHENA=YES
2383 fi
2384fi
2385
2386if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2387 AC_MSG_CHECKING(whether or not to look for neXtaw)
2388 AC_ARG_ENABLE(nextaw-check,
2389 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2390 , enable_nextaw_check="yes")
2391 AC_MSG_RESULT($enable_nextaw_check);
2392 if test "x$enable_nextaw_check" = "xno"; then
2393 SKIP_NEXTAW=YES
2394 fi
2395fi
2396
2397if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2398 AC_MSG_CHECKING(whether or not to look for Carbon)
2399 AC_ARG_ENABLE(carbon-check,
2400 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2401 , enable_carbon_check="yes")
2402 AC_MSG_RESULT($enable_carbon_check);
2403 if test "x$enable_carbon_check" = "xno"; then
2404 SKIP_CARBON=YES
2405 fi
2406fi
2407
Bram Moolenaar843ee412004-06-30 16:16:41 +00002408
Bram Moolenaard0573012017-10-28 21:11:06 +02002409if test "x$MACOS_X" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002410 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002411 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002412 AC_MSG_RESULT(yes);
2413 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002414 if test "$VIMNAME" = "vim"; then
2415 VIMNAME=Vim
2416 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002417
Bram Moolenaar164fca32010-07-14 13:58:07 +02002418 if test "x$MACARCH" = "xboth"; then
2419 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2420 else
2421 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2422 fi
2423
Bram Moolenaar14716812006-05-04 21:54:08 +00002424 dnl Default install directory is not /usr/local
2425 if test x$prefix = xNONE; then
2426 prefix=/Applications
2427 fi
2428
2429 dnl Sorry for the hard coded default
2430 datadir='${prefix}/Vim.app/Contents/Resources'
2431
Bram Moolenaar071d4272004-06-13 20:20:40 +00002432 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002433 SKIP_GTK2=YES;
2434 SKIP_GNOME=YES;
2435 SKIP_MOTIF=YES;
2436 SKIP_ATHENA=YES;
2437 SKIP_NEXTAW=YES;
2438 SKIP_PHOTON=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002439 SKIP_CARBON=YES
2440fi
2441
Bram Moolenaar071d4272004-06-13 20:20:40 +00002442dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002443dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002444dnl
2445dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002446dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002447dnl
2448AC_DEFUN(AM_PATH_GTK,
2449[
2450 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2451 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002452 no_gtk=""
2453 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2454 && $PKG_CONFIG --exists gtk+-2.0; then
2455 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002456 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2457 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002458 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2459 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2460 dnl something like that.
2461 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002462 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2464 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2465 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2466 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2467 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2468 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2469 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2470 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002471 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2472 && $PKG_CONFIG --exists gtk+-3.0; then
2473 {
2474 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2475 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2476
2477 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2478 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2479 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2480 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2481 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2482 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2483 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2484 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2485 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2486 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002487 else
2488 no_gtk=yes
2489 fi
2490
2491 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2492 {
2493 ac_save_CFLAGS="$CFLAGS"
2494 ac_save_LIBS="$LIBS"
2495 CFLAGS="$CFLAGS $GTK_CFLAGS"
2496 LIBS="$LIBS $GTK_LIBS"
2497
2498 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002499 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002500 dnl
2501 rm -f conf.gtktest
2502 AC_TRY_RUN([
2503#include <gtk/gtk.h>
2504#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002505#if STDC_HEADERS
2506# include <stdlib.h>
2507# include <stddef.h>
2508#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002509
2510int
2511main ()
2512{
2513int major, minor, micro;
2514char *tmp_version;
2515
2516system ("touch conf.gtktest");
2517
2518/* HP/UX 9 (%@#!) writes to sscanf strings */
2519tmp_version = g_strdup("$min_gtk_version");
2520if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2521 printf("%s, bad version string\n", "$min_gtk_version");
2522 exit(1);
2523 }
2524
2525if ((gtk_major_version > major) ||
2526 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2527 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2528 (gtk_micro_version >= micro)))
2529{
2530 return 0;
2531}
2532return 1;
2533}
2534],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2535 CFLAGS="$ac_save_CFLAGS"
2536 LIBS="$ac_save_LIBS"
2537 }
2538 fi
2539 if test "x$no_gtk" = x ; then
2540 if test "x$enable_gtktest" = "xyes"; then
2541 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2542 else
2543 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2544 fi
2545 ifelse([$2], , :, [$2])
2546 else
2547 {
2548 AC_MSG_RESULT(no)
2549 GTK_CFLAGS=""
2550 GTK_LIBS=""
2551 ifelse([$3], , :, [$3])
2552 }
2553 fi
2554 }
2555 else
2556 GTK_CFLAGS=""
2557 GTK_LIBS=""
2558 ifelse([$3], , :, [$3])
2559 fi
2560 AC_SUBST(GTK_CFLAGS)
2561 AC_SUBST(GTK_LIBS)
2562 rm -f conf.gtktest
2563])
2564
2565dnl ---------------------------------------------------------------------------
2566dnl gnome
2567dnl ---------------------------------------------------------------------------
2568AC_DEFUN([GNOME_INIT_HOOK],
2569[
2570 AC_SUBST(GNOME_LIBS)
2571 AC_SUBST(GNOME_LIBDIR)
2572 AC_SUBST(GNOME_INCLUDEDIR)
2573
2574 AC_ARG_WITH(gnome-includes,
2575 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2576 [CFLAGS="$CFLAGS -I$withval"]
2577 )
2578
2579 AC_ARG_WITH(gnome-libs,
2580 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2581 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2582 )
2583
2584 AC_ARG_WITH(gnome,
2585 [ --with-gnome Specify prefix for GNOME files],
2586 if test x$withval = xyes; then
2587 want_gnome=yes
2588 ifelse([$1], [], :, [$1])
2589 else
2590 if test "x$withval" = xno; then
2591 want_gnome=no
2592 else
2593 want_gnome=yes
2594 LDFLAGS="$LDFLAGS -L$withval/lib"
2595 CFLAGS="$CFLAGS -I$withval/include"
2596 gnome_prefix=$withval/lib
2597 fi
2598 fi,
2599 want_gnome=yes)
2600
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002601 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002602 {
2603 AC_MSG_CHECKING(for libgnomeui-2.0)
2604 if $PKG_CONFIG --exists libgnomeui-2.0; then
2605 AC_MSG_RESULT(yes)
2606 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2607 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2608 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002609
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002610 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2611 dnl This might not be the right way but it works for me...
2612 AC_MSG_CHECKING(for FreeBSD)
2613 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2614 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002615 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002616 GNOME_LIBS="$GNOME_LIBS -pthread"
2617 else
2618 AC_MSG_RESULT(no)
2619 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002620 $1
2621 else
2622 AC_MSG_RESULT(not found)
2623 if test "x$2" = xfail; then
2624 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2625 fi
2626 fi
2627 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002628 fi
2629])
2630
2631AC_DEFUN([GNOME_INIT],[
2632 GNOME_INIT_HOOK([],fail)
2633])
2634
2635
2636dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002637dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002638dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002639if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002640
2641 AC_MSG_CHECKING(--disable-gtktest argument)
2642 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2643 , enable_gtktest=yes)
2644 if test "x$enable_gtktest" = "xyes" ; then
2645 AC_MSG_RESULT(gtk test enabled)
2646 else
2647 AC_MSG_RESULT(gtk test disabled)
2648 fi
2649
Bram Moolenaar071d4272004-06-13 20:20:40 +00002650 if test "X$PKG_CONFIG" = "X"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01002651 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002652 fi
2653
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002654 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002655 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2656 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002657 AM_PATH_GTK(2.2.0,
2658 [GUI_LIB_LOC="$GTK_LIBDIR"
2659 GTK_LIBNAME="$GTK_LIBS"
2660 GUI_INC_LOC="$GTK_CFLAGS"], )
2661 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002662 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002663 SKIP_ATHENA=YES
2664 SKIP_NEXTAW=YES
2665 SKIP_MOTIF=YES
2666 GUITYPE=GTK
2667 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002668 fi
2669 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002670 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002671 dnl
2672 dnl if GTK exists, then check for GNOME.
2673 dnl
2674 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002675 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002676 GNOME_INIT_HOOK([have_gnome=yes])
2677 if test "x$have_gnome" = xyes ; then
2678 AC_DEFINE(FEAT_GUI_GNOME)
2679 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2680 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002681 fi
2682 }
2683 fi
2684 fi
2685fi
2686
Bram Moolenaar98921892016-02-23 17:14:37 +01002687
2688dnl ---------------------------------------------------------------------------
2689dnl Check for GTK3.
2690dnl ---------------------------------------------------------------------------
2691if test -z "$SKIP_GTK3"; then
2692
2693 AC_MSG_CHECKING(--disable-gtktest argument)
2694 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2695 , enable_gtktest=yes)
2696 if test "x$enable_gtktest" = "xyes" ; then
2697 AC_MSG_RESULT(gtk test enabled)
2698 else
2699 AC_MSG_RESULT(gtk test disabled)
2700 fi
2701
2702 if test "X$PKG_CONFIG" = "X"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01002703 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
Bram Moolenaar98921892016-02-23 17:14:37 +01002704 fi
2705
2706 if test "x$PKG_CONFIG" != "xno"; then
2707 AM_PATH_GTK(3.0.0,
2708 [GUI_LIB_LOC="$GTK_LIBDIR"
2709 GTK_LIBNAME="$GTK_LIBS"
2710 GUI_INC_LOC="$GTK_CFLAGS"], )
2711 if test "x$GTK_CFLAGS" != "x"; then
2712 SKIP_GTK2=YES
2713 SKIP_GNOME=YES
2714 SKIP_ATHENA=YES
2715 SKIP_NEXTAW=YES
2716 SKIP_MOTIF=YES
2717 GUITYPE=GTK
2718 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002719 AC_DEFINE(USE_GTK3)
2720 fi
2721 fi
2722fi
2723
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002724dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002725dnl glib-compile-resources is found in PATH, use GResource.
2726if test "x$GUITYPE" = "xGTK"; then
2727 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2728 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2729 if test "x$gdk_pixbuf_version" != x ; then
2730 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2731 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2732 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002733 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002734 AC_MSG_RESULT([OK.])
2735 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2736 AC_MSG_CHECKING([glib-compile-resources])
2737 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002738 GLIB_COMPILE_RESOURCES=""
2739 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002740 else
2741 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002742 AC_DEFINE(USE_GRESOURCE)
2743 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2744 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002745 fi
2746 else
2747 AC_MSG_RESULT([not usable.])
2748 fi
2749 else
2750 AC_MSG_RESULT([cannot obtain from pkg_config.])
2751 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002752
2753 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2754 AC_ARG_ENABLE(icon_cache_update,
2755 [ --disable-icon-cache-update update disabled],
2756 [],
2757 [enable_icon_cache_update="yes"])
2758 if test "$enable_icon_cache_update" = "yes"; then
2759 AC_MSG_RESULT([not set])
2760 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2761 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2762 AC_MSG_RESULT([not found in PATH.])
2763 fi
2764 else
2765 AC_MSG_RESULT([update disabled])
2766 fi
2767
2768 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2769 AC_ARG_ENABLE(desktop_database_update,
2770 [ --disable-desktop-database-update update disabled],
2771 [],
2772 [enable_desktop_database_update="yes"])
2773 if test "$enable_desktop_database_update" = "yes"; then
2774 AC_MSG_RESULT([not set])
2775 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2776 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2777 AC_MSG_RESULT([not found in PATH.])
2778 fi
2779 else
2780 AC_MSG_RESULT([update disabled])
2781 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002782fi
2783AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002784AC_SUBST(GRESOURCE_SRC)
2785AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002786AC_SUBST(GTK_UPDATE_ICON_CACHE)
2787AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002788
Bram Moolenaar071d4272004-06-13 20:20:40 +00002789dnl Check for Motif include files location.
2790dnl The LAST one found is used, this makes the highest version to be used,
2791dnl e.g. when Motif1.2 and Motif2.0 are both present.
2792
2793if test -z "$SKIP_MOTIF"; then
2794 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"
2795 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2796 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2797
2798 AC_MSG_CHECKING(for location of Motif GUI includes)
2799 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2800 GUI_INC_LOC=
2801 for try in $gui_includes; do
2802 if test -f "$try/Xm/Xm.h"; then
2803 GUI_INC_LOC=$try
2804 fi
2805 done
2806 if test -n "$GUI_INC_LOC"; then
2807 if test "$GUI_INC_LOC" = /usr/include; then
2808 GUI_INC_LOC=
2809 AC_MSG_RESULT(in default path)
2810 else
2811 AC_MSG_RESULT($GUI_INC_LOC)
2812 fi
2813 else
2814 AC_MSG_RESULT(<not found>)
2815 SKIP_MOTIF=YES
2816 fi
2817fi
2818
2819dnl Check for Motif library files location. In the same order as the include
2820dnl files, to avoid a mixup if several versions are present
2821
2822if test -z "$SKIP_MOTIF"; then
2823 AC_MSG_CHECKING(--with-motif-lib argument)
2824 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002825 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002826 [ MOTIF_LIBNAME="${withval}" ] )
2827
2828 if test -n "$MOTIF_LIBNAME"; then
2829 AC_MSG_RESULT($MOTIF_LIBNAME)
2830 GUI_LIB_LOC=
2831 else
2832 AC_MSG_RESULT(no)
2833
2834 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2835 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2836
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002837 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2838 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002839 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002840 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 +00002841 GUI_LIB_LOC=
2842 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002843 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002844 if test -f "$libtry"; then
2845 GUI_LIB_LOC=$try
2846 fi
2847 done
2848 done
2849 if test -n "$GUI_LIB_LOC"; then
2850 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002851 if test "$GUI_LIB_LOC" = /usr/lib \
2852 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2853 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002854 GUI_LIB_LOC=
2855 AC_MSG_RESULT(in default path)
2856 else
2857 if test -n "$GUI_LIB_LOC"; then
2858 AC_MSG_RESULT($GUI_LIB_LOC)
2859 if test "`(uname) 2>/dev/null`" = SunOS &&
2860 uname -r | grep '^5' >/dev/null; then
2861 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2862 fi
2863 fi
2864 fi
2865 MOTIF_LIBNAME=-lXm
2866 else
2867 AC_MSG_RESULT(<not found>)
2868 SKIP_MOTIF=YES
2869 fi
2870 fi
2871fi
2872
2873if test -z "$SKIP_MOTIF"; then
2874 SKIP_ATHENA=YES
2875 SKIP_NEXTAW=YES
2876 GUITYPE=MOTIF
2877 AC_SUBST(MOTIF_LIBNAME)
2878fi
2879
2880dnl Check if the Athena files can be found
2881
2882GUI_X_LIBS=
2883
2884if test -z "$SKIP_ATHENA"; then
2885 AC_MSG_CHECKING(if Athena 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/Xaw/Paned.h>], ,
2891 AC_MSG_RESULT(yes),
2892 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2893 CFLAGS=$cflags_save
2894fi
2895
2896if test -z "$SKIP_ATHENA"; then
2897 GUITYPE=ATHENA
2898fi
2899
2900if test -z "$SKIP_NEXTAW"; then
2901 AC_MSG_CHECKING(if neXtaw header files can be found)
2902 cflags_save=$CFLAGS
2903 CFLAGS="$CFLAGS $X_CFLAGS"
2904 AC_TRY_COMPILE([
2905#include <X11/Intrinsic.h>
2906#include <X11/neXtaw/Paned.h>], ,
2907 AC_MSG_RESULT(yes),
2908 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2909 CFLAGS=$cflags_save
2910fi
2911
2912if test -z "$SKIP_NEXTAW"; then
2913 GUITYPE=NEXTAW
2914fi
2915
2916if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2917 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2918 dnl Avoid adding it when it twice
2919 if test -n "$GUI_INC_LOC"; then
2920 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
2921 fi
2922 if test -n "$GUI_LIB_LOC"; then
2923 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
2924 fi
2925
2926 dnl Check for -lXext and then for -lXmu
2927 ldflags_save=$LDFLAGS
2928 LDFLAGS="$X_LIBS $LDFLAGS"
2929 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
2930 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2931 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
2932 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
2933 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2934 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
2935 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2936 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
2937 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2938 if test -z "$SKIP_MOTIF"; then
2939 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
2940 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2941 fi
2942 LDFLAGS=$ldflags_save
2943
2944 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
2945 AC_MSG_CHECKING(for extra X11 defines)
2946 NARROW_PROTO=
2947 rm -fr conftestdir
2948 if mkdir conftestdir; then
2949 cd conftestdir
2950 cat > Imakefile <<'EOF'
2951acfindx:
2952 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
2953EOF
2954 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
2955 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
2956 fi
2957 cd ..
2958 rm -fr conftestdir
2959 fi
2960 if test -z "$NARROW_PROTO"; then
2961 AC_MSG_RESULT(no)
2962 else
2963 AC_MSG_RESULT($NARROW_PROTO)
2964 fi
2965 AC_SUBST(NARROW_PROTO)
2966fi
2967
2968dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
2969dnl use the X11 include path
2970if test "$enable_xsmp" = "yes"; then
2971 cppflags_save=$CPPFLAGS
2972 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2973 AC_CHECK_HEADERS(X11/SM/SMlib.h)
2974 CPPFLAGS=$cppflags_save
2975fi
2976
2977
Bram Moolenaar98921892016-02-23 17:14:37 +01002978if 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 +00002979 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
2980 cppflags_save=$CPPFLAGS
2981 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2982 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
2983
2984 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
2985 if test ! "$enable_xim" = "no"; then
2986 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
2987 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
2988 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02002989 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002990 fi
2991 CPPFLAGS=$cppflags_save
2992
2993 dnl automatically enable XIM when hangul input isn't enabled
2994 if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
2995 -a "x$GUITYPE" != "xNONE" ; then
2996 AC_MSG_RESULT(X GUI selected; xim has been enabled)
2997 enable_xim="yes"
2998 fi
2999fi
3000
3001if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3002 cppflags_save=$CPPFLAGS
3003 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003004dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3005 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3006 AC_TRY_COMPILE([
3007#include <X11/Intrinsic.h>
3008#include <X11/Xmu/Editres.h>],
3009 [int i; i = 0;],
3010 AC_MSG_RESULT(yes)
3011 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3012 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003013 CPPFLAGS=$cppflags_save
3014fi
3015
3016dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3017if test -z "$SKIP_MOTIF"; then
3018 cppflags_save=$CPPFLAGS
3019 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003020 if test "$zOSUnix" = "yes"; then
3021 xmheader="Xm/Xm.h"
3022 else
3023 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003024 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003025 fi
3026 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003027
Bram Moolenaar77c19352012-06-13 19:19:41 +02003028 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003029 dnl Solaris uses XpmAttributes_21, very annoying.
3030 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3031 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3032 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3033 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3034 )
3035 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003036 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003037 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003038 CPPFLAGS=$cppflags_save
3039fi
3040
3041if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3042 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3043 enable_xim="no"
3044fi
3045if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3046 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3047 enable_fontset="no"
3048fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003049if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003050 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3051 enable_fontset="no"
3052fi
3053
Bram Moolenaar071d4272004-06-13 20:20:40 +00003054if test -z "$SKIP_PHOTON"; then
3055 GUITYPE=PHOTONGUI
3056fi
3057
3058AC_SUBST(GUI_INC_LOC)
3059AC_SUBST(GUI_LIB_LOC)
3060AC_SUBST(GUITYPE)
3061AC_SUBST(GUI_X_LIBS)
3062
3063if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3064 AC_MSG_ERROR([cannot use workshop without Motif])
3065fi
3066
3067dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3068if test "$enable_xim" = "yes"; then
3069 AC_DEFINE(FEAT_XIM)
3070fi
3071if test "$enable_fontset" = "yes"; then
3072 AC_DEFINE(FEAT_XFONTSET)
3073fi
3074
3075
3076dnl ---------------------------------------------------------------------------
3077dnl end of GUI-checking
3078dnl ---------------------------------------------------------------------------
3079
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003080AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003081if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003082 dnl Linux
3083 AC_MSG_RESULT([/proc/self/exe])
3084 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3085elif test -L "/proc/self/path/a.out"; then
3086 dnl Solaris
3087 AC_MSG_RESULT([/proc/self/path/a.out])
3088 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3089elif test -L "/proc/curproc/file"; then
3090 dnl FreeBSD
3091 AC_MSG_RESULT([/proc/curproc/file])
3092 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003093else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003094 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003095fi
3096
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003097dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003098AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003099case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003100 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003101 AC_MSG_CHECKING(for CYGWIN clipboard support)
3102 if test "x$with_x" = "xno" ; then
3103 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3104 AC_MSG_RESULT(yes)
3105 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3106 else
3107 AC_MSG_RESULT(no - using X11)
3108 fi ;;
3109
3110 *) CYGWIN=no; AC_MSG_RESULT(no);;
3111esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003112
3113dnl Only really enable hangul input when GUI and XFONTSET are available
3114if test "$enable_hangulinput" = "yes"; then
3115 if test "x$GUITYPE" = "xNONE"; then
3116 AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
3117 enable_hangulinput=no
3118 else
3119 AC_DEFINE(FEAT_HANGULIN)
3120 HANGULIN_SRC=hangulin.c
3121 AC_SUBST(HANGULIN_SRC)
3122 HANGULIN_OBJ=objects/hangulin.o
3123 AC_SUBST(HANGULIN_OBJ)
3124 fi
3125fi
3126
3127dnl Checks for libraries and include files.
3128
Bram Moolenaar446cb832008-06-24 21:56:24 +00003129AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3130 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003131 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003132#include "confdefs.h"
3133#include <ctype.h>
3134#if STDC_HEADERS
3135# include <stdlib.h>
3136# include <stddef.h>
3137#endif
3138main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003139 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003140 vim_cv_toupper_broken=yes
3141 ],[
3142 vim_cv_toupper_broken=no
3143 ],[
3144 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3145 ])])
3146
3147if test "x$vim_cv_toupper_broken" = "xyes" ; then
3148 AC_DEFINE(BROKEN_TOUPPER)
3149fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003150
3151AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003152AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003153 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3154 AC_MSG_RESULT(no))
3155
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003156AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3157AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3158 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3159 AC_MSG_RESULT(no))
3160
Bram Moolenaar071d4272004-06-13 20:20:40 +00003161dnl Checks for header files.
3162AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3163dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3164if test "$HAS_ELF" = 1; then
3165 AC_CHECK_LIB(elf, main)
3166fi
3167
3168AC_HEADER_DIRENT
3169
Bram Moolenaar071d4272004-06-13 20:20:40 +00003170dnl If sys/wait.h is not found it might still exist but not be POSIX
3171dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3172if test $ac_cv_header_sys_wait_h = no; then
3173 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3174 AC_TRY_COMPILE([#include <sys/wait.h>],
3175 [union wait xx, yy; xx = yy],
3176 AC_MSG_RESULT(yes)
3177 AC_DEFINE(HAVE_SYS_WAIT_H)
3178 AC_DEFINE(HAVE_UNION_WAIT),
3179 AC_MSG_RESULT(no))
3180fi
3181
Bram Moolenaar779a7752016-01-30 23:26:34 +01003182AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003183 sys/select.h sys/utsname.h termcap.h fcntl.h \
3184 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3185 termio.h iconv.h inttypes.h langinfo.h math.h \
3186 unistd.h stropts.h errno.h sys/resource.h \
3187 sys/systeminfo.h locale.h sys/stream.h termios.h \
3188 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
3189 utime.h sys/param.h libintl.h libgen.h \
3190 util/debug.h util/msg18n.h frame.h sys/acl.h \
3191 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003192
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003193dnl sys/ptem.h depends on sys/stream.h on Solaris
3194AC_CHECK_HEADERS(sys/ptem.h, [], [],
3195[#if defined HAVE_SYS_STREAM_H
3196# include <sys/stream.h>
3197#endif])
3198
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003199dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3200AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3201[#if defined HAVE_SYS_PARAM_H
3202# include <sys/param.h>
3203#endif])
3204
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003205
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003206dnl pthread_np.h may exist but can only be used after including pthread.h
3207AC_MSG_CHECKING([for pthread_np.h])
3208AC_TRY_COMPILE([
3209#include <pthread.h>
3210#include <pthread_np.h>],
3211 [int i; i = 0;],
3212 AC_MSG_RESULT(yes)
3213 AC_DEFINE(HAVE_PTHREAD_NP_H),
3214 AC_MSG_RESULT(no))
3215
Bram Moolenaare344bea2005-09-01 20:46:49 +00003216AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003217if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003218 dnl The strings.h file on OS/X contains a warning and nothing useful.
3219 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3220else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003221
3222dnl Check if strings.h and string.h can both be included when defined.
3223AC_MSG_CHECKING([if strings.h can be included after string.h])
3224cppflags_save=$CPPFLAGS
3225CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3226AC_TRY_COMPILE([
3227#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3228# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3229 /* but don't do it on AIX 5.1 (Uribarri) */
3230#endif
3231#ifdef HAVE_XM_XM_H
3232# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3233#endif
3234#ifdef HAVE_STRING_H
3235# include <string.h>
3236#endif
3237#if defined(HAVE_STRINGS_H)
3238# include <strings.h>
3239#endif
3240 ], [int i; i = 0;],
3241 AC_MSG_RESULT(yes),
3242 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3243 AC_MSG_RESULT(no))
3244CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003245fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003246
3247dnl Checks for typedefs, structures, and compiler characteristics.
3248AC_PROG_GCC_TRADITIONAL
3249AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003250AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003251AC_TYPE_MODE_T
3252AC_TYPE_OFF_T
3253AC_TYPE_PID_T
3254AC_TYPE_SIZE_T
3255AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003256AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003257
Bram Moolenaar071d4272004-06-13 20:20:40 +00003258AC_HEADER_TIME
3259AC_CHECK_TYPE(ino_t, long)
3260AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003261AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003262AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003263
3264AC_MSG_CHECKING(for rlim_t)
3265if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3266 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3267else
3268 AC_EGREP_CPP(dnl
3269changequote(<<,>>)dnl
3270<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3271changequote([,]),
3272 [
3273#include <sys/types.h>
3274#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003275# include <stdlib.h>
3276# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003277#endif
3278#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003279# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003280#endif
3281 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3282 AC_MSG_RESULT($ac_cv_type_rlim_t)
3283fi
3284if test $ac_cv_type_rlim_t = no; then
3285 cat >> confdefs.h <<\EOF
3286#define rlim_t unsigned long
3287EOF
3288fi
3289
3290AC_MSG_CHECKING(for stack_t)
3291if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3292 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3293else
3294 AC_EGREP_CPP(stack_t,
3295 [
3296#include <sys/types.h>
3297#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003298# include <stdlib.h>
3299# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003300#endif
3301#include <signal.h>
3302 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3303 AC_MSG_RESULT($ac_cv_type_stack_t)
3304fi
3305if test $ac_cv_type_stack_t = no; then
3306 cat >> confdefs.h <<\EOF
3307#define stack_t struct sigaltstack
3308EOF
3309fi
3310
3311dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3312AC_MSG_CHECKING(whether stack_t has an ss_base field)
3313AC_TRY_COMPILE([
3314#include <sys/types.h>
3315#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003316# include <stdlib.h>
3317# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003318#endif
3319#include <signal.h>
3320#include "confdefs.h"
3321 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3322 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3323 AC_MSG_RESULT(no))
3324
3325olibs="$LIBS"
3326AC_MSG_CHECKING(--with-tlib argument)
3327AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3328if test -n "$with_tlib"; then
3329 AC_MSG_RESULT($with_tlib)
3330 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003331 AC_MSG_CHECKING(for linking with $with_tlib library)
3332 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3333 dnl Need to check for tgetent() below.
3334 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003335else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003336 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003337 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3338 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003339 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003340 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003341 dnl Older versions of ncurses have bugs, get a new one!
3342 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003343 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003344 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003345 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3346 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003347 esac
3348 for libname in $tlibs; do
3349 AC_CHECK_LIB(${libname}, tgetent,,)
3350 if test "x$olibs" != "x$LIBS"; then
3351 dnl It's possible that a library is found but it doesn't work
3352 dnl e.g., shared library that cannot be found
3353 dnl compile and run a test program to be sure
3354 AC_TRY_RUN([
3355#ifdef HAVE_TERMCAP_H
3356# include <termcap.h>
3357#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003358#if STDC_HEADERS
3359# include <stdlib.h>
3360# include <stddef.h>
3361#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003362main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3363 res="OK", res="FAIL", res="FAIL")
3364 if test "$res" = "OK"; then
3365 break
3366 fi
3367 AC_MSG_RESULT($libname library is not usable)
3368 LIBS="$olibs"
3369 fi
3370 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003371 if test "x$olibs" = "x$LIBS"; then
3372 AC_MSG_RESULT(no terminal library found)
3373 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003374fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003375
3376if test "x$olibs" = "x$LIBS"; then
3377 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003378 AC_TRY_LINK([],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003379 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3380 AC_MSG_RESULT(yes),
3381 AC_MSG_ERROR([NOT FOUND!
3382 You need to install a terminal library; for example ncurses.
3383 Or specify the name of the library with --with-tlib.]))
3384fi
3385
Bram Moolenaar446cb832008-06-24 21:56:24 +00003386AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3387 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003388 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003389#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003390#ifdef HAVE_TERMCAP_H
3391# include <termcap.h>
3392#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003393#ifdef HAVE_STRING_H
3394# include <string.h>
3395#endif
3396#if STDC_HEADERS
3397# include <stdlib.h>
3398# include <stddef.h>
3399#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003400main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003401{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003402 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003403 vim_cv_terminfo=no
3404 ],[
3405 vim_cv_terminfo=yes
3406 ],[
3407 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3408 ])
3409 ])
3410
3411if test "x$vim_cv_terminfo" = "xyes" ; then
3412 AC_DEFINE(TERMINFO)
3413fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003414
Bram Moolenaara88254f2017-11-02 23:04:14 +01003415AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003416 [
3417 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003418#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003419#ifdef HAVE_TERMCAP_H
3420# include <termcap.h>
3421#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003422#if STDC_HEADERS
3423# include <stdlib.h>
3424# include <stddef.h>
3425#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003426main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003427{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003428 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003429 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003430 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003431 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003432 ],[
3433 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003434 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003435 ])
3436
Bram Moolenaara88254f2017-11-02 23:04:14 +01003437if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003438 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003439fi
3440
3441AC_MSG_CHECKING(whether termcap.h contains ospeed)
3442AC_TRY_LINK([
3443#ifdef HAVE_TERMCAP_H
3444# include <termcap.h>
3445#endif
3446 ], [ospeed = 20000],
3447 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3448 [AC_MSG_RESULT(no)
3449 AC_MSG_CHECKING(whether ospeed can be extern)
3450 AC_TRY_LINK([
3451#ifdef HAVE_TERMCAP_H
3452# include <termcap.h>
3453#endif
3454extern short ospeed;
3455 ], [ospeed = 20000],
3456 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3457 AC_MSG_RESULT(no))]
3458 )
3459
3460AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3461AC_TRY_LINK([
3462#ifdef HAVE_TERMCAP_H
3463# include <termcap.h>
3464#endif
3465 ], [if (UP == 0 && BC == 0) PC = 1],
3466 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3467 [AC_MSG_RESULT(no)
3468 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3469 AC_TRY_LINK([
3470#ifdef HAVE_TERMCAP_H
3471# include <termcap.h>
3472#endif
3473extern char *UP, *BC, PC;
3474 ], [if (UP == 0 && BC == 0) PC = 1],
3475 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3476 AC_MSG_RESULT(no))]
3477 )
3478
3479AC_MSG_CHECKING(whether tputs() uses outfuntype)
3480AC_TRY_COMPILE([
3481#ifdef HAVE_TERMCAP_H
3482# include <termcap.h>
3483#endif
3484 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3485 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3486 AC_MSG_RESULT(no))
3487
3488dnl On some SCO machines sys/select redefines struct timeval
3489AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3490AC_TRY_COMPILE([
3491#include <sys/types.h>
3492#include <sys/time.h>
3493#include <sys/select.h>], ,
3494 AC_MSG_RESULT(yes)
3495 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3496 AC_MSG_RESULT(no))
3497
3498dnl AC_DECL_SYS_SIGLIST
3499
3500dnl Checks for pty.c (copied from screen) ==========================
3501AC_MSG_CHECKING(for /dev/ptc)
3502if test -r /dev/ptc; then
3503 AC_DEFINE(HAVE_DEV_PTC)
3504 AC_MSG_RESULT(yes)
3505else
3506 AC_MSG_RESULT(no)
3507fi
3508
3509AC_MSG_CHECKING(for SVR4 ptys)
3510if test -c /dev/ptmx ; then
3511 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3512 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3513 AC_MSG_RESULT(no))
3514else
3515 AC_MSG_RESULT(no)
3516fi
3517
3518AC_MSG_CHECKING(for ptyranges)
3519if test -d /dev/ptym ; then
3520 pdir='/dev/ptym'
3521else
3522 pdir='/dev'
3523fi
3524dnl SCO uses ptyp%d
3525AC_EGREP_CPP(yes,
3526[#ifdef M_UNIX
3527 yes;
3528#endif
3529 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3530dnl if test -c /dev/ptyp19; then
3531dnl ptys=`echo /dev/ptyp??`
3532dnl else
3533dnl ptys=`echo $pdir/pty??`
3534dnl fi
3535if test "$ptys" != "$pdir/pty??" ; then
3536 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3537 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3538 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3539 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3540 AC_MSG_RESULT([$p0 / $p1])
3541else
3542 AC_MSG_RESULT([don't know])
3543fi
3544
3545dnl **** pty mode/group handling ****
3546dnl
3547dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
Bram Moolenaar071d4272004-06-13 20:20:40 +00003548rm -f conftest_grp
Bram Moolenaar446cb832008-06-24 21:56:24 +00003549AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3550 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003551 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003552#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003553#include <sys/types.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003554#if STDC_HEADERS
3555# include <stdlib.h>
3556# include <stddef.h>
3557#endif
3558#ifdef HAVE_UNISTD_H
3559#include <unistd.h>
3560#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003561#include <sys/stat.h>
3562#include <stdio.h>
3563main()
3564{
3565 struct stat sb;
3566 char *x,*ttyname();
3567 int om, m;
3568 FILE *fp;
3569
3570 if (!(x = ttyname(0))) exit(1);
3571 if (stat(x, &sb)) exit(1);
3572 om = sb.st_mode;
3573 if (om & 002) exit(0);
3574 m = system("mesg y");
3575 if (m == -1 || m == 127) exit(1);
3576 if (stat(x, &sb)) exit(1);
3577 m = sb.st_mode;
3578 if (chmod(x, om)) exit(1);
3579 if (m & 002) exit(0);
3580 if (sb.st_gid == getgid()) exit(1);
3581 if (!(fp=fopen("conftest_grp", "w")))
3582 exit(1);
3583 fprintf(fp, "%d\n", sb.st_gid);
3584 fclose(fp);
3585 exit(0);
3586}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003587 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003588 if test -f conftest_grp; then
3589 vim_cv_tty_group=`cat conftest_grp`
3590 if test "x$vim_cv_tty_mode" = "x" ; then
3591 vim_cv_tty_mode=0620
3592 fi
3593 AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3594 else
3595 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003596 AC_MSG_RESULT([ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003597 fi
3598 ],[
3599 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003600 AC_MSG_RESULT([can't determine - assume ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003601 ],[
3602 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3603 ])
3604 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003605rm -f conftest_grp
3606
Bram Moolenaar446cb832008-06-24 21:56:24 +00003607if test "x$vim_cv_tty_group" != "xworld" ; then
3608 AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3609 if test "x$vim_cv_tty_mode" = "x" ; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02003610 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 +00003611 else
3612 AC_DEFINE(PTYMODE, 0620)
3613 fi
3614fi
3615
Bram Moolenaar071d4272004-06-13 20:20:40 +00003616dnl Checks for library functions. ===================================
3617
3618AC_TYPE_SIGNAL
3619
3620dnl find out what to use at the end of a signal function
3621if test $ac_cv_type_signal = void; then
3622 AC_DEFINE(SIGRETURN, [return])
3623else
3624 AC_DEFINE(SIGRETURN, [return 0])
3625fi
3626
3627dnl check if struct sigcontext is defined (used for SGI only)
3628AC_MSG_CHECKING(for struct sigcontext)
3629AC_TRY_COMPILE([
3630#include <signal.h>
3631test_sig()
3632{
3633 struct sigcontext *scont;
3634 scont = (struct sigcontext *)0;
3635 return 1;
3636} ], ,
3637 AC_MSG_RESULT(yes)
3638 AC_DEFINE(HAVE_SIGCONTEXT),
3639 AC_MSG_RESULT(no))
3640
3641dnl tricky stuff: try to find out if getcwd() is implemented with
3642dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003643AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3644 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003645 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003646#include "confdefs.h"
3647#ifdef HAVE_UNISTD_H
3648#include <unistd.h>
3649#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003650char *dagger[] = { "IFS=pwd", 0 };
3651main()
3652{
3653 char buffer[500];
3654 extern char **environ;
3655 environ = dagger;
3656 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003657}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003658 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003659 vim_cv_getcwd_broken=no
3660 ],[
3661 vim_cv_getcwd_broken=yes
3662 ],[
3663 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3664 ])
3665 ])
3666
3667if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3668 AC_DEFINE(BAD_GETCWD)
3669fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003670
Bram Moolenaar25153e12010-02-24 14:47:08 +01003671dnl Check for functions in one big call, to reduce the size of configure.
3672dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003673AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaarb129a442016-12-01 17:25:20 +01003674 getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003675 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003676 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaarbb09ceb2016-10-18 16:27:23 +02003677 sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00003678 strnicmp strpbrk strtol tgetent towlower towupper iswupper \
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003679 usleep utime utimes mblen ftruncate)
Bram Moolenaar25153e12010-02-24 14:47:08 +01003680AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003681
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003682dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3683dnl appropriate, so that off_t is 64 bits when needed.
3684AC_SYS_LARGEFILE
3685
Bram Moolenaar071d4272004-06-13 20:20:40 +00003686dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3687AC_MSG_CHECKING(for st_blksize)
3688AC_TRY_COMPILE(
3689[#include <sys/types.h>
3690#include <sys/stat.h>],
3691[ struct stat st;
3692 int n;
3693
3694 stat("/", &st);
3695 n = (int)st.st_blksize;],
3696 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3697 AC_MSG_RESULT(no))
3698
Bram Moolenaar446cb832008-06-24 21:56:24 +00003699AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3700 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003701 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003702#include "confdefs.h"
3703#if STDC_HEADERS
3704# include <stdlib.h>
3705# include <stddef.h>
3706#endif
3707#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003708#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003709main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003710 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003711 vim_cv_stat_ignores_slash=yes
3712 ],[
3713 vim_cv_stat_ignores_slash=no
3714 ],[
3715 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3716 ])
3717 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003718
Bram Moolenaar446cb832008-06-24 21:56:24 +00003719if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3720 AC_DEFINE(STAT_IGNORES_SLASH)
3721fi
3722
Bram Moolenaar071d4272004-06-13 20:20:40 +00003723dnl Link with iconv for charset translation, if not found without library.
3724dnl check for iconv() requires including iconv.h
3725dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3726dnl has been installed.
3727AC_MSG_CHECKING(for iconv_open())
3728save_LIBS="$LIBS"
3729LIBS="$LIBS -liconv"
3730AC_TRY_LINK([
3731#ifdef HAVE_ICONV_H
3732# include <iconv.h>
3733#endif
3734 ], [iconv_open("fr", "to");],
3735 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3736 LIBS="$save_LIBS"
3737 AC_TRY_LINK([
3738#ifdef HAVE_ICONV_H
3739# include <iconv.h>
3740#endif
3741 ], [iconv_open("fr", "to");],
3742 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3743 AC_MSG_RESULT(no)))
3744
3745
3746AC_MSG_CHECKING(for nl_langinfo(CODESET))
3747AC_TRY_LINK([
3748#ifdef HAVE_LANGINFO_H
3749# include <langinfo.h>
3750#endif
3751], [char *cs = nl_langinfo(CODESET);],
3752 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3753 AC_MSG_RESULT(no))
3754
Bram Moolenaar446cb832008-06-24 21:56:24 +00003755dnl Need various functions for floating point support. Only enable
3756dnl floating point when they are all present.
3757AC_CHECK_LIB(m, strtod)
3758AC_MSG_CHECKING([for strtod() and other floating point functions])
3759AC_TRY_LINK([
3760#ifdef HAVE_MATH_H
3761# include <math.h>
3762#endif
3763#if STDC_HEADERS
3764# include <stdlib.h>
3765# include <stddef.h>
3766#endif
3767], [char *s; double d;
3768 d = strtod("1.1", &s);
3769 d = fabs(1.11);
3770 d = ceil(1.11);
3771 d = floor(1.11);
3772 d = log10(1.11);
3773 d = pow(1.11, 2.22);
3774 d = sqrt(1.11);
3775 d = sin(1.11);
3776 d = cos(1.11);
3777 d = atan(1.11);
3778 ],
3779 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3780 AC_MSG_RESULT(no))
3781
Bram Moolenaara6b89762016-02-29 21:38:26 +01003782dnl isinf() and isnan() need to include header files and may need -lm.
3783AC_MSG_CHECKING([for isinf()])
3784AC_TRY_LINK([
3785#ifdef HAVE_MATH_H
3786# include <math.h>
3787#endif
3788#if STDC_HEADERS
3789# include <stdlib.h>
3790# include <stddef.h>
3791#endif
3792], [int r = isinf(1.11); ],
3793 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3794 AC_MSG_RESULT(no))
3795
3796AC_MSG_CHECKING([for isnan()])
3797AC_TRY_LINK([
3798#ifdef HAVE_MATH_H
3799# include <math.h>
3800#endif
3801#if STDC_HEADERS
3802# include <stdlib.h>
3803# include <stddef.h>
3804#endif
3805], [int r = isnan(1.11); ],
3806 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3807 AC_MSG_RESULT(no))
3808
Bram Moolenaar071d4272004-06-13 20:20:40 +00003809dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3810dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003811dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003812AC_MSG_CHECKING(--disable-acl argument)
3813AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003814 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003815 , [enable_acl="yes"])
3816if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003817 AC_MSG_RESULT(no)
3818 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003819 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3820 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3821
Bram Moolenaard6d30422018-01-28 22:48:55 +01003822 AC_MSG_CHECKING(for POSIX ACL support)
3823 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003824#include <sys/types.h>
3825#ifdef HAVE_SYS_ACL_H
3826# include <sys/acl.h>
3827#endif
3828acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3829 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3830 acl_free(acl);],
3831 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3832 AC_MSG_RESULT(no))
3833
Bram Moolenaard6d30422018-01-28 22:48:55 +01003834 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3835 AC_MSG_CHECKING(for Solaris ACL support)
3836 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003837#ifdef HAVE_SYS_ACL_H
3838# include <sys/acl.h>
3839#endif], [acl("foo", GETACLCNT, 0, NULL);
3840 ],
3841 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003842 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003843
Bram Moolenaard6d30422018-01-28 22:48:55 +01003844 AC_MSG_CHECKING(for AIX ACL support)
3845 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003846#if STDC_HEADERS
3847# include <stdlib.h>
3848# include <stddef.h>
3849#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003850#ifdef HAVE_SYS_ACL_H
3851# include <sys/acl.h>
3852#endif
3853#ifdef HAVE_SYS_ACCESS_H
3854# include <sys/access.h>
3855#endif
3856#define _ALL_SOURCE
3857
3858#include <sys/stat.h>
3859
3860int aclsize;
3861struct acl *aclent;], [aclsize = sizeof(struct acl);
3862 aclent = (void *)malloc(aclsize);
3863 statacl("foo", STX_NORMAL, aclent, aclsize);
3864 ],
3865 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3866 AC_MSG_RESULT(no))
3867else
3868 AC_MSG_RESULT(yes)
3869fi
3870
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003871if test "x$GTK_CFLAGS" != "x"; then
3872 dnl pango_shape_full() is new, fall back to pango_shape().
3873 AC_MSG_CHECKING(for pango_shape_full)
3874 ac_save_CFLAGS="$CFLAGS"
3875 ac_save_LIBS="$LIBS"
3876 CFLAGS="$CFLAGS $GTK_CFLAGS"
3877 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003878 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003879 [#include <gtk/gtk.h>],
3880 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3881 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3882 AC_MSG_RESULT(no))
3883 CFLAGS="$ac_save_CFLAGS"
3884 LIBS="$ac_save_LIBS"
3885fi
3886
Bram Moolenaar071d4272004-06-13 20:20:40 +00003887AC_MSG_CHECKING(--disable-gpm argument)
3888AC_ARG_ENABLE(gpm,
3889 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3890 [enable_gpm="yes"])
3891
3892if test "$enable_gpm" = "yes"; then
3893 AC_MSG_RESULT(no)
3894 dnl Checking if gpm support can be compiled
3895 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3896 [olibs="$LIBS" ; LIBS="-lgpm"]
3897 AC_TRY_LINK(
3898 [#include <gpm.h>
3899 #include <linux/keyboard.h>],
3900 [Gpm_GetLibVersion(NULL);],
3901 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3902 dnl FEAT_MOUSE_GPM if mouse support is included
3903 [vi_cv_have_gpm=yes],
3904 [vi_cv_have_gpm=no])
3905 [LIBS="$olibs"]
3906 )
3907 if test $vi_cv_have_gpm = yes; then
3908 LIBS="$LIBS -lgpm"
3909 AC_DEFINE(HAVE_GPM)
3910 fi
3911else
3912 AC_MSG_RESULT(yes)
3913fi
3914
Bram Moolenaar446cb832008-06-24 21:56:24 +00003915AC_MSG_CHECKING(--disable-sysmouse argument)
3916AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003917 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00003918 [enable_sysmouse="yes"])
3919
3920if test "$enable_sysmouse" = "yes"; then
3921 AC_MSG_RESULT(no)
3922 dnl Checking if sysmouse support can be compiled
3923 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3924 dnl defines FEAT_SYSMOUSE if mouse support is included
3925 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3926 AC_TRY_LINK(
3927 [#include <sys/consio.h>
3928 #include <signal.h>
3929 #include <sys/fbio.h>],
3930 [struct mouse_info mouse;
3931 mouse.operation = MOUSE_MODE;
3932 mouse.operation = MOUSE_SHOW;
3933 mouse.u.mode.mode = 0;
3934 mouse.u.mode.signal = SIGUSR2;],
3935 [vi_cv_have_sysmouse=yes],
3936 [vi_cv_have_sysmouse=no])
3937 )
3938 if test $vi_cv_have_sysmouse = yes; then
3939 AC_DEFINE(HAVE_SYSMOUSE)
3940 fi
3941else
3942 AC_MSG_RESULT(yes)
3943fi
3944
Bram Moolenaarf05da212009-11-17 16:13:15 +00003945dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3946AC_MSG_CHECKING(for FD_CLOEXEC)
3947AC_TRY_COMPILE(
3948[#if HAVE_FCNTL_H
3949# include <fcntl.h>
3950#endif],
3951[ int flag = FD_CLOEXEC;],
3952 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
3953 AC_MSG_RESULT(not usable))
3954
Bram Moolenaar071d4272004-06-13 20:20:40 +00003955dnl rename needs to be checked separately to work on Nextstep with cc
3956AC_MSG_CHECKING(for rename)
3957AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
3958 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
3959 AC_MSG_RESULT(no))
3960
3961dnl sysctl() may exist but not the arguments we use
3962AC_MSG_CHECKING(for sysctl)
3963AC_TRY_COMPILE(
3964[#include <sys/types.h>
3965#include <sys/sysctl.h>],
3966[ int mib[2], r;
3967 size_t len;
3968
3969 mib[0] = CTL_HW;
3970 mib[1] = HW_USERMEM;
3971 len = sizeof(r);
3972 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
3973 ],
3974 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
3975 AC_MSG_RESULT(not usable))
3976
3977dnl sysinfo() may exist but not be Linux compatible
3978AC_MSG_CHECKING(for sysinfo)
3979AC_TRY_COMPILE(
3980[#include <sys/types.h>
3981#include <sys/sysinfo.h>],
3982[ struct sysinfo sinfo;
3983 int t;
3984
3985 (void)sysinfo(&sinfo);
3986 t = sinfo.totalram;
3987 ],
3988 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
3989 AC_MSG_RESULT(not usable))
3990
Bram Moolenaar914572a2007-05-01 11:37:47 +00003991dnl struct sysinfo may have the mem_unit field or not
3992AC_MSG_CHECKING(for sysinfo.mem_unit)
3993AC_TRY_COMPILE(
3994[#include <sys/types.h>
3995#include <sys/sysinfo.h>],
3996[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003997 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00003998 ],
3999 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4000 AC_MSG_RESULT(no))
4001
Bram Moolenaar071d4272004-06-13 20:20:40 +00004002dnl sysconf() may exist but not support what we want to use
4003AC_MSG_CHECKING(for sysconf)
4004AC_TRY_COMPILE(
4005[#include <unistd.h>],
4006[ (void)sysconf(_SC_PAGESIZE);
4007 (void)sysconf(_SC_PHYS_PAGES);
4008 ],
4009 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4010 AC_MSG_RESULT(not usable))
4011
Bram Moolenaar914703b2010-05-31 21:59:46 +02004012AC_CHECK_SIZEOF([int])
4013AC_CHECK_SIZEOF([long])
4014AC_CHECK_SIZEOF([time_t])
4015AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004016
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004017dnl Use different names to avoid clashing with other header files.
4018AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4019AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4020
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004021dnl Make sure that uint32_t is really 32 bits unsigned.
4022AC_MSG_CHECKING([uint32_t is 32 bits])
4023AC_TRY_RUN([
4024#ifdef HAVE_STDINT_H
4025# include <stdint.h>
4026#endif
4027#ifdef HAVE_INTTYPES_H
4028# include <inttypes.h>
4029#endif
4030main() {
4031 uint32_t nr1 = (uint32_t)-1;
4032 uint32_t nr2 = (uint32_t)0xffffffffUL;
4033 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
4034 exit(0);
4035}],
4036AC_MSG_RESULT(ok),
4037AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004038AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004039
Bram Moolenaar446cb832008-06-24 21:56:24 +00004040dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4041dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4042
Bram Moolenaar071d4272004-06-13 20:20:40 +00004043[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004044#include "confdefs.h"
4045#ifdef HAVE_STRING_H
4046# include <string.h>
4047#endif
4048#if STDC_HEADERS
4049# include <stdlib.h>
4050# include <stddef.h>
4051#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004052main() {
4053 char buf[10];
4054 strcpy(buf, "abcdefghi");
4055 mch_memmove(buf, buf + 2, 3);
4056 if (strncmp(buf, "ababcf", 6))
4057 exit(1);
4058 strcpy(buf, "abcdefghi");
4059 mch_memmove(buf + 2, buf, 3);
4060 if (strncmp(buf, "cdedef", 6))
4061 exit(1);
4062 exit(0); /* libc version works properly. */
4063}']
4064
Bram Moolenaar446cb832008-06-24 21:56:24 +00004065AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4066 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004067 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 +00004068 [
4069 vim_cv_memmove_handles_overlap=yes
4070 ],[
4071 vim_cv_memmove_handles_overlap=no
4072 ],[
4073 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4074 ])
4075 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004076
Bram Moolenaar446cb832008-06-24 21:56:24 +00004077if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4078 AC_DEFINE(USEMEMMOVE)
4079else
4080 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4081 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004082 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 +00004083 [
4084 vim_cv_bcopy_handles_overlap=yes
4085 ],[
4086 vim_cv_bcopy_handles_overlap=no
4087 ],[
4088 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4089 ])
4090 ])
4091
4092 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4093 AC_DEFINE(USEBCOPY)
4094 else
4095 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4096 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004097 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 +00004098 [
4099 vim_cv_memcpy_handles_overlap=yes
4100 ],[
4101 vim_cv_memcpy_handles_overlap=no
4102 ],[
4103 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4104 ])
4105 ])
4106
4107 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4108 AC_DEFINE(USEMEMCPY)
4109 fi
4110 fi
4111fi
4112
Bram Moolenaar071d4272004-06-13 20:20:40 +00004113
4114dnl Check for multibyte locale functions
4115dnl Find out if _Xsetlocale() is supported by libX11.
4116dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004117if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004118 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004119 libs_save=$LIBS
4120 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4121 CFLAGS="$CFLAGS $X_CFLAGS"
4122
4123 AC_MSG_CHECKING(whether X_LOCALE needed)
4124 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4125 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4126 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4127 AC_MSG_RESULT(no))
4128
4129 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4130 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4131 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4132
Bram Moolenaar071d4272004-06-13 20:20:40 +00004133 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004134 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004135fi
4136
4137dnl Link with xpg4, it is said to make Korean locale working
4138AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4139
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004140dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004141dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004142dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004143dnl -t for typedefs (many ctags have this)
4144dnl -s for static functions (Elvis ctags only?)
4145dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4146dnl -i+m to test for older Exuberant ctags
4147AC_MSG_CHECKING(how to create tags)
4148test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004149if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004150 TAGPRG="ctags -I INIT+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004151elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4152 TAGPRG="exctags -I INIT+ --fields=+S"
4153elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4154 TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004155else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004156 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004157 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4158 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4159 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4160 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4161 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4162 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4163 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4164fi
4165test -f tags.save && mv tags.save tags
4166AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4167
4168dnl Check how we can run man with a section number
4169AC_MSG_CHECKING(how to run man with a section nr)
4170MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004171(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 +00004172AC_MSG_RESULT($MANDEF)
4173if test "$MANDEF" = "man -s"; then
4174 AC_DEFINE(USEMAN_S)
4175fi
4176
4177dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004178dnl We take care to base this on an empty LIBS: on some systems libelf would be
4179dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4180dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004181AC_MSG_CHECKING(--disable-nls argument)
4182AC_ARG_ENABLE(nls,
4183 [ --disable-nls Don't support NLS (gettext()).], ,
4184 [enable_nls="yes"])
4185
4186if test "$enable_nls" = "yes"; then
4187 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004188
4189 INSTALL_LANGS=install-languages
4190 AC_SUBST(INSTALL_LANGS)
4191 INSTALL_TOOL_LANGS=install-tool-languages
4192 AC_SUBST(INSTALL_TOOL_LANGS)
4193
Bram Moolenaar071d4272004-06-13 20:20:40 +00004194 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4195 AC_MSG_CHECKING([for NLS])
4196 if test -f po/Makefile; then
4197 have_gettext="no"
4198 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004199 olibs=$LIBS
4200 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004201 AC_TRY_LINK(
4202 [#include <libintl.h>],
4203 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004204 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4205 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004206 AC_TRY_LINK(
4207 [#include <libintl.h>],
4208 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004209 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4210 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004211 AC_MSG_RESULT([gettext() doesn't work]);
4212 LIBS=$olibs))
4213 else
4214 AC_MSG_RESULT([msgfmt not found - disabled]);
4215 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004216 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004217 AC_DEFINE(HAVE_GETTEXT)
4218 MAKEMO=yes
4219 AC_SUBST(MAKEMO)
4220 dnl this was added in GNU gettext 0.10.36
4221 AC_CHECK_FUNCS(bind_textdomain_codeset)
4222 dnl _nl_msg_cat_cntr is required for GNU gettext
4223 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4224 AC_TRY_LINK(
4225 [#include <libintl.h>
4226 extern int _nl_msg_cat_cntr;],
4227 [++_nl_msg_cat_cntr;],
4228 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4229 AC_MSG_RESULT([no]))
4230 fi
4231 else
4232 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4233 fi
4234else
4235 AC_MSG_RESULT(yes)
4236fi
4237
4238dnl Check for dynamic linking loader
4239AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4240if test x${DLL} = xdlfcn.h; then
4241 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4242 AC_MSG_CHECKING([for dlopen()])
4243 AC_TRY_LINK(,[
4244 extern void* dlopen();
4245 dlopen();
4246 ],
4247 AC_MSG_RESULT(yes);
4248 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4249 AC_MSG_RESULT(no);
4250 AC_MSG_CHECKING([for dlopen() in -ldl])
4251 olibs=$LIBS
4252 LIBS="$LIBS -ldl"
4253 AC_TRY_LINK(,[
4254 extern void* dlopen();
4255 dlopen();
4256 ],
4257 AC_MSG_RESULT(yes);
4258 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4259 AC_MSG_RESULT(no);
4260 LIBS=$olibs))
4261 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4262 dnl ick :-)
4263 AC_MSG_CHECKING([for dlsym()])
4264 AC_TRY_LINK(,[
4265 extern void* dlsym();
4266 dlsym();
4267 ],
4268 AC_MSG_RESULT(yes);
4269 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4270 AC_MSG_RESULT(no);
4271 AC_MSG_CHECKING([for dlsym() in -ldl])
4272 olibs=$LIBS
4273 LIBS="$LIBS -ldl"
4274 AC_TRY_LINK(,[
4275 extern void* dlsym();
4276 dlsym();
4277 ],
4278 AC_MSG_RESULT(yes);
4279 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4280 AC_MSG_RESULT(no);
4281 LIBS=$olibs))
4282elif test x${DLL} = xdl.h; then
4283 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4284 AC_MSG_CHECKING([for shl_load()])
4285 AC_TRY_LINK(,[
4286 extern void* shl_load();
4287 shl_load();
4288 ],
4289 AC_MSG_RESULT(yes);
4290 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4291 AC_MSG_RESULT(no);
4292 AC_MSG_CHECKING([for shl_load() in -ldld])
4293 olibs=$LIBS
4294 LIBS="$LIBS -ldld"
4295 AC_TRY_LINK(,[
4296 extern void* shl_load();
4297 shl_load();
4298 ],
4299 AC_MSG_RESULT(yes);
4300 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4301 AC_MSG_RESULT(no);
4302 LIBS=$olibs))
4303fi
4304AC_CHECK_HEADERS(setjmp.h)
4305
Bram Moolenaard0573012017-10-28 21:11:06 +02004306if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004307 dnl -ldl must come after DynaLoader.a
4308 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4309 LIBS=`echo $LIBS | sed s/-ldl//`
4310 PERL_LIBS="$PERL_LIBS -ldl"
4311 fi
4312fi
4313
Bram Moolenaard0573012017-10-28 21:11:06 +02004314if test "$MACOS_X" = "yes"; then
4315 AC_MSG_CHECKING([whether we need macOS frameworks])
4316 if test "$GUITYPE" = "CARBONGUI"; then
4317 AC_MSG_RESULT([yes, we need Carbon])
4318 LIBS="$LIBS -framework Carbon"
4319 elif test "$MACOS_X_DARWIN" = "yes"; then
4320 if test "$features" = "tiny"; then
4321 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4322 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4323 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4324 if test "$enable_multibyte" = "yes"; then
4325 AC_MSG_RESULT([yes, we need CoreServices])
4326 LIBS="$LIBS -framework CoreServices"
4327 else
4328 dnl Since no FEAT_MBYTE, no longer need for os_mac_conv.c.
4329 AC_MSG_RESULT([no])
4330 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_mac_conv.c++'`
4331 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_mac_conv.o++'`
4332 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's+-DMACOS_X_DARWIN++'`
4333 fi
4334 else
4335 AC_MSG_RESULT([yes, we need AppKit])
4336 LIBS="$LIBS -framework AppKit"
4337 if test "$features" = "small" -a "$enable_multibyte" = "no"; then
4338 dnl Since FEAT_CLIPBOARD is to be defined in vim.h for FEAT_SMALL, define
4339 dnl FEAT_MBYTE in order not to compromise the interoperability of the
4340 dnl clipboard.
4341 AC_MSG_NOTICE([+multi_byte will be set in favor of +clipboard])
4342 enable_multibyte=yes
4343 AC_DEFINE(FEAT_MBYTE)
4344 fi
4345 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004346 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004347 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004348 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004349fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004350if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004351 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004352fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004353
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004354dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4355dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4356dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004357dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4358dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004359DEPEND_CFLAGS_FILTER=
4360if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004361 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar2217cae2006-03-25 21:55:52 +00004362 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004363 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004364 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004365 AC_MSG_RESULT(yes)
4366 else
4367 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004368 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004369 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4370 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004371 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004372 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004373 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4374 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004375 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 +00004376 AC_MSG_RESULT(yes)
4377 else
4378 AC_MSG_RESULT(no)
4379 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004380fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004381AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004382
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004383dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4384dnl isn't required, but the CFLAGS for some of the libraries we're using
4385dnl include the define. Since the define changes the size of some datatypes
4386dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4387dnl consistent value. It's therefore safest to force the use of the define
4388dnl if it's present in any of the *_CFLAGS variables.
4389AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004390if 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 +01004391 AC_MSG_RESULT(yes)
4392 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4393else
4394 AC_MSG_RESULT(no)
4395fi
4396
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004397dnl link.sh tries to avoid overlinking in a hackish way.
4398dnl At least GNU ld supports --as-needed which provides the same functionality
4399dnl at linker level. Let's use it.
4400AC_MSG_CHECKING(linker --as-needed support)
4401LINK_AS_NEEDED=
4402# Check if linker supports --as-needed and --no-as-needed options
4403if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004404 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004405 LINK_AS_NEEDED=yes
4406fi
4407if test "$LINK_AS_NEEDED" = yes; then
4408 AC_MSG_RESULT(yes)
4409else
4410 AC_MSG_RESULT(no)
4411fi
4412AC_SUBST(LINK_AS_NEEDED)
4413
Bram Moolenaar77c19352012-06-13 19:19:41 +02004414# IBM z/OS reset CFLAGS for config.mk
4415if test "$zOSUnix" = "yes"; then
4416 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4417fi
4418
Bram Moolenaar071d4272004-06-13 20:20:40 +00004419dnl write output files
4420AC_OUTPUT(auto/config.mk:config.mk.in)
4421
4422dnl vim: set sw=2 tw=78 fo+=l: