blob: 598d73c8dfc49678359855770d9510ce03ec643e [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 Moolenaar22640082018-04-19 20:39:41 +020014AC_PROG_CC_C99 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 Moolenaar561f8a52018-04-17 22:02:45 +020032dnl Check that the C99 features that Vim uses are supported:
Bram Moolenaar22640082018-04-19 20:39:41 +020033if test x"$ac_cv_prog_cc_c99" != xno; then
34 dnl If the compiler doesn't explicitly support C99, then check
35 dnl for the specific features Vim uses
36
37 AC_TYPE_LONG_LONG_INT
38 if test "$ac_cv_type_long_long_int" = no; then
39 AC_MSG_FAILURE([Compiler does not support long long int])
40 fi
41
42 AC_MSG_CHECKING([if the compiler supports trailing commas])
43 trailing_commas=no
44 AC_TRY_COMPILE([], [
45 enum {
46 one,
47 };],
48 [AC_MSG_RESULT(yes); trailing_commas=yes],
49 [AC_MSG_RESULT(no)])
50 if test "$trailing_commas" = no; then
51 AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
52 fi
53
54 AC_MSG_CHECKING([if the compiler supports C++ comments])
55 slash_comments=no
56 AC_TRY_COMPILE([],
57 [// C++ comments?],
58 [AC_MSG_RESULT(yes); slash_comments=yes],
59 [AC_MSG_RESULT(no)])
60 if test "$slash_comments" = no; then
61 AC_MSG_FAILURE([Compiler does not support C++ comments])
62 fi
63fi
Bram Moolenaar561f8a52018-04-17 22:02:45 +020064
Bram Moolenaar8f1dde52020-06-05 23:16:29 +020065dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
66dnl "compiled" timestamp in :version's output. Attempt to get the formatted
67dnl date using GNU date syntax, BSD date syntax, and finally falling back to
68dnl just using the current time.
69if test -n "$SOURCE_DATE_EPOCH"; then
70 DATE_FMT="%b %d %Y %H:%M:%S"
71 BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT")
72 AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
73 BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
74 AC_SUBST(BUILD_DATE_MSG)
75fi
76
Bram Moolenaarf788a062011-12-14 20:51:25 +010077dnl Check for the flag that fails if stuff are missing.
78
79AC_MSG_CHECKING(--enable-fail-if-missing argument)
80AC_ARG_ENABLE(fail_if_missing,
81 [ --enable-fail-if-missing Fail if dependencies on additional features
82 specified on the command line are missing.],
83 [fail_if_missing="yes"],
84 [fail_if_missing="no"])
85AC_MSG_RESULT($fail_if_missing)
86
Bram Moolenaard2a05492018-07-27 22:35:15 +020087dnl Keep original value to check later.
88with_x_arg="$with_x"
89
Bram Moolenaar071d4272004-06-13 20:20:40 +000090dnl Set default value for CFLAGS if none is defined or it's empty
91if test -z "$CFLAGS"; then
92 CFLAGS="-O"
93 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
94fi
95if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000096 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020097 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000098 if test "x$gccversion" = "x"; then
99 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +0200100 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 +0000101 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +0000102 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
103 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000104 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
106 else
107 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
108 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
109 CFLAGS="$CFLAGS -fno-strength-reduce"
110 fi
111 fi
112fi
113
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200114dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
115dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
116dnl the version number of the clang in use.
117dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100118AC_MSG_CHECKING(for clang version)
119CLANG_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 +0200120if test x"$CLANG_VERSION_STRING" != x"" ; then
121 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
122 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
123 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
124 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
125 AC_MSG_RESULT($CLANG_VERSION)
126 dnl If you find the same issue with versions earlier than 500.2.75,
127 dnl change the constant 500002075 below appropriately. To get the
128 dnl integer corresponding to a version number, refer to the
129 dnl definition of CLANG_VERSION above.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100130 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200131 if test "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100132 AC_MSG_RESULT(no)
133 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
134 else
135 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200136 fi
137else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100138 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200139fi
140
Bram Moolenaar446cb832008-06-24 21:56:24 +0000141dnl If configure thinks we are cross compiling, there might be something
142dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200143CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000145 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200146 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200148AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000150dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
151dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
153
154if test -f ./toolcheck; then
155 AC_CHECKING(for buggy tools)
156 sh ./toolcheck 1>&AC_FD_MSG
157fi
158
159OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
160
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100161AC_MSG_CHECKING(for Haiku)
162case `uname` in
163 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
164 *) HAIKU=no; AC_MSG_RESULT(no);;
165esac
166
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167dnl If QNX is found, assume we don't want to use Xphoton
168dnl unless it was specifically asked for (--with-x)
169AC_MSG_CHECKING(for QNX)
170case `uname` in
171 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
172 test -z "$with_x" && with_x=no
173 QNX=yes; AC_MSG_RESULT(yes);;
174 *) QNX=no; AC_MSG_RESULT(no);;
175esac
176
177dnl Check for Darwin and MacOS X
178dnl We do a check for MacOS X in the very beginning because there
179dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180AC_MSG_CHECKING([for Darwin (Mac OS X)])
181if test "`(uname) 2>/dev/null`" = Darwin; then
182 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200183 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200184 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
186 AC_MSG_CHECKING(--disable-darwin argument)
187 AC_ARG_ENABLE(darwin,
188 [ --disable-darwin Disable Darwin (Mac OS X) support.],
189 , [enable_darwin="yes"])
190 if test "$enable_darwin" = "yes"; then
191 AC_MSG_RESULT(no)
192 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200193 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194 AC_MSG_RESULT(yes)
195 else
196 AC_MSG_RESULT([no, Darwin support disabled])
197 enable_darwin=no
198 fi
199 else
200 AC_MSG_RESULT([yes, Darwin support excluded])
201 fi
202
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000203 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000204 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000205 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000206 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000207
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100208 AC_MSG_CHECKING(--with-developer-dir argument)
209 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
210 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100211 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100212
213 if test "x$DEVELOPER_DIR" = "x"; then
214 AC_PATH_PROG(XCODE_SELECT, xcode-select)
215 if test "x$XCODE_SELECT" != "x"; then
216 AC_MSG_CHECKING(for developer dir using xcode-select)
217 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
218 AC_MSG_RESULT([$DEVELOPER_DIR])
219 else
220 DEVELOPER_DIR=/Developer
221 fi
222 fi
223
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000224 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000225 AC_MSG_CHECKING(for 10.4 universal SDK)
226 dnl There is a terrible inconsistency (but we appear to get away with it):
227 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
228 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
229 dnl tests using the preprocessor are actually done with the wrong header
230 dnl files. $LDFLAGS is set at the end, because configure uses it together
231 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000232 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000233 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000234 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100235 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000236 AC_TRY_LINK([ ], [ ],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000237 AC_MSG_RESULT(found, will make universal binary),
238
239 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000240 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000241 AC_MSG_CHECKING(if Intel architecture is supported)
242 CPPFLAGS="$CPPFLAGS -arch i386"
243 LDFLAGS="$save_ldflags -arch i386"
244 AC_TRY_LINK([ ], [ ],
245 AC_MSG_RESULT(yes); MACARCH="intel",
246 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000247 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000248 CPPFLAGS="$save_cppflags -arch ppc"
249 LDFLAGS="$save_ldflags -arch ppc"))
250 elif test "x$MACARCH" = "xintel"; then
251 CPPFLAGS="$CPPFLAGS -arch intel"
252 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000253 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000254 CPPFLAGS="$CPPFLAGS -arch ppc"
255 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000256 fi
257
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200259 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200260 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000261 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000262 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100263 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200264 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
266 dnl If Carbon is found, assume we don't want X11
267 dnl unless it was specifically asked for (--with-x)
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000268 dnl or Motif, Athena or GTK GUI is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes)
270 if test "x$CARBON" = "xyes"; then
Bram Moolenaar98921892016-02-23 17:14:37 +0100271 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 +0000272 with_x=no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 fi
274 fi
275 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000276
Bram Moolenaardb552d602006-03-23 22:59:57 +0000277 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000278 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000279 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000280 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
281 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
282 fi
283
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284else
285 AC_MSG_RESULT(no)
286fi
287
Bram Moolenaar39766a72013-11-03 00:41:00 +0100288dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
289dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100290AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100291
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292AC_SUBST(OS_EXTRA_SRC)
293AC_SUBST(OS_EXTRA_OBJ)
294
295dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
296dnl Only when the directory exists and it wasn't there yet.
297dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000298dnl Skip all of this when cross-compiling.
299if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000300 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000301 have_local_include=''
302 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000303 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
304 --without-local-dir do not search /usr/local for local libraries.], [
305 local_dir="$withval"
306 case "$withval" in
307 */*) ;;
308 no)
309 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200310 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000311 have_local_lib=yes
312 ;;
313 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
314 esac
315 AC_MSG_RESULT($local_dir)
316 ], [
317 local_dir=/usr/local
318 AC_MSG_RESULT(Defaulting to $local_dir)
319 ])
320 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000321 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100322 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
323 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000324 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000325 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000327 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
328 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 +0000329 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000330 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000331 fi
332 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000333 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
334 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 +0000335 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000336 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000337 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000338 fi
339fi
340
341AC_MSG_CHECKING(--with-vim-name argument)
342AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
343 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000344 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345AC_SUBST(VIMNAME)
346AC_MSG_CHECKING(--with-ex-name argument)
347AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
348 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
349 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
350AC_SUBST(EXNAME)
351AC_MSG_CHECKING(--with-view-name argument)
352AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
353 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
354 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
355AC_SUBST(VIEWNAME)
356
357AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100358AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
359 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000360 AC_MSG_RESULT(no))
361
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100362if test "X$RUNTIME_GLOBAL" != "X"; then
363 RUNTIME_GLOBAL_AFTER=$(printf -- "$RUNTIME_GLOBAL\\n" | $AWK -F, 'BEGIN { comma=0 } { for (i = NF; i > 0; i--) { if (comma) { printf ",%s/after", $i } else { printf "%s/after", $i; comma=1 } } } END { printf "\n" }')
364 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
365 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
366fi
367
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368AC_MSG_CHECKING(--with-modified-by argument)
369AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
370 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
371 AC_MSG_RESULT(no))
372
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200373dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374AC_MSG_CHECKING(if character set is EBCDIC)
375AC_TRY_COMPILE([ ],
376[ /* TryCompile function for CharSet.
377 Treat any failure as ASCII for compatibility with existing art.
378 Use compile-time rather than run-time tests for cross-compiler
379 tolerance. */
380#if '0'!=240
381make an error "Character set is not EBCDIC"
382#endif ],
383[ # TryCompile action if true
384cf_cv_ebcdic=yes ],
385[ # TryCompile action if false
386cf_cv_ebcdic=no])
387# end of TryCompile ])
388# end of CacheVal CvEbcdic
389AC_MSG_RESULT($cf_cv_ebcdic)
390case "$cf_cv_ebcdic" in #(vi
391 yes) AC_DEFINE(EBCDIC)
392 line_break='"\\n"'
393 ;;
394 *) line_break='"\\012"';;
395esac
396AC_SUBST(line_break)
397
398if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200399dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200400AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401case `uname` in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200402 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403 dnl If using cc the environment variable _CC_CCMODE must be
404 dnl set to "1", so that some compiler extensions are enabled.
405 dnl If using c89 the environment variable is named _CC_C89MODE.
406 dnl Note: compile with c89 never tested.
407 if test "$CC" = "cc"; then
408 ccm="$_CC_CCMODE"
409 ccn="CC"
410 else
411 if test "$CC" = "c89"; then
412 ccm="$_CC_C89MODE"
413 ccn="C89"
414 else
415 ccm=1
416 fi
417 fi
418 if test "$ccm" != "1"; then
419 echo ""
420 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200421 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200422 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423 echo " Do:"
424 echo " export _CC_${ccn}MODE=1"
425 echo " and then call configure again."
426 echo "------------------------------------------"
427 exit 1
428 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200429 # Set CFLAGS for configure process.
430 # This will be reset later for config.mk.
431 # Use haltonmsg to force error for missing H files.
432 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
433 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434 AC_MSG_RESULT(yes)
435 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200436 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437 AC_MSG_RESULT(no)
438 ;;
439esac
440fi
441
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200442dnl Set QUOTESED. Needs additional backslashes on zOS
443if test "$zOSUnix" = "yes"; then
444 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
445else
446 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
447fi
448AC_SUBST(QUOTESED)
449
450
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200451dnl Link with -lsmack for Smack stuff; if not found
452AC_MSG_CHECKING(--disable-smack argument)
453AC_ARG_ENABLE(smack,
454 [ --disable-smack Do not check for Smack support.],
455 , enable_smack="yes")
456if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200457 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200458 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200459else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200460 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200461fi
462if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200463 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
464fi
465if test "$enable_smack" = "yes"; then
466 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
467 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
468 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200469 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200470fi
471if test "$enable_smack" = "yes"; then
472 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200473 [LIBS="$LIBS -lattr"
474 found_smack="yes"
475 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000476fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200478dnl When smack was found don't search for SELinux
479if test "x$found_smack" = "x"; then
480 dnl Link with -lselinux for SELinux stuff; if not found
481 AC_MSG_CHECKING(--disable-selinux argument)
482 AC_ARG_ENABLE(selinux,
483 [ --disable-selinux Do not check for SELinux support.],
484 , enable_selinux="yes")
485 if test "$enable_selinux" = "yes"; then
486 AC_MSG_RESULT(no)
487 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100488 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200489 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100490 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200491 else
492 AC_MSG_RESULT(yes)
493 fi
494fi
495
Bram Moolenaar071d4272004-06-13 20:20:40 +0000496dnl Check user requested features.
497
498AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200499AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000500 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100501 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000502
503dovimdiff=""
504dogvimdiff=""
505case "$features" in
506 tiny) AC_DEFINE(FEAT_TINY) ;;
507 small) AC_DEFINE(FEAT_SMALL) ;;
508 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
509 dogvimdiff="installgvimdiff" ;;
510 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
511 dogvimdiff="installgvimdiff" ;;
512 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
513 dogvimdiff="installgvimdiff" ;;
514 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
515esac
516
517AC_SUBST(dovimdiff)
518AC_SUBST(dogvimdiff)
519
520AC_MSG_CHECKING(--with-compiledby argument)
521AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
522 compiledby="$withval"; AC_MSG_RESULT($withval),
523 compiledby=""; AC_MSG_RESULT(no))
524AC_SUBST(compiledby)
525
526AC_MSG_CHECKING(--disable-xsmp argument)
527AC_ARG_ENABLE(xsmp,
528 [ --disable-xsmp Disable XSMP session management],
529 , enable_xsmp="yes")
530
531if test "$enable_xsmp" = "yes"; then
532 AC_MSG_RESULT(no)
533 AC_MSG_CHECKING(--disable-xsmp-interact argument)
534 AC_ARG_ENABLE(xsmp-interact,
535 [ --disable-xsmp-interact Disable XSMP interaction],
536 , enable_xsmp_interact="yes")
537 if test "$enable_xsmp_interact" = "yes"; then
538 AC_MSG_RESULT(no)
539 AC_DEFINE(USE_XSMP_INTERACT)
540 else
541 AC_MSG_RESULT(yes)
542 fi
543else
544 AC_MSG_RESULT(yes)
545fi
546
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200547dnl Check for Lua feature.
548AC_MSG_CHECKING(--enable-luainterp argument)
549AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200550 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200551 [enable_luainterp="no"])
552AC_MSG_RESULT($enable_luainterp)
553
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200554if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100555 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
556 AC_MSG_ERROR([cannot use Lua with tiny or small features])
557 fi
558
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200559 dnl -- find the lua executable
560 AC_SUBST(vi_cv_path_lua)
561
562 AC_MSG_CHECKING(--with-lua-prefix argument)
563 AC_ARG_WITH(lua_prefix,
564 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
565 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200566 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200567
568 if test "X$with_lua_prefix" != "X"; then
569 vi_cv_path_lua_pfx="$with_lua_prefix"
570 else
571 AC_MSG_CHECKING(LUA_PREFIX environment var)
572 if test "X$LUA_PREFIX" != "X"; then
573 AC_MSG_RESULT("$LUA_PREFIX")
574 vi_cv_path_lua_pfx="$LUA_PREFIX"
575 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200576 AC_MSG_RESULT([not set, default to /usr])
577 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200578 fi
579 fi
580
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200581 AC_MSG_CHECKING(--with-luajit)
582 AC_ARG_WITH(luajit,
583 [ --with-luajit Link with LuaJIT instead of Lua.],
584 [vi_cv_with_luajit="$withval"],
585 [vi_cv_with_luajit="no"])
586 AC_MSG_RESULT($vi_cv_with_luajit)
587
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200588 LUA_INC=
589 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200590 if test "x$vi_cv_with_luajit" != "xno"; then
591 dnl -- try to find LuaJIT executable
592 AC_PATH_PROG(vi_cv_path_luajit, luajit)
593 if test "X$vi_cv_path_luajit" != "X"; then
594 dnl -- find LuaJIT version
595 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100596 [ 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 +0200597 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
598 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
599 vi_cv_path_lua="$vi_cv_path_luajit"
600 vi_cv_version_lua="$vi_cv_version_lua_luajit"
601 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200602 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200603 dnl -- try to find Lua executable
604 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
605 if test "X$vi_cv_path_plain_lua" != "X"; then
606 dnl -- find Lua version
607 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
608 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
609 fi
610 vi_cv_path_lua="$vi_cv_path_plain_lua"
611 vi_cv_version_lua="$vi_cv_version_plain_lua"
612 fi
613 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
614 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 +0100615 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200616 AC_MSG_RESULT(yes)
617 LUA_INC=/luajit-$vi_cv_version_luajit
618 fi
619 fi
620 if test "X$LUA_INC" = "X"; then
621 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100622 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200623 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200624 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200625 AC_MSG_RESULT(no)
626 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 +0100627 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200628 AC_MSG_RESULT(yes)
629 LUA_INC=/lua$vi_cv_version_lua
630 else
631 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200632
633 # Detect moonjit:
634 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
635 lua_suf=/moonjit-2.3
636 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200637 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200638 if test -d "$dir" ; then
639 lua_suf=`basename '$dir'`
640 lua_suf="/$lua_suf"
641 break
642 fi
643 done
644 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
645 if test -f "$inc_path$lua_suf/lua.h"; then
646 AC_MSG_RESULT(yes)
647 LUA_INC=$lua_suf
648 else
649 AC_MSG_RESULT(no)
650 vi_cv_path_lua_pfx=
651 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200652 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200653 fi
654 fi
655 fi
656
657 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200658 if test "x$vi_cv_with_luajit" != "xno"; then
659 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
660 if test "X$multiarch" != "X"; then
661 lib_multiarch="lib/${multiarch}"
662 else
663 lib_multiarch="lib"
664 fi
665 if test "X$vi_cv_version_lua" = "X"; then
666 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
667 else
668 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
669 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200670 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200671 if test "X$LUA_INC" != "X"; then
672 dnl Test alternate location using version
673 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
674 else
675 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
676 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200677 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200678 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200679 lua_ok="yes"
680 else
681 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
682 libs_save=$LIBS
683 LIBS="$LIBS $LUA_LIBS"
684 AC_TRY_LINK(,[ ],
685 AC_MSG_RESULT(yes); lua_ok="yes",
686 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
687 LIBS=$libs_save
688 fi
689 if test "x$lua_ok" = "xyes"; then
690 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
691 LUA_SRC="if_lua.c"
692 LUA_OBJ="objects/if_lua.o"
693 LUA_PRO="if_lua.pro"
694 AC_DEFINE(FEAT_LUA)
695 fi
696 if test "$enable_luainterp" = "dynamic"; then
697 if test "x$vi_cv_with_luajit" != "xno"; then
698 luajit="jit"
699 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200700 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
701 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
702 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200703 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200704 ext="dylib"
705 indexes=""
706 else
707 ext="so"
708 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
709 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
710 if test "X$multiarch" != "X"; then
711 lib_multiarch="lib/${multiarch}"
712 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200713 fi
714 dnl Determine the sover for the current version, but fallback to
715 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200716 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200717 for subdir in "${lib_multiarch}" lib64 lib; do
718 if test -z "$subdir"; then
719 continue
720 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200721 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
722 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
723 for i in $indexes ""; do
724 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200725 sover2="$i"
726 break 3
727 fi
728 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100729 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200730 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200731 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200732 if test "X$sover" = "X"; then
733 AC_MSG_RESULT(no)
734 lua_ok="no"
735 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
736 else
737 AC_MSG_RESULT(yes)
738 lua_ok="yes"
739 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
740 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200741 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200742 AC_DEFINE(DYNAMIC_LUA)
743 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200744 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200745 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200746 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200747 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200748 test "`(uname -m) 2>/dev/null`" = "x86_64"; then
749 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
750 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
751 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200752 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200753 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100754 AC_MSG_ERROR([could not configure lua])
755 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200756 AC_SUBST(LUA_SRC)
757 AC_SUBST(LUA_OBJ)
758 AC_SUBST(LUA_PRO)
759 AC_SUBST(LUA_LIBS)
760 AC_SUBST(LUA_CFLAGS)
761fi
762
763
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000764dnl Check for MzScheme feature.
765AC_MSG_CHECKING(--enable-mzschemeinterp argument)
766AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200767 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000768 [enable_mzschemeinterp="no"])
769AC_MSG_RESULT($enable_mzschemeinterp)
770
771if test "$enable_mzschemeinterp" = "yes"; then
772 dnl -- find the mzscheme executable
773 AC_SUBST(vi_cv_path_mzscheme)
774
775 AC_MSG_CHECKING(--with-plthome argument)
776 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000777 [ --with-plthome=PLTHOME Use PLTHOME.],
778 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000779 with_plthome="";AC_MSG_RESULT("no"))
780
781 if test "X$with_plthome" != "X"; then
782 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100783 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000784 else
785 AC_MSG_CHECKING(PLTHOME environment var)
786 if test "X$PLTHOME" != "X"; then
787 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000788 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100789 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000790 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000791 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000792 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000793 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000794
795 dnl resolve symbolic link, the executable is often elsewhere and there
796 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000797 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000798 lsout=`ls -l $vi_cv_path_mzscheme`
799 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
800 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
801 fi
802 fi
803
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000804 if test "X$vi_cv_path_mzscheme" != "X"; then
805 dnl -- find where MzScheme thinks it was installed
806 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000807 dnl different versions of MzScheme differ in command line processing
808 dnl use universal approach
809 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000810 (build-path (call-with-values \
811 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000812 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
813 dnl Remove a trailing slash
814 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
815 sed -e 's+/$++'` ])
816 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000817 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000818 fi
819 fi
820
821 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100822 AC_MSG_CHECKING(for racket include directory)
823 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
824 if test "X$SCHEME_INC" != "X"; then
825 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000826 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100827 AC_MSG_RESULT(not found)
828 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
829 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
830 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000831 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000832 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000833 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100834 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
835 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000836 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100837 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000838 else
839 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100840 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
841 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100842 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100843 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100844 else
845 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100846 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
847 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100848 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100849 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100850 else
851 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100852 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
853 if test -f /usr/include/racket/scheme.h; then
854 AC_MSG_RESULT(yes)
855 SCHEME_INC=/usr/include/racket
856 else
857 AC_MSG_RESULT(no)
858 vi_cv_path_mzscheme_pfx=
859 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100860 fi
861 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000862 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000863 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000864 fi
865 fi
866
867 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100868
869 AC_MSG_CHECKING(for racket lib directory)
870 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
871 if test "X$SCHEME_LIB" != "X"; then
872 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000873 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100874 AC_MSG_RESULT(not found)
875 fi
876
877 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
878 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200879 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100880 MZSCHEME_LIBS="-framework Racket"
881 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
882 elif test -f "${path}/libmzscheme3m.a"; then
883 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
884 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
885 elif test -f "${path}/libracket3m.a"; then
886 MZSCHEME_LIBS="${path}/libracket3m.a"
887 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
888 elif test -f "${path}/libracket.a"; then
889 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
890 elif test -f "${path}/libmzscheme.a"; then
891 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
892 else
893 dnl Using shared objects
894 if test -f "${path}/libmzscheme3m.so"; then
895 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
896 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
897 elif test -f "${path}/libracket3m.so"; then
898 MZSCHEME_LIBS="-L${path} -lracket3m"
899 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
900 elif test -f "${path}/libracket.so"; then
901 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
902 else
903 dnl try next until last
904 if test "$path" != "$SCHEME_LIB"; then
905 continue
906 fi
907 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
908 fi
909 if test "$GCC" = yes; then
910 dnl Make Vim remember the path to the library. For when it's not in
911 dnl $LD_LIBRARY_PATH.
912 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
913 elif test "`(uname) 2>/dev/null`" = SunOS &&
914 uname -r | grep '^5' >/dev/null; then
915 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
916 fi
917 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000918 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100919 if test "X$MZSCHEME_LIBS" != "X"; then
920 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000921 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100922 done
923
924 AC_MSG_CHECKING([if racket requires -pthread])
925 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
926 AC_MSG_RESULT(yes)
927 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
928 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
929 else
930 AC_MSG_RESULT(no)
931 fi
932
933 AC_MSG_CHECKING(for racket config directory)
934 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
935 if test "X$SCHEME_CONFIGDIR" != "X"; then
936 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
937 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
938 else
939 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000940 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100941
942 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100943 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))))'`
944 if test "X$SCHEME_COLLECTS" = "X"; then
945 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
946 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100947 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100948 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
949 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100950 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100951 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
952 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
953 else
954 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
955 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
956 fi
Bram Moolenaar75676462013-01-30 14:55:42 +0100957 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100958 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100959 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000960 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100961 if test "X$SCHEME_COLLECTS" != "X" ; then
962 AC_MSG_RESULT(${SCHEME_COLLECTS})
963 else
964 AC_MSG_RESULT(not found)
965 fi
966
967 AC_MSG_CHECKING(for mzscheme_base.c)
968 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000969 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100970 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
971 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100972 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100973 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100974 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100975 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
976 MZSCHEME_MOD="++lib scheme/base"
977 else
978 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
979 MZSCHEME_EXTRA="mzscheme_base.c"
980 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
981 MZSCHEME_MOD=""
982 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100983 fi
984 fi
985 if test "X$MZSCHEME_EXTRA" != "X" ; then
986 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000987 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100988 AC_MSG_RESULT(needed)
989 else
990 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000991 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100992
Bram Moolenaar9e902192013-07-17 18:58:11 +0200993 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
994 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
995
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000996 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100997 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200998
999 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1000 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1001 cflags_save=$CFLAGS
1002 libs_save=$LIBS
1003 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1004 LIBS="$LIBS $MZSCHEME_LIBS"
1005 AC_TRY_LINK(,[ ],
1006 AC_MSG_RESULT(yes); mzs_ok=yes,
1007 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1008 CFLAGS=$cflags_save
1009 LIBS=$libs_save
1010 if test $mzs_ok = yes; then
1011 MZSCHEME_SRC="if_mzsch.c"
1012 MZSCHEME_OBJ="objects/if_mzsch.o"
1013 MZSCHEME_PRO="if_mzsch.pro"
1014 AC_DEFINE(FEAT_MZSCHEME)
1015 else
1016 MZSCHEME_CFLAGS=
1017 MZSCHEME_LIBS=
1018 MZSCHEME_EXTRA=
1019 MZSCHEME_MZC=
1020 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001021 fi
1022 AC_SUBST(MZSCHEME_SRC)
1023 AC_SUBST(MZSCHEME_OBJ)
1024 AC_SUBST(MZSCHEME_PRO)
1025 AC_SUBST(MZSCHEME_LIBS)
1026 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001027 AC_SUBST(MZSCHEME_EXTRA)
1028 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001029fi
1030
1031
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032AC_MSG_CHECKING(--enable-perlinterp argument)
1033AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001034 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001035 [enable_perlinterp="no"])
1036AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001037if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001038 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1039 AC_MSG_ERROR([cannot use Perl with tiny or small features])
1040 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001041 AC_SUBST(vi_cv_path_perl)
1042 AC_PATH_PROG(vi_cv_path_perl, perl)
1043 if test "X$vi_cv_path_perl" != "X"; then
1044 AC_MSG_CHECKING(Perl version)
1045 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1046 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001047 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001048 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1049 badthreads=no
1050 else
1051 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1052 eval `$vi_cv_path_perl -V:use5005threads`
1053 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1054 badthreads=no
1055 else
1056 badthreads=yes
1057 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1058 fi
1059 else
1060 badthreads=yes
1061 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1062 fi
1063 fi
1064 if test $badthreads = no; then
1065 AC_MSG_RESULT(OK)
1066 eval `$vi_cv_path_perl -V:shrpenv`
1067 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1068 shrpenv=""
1069 fi
1070 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1071 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001072 vi_cv_perl_extutils=unknown_perl_extutils_path
1073 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1074 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1075 if test -f "$xsubpp_path"; then
1076 vi_cv_perl_xsubpp="$xsubpp_path"
1077 fi
1078 done
1079 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001081 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001082 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001083 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001084 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001085 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1086 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001087 -e 's/-pipe //' \
1088 -e 's/-W[[^ ]]*//g' \
1089 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001090 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1091 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1092 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1093 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1094 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1095 dnl a test in configure may fail because of that.
1096 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1097 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1098
1099 dnl check that compiling a simple program still works with the flags
1100 dnl added for Perl.
1101 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1102 cflags_save=$CFLAGS
1103 libs_save=$LIBS
1104 ldflags_save=$LDFLAGS
1105 CFLAGS="$CFLAGS $perlcppflags"
1106 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001107 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001108 LDFLAGS="$perlldflags $LDFLAGS"
1109 AC_TRY_LINK(,[ ],
1110 AC_MSG_RESULT(yes); perl_ok=yes,
1111 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1112 CFLAGS=$cflags_save
1113 LIBS=$libs_save
1114 LDFLAGS=$ldflags_save
1115 if test $perl_ok = yes; then
1116 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001117 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001118 fi
1119 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001120 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001121 LDFLAGS="$perlldflags $LDFLAGS"
1122 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001123 fi
1124 PERL_LIBS=$perllibs
1125 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1126 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1127 PERL_PRO="if_perl.pro if_perlsfio.pro"
1128 AC_DEFINE(FEAT_PERL)
1129 fi
1130 fi
1131 else
1132 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1133 fi
1134 fi
1135
Bram Moolenaard0573012017-10-28 21:11:06 +02001136 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001137 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001138 dir=/System/Library/Perl
1139 darwindir=$dir/darwin
1140 if test -d $darwindir; then
1141 PERL=/usr/bin/perl
1142 else
1143 dnl Mac OS X 10.3
1144 dir=/System/Library/Perl/5.8.1
1145 darwindir=$dir/darwin-thread-multi-2level
1146 if test -d $darwindir; then
1147 PERL=/usr/bin/perl
1148 fi
1149 fi
1150 if test -n "$PERL"; then
1151 PERL_DIR="$dir"
1152 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1153 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1154 PERL_LIBS="-L$darwindir/CORE -lperl"
1155 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001156 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1157 dnl be included if requested by passing --with-mac-arch to
1158 dnl configure, so strip these flags first (if present)
1159 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1160 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 +00001161 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001162 if test "$enable_perlinterp" = "dynamic"; then
1163 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1164 AC_DEFINE(DYNAMIC_PERL)
1165 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1166 fi
1167 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001168
1169 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1170 AC_MSG_ERROR([could not configure perl])
1171 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172fi
1173AC_SUBST(shrpenv)
1174AC_SUBST(PERL_SRC)
1175AC_SUBST(PERL_OBJ)
1176AC_SUBST(PERL_PRO)
1177AC_SUBST(PERL_CFLAGS)
1178AC_SUBST(PERL_LIBS)
1179
1180AC_MSG_CHECKING(--enable-pythoninterp argument)
1181AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001182 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001183 [enable_pythoninterp="no"])
1184AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001185if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001186 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1187 AC_MSG_ERROR([cannot use Python with tiny or small features])
1188 fi
1189
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001191 AC_MSG_CHECKING(--with-python-command argument)
1192 AC_SUBST(vi_cv_path_python)
1193 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1194 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1195 AC_MSG_RESULT(no))
1196
1197 if test "X$vi_cv_path_python" = "X"; then
1198 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1199 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001200 if test "X$vi_cv_path_python" != "X"; then
1201
1202 dnl -- get its version number
1203 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1204 [[vi_cv_var_python_version=`
1205 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1206 ]])
1207
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001208 dnl -- it must be at least version 2.3
1209 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001210 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001211 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001212 then
1213 AC_MSG_RESULT(yep)
1214
1215 dnl -- find where python thinks it was installed
1216 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1217 [ vi_cv_path_python_pfx=`
1218 ${vi_cv_path_python} -c \
1219 "import sys; print sys.prefix"` ])
1220
1221 dnl -- and where it thinks it runs
1222 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1223 [ vi_cv_path_python_epfx=`
1224 ${vi_cv_path_python} -c \
1225 "import sys; print sys.exec_prefix"` ])
1226
1227 dnl -- python's internal library path
1228
1229 AC_CACHE_VAL(vi_cv_path_pythonpath,
1230 [ vi_cv_path_pythonpath=`
1231 unset PYTHONPATH;
1232 ${vi_cv_path_python} -c \
1233 "import sys, string; print string.join(sys.path,':')"` ])
1234
1235 dnl -- where the Python implementation library archives are
1236
1237 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001238 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001239 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001240
1241 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1242 [
1243 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001244 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1245 if test -d "$d" && test -f "$d/config.c"; then
1246 vi_cv_path_python_conf="$d"
1247 else
1248 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1249 for subdir in lib64 lib share; do
1250 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1251 if test -d "$d" && test -f "$d/config.c"; then
1252 vi_cv_path_python_conf="$d"
1253 fi
1254 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001256 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001257 ])
1258
1259 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1260
1261 if test "X$PYTHON_CONFDIR" = "X"; then
1262 AC_MSG_RESULT([can't find it!])
1263 else
1264
1265 dnl -- we need to examine Python's config/Makefile too
1266 dnl see what the interpreter is built from
1267 AC_CACHE_VAL(vi_cv_path_python_plibs,
1268 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001269 pwd=`pwd`
1270 tmp_mkf="$pwd/config-PyMake$$"
1271 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001272__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001273 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001274 @echo "python_LIBS='$(LIBS)'"
1275 @echo "python_SYSLIBS='$(SYSLIBS)'"
1276 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001277 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001278 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001279 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1280 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1281 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282eof
1283 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001284 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1285 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001286 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001287 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1288 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001289 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1290 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1291 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001292 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001293 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001294 dnl -- Check if the path contained in python_LINKFORSHARED is
1295 dnl usable for vim build. If not, make and try other
1296 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001297 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001298 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1299 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1300 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1301 dnl -- The path looks relative. Guess the absolute one using
1302 dnl the prefix and try that.
1303 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1304 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1305 dnl -- A last resort.
1306 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1307 dnl -- No check is done. The last word is left to the
1308 dnl "sanity" test on link flags that follows shortly.
1309 fi
1310 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1311 fi
1312 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001313 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 +00001314 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1315 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1316 fi
1317 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001318 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001319 [
1320 if test "X$python_DLLLIBRARY" != "X"; then
1321 vi_cv_dll_name_python="$python_DLLLIBRARY"
1322 else
1323 vi_cv_dll_name_python="$python_INSTSONAME"
1324 fi
1325 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326
1327 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1328 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001329 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001330 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001331 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 +00001332 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001333 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001334 dnl Define PYTHON_HOME if --with-python-config-dir was used
1335 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1336
1337 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001339 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001340
1341 dnl On FreeBSD linking with "-pthread" is required to use threads.
1342 dnl _THREAD_SAFE must be used for compiling then.
1343 dnl The "-pthread" is added to $LIBS, so that the following check for
1344 dnl sigaltstack() will look in libc_r (it's there in libc!).
1345 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1346 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1347 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1348 AC_MSG_CHECKING([if -pthread should be used])
1349 threadsafe_flag=
1350 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001351 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001352 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001353 test "$GCC" = yes && threadsafe_flag="-pthread"
1354 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1355 threadsafe_flag="-D_THREAD_SAFE"
1356 thread_lib="-pthread"
1357 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001358 if test "`(uname) 2>/dev/null`" = SunOS; then
1359 threadsafe_flag="-pthreads"
1360 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361 fi
1362 libs_save_old=$LIBS
1363 if test -n "$threadsafe_flag"; then
1364 cflags_save=$CFLAGS
1365 CFLAGS="$CFLAGS $threadsafe_flag"
1366 LIBS="$LIBS $thread_lib"
1367 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001368 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001369 AC_MSG_RESULT(no); LIBS=$libs_save_old
1370 )
1371 CFLAGS=$cflags_save
1372 else
1373 AC_MSG_RESULT(no)
1374 fi
1375
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001376 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001377 dnl added for Python.
1378 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1379 cflags_save=$CFLAGS
1380 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001381 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001382 LIBS="$LIBS $PYTHON_LIBS"
1383 AC_TRY_LINK(,[ ],
1384 AC_MSG_RESULT(yes); python_ok=yes,
1385 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1386 CFLAGS=$cflags_save
1387 LIBS=$libs_save
1388 if test $python_ok = yes; then
1389 AC_DEFINE(FEAT_PYTHON)
1390 else
1391 LIBS=$libs_save_old
1392 PYTHON_SRC=
1393 PYTHON_OBJ=
1394 PYTHON_LIBS=
1395 PYTHON_CFLAGS=
1396 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001397 fi
1398 else
1399 AC_MSG_RESULT(too old)
1400 fi
1401 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001402
1403 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1404 AC_MSG_ERROR([could not configure python])
1405 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001406fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001407
Bram Moolenaar071d4272004-06-13 20:20:40 +00001408AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001409AC_SUBST(PYTHON_CFLAGS)
1410AC_SUBST(PYTHON_SRC)
1411AC_SUBST(PYTHON_OBJ)
1412
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001413
1414AC_MSG_CHECKING(--enable-python3interp argument)
1415AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001416 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001417 [enable_python3interp="no"])
1418AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001419if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001420 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1421 AC_MSG_ERROR([cannot use Python with tiny or small features])
1422 fi
1423
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001424 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001425 AC_MSG_CHECKING(--with-python3-command argument)
1426 AC_SUBST(vi_cv_path_python3)
1427 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1428 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1429 AC_MSG_RESULT(no))
1430
1431 if test "X$vi_cv_path_python3" = "X"; then
1432 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1433 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001434 if test "X$vi_cv_path_python3" != "X"; then
1435
1436 dnl -- get its version number
1437 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1438 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001439 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001440 ]])
1441
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001442 dnl -- it must be at least version 3
1443 AC_MSG_CHECKING(Python is 3.0 or better)
1444 if ${vi_cv_path_python3} -c \
1445 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1446 then
1447 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001448
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001449 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1450 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001451 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001452 vi_cv_var_python3_abiflags=
1453 if ${vi_cv_path_python3} -c \
1454 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1455 then
1456 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1457 "import sys; print(sys.abiflags)"`
1458 fi ])
1459
1460 dnl -- find where python3 thinks it was installed
1461 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1462 [ vi_cv_path_python3_pfx=`
1463 ${vi_cv_path_python3} -c \
1464 "import sys; print(sys.prefix)"` ])
1465
1466 dnl -- and where it thinks it runs
1467 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1468 [ vi_cv_path_python3_epfx=`
1469 ${vi_cv_path_python3} -c \
1470 "import sys; print(sys.exec_prefix)"` ])
1471
1472 dnl -- python3's internal library path
1473
1474 AC_CACHE_VAL(vi_cv_path_python3path,
1475 [ vi_cv_path_python3path=`
1476 unset PYTHONPATH;
1477 ${vi_cv_path_python3} -c \
1478 "import sys, string; print(':'.join(sys.path))"` ])
1479
1480 dnl -- where the Python implementation library archives are
1481
1482 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001483 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001484 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001485
1486 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1487 [
1488 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001489 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001490 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1491 if test -d "$d" && test -f "$d/config.c"; then
1492 vi_cv_path_python3_conf="$d"
1493 else
1494 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1495 for subdir in lib64 lib share; do
1496 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1497 if test -d "$d" && test -f "$d/config.c"; then
1498 vi_cv_path_python3_conf="$d"
1499 fi
1500 done
1501 done
1502 fi
1503 ])
1504
1505 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1506
1507 if test "X$PYTHON3_CONFDIR" = "X"; then
1508 AC_MSG_RESULT([can't find it!])
1509 else
1510
1511 dnl -- we need to examine Python's config/Makefile too
1512 dnl see what the interpreter is built from
1513 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1514 [
1515 pwd=`pwd`
1516 tmp_mkf="$pwd/config-PyMake$$"
1517 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001518__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001519 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001520 @echo "python3_LIBS='$(LIBS)'"
1521 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001522 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001523 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001524eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001525 dnl -- delete the lines from make about Entering/Leaving directory
1526 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1527 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001528 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 +02001529 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1530 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1531 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1532 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1533 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001534 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001535 [
1536 if test "X$python3_DLLLIBRARY" != "X"; then
1537 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1538 else
1539 vi_cv_dll_name_python3="$python3_INSTSONAME"
1540 fi
1541 ])
1542
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001543 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1544 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001545 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 +02001546 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001547 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 +02001548 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001549 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001550 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1551 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1552 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001553 PYTHON3_SRC="if_python3.c"
1554 PYTHON3_OBJ="objects/if_python3.o"
1555
1556 dnl On FreeBSD linking with "-pthread" is required to use threads.
1557 dnl _THREAD_SAFE must be used for compiling then.
1558 dnl The "-pthread" is added to $LIBS, so that the following check for
1559 dnl sigaltstack() will look in libc_r (it's there in libc!).
1560 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1561 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1562 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1563 AC_MSG_CHECKING([if -pthread should be used])
1564 threadsafe_flag=
1565 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001566 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001567 if test "`(uname) 2>/dev/null`" != Darwin; then
1568 test "$GCC" = yes && threadsafe_flag="-pthread"
1569 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1570 threadsafe_flag="-D_THREAD_SAFE"
1571 thread_lib="-pthread"
1572 fi
1573 if test "`(uname) 2>/dev/null`" = SunOS; then
1574 threadsafe_flag="-pthreads"
1575 fi
1576 fi
1577 libs_save_old=$LIBS
1578 if test -n "$threadsafe_flag"; then
1579 cflags_save=$CFLAGS
1580 CFLAGS="$CFLAGS $threadsafe_flag"
1581 LIBS="$LIBS $thread_lib"
1582 AC_TRY_LINK(,[ ],
1583 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1584 AC_MSG_RESULT(no); LIBS=$libs_save_old
1585 )
1586 CFLAGS=$cflags_save
1587 else
1588 AC_MSG_RESULT(no)
1589 fi
1590
1591 dnl check that compiling a simple program still works with the flags
1592 dnl added for Python.
1593 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1594 cflags_save=$CFLAGS
1595 libs_save=$LIBS
1596 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1597 LIBS="$LIBS $PYTHON3_LIBS"
1598 AC_TRY_LINK(,[ ],
1599 AC_MSG_RESULT(yes); python3_ok=yes,
1600 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1601 CFLAGS=$cflags_save
1602 LIBS=$libs_save
1603 if test "$python3_ok" = yes; then
1604 AC_DEFINE(FEAT_PYTHON3)
1605 else
1606 LIBS=$libs_save_old
1607 PYTHON3_SRC=
1608 PYTHON3_OBJ=
1609 PYTHON3_LIBS=
1610 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001611 fi
1612 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001613 else
1614 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001615 fi
1616 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001617 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1618 AC_MSG_ERROR([could not configure python3])
1619 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001620fi
1621
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001622AC_SUBST(PYTHON3_LIBS)
1623AC_SUBST(PYTHON3_CFLAGS)
1624AC_SUBST(PYTHON3_SRC)
1625AC_SUBST(PYTHON3_OBJ)
1626
1627dnl if python2.x and python3.x are enabled one can only link in code
1628dnl with dlopen(), dlsym(), dlclose()
1629if test "$python_ok" = yes && test "$python3_ok" = yes; then
1630 AC_DEFINE(DYNAMIC_PYTHON)
1631 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001632 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001633 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001634 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001635 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001636 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001637 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001638 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001639 #include <dlfcn.h>
1640 /* If this program fails, then RTLD_GLOBAL is needed.
1641 * RTLD_GLOBAL will be used and then it is not possible to
1642 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001643 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001644 */
1645
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001646 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001647 {
1648 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001649 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001650 if (pylib != 0)
1651 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001652 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001653 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1654 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1655 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001656 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001657 (*init)();
1658 needed = (*simple)("import termios") == -1;
1659 (*final)();
1660 dlclose(pylib);
1661 }
1662 return !needed;
1663 }
1664
1665 int main(int argc, char** argv)
1666 {
1667 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001668 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001669 not_needed = 1;
1670 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001671 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001672 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001673
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001674 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001675 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001676
1677 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1678 cflags_save=$CFLAGS
1679 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001680 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001681 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001682 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001683 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001684 #include <dlfcn.h>
1685 #include <wchar.h>
1686 /* If this program fails, then RTLD_GLOBAL is needed.
1687 * RTLD_GLOBAL will be used and then it is not possible to
1688 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001689 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001690 */
1691
1692 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1693 {
1694 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001695 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001696 if (pylib != 0)
1697 {
1698 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1699 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1700 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1701 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1702 (*pfx)(prefix);
1703 (*init)();
1704 needed = (*simple)("import termios") == -1;
1705 (*final)();
1706 dlclose(pylib);
1707 }
1708 return !needed;
1709 }
1710
1711 int main(int argc, char** argv)
1712 {
1713 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001714 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001715 not_needed = 1;
1716 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001717 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001718 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1719
1720 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001721 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001722
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001723 PYTHON_SRC="if_python.c"
1724 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001725 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001726 PYTHON_LIBS=
1727 PYTHON3_SRC="if_python3.c"
1728 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001729 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001730 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001731elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1732 AC_DEFINE(DYNAMIC_PYTHON)
1733 PYTHON_SRC="if_python.c"
1734 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001735 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001736 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001737elif test "$python_ok" = yes; then
1738 dnl Check that adding -fPIE works. It may be needed when using a static
1739 dnl Python library.
1740 AC_MSG_CHECKING([if -fPIE can be added for Python])
1741 cflags_save=$CFLAGS
1742 libs_save=$LIBS
1743 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1744 LIBS="$LIBS $PYTHON_LIBS"
1745 AC_TRY_LINK(,[ ],
1746 AC_MSG_RESULT(yes); fpie_ok=yes,
1747 AC_MSG_RESULT(no); fpie_ok=no)
1748 CFLAGS=$cflags_save
1749 LIBS=$libs_save
1750 if test $fpie_ok = yes; then
1751 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1752 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001753elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1754 AC_DEFINE(DYNAMIC_PYTHON3)
1755 PYTHON3_SRC="if_python3.c"
1756 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001757 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001758 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001759elif test "$python3_ok" = yes; then
1760 dnl Check that adding -fPIE works. It may be needed when using a static
1761 dnl Python library.
1762 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1763 cflags_save=$CFLAGS
1764 libs_save=$LIBS
1765 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1766 LIBS="$LIBS $PYTHON3_LIBS"
1767 AC_TRY_LINK(,[ ],
1768 AC_MSG_RESULT(yes); fpie_ok=yes,
1769 AC_MSG_RESULT(no); fpie_ok=no)
1770 CFLAGS=$cflags_save
1771 LIBS=$libs_save
1772 if test $fpie_ok = yes; then
1773 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1774 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001775fi
1776
Bram Moolenaar071d4272004-06-13 20:20:40 +00001777AC_MSG_CHECKING(--enable-tclinterp argument)
1778AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001779 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780 [enable_tclinterp="no"])
1781AC_MSG_RESULT($enable_tclinterp)
1782
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001783if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001784
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001785 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001786 AC_MSG_CHECKING(--with-tclsh argument)
1787 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1788 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001789 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001790 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1791 AC_SUBST(vi_cv_path_tcl)
1792
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001793 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1794 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1795 tclsh_name="tclsh8.4"
1796 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1797 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001798 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001799 tclsh_name="tclsh8.2"
1800 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1801 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001802 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1803 tclsh_name="tclsh8.0"
1804 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1805 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001806 dnl still didn't find it, try without version number
1807 if test "X$vi_cv_path_tcl" = "X"; then
1808 tclsh_name="tclsh"
1809 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1810 fi
1811 if test "X$vi_cv_path_tcl" != "X"; then
1812 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001813 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001814 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1815 AC_MSG_RESULT($tclver - OK);
1816 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 +01001817 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001818
1819 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001820 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001821 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 +00001822 else
1823 dnl For Mac OS X 10.3, use the OS-provided framework location
1824 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1825 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001826 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001827 for try in $tclinc; do
1828 if test -f "$try/tcl.h"; then
1829 AC_MSG_RESULT($try/tcl.h)
1830 TCL_INC=$try
1831 break
1832 fi
1833 done
1834 if test -z "$TCL_INC"; then
1835 AC_MSG_RESULT(<not found>)
1836 SKIP_TCL=YES
1837 fi
1838 if test -z "$SKIP_TCL"; then
1839 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001840 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001841 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001842 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001843 else
1844 dnl For Mac OS X 10.3, use the OS-provided framework location
1845 tclcnf="/System/Library/Frameworks/Tcl.framework"
1846 fi
1847 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001848 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001850 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001851 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001852 if test "$enable_tclinterp" = "dynamic"; then
1853 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1854 else
1855 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1856 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001857 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001858 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001859 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 +00001860 break
1861 fi
1862 done
1863 if test -z "$TCL_LIBS"; then
1864 AC_MSG_RESULT(<not found>)
1865 AC_MSG_CHECKING(for Tcl library by myself)
1866 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001867 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001868 for ext in .so .a ; do
1869 for ver in "" $tclver ; do
1870 for try in $tcllib ; do
1871 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001872 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001873 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001874 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001875 if test "`(uname) 2>/dev/null`" = SunOS &&
1876 uname -r | grep '^5' >/dev/null; then
1877 TCL_LIBS="$TCL_LIBS -R $try"
1878 fi
1879 break 3
1880 fi
1881 done
1882 done
1883 done
1884 if test -z "$TCL_LIBS"; then
1885 AC_MSG_RESULT(<not found>)
1886 SKIP_TCL=YES
1887 fi
1888 fi
1889 if test -z "$SKIP_TCL"; then
1890 AC_DEFINE(FEAT_TCL)
1891 TCL_SRC=if_tcl.c
1892 TCL_OBJ=objects/if_tcl.o
1893 TCL_PRO=if_tcl.pro
1894 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1895 fi
1896 fi
1897 else
1898 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1899 fi
1900 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001901 if test "$enable_tclinterp" = "dynamic"; then
1902 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1903 AC_DEFINE(DYNAMIC_TCL)
1904 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1905 fi
1906 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001907 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1908 AC_MSG_ERROR([could not configure Tcl])
1909 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001910fi
1911AC_SUBST(TCL_SRC)
1912AC_SUBST(TCL_OBJ)
1913AC_SUBST(TCL_PRO)
1914AC_SUBST(TCL_CFLAGS)
1915AC_SUBST(TCL_LIBS)
1916
1917AC_MSG_CHECKING(--enable-rubyinterp argument)
1918AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001919 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001920 [enable_rubyinterp="no"])
1921AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001922if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001923 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1924 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1925 fi
1926
Bram Moolenaar165641d2010-02-17 16:23:09 +01001927 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001928 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001929 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1930 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1931 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001932 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001933 if test "X$vi_cv_path_ruby" != "X"; then
1934 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001935 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 +00001936 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001937 AC_MSG_CHECKING(Ruby rbconfig)
1938 ruby_rbconfig="RbConfig"
1939 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1940 ruby_rbconfig="Config"
1941 fi
1942 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001943 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001944 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 +00001945 if test "X$rubyhdrdir" != "X"; then
1946 AC_MSG_RESULT($rubyhdrdir)
1947 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001948 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1949 if test -d "$rubyarchdir"; then
1950 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001951 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001952 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001953 if test "X$rubyversion" = "X"; then
1954 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1955 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001956 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001957 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001958 if test "X$rubylibs" != "X"; then
1959 RUBY_LIBS="$rubylibs"
1960 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001961 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1962 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001963 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001964 if test -f "$rubylibdir/$librubya"; then
1965 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001966 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1967 elif test "$librubyarg" = "libruby.a"; then
1968 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1969 librubyarg="-lruby"
1970 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001971 fi
1972
1973 if test "X$librubyarg" != "X"; then
1974 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1975 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001976 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001977 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001978 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1979 dnl be included if requested by passing --with-mac-arch to
1980 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001981 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001982 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001983 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001984 LDFLAGS="$rubyldflags $LDFLAGS"
1985 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001986 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001987 fi
1988 RUBY_SRC="if_ruby.c"
1989 RUBY_OBJ="objects/if_ruby.o"
1990 RUBY_PRO="if_ruby.pro"
1991 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001992 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02001993 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02001994 if test -z "$libruby_soname"; then
1995 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
1996 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001997 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01001998 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001999 RUBY_LIBS=
2000 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002001 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002002 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002003 fi
2004 else
2005 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2006 fi
2007 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002008
2009 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2010 AC_MSG_ERROR([could not configure Ruby])
2011 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002012fi
2013AC_SUBST(RUBY_SRC)
2014AC_SUBST(RUBY_OBJ)
2015AC_SUBST(RUBY_PRO)
2016AC_SUBST(RUBY_CFLAGS)
2017AC_SUBST(RUBY_LIBS)
2018
2019AC_MSG_CHECKING(--enable-cscope argument)
2020AC_ARG_ENABLE(cscope,
2021 [ --enable-cscope Include cscope interface.], ,
2022 [enable_cscope="no"])
2023AC_MSG_RESULT($enable_cscope)
2024if test "$enable_cscope" = "yes"; then
2025 AC_DEFINE(FEAT_CSCOPE)
2026fi
2027
Bram Moolenaar071d4272004-06-13 20:20:40 +00002028AC_MSG_CHECKING(--disable-netbeans argument)
2029AC_ARG_ENABLE(netbeans,
2030 [ --disable-netbeans Disable NetBeans integration support.],
2031 , [enable_netbeans="yes"])
2032if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002033 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2034 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2035 enable_netbeans="no"
2036 else
2037 AC_MSG_RESULT(no)
2038 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002039else
2040 AC_MSG_RESULT(yes)
2041fi
2042
2043AC_MSG_CHECKING(--disable-channel argument)
2044AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002045 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002046 , [enable_channel="yes"])
2047if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002048 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2049 AC_MSG_RESULT([cannot use channels with tiny or small features])
2050 enable_channel="no"
2051 else
2052 AC_MSG_RESULT(no)
2053 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002054else
2055 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002056 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002057 enable_netbeans="no"
2058 else
2059 AC_MSG_RESULT(yes)
2060 fi
2061fi
2062
Bram Moolenaar16435482016-01-24 21:31:54 +01002063if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002064 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002065 if test "x$HAIKU" = "xyes"; then
2066 AC_CHECK_LIB(network, socket)
2067 else
2068 AC_CHECK_LIB(socket, socket)
2069 fi
2070
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002071 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
2072 [AC_TRY_LINK([
2073#include <stdio.h>
2074#include <stdlib.h>
2075#include <stdarg.h>
2076#include <fcntl.h>
2077#include <netdb.h>
2078#include <netinet/in.h>
2079#include <errno.h>
2080#include <sys/types.h>
2081#include <sys/socket.h>
2082 /* Check bitfields */
2083 struct nbbuf {
2084 unsigned int initDone:1;
2085 unsigned short signmaplen;
2086 };
2087 ], [
2088 /* Check creating a socket. */
2089 struct sockaddr_in server;
2090 struct addrinfo *res;
2091 (void)socket(AF_INET, SOCK_STREAM, 0);
2092 (void)htons(100);
2093 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2094 if (errno == ECONNREFUSED)
2095 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2096 (void)freeaddrinfo(res);
2097 ],
2098 [vim_cv_ipv6_networking="yes"],
2099 [vim_cv_ipv6_networking="no"])])
2100
2101 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2102 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002103 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002104 else
2105 dnl On Solaris we need the nsl library.
2106 AC_CHECK_LIB(nsl, gethostbyname)
2107 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
2108 [AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002109#include <stdio.h>
2110#include <stdlib.h>
2111#include <stdarg.h>
2112#include <fcntl.h>
2113#include <netdb.h>
2114#include <netinet/in.h>
2115#include <errno.h>
2116#include <sys/types.h>
2117#include <sys/socket.h>
2118 /* Check bitfields */
2119 struct nbbuf {
2120 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002121 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002122 };
2123 ], [
2124 /* Check creating a socket. */
2125 struct sockaddr_in server;
2126 (void)socket(AF_INET, SOCK_STREAM, 0);
2127 (void)htons(100);
2128 (void)gethostbyname("microsoft.com");
2129 if (errno == ECONNREFUSED)
2130 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2131 ],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002132 [vim_cv_ipv4_networking="yes"],
2133 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2134 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002135fi
2136if test "$enable_netbeans" = "yes"; then
2137 AC_DEFINE(FEAT_NETBEANS_INTG)
2138 NETBEANS_SRC="netbeans.c"
2139 AC_SUBST(NETBEANS_SRC)
2140 NETBEANS_OBJ="objects/netbeans.o"
2141 AC_SUBST(NETBEANS_OBJ)
2142fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002143if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002144 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaare0874f82016-01-24 20:36:41 +01002145 CHANNEL_SRC="channel.c"
2146 AC_SUBST(CHANNEL_SRC)
2147 CHANNEL_OBJ="objects/channel.o"
2148 AC_SUBST(CHANNEL_OBJ)
2149fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002150
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002151AC_MSG_CHECKING(--enable-terminal argument)
2152AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002153 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002154 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002155if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002156 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2157 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2158 enable_terminal="no"
2159 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002160 if test "$enable_terminal" = "auto"; then
2161 enable_terminal="yes"
2162 AC_MSG_RESULT(defaulting to yes)
2163 else
2164 AC_MSG_RESULT(yes)
2165 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002166 fi
2167else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002168 if test "$enable_terminal" = "auto"; then
2169 enable_terminal="no"
2170 AC_MSG_RESULT(defaulting to no)
2171 else
2172 AC_MSG_RESULT(no)
2173 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002174fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002175if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002176 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002177 TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/creen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002178 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002179 TERM_OBJ="objects/vterm_encoding.o objects/vterm_keyboard.o objects/vterm_mouse.o objects/vterm_parser.o objects/vterm_pen.o objects/vterm_screen.o objects/vterm_state.o objects/vterm_unicode.o objects/vterm_vterm.o"
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002180 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002181 TERM_TEST="test_libvterm"
2182 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002183fi
2184
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002185AC_MSG_CHECKING(--enable-autoservername argument)
2186AC_ARG_ENABLE(autoservername,
2187 [ --enable-autoservername Automatically define servername at vim startup.], ,
2188 [enable_autoservername="no"])
2189AC_MSG_RESULT($enable_autoservername)
2190if test "$enable_autoservername" = "yes"; then
2191 AC_DEFINE(FEAT_AUTOSERVERNAME)
2192fi
2193
Bram Moolenaar071d4272004-06-13 20:20:40 +00002194AC_MSG_CHECKING(--enable-multibyte argument)
2195AC_ARG_ENABLE(multibyte,
2196 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002197 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002198AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002199if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002200 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2201 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002202fi
2203
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002204dnl Right-to-Left language support for Vim will be included with big features,
2205dnl unless ENABLE_RIGHTLEFT is undefined.
2206AC_MSG_CHECKING(--disable-rightleft argument)
2207AC_ARG_ENABLE(rightleft,
2208 [ --disable-rightleft Do not include Right-to-Left language support.],
2209 , [enable_rightleft="yes"])
2210if test "$enable_rightleft" = "yes"; then
2211 AC_MSG_RESULT(no)
2212else
2213 AC_MSG_RESULT(yes)
2214 AC_DEFINE(DISABLE_RIGHTLEFT)
2215fi
2216
2217dnl Arabic language support for Vim will be included with big features,
2218dnl unless ENABLE_ARABIC is undefined.
2219AC_MSG_CHECKING(--disable-arabic argument)
2220AC_ARG_ENABLE(arabic,
2221 [ --disable-arabic Do not include Arabic language support.],
2222 , [enable_arabic="yes"])
2223if test "$enable_arabic" = "yes"; then
2224 AC_MSG_RESULT(no)
2225else
2226 AC_MSG_RESULT(yes)
2227 AC_DEFINE(DISABLE_ARABIC)
2228fi
2229
Bram Moolenaar14184a32019-02-16 15:10:30 +01002230dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002231AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002232 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002233
Bram Moolenaar071d4272004-06-13 20:20:40 +00002234AC_MSG_CHECKING(--enable-xim argument)
2235AC_ARG_ENABLE(xim,
2236 [ --enable-xim Include XIM input support.],
2237 AC_MSG_RESULT($enable_xim),
2238 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002239
2240AC_MSG_CHECKING(--enable-fontset argument)
2241AC_ARG_ENABLE(fontset,
2242 [ --enable-fontset Include X fontset output support.], ,
2243 [enable_fontset="no"])
2244AC_MSG_RESULT($enable_fontset)
2245dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2246
2247test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002248test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002249if test "$with_x" = no; then
2250 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2251else
2252 dnl Do this check early, so that its failure can override user requests.
2253
2254 AC_PATH_PROG(xmkmfpath, xmkmf)
2255
2256 AC_PATH_XTRA
2257
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002258 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002259 dnl be compiled with a special option.
2260 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002261 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002262 CFLAGS="$CFLAGS -W c,dll"
2263 LDFLAGS="$LDFLAGS -W l,dll"
2264 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2265 fi
2266
2267 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002268 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002269
2270 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2271 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2272 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2273 X_LIBS="$X_LIBS -L$x_libraries"
2274 if test "`(uname) 2>/dev/null`" = SunOS &&
2275 uname -r | grep '^5' >/dev/null; then
2276 X_LIBS="$X_LIBS -R $x_libraries"
2277 fi
2278 fi
2279
2280 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2281 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2282 AC_MSG_RESULT(Corrected X includes to $x_includes)
2283 X_CFLAGS="$X_CFLAGS -I$x_includes"
2284 fi
2285
2286 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2287 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2288 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2289 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2290 dnl Same for "-R/usr/lib ".
2291 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2292
2293
2294 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002295 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2296 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002297 AC_MSG_CHECKING(if X11 header files can be found)
2298 cflags_save=$CFLAGS
2299 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002300 AC_TRY_COMPILE([#include <X11/Xlib.h>
2301#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002302 AC_MSG_RESULT(yes),
2303 AC_MSG_RESULT(no); no_x=yes)
2304 CFLAGS=$cflags_save
2305
2306 if test "${no_x-no}" = yes; then
2307 with_x=no
2308 else
2309 AC_DEFINE(HAVE_X11)
2310 X_LIB="-lXt -lX11";
2311 AC_SUBST(X_LIB)
2312
2313 ac_save_LDFLAGS="$LDFLAGS"
2314 LDFLAGS="-L$x_libraries $LDFLAGS"
2315
2316 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2317 dnl For HP-UX 10.20 it must be before -lSM -lICE
2318 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2319 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2320
2321 dnl Some systems need -lnsl -lsocket when testing for ICE.
2322 dnl The check above doesn't do this, try here (again). Also needed to get
2323 dnl them after Xdmcp. link.sh will remove them when not needed.
2324 dnl Check for other function than above to avoid the cached value
2325 AC_CHECK_LIB(ICE, IceOpenConnection,
2326 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2327
2328 dnl Check for -lXpm (needed for some versions of Motif)
2329 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2330 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2331 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2332
2333 dnl Check that the X11 header files don't use implicit declarations
2334 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2335 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002336 dnl -Werror is GCC only, others like Solaris Studio might not like it
2337 if test "$GCC" = yes; then
2338 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2339 else
2340 CFLAGS="$CFLAGS $X_CFLAGS"
2341 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002342 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2343 AC_MSG_RESULT(no),
2344 CFLAGS="$CFLAGS -Wno-implicit-int"
2345 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2346 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2347 AC_MSG_RESULT(test failed)
2348 )
2349 )
2350 CFLAGS=$cflags_save
2351
2352 LDFLAGS="$ac_save_LDFLAGS"
2353
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002354 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2355 AC_CACHE_VAL(ac_cv_small_wchar_t,
2356 [AC_TRY_RUN([
2357#include <X11/Xlib.h>
2358#if STDC_HEADERS
2359# include <stdlib.h>
2360# include <stddef.h>
2361#endif
2362 main()
2363 {
2364 if (sizeof(wchar_t) <= 2)
2365 exit(1);
2366 exit(0);
2367 }],
2368 ac_cv_small_wchar_t="no",
2369 ac_cv_small_wchar_t="yes",
2370 AC_MSG_ERROR(failed to compile test program))])
2371 AC_MSG_RESULT($ac_cv_small_wchar_t)
2372 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2373 AC_DEFINE(SMALL_WCHAR_T)
2374 fi
2375
Bram Moolenaar071d4272004-06-13 20:20:40 +00002376 fi
2377fi
2378
Bram Moolenaard2a05492018-07-27 22:35:15 +02002379dnl Check if --with-x was given but it doesn't work.
2380if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2381 AC_MSG_ERROR([could not configure X])
2382fi
2383
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002384test "x$with_x" = xno -a "x$HAIKU" != "xyes" -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002385
2386AC_MSG_CHECKING(--enable-gui argument)
2387AC_ARG_ENABLE(gui,
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002388 [ --enable-gui[=OPTS] X11 GUI. [default=auto] [OPTS=auto/no/gtk2/gnome2/gtk3/motif/athena/neXtaw/haiku/photon/carbon]], , enable_gui="auto")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002389
2390dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2391dnl Do not use character classes for portability with old tools.
2392enable_gui_canon=`echo "_$enable_gui" | \
2393 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2394
2395dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002396SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002397SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002398SKIP_GNOME=YES
2399SKIP_MOTIF=YES
2400SKIP_ATHENA=YES
2401SKIP_NEXTAW=YES
2402SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002403SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002404SKIP_CARBON=YES
2405GUITYPE=NONE
2406
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002407if test "x$HAIKU" = "xyes"; then
2408 SKIP_HAIKU=
2409 case "$enable_gui_canon" in
2410 no) AC_MSG_RESULT(no GUI support)
2411 SKIP_HAIKU=YES ;;
2412 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2413 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2414 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2415 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2416 SKIP_HAIKU=YES ;;
2417 esac
2418elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002419 SKIP_PHOTON=
2420 case "$enable_gui_canon" in
2421 no) AC_MSG_RESULT(no GUI support)
2422 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002423 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2424 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002425 photon) AC_MSG_RESULT(Photon GUI support) ;;
2426 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2427 SKIP_PHOTON=YES ;;
2428 esac
2429
Bram Moolenaard0573012017-10-28 21:11:06 +02002430elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002431 SKIP_CARBON=
2432 case "$enable_gui_canon" in
2433 no) AC_MSG_RESULT(no GUI support)
2434 SKIP_CARBON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002435 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2436 gui_auto=yes ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002437 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2438 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002439 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2440 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2441 SKIP_CARBON=YES ;;
2442 esac
2443
2444else
2445
Bram Moolenaar071d4272004-06-13 20:20:40 +00002446 case "$enable_gui_canon" in
2447 no|none) AC_MSG_RESULT(no GUI support) ;;
2448 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002449 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002450 SKIP_GTK2=
2451 SKIP_GNOME=
2452 SKIP_MOTIF=
2453 SKIP_ATHENA=
2454 SKIP_NEXTAW=
2455 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002456 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002457 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002458 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2459 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002460 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002461 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2462 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463 motif) AC_MSG_RESULT(Motif GUI support)
2464 SKIP_MOTIF=;;
2465 athena) AC_MSG_RESULT(Athena GUI support)
2466 SKIP_ATHENA=;;
2467 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2468 SKIP_NEXTAW=;;
2469 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2470 esac
2471
2472fi
2473
Bram Moolenaar071d4272004-06-13 20:20:40 +00002474if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2475 -a "$enable_gui_canon" != "gnome2"; then
2476 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2477 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002478 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002479 , enable_gtk2_check="yes")
2480 AC_MSG_RESULT($enable_gtk2_check)
2481 if test "x$enable_gtk2_check" = "xno"; then
2482 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002483 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002484 fi
2485fi
2486
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002487if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002488 AC_MSG_CHECKING(whether or not to look for GNOME)
2489 AC_ARG_ENABLE(gnome-check,
2490 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2491 , enable_gnome_check="no")
2492 AC_MSG_RESULT($enable_gnome_check)
2493 if test "x$enable_gnome_check" = "xno"; then
2494 SKIP_GNOME=YES
2495 fi
2496fi
2497
Bram Moolenaar98921892016-02-23 17:14:37 +01002498if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2499 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2500 AC_ARG_ENABLE(gtk3-check,
2501 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2502 , enable_gtk3_check="yes")
2503 AC_MSG_RESULT($enable_gtk3_check)
2504 if test "x$enable_gtk3_check" = "xno"; then
2505 SKIP_GTK3=YES
2506 fi
2507fi
2508
Bram Moolenaar071d4272004-06-13 20:20:40 +00002509if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2510 AC_MSG_CHECKING(whether or not to look for Motif)
2511 AC_ARG_ENABLE(motif-check,
2512 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2513 , enable_motif_check="yes")
2514 AC_MSG_RESULT($enable_motif_check)
2515 if test "x$enable_motif_check" = "xno"; then
2516 SKIP_MOTIF=YES
2517 fi
2518fi
2519
2520if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2521 AC_MSG_CHECKING(whether or not to look for Athena)
2522 AC_ARG_ENABLE(athena-check,
2523 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2524 , enable_athena_check="yes")
2525 AC_MSG_RESULT($enable_athena_check)
2526 if test "x$enable_athena_check" = "xno"; then
2527 SKIP_ATHENA=YES
2528 fi
2529fi
2530
2531if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2532 AC_MSG_CHECKING(whether or not to look for neXtaw)
2533 AC_ARG_ENABLE(nextaw-check,
2534 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2535 , enable_nextaw_check="yes")
2536 AC_MSG_RESULT($enable_nextaw_check);
2537 if test "x$enable_nextaw_check" = "xno"; then
2538 SKIP_NEXTAW=YES
2539 fi
2540fi
2541
2542if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2543 AC_MSG_CHECKING(whether or not to look for Carbon)
2544 AC_ARG_ENABLE(carbon-check,
2545 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2546 , enable_carbon_check="yes")
2547 AC_MSG_RESULT($enable_carbon_check);
2548 if test "x$enable_carbon_check" = "xno"; then
2549 SKIP_CARBON=YES
2550 fi
2551fi
2552
Bram Moolenaar843ee412004-06-30 16:16:41 +00002553
Bram Moolenaard0573012017-10-28 21:11:06 +02002554if test "x$MACOS_X" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002555 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002556 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002557 AC_MSG_RESULT(yes);
2558 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002559 if test "$VIMNAME" = "vim"; then
2560 VIMNAME=Vim
2561 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002562
Bram Moolenaar164fca32010-07-14 13:58:07 +02002563 if test "x$MACARCH" = "xboth"; then
2564 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2565 else
2566 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2567 fi
2568
Bram Moolenaar14716812006-05-04 21:54:08 +00002569 dnl Default install directory is not /usr/local
2570 if test x$prefix = xNONE; then
2571 prefix=/Applications
2572 fi
2573
2574 dnl Sorry for the hard coded default
2575 datadir='${prefix}/Vim.app/Contents/Resources'
2576
Bram Moolenaar071d4272004-06-13 20:20:40 +00002577 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002578 SKIP_GTK2=YES;
2579 SKIP_GNOME=YES;
2580 SKIP_MOTIF=YES;
2581 SKIP_ATHENA=YES;
2582 SKIP_NEXTAW=YES;
2583 SKIP_PHOTON=YES;
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002584 SKIP_HAIKU=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002585 SKIP_CARBON=YES
2586fi
2587
Bram Moolenaar071d4272004-06-13 20:20:40 +00002588dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002589dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002590dnl
2591dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002592dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002593dnl
2594AC_DEFUN(AM_PATH_GTK,
2595[
2596 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2597 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002598 no_gtk=""
2599 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2600 && $PKG_CONFIG --exists gtk+-2.0; then
2601 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002602 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2603 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002604 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2605 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2606 dnl something like that.
2607 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002608 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002609 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2610 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2611 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2612 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2613 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2614 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2615 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2616 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002617 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2618 && $PKG_CONFIG --exists gtk+-3.0; then
2619 {
2620 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2621 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2622
2623 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2624 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2625 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2626 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2627 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2628 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2629 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2630 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2631 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2632 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002633 else
2634 no_gtk=yes
2635 fi
2636
2637 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2638 {
2639 ac_save_CFLAGS="$CFLAGS"
2640 ac_save_LIBS="$LIBS"
2641 CFLAGS="$CFLAGS $GTK_CFLAGS"
2642 LIBS="$LIBS $GTK_LIBS"
2643
2644 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002645 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002646 dnl
2647 rm -f conf.gtktest
2648 AC_TRY_RUN([
2649#include <gtk/gtk.h>
2650#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002651#if STDC_HEADERS
2652# include <stdlib.h>
2653# include <stddef.h>
2654#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002655
2656int
2657main ()
2658{
2659int major, minor, micro;
2660char *tmp_version;
2661
2662system ("touch conf.gtktest");
2663
2664/* HP/UX 9 (%@#!) writes to sscanf strings */
2665tmp_version = g_strdup("$min_gtk_version");
2666if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2667 printf("%s, bad version string\n", "$min_gtk_version");
2668 exit(1);
2669 }
2670
2671if ((gtk_major_version > major) ||
2672 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2673 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2674 (gtk_micro_version >= micro)))
2675{
2676 return 0;
2677}
2678return 1;
2679}
2680],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2681 CFLAGS="$ac_save_CFLAGS"
2682 LIBS="$ac_save_LIBS"
2683 }
2684 fi
2685 if test "x$no_gtk" = x ; then
2686 if test "x$enable_gtktest" = "xyes"; then
2687 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2688 else
2689 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2690 fi
2691 ifelse([$2], , :, [$2])
2692 else
2693 {
2694 AC_MSG_RESULT(no)
2695 GTK_CFLAGS=""
2696 GTK_LIBS=""
2697 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002698 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2699 AC_MSG_ERROR([could not configure GTK])
2700 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002701 }
2702 fi
2703 }
2704 else
2705 GTK_CFLAGS=""
2706 GTK_LIBS=""
2707 ifelse([$3], , :, [$3])
2708 fi
2709 AC_SUBST(GTK_CFLAGS)
2710 AC_SUBST(GTK_LIBS)
2711 rm -f conf.gtktest
2712])
2713
2714dnl ---------------------------------------------------------------------------
2715dnl gnome
2716dnl ---------------------------------------------------------------------------
2717AC_DEFUN([GNOME_INIT_HOOK],
2718[
2719 AC_SUBST(GNOME_LIBS)
2720 AC_SUBST(GNOME_LIBDIR)
2721 AC_SUBST(GNOME_INCLUDEDIR)
2722
2723 AC_ARG_WITH(gnome-includes,
2724 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2725 [CFLAGS="$CFLAGS -I$withval"]
2726 )
2727
2728 AC_ARG_WITH(gnome-libs,
2729 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2730 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2731 )
2732
2733 AC_ARG_WITH(gnome,
2734 [ --with-gnome Specify prefix for GNOME files],
2735 if test x$withval = xyes; then
2736 want_gnome=yes
2737 ifelse([$1], [], :, [$1])
2738 else
2739 if test "x$withval" = xno; then
2740 want_gnome=no
2741 else
2742 want_gnome=yes
2743 LDFLAGS="$LDFLAGS -L$withval/lib"
2744 CFLAGS="$CFLAGS -I$withval/include"
2745 gnome_prefix=$withval/lib
2746 fi
2747 fi,
2748 want_gnome=yes)
2749
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002750 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002751 {
2752 AC_MSG_CHECKING(for libgnomeui-2.0)
2753 if $PKG_CONFIG --exists libgnomeui-2.0; then
2754 AC_MSG_RESULT(yes)
2755 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2756 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2757 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002758
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002759 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2760 dnl This might not be the right way but it works for me...
2761 AC_MSG_CHECKING(for FreeBSD)
2762 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2763 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002764 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002765 GNOME_LIBS="$GNOME_LIBS -pthread"
2766 else
2767 AC_MSG_RESULT(no)
2768 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002769 $1
2770 else
2771 AC_MSG_RESULT(not found)
2772 if test "x$2" = xfail; then
2773 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2774 fi
2775 fi
2776 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002777 fi
2778])
2779
2780AC_DEFUN([GNOME_INIT],[
2781 GNOME_INIT_HOOK([],fail)
2782])
2783
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002784if test "X$PKG_CONFIG" = "X"; then
2785 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2786fi
2787
Bram Moolenaar071d4272004-06-13 20:20:40 +00002788
2789dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002790dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002791dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002792if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002793
2794 AC_MSG_CHECKING(--disable-gtktest argument)
2795 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2796 , enable_gtktest=yes)
2797 if test "x$enable_gtktest" = "xyes" ; then
2798 AC_MSG_RESULT(gtk test enabled)
2799 else
2800 AC_MSG_RESULT(gtk test disabled)
2801 fi
2802
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002803 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002804 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2805 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002806 AM_PATH_GTK(2.2.0,
2807 [GUI_LIB_LOC="$GTK_LIBDIR"
2808 GTK_LIBNAME="$GTK_LIBS"
2809 GUI_INC_LOC="$GTK_CFLAGS"], )
2810 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002811 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002812 SKIP_ATHENA=YES
2813 SKIP_NEXTAW=YES
2814 SKIP_MOTIF=YES
2815 GUITYPE=GTK
2816 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002817 fi
2818 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002819 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002820 dnl
2821 dnl if GTK exists, then check for GNOME.
2822 dnl
2823 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002824 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002825 GNOME_INIT_HOOK([have_gnome=yes])
2826 if test "x$have_gnome" = xyes ; then
2827 AC_DEFINE(FEAT_GUI_GNOME)
2828 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2829 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002830 fi
2831 }
2832 fi
2833 fi
2834fi
2835
Bram Moolenaar98921892016-02-23 17:14:37 +01002836
2837dnl ---------------------------------------------------------------------------
2838dnl Check for GTK3.
2839dnl ---------------------------------------------------------------------------
2840if test -z "$SKIP_GTK3"; then
2841
2842 AC_MSG_CHECKING(--disable-gtktest argument)
2843 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2844 , enable_gtktest=yes)
2845 if test "x$enable_gtktest" = "xyes" ; then
2846 AC_MSG_RESULT(gtk test enabled)
2847 else
2848 AC_MSG_RESULT(gtk test disabled)
2849 fi
2850
Bram Moolenaar98921892016-02-23 17:14:37 +01002851 if test "x$PKG_CONFIG" != "xno"; then
2852 AM_PATH_GTK(3.0.0,
2853 [GUI_LIB_LOC="$GTK_LIBDIR"
2854 GTK_LIBNAME="$GTK_LIBS"
2855 GUI_INC_LOC="$GTK_CFLAGS"], )
2856 if test "x$GTK_CFLAGS" != "x"; then
2857 SKIP_GTK2=YES
2858 SKIP_GNOME=YES
2859 SKIP_ATHENA=YES
2860 SKIP_NEXTAW=YES
2861 SKIP_MOTIF=YES
2862 GUITYPE=GTK
2863 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002864 AC_DEFINE(USE_GTK3)
2865 fi
2866 fi
2867fi
2868
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002869dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002870dnl glib-compile-resources is found in PATH, use GResource.
2871if test "x$GUITYPE" = "xGTK"; then
2872 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2873 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2874 if test "x$gdk_pixbuf_version" != x ; then
2875 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2876 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2877 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002878 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002879 AC_MSG_RESULT([OK.])
2880 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2881 AC_MSG_CHECKING([glib-compile-resources])
2882 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002883 GLIB_COMPILE_RESOURCES=""
2884 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002885 else
2886 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002887 AC_DEFINE(USE_GRESOURCE)
2888 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2889 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002890 fi
2891 else
2892 AC_MSG_RESULT([not usable.])
2893 fi
2894 else
2895 AC_MSG_RESULT([cannot obtain from pkg_config.])
2896 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002897
2898 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2899 AC_ARG_ENABLE(icon_cache_update,
2900 [ --disable-icon-cache-update update disabled],
2901 [],
2902 [enable_icon_cache_update="yes"])
2903 if test "$enable_icon_cache_update" = "yes"; then
2904 AC_MSG_RESULT([not set])
2905 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2906 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2907 AC_MSG_RESULT([not found in PATH.])
2908 fi
2909 else
2910 AC_MSG_RESULT([update disabled])
2911 fi
2912
2913 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2914 AC_ARG_ENABLE(desktop_database_update,
2915 [ --disable-desktop-database-update update disabled],
2916 [],
2917 [enable_desktop_database_update="yes"])
2918 if test "$enable_desktop_database_update" = "yes"; then
2919 AC_MSG_RESULT([not set])
2920 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2921 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2922 AC_MSG_RESULT([not found in PATH.])
2923 fi
2924 else
2925 AC_MSG_RESULT([update disabled])
2926 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002927fi
2928AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002929AC_SUBST(GRESOURCE_SRC)
2930AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002931AC_SUBST(GTK_UPDATE_ICON_CACHE)
2932AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002933
Bram Moolenaar071d4272004-06-13 20:20:40 +00002934dnl Check for Motif include files location.
2935dnl The LAST one found is used, this makes the highest version to be used,
2936dnl e.g. when Motif1.2 and Motif2.0 are both present.
2937
2938if test -z "$SKIP_MOTIF"; then
2939 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"
2940 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2941 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2942
2943 AC_MSG_CHECKING(for location of Motif GUI includes)
2944 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2945 GUI_INC_LOC=
2946 for try in $gui_includes; do
2947 if test -f "$try/Xm/Xm.h"; then
2948 GUI_INC_LOC=$try
2949 fi
2950 done
2951 if test -n "$GUI_INC_LOC"; then
2952 if test "$GUI_INC_LOC" = /usr/include; then
2953 GUI_INC_LOC=
2954 AC_MSG_RESULT(in default path)
2955 else
2956 AC_MSG_RESULT($GUI_INC_LOC)
2957 fi
2958 else
2959 AC_MSG_RESULT(<not found>)
2960 SKIP_MOTIF=YES
2961 fi
2962fi
2963
2964dnl Check for Motif library files location. In the same order as the include
2965dnl files, to avoid a mixup if several versions are present
2966
2967if test -z "$SKIP_MOTIF"; then
2968 AC_MSG_CHECKING(--with-motif-lib argument)
2969 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002970 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002971 [ MOTIF_LIBNAME="${withval}" ] )
2972
2973 if test -n "$MOTIF_LIBNAME"; then
2974 AC_MSG_RESULT($MOTIF_LIBNAME)
2975 GUI_LIB_LOC=
2976 else
2977 AC_MSG_RESULT(no)
2978
2979 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2980 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2981
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002982 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2983 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002984 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002985 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 +00002986 GUI_LIB_LOC=
2987 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002988 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002989 if test -f "$libtry"; then
2990 GUI_LIB_LOC=$try
2991 fi
2992 done
2993 done
2994 if test -n "$GUI_LIB_LOC"; then
2995 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002996 if test "$GUI_LIB_LOC" = /usr/lib \
2997 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2998 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002999 GUI_LIB_LOC=
3000 AC_MSG_RESULT(in default path)
3001 else
3002 if test -n "$GUI_LIB_LOC"; then
3003 AC_MSG_RESULT($GUI_LIB_LOC)
3004 if test "`(uname) 2>/dev/null`" = SunOS &&
3005 uname -r | grep '^5' >/dev/null; then
3006 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
3007 fi
3008 fi
3009 fi
3010 MOTIF_LIBNAME=-lXm
3011 else
3012 AC_MSG_RESULT(<not found>)
3013 SKIP_MOTIF=YES
3014 fi
3015 fi
3016fi
3017
3018if test -z "$SKIP_MOTIF"; then
3019 SKIP_ATHENA=YES
3020 SKIP_NEXTAW=YES
3021 GUITYPE=MOTIF
3022 AC_SUBST(MOTIF_LIBNAME)
3023fi
3024
3025dnl Check if the Athena files can be found
3026
3027GUI_X_LIBS=
3028
3029if test -z "$SKIP_ATHENA"; then
3030 AC_MSG_CHECKING(if Athena header files can be found)
3031 cflags_save=$CFLAGS
3032 CFLAGS="$CFLAGS $X_CFLAGS"
3033 AC_TRY_COMPILE([
3034#include <X11/Intrinsic.h>
3035#include <X11/Xaw/Paned.h>], ,
3036 AC_MSG_RESULT(yes),
3037 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
3038 CFLAGS=$cflags_save
3039fi
3040
3041if test -z "$SKIP_ATHENA"; then
3042 GUITYPE=ATHENA
3043fi
3044
3045if test -z "$SKIP_NEXTAW"; then
3046 AC_MSG_CHECKING(if neXtaw header files can be found)
3047 cflags_save=$CFLAGS
3048 CFLAGS="$CFLAGS $X_CFLAGS"
3049 AC_TRY_COMPILE([
3050#include <X11/Intrinsic.h>
3051#include <X11/neXtaw/Paned.h>], ,
3052 AC_MSG_RESULT(yes),
3053 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
3054 CFLAGS=$cflags_save
3055fi
3056
3057if test -z "$SKIP_NEXTAW"; then
3058 GUITYPE=NEXTAW
3059fi
3060
3061if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3062 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3063 dnl Avoid adding it when it twice
3064 if test -n "$GUI_INC_LOC"; then
3065 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3066 fi
3067 if test -n "$GUI_LIB_LOC"; then
3068 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3069 fi
3070
3071 dnl Check for -lXext and then for -lXmu
3072 ldflags_save=$LDFLAGS
3073 LDFLAGS="$X_LIBS $LDFLAGS"
3074 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3075 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3076 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3077 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3078 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3079 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3080 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3081 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3082 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3083 if test -z "$SKIP_MOTIF"; then
3084 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3085 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3086 fi
3087 LDFLAGS=$ldflags_save
3088
3089 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3090 AC_MSG_CHECKING(for extra X11 defines)
3091 NARROW_PROTO=
3092 rm -fr conftestdir
3093 if mkdir conftestdir; then
3094 cd conftestdir
3095 cat > Imakefile <<'EOF'
3096acfindx:
3097 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3098EOF
3099 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3100 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3101 fi
3102 cd ..
3103 rm -fr conftestdir
3104 fi
3105 if test -z "$NARROW_PROTO"; then
3106 AC_MSG_RESULT(no)
3107 else
3108 AC_MSG_RESULT($NARROW_PROTO)
3109 fi
3110 AC_SUBST(NARROW_PROTO)
3111fi
3112
3113dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3114dnl use the X11 include path
3115if test "$enable_xsmp" = "yes"; then
3116 cppflags_save=$CPPFLAGS
3117 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3118 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3119 CPPFLAGS=$cppflags_save
3120fi
3121
3122
Bram Moolenaar98921892016-02-23 17:14:37 +01003123if 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 +00003124 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3125 cppflags_save=$CPPFLAGS
3126 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3127 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3128
3129 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3130 if test ! "$enable_xim" = "no"; then
3131 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3132 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3133 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003134 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003135 fi
3136 CPPFLAGS=$cppflags_save
3137
Bram Moolenaar54612582019-11-21 17:13:31 +01003138 dnl automatically enable XIM in the GUI
3139 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003140 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3141 enable_xim="yes"
3142 fi
3143fi
3144
3145if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3146 cppflags_save=$CPPFLAGS
3147 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003148dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3149 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3150 AC_TRY_COMPILE([
3151#include <X11/Intrinsic.h>
3152#include <X11/Xmu/Editres.h>],
3153 [int i; i = 0;],
3154 AC_MSG_RESULT(yes)
3155 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3156 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003157 CPPFLAGS=$cppflags_save
3158fi
3159
3160dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3161if test -z "$SKIP_MOTIF"; then
3162 cppflags_save=$CPPFLAGS
3163 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003164 if test "$zOSUnix" = "yes"; then
3165 xmheader="Xm/Xm.h"
3166 else
3167 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003168 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003169 fi
3170 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003171
Bram Moolenaar77c19352012-06-13 19:19:41 +02003172 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003173 dnl Solaris uses XpmAttributes_21, very annoying.
3174 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3175 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3176 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3177 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3178 )
3179 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003180 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003181 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003182 CPPFLAGS=$cppflags_save
3183fi
3184
3185if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3186 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3187 enable_xim="no"
3188fi
3189if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3190 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3191 enable_fontset="no"
3192fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003193if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003194 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3195 enable_fontset="no"
3196fi
3197
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003198dnl There is no test for the Haiku GUI, if it's selected it's used
3199if test -z "$SKIP_HAIKU"; then
3200 GUITYPE=HAIKUGUI
3201fi
3202
Bram Moolenaar071d4272004-06-13 20:20:40 +00003203if test -z "$SKIP_PHOTON"; then
3204 GUITYPE=PHOTONGUI
3205fi
3206
3207AC_SUBST(GUI_INC_LOC)
3208AC_SUBST(GUI_LIB_LOC)
3209AC_SUBST(GUITYPE)
3210AC_SUBST(GUI_X_LIBS)
3211
3212if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3213 AC_MSG_ERROR([cannot use workshop without Motif])
3214fi
3215
3216dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3217if test "$enable_xim" = "yes"; then
3218 AC_DEFINE(FEAT_XIM)
3219fi
3220if test "$enable_fontset" = "yes"; then
3221 AC_DEFINE(FEAT_XFONTSET)
3222fi
3223
3224
3225dnl ---------------------------------------------------------------------------
3226dnl end of GUI-checking
3227dnl ---------------------------------------------------------------------------
3228
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003229AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003230if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003231 dnl Linux
3232 AC_MSG_RESULT([/proc/self/exe])
3233 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3234elif test -L "/proc/self/path/a.out"; then
3235 dnl Solaris
3236 AC_MSG_RESULT([/proc/self/path/a.out])
3237 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3238elif test -L "/proc/curproc/file"; then
3239 dnl FreeBSD
3240 AC_MSG_RESULT([/proc/curproc/file])
3241 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003242else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003243 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003244fi
3245
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003246dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003247AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003248case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003249 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003250 AC_MSG_CHECKING(for CYGWIN clipboard support)
3251 if test "x$with_x" = "xno" ; then
3252 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3253 AC_MSG_RESULT(yes)
3254 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3255 else
3256 AC_MSG_RESULT(no - using X11)
3257 fi ;;
3258
3259 *) CYGWIN=no; AC_MSG_RESULT(no);;
3260esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003261
Bram Moolenaar071d4272004-06-13 20:20:40 +00003262dnl Checks for libraries and include files.
3263
Bram Moolenaar446cb832008-06-24 21:56:24 +00003264AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3265 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003266 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003267#include "confdefs.h"
3268#include <ctype.h>
3269#if STDC_HEADERS
3270# include <stdlib.h>
3271# include <stddef.h>
3272#endif
3273main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003274 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003275 vim_cv_toupper_broken=yes
3276 ],[
3277 vim_cv_toupper_broken=no
3278 ],[
3279 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3280 ])])
3281
3282if test "x$vim_cv_toupper_broken" = "xyes" ; then
3283 AC_DEFINE(BROKEN_TOUPPER)
3284fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003285
3286AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003287AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003288 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3289 AC_MSG_RESULT(no))
3290
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003291AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3292AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3293 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3294 AC_MSG_RESULT(no))
3295
Bram Moolenaar071d4272004-06-13 20:20:40 +00003296dnl Checks for header files.
3297AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3298dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3299if test "$HAS_ELF" = 1; then
3300 AC_CHECK_LIB(elf, main)
3301fi
3302
3303AC_HEADER_DIRENT
3304
Bram Moolenaar071d4272004-06-13 20:20:40 +00003305dnl If sys/wait.h is not found it might still exist but not be POSIX
3306dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3307if test $ac_cv_header_sys_wait_h = no; then
3308 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3309 AC_TRY_COMPILE([#include <sys/wait.h>],
3310 [union wait xx, yy; xx = yy],
3311 AC_MSG_RESULT(yes)
3312 AC_DEFINE(HAVE_SYS_WAIT_H)
3313 AC_DEFINE(HAVE_UNION_WAIT),
3314 AC_MSG_RESULT(no))
3315fi
3316
Bram Moolenaar779a7752016-01-30 23:26:34 +01003317AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003318 sys/select.h sys/utsname.h termcap.h fcntl.h \
3319 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3320 termio.h iconv.h inttypes.h langinfo.h math.h \
3321 unistd.h stropts.h errno.h sys/resource.h \
3322 sys/systeminfo.h locale.h sys/stream.h termios.h \
3323 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003324 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003325 util/debug.h util/msg18n.h frame.h sys/acl.h \
3326 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003327
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003328dnl sys/ptem.h depends on sys/stream.h on Solaris
3329AC_CHECK_HEADERS(sys/ptem.h, [], [],
3330[#if defined HAVE_SYS_STREAM_H
3331# include <sys/stream.h>
3332#endif])
3333
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003334dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3335AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3336[#if defined HAVE_SYS_PARAM_H
3337# include <sys/param.h>
3338#endif])
3339
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003340
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003341dnl pthread_np.h may exist but can only be used after including pthread.h
3342AC_MSG_CHECKING([for pthread_np.h])
3343AC_TRY_COMPILE([
3344#include <pthread.h>
3345#include <pthread_np.h>],
3346 [int i; i = 0;],
3347 AC_MSG_RESULT(yes)
3348 AC_DEFINE(HAVE_PTHREAD_NP_H),
3349 AC_MSG_RESULT(no))
3350
Bram Moolenaare344bea2005-09-01 20:46:49 +00003351AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003352if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003353 dnl The strings.h file on OS/X contains a warning and nothing useful.
3354 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3355else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003356
3357dnl Check if strings.h and string.h can both be included when defined.
3358AC_MSG_CHECKING([if strings.h can be included after string.h])
3359cppflags_save=$CPPFLAGS
3360CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3361AC_TRY_COMPILE([
3362#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3363# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3364 /* but don't do it on AIX 5.1 (Uribarri) */
3365#endif
3366#ifdef HAVE_XM_XM_H
3367# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3368#endif
3369#ifdef HAVE_STRING_H
3370# include <string.h>
3371#endif
3372#if defined(HAVE_STRINGS_H)
3373# include <strings.h>
3374#endif
3375 ], [int i; i = 0;],
3376 AC_MSG_RESULT(yes),
3377 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3378 AC_MSG_RESULT(no))
3379CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003380fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003381
3382dnl Checks for typedefs, structures, and compiler characteristics.
3383AC_PROG_GCC_TRADITIONAL
3384AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003385AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003386AC_TYPE_MODE_T
3387AC_TYPE_OFF_T
3388AC_TYPE_PID_T
3389AC_TYPE_SIZE_T
3390AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003391AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003392
Bram Moolenaar071d4272004-06-13 20:20:40 +00003393AC_HEADER_TIME
3394AC_CHECK_TYPE(ino_t, long)
3395AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003396AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003397AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003398
3399AC_MSG_CHECKING(for rlim_t)
3400if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3401 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3402else
3403 AC_EGREP_CPP(dnl
3404changequote(<<,>>)dnl
3405<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3406changequote([,]),
3407 [
3408#include <sys/types.h>
3409#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003410# include <stdlib.h>
3411# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003412#endif
3413#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003414# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003415#endif
3416 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3417 AC_MSG_RESULT($ac_cv_type_rlim_t)
3418fi
3419if test $ac_cv_type_rlim_t = no; then
3420 cat >> confdefs.h <<\EOF
3421#define rlim_t unsigned long
3422EOF
3423fi
3424
3425AC_MSG_CHECKING(for stack_t)
3426if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3427 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3428else
3429 AC_EGREP_CPP(stack_t,
3430 [
3431#include <sys/types.h>
3432#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003433# include <stdlib.h>
3434# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003435#endif
3436#include <signal.h>
3437 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3438 AC_MSG_RESULT($ac_cv_type_stack_t)
3439fi
3440if test $ac_cv_type_stack_t = no; then
3441 cat >> confdefs.h <<\EOF
3442#define stack_t struct sigaltstack
3443EOF
3444fi
3445
3446dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3447AC_MSG_CHECKING(whether stack_t has an ss_base field)
3448AC_TRY_COMPILE([
3449#include <sys/types.h>
3450#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003451# include <stdlib.h>
3452# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003453#endif
3454#include <signal.h>
3455#include "confdefs.h"
3456 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3457 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3458 AC_MSG_RESULT(no))
3459
3460olibs="$LIBS"
3461AC_MSG_CHECKING(--with-tlib argument)
3462AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3463if test -n "$with_tlib"; then
3464 AC_MSG_RESULT($with_tlib)
3465 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003466 AC_MSG_CHECKING(for linking with $with_tlib library)
3467 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3468 dnl Need to check for tgetent() below.
3469 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003470else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003471 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003472 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3473 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003474 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003475 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003476 dnl Older versions of ncurses have bugs, get a new one!
3477 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003478 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003479 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003480 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3481 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003482 esac
3483 for libname in $tlibs; do
3484 AC_CHECK_LIB(${libname}, tgetent,,)
3485 if test "x$olibs" != "x$LIBS"; then
3486 dnl It's possible that a library is found but it doesn't work
3487 dnl e.g., shared library that cannot be found
3488 dnl compile and run a test program to be sure
3489 AC_TRY_RUN([
3490#ifdef HAVE_TERMCAP_H
3491# include <termcap.h>
3492#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003493#if STDC_HEADERS
3494# include <stdlib.h>
3495# include <stddef.h>
3496#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003497main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3498 res="OK", res="FAIL", res="FAIL")
3499 if test "$res" = "OK"; then
3500 break
3501 fi
3502 AC_MSG_RESULT($libname library is not usable)
3503 LIBS="$olibs"
3504 fi
3505 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003506 if test "x$olibs" = "x$LIBS"; then
3507 AC_MSG_RESULT(no terminal library found)
3508 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003509fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003510
3511if test "x$olibs" = "x$LIBS"; then
3512 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaarbd7f7c12020-07-28 21:03:37 +02003513 AC_TRY_LINK([int tgetent(char *, const char *);],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003514 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3515 AC_MSG_RESULT(yes),
3516 AC_MSG_ERROR([NOT FOUND!
3517 You need to install a terminal library; for example ncurses.
3518 Or specify the name of the library with --with-tlib.]))
3519fi
3520
Bram Moolenaar446cb832008-06-24 21:56:24 +00003521AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3522 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003523 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003524#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003525#ifdef HAVE_TERMCAP_H
3526# include <termcap.h>
3527#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003528#ifdef HAVE_STRING_H
3529# include <string.h>
3530#endif
3531#if STDC_HEADERS
3532# include <stdlib.h>
3533# include <stddef.h>
3534#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003535main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003536{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003537 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003538 vim_cv_terminfo=no
3539 ],[
3540 vim_cv_terminfo=yes
3541 ],[
3542 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3543 ])
3544 ])
3545
3546if test "x$vim_cv_terminfo" = "xyes" ; then
3547 AC_DEFINE(TERMINFO)
3548fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003549
Bram Moolenaara88254f2017-11-02 23:04:14 +01003550AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003551 [
3552 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003553#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003554#ifdef HAVE_TERMCAP_H
3555# include <termcap.h>
3556#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003557#if STDC_HEADERS
3558# include <stdlib.h>
3559# include <stddef.h>
3560#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003561main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003562{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003563 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003564 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003565 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003566 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003567 ],[
3568 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003569 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003570 ])
3571
Bram Moolenaara88254f2017-11-02 23:04:14 +01003572if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003573 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003574fi
3575
3576AC_MSG_CHECKING(whether termcap.h contains ospeed)
3577AC_TRY_LINK([
3578#ifdef HAVE_TERMCAP_H
3579# include <termcap.h>
3580#endif
3581 ], [ospeed = 20000],
3582 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3583 [AC_MSG_RESULT(no)
3584 AC_MSG_CHECKING(whether ospeed can be extern)
3585 AC_TRY_LINK([
3586#ifdef HAVE_TERMCAP_H
3587# include <termcap.h>
3588#endif
3589extern short ospeed;
3590 ], [ospeed = 20000],
3591 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3592 AC_MSG_RESULT(no))]
3593 )
3594
3595AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3596AC_TRY_LINK([
3597#ifdef HAVE_TERMCAP_H
3598# include <termcap.h>
3599#endif
3600 ], [if (UP == 0 && BC == 0) PC = 1],
3601 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3602 [AC_MSG_RESULT(no)
3603 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3604 AC_TRY_LINK([
3605#ifdef HAVE_TERMCAP_H
3606# include <termcap.h>
3607#endif
3608extern char *UP, *BC, PC;
3609 ], [if (UP == 0 && BC == 0) PC = 1],
3610 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3611 AC_MSG_RESULT(no))]
3612 )
3613
3614AC_MSG_CHECKING(whether tputs() uses outfuntype)
3615AC_TRY_COMPILE([
3616#ifdef HAVE_TERMCAP_H
3617# include <termcap.h>
3618#endif
3619 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3620 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3621 AC_MSG_RESULT(no))
3622
3623dnl On some SCO machines sys/select redefines struct timeval
3624AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3625AC_TRY_COMPILE([
3626#include <sys/types.h>
3627#include <sys/time.h>
3628#include <sys/select.h>], ,
3629 AC_MSG_RESULT(yes)
3630 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3631 AC_MSG_RESULT(no))
3632
3633dnl AC_DECL_SYS_SIGLIST
3634
3635dnl Checks for pty.c (copied from screen) ==========================
3636AC_MSG_CHECKING(for /dev/ptc)
3637if test -r /dev/ptc; then
3638 AC_DEFINE(HAVE_DEV_PTC)
3639 AC_MSG_RESULT(yes)
3640else
3641 AC_MSG_RESULT(no)
3642fi
3643
3644AC_MSG_CHECKING(for SVR4 ptys)
3645if test -c /dev/ptmx ; then
3646 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3647 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3648 AC_MSG_RESULT(no))
3649else
3650 AC_MSG_RESULT(no)
3651fi
3652
3653AC_MSG_CHECKING(for ptyranges)
3654if test -d /dev/ptym ; then
3655 pdir='/dev/ptym'
3656else
3657 pdir='/dev'
3658fi
3659dnl SCO uses ptyp%d
3660AC_EGREP_CPP(yes,
3661[#ifdef M_UNIX
3662 yes;
3663#endif
3664 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3665dnl if test -c /dev/ptyp19; then
3666dnl ptys=`echo /dev/ptyp??`
3667dnl else
3668dnl ptys=`echo $pdir/pty??`
3669dnl fi
3670if test "$ptys" != "$pdir/pty??" ; then
3671 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3672 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3673 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3674 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3675 AC_MSG_RESULT([$p0 / $p1])
3676else
3677 AC_MSG_RESULT([don't know])
3678fi
3679
Bram Moolenaar071d4272004-06-13 20:20:40 +00003680dnl Checks for library functions. ===================================
3681
3682AC_TYPE_SIGNAL
3683
3684dnl find out what to use at the end of a signal function
3685if test $ac_cv_type_signal = void; then
3686 AC_DEFINE(SIGRETURN, [return])
3687else
3688 AC_DEFINE(SIGRETURN, [return 0])
3689fi
3690
3691dnl check if struct sigcontext is defined (used for SGI only)
3692AC_MSG_CHECKING(for struct sigcontext)
3693AC_TRY_COMPILE([
3694#include <signal.h>
3695test_sig()
3696{
3697 struct sigcontext *scont;
3698 scont = (struct sigcontext *)0;
3699 return 1;
3700} ], ,
3701 AC_MSG_RESULT(yes)
3702 AC_DEFINE(HAVE_SIGCONTEXT),
3703 AC_MSG_RESULT(no))
3704
3705dnl tricky stuff: try to find out if getcwd() is implemented with
3706dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003707AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3708 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003709 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003710#include "confdefs.h"
3711#ifdef HAVE_UNISTD_H
3712#include <unistd.h>
3713#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003714char *dagger[] = { "IFS=pwd", 0 };
3715main()
3716{
3717 char buffer[500];
3718 extern char **environ;
3719 environ = dagger;
3720 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003721}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003722 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003723 vim_cv_getcwd_broken=no
3724 ],[
3725 vim_cv_getcwd_broken=yes
3726 ],[
3727 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3728 ])
3729 ])
3730
3731if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3732 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003733 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003734fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003735
Bram Moolenaar25153e12010-02-24 14:47:08 +01003736dnl Check for functions in one big call, to reduce the size of configure.
3737dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003738AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003739 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003740 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003741 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003742 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003743 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3744 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003745AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003746AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003747
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003748dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3749dnl appropriate, so that off_t is 64 bits when needed.
3750AC_SYS_LARGEFILE
3751
Bram Moolenaar21606672019-06-14 20:40:58 +02003752AC_MSG_CHECKING(--enable-canberra argument)
3753AC_ARG_ENABLE(canberra,
3754 [ --disable-canberra Do not use libcanberra.],
3755 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003756
Bram Moolenaar21606672019-06-14 20:40:58 +02003757if test "$enable_canberra" = "maybe"; then
3758 if test "$features" = "big" -o "$features" = "huge"; then
3759 AC_MSG_RESULT(Defaulting to yes)
3760 enable_canberra="yes"
3761 else
3762 AC_MSG_RESULT(Defaulting to no)
3763 enable_canberra="no"
3764 fi
3765else
3766 AC_MSG_RESULT($enable_canberra)
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003767fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003768if test "$enable_canberra" = "yes"; then
3769 if test "x$PKG_CONFIG" != "xno"; then
3770 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3771 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3772 fi
3773 if test "x$canberra_lib" = "x"; then
3774 canberra_lib=-lcanberra
3775 canberra_cflags=-D_REENTRANT
3776 fi
3777 AC_MSG_CHECKING(for libcanberra)
3778 ac_save_CFLAGS="$CFLAGS"
3779 ac_save_LIBS="$LIBS"
3780 CFLAGS="$CFLAGS $canberra_cflags"
3781 LIBS="$LIBS $canberra_lib"
3782 AC_TRY_LINK([
3783 # include <canberra.h>
3784 ], [
3785 ca_context *hello;
3786 ca_context_create(&hello);],
3787 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003788 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003789fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003790
3791
Bram Moolenaar071d4272004-06-13 20:20:40 +00003792dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3793AC_MSG_CHECKING(for st_blksize)
3794AC_TRY_COMPILE(
3795[#include <sys/types.h>
3796#include <sys/stat.h>],
3797[ struct stat st;
3798 int n;
3799
3800 stat("/", &st);
3801 n = (int)st.st_blksize;],
3802 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3803 AC_MSG_RESULT(no))
3804
Bram Moolenaar446cb832008-06-24 21:56:24 +00003805AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3806 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003807 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003808#include "confdefs.h"
3809#if STDC_HEADERS
3810# include <stdlib.h>
3811# include <stddef.h>
3812#endif
3813#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003814#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003815main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003816 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003817 vim_cv_stat_ignores_slash=yes
3818 ],[
3819 vim_cv_stat_ignores_slash=no
3820 ],[
3821 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3822 ])
3823 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003824
Bram Moolenaar446cb832008-06-24 21:56:24 +00003825if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3826 AC_DEFINE(STAT_IGNORES_SLASH)
3827fi
3828
Bram Moolenaar071d4272004-06-13 20:20:40 +00003829dnl Link with iconv for charset translation, if not found without library.
3830dnl check for iconv() requires including iconv.h
3831dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3832dnl has been installed.
3833AC_MSG_CHECKING(for iconv_open())
3834save_LIBS="$LIBS"
3835LIBS="$LIBS -liconv"
3836AC_TRY_LINK([
3837#ifdef HAVE_ICONV_H
3838# include <iconv.h>
3839#endif
3840 ], [iconv_open("fr", "to");],
3841 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3842 LIBS="$save_LIBS"
3843 AC_TRY_LINK([
3844#ifdef HAVE_ICONV_H
3845# include <iconv.h>
3846#endif
3847 ], [iconv_open("fr", "to");],
3848 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3849 AC_MSG_RESULT(no)))
3850
3851
3852AC_MSG_CHECKING(for nl_langinfo(CODESET))
3853AC_TRY_LINK([
3854#ifdef HAVE_LANGINFO_H
3855# include <langinfo.h>
3856#endif
3857], [char *cs = nl_langinfo(CODESET);],
3858 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3859 AC_MSG_RESULT(no))
3860
Bram Moolenaar446cb832008-06-24 21:56:24 +00003861dnl Need various functions for floating point support. Only enable
3862dnl floating point when they are all present.
3863AC_CHECK_LIB(m, strtod)
3864AC_MSG_CHECKING([for strtod() and other floating point functions])
3865AC_TRY_LINK([
3866#ifdef HAVE_MATH_H
3867# include <math.h>
3868#endif
3869#if STDC_HEADERS
3870# include <stdlib.h>
3871# include <stddef.h>
3872#endif
3873], [char *s; double d;
3874 d = strtod("1.1", &s);
3875 d = fabs(1.11);
3876 d = ceil(1.11);
3877 d = floor(1.11);
3878 d = log10(1.11);
3879 d = pow(1.11, 2.22);
3880 d = sqrt(1.11);
3881 d = sin(1.11);
3882 d = cos(1.11);
3883 d = atan(1.11);
3884 ],
3885 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3886 AC_MSG_RESULT(no))
3887
Bram Moolenaara6b89762016-02-29 21:38:26 +01003888dnl isinf() and isnan() need to include header files and may need -lm.
3889AC_MSG_CHECKING([for isinf()])
3890AC_TRY_LINK([
3891#ifdef HAVE_MATH_H
3892# include <math.h>
3893#endif
3894#if STDC_HEADERS
3895# include <stdlib.h>
3896# include <stddef.h>
3897#endif
3898], [int r = isinf(1.11); ],
3899 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3900 AC_MSG_RESULT(no))
3901
3902AC_MSG_CHECKING([for isnan()])
3903AC_TRY_LINK([
3904#ifdef HAVE_MATH_H
3905# include <math.h>
3906#endif
3907#if STDC_HEADERS
3908# include <stdlib.h>
3909# include <stddef.h>
3910#endif
3911], [int r = isnan(1.11); ],
3912 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3913 AC_MSG_RESULT(no))
3914
Bram Moolenaar071d4272004-06-13 20:20:40 +00003915dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3916dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003917dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003918AC_MSG_CHECKING(--disable-acl argument)
3919AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003920 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003921 , [enable_acl="yes"])
3922if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003923 AC_MSG_RESULT(no)
3924 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003925 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3926 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3927
Bram Moolenaard6d30422018-01-28 22:48:55 +01003928 AC_MSG_CHECKING(for POSIX ACL support)
3929 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003930#include <sys/types.h>
3931#ifdef HAVE_SYS_ACL_H
3932# include <sys/acl.h>
3933#endif
3934acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3935 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3936 acl_free(acl);],
3937 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3938 AC_MSG_RESULT(no))
3939
Bram Moolenaard6d30422018-01-28 22:48:55 +01003940 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3941 AC_MSG_CHECKING(for Solaris ACL support)
3942 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003943#ifdef HAVE_SYS_ACL_H
3944# include <sys/acl.h>
3945#endif], [acl("foo", GETACLCNT, 0, NULL);
3946 ],
3947 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003948 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003949
Bram Moolenaard6d30422018-01-28 22:48:55 +01003950 AC_MSG_CHECKING(for AIX ACL support)
3951 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003952#if STDC_HEADERS
3953# include <stdlib.h>
3954# include <stddef.h>
3955#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003956#ifdef HAVE_SYS_ACL_H
3957# include <sys/acl.h>
3958#endif
3959#ifdef HAVE_SYS_ACCESS_H
3960# include <sys/access.h>
3961#endif
3962#define _ALL_SOURCE
3963
3964#include <sys/stat.h>
3965
3966int aclsize;
3967struct acl *aclent;], [aclsize = sizeof(struct acl);
3968 aclent = (void *)malloc(aclsize);
3969 statacl("foo", STX_NORMAL, aclent, aclsize);
3970 ],
3971 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3972 AC_MSG_RESULT(no))
3973else
3974 AC_MSG_RESULT(yes)
3975fi
3976
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003977if test "x$GTK_CFLAGS" != "x"; then
3978 dnl pango_shape_full() is new, fall back to pango_shape().
3979 AC_MSG_CHECKING(for pango_shape_full)
3980 ac_save_CFLAGS="$CFLAGS"
3981 ac_save_LIBS="$LIBS"
3982 CFLAGS="$CFLAGS $GTK_CFLAGS"
3983 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003984 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003985 [#include <gtk/gtk.h>],
3986 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3987 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3988 AC_MSG_RESULT(no))
3989 CFLAGS="$ac_save_CFLAGS"
3990 LIBS="$ac_save_LIBS"
3991fi
3992
Bram Moolenaar071d4272004-06-13 20:20:40 +00003993AC_MSG_CHECKING(--disable-gpm argument)
3994AC_ARG_ENABLE(gpm,
3995 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3996 [enable_gpm="yes"])
3997
3998if test "$enable_gpm" = "yes"; then
3999 AC_MSG_RESULT(no)
4000 dnl Checking if gpm support can be compiled
4001 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4002 [olibs="$LIBS" ; LIBS="-lgpm"]
4003 AC_TRY_LINK(
4004 [#include <gpm.h>
4005 #include <linux/keyboard.h>],
4006 [Gpm_GetLibVersion(NULL);],
4007 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4008 dnl FEAT_MOUSE_GPM if mouse support is included
4009 [vi_cv_have_gpm=yes],
4010 [vi_cv_have_gpm=no])
4011 [LIBS="$olibs"]
4012 )
4013 if test $vi_cv_have_gpm = yes; then
4014 LIBS="$LIBS -lgpm"
4015 AC_DEFINE(HAVE_GPM)
4016 fi
4017else
4018 AC_MSG_RESULT(yes)
4019fi
4020
Bram Moolenaar446cb832008-06-24 21:56:24 +00004021AC_MSG_CHECKING(--disable-sysmouse argument)
4022AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004023 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004024 [enable_sysmouse="yes"])
4025
4026if test "$enable_sysmouse" = "yes"; then
4027 AC_MSG_RESULT(no)
4028 dnl Checking if sysmouse support can be compiled
4029 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4030 dnl defines FEAT_SYSMOUSE if mouse support is included
4031 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
4032 AC_TRY_LINK(
4033 [#include <sys/consio.h>
4034 #include <signal.h>
4035 #include <sys/fbio.h>],
4036 [struct mouse_info mouse;
4037 mouse.operation = MOUSE_MODE;
4038 mouse.operation = MOUSE_SHOW;
4039 mouse.u.mode.mode = 0;
4040 mouse.u.mode.signal = SIGUSR2;],
4041 [vi_cv_have_sysmouse=yes],
4042 [vi_cv_have_sysmouse=no])
4043 )
4044 if test $vi_cv_have_sysmouse = yes; then
4045 AC_DEFINE(HAVE_SYSMOUSE)
4046 fi
4047else
4048 AC_MSG_RESULT(yes)
4049fi
4050
Bram Moolenaarf05da212009-11-17 16:13:15 +00004051dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4052AC_MSG_CHECKING(for FD_CLOEXEC)
4053AC_TRY_COMPILE(
4054[#if HAVE_FCNTL_H
4055# include <fcntl.h>
4056#endif],
4057[ int flag = FD_CLOEXEC;],
4058 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4059 AC_MSG_RESULT(not usable))
4060
Bram Moolenaar071d4272004-06-13 20:20:40 +00004061dnl rename needs to be checked separately to work on Nextstep with cc
4062AC_MSG_CHECKING(for rename)
4063AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4064 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4065 AC_MSG_RESULT(no))
4066
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004067dnl check for dirfd()
4068AC_MSG_CHECKING(for dirfd)
4069AC_TRY_COMPILE(
4070[#include <sys/types.h>
4071#include <dirent.h>],
4072[DIR * dir=opendir("dirname"); dirfd(dir);],
4073AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4074
4075dnl check for flock()
4076AC_MSG_CHECKING(for flock)
4077AC_TRY_COMPILE(
4078[#include <sys/file.h>],
4079[flock(10, LOCK_SH);],
4080AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4081
Bram Moolenaar071d4272004-06-13 20:20:40 +00004082dnl sysctl() may exist but not the arguments we use
4083AC_MSG_CHECKING(for sysctl)
4084AC_TRY_COMPILE(
4085[#include <sys/types.h>
4086#include <sys/sysctl.h>],
4087[ int mib[2], r;
4088 size_t len;
4089
4090 mib[0] = CTL_HW;
4091 mib[1] = HW_USERMEM;
4092 len = sizeof(r);
4093 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4094 ],
4095 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4096 AC_MSG_RESULT(not usable))
4097
4098dnl sysinfo() may exist but not be Linux compatible
4099AC_MSG_CHECKING(for sysinfo)
4100AC_TRY_COMPILE(
4101[#include <sys/types.h>
4102#include <sys/sysinfo.h>],
4103[ struct sysinfo sinfo;
4104 int t;
4105
4106 (void)sysinfo(&sinfo);
4107 t = sinfo.totalram;
4108 ],
4109 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4110 AC_MSG_RESULT(not usable))
4111
Bram Moolenaar914572a2007-05-01 11:37:47 +00004112dnl struct sysinfo may have the mem_unit field or not
4113AC_MSG_CHECKING(for sysinfo.mem_unit)
4114AC_TRY_COMPILE(
4115[#include <sys/types.h>
4116#include <sys/sysinfo.h>],
4117[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004118 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00004119 ],
4120 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4121 AC_MSG_RESULT(no))
4122
Bram Moolenaar071d4272004-06-13 20:20:40 +00004123dnl sysconf() may exist but not support what we want to use
4124AC_MSG_CHECKING(for sysconf)
4125AC_TRY_COMPILE(
4126[#include <unistd.h>],
4127[ (void)sysconf(_SC_PAGESIZE);
4128 (void)sysconf(_SC_PHYS_PAGES);
4129 ],
4130 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4131 AC_MSG_RESULT(not usable))
4132
Bram Moolenaar914703b2010-05-31 21:59:46 +02004133AC_CHECK_SIZEOF([int])
4134AC_CHECK_SIZEOF([long])
4135AC_CHECK_SIZEOF([time_t])
4136AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004137
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004138dnl Use different names to avoid clashing with other header files.
4139AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4140AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4141
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004142dnl Make sure that uint32_t is really 32 bits unsigned.
4143AC_MSG_CHECKING([uint32_t is 32 bits])
4144AC_TRY_RUN([
4145#ifdef HAVE_STDINT_H
4146# include <stdint.h>
4147#endif
4148#ifdef HAVE_INTTYPES_H
4149# include <inttypes.h>
4150#endif
4151main() {
4152 uint32_t nr1 = (uint32_t)-1;
4153 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004154 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4155 return 0;
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004156}],
4157AC_MSG_RESULT(ok),
4158AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004159AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004160
Bram Moolenaar446cb832008-06-24 21:56:24 +00004161dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4162dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4163
Bram Moolenaar071d4272004-06-13 20:20:40 +00004164[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004165#include "confdefs.h"
4166#ifdef HAVE_STRING_H
4167# include <string.h>
4168#endif
4169#if STDC_HEADERS
4170# include <stdlib.h>
4171# include <stddef.h>
4172#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004173main() {
4174 char buf[10];
4175 strcpy(buf, "abcdefghi");
4176 mch_memmove(buf, buf + 2, 3);
4177 if (strncmp(buf, "ababcf", 6))
4178 exit(1);
4179 strcpy(buf, "abcdefghi");
4180 mch_memmove(buf + 2, buf, 3);
4181 if (strncmp(buf, "cdedef", 6))
4182 exit(1);
4183 exit(0); /* libc version works properly. */
4184}']
4185
Bram Moolenaar446cb832008-06-24 21:56:24 +00004186AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4187 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004188 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 +00004189 [
4190 vim_cv_memmove_handles_overlap=yes
4191 ],[
4192 vim_cv_memmove_handles_overlap=no
4193 ],[
4194 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4195 ])
4196 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004197
Bram Moolenaar446cb832008-06-24 21:56:24 +00004198if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4199 AC_DEFINE(USEMEMMOVE)
4200else
4201 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4202 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004203 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 +00004204 [
4205 vim_cv_bcopy_handles_overlap=yes
4206 ],[
4207 vim_cv_bcopy_handles_overlap=no
4208 ],[
4209 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4210 ])
4211 ])
4212
4213 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4214 AC_DEFINE(USEBCOPY)
4215 else
4216 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4217 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004218 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 +00004219 [
4220 vim_cv_memcpy_handles_overlap=yes
4221 ],[
4222 vim_cv_memcpy_handles_overlap=no
4223 ],[
4224 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4225 ])
4226 ])
4227
4228 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4229 AC_DEFINE(USEMEMCPY)
4230 fi
4231 fi
4232fi
4233
Bram Moolenaar071d4272004-06-13 20:20:40 +00004234
4235dnl Check for multibyte locale functions
4236dnl Find out if _Xsetlocale() is supported by libX11.
4237dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004238if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004239 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004240 libs_save=$LIBS
4241 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4242 CFLAGS="$CFLAGS $X_CFLAGS"
4243
4244 AC_MSG_CHECKING(whether X_LOCALE needed)
4245 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4246 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4247 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4248 AC_MSG_RESULT(no))
4249
4250 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4251 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4252 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4253
Bram Moolenaar071d4272004-06-13 20:20:40 +00004254 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004255 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004256fi
4257
4258dnl Link with xpg4, it is said to make Korean locale working
4259AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4260
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004261dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004262dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004263dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004264dnl -t for typedefs (many ctags have this)
4265dnl -s for static functions (Elvis ctags only?)
4266dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4267dnl -i+m to test for older Exuberant ctags
4268AC_MSG_CHECKING(how to create tags)
4269test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004270if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004271 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004272elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004273 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004274elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004275 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004276else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004277 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004278 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4279 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4280 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4281 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4282 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4283 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4284 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4285fi
4286test -f tags.save && mv tags.save tags
4287AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4288
4289dnl Check how we can run man with a section number
4290AC_MSG_CHECKING(how to run man with a section nr)
4291MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004292(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 +00004293AC_MSG_RESULT($MANDEF)
4294if test "$MANDEF" = "man -s"; then
4295 AC_DEFINE(USEMAN_S)
4296fi
4297
4298dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004299dnl We take care to base this on an empty LIBS: on some systems libelf would be
4300dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4301dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004302AC_MSG_CHECKING(--disable-nls argument)
4303AC_ARG_ENABLE(nls,
4304 [ --disable-nls Don't support NLS (gettext()).], ,
4305 [enable_nls="yes"])
4306
4307if test "$enable_nls" = "yes"; then
4308 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004309
4310 INSTALL_LANGS=install-languages
4311 AC_SUBST(INSTALL_LANGS)
4312 INSTALL_TOOL_LANGS=install-tool-languages
4313 AC_SUBST(INSTALL_TOOL_LANGS)
4314
Bram Moolenaar071d4272004-06-13 20:20:40 +00004315 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4316 AC_MSG_CHECKING([for NLS])
4317 if test -f po/Makefile; then
4318 have_gettext="no"
4319 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004320 olibs=$LIBS
4321 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004322 AC_TRY_LINK(
4323 [#include <libintl.h>],
4324 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004325 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4326 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004327 AC_TRY_LINK(
4328 [#include <libintl.h>],
4329 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004330 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4331 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004332 AC_MSG_RESULT([gettext() doesn't work]);
4333 LIBS=$olibs))
4334 else
4335 AC_MSG_RESULT([msgfmt not found - disabled]);
4336 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004337 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004338 AC_DEFINE(HAVE_GETTEXT)
4339 MAKEMO=yes
4340 AC_SUBST(MAKEMO)
4341 dnl this was added in GNU gettext 0.10.36
4342 AC_CHECK_FUNCS(bind_textdomain_codeset)
4343 dnl _nl_msg_cat_cntr is required for GNU gettext
4344 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4345 AC_TRY_LINK(
4346 [#include <libintl.h>
4347 extern int _nl_msg_cat_cntr;],
4348 [++_nl_msg_cat_cntr;],
4349 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4350 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004351 AC_MSG_CHECKING([if msgfmt supports --desktop])
4352 MSGFMT_DESKTOP=
4353 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004354 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4355 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4356 dnl 0.19.3 is also broken.
4357 AC_MSG_RESULT([broken])
4358 else
4359 AC_MSG_RESULT([yes])
4360 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4361 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004362 else
4363 AC_MSG_RESULT([no])
4364 fi
4365 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004366 fi
4367 else
4368 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4369 fi
4370else
4371 AC_MSG_RESULT(yes)
4372fi
4373
4374dnl Check for dynamic linking loader
4375AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4376if test x${DLL} = xdlfcn.h; then
4377 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4378 AC_MSG_CHECKING([for dlopen()])
4379 AC_TRY_LINK(,[
4380 extern void* dlopen();
4381 dlopen();
4382 ],
4383 AC_MSG_RESULT(yes);
4384 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4385 AC_MSG_RESULT(no);
4386 AC_MSG_CHECKING([for dlopen() in -ldl])
4387 olibs=$LIBS
4388 LIBS="$LIBS -ldl"
4389 AC_TRY_LINK(,[
4390 extern void* dlopen();
4391 dlopen();
4392 ],
4393 AC_MSG_RESULT(yes);
4394 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4395 AC_MSG_RESULT(no);
4396 LIBS=$olibs))
4397 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4398 dnl ick :-)
4399 AC_MSG_CHECKING([for dlsym()])
4400 AC_TRY_LINK(,[
4401 extern void* dlsym();
4402 dlsym();
4403 ],
4404 AC_MSG_RESULT(yes);
4405 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4406 AC_MSG_RESULT(no);
4407 AC_MSG_CHECKING([for dlsym() in -ldl])
4408 olibs=$LIBS
4409 LIBS="$LIBS -ldl"
4410 AC_TRY_LINK(,[
4411 extern void* dlsym();
4412 dlsym();
4413 ],
4414 AC_MSG_RESULT(yes);
4415 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4416 AC_MSG_RESULT(no);
4417 LIBS=$olibs))
4418elif test x${DLL} = xdl.h; then
4419 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4420 AC_MSG_CHECKING([for shl_load()])
4421 AC_TRY_LINK(,[
4422 extern void* shl_load();
4423 shl_load();
4424 ],
4425 AC_MSG_RESULT(yes);
4426 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4427 AC_MSG_RESULT(no);
4428 AC_MSG_CHECKING([for shl_load() in -ldld])
4429 olibs=$LIBS
4430 LIBS="$LIBS -ldld"
4431 AC_TRY_LINK(,[
4432 extern void* shl_load();
4433 shl_load();
4434 ],
4435 AC_MSG_RESULT(yes);
4436 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4437 AC_MSG_RESULT(no);
4438 LIBS=$olibs))
4439fi
4440AC_CHECK_HEADERS(setjmp.h)
4441
Bram Moolenaard0573012017-10-28 21:11:06 +02004442if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004443 dnl -ldl must come after DynaLoader.a
4444 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4445 LIBS=`echo $LIBS | sed s/-ldl//`
4446 PERL_LIBS="$PERL_LIBS -ldl"
4447 fi
4448fi
4449
Bram Moolenaard0573012017-10-28 21:11:06 +02004450if test "$MACOS_X" = "yes"; then
4451 AC_MSG_CHECKING([whether we need macOS frameworks])
4452 if test "$GUITYPE" = "CARBONGUI"; then
4453 AC_MSG_RESULT([yes, we need Carbon])
4454 LIBS="$LIBS -framework Carbon"
4455 elif test "$MACOS_X_DARWIN" = "yes"; then
4456 if test "$features" = "tiny"; then
4457 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4458 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4459 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004460 AC_MSG_RESULT([yes, we need CoreServices])
4461 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004462 else
4463 AC_MSG_RESULT([yes, we need AppKit])
4464 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004465 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004466 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004467 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004468 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004469fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004470if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004471 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004472fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004473
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004474dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4475dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4476dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004477dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4478dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004479DEPEND_CFLAGS_FILTER=
4480if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004481 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004482 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004483 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004484 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004485 AC_MSG_RESULT(yes)
4486 else
4487 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004488 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004489 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4490 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004491 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004492 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004493 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4494 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004495 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 Moolenaar91b992c2019-11-17 19:07:42 +01004496 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004497 AC_MSG_RESULT(yes)
4498 else
4499 AC_MSG_RESULT(no)
4500 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004501fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004502AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004503
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004504dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4505dnl isn't required, but the CFLAGS for some of the libraries we're using
4506dnl include the define. Since the define changes the size of some datatypes
4507dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4508dnl consistent value. It's therefore safest to force the use of the define
4509dnl if it's present in any of the *_CFLAGS variables.
4510AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004511if 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 +01004512 AC_MSG_RESULT(yes)
4513 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4514else
4515 AC_MSG_RESULT(no)
4516fi
4517
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004518dnl link.sh tries to avoid overlinking in a hackish way.
4519dnl At least GNU ld supports --as-needed which provides the same functionality
4520dnl at linker level. Let's use it.
4521AC_MSG_CHECKING(linker --as-needed support)
4522LINK_AS_NEEDED=
4523# Check if linker supports --as-needed and --no-as-needed options
4524if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004525 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004526 LINK_AS_NEEDED=yes
4527fi
4528if test "$LINK_AS_NEEDED" = yes; then
4529 AC_MSG_RESULT(yes)
4530else
4531 AC_MSG_RESULT(no)
4532fi
4533AC_SUBST(LINK_AS_NEEDED)
4534
Bram Moolenaar77c19352012-06-13 19:19:41 +02004535# IBM z/OS reset CFLAGS for config.mk
4536if test "$zOSUnix" = "yes"; then
4537 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4538fi
4539
Bram Moolenaar071d4272004-06-13 20:20:40 +00004540dnl write output files
4541AC_OUTPUT(auto/config.mk:config.mk.in)
4542
4543dnl vim: set sw=2 tw=78 fo+=l: