blob: 93630a4163361615ee44a485a48c01420fe31393 [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
Paul Ollis65745772022-06-05 16:55:54 +01003dnl Process this file with autoconf 2.69 to produce "configure".
4dnl This should also work with other versions of autoconf, but 2.70 and later
5dnl generate lots of hard to fix "obsolete" warnings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7AC_INIT(vim.h)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01008AC_CONFIG_HEADERS(auto/config.h:config.h.in)
Bram Moolenaar071d4272004-06-13 20:20:40 +00009
10dnl Being able to run configure means the system is Unix (compatible).
11AC_DEFINE(UNIX)
12AC_PROG_MAKE_SET
13
14dnl Checks for programs.
Bram Moolenaar22640082018-04-19 20:39:41 +020015AC_PROG_CC_C99 dnl required by almost everything
Bram Moolenaarc0394412017-04-20 20:20:23 +020016AC_PROG_CPP dnl required by header file checks
17AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
18AC_PROG_FGREP dnl finds working grep -F
19AC_ISC_POSIX dnl required by AC_C_CROSS
20AC_PROG_AWK dnl required for "make html" in ../doc
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22dnl Don't strip if we don't have it
23AC_CHECK_PROG(STRIP, strip, strip, :)
24
Bram Moolenaar325b7a22004-07-05 15:58:32 +000025dnl Check for extension of executables
Bram Moolenaar071d4272004-06-13 20:20:40 +000026AC_EXEEXT
27
Bram Moolenaar446cb832008-06-24 21:56:24 +000028dnl Check for standard headers. We don't use this in Vim but other stuff
29dnl in autoconf needs it, where it uses STDC_HEADERS.
30AC_HEADER_STDC
31AC_HEADER_SYS_WAIT
32
Bram Moolenaar561f8a52018-04-17 22:02:45 +020033dnl Check that the C99 features that Vim uses are supported:
Bram Moolenaar22640082018-04-19 20:39:41 +020034if test x"$ac_cv_prog_cc_c99" != xno; then
35 dnl If the compiler doesn't explicitly support C99, then check
36 dnl for the specific features Vim uses
37
38 AC_TYPE_LONG_LONG_INT
39 if test "$ac_cv_type_long_long_int" = no; then
40 AC_MSG_FAILURE([Compiler does not support long long int])
41 fi
42
43 AC_MSG_CHECKING([if the compiler supports trailing commas])
44 trailing_commas=no
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010045 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
Bram Moolenaar22640082018-04-19 20:39:41 +020046 enum {
47 one,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010048 };])],
Bram Moolenaar22640082018-04-19 20:39:41 +020049 [AC_MSG_RESULT(yes); trailing_commas=yes],
50 [AC_MSG_RESULT(no)])
51 if test "$trailing_commas" = no; then
52 AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
53 fi
54
55 AC_MSG_CHECKING([if the compiler supports C++ comments])
56 slash_comments=no
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010057 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
58 [// C++ comments?])],
Bram Moolenaar22640082018-04-19 20:39:41 +020059 [AC_MSG_RESULT(yes); slash_comments=yes],
60 [AC_MSG_RESULT(no)])
61 if test "$slash_comments" = no; then
62 AC_MSG_FAILURE([Compiler does not support C++ comments])
63 fi
64fi
Bram Moolenaar561f8a52018-04-17 22:02:45 +020065
Bram Moolenaar8f1dde52020-06-05 23:16:29 +020066dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
67dnl "compiled" timestamp in :version's output. Attempt to get the formatted
68dnl date using GNU date syntax, BSD date syntax, and finally falling back to
69dnl just using the current time.
70if test -n "$SOURCE_DATE_EPOCH"; then
71 DATE_FMT="%b %d %Y %H:%M:%S"
72 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")
73 AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
74 BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
75 AC_SUBST(BUILD_DATE_MSG)
76fi
77
Bram Moolenaarf788a062011-12-14 20:51:25 +010078dnl Check for the flag that fails if stuff are missing.
79
80AC_MSG_CHECKING(--enable-fail-if-missing argument)
81AC_ARG_ENABLE(fail_if_missing,
82 [ --enable-fail-if-missing Fail if dependencies on additional features
83 specified on the command line are missing.],
84 [fail_if_missing="yes"],
85 [fail_if_missing="no"])
86AC_MSG_RESULT($fail_if_missing)
87
Bram Moolenaard2a05492018-07-27 22:35:15 +020088dnl Keep original value to check later.
89with_x_arg="$with_x"
90
Bram Moolenaar071d4272004-06-13 20:20:40 +000091dnl Set default value for CFLAGS if none is defined or it's empty
92if test -z "$CFLAGS"; then
93 CFLAGS="-O"
Bram Moolenaar4d8479b2021-01-31 14:36:06 +010094 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall -Wno-deprecated-declarations"
Bram Moolenaar071d4272004-06-13 20:20:40 +000095fi
96if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000097 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020098 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000099 if test "x$gccversion" = "x"; then
100 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +0200101 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 +0000102 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +0000103 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
104 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000105 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
107 else
108 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
109 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
110 CFLAGS="$CFLAGS -fno-strength-reduce"
111 fi
112 fi
113fi
114
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200115dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
116dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
117dnl the version number of the clang in use.
118dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100119AC_MSG_CHECKING(for clang version)
120CLANG_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 +0200121if test x"$CLANG_VERSION_STRING" != x"" ; then
122 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
123 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
124 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
125 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
126 AC_MSG_RESULT($CLANG_VERSION)
127 dnl If you find the same issue with versions earlier than 500.2.75,
128 dnl change the constant 500002075 below appropriately. To get the
129 dnl integer corresponding to a version number, refer to the
130 dnl definition of CLANG_VERSION above.
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100131 dnl Clang 11 reports "11", assume Clang 10 and later work like this.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100132 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100133 if test "$CLANG_MAJOR" -ge 10 -o "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100134 AC_MSG_RESULT(no)
135 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
136 else
137 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200138 fi
139else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100140 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200141fi
142
Bram Moolenaar446cb832008-06-24 21:56:24 +0000143dnl If configure thinks we are cross compiling, there might be something
144dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200145CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000147 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200148 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200150AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000152dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
153dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
155
156if test -f ./toolcheck; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100157 AC_MSG_CHECKING(for buggy tools)
158 sh ./toolcheck 1>&AS_MESSAGE_FD
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159fi
160
161OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
162
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000163dnl When cross-compiling set $vim_cv_uname_output, $vim_cv_uname_r_output and
164dnl $vim_cv_uname_m_output to the desired value for the target system
165AC_MSG_CHECKING(uname)
166if test "x$vim_cv_uname_output" = "x" ; then
167 vim_cv_uname_output=`(uname) 2>/dev/null`
168 AC_MSG_RESULT($vim_cv_uname_output)
169else
170 AC_MSG_RESULT([$vim_cv_uname_output (cached)])
171fi
172
173AC_MSG_CHECKING(uname -r)
174if test "x$vim_cv_uname_r_output" = "x" ; then
175 vim_cv_uname_r_output=`(uname -r) 2>/dev/null`
176 AC_MSG_RESULT($vim_cv_uname_r_output)
177else
178 AC_MSG_RESULT([$vim_cv_uname_r_output (cached)])
179fi
180
181AC_MSG_CHECKING(uname -m)
182if test "x$vim_cv_uname_m_output" = "x" ; then
183 vim_cv_uname_m_output=`(uname -m) 2>/dev/null`
184 AC_MSG_RESULT($vim_cv_uname_m_output)
185else
186 AC_MSG_RESULT([$vim_cv_uname_m_output (cached)])
187fi
188
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100189AC_MSG_CHECKING(for Haiku)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000190case $vim_cv_uname_output in
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100191 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
192 *) HAIKU=no; AC_MSG_RESULT(no);;
193esac
194
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195dnl If QNX is found, assume we don't want to use Xphoton
196dnl unless it was specifically asked for (--with-x)
197AC_MSG_CHECKING(for QNX)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000198case $vim_cv_uname_output in
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
200 test -z "$with_x" && with_x=no
201 QNX=yes; AC_MSG_RESULT(yes);;
202 *) QNX=no; AC_MSG_RESULT(no);;
203esac
204
205dnl Check for Darwin and MacOS X
206dnl We do a check for MacOS X in the very beginning because there
207dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208AC_MSG_CHECKING([for Darwin (Mac OS X)])
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000209if test "$vim_cv_uname_output" = Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200211 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200212 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
214 AC_MSG_CHECKING(--disable-darwin argument)
215 AC_ARG_ENABLE(darwin,
216 [ --disable-darwin Disable Darwin (Mac OS X) support.],
217 , [enable_darwin="yes"])
218 if test "$enable_darwin" = "yes"; then
219 AC_MSG_RESULT(no)
220 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200221 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222 AC_MSG_RESULT(yes)
223 else
224 AC_MSG_RESULT([no, Darwin support disabled])
225 enable_darwin=no
226 fi
227 else
228 AC_MSG_RESULT([yes, Darwin support excluded])
229 fi
230
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000231 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000232 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000233 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000234 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000235
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100236 AC_MSG_CHECKING(--with-developer-dir argument)
237 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
238 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100239 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100240
241 if test "x$DEVELOPER_DIR" = "x"; then
242 AC_PATH_PROG(XCODE_SELECT, xcode-select)
243 if test "x$XCODE_SELECT" != "x"; then
244 AC_MSG_CHECKING(for developer dir using xcode-select)
245 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
246 AC_MSG_RESULT([$DEVELOPER_DIR])
247 else
248 DEVELOPER_DIR=/Developer
249 fi
250 fi
251
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000252 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000253 AC_MSG_CHECKING(for 10.4 universal SDK)
254 dnl There is a terrible inconsistency (but we appear to get away with it):
255 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
256 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
257 dnl tests using the preprocessor are actually done with the wrong header
258 dnl files. $LDFLAGS is set at the end, because configure uses it together
259 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000260 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000261 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000262 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100263 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100264 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000265 AC_MSG_RESULT(found, will make universal binary),
266
267 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000268 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000269 AC_MSG_CHECKING(if Intel architecture is supported)
270 CPPFLAGS="$CPPFLAGS -arch i386"
271 LDFLAGS="$save_ldflags -arch i386"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100272 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000273 AC_MSG_RESULT(yes); MACARCH="intel",
274 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000275 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000276 CPPFLAGS="$save_cppflags -arch ppc"
277 LDFLAGS="$save_ldflags -arch ppc"))
278 elif test "x$MACARCH" = "xintel"; then
279 CPPFLAGS="$CPPFLAGS -arch intel"
280 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000281 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000282 CPPFLAGS="$CPPFLAGS -arch ppc"
283 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000284 fi
285
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200287 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200288 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000289 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000290 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100291 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200292 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200293
294 dnl Assume we don't want X11 unless it was specifically asked for
Bram Moolenaar0b40d082022-03-08 13:32:37 +0000295 dnl (--with-x) or Motif or GTK GUI is used.
296 if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xgtk2 -a "X$enable_gui" != Xgtk3; then
Bram Moolenaar040f9752020-08-11 23:08:48 +0200297 with_x=no
298 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000300
Bram Moolenaardb552d602006-03-23 22:59:57 +0000301 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000302 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000303 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000304 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
305 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
306 fi
307
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308else
309 AC_MSG_RESULT(no)
310fi
311
Bram Moolenaar39766a72013-11-03 00:41:00 +0100312dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
313dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100314AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100315
Bram Moolenaar071d4272004-06-13 20:20:40 +0000316AC_SUBST(OS_EXTRA_SRC)
317AC_SUBST(OS_EXTRA_OBJ)
318
319dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
320dnl Only when the directory exists and it wasn't there yet.
321dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000322dnl Skip all of this when cross-compiling.
323if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000324 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000325 have_local_include=''
326 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000327 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
328 --without-local-dir do not search /usr/local for local libraries.], [
329 local_dir="$withval"
330 case "$withval" in
331 */*) ;;
332 no)
333 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200334 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000335 have_local_lib=yes
336 ;;
337 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
338 esac
339 AC_MSG_RESULT($local_dir)
340 ], [
341 local_dir=/usr/local
342 AC_MSG_RESULT(Defaulting to $local_dir)
343 ])
344 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000345 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100346 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
347 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000348 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000349 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000351 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
352 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 +0000353 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000354 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000355 fi
356 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000357 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
358 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 +0000359 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000360 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000361 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362 fi
363fi
364
365AC_MSG_CHECKING(--with-vim-name argument)
366AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
367 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000368 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369AC_SUBST(VIMNAME)
370AC_MSG_CHECKING(--with-ex-name argument)
371AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
372 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
373 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
374AC_SUBST(EXNAME)
375AC_MSG_CHECKING(--with-view-name argument)
376AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
377 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
378 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
379AC_SUBST(VIEWNAME)
380
381AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100382AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
383 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000384 AC_MSG_RESULT(no))
385
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100386if test "X$RUNTIME_GLOBAL" != "X"; then
387 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" }')
388 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
389 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
390fi
391
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392AC_MSG_CHECKING(--with-modified-by argument)
393AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
394 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
395 AC_MSG_RESULT(no))
396
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200397dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398AC_MSG_CHECKING(if character set is EBCDIC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100399AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400[ /* TryCompile function for CharSet.
401 Treat any failure as ASCII for compatibility with existing art.
402 Use compile-time rather than run-time tests for cross-compiler
403 tolerance. */
404#if '0'!=240
405make an error "Character set is not EBCDIC"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100406#endif ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000407[ # TryCompile action if true
408cf_cv_ebcdic=yes ],
409[ # TryCompile action if false
410cf_cv_ebcdic=no])
411# end of TryCompile ])
412# end of CacheVal CvEbcdic
413AC_MSG_RESULT($cf_cv_ebcdic)
414case "$cf_cv_ebcdic" in #(vi
415 yes) AC_DEFINE(EBCDIC)
416 line_break='"\\n"'
417 ;;
418 *) line_break='"\\012"';;
419esac
420AC_SUBST(line_break)
421
422if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200423dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200424AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000425case $vim_cv_uname_output in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200426 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 dnl If using cc the environment variable _CC_CCMODE must be
428 dnl set to "1", so that some compiler extensions are enabled.
429 dnl If using c89 the environment variable is named _CC_C89MODE.
430 dnl Note: compile with c89 never tested.
431 if test "$CC" = "cc"; then
432 ccm="$_CC_CCMODE"
433 ccn="CC"
434 else
435 if test "$CC" = "c89"; then
436 ccm="$_CC_C89MODE"
437 ccn="C89"
438 else
439 ccm=1
440 fi
441 fi
442 if test "$ccm" != "1"; then
443 echo ""
444 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200445 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200446 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447 echo " Do:"
448 echo " export _CC_${ccn}MODE=1"
449 echo " and then call configure again."
450 echo "------------------------------------------"
451 exit 1
452 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200453 # Set CFLAGS for configure process.
454 # This will be reset later for config.mk.
455 # Use haltonmsg to force error for missing H files.
456 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
457 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458 AC_MSG_RESULT(yes)
459 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200460 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461 AC_MSG_RESULT(no)
462 ;;
463esac
464fi
465
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200466dnl Set QUOTESED. Needs additional backslashes on zOS
467if test "$zOSUnix" = "yes"; then
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100468 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200469else
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100470 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200471fi
472AC_SUBST(QUOTESED)
473
474
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200475dnl Link with -lsmack for Smack stuff; if not found
476AC_MSG_CHECKING(--disable-smack argument)
477AC_ARG_ENABLE(smack,
478 [ --disable-smack Do not check for Smack support.],
479 , enable_smack="yes")
480if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200481 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200482 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200483else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200484 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200485fi
486if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200487 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
488fi
489if test "$enable_smack" = "yes"; then
490 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
491 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
492 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200493 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200494fi
495if test "$enable_smack" = "yes"; then
496 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200497 [LIBS="$LIBS -lattr"
498 found_smack="yes"
499 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000500fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200502dnl When smack was found don't search for SELinux
503if test "x$found_smack" = "x"; then
504 dnl Link with -lselinux for SELinux stuff; if not found
505 AC_MSG_CHECKING(--disable-selinux argument)
506 AC_ARG_ENABLE(selinux,
507 [ --disable-selinux Do not check for SELinux support.],
508 , enable_selinux="yes")
509 if test "$enable_selinux" = "yes"; then
510 AC_MSG_RESULT(no)
511 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100512 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200513 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100514 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200515 else
516 AC_MSG_RESULT(yes)
517 fi
518fi
519
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520dnl Check user requested features.
521
522AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200523AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000524 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100525 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526
527dovimdiff=""
528dogvimdiff=""
529case "$features" in
530 tiny) AC_DEFINE(FEAT_TINY) ;;
531 small) AC_DEFINE(FEAT_SMALL) ;;
532 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
533 dogvimdiff="installgvimdiff" ;;
534 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
535 dogvimdiff="installgvimdiff" ;;
536 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
537 dogvimdiff="installgvimdiff" ;;
538 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
539esac
540
541AC_SUBST(dovimdiff)
542AC_SUBST(dogvimdiff)
543
Bram Moolenaar12471262022-01-18 11:11:25 +0000544if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
545 has_eval=no
546else
547 has_eval=yes
548fi
549
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550AC_MSG_CHECKING(--with-compiledby argument)
551AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
552 compiledby="$withval"; AC_MSG_RESULT($withval),
553 compiledby=""; AC_MSG_RESULT(no))
554AC_SUBST(compiledby)
555
556AC_MSG_CHECKING(--disable-xsmp argument)
557AC_ARG_ENABLE(xsmp,
558 [ --disable-xsmp Disable XSMP session management],
559 , enable_xsmp="yes")
560
561if test "$enable_xsmp" = "yes"; then
562 AC_MSG_RESULT(no)
563 AC_MSG_CHECKING(--disable-xsmp-interact argument)
564 AC_ARG_ENABLE(xsmp-interact,
565 [ --disable-xsmp-interact Disable XSMP interaction],
566 , enable_xsmp_interact="yes")
567 if test "$enable_xsmp_interact" = "yes"; then
568 AC_MSG_RESULT(no)
569 AC_DEFINE(USE_XSMP_INTERACT)
570 else
571 AC_MSG_RESULT(yes)
572 fi
573else
574 AC_MSG_RESULT(yes)
575fi
576
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000577AC_MSG_CHECKING([diff feature])
578if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
579 AC_MSG_RESULT([disabled in $features version])
580else
581 AC_MSG_RESULT(enabled)
582 AC_DEFINE(FEAT_DIFF)
583 XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
584 AC_SUBST(XDIFF_OBJS_USED)
585fi
586
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200587dnl Check for Lua feature.
588AC_MSG_CHECKING(--enable-luainterp argument)
589AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200590 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200591 [enable_luainterp="no"])
592AC_MSG_RESULT($enable_luainterp)
593
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200594if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000595 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100596 AC_MSG_ERROR([cannot use Lua with tiny or small features])
597 fi
598
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200599 dnl -- find the lua executable
600 AC_SUBST(vi_cv_path_lua)
601
602 AC_MSG_CHECKING(--with-lua-prefix argument)
603 AC_ARG_WITH(lua_prefix,
604 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
605 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200606 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200607
608 if test "X$with_lua_prefix" != "X"; then
609 vi_cv_path_lua_pfx="$with_lua_prefix"
610 else
611 AC_MSG_CHECKING(LUA_PREFIX environment var)
612 if test "X$LUA_PREFIX" != "X"; then
613 AC_MSG_RESULT("$LUA_PREFIX")
614 vi_cv_path_lua_pfx="$LUA_PREFIX"
615 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200616 AC_MSG_RESULT([not set, default to /usr])
617 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200618 fi
619 fi
620
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200621 AC_MSG_CHECKING(--with-luajit)
622 AC_ARG_WITH(luajit,
623 [ --with-luajit Link with LuaJIT instead of Lua.],
624 [vi_cv_with_luajit="$withval"],
625 [vi_cv_with_luajit="no"])
626 AC_MSG_RESULT($vi_cv_with_luajit)
627
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200628 LUA_INC=
629 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200630 if test "x$vi_cv_with_luajit" != "xno"; then
631 dnl -- try to find LuaJIT executable
632 AC_PATH_PROG(vi_cv_path_luajit, luajit)
633 if test "X$vi_cv_path_luajit" != "X"; then
634 dnl -- find LuaJIT version
635 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100636 [ 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 +0200637 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
638 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
639 vi_cv_path_lua="$vi_cv_path_luajit"
640 vi_cv_version_lua="$vi_cv_version_lua_luajit"
641 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200642 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200643 dnl -- try to find Lua executable
644 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
645 if test "X$vi_cv_path_plain_lua" != "X"; then
646 dnl -- find Lua version
647 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
648 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
649 fi
650 vi_cv_path_lua="$vi_cv_path_plain_lua"
651 vi_cv_version_lua="$vi_cv_version_plain_lua"
652 fi
653 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
654 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 +0100655 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200656 AC_MSG_RESULT(yes)
657 LUA_INC=/luajit-$vi_cv_version_luajit
658 fi
659 fi
660 if test "X$LUA_INC" = "X"; then
661 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100662 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200663 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200664 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200665 AC_MSG_RESULT(no)
666 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 +0100667 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 AC_MSG_RESULT(yes)
669 LUA_INC=/lua$vi_cv_version_lua
670 else
671 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200672
673 # Detect moonjit:
674 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
675 lua_suf=/moonjit-2.3
676 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200677 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200678 if test -d "$dir" ; then
Bram Moolenaara79a8942020-12-17 20:50:25 +0100679 lua_suf=`basename "$dir"`
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200680 lua_suf="/$lua_suf"
681 break
682 fi
683 done
684 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
685 if test -f "$inc_path$lua_suf/lua.h"; then
686 AC_MSG_RESULT(yes)
687 LUA_INC=$lua_suf
688 else
689 AC_MSG_RESULT(no)
690 vi_cv_path_lua_pfx=
691 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200692 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200693 fi
694 fi
695 fi
696
697 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200698 if test "x$vi_cv_with_luajit" != "xno"; then
699 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
700 if test "X$multiarch" != "X"; then
701 lib_multiarch="lib/${multiarch}"
702 else
703 lib_multiarch="lib"
704 fi
705 if test "X$vi_cv_version_lua" = "X"; then
706 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
707 else
708 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
709 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200710 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200711 if test "X$LUA_INC" != "X"; then
712 dnl Test alternate location using version
713 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
714 else
715 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
716 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200717 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200718 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200719 lua_ok="yes"
720 else
721 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
722 libs_save=$LIBS
723 LIBS="$LIBS $LUA_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100724 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200725 AC_MSG_RESULT(yes); lua_ok="yes",
726 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
727 LIBS=$libs_save
728 fi
729 if test "x$lua_ok" = "xyes"; then
730 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
731 LUA_SRC="if_lua.c"
732 LUA_OBJ="objects/if_lua.o"
733 LUA_PRO="if_lua.pro"
734 AC_DEFINE(FEAT_LUA)
735 fi
736 if test "$enable_luainterp" = "dynamic"; then
737 if test "x$vi_cv_with_luajit" != "xno"; then
738 luajit="jit"
739 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200740 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
741 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
742 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200743 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200744 ext="dylib"
745 indexes=""
746 else
747 ext="so"
748 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
749 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
750 if test "X$multiarch" != "X"; then
751 lib_multiarch="lib/${multiarch}"
752 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200753 fi
754 dnl Determine the sover for the current version, but fallback to
755 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200756 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200757 for subdir in "${lib_multiarch}" lib64 lib; do
758 if test -z "$subdir"; then
759 continue
760 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200761 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
762 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
763 for i in $indexes ""; do
764 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200765 sover2="$i"
766 break 3
767 fi
768 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100769 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200770 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200771 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200772 if test "X$sover" = "X"; then
773 AC_MSG_RESULT(no)
774 lua_ok="no"
775 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
776 else
777 AC_MSG_RESULT(yes)
778 lua_ok="yes"
779 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
780 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200781 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200782 AC_DEFINE(DYNAMIC_LUA)
783 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200784 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200785 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200786 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200787 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000788 test "$vim_cv_uname_m_output" = "x86_64"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200789 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
790 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
791 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200792 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200793 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100794 AC_MSG_ERROR([could not configure lua])
795 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200796 AC_SUBST(LUA_SRC)
797 AC_SUBST(LUA_OBJ)
798 AC_SUBST(LUA_PRO)
799 AC_SUBST(LUA_LIBS)
800 AC_SUBST(LUA_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +0000801 AC_SUBST(LUA_CFLAGS_EXTRA)
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200802fi
803
804
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000805dnl Check for MzScheme feature.
806AC_MSG_CHECKING(--enable-mzschemeinterp argument)
807AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200808 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000809 [enable_mzschemeinterp="no"])
810AC_MSG_RESULT($enable_mzschemeinterp)
811
812if test "$enable_mzschemeinterp" = "yes"; then
813 dnl -- find the mzscheme executable
814 AC_SUBST(vi_cv_path_mzscheme)
815
816 AC_MSG_CHECKING(--with-plthome argument)
817 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000818 [ --with-plthome=PLTHOME Use PLTHOME.],
819 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000820 with_plthome="";AC_MSG_RESULT("no"))
821
822 if test "X$with_plthome" != "X"; then
823 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100824 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000825 else
826 AC_MSG_CHECKING(PLTHOME environment var)
827 if test "X$PLTHOME" != "X"; then
828 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000829 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100830 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000831 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000832 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000833 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000834 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000835
836 dnl resolve symbolic link, the executable is often elsewhere and there
837 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000838 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000839 lsout=`ls -l $vi_cv_path_mzscheme`
840 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
841 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
842 fi
843 fi
844
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000845 if test "X$vi_cv_path_mzscheme" != "X"; then
846 dnl -- find where MzScheme thinks it was installed
847 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000848 dnl different versions of MzScheme differ in command line processing
849 dnl use universal approach
850 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000851 (build-path (call-with-values \
852 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000853 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
854 dnl Remove a trailing slash
855 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
856 sed -e 's+/$++'` ])
857 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000858 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000859 fi
860 fi
861
862 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100863 AC_MSG_CHECKING(for racket include directory)
864 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
865 if test "X$SCHEME_INC" != "X"; then
866 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000867 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100868 AC_MSG_RESULT(not found)
869 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
870 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
871 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000872 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000873 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000874 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100875 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
876 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000877 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100878 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000879 else
880 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100881 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
882 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100883 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100884 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100885 else
886 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100887 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
888 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100889 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100890 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100891 else
892 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100893 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
894 if test -f /usr/include/racket/scheme.h; then
895 AC_MSG_RESULT(yes)
896 SCHEME_INC=/usr/include/racket
897 else
898 AC_MSG_RESULT(no)
899 vi_cv_path_mzscheme_pfx=
900 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100901 fi
902 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000903 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000904 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000905 fi
906 fi
907
908 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100909
910 AC_MSG_CHECKING(for racket lib directory)
911 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
912 if test "X$SCHEME_LIB" != "X"; then
913 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000914 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100915 AC_MSG_RESULT(not found)
916 fi
917
918 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
919 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200920 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100921 MZSCHEME_LIBS="-framework Racket"
922 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
923 elif test -f "${path}/libmzscheme3m.a"; then
924 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
925 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
926 elif test -f "${path}/libracket3m.a"; then
927 MZSCHEME_LIBS="${path}/libracket3m.a"
Bram Moolenaar588d2412020-10-03 14:24:19 +0200928 if test -f "${path}/librktio.a"; then
929 MZSCHEME_LIBS="${MZSCHEME_LIBS} ${path}/librktio.a"
930 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100931 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
932 elif test -f "${path}/libracket.a"; then
933 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
934 elif test -f "${path}/libmzscheme.a"; then
935 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
936 else
937 dnl Using shared objects
938 if test -f "${path}/libmzscheme3m.so"; then
939 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
940 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
941 elif test -f "${path}/libracket3m.so"; then
942 MZSCHEME_LIBS="-L${path} -lracket3m"
943 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
944 elif test -f "${path}/libracket.so"; then
945 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
946 else
947 dnl try next until last
948 if test "$path" != "$SCHEME_LIB"; then
949 continue
950 fi
951 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
952 fi
953 if test "$GCC" = yes; then
954 dnl Make Vim remember the path to the library. For when it's not in
955 dnl $LD_LIBRARY_PATH.
956 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000957 elif test "$vim_cv_uname_output" = SunOS &&
958 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100959 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
960 fi
961 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000962 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100963 if test "X$MZSCHEME_LIBS" != "X"; then
964 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000965 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100966 done
967
968 AC_MSG_CHECKING([if racket requires -pthread])
969 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
970 AC_MSG_RESULT(yes)
971 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
972 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
973 else
974 AC_MSG_RESULT(no)
975 fi
976
977 AC_MSG_CHECKING(for racket config directory)
978 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
979 if test "X$SCHEME_CONFIGDIR" != "X"; then
980 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
981 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
982 else
983 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000984 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100985
986 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100987 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))))'`
988 if test "X$SCHEME_COLLECTS" = "X"; then
989 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
990 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100991 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100992 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
993 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100994 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100995 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
996 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
997 else
998 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
999 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
1000 fi
Bram Moolenaar75676462013-01-30 14:55:42 +01001001 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001002 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001003 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +00001004 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001005 if test "X$SCHEME_COLLECTS" != "X" ; then
1006 AC_MSG_RESULT(${SCHEME_COLLECTS})
1007 else
1008 AC_MSG_RESULT(not found)
1009 fi
1010
1011 AC_MSG_CHECKING(for mzscheme_base.c)
1012 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001013 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001014 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1015 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001016 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001017 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001018 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001019 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1020 MZSCHEME_MOD="++lib scheme/base"
1021 else
1022 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
1023 MZSCHEME_EXTRA="mzscheme_base.c"
1024 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
1025 MZSCHEME_MOD=""
1026 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001027 fi
1028 fi
1029 if test "X$MZSCHEME_EXTRA" != "X" ; then
1030 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001031 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001032 AC_MSG_RESULT(needed)
1033 else
1034 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001035 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001036
Bram Moolenaar9e902192013-07-17 18:58:11 +02001037 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
1038 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
1039
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001040 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001041 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +02001042
1043 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1044 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1045 cflags_save=$CFLAGS
1046 libs_save=$LIBS
1047 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1048 LIBS="$LIBS $MZSCHEME_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001049 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar9e902192013-07-17 18:58:11 +02001050 AC_MSG_RESULT(yes); mzs_ok=yes,
1051 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1052 CFLAGS=$cflags_save
1053 LIBS=$libs_save
1054 if test $mzs_ok = yes; then
1055 MZSCHEME_SRC="if_mzsch.c"
1056 MZSCHEME_OBJ="objects/if_mzsch.o"
1057 MZSCHEME_PRO="if_mzsch.pro"
1058 AC_DEFINE(FEAT_MZSCHEME)
1059 else
1060 MZSCHEME_CFLAGS=
1061 MZSCHEME_LIBS=
1062 MZSCHEME_EXTRA=
1063 MZSCHEME_MZC=
1064 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001065 fi
1066 AC_SUBST(MZSCHEME_SRC)
1067 AC_SUBST(MZSCHEME_OBJ)
1068 AC_SUBST(MZSCHEME_PRO)
1069 AC_SUBST(MZSCHEME_LIBS)
1070 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001071 AC_SUBST(MZSCHEME_EXTRA)
1072 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001073fi
1074
1075
Bram Moolenaar071d4272004-06-13 20:20:40 +00001076AC_MSG_CHECKING(--enable-perlinterp argument)
1077AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001078 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001079 [enable_perlinterp="no"])
1080AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001081if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001082 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001083 AC_MSG_ERROR([cannot use Perl with tiny or small features])
1084 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085 AC_SUBST(vi_cv_path_perl)
1086 AC_PATH_PROG(vi_cv_path_perl, perl)
1087 if test "X$vi_cv_path_perl" != "X"; then
1088 AC_MSG_CHECKING(Perl version)
1089 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1090 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001091 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001092 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1093 badthreads=no
1094 else
1095 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1096 eval `$vi_cv_path_perl -V:use5005threads`
1097 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1098 badthreads=no
1099 else
1100 badthreads=yes
1101 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1102 fi
1103 else
1104 badthreads=yes
1105 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1106 fi
1107 fi
1108 if test $badthreads = no; then
1109 AC_MSG_RESULT(OK)
1110 eval `$vi_cv_path_perl -V:shrpenv`
1111 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1112 shrpenv=""
1113 fi
1114 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1115 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001116 vi_cv_perl_extutils=unknown_perl_extutils_path
1117 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1118 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1119 if test -f "$xsubpp_path"; then
1120 vi_cv_perl_xsubpp="$xsubpp_path"
1121 fi
1122 done
1123 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001125 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001126 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001127 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001128 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001129 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1130 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001131 -e 's/-pipe //' \
1132 -e 's/-W[[^ ]]*//g' \
1133 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1135 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1136 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1137 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1138 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1139 dnl a test in configure may fail because of that.
1140 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1141 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1142
1143 dnl check that compiling a simple program still works with the flags
1144 dnl added for Perl.
1145 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1146 cflags_save=$CFLAGS
1147 libs_save=$LIBS
1148 ldflags_save=$LDFLAGS
1149 CFLAGS="$CFLAGS $perlcppflags"
1150 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001151 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152 LDFLAGS="$perlldflags $LDFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001153 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001154 AC_MSG_RESULT(yes); perl_ok=yes,
1155 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1156 CFLAGS=$cflags_save
1157 LIBS=$libs_save
1158 LDFLAGS=$ldflags_save
1159 if test $perl_ok = yes; then
1160 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001161 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001162 fi
1163 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001164 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001165 LDFLAGS="$perlldflags $LDFLAGS"
1166 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001167 fi
1168 PERL_LIBS=$perllibs
1169 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1170 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1171 PERL_PRO="if_perl.pro if_perlsfio.pro"
1172 AC_DEFINE(FEAT_PERL)
1173 fi
1174 fi
1175 else
1176 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1177 fi
1178 fi
1179
Bram Moolenaard0573012017-10-28 21:11:06 +02001180 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001181 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182 dir=/System/Library/Perl
1183 darwindir=$dir/darwin
1184 if test -d $darwindir; then
1185 PERL=/usr/bin/perl
1186 else
1187 dnl Mac OS X 10.3
1188 dir=/System/Library/Perl/5.8.1
1189 darwindir=$dir/darwin-thread-multi-2level
1190 if test -d $darwindir; then
1191 PERL=/usr/bin/perl
1192 fi
1193 fi
1194 if test -n "$PERL"; then
1195 PERL_DIR="$dir"
1196 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1197 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1198 PERL_LIBS="-L$darwindir/CORE -lperl"
1199 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001200 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1201 dnl be included if requested by passing --with-mac-arch to
1202 dnl configure, so strip these flags first (if present)
1203 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1204 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 +00001205 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001206 if test "$enable_perlinterp" = "dynamic"; then
1207 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1208 AC_DEFINE(DYNAMIC_PERL)
1209 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1210 fi
1211 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001212
1213 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1214 AC_MSG_ERROR([could not configure perl])
1215 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216fi
1217AC_SUBST(shrpenv)
1218AC_SUBST(PERL_SRC)
1219AC_SUBST(PERL_OBJ)
1220AC_SUBST(PERL_PRO)
1221AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001222AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001223AC_SUBST(PERL_LIBS)
1224
1225AC_MSG_CHECKING(--enable-pythoninterp argument)
1226AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001227 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001228 [enable_pythoninterp="no"])
1229AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001230if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001231 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001232 AC_MSG_ERROR([cannot use Python with tiny or small features])
1233 fi
1234
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001236 AC_MSG_CHECKING(--with-python-command argument)
1237 AC_SUBST(vi_cv_path_python)
1238 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1239 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1240 AC_MSG_RESULT(no))
1241
1242 if test "X$vi_cv_path_python" = "X"; then
1243 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1244 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001245 if test "X$vi_cv_path_python" != "X"; then
1246
1247 dnl -- get its version number
1248 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1249 [[vi_cv_var_python_version=`
1250 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1251 ]])
1252
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001253 dnl -- it must be at least version 2.3
1254 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001256 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001257 then
1258 AC_MSG_RESULT(yep)
1259
1260 dnl -- find where python thinks it was installed
1261 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1262 [ vi_cv_path_python_pfx=`
1263 ${vi_cv_path_python} -c \
1264 "import sys; print sys.prefix"` ])
1265
1266 dnl -- and where it thinks it runs
1267 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1268 [ vi_cv_path_python_epfx=`
1269 ${vi_cv_path_python} -c \
1270 "import sys; print sys.exec_prefix"` ])
1271
1272 dnl -- python's internal library path
1273
1274 AC_CACHE_VAL(vi_cv_path_pythonpath,
1275 [ vi_cv_path_pythonpath=`
1276 unset PYTHONPATH;
1277 ${vi_cv_path_python} -c \
1278 "import sys, string; print string.join(sys.path,':')"` ])
1279
1280 dnl -- where the Python implementation library archives are
1281
1282 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001283 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001284 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285
1286 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1287 [
1288 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001289 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1290 if test -d "$d" && test -f "$d/config.c"; then
1291 vi_cv_path_python_conf="$d"
1292 else
1293 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1294 for subdir in lib64 lib share; do
1295 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1296 if test -d "$d" && test -f "$d/config.c"; then
1297 vi_cv_path_python_conf="$d"
1298 fi
1299 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001301 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001302 ])
1303
1304 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1305
1306 if test "X$PYTHON_CONFDIR" = "X"; then
1307 AC_MSG_RESULT([can't find it!])
1308 else
1309
1310 dnl -- we need to examine Python's config/Makefile too
1311 dnl see what the interpreter is built from
1312 AC_CACHE_VAL(vi_cv_path_python_plibs,
1313 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001314 pwd=`pwd`
1315 tmp_mkf="$pwd/config-PyMake$$"
1316 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001317__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001318 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001319 @echo "python_LIBS='$(LIBS)'"
1320 @echo "python_SYSLIBS='$(SYSLIBS)'"
1321 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001322 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001323 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001324 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1325 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1326 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327eof
1328 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001329 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1330 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001331 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1333 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001334 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1335 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1336 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001337 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001338 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001339 dnl -- Check if the path contained in python_LINKFORSHARED is
1340 dnl usable for vim build. If not, make and try other
1341 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001342 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001343 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1344 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1345 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1346 dnl -- The path looks relative. Guess the absolute one using
1347 dnl the prefix and try that.
1348 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1349 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1350 dnl -- A last resort.
1351 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1352 dnl -- No check is done. The last word is left to the
1353 dnl "sanity" test on link flags that follows shortly.
1354 fi
1355 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1356 fi
1357 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001358 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 +00001359 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1360 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1361 fi
1362 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001363 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001364 [
1365 if test "X$python_DLLLIBRARY" != "X"; then
1366 vi_cv_dll_name_python="$python_DLLLIBRARY"
1367 else
1368 vi_cv_dll_name_python="$python_INSTSONAME"
1369 fi
1370 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001371
1372 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1373 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001374 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001376 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 +00001377 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001378 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001379 dnl Define PYTHON_HOME if --with-python-config-dir was used
1380 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1381
1382 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001383 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001384 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001385
1386 dnl On FreeBSD linking with "-pthread" is required to use threads.
1387 dnl _THREAD_SAFE must be used for compiling then.
1388 dnl The "-pthread" is added to $LIBS, so that the following check for
1389 dnl sigaltstack() will look in libc_r (it's there in libc!).
1390 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1391 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1392 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1393 AC_MSG_CHECKING([if -pthread should be used])
1394 threadsafe_flag=
1395 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001396 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001397 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001398 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001399 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001400 threadsafe_flag="-D_THREAD_SAFE"
1401 thread_lib="-pthread"
1402 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001403 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001404 threadsafe_flag="-pthreads"
1405 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001406 fi
1407 libs_save_old=$LIBS
1408 if test -n "$threadsafe_flag"; then
1409 cflags_save=$CFLAGS
1410 CFLAGS="$CFLAGS $threadsafe_flag"
1411 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001412 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001413 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001414 AC_MSG_RESULT(no); LIBS=$libs_save_old
1415 )
1416 CFLAGS=$cflags_save
1417 else
1418 AC_MSG_RESULT(no)
1419 fi
1420
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001421 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001422 dnl added for Python.
1423 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1424 cflags_save=$CFLAGS
1425 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001426 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001427 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001428 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001429 AC_MSG_RESULT(yes); python_ok=yes,
1430 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1431 CFLAGS=$cflags_save
1432 LIBS=$libs_save
1433 if test $python_ok = yes; then
1434 AC_DEFINE(FEAT_PYTHON)
1435 else
1436 LIBS=$libs_save_old
1437 PYTHON_SRC=
1438 PYTHON_OBJ=
1439 PYTHON_LIBS=
1440 PYTHON_CFLAGS=
1441 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001442 fi
1443 else
1444 AC_MSG_RESULT(too old)
1445 fi
1446 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001447
1448 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1449 AC_MSG_ERROR([could not configure python])
1450 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001451fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001452
Bram Moolenaar071d4272004-06-13 20:20:40 +00001453AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001454AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001455AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001456AC_SUBST(PYTHON_SRC)
1457AC_SUBST(PYTHON_OBJ)
1458
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001459
1460AC_MSG_CHECKING(--enable-python3interp argument)
1461AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001462 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001463 [enable_python3interp="no"])
1464AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001465if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001466 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001467 AC_MSG_ERROR([cannot use Python with tiny or small features])
1468 fi
1469
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001470 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001471 AC_MSG_CHECKING(--with-python3-command argument)
1472 AC_SUBST(vi_cv_path_python3)
1473 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1474 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1475 AC_MSG_RESULT(no))
1476
1477 if test "X$vi_cv_path_python3" = "X"; then
1478 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1479 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001480 if test "X$vi_cv_path_python3" != "X"; then
1481
1482 dnl -- get its version number
1483 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1484 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001485 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001486 ]])
1487
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001488 dnl -- it must be at least version 3
1489 AC_MSG_CHECKING(Python is 3.0 or better)
1490 if ${vi_cv_path_python3} -c \
1491 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1492 then
1493 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001494
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001495 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1496 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001497 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001498 vi_cv_var_python3_abiflags=
1499 if ${vi_cv_path_python3} -c \
1500 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1501 then
1502 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1503 "import sys; print(sys.abiflags)"`
1504 fi ])
1505
1506 dnl -- find where python3 thinks it was installed
1507 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1508 [ vi_cv_path_python3_pfx=`
1509 ${vi_cv_path_python3} -c \
1510 "import sys; print(sys.prefix)"` ])
1511
1512 dnl -- and where it thinks it runs
1513 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1514 [ vi_cv_path_python3_epfx=`
1515 ${vi_cv_path_python3} -c \
1516 "import sys; print(sys.exec_prefix)"` ])
1517
1518 dnl -- python3's internal library path
1519
1520 AC_CACHE_VAL(vi_cv_path_python3path,
1521 [ vi_cv_path_python3path=`
1522 unset PYTHONPATH;
1523 ${vi_cv_path_python3} -c \
1524 "import sys, string; print(':'.join(sys.path))"` ])
1525
1526 dnl -- where the Python implementation library archives are
1527
1528 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001529 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001530 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001531
1532 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1533 [
1534 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001535 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001536 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1537 if test "x$d" = "x"; then
1538 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1539 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001540 if test -d "$d" && test -f "$d/config.c"; then
1541 vi_cv_path_python3_conf="$d"
1542 else
1543 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1544 for subdir in lib64 lib share; do
1545 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1546 if test -d "$d" && test -f "$d/config.c"; then
1547 vi_cv_path_python3_conf="$d"
1548 fi
1549 done
1550 done
1551 fi
1552 ])
1553
1554 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1555
1556 if test "X$PYTHON3_CONFDIR" = "X"; then
1557 AC_MSG_RESULT([can't find it!])
1558 else
1559
1560 dnl -- we need to examine Python's config/Makefile too
1561 dnl see what the interpreter is built from
1562 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1563 [
1564 pwd=`pwd`
1565 tmp_mkf="$pwd/config-PyMake$$"
1566 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001567__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001568 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001569 @echo "python3_LIBS='$(LIBS)'"
1570 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001571 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001572 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001573eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001574 dnl -- delete the lines from make about Entering/Leaving directory
1575 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1576 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001577 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 +02001578 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1579 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1580 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1581 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1582 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001583 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001584 [
1585 if test "X$python3_DLLLIBRARY" != "X"; then
1586 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1587 else
1588 vi_cv_dll_name_python3="$python3_INSTSONAME"
1589 fi
1590 ])
1591
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001592 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1593 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001594 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 +02001595 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001596 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 +02001597 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001598 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001599 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1600 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1601 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001602 PYTHON3_SRC="if_python3.c"
1603 PYTHON3_OBJ="objects/if_python3.o"
1604
1605 dnl On FreeBSD linking with "-pthread" is required to use threads.
1606 dnl _THREAD_SAFE must be used for compiling then.
1607 dnl The "-pthread" is added to $LIBS, so that the following check for
1608 dnl sigaltstack() will look in libc_r (it's there in libc!).
1609 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1610 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1611 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1612 AC_MSG_CHECKING([if -pthread should be used])
1613 threadsafe_flag=
1614 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001615 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001616 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001617 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001618 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001619 threadsafe_flag="-D_THREAD_SAFE"
1620 thread_lib="-pthread"
1621 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001622 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001623 threadsafe_flag="-pthreads"
1624 fi
1625 fi
1626 libs_save_old=$LIBS
1627 if test -n "$threadsafe_flag"; then
1628 cflags_save=$CFLAGS
1629 CFLAGS="$CFLAGS $threadsafe_flag"
1630 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001631 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001632 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1633 AC_MSG_RESULT(no); LIBS=$libs_save_old
1634 )
1635 CFLAGS=$cflags_save
1636 else
1637 AC_MSG_RESULT(no)
1638 fi
1639
1640 dnl check that compiling a simple program still works with the flags
1641 dnl added for Python.
1642 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1643 cflags_save=$CFLAGS
1644 libs_save=$LIBS
1645 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1646 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001647 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001648 AC_MSG_RESULT(yes); python3_ok=yes,
1649 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1650 CFLAGS=$cflags_save
1651 LIBS=$libs_save
1652 if test "$python3_ok" = yes; then
1653 AC_DEFINE(FEAT_PYTHON3)
1654 else
1655 LIBS=$libs_save_old
1656 PYTHON3_SRC=
1657 PYTHON3_OBJ=
1658 PYTHON3_LIBS=
1659 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001660 fi
1661 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001662 else
1663 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001664 fi
1665 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001666 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1667 AC_MSG_ERROR([could not configure python3])
1668 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001669fi
1670
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001671AC_SUBST(PYTHON3_LIBS)
1672AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001673AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001674AC_SUBST(PYTHON3_SRC)
1675AC_SUBST(PYTHON3_OBJ)
1676
1677dnl if python2.x and python3.x are enabled one can only link in code
1678dnl with dlopen(), dlsym(), dlclose()
1679if test "$python_ok" = yes && test "$python3_ok" = yes; then
1680 AC_DEFINE(DYNAMIC_PYTHON)
1681 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001682 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001683 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001684 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001685 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001686 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001687 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001688 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001689 #include <dlfcn.h>
1690 /* If this program fails, then RTLD_GLOBAL is needed.
1691 * RTLD_GLOBAL will be used and then it is not possible to
1692 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001693 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001694 */
1695
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001696 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001697 {
1698 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001699 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001700 if (pylib != 0)
1701 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001702 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001703 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1704 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1705 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001706 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001707 (*init)();
1708 needed = (*simple)("import termios") == -1;
1709 (*final)();
1710 dlclose(pylib);
1711 }
1712 return !needed;
1713 }
1714
1715 int main(int argc, char** argv)
1716 {
1717 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001718 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001719 not_needed = 1;
1720 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001721 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001722 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001723
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001724 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001725 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001726
1727 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1728 cflags_save=$CFLAGS
1729 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001730 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001731 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001732 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001733 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001734 #include <dlfcn.h>
1735 #include <wchar.h>
1736 /* If this program fails, then RTLD_GLOBAL is needed.
1737 * RTLD_GLOBAL will be used and then it is not possible to
1738 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001739 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001740 */
1741
1742 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1743 {
1744 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001745 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001746 if (pylib != 0)
1747 {
1748 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1749 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1750 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1751 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1752 (*pfx)(prefix);
1753 (*init)();
1754 needed = (*simple)("import termios") == -1;
1755 (*final)();
1756 dlclose(pylib);
1757 }
1758 return !needed;
1759 }
1760
1761 int main(int argc, char** argv)
1762 {
1763 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001764 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001765 not_needed = 1;
1766 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001767 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001768 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1769
1770 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001771 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001772
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001773 PYTHON_SRC="if_python.c"
1774 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001775 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001776 PYTHON_LIBS=
1777 PYTHON3_SRC="if_python3.c"
1778 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001779 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001780 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001781elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1782 AC_DEFINE(DYNAMIC_PYTHON)
1783 PYTHON_SRC="if_python.c"
1784 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001785 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001786 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001787elif test "$python_ok" = yes; then
1788 dnl Check that adding -fPIE works. It may be needed when using a static
1789 dnl Python library.
1790 AC_MSG_CHECKING([if -fPIE can be added for Python])
1791 cflags_save=$CFLAGS
1792 libs_save=$LIBS
1793 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1794 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001795 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001796 AC_MSG_RESULT(yes); fpie_ok=yes,
1797 AC_MSG_RESULT(no); fpie_ok=no)
1798 CFLAGS=$cflags_save
1799 LIBS=$libs_save
1800 if test $fpie_ok = yes; then
1801 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1802 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001803elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1804 AC_DEFINE(DYNAMIC_PYTHON3)
1805 PYTHON3_SRC="if_python3.c"
1806 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001807 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001808 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001809elif test "$python3_ok" = yes; then
1810 dnl Check that adding -fPIE works. It may be needed when using a static
1811 dnl Python library.
1812 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1813 cflags_save=$CFLAGS
1814 libs_save=$LIBS
1815 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1816 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001817 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001818 AC_MSG_RESULT(yes); fpie_ok=yes,
1819 AC_MSG_RESULT(no); fpie_ok=no)
1820 CFLAGS=$cflags_save
1821 LIBS=$libs_save
1822 if test $fpie_ok = yes; then
1823 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1824 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001825fi
1826
Bram Moolenaar071d4272004-06-13 20:20:40 +00001827AC_MSG_CHECKING(--enable-tclinterp argument)
1828AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001829 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001830 [enable_tclinterp="no"])
1831AC_MSG_RESULT($enable_tclinterp)
1832
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001833if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001834
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001835 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001836 AC_MSG_CHECKING(--with-tclsh argument)
1837 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1838 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001839 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001840 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1841 AC_SUBST(vi_cv_path_tcl)
1842
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001843 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1844 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1845 tclsh_name="tclsh8.4"
1846 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1847 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001848 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 tclsh_name="tclsh8.2"
1850 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1851 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001852 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1853 tclsh_name="tclsh8.0"
1854 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1855 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001856 dnl still didn't find it, try without version number
1857 if test "X$vi_cv_path_tcl" = "X"; then
1858 tclsh_name="tclsh"
1859 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1860 fi
1861 if test "X$vi_cv_path_tcl" != "X"; then
1862 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001863 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001864 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1865 AC_MSG_RESULT($tclver - OK);
1866 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 +01001867 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001868
1869 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001870 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001871 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 +00001872 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001873 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001874 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001875 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1876 tclinc="$tclloc/include $tclloc/include/tcl $tclloc/include/tcl$tclver /System/Library/Frameworks/Tcl.framework/Headers `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework/Versions/Current/Headers"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001877 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001878 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001879 for try in $tclinc; do
1880 if test -f "$try/tcl.h"; then
1881 AC_MSG_RESULT($try/tcl.h)
1882 TCL_INC=$try
1883 break
1884 fi
1885 done
1886 if test -z "$TCL_INC"; then
1887 AC_MSG_RESULT(<not found>)
1888 SKIP_TCL=YES
1889 fi
1890 if test -z "$SKIP_TCL"; then
1891 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001892 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001893 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001894 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001895 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001896 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001897 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001898 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1899 tclcnf=`echo $tclinc | sed s/include/lib/g`
1900 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001901 fi
1902 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001903 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001904 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001905 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001906 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001907 if test "$enable_tclinterp" = "dynamic"; then
1908 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1909 else
1910 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1911 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001912 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001913 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001914 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 +00001915 break
1916 fi
1917 done
1918 if test -z "$TCL_LIBS"; then
1919 AC_MSG_RESULT(<not found>)
1920 AC_MSG_CHECKING(for Tcl library by myself)
1921 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001922 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001923 for ext in .so .a ; do
1924 for ver in "" $tclver ; do
1925 for try in $tcllib ; do
1926 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001927 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001928 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001929 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001930 if test "$vim_cv_uname_output" = SunOS &&
1931 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001932 TCL_LIBS="$TCL_LIBS -R $try"
1933 fi
1934 break 3
1935 fi
1936 done
1937 done
1938 done
1939 if test -z "$TCL_LIBS"; then
1940 AC_MSG_RESULT(<not found>)
1941 SKIP_TCL=YES
1942 fi
1943 fi
1944 if test -z "$SKIP_TCL"; then
1945 AC_DEFINE(FEAT_TCL)
1946 TCL_SRC=if_tcl.c
1947 TCL_OBJ=objects/if_tcl.o
1948 TCL_PRO=if_tcl.pro
1949 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1950 fi
1951 fi
1952 else
1953 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1954 fi
1955 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001956 if test "$enable_tclinterp" = "dynamic"; then
1957 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1958 AC_DEFINE(DYNAMIC_TCL)
1959 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1960 fi
1961 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001962 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1963 AC_MSG_ERROR([could not configure Tcl])
1964 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001965fi
1966AC_SUBST(TCL_SRC)
1967AC_SUBST(TCL_OBJ)
1968AC_SUBST(TCL_PRO)
1969AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001970AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001971AC_SUBST(TCL_LIBS)
1972
1973AC_MSG_CHECKING(--enable-rubyinterp argument)
1974AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001975 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001976 [enable_rubyinterp="no"])
1977AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001978if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001979 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001980 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1981 fi
1982
Bram Moolenaar165641d2010-02-17 16:23:09 +01001983 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001984 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001985 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1986 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1987 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001988 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001989 if test "X$vi_cv_path_ruby" != "X"; then
1990 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001991 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 +00001992 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001993 AC_MSG_CHECKING(Ruby rbconfig)
1994 ruby_rbconfig="RbConfig"
1995 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1996 ruby_rbconfig="Config"
1997 fi
1998 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001999 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002000 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 +00002001 if test "X$rubyhdrdir" != "X"; then
2002 AC_MSG_RESULT($rubyhdrdir)
2003 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002004 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2005 if test -d "$rubyarchdir"; then
2006 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002007 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002008 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002009 if test "X$rubyversion" = "X"; then
2010 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
2011 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002012 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002013 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002014 if test "X$rubylibs" != "X"; then
2015 RUBY_LIBS="$rubylibs"
2016 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002017 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2018 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002019 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01002020 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002021 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2022 elif test "$librubyarg" = "libruby.a"; then
2023 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2024 librubyarg="-lruby"
2025 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002026 fi
2027
2028 if test "X$librubyarg" != "X"; then
2029 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2030 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002031 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002032 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002033 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
2034 dnl be included if requested by passing --with-mac-arch to
2035 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02002036 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002037 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01002038 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02002039 LDFLAGS="$rubyldflags $LDFLAGS"
2040 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002041 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002042 fi
2043 RUBY_SRC="if_ruby.c"
2044 RUBY_OBJ="objects/if_ruby.o"
2045 RUBY_PRO="if_ruby.pro"
2046 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002047 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002048 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002049 if test -z "$libruby_soname"; then
2050 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2051 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002052 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002053 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002054 RUBY_LIBS=
2055 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002056 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2057 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2058 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002060 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002061 fi
2062 else
2063 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2064 fi
2065 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002066
2067 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2068 AC_MSG_ERROR([could not configure Ruby])
2069 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070fi
2071AC_SUBST(RUBY_SRC)
2072AC_SUBST(RUBY_OBJ)
2073AC_SUBST(RUBY_PRO)
2074AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002075AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002076AC_SUBST(RUBY_LIBS)
2077
2078AC_MSG_CHECKING(--enable-cscope argument)
2079AC_ARG_ENABLE(cscope,
2080 [ --enable-cscope Include cscope interface.], ,
2081 [enable_cscope="no"])
2082AC_MSG_RESULT($enable_cscope)
2083if test "$enable_cscope" = "yes"; then
2084 AC_DEFINE(FEAT_CSCOPE)
2085fi
2086
Bram Moolenaar071d4272004-06-13 20:20:40 +00002087AC_MSG_CHECKING(--disable-netbeans argument)
2088AC_ARG_ENABLE(netbeans,
2089 [ --disable-netbeans Disable NetBeans integration support.],
2090 , [enable_netbeans="yes"])
2091if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002092 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002093 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2094 enable_netbeans="no"
2095 else
2096 AC_MSG_RESULT(no)
2097 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002098else
2099 AC_MSG_RESULT(yes)
2100fi
2101
2102AC_MSG_CHECKING(--disable-channel argument)
2103AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002104 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002105 , [enable_channel="yes"])
2106if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002107 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002108 AC_MSG_RESULT([cannot use channels with tiny or small features])
2109 enable_channel="no"
2110 else
2111 AC_MSG_RESULT(no)
2112 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002113else
2114 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002115 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002116 enable_netbeans="no"
2117 else
2118 AC_MSG_RESULT(yes)
2119 fi
2120fi
2121
Bram Moolenaar16435482016-01-24 21:31:54 +01002122if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002123 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002124 if test "x$HAIKU" = "xyes"; then
2125 AC_CHECK_LIB(network, socket)
2126 else
2127 AC_CHECK_LIB(socket, socket)
2128 fi
2129
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002130 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002131 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002132#include <stdio.h>
2133#include <stdlib.h>
2134#include <stdarg.h>
2135#include <fcntl.h>
2136#include <netdb.h>
2137#include <netinet/in.h>
2138#include <errno.h>
2139#include <sys/types.h>
2140#include <sys/socket.h>
2141 /* Check bitfields */
2142 struct nbbuf {
2143 unsigned int initDone:1;
2144 unsigned short signmaplen;
2145 };
2146 ], [
2147 /* Check creating a socket. */
2148 struct sockaddr_in server;
2149 struct addrinfo *res;
2150 (void)socket(AF_INET, SOCK_STREAM, 0);
2151 (void)htons(100);
2152 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2153 if (errno == ECONNREFUSED)
2154 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2155 (void)freeaddrinfo(res);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002156 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002157 [vim_cv_ipv6_networking="yes"],
2158 [vim_cv_ipv6_networking="no"])])
2159
2160 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2161 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002162 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002163 else
2164 dnl On Solaris we need the nsl library.
2165 AC_CHECK_LIB(nsl, gethostbyname)
2166 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002167 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002168#include <stdio.h>
2169#include <stdlib.h>
2170#include <stdarg.h>
2171#include <fcntl.h>
2172#include <netdb.h>
2173#include <netinet/in.h>
2174#include <errno.h>
2175#include <sys/types.h>
2176#include <sys/socket.h>
2177 /* Check bitfields */
2178 struct nbbuf {
2179 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002180 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002181 };
2182 ], [
2183 /* Check creating a socket. */
2184 struct sockaddr_in server;
2185 (void)socket(AF_INET, SOCK_STREAM, 0);
2186 (void)htons(100);
2187 (void)gethostbyname("microsoft.com");
2188 if (errno == ECONNREFUSED)
2189 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002190 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002191 [vim_cv_ipv4_networking="yes"],
2192 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2193 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002194fi
2195if test "$enable_netbeans" = "yes"; then
2196 AC_DEFINE(FEAT_NETBEANS_INTG)
2197 NETBEANS_SRC="netbeans.c"
2198 AC_SUBST(NETBEANS_SRC)
2199 NETBEANS_OBJ="objects/netbeans.o"
2200 AC_SUBST(NETBEANS_OBJ)
2201fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002202if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002203 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002204 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002205 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002206 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002207 AC_SUBST(CHANNEL_OBJ)
2208fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002209
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002210AC_MSG_CHECKING(--enable-terminal argument)
2211AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002212 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002213 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002214if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002215 if test "$has_eval" = "no"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002216 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2217 enable_terminal="no"
2218 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002219 if test "$enable_terminal" = "auto"; then
2220 enable_terminal="yes"
2221 AC_MSG_RESULT(defaulting to yes)
2222 else
2223 AC_MSG_RESULT(yes)
2224 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002225 fi
2226else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002227 if test "$enable_terminal" = "auto"; then
2228 enable_terminal="no"
2229 AC_MSG_RESULT(defaulting to no)
2230 else
2231 AC_MSG_RESULT(no)
2232 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002233fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002234if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002235 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002236 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 +02002237 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002238 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 +02002239 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002240 TERM_TEST="test_libvterm"
2241 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002242fi
2243
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002244AC_MSG_CHECKING(--enable-autoservername argument)
2245AC_ARG_ENABLE(autoservername,
2246 [ --enable-autoservername Automatically define servername at vim startup.], ,
2247 [enable_autoservername="no"])
2248AC_MSG_RESULT($enable_autoservername)
2249if test "$enable_autoservername" = "yes"; then
2250 AC_DEFINE(FEAT_AUTOSERVERNAME)
2251fi
2252
Bram Moolenaar071d4272004-06-13 20:20:40 +00002253AC_MSG_CHECKING(--enable-multibyte argument)
2254AC_ARG_ENABLE(multibyte,
2255 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002256 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002257AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002258if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002259 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2260 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261fi
2262
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002263dnl Right-to-Left language support for Vim will be included with big features,
2264dnl unless ENABLE_RIGHTLEFT is undefined.
2265AC_MSG_CHECKING(--disable-rightleft argument)
2266AC_ARG_ENABLE(rightleft,
2267 [ --disable-rightleft Do not include Right-to-Left language support.],
2268 , [enable_rightleft="yes"])
2269if test "$enable_rightleft" = "yes"; then
2270 AC_MSG_RESULT(no)
2271else
2272 AC_MSG_RESULT(yes)
2273 AC_DEFINE(DISABLE_RIGHTLEFT)
2274fi
2275
2276dnl Arabic language support for Vim will be included with big features,
2277dnl unless ENABLE_ARABIC is undefined.
2278AC_MSG_CHECKING(--disable-arabic argument)
2279AC_ARG_ENABLE(arabic,
2280 [ --disable-arabic Do not include Arabic language support.],
2281 , [enable_arabic="yes"])
2282if test "$enable_arabic" = "yes"; then
2283 AC_MSG_RESULT(no)
2284else
2285 AC_MSG_RESULT(yes)
2286 AC_DEFINE(DISABLE_ARABIC)
2287fi
2288
Bram Moolenaar14184a32019-02-16 15:10:30 +01002289dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002290AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002291 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002292
Bram Moolenaar071d4272004-06-13 20:20:40 +00002293AC_MSG_CHECKING(--enable-xim argument)
2294AC_ARG_ENABLE(xim,
2295 [ --enable-xim Include XIM input support.],
2296 AC_MSG_RESULT($enable_xim),
2297 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002298
2299AC_MSG_CHECKING(--enable-fontset argument)
2300AC_ARG_ENABLE(fontset,
2301 [ --enable-fontset Include X fontset output support.], ,
2302 [enable_fontset="no"])
2303AC_MSG_RESULT($enable_fontset)
2304dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2305
2306test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002307test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002308if test "$with_x" = no; then
2309 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2310else
2311 dnl Do this check early, so that its failure can override user requests.
2312
2313 AC_PATH_PROG(xmkmfpath, xmkmf)
2314
2315 AC_PATH_XTRA
2316
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002317 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002318 dnl be compiled with a special option.
2319 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002320 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002321 CFLAGS="$CFLAGS -W c,dll"
2322 LDFLAGS="$LDFLAGS -W l,dll"
2323 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2324 fi
2325
2326 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002327 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002328
2329 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2330 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2331 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2332 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002333 if test "$vim_cv_uname_output" = SunOS &&
2334 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002335 X_LIBS="$X_LIBS -R $x_libraries"
2336 fi
2337 fi
2338
2339 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2340 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2341 AC_MSG_RESULT(Corrected X includes to $x_includes)
2342 X_CFLAGS="$X_CFLAGS -I$x_includes"
2343 fi
2344
2345 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2346 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2347 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2348 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2349 dnl Same for "-R/usr/lib ".
2350 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2351
2352
2353 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002354 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2355 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002356 AC_MSG_CHECKING(if X11 header files can be found)
2357 cflags_save=$CFLAGS
2358 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002359 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
2360#include <X11/Intrinsic.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002361 AC_MSG_RESULT(yes),
2362 AC_MSG_RESULT(no); no_x=yes)
2363 CFLAGS=$cflags_save
2364
2365 if test "${no_x-no}" = yes; then
2366 with_x=no
2367 else
2368 AC_DEFINE(HAVE_X11)
2369 X_LIB="-lXt -lX11";
2370 AC_SUBST(X_LIB)
2371
2372 ac_save_LDFLAGS="$LDFLAGS"
2373 LDFLAGS="-L$x_libraries $LDFLAGS"
2374
2375 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2376 dnl For HP-UX 10.20 it must be before -lSM -lICE
2377 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2378 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2379
2380 dnl Some systems need -lnsl -lsocket when testing for ICE.
2381 dnl The check above doesn't do this, try here (again). Also needed to get
2382 dnl them after Xdmcp. link.sh will remove them when not needed.
2383 dnl Check for other function than above to avoid the cached value
2384 AC_CHECK_LIB(ICE, IceOpenConnection,
2385 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2386
2387 dnl Check for -lXpm (needed for some versions of Motif)
2388 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2389 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2390 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2391
2392 dnl Check that the X11 header files don't use implicit declarations
2393 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2394 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002395 dnl -Werror is GCC only, others like Solaris Studio might not like it
2396 if test "$GCC" = yes; then
2397 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2398 else
2399 CFLAGS="$CFLAGS $X_CFLAGS"
2400 fi
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002401 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002402 AC_MSG_RESULT(no),
2403 CFLAGS="$CFLAGS -Wno-implicit-int"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002404 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002405 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2406 AC_MSG_RESULT(test failed)
2407 )
2408 )
2409 CFLAGS=$cflags_save
2410
2411 LDFLAGS="$ac_save_LDFLAGS"
2412
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002413 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2414 AC_CACHE_VAL(ac_cv_small_wchar_t,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002415 [AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002416#include <X11/Xlib.h>
2417#if STDC_HEADERS
2418# include <stdlib.h>
2419# include <stddef.h>
2420#endif
2421 main()
2422 {
2423 if (sizeof(wchar_t) <= 2)
2424 exit(1);
2425 exit(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002426 }])],
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002427 ac_cv_small_wchar_t="no",
2428 ac_cv_small_wchar_t="yes",
2429 AC_MSG_ERROR(failed to compile test program))])
2430 AC_MSG_RESULT($ac_cv_small_wchar_t)
2431 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2432 AC_DEFINE(SMALL_WCHAR_T)
2433 fi
2434
Bram Moolenaar071d4272004-06-13 20:20:40 +00002435 fi
2436fi
2437
Bram Moolenaard2a05492018-07-27 22:35:15 +02002438dnl Check if --with-x was given but it doesn't work.
2439if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2440 AC_MSG_ERROR([could not configure X])
2441fi
2442
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002443test "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 +00002444
2445AC_MSG_CHECKING(--enable-gui argument)
2446AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002447 [ --enable-gui[=OPTS] X11 GUI. [default=auto] [OPTS=auto/no/gtk2/gnome2/gtk3/motif/haiku/photon/carbon]], , enable_gui="auto")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002448
2449dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2450dnl Do not use character classes for portability with old tools.
2451enable_gui_canon=`echo "_$enable_gui" | \
2452 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2453
2454dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002455SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002456SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002457SKIP_GNOME=YES
2458SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002459SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002460SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002461GUITYPE=NONE
2462
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002463if test "x$HAIKU" = "xyes"; then
2464 SKIP_HAIKU=
2465 case "$enable_gui_canon" in
2466 no) AC_MSG_RESULT(no GUI support)
2467 SKIP_HAIKU=YES ;;
2468 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2469 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2470 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2471 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2472 SKIP_HAIKU=YES ;;
2473 esac
2474elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002475 SKIP_PHOTON=
2476 case "$enable_gui_canon" in
2477 no) AC_MSG_RESULT(no GUI support)
2478 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002479 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2480 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002481 photon) AC_MSG_RESULT(Photon GUI support) ;;
2482 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2483 SKIP_PHOTON=YES ;;
2484 esac
2485
Bram Moolenaar040f9752020-08-11 23:08:48 +02002486elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2487 case "$enable_gui_canon" in
2488 no) AC_MSG_RESULT(no GUI support) ;;
2489 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2490 gui_auto=yes ;;
2491 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002492 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002493 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002494else
2495
Bram Moolenaar071d4272004-06-13 20:20:40 +00002496 case "$enable_gui_canon" in
2497 no|none) AC_MSG_RESULT(no GUI support) ;;
2498 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002499 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002500 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002501 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002503 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002504 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002505 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002506 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2507 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002508 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002509 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2510 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002511 motif) AC_MSG_RESULT(Motif GUI support)
2512 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002513 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2514 esac
2515
2516fi
2517
Bram Moolenaar071d4272004-06-13 20:20:40 +00002518if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2519 -a "$enable_gui_canon" != "gnome2"; then
2520 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2521 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002522 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002523 , enable_gtk2_check="yes")
2524 AC_MSG_RESULT($enable_gtk2_check)
2525 if test "x$enable_gtk2_check" = "xno"; then
2526 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002527 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002528 fi
2529fi
2530
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002531if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002532 AC_MSG_CHECKING(whether or not to look for GNOME)
2533 AC_ARG_ENABLE(gnome-check,
2534 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2535 , enable_gnome_check="no")
2536 AC_MSG_RESULT($enable_gnome_check)
2537 if test "x$enable_gnome_check" = "xno"; then
2538 SKIP_GNOME=YES
2539 fi
2540fi
2541
Bram Moolenaar98921892016-02-23 17:14:37 +01002542if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2543 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2544 AC_ARG_ENABLE(gtk3-check,
2545 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2546 , enable_gtk3_check="yes")
2547 AC_MSG_RESULT($enable_gtk3_check)
2548 if test "x$enable_gtk3_check" = "xno"; then
2549 SKIP_GTK3=YES
2550 fi
2551fi
2552
Bram Moolenaar071d4272004-06-13 20:20:40 +00002553if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2554 AC_MSG_CHECKING(whether or not to look for Motif)
2555 AC_ARG_ENABLE(motif-check,
2556 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2557 , enable_motif_check="yes")
2558 AC_MSG_RESULT($enable_motif_check)
2559 if test "x$enable_motif_check" = "xno"; then
2560 SKIP_MOTIF=YES
2561 fi
2562fi
2563
Bram Moolenaar071d4272004-06-13 20:20:40 +00002564dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002565dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002566dnl
2567dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002568dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002569dnl
2570AC_DEFUN(AM_PATH_GTK,
2571[
2572 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2573 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002574 no_gtk=""
2575 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2576 && $PKG_CONFIG --exists gtk+-2.0; then
2577 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002578 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2579 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002580 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2581 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2582 dnl something like that.
2583 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002584 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002585 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2586 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2587 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2588 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2589 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2590 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2591 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2592 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002593 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2594 && $PKG_CONFIG --exists gtk+-3.0; then
2595 {
2596 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2597 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2598
2599 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2600 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2601 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2602 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2603 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2604 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2605 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2606 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2607 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2608 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002609 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002610 dnl Put some text before the "no" to hint at installing the gtk-dev
2611 dnl packages.
2612 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002613 no_gtk=yes
2614 fi
2615
2616 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2617 {
2618 ac_save_CFLAGS="$CFLAGS"
2619 ac_save_LIBS="$LIBS"
2620 CFLAGS="$CFLAGS $GTK_CFLAGS"
2621 LIBS="$LIBS $GTK_LIBS"
2622
2623 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002624 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002625 dnl
2626 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002627 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002628#include <gtk/gtk.h>
2629#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002630#if STDC_HEADERS
2631# include <stdlib.h>
2632# include <stddef.h>
2633#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002634
2635int
2636main ()
2637{
2638int major, minor, micro;
2639char *tmp_version;
2640
2641system ("touch conf.gtktest");
2642
2643/* HP/UX 9 (%@#!) writes to sscanf strings */
2644tmp_version = g_strdup("$min_gtk_version");
2645if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2646 printf("%s, bad version string\n", "$min_gtk_version");
2647 exit(1);
2648 }
2649
2650if ((gtk_major_version > major) ||
2651 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2652 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2653 (gtk_micro_version >= micro)))
2654{
2655 return 0;
2656}
2657return 1;
2658}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002659])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002660 CFLAGS="$ac_save_CFLAGS"
2661 LIBS="$ac_save_LIBS"
2662 }
2663 fi
2664 if test "x$no_gtk" = x ; then
2665 if test "x$enable_gtktest" = "xyes"; then
2666 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2667 else
2668 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2669 fi
2670 ifelse([$2], , :, [$2])
2671 else
2672 {
2673 AC_MSG_RESULT(no)
2674 GTK_CFLAGS=""
2675 GTK_LIBS=""
2676 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002677 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2678 AC_MSG_ERROR([could not configure GTK])
2679 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002680 }
2681 fi
2682 }
2683 else
2684 GTK_CFLAGS=""
2685 GTK_LIBS=""
2686 ifelse([$3], , :, [$3])
2687 fi
2688 AC_SUBST(GTK_CFLAGS)
2689 AC_SUBST(GTK_LIBS)
2690 rm -f conf.gtktest
2691])
2692
2693dnl ---------------------------------------------------------------------------
2694dnl gnome
2695dnl ---------------------------------------------------------------------------
2696AC_DEFUN([GNOME_INIT_HOOK],
2697[
2698 AC_SUBST(GNOME_LIBS)
2699 AC_SUBST(GNOME_LIBDIR)
2700 AC_SUBST(GNOME_INCLUDEDIR)
2701
2702 AC_ARG_WITH(gnome-includes,
2703 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2704 [CFLAGS="$CFLAGS -I$withval"]
2705 )
2706
2707 AC_ARG_WITH(gnome-libs,
2708 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2709 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2710 )
2711
2712 AC_ARG_WITH(gnome,
2713 [ --with-gnome Specify prefix for GNOME files],
2714 if test x$withval = xyes; then
2715 want_gnome=yes
2716 ifelse([$1], [], :, [$1])
2717 else
2718 if test "x$withval" = xno; then
2719 want_gnome=no
2720 else
2721 want_gnome=yes
2722 LDFLAGS="$LDFLAGS -L$withval/lib"
2723 CFLAGS="$CFLAGS -I$withval/include"
2724 gnome_prefix=$withval/lib
2725 fi
2726 fi,
2727 want_gnome=yes)
2728
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002729 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002730 {
2731 AC_MSG_CHECKING(for libgnomeui-2.0)
2732 if $PKG_CONFIG --exists libgnomeui-2.0; then
2733 AC_MSG_RESULT(yes)
2734 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2735 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2736 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002737
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002738 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2739 dnl This might not be the right way but it works for me...
2740 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002741 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002742 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002743 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002744 GNOME_LIBS="$GNOME_LIBS -pthread"
2745 else
2746 AC_MSG_RESULT(no)
2747 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002748 $1
2749 else
2750 AC_MSG_RESULT(not found)
2751 if test "x$2" = xfail; then
2752 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2753 fi
2754 fi
2755 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002756 fi
2757])
2758
2759AC_DEFUN([GNOME_INIT],[
2760 GNOME_INIT_HOOK([],fail)
2761])
2762
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002763if test "X$PKG_CONFIG" = "X"; then
2764 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2765fi
2766
Bram Moolenaar071d4272004-06-13 20:20:40 +00002767
2768dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002769dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002770dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002771if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002772
2773 AC_MSG_CHECKING(--disable-gtktest argument)
2774 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2775 , enable_gtktest=yes)
2776 if test "x$enable_gtktest" = "xyes" ; then
2777 AC_MSG_RESULT(gtk test enabled)
2778 else
2779 AC_MSG_RESULT(gtk test disabled)
2780 fi
2781
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002782 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002783 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2784 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002785 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2786 dnl found.
2787 save_skip_gtk3=$SKIP_GTK3
2788 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002789 AM_PATH_GTK(2.2.0,
2790 [GUI_LIB_LOC="$GTK_LIBDIR"
2791 GTK_LIBNAME="$GTK_LIBS"
2792 GUI_INC_LOC="$GTK_CFLAGS"], )
2793 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002794 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002795 SKIP_MOTIF=YES
2796 GUITYPE=GTK
2797 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002798 else
2799 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002800 fi
2801 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002802 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002803 dnl
2804 dnl if GTK exists, then check for GNOME.
2805 dnl
2806 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002807 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002808 GNOME_INIT_HOOK([have_gnome=yes])
2809 if test "x$have_gnome" = xyes ; then
2810 AC_DEFINE(FEAT_GUI_GNOME)
2811 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2812 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002813 fi
2814 }
2815 fi
2816 fi
2817fi
2818
Bram Moolenaar98921892016-02-23 17:14:37 +01002819
2820dnl ---------------------------------------------------------------------------
2821dnl Check for GTK3.
2822dnl ---------------------------------------------------------------------------
2823if test -z "$SKIP_GTK3"; then
2824
2825 AC_MSG_CHECKING(--disable-gtktest argument)
2826 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2827 , enable_gtktest=yes)
2828 if test "x$enable_gtktest" = "xyes" ; then
2829 AC_MSG_RESULT(gtk test enabled)
2830 else
2831 AC_MSG_RESULT(gtk test disabled)
2832 fi
2833
Bram Moolenaar98921892016-02-23 17:14:37 +01002834 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002835 save_skip_gtk2=$SKIP_GTK2
2836 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002837 AM_PATH_GTK(3.0.0,
2838 [GUI_LIB_LOC="$GTK_LIBDIR"
2839 GTK_LIBNAME="$GTK_LIBS"
2840 GUI_INC_LOC="$GTK_CFLAGS"], )
2841 if test "x$GTK_CFLAGS" != "x"; then
2842 SKIP_GTK2=YES
2843 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002844 SKIP_MOTIF=YES
2845 GUITYPE=GTK
2846 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002847 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002848 else
2849 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002850 fi
2851 fi
2852fi
2853
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002854dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002855dnl glib-compile-resources is found in PATH, use GResource.
2856if test "x$GUITYPE" = "xGTK"; then
2857 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2858 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2859 if test "x$gdk_pixbuf_version" != x ; then
2860 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2861 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2862 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002863 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002864 AC_MSG_RESULT([OK.])
2865 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2866 AC_MSG_CHECKING([glib-compile-resources])
2867 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002868 GLIB_COMPILE_RESOURCES=""
2869 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002870 else
2871 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002872 AC_DEFINE(USE_GRESOURCE)
2873 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2874 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002875 fi
2876 else
2877 AC_MSG_RESULT([not usable.])
2878 fi
2879 else
2880 AC_MSG_RESULT([cannot obtain from pkg_config.])
2881 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002882
2883 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2884 AC_ARG_ENABLE(icon_cache_update,
2885 [ --disable-icon-cache-update update disabled],
2886 [],
2887 [enable_icon_cache_update="yes"])
2888 if test "$enable_icon_cache_update" = "yes"; then
2889 AC_MSG_RESULT([not set])
2890 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2891 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2892 AC_MSG_RESULT([not found in PATH.])
2893 fi
2894 else
2895 AC_MSG_RESULT([update disabled])
2896 fi
2897
2898 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2899 AC_ARG_ENABLE(desktop_database_update,
2900 [ --disable-desktop-database-update update disabled],
2901 [],
2902 [enable_desktop_database_update="yes"])
2903 if test "$enable_desktop_database_update" = "yes"; then
2904 AC_MSG_RESULT([not set])
2905 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2906 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2907 AC_MSG_RESULT([not found in PATH.])
2908 fi
2909 else
2910 AC_MSG_RESULT([update disabled])
2911 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002912fi
2913AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002914AC_SUBST(GRESOURCE_SRC)
2915AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002916AC_SUBST(GTK_UPDATE_ICON_CACHE)
2917AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002918
Bram Moolenaar071d4272004-06-13 20:20:40 +00002919dnl Check for Motif include files location.
2920dnl The LAST one found is used, this makes the highest version to be used,
2921dnl e.g. when Motif1.2 and Motif2.0 are both present.
2922
2923if test -z "$SKIP_MOTIF"; then
2924 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"
2925 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2926 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2927
2928 AC_MSG_CHECKING(for location of Motif GUI includes)
2929 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2930 GUI_INC_LOC=
2931 for try in $gui_includes; do
2932 if test -f "$try/Xm/Xm.h"; then
2933 GUI_INC_LOC=$try
2934 fi
2935 done
2936 if test -n "$GUI_INC_LOC"; then
2937 if test "$GUI_INC_LOC" = /usr/include; then
2938 GUI_INC_LOC=
2939 AC_MSG_RESULT(in default path)
2940 else
2941 AC_MSG_RESULT($GUI_INC_LOC)
2942 fi
2943 else
2944 AC_MSG_RESULT(<not found>)
2945 SKIP_MOTIF=YES
2946 fi
2947fi
2948
2949dnl Check for Motif library files location. In the same order as the include
2950dnl files, to avoid a mixup if several versions are present
2951
2952if test -z "$SKIP_MOTIF"; then
2953 AC_MSG_CHECKING(--with-motif-lib argument)
2954 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002955 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002956 [ MOTIF_LIBNAME="${withval}" ] )
2957
2958 if test -n "$MOTIF_LIBNAME"; then
2959 AC_MSG_RESULT($MOTIF_LIBNAME)
2960 GUI_LIB_LOC=
2961 else
2962 AC_MSG_RESULT(no)
2963
2964 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2965 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2966
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002967 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2968 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01002969 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002970 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002971 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 +00002972 GUI_LIB_LOC=
2973 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01002974 for libtry in "$try"/libXm.a "$try"/libXm.dll.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002975 if test -f "$libtry"; then
2976 GUI_LIB_LOC=$try
2977 fi
2978 done
2979 done
2980 if test -n "$GUI_LIB_LOC"; then
2981 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002982 if test "$GUI_LIB_LOC" = /usr/lib \
2983 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2984 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002985 GUI_LIB_LOC=
2986 AC_MSG_RESULT(in default path)
2987 else
2988 if test -n "$GUI_LIB_LOC"; then
2989 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002990 if test "$vim_cv_uname_output" = SunOS &&
2991 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002992 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2993 fi
2994 fi
2995 fi
2996 MOTIF_LIBNAME=-lXm
2997 else
2998 AC_MSG_RESULT(<not found>)
2999 SKIP_MOTIF=YES
3000 fi
3001 fi
3002fi
3003
3004if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003005 GUITYPE=MOTIF
3006 AC_SUBST(MOTIF_LIBNAME)
3007fi
3008
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003009if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003010 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3011 dnl Avoid adding it when it twice
3012 if test -n "$GUI_INC_LOC"; then
3013 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3014 fi
3015 if test -n "$GUI_LIB_LOC"; then
3016 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3017 fi
3018
3019 dnl Check for -lXext and then for -lXmu
3020 ldflags_save=$LDFLAGS
3021 LDFLAGS="$X_LIBS $LDFLAGS"
3022 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3023 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3024 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3025 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3026 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3027 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3028 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3029 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3030 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3031 if test -z "$SKIP_MOTIF"; then
3032 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3033 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3034 fi
3035 LDFLAGS=$ldflags_save
3036
3037 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3038 AC_MSG_CHECKING(for extra X11 defines)
3039 NARROW_PROTO=
3040 rm -fr conftestdir
3041 if mkdir conftestdir; then
3042 cd conftestdir
3043 cat > Imakefile <<'EOF'
3044acfindx:
3045 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3046EOF
3047 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3048 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3049 fi
3050 cd ..
3051 rm -fr conftestdir
3052 fi
3053 if test -z "$NARROW_PROTO"; then
3054 AC_MSG_RESULT(no)
3055 else
3056 AC_MSG_RESULT($NARROW_PROTO)
3057 fi
3058 AC_SUBST(NARROW_PROTO)
3059fi
3060
3061dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3062dnl use the X11 include path
3063if test "$enable_xsmp" = "yes"; then
3064 cppflags_save=$CPPFLAGS
3065 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3066 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3067 CPPFLAGS=$cppflags_save
3068fi
3069
3070
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003071if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003072 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3073 cppflags_save=$CPPFLAGS
3074 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3075 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3076
3077 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3078 if test ! "$enable_xim" = "no"; then
3079 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3080 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3081 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003082 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003083 fi
3084 CPPFLAGS=$cppflags_save
3085
Bram Moolenaar54612582019-11-21 17:13:31 +01003086 dnl automatically enable XIM in the GUI
3087 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003088 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3089 enable_xim="yes"
3090 fi
3091fi
3092
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003093if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003094 cppflags_save=$CPPFLAGS
3095 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003096dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3097 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003098 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003099#include <X11/Intrinsic.h>
3100#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003101 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003102 AC_MSG_RESULT(yes)
3103 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3104 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003105 CPPFLAGS=$cppflags_save
3106fi
3107
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003108dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003109if test -z "$SKIP_MOTIF"; then
3110 cppflags_save=$CPPFLAGS
3111 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003112 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003113 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003114 else
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003115 AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
3116 Xm/UnhighlightT.h Xm/Notebook.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003117 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003118
Bram Moolenaar77c19352012-06-13 19:19:41 +02003119 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003120 dnl Solaris uses XpmAttributes_21, very annoying.
3121 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003122 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003123 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3124 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3125 )
3126 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003127 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003128 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003129 CPPFLAGS=$cppflags_save
3130fi
3131
3132if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3133 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3134 enable_xim="no"
3135fi
3136if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3137 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3138 enable_fontset="no"
3139fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003140if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003141 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3142 enable_fontset="no"
3143fi
3144
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003145dnl There is no test for the Haiku GUI, if it's selected it's used
3146if test -z "$SKIP_HAIKU"; then
3147 GUITYPE=HAIKUGUI
3148fi
3149
Bram Moolenaar071d4272004-06-13 20:20:40 +00003150if test -z "$SKIP_PHOTON"; then
3151 GUITYPE=PHOTONGUI
3152fi
3153
3154AC_SUBST(GUI_INC_LOC)
3155AC_SUBST(GUI_LIB_LOC)
3156AC_SUBST(GUITYPE)
3157AC_SUBST(GUI_X_LIBS)
3158
3159if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3160 AC_MSG_ERROR([cannot use workshop without Motif])
3161fi
3162
3163dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3164if test "$enable_xim" = "yes"; then
3165 AC_DEFINE(FEAT_XIM)
3166fi
3167if test "$enable_fontset" = "yes"; then
3168 AC_DEFINE(FEAT_XFONTSET)
3169fi
3170
3171
3172dnl ---------------------------------------------------------------------------
3173dnl end of GUI-checking
3174dnl ---------------------------------------------------------------------------
3175
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003176AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003177if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003178 dnl Linux
3179 AC_MSG_RESULT([/proc/self/exe])
3180 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3181elif test -L "/proc/self/path/a.out"; then
3182 dnl Solaris
3183 AC_MSG_RESULT([/proc/self/path/a.out])
3184 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3185elif test -L "/proc/curproc/file"; then
3186 dnl FreeBSD
3187 AC_MSG_RESULT([/proc/curproc/file])
3188 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003189else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003190 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003191fi
3192
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003193dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003194AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003195case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003196 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003197 AC_MSG_CHECKING(for CYGWIN clipboard support)
3198 if test "x$with_x" = "xno" ; then
3199 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3200 AC_MSG_RESULT(yes)
3201 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3202 else
3203 AC_MSG_RESULT(no - using X11)
3204 fi ;;
3205
3206 *) CYGWIN=no; AC_MSG_RESULT(no);;
3207esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003208
Bram Moolenaar071d4272004-06-13 20:20:40 +00003209dnl Checks for libraries and include files.
3210
Bram Moolenaar446cb832008-06-24 21:56:24 +00003211AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3212 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003213 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003214#include "confdefs.h"
3215#include <ctype.h>
3216#if STDC_HEADERS
3217# include <stdlib.h>
3218# include <stddef.h>
3219#endif
3220main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003221 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003222 vim_cv_toupper_broken=yes
3223 ],[
3224 vim_cv_toupper_broken=no
3225 ],[
3226 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3227 ])])
3228
3229if test "x$vim_cv_toupper_broken" = "xyes" ; then
3230 AC_DEFINE(BROKEN_TOUPPER)
3231fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003232
3233AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003234AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003235 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3236 AC_MSG_RESULT(no))
3237
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003238AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003239AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003240 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3241 AC_MSG_RESULT(no))
3242
Bram Moolenaar071d4272004-06-13 20:20:40 +00003243dnl Checks for header files.
3244AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3245dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3246if test "$HAS_ELF" = 1; then
3247 AC_CHECK_LIB(elf, main)
3248fi
3249
3250AC_HEADER_DIRENT
3251
Bram Moolenaar071d4272004-06-13 20:20:40 +00003252dnl If sys/wait.h is not found it might still exist but not be POSIX
3253dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3254if test $ac_cv_header_sys_wait_h = no; then
3255 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003256 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3257 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003258 AC_MSG_RESULT(yes)
3259 AC_DEFINE(HAVE_SYS_WAIT_H)
3260 AC_DEFINE(HAVE_UNION_WAIT),
3261 AC_MSG_RESULT(no))
3262fi
3263
Bram Moolenaar779a7752016-01-30 23:26:34 +01003264AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003265 sys/select.h sys/utsname.h termcap.h fcntl.h \
3266 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3267 termio.h iconv.h inttypes.h langinfo.h math.h \
3268 unistd.h stropts.h errno.h sys/resource.h \
3269 sys/systeminfo.h locale.h sys/stream.h termios.h \
3270 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003271 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003272 util/debug.h util/msg18n.h frame.h sys/acl.h \
3273 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003274
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003275dnl sys/ptem.h depends on sys/stream.h on Solaris
3276AC_CHECK_HEADERS(sys/ptem.h, [], [],
3277[#if defined HAVE_SYS_STREAM_H
3278# include <sys/stream.h>
3279#endif])
3280
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003281dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3282AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3283[#if defined HAVE_SYS_PARAM_H
3284# include <sys/param.h>
3285#endif])
3286
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003287
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003288dnl pthread_np.h may exist but can only be used after including pthread.h
3289AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003290AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003291#include <pthread.h>
3292#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003293 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003294 AC_MSG_RESULT(yes)
3295 AC_DEFINE(HAVE_PTHREAD_NP_H),
3296 AC_MSG_RESULT(no))
3297
Bram Moolenaare344bea2005-09-01 20:46:49 +00003298AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003299if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003300 dnl The strings.h file on OS/X contains a warning and nothing useful.
3301 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3302else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003303
3304dnl Check if strings.h and string.h can both be included when defined.
3305AC_MSG_CHECKING([if strings.h can be included after string.h])
3306cppflags_save=$CPPFLAGS
3307CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003308AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003309#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3310# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3311 /* but don't do it on AIX 5.1 (Uribarri) */
3312#endif
3313#ifdef HAVE_XM_XM_H
3314# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3315#endif
3316#ifdef HAVE_STRING_H
3317# include <string.h>
3318#endif
3319#if defined(HAVE_STRINGS_H)
3320# include <strings.h>
3321#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003322 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003323 AC_MSG_RESULT(yes),
3324 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3325 AC_MSG_RESULT(no))
3326CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003327fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003328
3329dnl Checks for typedefs, structures, and compiler characteristics.
3330AC_PROG_GCC_TRADITIONAL
3331AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003332AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003333AC_TYPE_MODE_T
3334AC_TYPE_OFF_T
3335AC_TYPE_PID_T
3336AC_TYPE_SIZE_T
3337AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003338AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003339
Bram Moolenaar071d4272004-06-13 20:20:40 +00003340AC_HEADER_TIME
3341AC_CHECK_TYPE(ino_t, long)
3342AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003343AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003344AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003345
3346AC_MSG_CHECKING(for rlim_t)
3347if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3348 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3349else
3350 AC_EGREP_CPP(dnl
3351changequote(<<,>>)dnl
3352<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3353changequote([,]),
3354 [
3355#include <sys/types.h>
3356#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003357# include <stdlib.h>
3358# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003359#endif
3360#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003361# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003362#endif
3363 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3364 AC_MSG_RESULT($ac_cv_type_rlim_t)
3365fi
3366if test $ac_cv_type_rlim_t = no; then
3367 cat >> confdefs.h <<\EOF
3368#define rlim_t unsigned long
3369EOF
3370fi
3371
3372AC_MSG_CHECKING(for stack_t)
3373if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3374 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3375else
3376 AC_EGREP_CPP(stack_t,
3377 [
3378#include <sys/types.h>
3379#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003380# include <stdlib.h>
3381# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003382#endif
3383#include <signal.h>
3384 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3385 AC_MSG_RESULT($ac_cv_type_stack_t)
3386fi
3387if test $ac_cv_type_stack_t = no; then
3388 cat >> confdefs.h <<\EOF
3389#define stack_t struct sigaltstack
3390EOF
3391fi
3392
3393dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3394AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003395AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003396#include <sys/types.h>
3397#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003398# include <stdlib.h>
3399# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003400#endif
3401#include <signal.h>
3402#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003403 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003404 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3405 AC_MSG_RESULT(no))
3406
3407olibs="$LIBS"
3408AC_MSG_CHECKING(--with-tlib argument)
3409AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3410if test -n "$with_tlib"; then
3411 AC_MSG_RESULT($with_tlib)
3412 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003413 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003414 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003415 dnl Need to check for tgetent() below.
3416 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003417else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003418 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003419 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3420 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003421 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003422 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003423 dnl Older versions of ncurses have bugs, get a new one!
3424 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003425 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003426 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003427 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3428 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003429 esac
3430 for libname in $tlibs; do
3431 AC_CHECK_LIB(${libname}, tgetent,,)
3432 if test "x$olibs" != "x$LIBS"; then
3433 dnl It's possible that a library is found but it doesn't work
3434 dnl e.g., shared library that cannot be found
3435 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003436 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003437#ifdef HAVE_TERMCAP_H
3438# include <termcap.h>
3439#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003440#if STDC_HEADERS
3441# include <stdlib.h>
3442# include <stddef.h>
3443#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003444main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003445 res="OK", res="FAIL", res="FAIL")
3446 if test "$res" = "OK"; then
3447 break
3448 fi
3449 AC_MSG_RESULT($libname library is not usable)
3450 LIBS="$olibs"
3451 fi
3452 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003453 if test "x$olibs" = "x$LIBS"; then
3454 AC_MSG_RESULT(no terminal library found)
3455 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003456fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003457
3458if test "x$olibs" = "x$LIBS"; then
3459 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003460 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3461 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003462 AC_MSG_RESULT(yes),
3463 AC_MSG_ERROR([NOT FOUND!
3464 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003465 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003466 Or specify the name of the library with --with-tlib.]))
3467fi
3468
Bram Moolenaar446cb832008-06-24 21:56:24 +00003469AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3470 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003471 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003472#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003473#ifdef HAVE_TERMCAP_H
3474# include <termcap.h>
3475#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003476#ifdef HAVE_STRING_H
3477# include <string.h>
3478#endif
3479#if STDC_HEADERS
3480# include <stdlib.h>
3481# include <stddef.h>
3482#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003483main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003484{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003485 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003486 vim_cv_terminfo=no
3487 ],[
3488 vim_cv_terminfo=yes
3489 ],[
3490 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3491 ])
3492 ])
3493
3494if test "x$vim_cv_terminfo" = "xyes" ; then
3495 AC_DEFINE(TERMINFO)
3496fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003497
Bram Moolenaara88254f2017-11-02 23:04:14 +01003498AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003499 [
3500 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003501#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003502#ifdef HAVE_TERMCAP_H
3503# include <termcap.h>
3504#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003505#if STDC_HEADERS
3506# include <stdlib.h>
3507# include <stddef.h>
3508#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003509main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003510{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003511 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003512 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003513 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003514 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003515 ],[
3516 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003517 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003518 ])
3519
Bram Moolenaara88254f2017-11-02 23:04:14 +01003520if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003521 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003522fi
3523
3524AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003525AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003526#ifdef HAVE_TERMCAP_H
3527# include <termcap.h>
3528#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003529 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003530 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3531 [AC_MSG_RESULT(no)
3532 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003533 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003534#ifdef HAVE_TERMCAP_H
3535# include <termcap.h>
3536#endif
3537extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003538 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003539 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3540 AC_MSG_RESULT(no))]
3541 )
3542
3543AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003544AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003545#ifdef HAVE_TERMCAP_H
3546# include <termcap.h>
3547#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003548 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003549 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3550 [AC_MSG_RESULT(no)
3551 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003552 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003553#ifdef HAVE_TERMCAP_H
3554# include <termcap.h>
3555#endif
3556extern char *UP, *BC, PC;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003557 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003558 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3559 AC_MSG_RESULT(no))]
3560 )
3561
3562AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003563AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003564#ifdef HAVE_TERMCAP_H
3565# include <termcap.h>
3566#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003567 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003568 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3569 AC_MSG_RESULT(no))
3570
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003571AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003572AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003573#ifdef HAVE_TERMCAP_H
3574# include <termcap.h>
3575#endif
3576#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003577 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003578 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3579 AC_MSG_RESULT(no))
3580
Bram Moolenaar071d4272004-06-13 20:20:40 +00003581dnl On some SCO machines sys/select redefines struct timeval
3582AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003583AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003584#include <sys/types.h>
3585#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003586#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003587 AC_MSG_RESULT(yes)
3588 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3589 AC_MSG_RESULT(no))
3590
3591dnl AC_DECL_SYS_SIGLIST
3592
3593dnl Checks for pty.c (copied from screen) ==========================
3594AC_MSG_CHECKING(for /dev/ptc)
3595if test -r /dev/ptc; then
3596 AC_DEFINE(HAVE_DEV_PTC)
3597 AC_MSG_RESULT(yes)
3598else
3599 AC_MSG_RESULT(no)
3600fi
3601
3602AC_MSG_CHECKING(for SVR4 ptys)
3603if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003604 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003605// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3606char *ptsname(int);
3607int unlockpt(int);
3608int grantpt(int);
3609 ], [
3610 ptsname(0);
3611 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003612 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003613 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3614 AC_MSG_RESULT(no))
3615else
3616 AC_MSG_RESULT(no)
3617fi
3618
3619AC_MSG_CHECKING(for ptyranges)
3620if test -d /dev/ptym ; then
3621 pdir='/dev/ptym'
3622else
3623 pdir='/dev'
3624fi
3625dnl SCO uses ptyp%d
3626AC_EGREP_CPP(yes,
3627[#ifdef M_UNIX
3628 yes;
3629#endif
3630 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3631dnl if test -c /dev/ptyp19; then
3632dnl ptys=`echo /dev/ptyp??`
3633dnl else
3634dnl ptys=`echo $pdir/pty??`
3635dnl fi
3636if test "$ptys" != "$pdir/pty??" ; then
3637 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3638 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3639 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3640 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3641 AC_MSG_RESULT([$p0 / $p1])
3642else
3643 AC_MSG_RESULT([don't know])
3644fi
3645
Bram Moolenaar071d4272004-06-13 20:20:40 +00003646dnl Checks for library functions. ===================================
3647
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003648dnl TODO: this generates an obsolete warning, would need to remove and replace
3649dnl all RETSIGTYPE with "void" and SIGRETURN with "return".
Bram Moolenaar071d4272004-06-13 20:20:40 +00003650AC_TYPE_SIGNAL
3651
3652dnl find out what to use at the end of a signal function
3653if test $ac_cv_type_signal = void; then
3654 AC_DEFINE(SIGRETURN, [return])
3655else
3656 AC_DEFINE(SIGRETURN, [return 0])
3657fi
3658
3659dnl check if struct sigcontext is defined (used for SGI only)
3660AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003661AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003662#include <signal.h>
3663test_sig()
3664{
3665 struct sigcontext *scont;
3666 scont = (struct sigcontext *)0;
3667 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003668} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003669 AC_MSG_RESULT(yes)
3670 AC_DEFINE(HAVE_SIGCONTEXT),
3671 AC_MSG_RESULT(no))
3672
3673dnl tricky stuff: try to find out if getcwd() is implemented with
3674dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003675AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3676 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003677 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003678#include "confdefs.h"
3679#ifdef HAVE_UNISTD_H
3680#include <unistd.h>
3681#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003682char *dagger[] = { "IFS=pwd", 0 };
3683main()
3684{
3685 char buffer[500];
3686 extern char **environ;
3687 environ = dagger;
3688 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003689}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003690 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003691 vim_cv_getcwd_broken=no
3692 ],[
3693 vim_cv_getcwd_broken=yes
3694 ],[
3695 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3696 ])
3697 ])
3698
3699if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3700 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003701 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003702fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003703
Bram Moolenaar25153e12010-02-24 14:47:08 +01003704dnl Check for functions in one big call, to reduce the size of configure.
3705dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003706AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003707 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003708 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003709 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003710 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003711 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3712 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003713AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003714AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003715
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003716dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3717dnl appropriate, so that off_t is 64 bits when needed.
3718AC_SYS_LARGEFILE
3719
Bram Moolenaar21606672019-06-14 20:40:58 +02003720AC_MSG_CHECKING(--enable-canberra argument)
3721AC_ARG_ENABLE(canberra,
3722 [ --disable-canberra Do not use libcanberra.],
3723 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003724
Bram Moolenaar21606672019-06-14 20:40:58 +02003725if test "$enable_canberra" = "maybe"; then
3726 if test "$features" = "big" -o "$features" = "huge"; then
3727 AC_MSG_RESULT(Defaulting to yes)
3728 enable_canberra="yes"
3729 else
3730 AC_MSG_RESULT(Defaulting to no)
3731 enable_canberra="no"
3732 fi
3733else
Bram Moolenaar12471262022-01-18 11:11:25 +00003734 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
3735 AC_MSG_RESULT([cannot use sound with tiny or small features])
3736 enable_canberra="no"
3737 else
3738 AC_MSG_RESULT($enable_canberra)
3739 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003740fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003741if test "$enable_canberra" = "yes"; then
3742 if test "x$PKG_CONFIG" != "xno"; then
3743 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3744 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3745 fi
3746 if test "x$canberra_lib" = "x"; then
3747 canberra_lib=-lcanberra
3748 canberra_cflags=-D_REENTRANT
3749 fi
3750 AC_MSG_CHECKING(for libcanberra)
3751 ac_save_CFLAGS="$CFLAGS"
3752 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003753 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003754 CFLAGS="$CFLAGS $canberra_cflags"
3755 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003756 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003757 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003758 # include <canberra.h>
3759 ], [
3760 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003761 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003762 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003763 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003764fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003765
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003766AC_MSG_CHECKING(--enable-libsodium argument)
3767AC_ARG_ENABLE(libsodium,
3768 [ --disable-libsodium Do not use libsodium.],
3769 , [enable_libsodium="maybe"])
3770
3771if test "$enable_libsodium" = "maybe"; then
3772 if test "$features" = "big" -o "$features" = "huge"; then
3773 AC_MSG_RESULT(Defaulting to yes)
3774 enable_libsodium="yes"
3775 else
3776 AC_MSG_RESULT(Defaulting to no)
3777 enable_libsodium="no"
3778 fi
3779else
3780 AC_MSG_RESULT($enable_libsodium)
3781fi
3782if test "$enable_libsodium" = "yes"; then
3783 if test "x$PKG_CONFIG" != "xno"; then
3784 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3785 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3786 fi
3787 if test "x$libsodium_lib" = "x"; then
3788 libsodium_lib=-lsodium
3789 libsodium_cflags=
3790 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003791 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003792 ac_save_CFLAGS="$CFLAGS"
3793 ac_save_LIBS="$LIBS"
3794 CFLAGS="$CFLAGS $libsodium_cflags"
3795 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003796 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003797 # include <sodium.h>
3798 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003799 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003800 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3801 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3802fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003803
Bram Moolenaar071d4272004-06-13 20:20:40 +00003804dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3805AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003806AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003807[#include <sys/types.h>
3808#include <sys/stat.h>],
3809[ struct stat st;
3810 int n;
3811
3812 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003813 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003814 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3815 AC_MSG_RESULT(no))
3816
Paul Ollis65745772022-06-05 16:55:54 +01003817dnl Check for timer_create. It probably requires the 'rt' library.
3818AC_MSG_CHECKING([for timer_create])
3819save_LIBS="$LIBS"
3820LIBS="$LIBS -lrt"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003821AC_LINK_IFELSE([AC_LANG_PROGRAM([
Paul Ollis65745772022-06-05 16:55:54 +01003822#include<signal.h>
3823#include<time.h>
3824static void set_flag(union sigval) {}
3825], [
3826 struct timespec ts;
3827 struct sigevent action = {0};
3828 timer_t timer_id;
3829
3830 action.sigev_notify = SIGEV_THREAD;
3831 action.sigev_notify_function = set_flag;
3832 timer_create(CLOCK_REALTIME, &action, &timer_id);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003833 ])],
Paul Ollis65745772022-06-05 16:55:54 +01003834 AC_MSG_RESULT(yes; with -lrt); AC_DEFINE(HAVE_TIMER_CREATE),
3835 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003836 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Paul Ollis65745772022-06-05 16:55:54 +01003837#include<signal.h>
3838#include<time.h>
3839static void set_flag(union sigval) {}
3840 ], [
3841 struct timespec ts;
3842 struct sigevent action = {0};
3843 timer_t timer_id;
3844
3845 action.sigev_notify = SIGEV_THREAD;
3846 action.sigev_notify_function = set_flag;
3847 timer_create(CLOCK_REALTIME, &action, &timer_id);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003848 ])],
Paul Ollis65745772022-06-05 16:55:54 +01003849 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIMER_CREATE),
3850 AC_MSG_RESULT(no)))
3851
Bram Moolenaar446cb832008-06-24 21:56:24 +00003852AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3853 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003854 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003855#include "confdefs.h"
3856#if STDC_HEADERS
3857# include <stdlib.h>
3858# include <stddef.h>
3859#endif
3860#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003861#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003862main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003863 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003864 vim_cv_stat_ignores_slash=yes
3865 ],[
3866 vim_cv_stat_ignores_slash=no
3867 ],[
3868 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3869 ])
3870 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003871
Bram Moolenaar446cb832008-06-24 21:56:24 +00003872if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3873 AC_DEFINE(STAT_IGNORES_SLASH)
3874fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003875
3876dnl nanoseconds field of struct stat
3877AC_CACHE_CHECK([for nanoseconds field of struct stat],
3878 ac_cv_struct_st_mtim_nsec,
3879 [ac_save_CPPFLAGS="$CPPFLAGS"
3880 ac_cv_struct_st_mtim_nsec=no
3881 # st_mtim.tv_nsec -- the usual case
3882 # st_mtim._tv_nsec -- Solaris 2.6, if
3883 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3884 # && !defined __EXTENSIONS__)
3885 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3886 # st_mtime_n -- AIX 5.2 and above
3887 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3888 for ac_val in st_mtim.tv_nsec st_mtim._tv_nsec st_mtim.st__tim.tv_nsec st_mtime_n st_mtimespec.tv_nsec; do
3889 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003890 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3891#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003892 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3893 done
3894 CPPFLAGS="$ac_save_CPPFLAGS"
3895])
3896if test $ac_cv_struct_st_mtim_nsec != no; then
3897 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3898 [Define if struct stat contains a nanoseconds field])
3899fi
Bram Moolenaar446cb832008-06-24 21:56:24 +00003900
Bram Moolenaar071d4272004-06-13 20:20:40 +00003901dnl Link with iconv for charset translation, if not found without library.
3902dnl check for iconv() requires including iconv.h
3903dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3904dnl has been installed.
3905AC_MSG_CHECKING(for iconv_open())
3906save_LIBS="$LIBS"
3907LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003908AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003909#ifdef HAVE_ICONV_H
3910# include <iconv.h>
3911#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003912 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003913 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3914 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003915 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003916#ifdef HAVE_ICONV_H
3917# include <iconv.h>
3918#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003919 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003920 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3921 AC_MSG_RESULT(no)))
3922
3923
3924AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003925AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003926#ifdef HAVE_LANGINFO_H
3927# include <langinfo.h>
3928#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003929], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003930 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3931 AC_MSG_RESULT(no))
3932
Bram Moolenaar446cb832008-06-24 21:56:24 +00003933dnl Need various functions for floating point support. Only enable
3934dnl floating point when they are all present.
3935AC_CHECK_LIB(m, strtod)
3936AC_MSG_CHECKING([for strtod() and other floating point functions])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003937AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003938#ifdef HAVE_MATH_H
3939# include <math.h>
3940#endif
3941#if STDC_HEADERS
3942# include <stdlib.h>
3943# include <stddef.h>
3944#endif
3945], [char *s; double d;
3946 d = strtod("1.1", &s);
3947 d = fabs(1.11);
3948 d = ceil(1.11);
3949 d = floor(1.11);
3950 d = log10(1.11);
3951 d = pow(1.11, 2.22);
3952 d = sqrt(1.11);
3953 d = sin(1.11);
3954 d = cos(1.11);
3955 d = atan(1.11);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003956 ])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00003957 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3958 AC_MSG_RESULT(no))
3959
Bram Moolenaara6b89762016-02-29 21:38:26 +01003960dnl isinf() and isnan() need to include header files and may need -lm.
3961AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003962AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003963#ifdef HAVE_MATH_H
3964# include <math.h>
3965#endif
3966#if STDC_HEADERS
3967# include <stdlib.h>
3968# include <stddef.h>
3969#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003970], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003971 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3972 AC_MSG_RESULT(no))
3973
3974AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003975AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003976#ifdef HAVE_MATH_H
3977# include <math.h>
3978#endif
3979#if STDC_HEADERS
3980# include <stdlib.h>
3981# include <stddef.h>
3982#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003983], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003984 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3985 AC_MSG_RESULT(no))
3986
Bram Moolenaar071d4272004-06-13 20:20:40 +00003987dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3988dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003989dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003990AC_MSG_CHECKING(--disable-acl argument)
3991AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003992 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003993 , [enable_acl="yes"])
3994if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003995 AC_MSG_RESULT(no)
3996 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003997 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3998 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3999
Bram Moolenaard6d30422018-01-28 22:48:55 +01004000 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004001 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004002#include <sys/types.h>
4003#ifdef HAVE_SYS_ACL_H
4004# include <sys/acl.h>
4005#endif
4006acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4007 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004008 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004009 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4010 AC_MSG_RESULT(no))
4011
Bram Moolenaard6d30422018-01-28 22:48:55 +01004012 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4013 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004014 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004015#ifdef HAVE_SYS_ACL_H
4016# include <sys/acl.h>
4017#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004018 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004019 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004020 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004021
Bram Moolenaard6d30422018-01-28 22:48:55 +01004022 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004023 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004024#if STDC_HEADERS
4025# include <stdlib.h>
4026# include <stddef.h>
4027#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004028#ifdef HAVE_SYS_ACL_H
4029# include <sys/acl.h>
4030#endif
4031#ifdef HAVE_SYS_ACCESS_H
4032# include <sys/access.h>
4033#endif
4034#define _ALL_SOURCE
4035
4036#include <sys/stat.h>
4037
4038int aclsize;
4039struct acl *aclent;], [aclsize = sizeof(struct acl);
4040 aclent = (void *)malloc(aclsize);
4041 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004042 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004043 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4044 AC_MSG_RESULT(no))
4045else
4046 AC_MSG_RESULT(yes)
4047fi
4048
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004049if test "x$GTK_CFLAGS" != "x"; then
4050 dnl pango_shape_full() is new, fall back to pango_shape().
4051 AC_MSG_CHECKING(for pango_shape_full)
4052 ac_save_CFLAGS="$CFLAGS"
4053 ac_save_LIBS="$LIBS"
4054 CFLAGS="$CFLAGS $GTK_CFLAGS"
4055 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004056 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004057 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004058 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004059 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4060 AC_MSG_RESULT(no))
4061 CFLAGS="$ac_save_CFLAGS"
4062 LIBS="$ac_save_LIBS"
4063fi
4064
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004065AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004066AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004067 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004068 [enable_gpm="yes"])
4069
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004070if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4071 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004072 dnl Checking if gpm support can be compiled
4073 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4074 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004075 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004076 [#include <gpm.h>
4077 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004078 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004079 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4080 dnl FEAT_MOUSE_GPM if mouse support is included
4081 [vi_cv_have_gpm=yes],
4082 [vi_cv_have_gpm=no])
4083 [LIBS="$olibs"]
4084 )
4085 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004086 if test "$enable_gpm" = "yes"; then
4087 LIBS="$LIBS -lgpm"
4088 else
4089 AC_DEFINE(DYNAMIC_GPM)
4090 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004091 AC_DEFINE(HAVE_GPM)
4092 fi
4093else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004094 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004095fi
4096
Bram Moolenaar446cb832008-06-24 21:56:24 +00004097AC_MSG_CHECKING(--disable-sysmouse argument)
4098AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004099 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004100 [enable_sysmouse="yes"])
4101
4102if test "$enable_sysmouse" = "yes"; then
4103 AC_MSG_RESULT(no)
4104 dnl Checking if sysmouse support can be compiled
4105 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4106 dnl defines FEAT_SYSMOUSE if mouse support is included
4107 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004108 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004109 [#include <sys/consio.h>
4110 #include <signal.h>
4111 #include <sys/fbio.h>],
4112 [struct mouse_info mouse;
4113 mouse.operation = MOUSE_MODE;
4114 mouse.operation = MOUSE_SHOW;
4115 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004116 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004117 [vi_cv_have_sysmouse=yes],
4118 [vi_cv_have_sysmouse=no])
4119 )
4120 if test $vi_cv_have_sysmouse = yes; then
4121 AC_DEFINE(HAVE_SYSMOUSE)
4122 fi
4123else
4124 AC_MSG_RESULT(yes)
4125fi
4126
Bram Moolenaarf05da212009-11-17 16:13:15 +00004127dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4128AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004129AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004130[#if HAVE_FCNTL_H
4131# include <fcntl.h>
4132#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004133[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004134 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4135 AC_MSG_RESULT(not usable))
4136
Bram Moolenaar071d4272004-06-13 20:20:40 +00004137dnl rename needs to be checked separately to work on Nextstep with cc
4138AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004139AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004140 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4141 AC_MSG_RESULT(no))
4142
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004143dnl check for dirfd()
4144AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004145AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004146[#include <sys/types.h>
4147#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004148[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004149AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4150
4151dnl check for flock()
4152AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004153AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004154[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004155[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004156AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4157
Bram Moolenaar071d4272004-06-13 20:20:40 +00004158dnl sysctl() may exist but not the arguments we use
4159AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004160AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004161[#include <sys/types.h>
4162#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004163[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004164 size_t len;
4165
4166 mib[0] = CTL_HW;
4167 mib[1] = HW_USERMEM;
4168 len = sizeof(r);
4169 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004170 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004171 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4172 AC_MSG_RESULT(not usable))
4173
Bram Moolenaare2982d62021-10-06 11:27:21 +01004174dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004175dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004176AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004177AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004178[#include <sys/types.h>
4179#include <sys/sysinfo.h>],
4180[ struct sysinfo sinfo;
4181 int t;
4182
4183 (void)sysinfo(&sinfo);
4184 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004185 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004186 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4187 AC_MSG_RESULT(not usable))
4188
Bram Moolenaar914572a2007-05-01 11:37:47 +00004189dnl struct sysinfo may have the mem_unit field or not
4190AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004191AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004192[#include <sys/types.h>
4193#include <sys/sysinfo.h>],
4194[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004195 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004196 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004197 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4198 AC_MSG_RESULT(no))
4199
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004200dnl struct sysinfo may have the uptime field or not
4201AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004202AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004203[#include <sys/types.h>
4204#include <sys/sysinfo.h>],
4205[ struct sysinfo sinfo;
4206 long ut;
4207
4208 (void)sysinfo(&sinfo);
4209 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004210 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004211 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4212 AC_MSG_RESULT(no))
4213
Bram Moolenaar071d4272004-06-13 20:20:40 +00004214dnl sysconf() may exist but not support what we want to use
4215AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004216AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004217[#include <unistd.h>],
4218[ (void)sysconf(_SC_PAGESIZE);
4219 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004220 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004221 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4222 AC_MSG_RESULT(not usable))
4223
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004224dnl check if we have _SC_SIGSTKSZ via sysconf()
4225AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004226AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004227[#include <unistd.h>],
4228[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004229 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004230 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4231 AC_MSG_RESULT(not usable))
4232
Bram Moolenaar914703b2010-05-31 21:59:46 +02004233AC_CHECK_SIZEOF([int])
4234AC_CHECK_SIZEOF([long])
4235AC_CHECK_SIZEOF([time_t])
4236AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004237
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004238dnl Use different names to avoid clashing with other header files.
4239AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4240AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4241
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004242dnl Make sure that uint32_t is really 32 bits unsigned.
4243AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004244AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004245#ifdef HAVE_STDINT_H
4246# include <stdint.h>
4247#endif
4248#ifdef HAVE_INTTYPES_H
4249# include <inttypes.h>
4250#endif
4251main() {
4252 uint32_t nr1 = (uint32_t)-1;
4253 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004254 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4255 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004256}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004257AC_MSG_RESULT(ok),
4258AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004259AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004260
Bram Moolenaar446cb832008-06-24 21:56:24 +00004261dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4262dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4263
Bram Moolenaar071d4272004-06-13 20:20:40 +00004264[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004265#include "confdefs.h"
4266#ifdef HAVE_STRING_H
4267# include <string.h>
4268#endif
4269#if STDC_HEADERS
4270# include <stdlib.h>
4271# include <stddef.h>
4272#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004273main() {
4274 char buf[10];
4275 strcpy(buf, "abcdefghi");
4276 mch_memmove(buf, buf + 2, 3);
4277 if (strncmp(buf, "ababcf", 6))
4278 exit(1);
4279 strcpy(buf, "abcdefghi");
4280 mch_memmove(buf + 2, buf, 3);
4281 if (strncmp(buf, "cdedef", 6))
4282 exit(1);
4283 exit(0); /* libc version works properly. */
4284}']
4285
Bram Moolenaar446cb832008-06-24 21:56:24 +00004286AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4287 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004288 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 +00004289 [
4290 vim_cv_memmove_handles_overlap=yes
4291 ],[
4292 vim_cv_memmove_handles_overlap=no
4293 ],[
4294 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4295 ])
4296 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004297
Bram Moolenaar446cb832008-06-24 21:56:24 +00004298if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4299 AC_DEFINE(USEMEMMOVE)
4300else
4301 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4302 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004303 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 +00004304 [
4305 vim_cv_bcopy_handles_overlap=yes
4306 ],[
4307 vim_cv_bcopy_handles_overlap=no
4308 ],[
4309 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4310 ])
4311 ])
4312
4313 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4314 AC_DEFINE(USEBCOPY)
4315 else
4316 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4317 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004318 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 +00004319 [
4320 vim_cv_memcpy_handles_overlap=yes
4321 ],[
4322 vim_cv_memcpy_handles_overlap=no
4323 ],[
4324 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4325 ])
4326 ])
4327
4328 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4329 AC_DEFINE(USEMEMCPY)
4330 fi
4331 fi
4332fi
4333
Bram Moolenaar071d4272004-06-13 20:20:40 +00004334
4335dnl Check for multibyte locale functions
4336dnl Find out if _Xsetlocale() is supported by libX11.
4337dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004338if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004339 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004340 libs_save=$LIBS
4341 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4342 CFLAGS="$CFLAGS $X_CFLAGS"
4343
4344 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004345 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4346 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004347 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4348 AC_MSG_RESULT(no))
4349
4350 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004351 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004352 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4353
Bram Moolenaar071d4272004-06-13 20:20:40 +00004354 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004355 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004356fi
4357
4358dnl Link with xpg4, it is said to make Korean locale working
4359AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4360
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004361dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004362dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004363dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004364dnl -t for typedefs (many ctags have this)
4365dnl -s for static functions (Elvis ctags only?)
4366dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4367dnl -i+m to test for older Exuberant ctags
4368AC_MSG_CHECKING(how to create tags)
4369test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004370if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004371 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004372elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004373 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004374elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004375 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004376else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004377 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004378 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4379 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4380 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4381 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4382 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4383 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4384 (eval ctags -i+m /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -i+m"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004385fi
4386test -f tags.save && mv tags.save tags
4387AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4388
4389dnl Check how we can run man with a section number
4390AC_MSG_CHECKING(how to run man with a section nr)
4391MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004392(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AS_MESSAGE_LOG_FD && MANDEF="man -s"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004393AC_MSG_RESULT($MANDEF)
4394if test "$MANDEF" = "man -s"; then
4395 AC_DEFINE(USEMAN_S)
4396fi
4397
4398dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004399dnl We take care to base this on an empty LIBS: on some systems libelf would be
4400dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4401dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004402AC_MSG_CHECKING(--disable-nls argument)
4403AC_ARG_ENABLE(nls,
4404 [ --disable-nls Don't support NLS (gettext()).], ,
4405 [enable_nls="yes"])
4406
4407if test "$enable_nls" = "yes"; then
4408 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004409
4410 INSTALL_LANGS=install-languages
4411 AC_SUBST(INSTALL_LANGS)
4412 INSTALL_TOOL_LANGS=install-tool-languages
4413 AC_SUBST(INSTALL_TOOL_LANGS)
4414
Bram Moolenaar071d4272004-06-13 20:20:40 +00004415 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4416 AC_MSG_CHECKING([for NLS])
4417 if test -f po/Makefile; then
4418 have_gettext="no"
4419 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004420 olibs=$LIBS
4421 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004422 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004423 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004424 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004425 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4426 LIBS="-lintl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004427 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004428 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004429 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004430 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4431 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004432 AC_MSG_RESULT([gettext() doesn't work]);
4433 LIBS=$olibs))
4434 else
4435 AC_MSG_RESULT([msgfmt not found - disabled]);
4436 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004437 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004438 AC_DEFINE(HAVE_GETTEXT)
4439 MAKEMO=yes
4440 AC_SUBST(MAKEMO)
4441 dnl this was added in GNU gettext 0.10.36
4442 AC_CHECK_FUNCS(bind_textdomain_codeset)
4443 dnl _nl_msg_cat_cntr is required for GNU gettext
4444 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004445 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004446 [#include <libintl.h>
4447 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004448 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004449 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4450 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004451 AC_MSG_CHECKING([if msgfmt supports --desktop])
4452 MSGFMT_DESKTOP=
4453 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004454 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4455 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4456 dnl 0.19.3 is also broken.
4457 AC_MSG_RESULT([broken])
4458 else
4459 AC_MSG_RESULT([yes])
4460 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4461 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004462 else
4463 AC_MSG_RESULT([no])
4464 fi
4465 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004466 fi
4467 else
4468 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4469 fi
4470else
4471 AC_MSG_RESULT(yes)
4472fi
4473
4474dnl Check for dynamic linking loader
4475AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4476if test x${DLL} = xdlfcn.h; then
4477 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4478 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004479 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004480 extern void* dlopen();
4481 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004482 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004483 AC_MSG_RESULT(yes);
4484 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4485 AC_MSG_RESULT(no);
4486 AC_MSG_CHECKING([for dlopen() in -ldl])
4487 olibs=$LIBS
4488 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004489 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004490 extern void* dlopen();
4491 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004492 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004493 AC_MSG_RESULT(yes);
4494 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4495 AC_MSG_RESULT(no);
4496 LIBS=$olibs))
4497 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4498 dnl ick :-)
4499 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004500 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004501 extern void* dlsym();
4502 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004503 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004504 AC_MSG_RESULT(yes);
4505 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4506 AC_MSG_RESULT(no);
4507 AC_MSG_CHECKING([for dlsym() in -ldl])
4508 olibs=$LIBS
4509 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004510 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004511 extern void* dlsym();
4512 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004513 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004514 AC_MSG_RESULT(yes);
4515 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4516 AC_MSG_RESULT(no);
4517 LIBS=$olibs))
4518elif test x${DLL} = xdl.h; then
4519 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4520 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004521 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004522 extern void* shl_load();
4523 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004524 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004525 AC_MSG_RESULT(yes);
4526 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4527 AC_MSG_RESULT(no);
4528 AC_MSG_CHECKING([for shl_load() in -ldld])
4529 olibs=$LIBS
4530 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004531 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004532 extern void* shl_load();
4533 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004534 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004535 AC_MSG_RESULT(yes);
4536 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4537 AC_MSG_RESULT(no);
4538 LIBS=$olibs))
4539fi
4540AC_CHECK_HEADERS(setjmp.h)
4541
Bram Moolenaard0573012017-10-28 21:11:06 +02004542if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004543 dnl -ldl must come after DynaLoader.a
4544 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4545 LIBS=`echo $LIBS | sed s/-ldl//`
4546 PERL_LIBS="$PERL_LIBS -ldl"
4547 fi
4548fi
4549
Bram Moolenaard0573012017-10-28 21:11:06 +02004550if test "$MACOS_X" = "yes"; then
4551 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004552 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004553 if test "$features" = "tiny"; then
4554 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4555 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4556 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004557 AC_MSG_RESULT([yes, we need CoreServices])
4558 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004559 else
4560 AC_MSG_RESULT([yes, we need AppKit])
4561 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004562 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004563 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004564 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004565 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004566fi
4567
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004568dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4569dnl it everywhere.
4570if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4571 CFLAGS="$CFLAGS -D_REENTRANT"
4572fi
4573
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004574dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4575dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4576dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004577dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4578dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004579DEPEND_CFLAGS_FILTER=
4580if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004581 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004582 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004583 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004584 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004585 AC_MSG_RESULT(yes)
4586 else
4587 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004588 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004589 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4590 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004591 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004592 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004593 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4594 if test "$gccmajor" -gt "3"; then
Bram Moolenaar26f20132021-04-03 17:33:52 +02004595 CFLAGS=`echo "$CFLAGS" | sed -e 's/-D_FORTIFY_SOURCE=.,//g' -e 's/ *-Wp,-D_FORTIFY_SOURCE=. / /g' -e 's/,-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/'`
4596 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/-D_FORTIFY_SOURCE=.,//g' -e 's/ *-Wp,-D_FORTIFY_SOURCE=. / /g' -e 's/,-D_FORTIFY_SOURCE=. //g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004597 AC_MSG_RESULT(yes)
4598 else
4599 AC_MSG_RESULT(no)
4600 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004601fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004602AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004603
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004604dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4605dnl isn't required, but the CFLAGS for some of the libraries we're using
4606dnl include the define. Since the define changes the size of some datatypes
4607dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4608dnl consistent value. It's therefore safest to force the use of the define
4609dnl if it's present in any of the *_CFLAGS variables.
4610AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004611if 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 +01004612 AC_MSG_RESULT(yes)
4613 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4614else
4615 AC_MSG_RESULT(no)
4616fi
4617
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004618dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4619dnl between "-L" and the path that follows.
4620LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4621
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004622dnl link.sh tries to avoid overlinking in a hackish way.
4623dnl At least GNU ld supports --as-needed which provides the same functionality
4624dnl at linker level. Let's use it.
4625AC_MSG_CHECKING(linker --as-needed support)
4626LINK_AS_NEEDED=
4627# Check if linker supports --as-needed and --no-as-needed options
4628if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004629 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4630 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4631 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004632 LINK_AS_NEEDED=yes
4633fi
4634if test "$LINK_AS_NEEDED" = yes; then
4635 AC_MSG_RESULT(yes)
4636else
4637 AC_MSG_RESULT(no)
4638fi
4639AC_SUBST(LINK_AS_NEEDED)
4640
Bram Moolenaar77c19352012-06-13 19:19:41 +02004641# IBM z/OS reset CFLAGS for config.mk
4642if test "$zOSUnix" = "yes"; then
4643 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4644fi
4645
Bram Moolenaar071d4272004-06-13 20:20:40 +00004646dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004647AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4648AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004649
4650dnl vim: set sw=2 tw=78 fo+=l: