blob: a3c5f8da8cffa4f7dd2b9aad61461a9a76983ca4 [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
Bram Moolenaare5303952022-06-19 17:05:47 +010083 specified on the command line are missing.],
Bram Moolenaarf788a062011-12-14 20:51:25 +010084 [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
Rose00d07e72023-05-06 18:07:14 +010096
Bram Moolenaar071d4272004-06-13 20:20:40 +000097if test "$GCC" = yes; then
Rose00d07e72023-05-06 18:07:14 +010098 dnl Method that should work for nearly all gcc versions.
Bram Moolenaarc8836f72014-04-12 13:12:24 +020099 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000100 if test "x$gccversion" = "x"; then
101 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +0200102 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 +0000103 fi
Rose00d07e72023-05-06 18:07:14 +0100104
105 dnl Gcc version 4.0.1 was reported to cause trouble on Macintosh by Marcin
106 dnl Dalecki. For Mac with Intel the symptom reported is: malloc() reports
107 dnl double free. This happens in expand_filename(), because the optimizer
108 dnl swaps two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000109 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000110 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
112 else
113 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
114 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
115 CFLAGS="$CFLAGS -fno-strength-reduce"
116 fi
117 fi
118fi
119
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200120dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
121dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
122dnl the version number of the clang in use.
123dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100124AC_MSG_CHECKING(for clang version)
125CLANG_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 +0200126if test x"$CLANG_VERSION_STRING" != x"" ; then
127 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
128 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
129 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
130 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
131 AC_MSG_RESULT($CLANG_VERSION)
132 dnl If you find the same issue with versions earlier than 500.2.75,
133 dnl change the constant 500002075 below appropriately. To get the
134 dnl integer corresponding to a version number, refer to the
135 dnl definition of CLANG_VERSION above.
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100136 dnl Clang 11 reports "11", assume Clang 10 and later work like this.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100137 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100138 if test "$CLANG_MAJOR" -ge 10 -o "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100139 AC_MSG_RESULT(no)
140 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
141 else
142 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200143 fi
144else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100145 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200146fi
147
Bram Moolenaar446cb832008-06-24 21:56:24 +0000148dnl If configure thinks we are cross compiling, there might be something
149dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200150CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000152 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200153 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200155AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000157dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
158dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
160
161if test -f ./toolcheck; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100162 AC_MSG_CHECKING(for buggy tools)
163 sh ./toolcheck 1>&AS_MESSAGE_FD
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164fi
165
166OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
167
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000168dnl When cross-compiling set $vim_cv_uname_output, $vim_cv_uname_r_output and
169dnl $vim_cv_uname_m_output to the desired value for the target system
170AC_MSG_CHECKING(uname)
171if test "x$vim_cv_uname_output" = "x" ; then
172 vim_cv_uname_output=`(uname) 2>/dev/null`
173 AC_MSG_RESULT($vim_cv_uname_output)
174else
175 AC_MSG_RESULT([$vim_cv_uname_output (cached)])
176fi
177
178AC_MSG_CHECKING(uname -r)
179if test "x$vim_cv_uname_r_output" = "x" ; then
180 vim_cv_uname_r_output=`(uname -r) 2>/dev/null`
181 AC_MSG_RESULT($vim_cv_uname_r_output)
182else
183 AC_MSG_RESULT([$vim_cv_uname_r_output (cached)])
184fi
185
186AC_MSG_CHECKING(uname -m)
187if test "x$vim_cv_uname_m_output" = "x" ; then
188 vim_cv_uname_m_output=`(uname -m) 2>/dev/null`
189 AC_MSG_RESULT($vim_cv_uname_m_output)
190else
191 AC_MSG_RESULT([$vim_cv_uname_m_output (cached)])
192fi
193
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100194AC_MSG_CHECKING(for Haiku)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000195case $vim_cv_uname_output in
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100196 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
197 *) HAIKU=no; AC_MSG_RESULT(no);;
198esac
199
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200dnl If QNX is found, assume we don't want to use Xphoton
201dnl unless it was specifically asked for (--with-x)
202AC_MSG_CHECKING(for QNX)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000203case $vim_cv_uname_output in
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
205 test -z "$with_x" && with_x=no
206 QNX=yes; AC_MSG_RESULT(yes);;
207 *) QNX=no; AC_MSG_RESULT(no);;
208esac
209
210dnl Check for Darwin and MacOS X
211dnl We do a check for MacOS X in the very beginning because there
212dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213AC_MSG_CHECKING([for Darwin (Mac OS X)])
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000214if test "$vim_cv_uname_output" = Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200216 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200217 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218
219 AC_MSG_CHECKING(--disable-darwin argument)
220 AC_ARG_ENABLE(darwin,
221 [ --disable-darwin Disable Darwin (Mac OS X) support.],
222 , [enable_darwin="yes"])
223 if test "$enable_darwin" = "yes"; then
224 AC_MSG_RESULT(no)
225 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200226 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227 AC_MSG_RESULT(yes)
228 else
229 AC_MSG_RESULT([no, Darwin support disabled])
230 enable_darwin=no
231 fi
232 else
233 AC_MSG_RESULT([yes, Darwin support excluded])
234 fi
235
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000236 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000237 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000238 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000239 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000240
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100241 AC_MSG_CHECKING(--with-developer-dir argument)
242 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
243 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100244 AC_MSG_RESULT(not present))
Bram Moolenaare5303952022-06-19 17:05:47 +0100245
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100246 if test "x$DEVELOPER_DIR" = "x"; then
247 AC_PATH_PROG(XCODE_SELECT, xcode-select)
248 if test "x$XCODE_SELECT" != "x"; then
249 AC_MSG_CHECKING(for developer dir using xcode-select)
250 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
251 AC_MSG_RESULT([$DEVELOPER_DIR])
252 else
253 DEVELOPER_DIR=/Developer
254 fi
255 fi
256
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000257 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000258 AC_MSG_CHECKING(for 10.4 universal SDK)
259 dnl There is a terrible inconsistency (but we appear to get away with it):
260 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
261 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
262 dnl tests using the preprocessor are actually done with the wrong header
263 dnl files. $LDFLAGS is set at the end, because configure uses it together
264 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000265 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000266 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000267 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100268 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100269 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000270 AC_MSG_RESULT(found, will make universal binary),
271
272 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000273 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000274 AC_MSG_CHECKING(if Intel architecture is supported)
275 CPPFLAGS="$CPPFLAGS -arch i386"
276 LDFLAGS="$save_ldflags -arch i386"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100277 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000278 AC_MSG_RESULT(yes); MACARCH="intel",
279 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000280 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000281 CPPFLAGS="$save_cppflags -arch ppc"
282 LDFLAGS="$save_ldflags -arch ppc"))
283 elif test "x$MACARCH" = "xintel"; then
284 CPPFLAGS="$CPPFLAGS -arch intel"
285 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000286 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000287 CPPFLAGS="$CPPFLAGS -arch ppc"
288 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000289 fi
290
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200292 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200293 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000294 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaare5303952022-06-19 17:05:47 +0100295 dnl os_macosx.m implements timer_create() and friends
296 AC_DEFINE(HAVE_TIMER_CREATE)
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000297 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100298 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200299 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200300
301 dnl Assume we don't want X11 unless it was specifically asked for
Bram Moolenaar0b40d082022-03-08 13:32:37 +0000302 dnl (--with-x) or Motif or GTK GUI is used.
303 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 +0200304 with_x=no
305 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306 fi
307else
308 AC_MSG_RESULT(no)
309fi
310
Bram Moolenaar39766a72013-11-03 00:41:00 +0100311dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
312dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100313AC_CHECK_HEADERS(AvailabilityMacros.h)
Evan Miller25448072022-12-30 10:42:23 +0000314# 10.5 and earlier lack dispatch
315AC_CHECK_HEADERS(dispatch/dispatch.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100316
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317AC_SUBST(OS_EXTRA_SRC)
318AC_SUBST(OS_EXTRA_OBJ)
319
320dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
321dnl Only when the directory exists and it wasn't there yet.
322dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000323dnl Skip all of this when cross-compiling.
324if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000325 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000326 have_local_include=''
327 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000328 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
329 --without-local-dir do not search /usr/local for local libraries.], [
330 local_dir="$withval"
331 case "$withval" in
332 */*) ;;
333 no)
334 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200335 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000336 have_local_lib=yes
337 ;;
338 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
339 esac
340 AC_MSG_RESULT($local_dir)
341 ], [
342 local_dir=/usr/local
343 AC_MSG_RESULT(Defaulting to $local_dir)
344 ])
345 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000346 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100347 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
348 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000349 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000350 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000352 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
353 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 +0000354 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000355 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000356 fi
357 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000358 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
359 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 +0000360 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000361 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000362 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000363 fi
364fi
365
366AC_MSG_CHECKING(--with-vim-name argument)
367AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
368 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000369 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000370AC_SUBST(VIMNAME)
371AC_MSG_CHECKING(--with-ex-name argument)
372AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
373 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
374 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
375AC_SUBST(EXNAME)
376AC_MSG_CHECKING(--with-view-name argument)
377AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
378 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
379 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
380AC_SUBST(VIEWNAME)
381
382AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100383AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
384 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 AC_MSG_RESULT(no))
386
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100387if test "X$RUNTIME_GLOBAL" != "X"; then
388 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" }')
389 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
390 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
391fi
392
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393AC_MSG_CHECKING(--with-modified-by argument)
394AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
395 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
396 AC_MSG_RESULT(no))
397
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200398dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399AC_MSG_CHECKING(if character set is EBCDIC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100400AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401[ /* TryCompile function for CharSet.
402 Treat any failure as ASCII for compatibility with existing art.
403 Use compile-time rather than run-time tests for cross-compiler
404 tolerance. */
405#if '0'!=240
406make an error "Character set is not EBCDIC"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100407#endif ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408[ # TryCompile action if true
409cf_cv_ebcdic=yes ],
410[ # TryCompile action if false
411cf_cv_ebcdic=no])
412# end of TryCompile ])
413# end of CacheVal CvEbcdic
414AC_MSG_RESULT($cf_cv_ebcdic)
415case "$cf_cv_ebcdic" in #(vi
416 yes) AC_DEFINE(EBCDIC)
417 line_break='"\\n"'
418 ;;
419 *) line_break='"\\012"';;
420esac
421AC_SUBST(line_break)
422
423if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200424dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200425AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000426case $vim_cv_uname_output in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200427 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428 dnl If using cc the environment variable _CC_CCMODE must be
429 dnl set to "1", so that some compiler extensions are enabled.
430 dnl If using c89 the environment variable is named _CC_C89MODE.
431 dnl Note: compile with c89 never tested.
432 if test "$CC" = "cc"; then
433 ccm="$_CC_CCMODE"
434 ccn="CC"
435 else
436 if test "$CC" = "c89"; then
437 ccm="$_CC_C89MODE"
438 ccn="C89"
439 else
440 ccm=1
441 fi
442 fi
443 if test "$ccm" != "1"; then
444 echo ""
445 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200446 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200447 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448 echo " Do:"
449 echo " export _CC_${ccn}MODE=1"
450 echo " and then call configure again."
451 echo "------------------------------------------"
452 exit 1
453 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200454 # Set CFLAGS for configure process.
455 # This will be reset later for config.mk.
456 # Use haltonmsg to force error for missing H files.
457 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
458 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000459 AC_MSG_RESULT(yes)
460 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200461 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000462 AC_MSG_RESULT(no)
463 ;;
464esac
465fi
466
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200467dnl Set QUOTESED. Needs additional backslashes on zOS
468if test "$zOSUnix" = "yes"; then
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100469 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200470else
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100471 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200472fi
473AC_SUBST(QUOTESED)
474
475
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200476dnl Link with -lsmack for Smack stuff; if not found
477AC_MSG_CHECKING(--disable-smack argument)
478AC_ARG_ENABLE(smack,
479 [ --disable-smack Do not check for Smack support.],
480 , enable_smack="yes")
481if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200482 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200483 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200484else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200485 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200486fi
487if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200488 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
489fi
490if test "$enable_smack" = "yes"; then
491 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
492 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
493 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200494 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200495fi
496if test "$enable_smack" = "yes"; then
497 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200498 [LIBS="$LIBS -lattr"
499 found_smack="yes"
500 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000501fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000502
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200503dnl When smack was found don't search for SELinux
504if test "x$found_smack" = "x"; then
505 dnl Link with -lselinux for SELinux stuff; if not found
506 AC_MSG_CHECKING(--disable-selinux argument)
507 AC_ARG_ENABLE(selinux,
508 [ --disable-selinux Do not check for SELinux support.],
509 , enable_selinux="yes")
510 if test "$enable_selinux" = "yes"; then
511 AC_MSG_RESULT(no)
512 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100513 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200514 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100515 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200516 else
517 AC_MSG_RESULT(yes)
518 fi
519fi
520
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521dnl Check user requested features.
522
523AC_MSG_CHECKING(--with-features argument)
Martin Tournoij25f3a142022-10-08 19:26:41 +0100524AC_ARG_WITH(features, [ --with-features=TYPE tiny, normal or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000525 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100526 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527
Martin Tournoij7904fa42022-10-04 16:28:45 +0100528dnl "small" is supported for backwards compatibility, now an alias for "tiny"
Martin Tournoij25f3a142022-10-08 19:26:41 +0100529dnl "big" is supported for backwards compatibility, now an alias for "normal"
Martin Tournoij7904fa42022-10-04 16:28:45 +0100530case "$features" in
Martin Tournoij25f3a142022-10-08 19:26:41 +0100531 small) features="tiny" ;;
532 big) features="normal" ;;
Martin Tournoij7904fa42022-10-04 16:28:45 +0100533esac
534
Bram Moolenaar071d4272004-06-13 20:20:40 +0000535dovimdiff=""
536dogvimdiff=""
537case "$features" in
538 tiny) AC_DEFINE(FEAT_TINY) ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
540 dogvimdiff="installgvimdiff" ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
542 dogvimdiff="installgvimdiff" ;;
543 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
544esac
545
546AC_SUBST(dovimdiff)
547AC_SUBST(dogvimdiff)
548
Martin Tournoij7904fa42022-10-04 16:28:45 +0100549if test "x$features" = "xtiny"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000550 has_eval=no
551else
552 has_eval=yes
553fi
554
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555AC_MSG_CHECKING(--with-compiledby argument)
556AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
557 compiledby="$withval"; AC_MSG_RESULT($withval),
558 compiledby=""; AC_MSG_RESULT(no))
559AC_SUBST(compiledby)
560
561AC_MSG_CHECKING(--disable-xsmp argument)
562AC_ARG_ENABLE(xsmp,
563 [ --disable-xsmp Disable XSMP session management],
564 , enable_xsmp="yes")
565
566if test "$enable_xsmp" = "yes"; then
567 AC_MSG_RESULT(no)
568 AC_MSG_CHECKING(--disable-xsmp-interact argument)
569 AC_ARG_ENABLE(xsmp-interact,
570 [ --disable-xsmp-interact Disable XSMP interaction],
571 , enable_xsmp_interact="yes")
572 if test "$enable_xsmp_interact" = "yes"; then
573 AC_MSG_RESULT(no)
574 AC_DEFINE(USE_XSMP_INTERACT)
575 else
576 AC_MSG_RESULT(yes)
577 fi
578else
579 AC_MSG_RESULT(yes)
580fi
581
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000582AC_MSG_CHECKING([diff feature])
Martin Tournoij7904fa42022-10-04 16:28:45 +0100583if test "x$features" = "xtiny"; then
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000584 AC_MSG_RESULT([disabled in $features version])
585else
586 AC_MSG_RESULT(enabled)
587 AC_DEFINE(FEAT_DIFF)
588 XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
589 AC_SUBST(XDIFF_OBJS_USED)
590fi
591
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200592dnl Check for Lua feature.
593AC_MSG_CHECKING(--enable-luainterp argument)
594AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200595 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200596 [enable_luainterp="no"])
597AC_MSG_RESULT($enable_luainterp)
598
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200599if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000600 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +0100601 AC_MSG_ERROR([cannot use Lua with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100602 fi
603
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200604 dnl -- find the lua executable
605 AC_SUBST(vi_cv_path_lua)
606
607 AC_MSG_CHECKING(--with-lua-prefix argument)
608 AC_ARG_WITH(lua_prefix,
609 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
610 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200611 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200612
613 if test "X$with_lua_prefix" != "X"; then
614 vi_cv_path_lua_pfx="$with_lua_prefix"
615 else
616 AC_MSG_CHECKING(LUA_PREFIX environment var)
617 if test "X$LUA_PREFIX" != "X"; then
618 AC_MSG_RESULT("$LUA_PREFIX")
619 vi_cv_path_lua_pfx="$LUA_PREFIX"
620 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200621 AC_MSG_RESULT([not set, default to /usr])
622 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200623 fi
624 fi
625
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200626 AC_MSG_CHECKING(--with-luajit)
627 AC_ARG_WITH(luajit,
628 [ --with-luajit Link with LuaJIT instead of Lua.],
629 [vi_cv_with_luajit="$withval"],
630 [vi_cv_with_luajit="no"])
631 AC_MSG_RESULT($vi_cv_with_luajit)
632
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200633 LUA_INC=
634 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200635 if test "x$vi_cv_with_luajit" != "xno"; then
636 dnl -- try to find LuaJIT executable
637 AC_PATH_PROG(vi_cv_path_luajit, luajit)
638 if test "X$vi_cv_path_luajit" != "X"; then
639 dnl -- find LuaJIT version
640 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100641 [ 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 +0200642 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
643 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
644 vi_cv_path_lua="$vi_cv_path_luajit"
645 vi_cv_version_lua="$vi_cv_version_lua_luajit"
646 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200647 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200648 dnl -- try to find Lua executable
649 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
650 if test "X$vi_cv_path_plain_lua" != "X"; then
651 dnl -- find Lua version
652 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
653 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
654 fi
655 vi_cv_path_lua="$vi_cv_path_plain_lua"
656 vi_cv_version_lua="$vi_cv_version_plain_lua"
657 fi
658 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
659 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 +0100660 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200661 AC_MSG_RESULT(yes)
662 LUA_INC=/luajit-$vi_cv_version_luajit
663 fi
664 fi
665 if test "X$LUA_INC" = "X"; then
666 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100667 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200669 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200670 AC_MSG_RESULT(no)
671 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 +0100672 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200673 AC_MSG_RESULT(yes)
674 LUA_INC=/lua$vi_cv_version_lua
675 else
676 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200677
678 # Detect moonjit:
679 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
680 lua_suf=/moonjit-2.3
681 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200682 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200683 if test -d "$dir" ; then
Bram Moolenaara79a8942020-12-17 20:50:25 +0100684 lua_suf=`basename "$dir"`
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200685 lua_suf="/$lua_suf"
686 break
687 fi
688 done
689 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
690 if test -f "$inc_path$lua_suf/lua.h"; then
691 AC_MSG_RESULT(yes)
692 LUA_INC=$lua_suf
693 else
694 AC_MSG_RESULT(no)
695 vi_cv_path_lua_pfx=
696 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200697 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200698 fi
699 fi
700 fi
701
702 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200703 if test "x$vi_cv_with_luajit" != "xno"; then
704 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
705 if test "X$multiarch" != "X"; then
706 lib_multiarch="lib/${multiarch}"
707 else
708 lib_multiarch="lib"
709 fi
710 if test "X$vi_cv_version_lua" = "X"; then
711 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
712 else
713 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
714 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200715 else
Bram Moolenaar869113f2023-03-31 21:29:00 +0100716 dnl Test alternate lib location including version
717 if test -d "${vi_cv_path_lua_pfx}/lib/lua$vi_cv_version_lua"; then
718 LUALIBDIR="lib/lua$vi_cv_version_lua"
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200719 else
Bram Moolenaar869113f2023-03-31 21:29:00 +0100720 LUALIBDIR=lib
721 fi
722 if test "X$LUA_INC" != "X"; then
723 dnl Test alternate name including version
724 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${LUALIBDIR} -llua$vi_cv_version_lua"
725 else
726 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${LUALIBDIR} -llua"
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200727 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200728 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200729 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200730 lua_ok="yes"
731 else
732 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
733 libs_save=$LIBS
734 LIBS="$LIBS $LUA_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100735 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200736 AC_MSG_RESULT(yes); lua_ok="yes",
737 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
738 LIBS=$libs_save
739 fi
740 if test "x$lua_ok" = "xyes"; then
741 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
742 LUA_SRC="if_lua.c"
743 LUA_OBJ="objects/if_lua.o"
744 LUA_PRO="if_lua.pro"
745 AC_DEFINE(FEAT_LUA)
746 fi
747 if test "$enable_luainterp" = "dynamic"; then
748 if test "x$vi_cv_with_luajit" != "xno"; then
749 luajit="jit"
750 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200751 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
752 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
753 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200754 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200755 ext="dylib"
756 indexes=""
757 else
758 ext="so"
759 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
760 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
761 if test "X$multiarch" != "X"; then
762 lib_multiarch="lib/${multiarch}"
763 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200764 fi
765 dnl Determine the sover for the current version, but fallback to
766 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200767 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200768 for subdir in "${lib_multiarch}" lib64 lib; do
769 if test -z "$subdir"; then
770 continue
771 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200772 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
773 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
774 for i in $indexes ""; do
775 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200776 sover2="$i"
777 break 3
778 fi
779 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100780 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200781 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200782 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200783 if test "X$sover" = "X"; then
784 AC_MSG_RESULT(no)
785 lua_ok="no"
786 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
787 else
788 AC_MSG_RESULT(yes)
789 lua_ok="yes"
790 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
791 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200792 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200793 AC_DEFINE(DYNAMIC_LUA)
794 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200795 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200796 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200797 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200798 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000799 test "$vim_cv_uname_m_output" = "x86_64"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200800 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
801 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
802 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200803 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200804 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100805 AC_MSG_ERROR([could not configure lua])
806 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200807 AC_SUBST(LUA_SRC)
808 AC_SUBST(LUA_OBJ)
809 AC_SUBST(LUA_PRO)
810 AC_SUBST(LUA_LIBS)
811 AC_SUBST(LUA_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +0000812 AC_SUBST(LUA_CFLAGS_EXTRA)
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200813fi
814
815
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000816dnl Check for MzScheme feature.
817AC_MSG_CHECKING(--enable-mzschemeinterp argument)
818AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200819 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000820 [enable_mzschemeinterp="no"])
821AC_MSG_RESULT($enable_mzschemeinterp)
822
823if test "$enable_mzschemeinterp" = "yes"; then
824 dnl -- find the mzscheme executable
825 AC_SUBST(vi_cv_path_mzscheme)
826
827 AC_MSG_CHECKING(--with-plthome argument)
828 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000829 [ --with-plthome=PLTHOME Use PLTHOME.],
830 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000831 with_plthome="";AC_MSG_RESULT("no"))
832
833 if test "X$with_plthome" != "X"; then
834 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100835 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000836 else
837 AC_MSG_CHECKING(PLTHOME environment var)
838 if test "X$PLTHOME" != "X"; then
839 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000840 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100841 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000842 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000843 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000844 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000845 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000846
847 dnl resolve symbolic link, the executable is often elsewhere and there
848 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000849 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000850 lsout=`ls -l $vi_cv_path_mzscheme`
851 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
852 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
853 fi
854 fi
855
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000856 if test "X$vi_cv_path_mzscheme" != "X"; then
857 dnl -- find where MzScheme thinks it was installed
858 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000859 dnl different versions of MzScheme differ in command line processing
860 dnl use universal approach
861 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000862 (build-path (call-with-values \
863 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000864 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
865 dnl Remove a trailing slash
866 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
867 sed -e 's+/$++'` ])
868 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000869 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000870 fi
871 fi
872
873 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100874 AC_MSG_CHECKING(for racket include directory)
875 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
876 if test "X$SCHEME_INC" != "X"; then
877 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000878 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100879 AC_MSG_RESULT(not found)
880 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
881 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
882 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000883 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000884 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000885 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100886 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
887 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000888 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100889 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000890 else
891 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100892 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
893 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100894 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100895 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100896 else
897 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100898 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
899 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100900 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100901 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100902 else
903 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100904 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
905 if test -f /usr/include/racket/scheme.h; then
906 AC_MSG_RESULT(yes)
907 SCHEME_INC=/usr/include/racket
908 else
909 AC_MSG_RESULT(no)
910 vi_cv_path_mzscheme_pfx=
911 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100912 fi
913 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000914 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000915 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000916 fi
917 fi
918
919 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100920
921 AC_MSG_CHECKING(for racket lib directory)
922 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
923 if test "X$SCHEME_LIB" != "X"; then
924 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000925 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100926 AC_MSG_RESULT(not found)
927 fi
928
929 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
930 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200931 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100932 MZSCHEME_LIBS="-framework Racket"
933 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
934 elif test -f "${path}/libmzscheme3m.a"; then
935 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
936 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
937 elif test -f "${path}/libracket3m.a"; then
938 MZSCHEME_LIBS="${path}/libracket3m.a"
Bram Moolenaar588d2412020-10-03 14:24:19 +0200939 if test -f "${path}/librktio.a"; then
940 MZSCHEME_LIBS="${MZSCHEME_LIBS} ${path}/librktio.a"
941 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100942 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
943 elif test -f "${path}/libracket.a"; then
944 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
945 elif test -f "${path}/libmzscheme.a"; then
946 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
947 else
948 dnl Using shared objects
949 if test -f "${path}/libmzscheme3m.so"; then
950 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
951 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
952 elif test -f "${path}/libracket3m.so"; then
953 MZSCHEME_LIBS="-L${path} -lracket3m"
954 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
955 elif test -f "${path}/libracket.so"; then
956 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
957 else
958 dnl try next until last
959 if test "$path" != "$SCHEME_LIB"; then
960 continue
961 fi
962 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
963 fi
964 if test "$GCC" = yes; then
965 dnl Make Vim remember the path to the library. For when it's not in
966 dnl $LD_LIBRARY_PATH.
967 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000968 elif test "$vim_cv_uname_output" = SunOS &&
969 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100970 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
971 fi
972 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000973 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100974 if test "X$MZSCHEME_LIBS" != "X"; then
975 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000976 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100977 done
978
979 AC_MSG_CHECKING([if racket requires -pthread])
980 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
981 AC_MSG_RESULT(yes)
982 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
983 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
984 else
985 AC_MSG_RESULT(no)
986 fi
987
988 AC_MSG_CHECKING(for racket config directory)
989 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
990 if test "X$SCHEME_CONFIGDIR" != "X"; then
991 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
992 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
993 else
994 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000995 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100996
997 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100998 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))))'`
999 if test "X$SCHEME_COLLECTS" = "X"; then
1000 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
1001 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001002 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +01001003 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
1004 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +01001005 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +01001006 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
1007 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
1008 else
1009 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
1010 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
1011 fi
Bram Moolenaar75676462013-01-30 14:55:42 +01001012 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001013 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001014 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +00001015 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001016 if test "X$SCHEME_COLLECTS" != "X" ; then
1017 AC_MSG_RESULT(${SCHEME_COLLECTS})
1018 else
1019 AC_MSG_RESULT(not found)
1020 fi
1021
1022 AC_MSG_CHECKING(for mzscheme_base.c)
1023 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001024 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001025 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1026 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001027 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001028 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001029 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001030 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1031 MZSCHEME_MOD="++lib scheme/base"
1032 else
1033 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
1034 MZSCHEME_EXTRA="mzscheme_base.c"
1035 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
1036 MZSCHEME_MOD=""
1037 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001038 fi
1039 fi
1040 if test "X$MZSCHEME_EXTRA" != "X" ; then
1041 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001042 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001043 AC_MSG_RESULT(needed)
1044 else
1045 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001046 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001047
Bram Moolenaar9e902192013-07-17 18:58:11 +02001048 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
1049 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
1050
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001051 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001052 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +02001053
1054 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1055 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1056 cflags_save=$CFLAGS
1057 libs_save=$LIBS
1058 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1059 LIBS="$LIBS $MZSCHEME_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001060 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar9e902192013-07-17 18:58:11 +02001061 AC_MSG_RESULT(yes); mzs_ok=yes,
1062 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1063 CFLAGS=$cflags_save
1064 LIBS=$libs_save
1065 if test $mzs_ok = yes; then
1066 MZSCHEME_SRC="if_mzsch.c"
1067 MZSCHEME_OBJ="objects/if_mzsch.o"
1068 MZSCHEME_PRO="if_mzsch.pro"
1069 AC_DEFINE(FEAT_MZSCHEME)
1070 else
1071 MZSCHEME_CFLAGS=
1072 MZSCHEME_LIBS=
1073 MZSCHEME_EXTRA=
1074 MZSCHEME_MZC=
1075 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001076 fi
1077 AC_SUBST(MZSCHEME_SRC)
1078 AC_SUBST(MZSCHEME_OBJ)
1079 AC_SUBST(MZSCHEME_PRO)
1080 AC_SUBST(MZSCHEME_LIBS)
1081 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001082 AC_SUBST(MZSCHEME_EXTRA)
1083 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001084fi
1085
1086
Bram Moolenaar071d4272004-06-13 20:20:40 +00001087AC_MSG_CHECKING(--enable-perlinterp argument)
1088AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001089 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001090 [enable_perlinterp="no"])
1091AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001092if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001093 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001094 AC_MSG_ERROR([cannot use Perl with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001095 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001096 AC_SUBST(vi_cv_path_perl)
1097 AC_PATH_PROG(vi_cv_path_perl, perl)
1098 if test "X$vi_cv_path_perl" != "X"; then
1099 AC_MSG_CHECKING(Perl version)
1100 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1101 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001102 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001103 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1104 badthreads=no
1105 else
1106 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1107 eval `$vi_cv_path_perl -V:use5005threads`
1108 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1109 badthreads=no
1110 else
1111 badthreads=yes
1112 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1113 fi
1114 else
1115 badthreads=yes
1116 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1117 fi
1118 fi
1119 if test $badthreads = no; then
1120 AC_MSG_RESULT(OK)
1121 eval `$vi_cv_path_perl -V:shrpenv`
1122 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1123 shrpenv=""
1124 fi
1125 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1126 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001127 vi_cv_perl_extutils=unknown_perl_extutils_path
1128 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1129 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1130 if test -f "$xsubpp_path"; then
1131 vi_cv_perl_xsubpp="$xsubpp_path"
1132 fi
1133 done
1134 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001135 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001136 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001137 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001138 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001140 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1141 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001142 -e 's/-pipe //' \
1143 -e 's/-W[[^ ]]*//g' \
1144 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001145 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1146 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1147 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1148 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1149 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1150 dnl a test in configure may fail because of that.
1151 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1152 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1153
1154 dnl check that compiling a simple program still works with the flags
1155 dnl added for Perl.
1156 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1157 cflags_save=$CFLAGS
1158 libs_save=$LIBS
1159 ldflags_save=$LDFLAGS
1160 CFLAGS="$CFLAGS $perlcppflags"
1161 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001162 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163 LDFLAGS="$perlldflags $LDFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001164 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165 AC_MSG_RESULT(yes); perl_ok=yes,
1166 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1167 CFLAGS=$cflags_save
1168 LIBS=$libs_save
1169 LDFLAGS=$ldflags_save
1170 if test $perl_ok = yes; then
1171 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001172 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001173 fi
1174 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001175 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001176 LDFLAGS="$perlldflags $LDFLAGS"
1177 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001178 fi
1179 PERL_LIBS=$perllibs
1180 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1181 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1182 PERL_PRO="if_perl.pro if_perlsfio.pro"
1183 AC_DEFINE(FEAT_PERL)
1184 fi
1185 fi
1186 else
1187 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1188 fi
1189 fi
1190
Bram Moolenaard0573012017-10-28 21:11:06 +02001191 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001192 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193 dir=/System/Library/Perl
1194 darwindir=$dir/darwin
1195 if test -d $darwindir; then
1196 PERL=/usr/bin/perl
1197 else
1198 dnl Mac OS X 10.3
1199 dir=/System/Library/Perl/5.8.1
1200 darwindir=$dir/darwin-thread-multi-2level
1201 if test -d $darwindir; then
1202 PERL=/usr/bin/perl
1203 fi
1204 fi
1205 if test -n "$PERL"; then
1206 PERL_DIR="$dir"
1207 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1208 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1209 PERL_LIBS="-L$darwindir/CORE -lperl"
1210 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001211 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1212 dnl be included if requested by passing --with-mac-arch to
1213 dnl configure, so strip these flags first (if present)
1214 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1215 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 +00001216 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001217 if test "$enable_perlinterp" = "dynamic"; then
1218 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1219 AC_DEFINE(DYNAMIC_PERL)
1220 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1221 fi
1222 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001223
1224 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1225 AC_MSG_ERROR([could not configure perl])
1226 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001227fi
1228AC_SUBST(shrpenv)
1229AC_SUBST(PERL_SRC)
1230AC_SUBST(PERL_OBJ)
1231AC_SUBST(PERL_PRO)
1232AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001233AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001234AC_SUBST(PERL_LIBS)
1235
1236AC_MSG_CHECKING(--enable-pythoninterp argument)
1237AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001238 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001239 [enable_pythoninterp="no"])
1240AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001241if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001242 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001243 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001244 fi
1245
Bram Moolenaar071d4272004-06-13 20:20:40 +00001246 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001247 AC_MSG_CHECKING(--with-python-command argument)
1248 AC_SUBST(vi_cv_path_python)
1249 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1250 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1251 AC_MSG_RESULT(no))
1252
1253 if test "X$vi_cv_path_python" = "X"; then
1254 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1255 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256 if test "X$vi_cv_path_python" != "X"; then
1257
1258 dnl -- get its version number
1259 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1260 [[vi_cv_var_python_version=`
1261 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1262 ]])
1263
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001264 dnl -- it must be at least version 2.3
1265 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001266 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001267 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268 then
1269 AC_MSG_RESULT(yep)
1270
1271 dnl -- find where python thinks it was installed
1272 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1273 [ vi_cv_path_python_pfx=`
1274 ${vi_cv_path_python} -c \
1275 "import sys; print sys.prefix"` ])
1276
1277 dnl -- and where it thinks it runs
1278 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1279 [ vi_cv_path_python_epfx=`
1280 ${vi_cv_path_python} -c \
1281 "import sys; print sys.exec_prefix"` ])
1282
1283 dnl -- python's internal library path
1284
1285 AC_CACHE_VAL(vi_cv_path_pythonpath,
1286 [ vi_cv_path_pythonpath=`
1287 unset PYTHONPATH;
1288 ${vi_cv_path_python} -c \
1289 "import sys, string; print string.join(sys.path,':')"` ])
1290
1291 dnl -- where the Python implementation library archives are
1292
1293 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001294 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001295 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001296
1297 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1298 [
1299 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001300 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1301 if test -d "$d" && test -f "$d/config.c"; then
1302 vi_cv_path_python_conf="$d"
1303 else
1304 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1305 for subdir in lib64 lib share; do
1306 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1307 if test -d "$d" && test -f "$d/config.c"; then
1308 vi_cv_path_python_conf="$d"
1309 fi
1310 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001312 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001313 ])
1314
1315 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1316
1317 if test "X$PYTHON_CONFDIR" = "X"; then
1318 AC_MSG_RESULT([can't find it!])
1319 else
1320
1321 dnl -- we need to examine Python's config/Makefile too
1322 dnl see what the interpreter is built from
1323 AC_CACHE_VAL(vi_cv_path_python_plibs,
1324 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001325 pwd=`pwd`
1326 tmp_mkf="$pwd/config-PyMake$$"
1327 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001328__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001329 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001330 @echo "python_LIBS='$(LIBS)'"
1331 @echo "python_SYSLIBS='$(SYSLIBS)'"
1332 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001333 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001334 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001335 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1336 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1337 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338eof
1339 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001340 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1341 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001342 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001343 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1344 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001345 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1346 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1347 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001348 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001349 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001350 dnl -- Check if the path contained in python_LINKFORSHARED is
1351 dnl usable for vim build. If not, make and try other
1352 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001353 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001354 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1355 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1356 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1357 dnl -- The path looks relative. Guess the absolute one using
1358 dnl the prefix and try that.
1359 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1360 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1361 dnl -- A last resort.
1362 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1363 dnl -- No check is done. The last word is left to the
1364 dnl "sanity" test on link flags that follows shortly.
1365 fi
1366 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1367 fi
1368 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001369 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 +00001370 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1371 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1372 fi
1373 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001374 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001375 [
1376 if test "X$python_DLLLIBRARY" != "X"; then
1377 vi_cv_dll_name_python="$python_DLLLIBRARY"
1378 else
1379 vi_cv_dll_name_python="$python_INSTSONAME"
1380 fi
1381 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001382
1383 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1384 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001385 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001386 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001387 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 +00001388 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001389 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001390 dnl Define PYTHON_HOME if --with-python-config-dir was used
1391 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1392
1393 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001394 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001395 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001396
1397 dnl On FreeBSD linking with "-pthread" is required to use threads.
1398 dnl _THREAD_SAFE must be used for compiling then.
1399 dnl The "-pthread" is added to $LIBS, so that the following check for
1400 dnl sigaltstack() will look in libc_r (it's there in libc!).
1401 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1402 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1403 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1404 AC_MSG_CHECKING([if -pthread should be used])
1405 threadsafe_flag=
1406 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001407 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001408 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001409 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001410 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001411 threadsafe_flag="-D_THREAD_SAFE"
1412 thread_lib="-pthread"
1413 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001414 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001415 threadsafe_flag="-pthreads"
1416 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001417 fi
1418 libs_save_old=$LIBS
1419 if test -n "$threadsafe_flag"; then
1420 cflags_save=$CFLAGS
1421 CFLAGS="$CFLAGS $threadsafe_flag"
1422 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001423 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001424 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001425 AC_MSG_RESULT(no); LIBS=$libs_save_old
1426 )
1427 CFLAGS=$cflags_save
1428 else
1429 AC_MSG_RESULT(no)
1430 fi
1431
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001432 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001433 dnl added for Python.
1434 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1435 cflags_save=$CFLAGS
1436 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001437 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001438 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001439 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001440 AC_MSG_RESULT(yes); python_ok=yes,
1441 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1442 CFLAGS=$cflags_save
1443 LIBS=$libs_save
1444 if test $python_ok = yes; then
1445 AC_DEFINE(FEAT_PYTHON)
1446 else
1447 LIBS=$libs_save_old
1448 PYTHON_SRC=
1449 PYTHON_OBJ=
1450 PYTHON_LIBS=
1451 PYTHON_CFLAGS=
1452 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001453 fi
1454 else
1455 AC_MSG_RESULT(too old)
1456 fi
1457 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001458
1459 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1460 AC_MSG_ERROR([could not configure python])
1461 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001462fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001463
Bram Moolenaar071d4272004-06-13 20:20:40 +00001464AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001465AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001466AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001467AC_SUBST(PYTHON_SRC)
1468AC_SUBST(PYTHON_OBJ)
1469
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001470
1471AC_MSG_CHECKING(--enable-python3interp argument)
1472AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001473 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001474 [enable_python3interp="no"])
1475AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001476if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001477 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001478 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001479 fi
1480
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001481 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001482 AC_MSG_CHECKING(--with-python3-command argument)
1483 AC_SUBST(vi_cv_path_python3)
1484 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1485 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1486 AC_MSG_RESULT(no))
1487
1488 if test "X$vi_cv_path_python3" = "X"; then
1489 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1490 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001491 if test "X$vi_cv_path_python3" != "X"; then
1492
1493 dnl -- get its version number
1494 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1495 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001496 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001497 ]])
1498
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001499 dnl -- it must be at least version 3
1500 AC_MSG_CHECKING(Python is 3.0 or better)
1501 if ${vi_cv_path_python3} -c \
1502 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1503 then
1504 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001505
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001506 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1507 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001508 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001509 vi_cv_var_python3_abiflags=
1510 if ${vi_cv_path_python3} -c \
1511 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1512 then
Bram Moolenaare5303952022-06-19 17:05:47 +01001513 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001514 "import sys; print(sys.abiflags)"`
1515 fi ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001516
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001517 dnl -- find where python3 thinks it was installed
1518 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1519 [ vi_cv_path_python3_pfx=`
1520 ${vi_cv_path_python3} -c \
1521 "import sys; print(sys.prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001522
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001523 dnl -- and where it thinks it runs
1524 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1525 [ vi_cv_path_python3_epfx=`
1526 ${vi_cv_path_python3} -c \
1527 "import sys; print(sys.exec_prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001528
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001529 dnl -- python3's internal library path
Bram Moolenaare5303952022-06-19 17:05:47 +01001530
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001531 AC_CACHE_VAL(vi_cv_path_python3path,
1532 [ vi_cv_path_python3path=`
1533 unset PYTHONPATH;
1534 ${vi_cv_path_python3} -c \
1535 "import sys, string; print(':'.join(sys.path))"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001536
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001537 dnl -- where the Python implementation library archives are
Bram Moolenaare5303952022-06-19 17:05:47 +01001538
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001539 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001540 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001541 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaare5303952022-06-19 17:05:47 +01001542
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001543 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1544 [
1545 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001546 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001547 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1548 if test "x$d" = "x"; then
1549 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1550 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001551 if test -d "$d" && test -f "$d/config.c"; then
1552 vi_cv_path_python3_conf="$d"
1553 else
1554 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1555 for subdir in lib64 lib share; do
1556 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1557 if test -d "$d" && test -f "$d/config.c"; then
1558 vi_cv_path_python3_conf="$d"
1559 fi
1560 done
1561 done
1562 fi
1563 ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001564
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001565 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
Bram Moolenaare5303952022-06-19 17:05:47 +01001566
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001567 if test "X$PYTHON3_CONFDIR" = "X"; then
1568 AC_MSG_RESULT([can't find it!])
1569 else
Bram Moolenaare5303952022-06-19 17:05:47 +01001570
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001571 dnl -- we need to examine Python's config/Makefile too
1572 dnl see what the interpreter is built from
1573 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1574 [
1575 pwd=`pwd`
1576 tmp_mkf="$pwd/config-PyMake$$"
1577 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001578__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001579 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001580 @echo "python3_LIBS='$(LIBS)'"
1581 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001582 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001583 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001584 @echo "python3_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001585eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001586 dnl -- delete the lines from make about Entering/Leaving directory
1587 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1588 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001589 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 +02001590 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1591 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1592 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1593 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1594 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001595 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001596 [
1597 if test "X$python3_DLLLIBRARY" != "X"; then
1598 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001599 elif test "X$python3_PYTHONFRAMEWORKPREFIX" != "X"; then
1600 vi_cv_dll_name_python3="${python3_PYTHONFRAMEWORKPREFIX}/${python3_INSTSONAME}"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001601 else
1602 vi_cv_dll_name_python3="$python3_INSTSONAME"
1603 fi
1604 ])
1605
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001606 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1607 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001608 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 +02001609 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001610 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 +02001611 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001612 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001613 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1614 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1615 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001616 PYTHON3_SRC="if_python3.c"
1617 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaare5303952022-06-19 17:05:47 +01001618
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001619 dnl On FreeBSD linking with "-pthread" is required to use threads.
1620 dnl _THREAD_SAFE must be used for compiling then.
1621 dnl The "-pthread" is added to $LIBS, so that the following check for
1622 dnl sigaltstack() will look in libc_r (it's there in libc!).
1623 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1624 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1625 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1626 AC_MSG_CHECKING([if -pthread should be used])
1627 threadsafe_flag=
1628 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001629 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001630 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001631 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001632 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001633 threadsafe_flag="-D_THREAD_SAFE"
1634 thread_lib="-pthread"
1635 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001636 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001637 threadsafe_flag="-pthreads"
1638 fi
1639 fi
1640 libs_save_old=$LIBS
1641 if test -n "$threadsafe_flag"; then
1642 cflags_save=$CFLAGS
1643 CFLAGS="$CFLAGS $threadsafe_flag"
1644 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001645 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001646 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1647 AC_MSG_RESULT(no); LIBS=$libs_save_old
1648 )
1649 CFLAGS=$cflags_save
1650 else
1651 AC_MSG_RESULT(no)
1652 fi
Bram Moolenaare5303952022-06-19 17:05:47 +01001653
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001654 dnl check that compiling a simple program still works with the flags
1655 dnl added for Python.
1656 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1657 cflags_save=$CFLAGS
1658 libs_save=$LIBS
1659 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1660 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001661 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001662 AC_MSG_RESULT(yes); python3_ok=yes,
1663 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1664 CFLAGS=$cflags_save
1665 LIBS=$libs_save
1666 if test "$python3_ok" = yes; then
1667 AC_DEFINE(FEAT_PYTHON3)
1668 else
1669 LIBS=$libs_save_old
1670 PYTHON3_SRC=
1671 PYTHON3_OBJ=
1672 PYTHON3_LIBS=
1673 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001674 fi
1675 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001676 else
1677 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001678 fi
1679 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001680 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1681 AC_MSG_ERROR([could not configure python3])
1682 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001683fi
1684
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001685AC_SUBST(PYTHON3_LIBS)
1686AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001687AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001688AC_SUBST(PYTHON3_SRC)
1689AC_SUBST(PYTHON3_OBJ)
1690
1691dnl if python2.x and python3.x are enabled one can only link in code
Bram Moolenaare5303952022-06-19 17:05:47 +01001692dnl with dlopen(), dlsym(), dlclose()
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001693if test "$python_ok" = yes && test "$python3_ok" = yes; then
1694 AC_DEFINE(DYNAMIC_PYTHON)
1695 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001696 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001697 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001698 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001699 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001700 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001701 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001702 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001703 #include <dlfcn.h>
1704 /* If this program fails, then RTLD_GLOBAL is needed.
1705 * RTLD_GLOBAL will be used and then it is not possible to
1706 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001707 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001708 */
1709
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001710 static int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001711 {
1712 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001713 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001714 if (pylib != 0)
1715 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001716 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001717 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1718 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1719 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001720 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001721 (*init)();
1722 needed = (*simple)("import termios") == -1;
1723 (*final)();
1724 dlclose(pylib);
1725 }
1726 return !needed;
1727 }
1728
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001729 int main()
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001730 {
1731 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001732 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001733 not_needed = 1;
1734 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001735 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001736 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001737
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001738 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001739 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001740
1741 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1742 cflags_save=$CFLAGS
1743 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001744 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001745 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001746 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001747 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001748 #include <dlfcn.h>
1749 #include <wchar.h>
1750 /* If this program fails, then RTLD_GLOBAL is needed.
1751 * RTLD_GLOBAL will be used and then it is not possible to
1752 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001753 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001754 */
1755
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001756 static int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001757 {
1758 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001759 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001760 if (pylib != 0)
1761 {
1762 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1763 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1764 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1765 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1766 (*pfx)(prefix);
1767 (*init)();
1768 needed = (*simple)("import termios") == -1;
1769 (*final)();
1770 dlclose(pylib);
1771 }
1772 return !needed;
1773 }
1774
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001775 int main()
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001776 {
1777 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001778 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001779 not_needed = 1;
1780 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001781 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001782 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1783
1784 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001785 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001786
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001787 PYTHON_SRC="if_python.c"
1788 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001789 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001790 PYTHON_LIBS=
1791 PYTHON3_SRC="if_python3.c"
1792 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001793 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001794 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001795elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1796 AC_DEFINE(DYNAMIC_PYTHON)
1797 PYTHON_SRC="if_python.c"
1798 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001799 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001800 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001801elif test "$python_ok" = yes; then
1802 dnl Check that adding -fPIE works. It may be needed when using a static
1803 dnl Python library.
1804 AC_MSG_CHECKING([if -fPIE can be added for Python])
1805 cflags_save=$CFLAGS
1806 libs_save=$LIBS
1807 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1808 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001809 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001810 AC_MSG_RESULT(yes); fpie_ok=yes,
1811 AC_MSG_RESULT(no); fpie_ok=no)
1812 CFLAGS=$cflags_save
1813 LIBS=$libs_save
1814 if test $fpie_ok = yes; then
1815 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1816 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001817elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1818 AC_DEFINE(DYNAMIC_PYTHON3)
1819 PYTHON3_SRC="if_python3.c"
1820 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001821 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001822 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001823elif test "$python3_ok" = yes; then
1824 dnl Check that adding -fPIE works. It may be needed when using a static
1825 dnl Python library.
1826 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1827 cflags_save=$CFLAGS
1828 libs_save=$LIBS
1829 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1830 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001831 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001832 AC_MSG_RESULT(yes); fpie_ok=yes,
1833 AC_MSG_RESULT(no); fpie_ok=no)
1834 CFLAGS=$cflags_save
1835 LIBS=$libs_save
1836 if test $fpie_ok = yes; then
1837 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1838 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001839fi
1840
Bram Moolenaar071d4272004-06-13 20:20:40 +00001841AC_MSG_CHECKING(--enable-tclinterp argument)
1842AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001843 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001844 [enable_tclinterp="no"])
1845AC_MSG_RESULT($enable_tclinterp)
1846
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001847if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001848
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001849 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001850 AC_MSG_CHECKING(--with-tclsh argument)
1851 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1852 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001853 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001854 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1855 AC_SUBST(vi_cv_path_tcl)
1856
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001857 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1858 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1859 tclsh_name="tclsh8.4"
1860 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1861 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001862 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001863 tclsh_name="tclsh8.2"
1864 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1865 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001866 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1867 tclsh_name="tclsh8.0"
1868 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1869 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001870 dnl still didn't find it, try without version number
1871 if test "X$vi_cv_path_tcl" = "X"; then
1872 tclsh_name="tclsh"
1873 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1874 fi
1875 if test "X$vi_cv_path_tcl" != "X"; then
1876 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001877 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001878 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1879 AC_MSG_RESULT($tclver - OK);
1880 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 +01001881 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001882
1883 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001884 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001885 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 +00001886 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001887 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001888 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001889 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1890 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 +00001891 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001892 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001893 for try in $tclinc; do
1894 if test -f "$try/tcl.h"; then
1895 AC_MSG_RESULT($try/tcl.h)
1896 TCL_INC=$try
1897 break
1898 fi
1899 done
1900 if test -z "$TCL_INC"; then
1901 AC_MSG_RESULT(<not found>)
1902 SKIP_TCL=YES
1903 fi
1904 if test -z "$SKIP_TCL"; then
1905 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001906 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001907 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001908 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001909 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001910 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001911 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001912 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1913 tclcnf=`echo $tclinc | sed s/include/lib/g`
1914 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001915 fi
1916 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001917 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001918 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001919 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001920 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001921 if test "$enable_tclinterp" = "dynamic"; then
1922 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1923 else
1924 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1925 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001926 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001927 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001928 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 +00001929 break
1930 fi
1931 done
1932 if test -z "$TCL_LIBS"; then
1933 AC_MSG_RESULT(<not found>)
1934 AC_MSG_CHECKING(for Tcl library by myself)
1935 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001936 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001937 for ext in .so .a ; do
1938 for ver in "" $tclver ; do
1939 for try in $tcllib ; do
1940 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001941 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001942 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001943 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001944 if test "$vim_cv_uname_output" = SunOS &&
1945 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001946 TCL_LIBS="$TCL_LIBS -R $try"
1947 fi
1948 break 3
1949 fi
1950 done
1951 done
1952 done
1953 if test -z "$TCL_LIBS"; then
1954 AC_MSG_RESULT(<not found>)
1955 SKIP_TCL=YES
1956 fi
1957 fi
1958 if test -z "$SKIP_TCL"; then
1959 AC_DEFINE(FEAT_TCL)
1960 TCL_SRC=if_tcl.c
1961 TCL_OBJ=objects/if_tcl.o
1962 TCL_PRO=if_tcl.pro
1963 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1964 fi
1965 fi
1966 else
1967 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1968 fi
1969 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001970 if test "$enable_tclinterp" = "dynamic"; then
1971 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1972 AC_DEFINE(DYNAMIC_TCL)
1973 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1974 fi
1975 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001976 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1977 AC_MSG_ERROR([could not configure Tcl])
1978 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001979fi
1980AC_SUBST(TCL_SRC)
1981AC_SUBST(TCL_OBJ)
1982AC_SUBST(TCL_PRO)
1983AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001984AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001985AC_SUBST(TCL_LIBS)
1986
1987AC_MSG_CHECKING(--enable-rubyinterp argument)
1988AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001989 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001990 [enable_rubyinterp="no"])
1991AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001992if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001993 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001994 AC_MSG_ERROR([cannot use Ruby with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001995 fi
1996
Bram Moolenaar165641d2010-02-17 16:23:09 +01001997 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001998 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001999 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
2000 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
2001 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01002002 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002003 if test "X$vi_cv_path_ruby" != "X"; then
2004 AC_MSG_CHECKING(Ruby version)
K.Takata236ccbf2022-09-22 16:12:06 +01002005 if $vi_cv_path_ruby -e 'RUBY_VERSION >= "1.9.1" or exit 1' >/dev/null 2>/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002006 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02002007 AC_MSG_CHECKING(Ruby rbconfig)
2008 ruby_rbconfig="RbConfig"
2009 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
2010 ruby_rbconfig="Config"
2011 fi
2012 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002013 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002014 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 +00002015 if test "X$rubyhdrdir" != "X"; then
2016 AC_MSG_RESULT($rubyhdrdir)
2017 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002018 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2019 if test -d "$rubyarchdir"; then
2020 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002021 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002022 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002023 if test "X$rubyversion" = "X"; then
K.Takata236ccbf2022-09-22 16:12:06 +01002024 rubyversion=`$vi_cv_path_ruby -e "print RUBY_VERSION.gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002025 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002026 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002027 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002028 if test "X$rubylibs" != "X"; then
2029 RUBY_LIBS="$rubylibs"
2030 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002031 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2032 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002033 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01002034 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002035 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2036 elif test "$librubyarg" = "libruby.a"; then
2037 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2038 librubyarg="-lruby"
2039 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002040 fi
2041
2042 if test "X$librubyarg" != "X"; then
2043 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2044 fi
Zdenek Dohnal1d822af2022-11-23 12:06:08 +00002045
2046 dnl Here the Ruby LDFLAGS used to be added to LDFLAGS, but that turns
2047 dnl out to cause trouble and was removed.
2048
Bram Moolenaar071d4272004-06-13 20:20:40 +00002049 RUBY_SRC="if_ruby.c"
2050 RUBY_OBJ="objects/if_ruby.o"
2051 RUBY_PRO="if_ruby.pro"
2052 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002053 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002054 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002055 if test -z "$libruby_soname"; then
2056 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2057 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002058 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002059 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002060 RUBY_LIBS=
2061 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002062 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2063 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2064 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002065 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002066 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002067 fi
2068 else
K.Takata236ccbf2022-09-22 16:12:06 +01002069 AC_MSG_RESULT(too old; need Ruby version 1.9.1 or later)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070 fi
2071 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002072
2073 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2074 AC_MSG_ERROR([could not configure Ruby])
2075 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002076fi
2077AC_SUBST(RUBY_SRC)
2078AC_SUBST(RUBY_OBJ)
2079AC_SUBST(RUBY_PRO)
2080AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002081AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002082AC_SUBST(RUBY_LIBS)
2083
2084AC_MSG_CHECKING(--enable-cscope argument)
2085AC_ARG_ENABLE(cscope,
2086 [ --enable-cscope Include cscope interface.], ,
2087 [enable_cscope="no"])
2088AC_MSG_RESULT($enable_cscope)
2089if test "$enable_cscope" = "yes"; then
2090 AC_DEFINE(FEAT_CSCOPE)
2091fi
2092
Bram Moolenaar071d4272004-06-13 20:20:40 +00002093AC_MSG_CHECKING(--disable-netbeans argument)
2094AC_ARG_ENABLE(netbeans,
2095 [ --disable-netbeans Disable NetBeans integration support.],
2096 , [enable_netbeans="yes"])
2097if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002098 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002099 AC_MSG_RESULT([cannot use NetBeans with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002100 enable_netbeans="no"
2101 else
2102 AC_MSG_RESULT(no)
2103 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002104else
2105 AC_MSG_RESULT(yes)
2106fi
2107
2108AC_MSG_CHECKING(--disable-channel argument)
2109AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002110 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002111 , [enable_channel="yes"])
2112if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002113 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002114 AC_MSG_RESULT([cannot use channels with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002115 enable_channel="no"
2116 else
2117 AC_MSG_RESULT(no)
2118 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002119else
2120 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002121 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002122 enable_netbeans="no"
2123 else
2124 AC_MSG_RESULT(yes)
2125 fi
2126fi
2127
Bram Moolenaar16435482016-01-24 21:31:54 +01002128if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002129 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002130 if test "x$HAIKU" = "xyes"; then
2131 AC_CHECK_LIB(network, socket)
2132 else
2133 AC_CHECK_LIB(socket, socket)
2134 fi
2135
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002136 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002137 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002138#include <stdio.h>
2139#include <stdlib.h>
2140#include <stdarg.h>
2141#include <fcntl.h>
2142#include <netdb.h>
2143#include <netinet/in.h>
2144#include <errno.h>
2145#include <sys/types.h>
2146#include <sys/socket.h>
2147 /* Check bitfields */
2148 struct nbbuf {
2149 unsigned int initDone:1;
2150 unsigned short signmaplen;
2151 };
2152 ], [
2153 /* Check creating a socket. */
2154 struct sockaddr_in server;
2155 struct addrinfo *res;
2156 (void)socket(AF_INET, SOCK_STREAM, 0);
2157 (void)htons(100);
2158 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2159 if (errno == ECONNREFUSED)
2160 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2161 (void)freeaddrinfo(res);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002162 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002163 [vim_cv_ipv6_networking="yes"],
2164 [vim_cv_ipv6_networking="no"])])
2165
2166 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2167 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002168 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002169 else
2170 dnl On Solaris we need the nsl library.
2171 AC_CHECK_LIB(nsl, gethostbyname)
2172 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002173 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002174#include <stdio.h>
2175#include <stdlib.h>
2176#include <stdarg.h>
2177#include <fcntl.h>
2178#include <netdb.h>
2179#include <netinet/in.h>
2180#include <errno.h>
2181#include <sys/types.h>
2182#include <sys/socket.h>
2183 /* Check bitfields */
2184 struct nbbuf {
2185 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002186 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002187 };
2188 ], [
2189 /* Check creating a socket. */
2190 struct sockaddr_in server;
2191 (void)socket(AF_INET, SOCK_STREAM, 0);
2192 (void)htons(100);
2193 (void)gethostbyname("microsoft.com");
2194 if (errno == ECONNREFUSED)
2195 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002196 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002197 [vim_cv_ipv4_networking="yes"],
2198 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2199 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002200fi
2201if test "$enable_netbeans" = "yes"; then
2202 AC_DEFINE(FEAT_NETBEANS_INTG)
2203 NETBEANS_SRC="netbeans.c"
2204 AC_SUBST(NETBEANS_SRC)
2205 NETBEANS_OBJ="objects/netbeans.o"
2206 AC_SUBST(NETBEANS_OBJ)
2207fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002208if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002209 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002210 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002211 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002212 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002213 AC_SUBST(CHANNEL_OBJ)
2214fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002215
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002216AC_MSG_CHECKING(--enable-terminal argument)
2217AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002218 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002219 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002220if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002221 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002222 AC_MSG_RESULT([cannot use terminal emulator with tiny features])
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002223 enable_terminal="no"
2224 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002225 if test "$enable_terminal" = "auto"; then
2226 enable_terminal="yes"
2227 AC_MSG_RESULT(defaulting to yes)
2228 else
2229 AC_MSG_RESULT(yes)
2230 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002231 fi
2232else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002233 if test "$enable_terminal" = "auto"; then
2234 enable_terminal="no"
2235 AC_MSG_RESULT(defaulting to no)
2236 else
2237 AC_MSG_RESULT(no)
2238 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002239fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002240if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002241 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002242 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 +02002243 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002244 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 +02002245 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002246 TERM_TEST="test_libvterm"
2247 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002248fi
2249
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002250AC_MSG_CHECKING(--enable-autoservername argument)
2251AC_ARG_ENABLE(autoservername,
2252 [ --enable-autoservername Automatically define servername at vim startup.], ,
2253 [enable_autoservername="no"])
2254AC_MSG_RESULT($enable_autoservername)
2255if test "$enable_autoservername" = "yes"; then
2256 AC_DEFINE(FEAT_AUTOSERVERNAME)
2257fi
2258
Bram Moolenaar071d4272004-06-13 20:20:40 +00002259AC_MSG_CHECKING(--enable-multibyte argument)
2260AC_ARG_ENABLE(multibyte,
2261 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002262 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002263AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002264if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002265 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2266 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002267fi
2268
Martin Tournoij25f3a142022-10-08 19:26:41 +01002269dnl Right-to-Left language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002270dnl unless ENABLE_RIGHTLEFT is undefined.
2271AC_MSG_CHECKING(--disable-rightleft argument)
2272AC_ARG_ENABLE(rightleft,
2273 [ --disable-rightleft Do not include Right-to-Left language support.],
2274 , [enable_rightleft="yes"])
2275if test "$enable_rightleft" = "yes"; then
2276 AC_MSG_RESULT(no)
2277else
2278 AC_MSG_RESULT(yes)
2279 AC_DEFINE(DISABLE_RIGHTLEFT)
2280fi
2281
Martin Tournoij25f3a142022-10-08 19:26:41 +01002282dnl Arabic language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002283dnl unless ENABLE_ARABIC is undefined.
2284AC_MSG_CHECKING(--disable-arabic argument)
2285AC_ARG_ENABLE(arabic,
2286 [ --disable-arabic Do not include Arabic language support.],
2287 , [enable_arabic="yes"])
2288if test "$enable_arabic" = "yes"; then
2289 AC_MSG_RESULT(no)
2290else
2291 AC_MSG_RESULT(yes)
2292 AC_DEFINE(DISABLE_ARABIC)
2293fi
2294
Bram Moolenaar14184a32019-02-16 15:10:30 +01002295dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002296AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002297 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002298
Bram Moolenaar071d4272004-06-13 20:20:40 +00002299AC_MSG_CHECKING(--enable-xim argument)
2300AC_ARG_ENABLE(xim,
2301 [ --enable-xim Include XIM input support.],
2302 AC_MSG_RESULT($enable_xim),
2303 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002304
2305AC_MSG_CHECKING(--enable-fontset argument)
2306AC_ARG_ENABLE(fontset,
2307 [ --enable-fontset Include X fontset output support.], ,
2308 [enable_fontset="no"])
2309AC_MSG_RESULT($enable_fontset)
2310dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2311
2312test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002313test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002314if test "$with_x" = no; then
2315 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2316else
2317 dnl Do this check early, so that its failure can override user requests.
2318
2319 AC_PATH_PROG(xmkmfpath, xmkmf)
2320
2321 AC_PATH_XTRA
2322
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002323 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002324 dnl be compiled with a special option.
2325 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002326 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002327 CFLAGS="$CFLAGS -W c,dll"
2328 LDFLAGS="$LDFLAGS -W l,dll"
2329 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2330 fi
2331
2332 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002333 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002334
2335 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2336 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2337 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2338 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002339 if test "$vim_cv_uname_output" = SunOS &&
2340 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002341 X_LIBS="$X_LIBS -R $x_libraries"
2342 fi
2343 fi
2344
2345 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2346 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2347 AC_MSG_RESULT(Corrected X includes to $x_includes)
2348 X_CFLAGS="$X_CFLAGS -I$x_includes"
2349 fi
2350
2351 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2352 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2353 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2354 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2355 dnl Same for "-R/usr/lib ".
2356 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2357
2358
2359 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002360 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2361 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002362 AC_MSG_CHECKING(if X11 header files can be found)
2363 cflags_save=$CFLAGS
2364 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002365 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
2366#include <X11/Intrinsic.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002367 AC_MSG_RESULT(yes),
2368 AC_MSG_RESULT(no); no_x=yes)
2369 CFLAGS=$cflags_save
2370
2371 if test "${no_x-no}" = yes; then
2372 with_x=no
2373 else
2374 AC_DEFINE(HAVE_X11)
2375 X_LIB="-lXt -lX11";
2376 AC_SUBST(X_LIB)
2377
2378 ac_save_LDFLAGS="$LDFLAGS"
2379 LDFLAGS="-L$x_libraries $LDFLAGS"
2380
2381 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2382 dnl For HP-UX 10.20 it must be before -lSM -lICE
2383 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2384 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2385
2386 dnl Some systems need -lnsl -lsocket when testing for ICE.
2387 dnl The check above doesn't do this, try here (again). Also needed to get
2388 dnl them after Xdmcp. link.sh will remove them when not needed.
2389 dnl Check for other function than above to avoid the cached value
2390 AC_CHECK_LIB(ICE, IceOpenConnection,
2391 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2392
2393 dnl Check for -lXpm (needed for some versions of Motif)
2394 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2395 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2396 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2397
2398 dnl Check that the X11 header files don't use implicit declarations
2399 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2400 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002401 dnl -Werror is GCC only, others like Solaris Studio might not like it
2402 if test "$GCC" = yes; then
2403 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2404 else
2405 CFLAGS="$CFLAGS $X_CFLAGS"
2406 fi
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002407 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002408 AC_MSG_RESULT(no),
2409 CFLAGS="$CFLAGS -Wno-implicit-int"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002410 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002411 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2412 AC_MSG_RESULT(test failed)
2413 )
2414 )
2415 CFLAGS=$cflags_save
2416
2417 LDFLAGS="$ac_save_LDFLAGS"
2418
Mike Gilberta055b442023-08-20 19:01:41 +02002419 AC_CHECK_SIZEOF([wchar_t])
2420 if test "$ac_cv_sizeof_wchar_t" -le 2; then
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002421 AC_DEFINE(SMALL_WCHAR_T)
2422 fi
2423
Bram Moolenaar071d4272004-06-13 20:20:40 +00002424 fi
2425fi
2426
Bram Moolenaard2a05492018-07-27 22:35:15 +02002427dnl Check if --with-x was given but it doesn't work.
2428if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2429 AC_MSG_ERROR([could not configure X])
2430fi
2431
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002432test "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 +00002433
2434AC_MSG_CHECKING(--enable-gui argument)
2435AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002436 [ --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 +00002437
2438dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2439dnl Do not use character classes for portability with old tools.
2440enable_gui_canon=`echo "_$enable_gui" | \
2441 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2442
2443dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002444SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002445SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002446SKIP_GNOME=YES
2447SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002448SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002449SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002450GUITYPE=NONE
2451
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002452if test "x$HAIKU" = "xyes"; then
2453 SKIP_HAIKU=
2454 case "$enable_gui_canon" in
2455 no) AC_MSG_RESULT(no GUI support)
2456 SKIP_HAIKU=YES ;;
2457 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2458 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2459 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2460 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2461 SKIP_HAIKU=YES ;;
2462 esac
2463elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002464 SKIP_PHOTON=
2465 case "$enable_gui_canon" in
2466 no) AC_MSG_RESULT(no GUI support)
2467 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002468 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2469 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002470 photon) AC_MSG_RESULT(Photon GUI support) ;;
2471 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2472 SKIP_PHOTON=YES ;;
2473 esac
2474
Bram Moolenaar040f9752020-08-11 23:08:48 +02002475elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2476 case "$enable_gui_canon" in
2477 no) AC_MSG_RESULT(no GUI support) ;;
2478 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2479 gui_auto=yes ;;
2480 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002481 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002482 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002483else
2484
Bram Moolenaar071d4272004-06-13 20:20:40 +00002485 case "$enable_gui_canon" in
2486 no|none) AC_MSG_RESULT(no GUI support) ;;
2487 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002488 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002489 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002490 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002491 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002492 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002493 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002494 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002495 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2496 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002497 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002498 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2499 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002500 motif) AC_MSG_RESULT(Motif GUI support)
2501 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2503 esac
2504
2505fi
2506
Bram Moolenaar071d4272004-06-13 20:20:40 +00002507if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2508 -a "$enable_gui_canon" != "gnome2"; then
2509 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2510 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002511 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002512 , enable_gtk2_check="yes")
2513 AC_MSG_RESULT($enable_gtk2_check)
2514 if test "x$enable_gtk2_check" = "xno"; then
2515 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002516 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002517 fi
2518fi
2519
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002520if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002521 AC_MSG_CHECKING(whether or not to look for GNOME)
2522 AC_ARG_ENABLE(gnome-check,
2523 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2524 , enable_gnome_check="no")
2525 AC_MSG_RESULT($enable_gnome_check)
2526 if test "x$enable_gnome_check" = "xno"; then
2527 SKIP_GNOME=YES
2528 fi
2529fi
2530
Bram Moolenaar98921892016-02-23 17:14:37 +01002531if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2532 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2533 AC_ARG_ENABLE(gtk3-check,
2534 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2535 , enable_gtk3_check="yes")
2536 AC_MSG_RESULT($enable_gtk3_check)
2537 if test "x$enable_gtk3_check" = "xno"; then
2538 SKIP_GTK3=YES
2539 fi
2540fi
2541
Bram Moolenaar071d4272004-06-13 20:20:40 +00002542if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2543 AC_MSG_CHECKING(whether or not to look for Motif)
2544 AC_ARG_ENABLE(motif-check,
2545 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2546 , enable_motif_check="yes")
2547 AC_MSG_RESULT($enable_motif_check)
2548 if test "x$enable_motif_check" = "xno"; then
2549 SKIP_MOTIF=YES
2550 fi
2551fi
2552
Bram Moolenaar071d4272004-06-13 20:20:40 +00002553dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002554dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002555dnl
2556dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002557dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002558dnl
2559AC_DEFUN(AM_PATH_GTK,
2560[
2561 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2562 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002563 no_gtk=""
2564 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2565 && $PKG_CONFIG --exists gtk+-2.0; then
2566 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002567 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2568 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002569 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2570 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2571 dnl something like that.
2572 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002573 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002574 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2575 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2576 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2577 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2578 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2579 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2580 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2581 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002582 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2583 && $PKG_CONFIG --exists gtk+-3.0; then
2584 {
2585 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2586 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2587
2588 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2589 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2590 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2591 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2592 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2593 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2594 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2595 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2596 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2597 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002598 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002599 dnl Put some text before the "no" to hint at installing the gtk-dev
2600 dnl packages.
2601 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002602 no_gtk=yes
2603 fi
2604
2605 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2606 {
2607 ac_save_CFLAGS="$CFLAGS"
2608 ac_save_LIBS="$LIBS"
2609 CFLAGS="$CFLAGS $GTK_CFLAGS"
2610 LIBS="$LIBS $GTK_LIBS"
2611
2612 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002613 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002614 dnl
2615 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002616 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002617#include <gtk/gtk.h>
2618#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002619#if STDC_HEADERS
2620# include <stdlib.h>
2621# include <stddef.h>
2622#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002623
2624int
2625main ()
2626{
2627int major, minor, micro;
2628char *tmp_version;
2629
2630system ("touch conf.gtktest");
2631
2632/* HP/UX 9 (%@#!) writes to sscanf strings */
2633tmp_version = g_strdup("$min_gtk_version");
2634if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2635 printf("%s, bad version string\n", "$min_gtk_version");
2636 exit(1);
2637 }
2638
2639if ((gtk_major_version > major) ||
2640 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2641 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2642 (gtk_micro_version >= micro)))
2643{
2644 return 0;
2645}
2646return 1;
2647}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002648])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002649 CFLAGS="$ac_save_CFLAGS"
2650 LIBS="$ac_save_LIBS"
2651 }
2652 fi
2653 if test "x$no_gtk" = x ; then
2654 if test "x$enable_gtktest" = "xyes"; then
2655 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2656 else
2657 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2658 fi
2659 ifelse([$2], , :, [$2])
2660 else
2661 {
2662 AC_MSG_RESULT(no)
2663 GTK_CFLAGS=""
2664 GTK_LIBS=""
2665 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002666 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2667 AC_MSG_ERROR([could not configure GTK])
2668 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002669 }
2670 fi
2671 }
2672 else
2673 GTK_CFLAGS=""
2674 GTK_LIBS=""
2675 ifelse([$3], , :, [$3])
2676 fi
2677 AC_SUBST(GTK_CFLAGS)
2678 AC_SUBST(GTK_LIBS)
2679 rm -f conf.gtktest
2680])
2681
2682dnl ---------------------------------------------------------------------------
2683dnl gnome
2684dnl ---------------------------------------------------------------------------
2685AC_DEFUN([GNOME_INIT_HOOK],
2686[
2687 AC_SUBST(GNOME_LIBS)
2688 AC_SUBST(GNOME_LIBDIR)
2689 AC_SUBST(GNOME_INCLUDEDIR)
2690
2691 AC_ARG_WITH(gnome-includes,
2692 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2693 [CFLAGS="$CFLAGS -I$withval"]
2694 )
2695
2696 AC_ARG_WITH(gnome-libs,
2697 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2698 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2699 )
2700
2701 AC_ARG_WITH(gnome,
2702 [ --with-gnome Specify prefix for GNOME files],
2703 if test x$withval = xyes; then
2704 want_gnome=yes
2705 ifelse([$1], [], :, [$1])
2706 else
2707 if test "x$withval" = xno; then
2708 want_gnome=no
2709 else
2710 want_gnome=yes
2711 LDFLAGS="$LDFLAGS -L$withval/lib"
2712 CFLAGS="$CFLAGS -I$withval/include"
2713 gnome_prefix=$withval/lib
2714 fi
2715 fi,
2716 want_gnome=yes)
2717
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002718 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002719 {
2720 AC_MSG_CHECKING(for libgnomeui-2.0)
2721 if $PKG_CONFIG --exists libgnomeui-2.0; then
2722 AC_MSG_RESULT(yes)
2723 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2724 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2725 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002726
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002727 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2728 dnl This might not be the right way but it works for me...
2729 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002730 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002731 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002732 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002733 GNOME_LIBS="$GNOME_LIBS -pthread"
2734 else
2735 AC_MSG_RESULT(no)
2736 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002737 $1
2738 else
2739 AC_MSG_RESULT(not found)
2740 if test "x$2" = xfail; then
2741 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2742 fi
2743 fi
2744 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002745 fi
2746])
2747
2748AC_DEFUN([GNOME_INIT],[
2749 GNOME_INIT_HOOK([],fail)
2750])
2751
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002752if test "X$PKG_CONFIG" = "X"; then
2753 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2754fi
2755
Bram Moolenaar071d4272004-06-13 20:20:40 +00002756
2757dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002758dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002759dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002760if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002761
2762 AC_MSG_CHECKING(--disable-gtktest argument)
2763 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2764 , enable_gtktest=yes)
2765 if test "x$enable_gtktest" = "xyes" ; then
2766 AC_MSG_RESULT(gtk test enabled)
2767 else
2768 AC_MSG_RESULT(gtk test disabled)
2769 fi
2770
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002771 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002772 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2773 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002774 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2775 dnl found.
2776 save_skip_gtk3=$SKIP_GTK3
2777 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002778 AM_PATH_GTK(2.2.0,
2779 [GUI_LIB_LOC="$GTK_LIBDIR"
2780 GTK_LIBNAME="$GTK_LIBS"
2781 GUI_INC_LOC="$GTK_CFLAGS"], )
2782 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002783 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002784 SKIP_MOTIF=YES
2785 GUITYPE=GTK
2786 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002787 else
2788 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002789 fi
2790 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002791 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002792 dnl
2793 dnl if GTK exists, then check for GNOME.
2794 dnl
2795 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002796 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002797 GNOME_INIT_HOOK([have_gnome=yes])
2798 if test "x$have_gnome" = xyes ; then
2799 AC_DEFINE(FEAT_GUI_GNOME)
2800 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2801 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002802 fi
2803 }
2804 fi
2805 fi
2806fi
2807
Bram Moolenaar98921892016-02-23 17:14:37 +01002808
2809dnl ---------------------------------------------------------------------------
2810dnl Check for GTK3.
2811dnl ---------------------------------------------------------------------------
2812if test -z "$SKIP_GTK3"; then
2813
2814 AC_MSG_CHECKING(--disable-gtktest argument)
2815 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2816 , enable_gtktest=yes)
2817 if test "x$enable_gtktest" = "xyes" ; then
2818 AC_MSG_RESULT(gtk test enabled)
2819 else
2820 AC_MSG_RESULT(gtk test disabled)
2821 fi
2822
Bram Moolenaar98921892016-02-23 17:14:37 +01002823 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002824 save_skip_gtk2=$SKIP_GTK2
2825 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002826 AM_PATH_GTK(3.0.0,
2827 [GUI_LIB_LOC="$GTK_LIBDIR"
2828 GTK_LIBNAME="$GTK_LIBS"
2829 GUI_INC_LOC="$GTK_CFLAGS"], )
2830 if test "x$GTK_CFLAGS" != "x"; then
2831 SKIP_GTK2=YES
2832 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002833 SKIP_MOTIF=YES
2834 GUITYPE=GTK
2835 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002836 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002837 else
2838 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002839 fi
2840 fi
2841fi
2842
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002843dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002844dnl glib-compile-resources is found in PATH, use GResource.
2845if test "x$GUITYPE" = "xGTK"; then
2846 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2847 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2848 if test "x$gdk_pixbuf_version" != x ; then
2849 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2850 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2851 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002852 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002853 AC_MSG_RESULT([OK.])
2854 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2855 AC_MSG_CHECKING([glib-compile-resources])
2856 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002857 GLIB_COMPILE_RESOURCES=""
2858 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002859 else
2860 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002861 AC_DEFINE(USE_GRESOURCE)
2862 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2863 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002864 fi
2865 else
2866 AC_MSG_RESULT([not usable.])
2867 fi
2868 else
2869 AC_MSG_RESULT([cannot obtain from pkg_config.])
2870 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002871
2872 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2873 AC_ARG_ENABLE(icon_cache_update,
2874 [ --disable-icon-cache-update update disabled],
2875 [],
2876 [enable_icon_cache_update="yes"])
2877 if test "$enable_icon_cache_update" = "yes"; then
2878 AC_MSG_RESULT([not set])
2879 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2880 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2881 AC_MSG_RESULT([not found in PATH.])
2882 fi
2883 else
2884 AC_MSG_RESULT([update disabled])
2885 fi
2886
2887 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2888 AC_ARG_ENABLE(desktop_database_update,
2889 [ --disable-desktop-database-update update disabled],
2890 [],
2891 [enable_desktop_database_update="yes"])
2892 if test "$enable_desktop_database_update" = "yes"; then
2893 AC_MSG_RESULT([not set])
2894 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2895 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2896 AC_MSG_RESULT([not found in PATH.])
2897 fi
2898 else
2899 AC_MSG_RESULT([update disabled])
2900 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002901fi
2902AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002903AC_SUBST(GRESOURCE_SRC)
2904AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002905AC_SUBST(GTK_UPDATE_ICON_CACHE)
2906AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002907
Bram Moolenaar071d4272004-06-13 20:20:40 +00002908dnl Check for Motif include files location.
2909dnl The LAST one found is used, this makes the highest version to be used,
2910dnl e.g. when Motif1.2 and Motif2.0 are both present.
2911
2912if test -z "$SKIP_MOTIF"; then
2913 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"
2914 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2915 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2916
2917 AC_MSG_CHECKING(for location of Motif GUI includes)
2918 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2919 GUI_INC_LOC=
2920 for try in $gui_includes; do
2921 if test -f "$try/Xm/Xm.h"; then
2922 GUI_INC_LOC=$try
2923 fi
2924 done
2925 if test -n "$GUI_INC_LOC"; then
2926 if test "$GUI_INC_LOC" = /usr/include; then
2927 GUI_INC_LOC=
2928 AC_MSG_RESULT(in default path)
2929 else
2930 AC_MSG_RESULT($GUI_INC_LOC)
2931 fi
2932 else
2933 AC_MSG_RESULT(<not found>)
2934 SKIP_MOTIF=YES
2935 fi
2936fi
2937
2938dnl Check for Motif library files location. In the same order as the include
2939dnl files, to avoid a mixup if several versions are present
2940
2941if test -z "$SKIP_MOTIF"; then
2942 AC_MSG_CHECKING(--with-motif-lib argument)
2943 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002944 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002945 [ MOTIF_LIBNAME="${withval}" ] )
2946
2947 if test -n "$MOTIF_LIBNAME"; then
2948 AC_MSG_RESULT($MOTIF_LIBNAME)
2949 GUI_LIB_LOC=
2950 else
2951 AC_MSG_RESULT(no)
2952
2953 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2954 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2955
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002956 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2957 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01002958 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar01967f52023-04-12 16:24:03 +01002959 dnl OpenSUSE appears to use /usr/lib64.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002960 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar01967f52023-04-12 16:24:03 +01002961 gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib64 /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 +00002962 GUI_LIB_LOC=
2963 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01002964 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 +00002965 if test -f "$libtry"; then
2966 GUI_LIB_LOC=$try
2967 fi
2968 done
2969 done
2970 if test -n "$GUI_LIB_LOC"; then
Bram Moolenaar01967f52023-04-12 16:24:03 +01002971 dnl Remove /usr/lib, it causes trouble on some systems.
2972 dnl For consistency also remove other standard lib directories.
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002973 if test "$GUI_LIB_LOC" = /usr/lib \
Bram Moolenaar01967f52023-04-12 16:24:03 +01002974 -o "$GUI_LIB_LOC" = /usr/lib64 \
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002975 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2976 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002977 GUI_LIB_LOC=
2978 AC_MSG_RESULT(in default path)
2979 else
2980 if test -n "$GUI_LIB_LOC"; then
2981 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002982 if test "$vim_cv_uname_output" = SunOS &&
2983 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002984 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2985 fi
2986 fi
2987 fi
2988 MOTIF_LIBNAME=-lXm
2989 else
2990 AC_MSG_RESULT(<not found>)
2991 SKIP_MOTIF=YES
2992 fi
2993 fi
2994fi
2995
2996if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002997 GUITYPE=MOTIF
2998 AC_SUBST(MOTIF_LIBNAME)
2999fi
3000
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003001if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003002 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3003 dnl Avoid adding it when it twice
3004 if test -n "$GUI_INC_LOC"; then
3005 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3006 fi
3007 if test -n "$GUI_LIB_LOC"; then
3008 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3009 fi
3010
3011 dnl Check for -lXext and then for -lXmu
3012 ldflags_save=$LDFLAGS
3013 LDFLAGS="$X_LIBS $LDFLAGS"
3014 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3015 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3016 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3017 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3018 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3019 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3020 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3021 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3022 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3023 if test -z "$SKIP_MOTIF"; then
3024 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3025 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3026 fi
3027 LDFLAGS=$ldflags_save
3028
3029 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3030 AC_MSG_CHECKING(for extra X11 defines)
3031 NARROW_PROTO=
3032 rm -fr conftestdir
3033 if mkdir conftestdir; then
3034 cd conftestdir
3035 cat > Imakefile <<'EOF'
3036acfindx:
3037 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3038EOF
3039 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3040 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3041 fi
3042 cd ..
3043 rm -fr conftestdir
3044 fi
3045 if test -z "$NARROW_PROTO"; then
3046 AC_MSG_RESULT(no)
3047 else
3048 AC_MSG_RESULT($NARROW_PROTO)
3049 fi
3050 AC_SUBST(NARROW_PROTO)
3051fi
3052
3053dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3054dnl use the X11 include path
3055if test "$enable_xsmp" = "yes"; then
3056 cppflags_save=$CPPFLAGS
3057 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3058 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3059 CPPFLAGS=$cppflags_save
3060fi
3061
3062
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003063if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003064 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3065 cppflags_save=$CPPFLAGS
3066 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3067 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3068
3069 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3070 if test ! "$enable_xim" = "no"; then
3071 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3072 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3073 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003074 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003075 fi
3076 CPPFLAGS=$cppflags_save
3077
Bram Moolenaar54612582019-11-21 17:13:31 +01003078 dnl automatically enable XIM in the GUI
3079 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003080 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3081 enable_xim="yes"
3082 fi
3083fi
3084
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003085if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003086 cppflags_save=$CPPFLAGS
3087 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003088dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3089 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003090 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003091#include <X11/Intrinsic.h>
3092#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003093 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003094 AC_MSG_RESULT(yes)
3095 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3096 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003097 CPPFLAGS=$cppflags_save
3098fi
3099
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003100dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003101if test -z "$SKIP_MOTIF"; then
3102 cppflags_save=$CPPFLAGS
3103 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003104 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003105 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003106 else
Bram Moolenaarde1d7342022-06-05 20:03:17 +01003107 AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h Xm/UnhighlightT.h Xm/Notebook.h)
Bram Moolenaare5303952022-06-19 17:05:47 +01003108 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003109
Bram Moolenaar77c19352012-06-13 19:19:41 +02003110 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003111 dnl Solaris uses XpmAttributes_21, very annoying.
3112 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003113 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003114 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3115 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3116 )
3117 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003118 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003119 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003120 CPPFLAGS=$cppflags_save
3121fi
3122
3123if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3124 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3125 enable_xim="no"
3126fi
3127if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3128 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3129 enable_fontset="no"
3130fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003131if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003132 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3133 enable_fontset="no"
3134fi
3135
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003136dnl There is no test for the Haiku GUI, if it's selected it's used
3137if test -z "$SKIP_HAIKU"; then
3138 GUITYPE=HAIKUGUI
3139fi
3140
Bram Moolenaar071d4272004-06-13 20:20:40 +00003141if test -z "$SKIP_PHOTON"; then
3142 GUITYPE=PHOTONGUI
3143fi
3144
3145AC_SUBST(GUI_INC_LOC)
3146AC_SUBST(GUI_LIB_LOC)
3147AC_SUBST(GUITYPE)
3148AC_SUBST(GUI_X_LIBS)
3149
3150if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3151 AC_MSG_ERROR([cannot use workshop without Motif])
3152fi
3153
3154dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3155if test "$enable_xim" = "yes"; then
3156 AC_DEFINE(FEAT_XIM)
3157fi
3158if test "$enable_fontset" = "yes"; then
3159 AC_DEFINE(FEAT_XFONTSET)
3160fi
3161
3162
3163dnl ---------------------------------------------------------------------------
3164dnl end of GUI-checking
3165dnl ---------------------------------------------------------------------------
3166
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003167AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003168if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003169 dnl Linux
3170 AC_MSG_RESULT([/proc/self/exe])
3171 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3172elif test -L "/proc/self/path/a.out"; then
3173 dnl Solaris
3174 AC_MSG_RESULT([/proc/self/path/a.out])
3175 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3176elif test -L "/proc/curproc/file"; then
3177 dnl FreeBSD
3178 AC_MSG_RESULT([/proc/curproc/file])
3179 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003180else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003181 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003182fi
3183
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003184dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003185AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003186case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003187 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003188 AC_MSG_CHECKING(for CYGWIN clipboard support)
3189 if test "x$with_x" = "xno" ; then
3190 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3191 AC_MSG_RESULT(yes)
3192 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3193 else
3194 AC_MSG_RESULT(no - using X11)
3195 fi ;;
3196
3197 *) CYGWIN=no; AC_MSG_RESULT(no);;
3198esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003199
Bram Moolenaar071d4272004-06-13 20:20:40 +00003200dnl Checks for libraries and include files.
3201
Bram Moolenaar446cb832008-06-24 21:56:24 +00003202AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3203 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003204 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003205#include "confdefs.h"
3206#include <ctype.h>
3207#if STDC_HEADERS
3208# include <stdlib.h>
3209# include <stddef.h>
3210#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003211int main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003212 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003213 vim_cv_toupper_broken=yes
3214 ],[
3215 vim_cv_toupper_broken=no
3216 ],[
3217 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3218 ])])
3219
3220if test "x$vim_cv_toupper_broken" = "xyes" ; then
3221 AC_DEFINE(BROKEN_TOUPPER)
3222fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003223
3224AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003225AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003226 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3227 AC_MSG_RESULT(no))
3228
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003229AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003230AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003231 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3232 AC_MSG_RESULT(no))
3233
Bram Moolenaar071d4272004-06-13 20:20:40 +00003234dnl Checks for header files.
3235AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3236dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3237if test "$HAS_ELF" = 1; then
3238 AC_CHECK_LIB(elf, main)
3239fi
3240
3241AC_HEADER_DIRENT
3242
Bram Moolenaar071d4272004-06-13 20:20:40 +00003243dnl If sys/wait.h is not found it might still exist but not be POSIX
3244dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3245if test $ac_cv_header_sys_wait_h = no; then
3246 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003247 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3248 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003249 AC_MSG_RESULT(yes)
3250 AC_DEFINE(HAVE_SYS_WAIT_H)
3251 AC_DEFINE(HAVE_UNION_WAIT),
3252 AC_MSG_RESULT(no))
3253fi
3254
Bram Moolenaar779a7752016-01-30 23:26:34 +01003255AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003256 sys/select.h sys/utsname.h termcap.h fcntl.h \
3257 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3258 termio.h iconv.h inttypes.h langinfo.h math.h \
3259 unistd.h stropts.h errno.h sys/resource.h \
3260 sys/systeminfo.h locale.h sys/stream.h termios.h \
3261 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003262 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003263 util/debug.h util/msg18n.h frame.h sys/acl.h \
3264 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003265
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003266dnl sys/ptem.h depends on sys/stream.h on Solaris
3267AC_CHECK_HEADERS(sys/ptem.h, [], [],
3268[#if defined HAVE_SYS_STREAM_H
3269# include <sys/stream.h>
3270#endif])
3271
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003272dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3273AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3274[#if defined HAVE_SYS_PARAM_H
3275# include <sys/param.h>
3276#endif])
3277
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003278
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003279dnl pthread_np.h may exist but can only be used after including pthread.h
3280AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003281AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003282#include <pthread.h>
3283#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003284 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003285 AC_MSG_RESULT(yes)
3286 AC_DEFINE(HAVE_PTHREAD_NP_H),
3287 AC_MSG_RESULT(no))
3288
Bram Moolenaare344bea2005-09-01 20:46:49 +00003289AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003290if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003291 dnl The strings.h file on OS/X contains a warning and nothing useful.
3292 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3293else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003294
3295dnl Check if strings.h and string.h can both be included when defined.
3296AC_MSG_CHECKING([if strings.h can be included after string.h])
3297cppflags_save=$CPPFLAGS
3298CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003299AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003300#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3301# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3302 /* but don't do it on AIX 5.1 (Uribarri) */
3303#endif
3304#ifdef HAVE_XM_XM_H
3305# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3306#endif
3307#ifdef HAVE_STRING_H
3308# include <string.h>
3309#endif
3310#if defined(HAVE_STRINGS_H)
3311# include <strings.h>
3312#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003313 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003314 AC_MSG_RESULT(yes),
3315 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3316 AC_MSG_RESULT(no))
3317CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003318fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003319
3320dnl Checks for typedefs, structures, and compiler characteristics.
3321AC_PROG_GCC_TRADITIONAL
3322AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003323AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003324AC_TYPE_MODE_T
3325AC_TYPE_OFF_T
3326AC_TYPE_PID_T
3327AC_TYPE_SIZE_T
3328AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003329AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003330
Bram Moolenaar071d4272004-06-13 20:20:40 +00003331AC_HEADER_TIME
3332AC_CHECK_TYPE(ino_t, long)
3333AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003334AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003335AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003336
3337AC_MSG_CHECKING(for rlim_t)
3338if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3339 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3340else
3341 AC_EGREP_CPP(dnl
3342changequote(<<,>>)dnl
3343<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3344changequote([,]),
3345 [
3346#include <sys/types.h>
3347#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003348# include <stdlib.h>
3349# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003350#endif
3351#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003352# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003353#endif
3354 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3355 AC_MSG_RESULT($ac_cv_type_rlim_t)
3356fi
3357if test $ac_cv_type_rlim_t = no; then
3358 cat >> confdefs.h <<\EOF
3359#define rlim_t unsigned long
3360EOF
3361fi
3362
3363AC_MSG_CHECKING(for stack_t)
3364if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3365 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3366else
3367 AC_EGREP_CPP(stack_t,
3368 [
3369#include <sys/types.h>
3370#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003371# include <stdlib.h>
3372# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003373#endif
3374#include <signal.h>
3375 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3376 AC_MSG_RESULT($ac_cv_type_stack_t)
3377fi
3378if test $ac_cv_type_stack_t = no; then
3379 cat >> confdefs.h <<\EOF
3380#define stack_t struct sigaltstack
3381EOF
3382fi
3383
3384dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3385AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003386AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003387#include <sys/types.h>
3388#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003389# include <stdlib.h>
3390# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003391#endif
3392#include <signal.h>
3393#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003394 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003395 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3396 AC_MSG_RESULT(no))
3397
3398olibs="$LIBS"
3399AC_MSG_CHECKING(--with-tlib argument)
3400AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3401if test -n "$with_tlib"; then
3402 AC_MSG_RESULT($with_tlib)
3403 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003404 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003405 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003406 dnl Need to check for tgetent() below.
3407 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003408else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003409 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003410 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3411 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003412 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003413 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003414 dnl Older versions of ncurses have bugs, get a new one!
3415 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003416 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003417 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003418 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3419 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003420 esac
3421 for libname in $tlibs; do
3422 AC_CHECK_LIB(${libname}, tgetent,,)
3423 if test "x$olibs" != "x$LIBS"; then
3424 dnl It's possible that a library is found but it doesn't work
3425 dnl e.g., shared library that cannot be found
3426 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003427 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003428#ifdef HAVE_TERMCAP_H
3429# include <termcap.h>
3430#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003431#if STDC_HEADERS
3432# include <stdlib.h>
3433# include <stddef.h>
3434#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003435int main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003436 res="OK", res="FAIL", res="FAIL")
3437 if test "$res" = "OK"; then
3438 break
3439 fi
3440 AC_MSG_RESULT($libname library is not usable)
3441 LIBS="$olibs"
3442 fi
3443 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003444 if test "x$olibs" = "x$LIBS"; then
3445 AC_MSG_RESULT(no terminal library found)
3446 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003447fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003448
3449if test "x$olibs" = "x$LIBS"; then
3450 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003451 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3452 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003453 AC_MSG_RESULT(yes),
3454 AC_MSG_ERROR([NOT FOUND!
3455 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003456 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003457 Or specify the name of the library with --with-tlib.]))
3458fi
3459
Bram Moolenaar446cb832008-06-24 21:56:24 +00003460AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3461 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003462 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003463#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003464#ifdef HAVE_TERMCAP_H
3465# include <termcap.h>
3466#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003467#ifdef HAVE_STRING_H
3468# include <string.h>
3469#endif
3470#if STDC_HEADERS
3471# include <stdlib.h>
3472# include <stddef.h>
3473#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003474int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003475{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003476 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003477 vim_cv_terminfo=no
3478 ],[
3479 vim_cv_terminfo=yes
3480 ],[
3481 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3482 ])
3483 ])
3484
3485if test "x$vim_cv_terminfo" = "xyes" ; then
3486 AC_DEFINE(TERMINFO)
3487fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003488
Bram Moolenaara88254f2017-11-02 23:04:14 +01003489AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003490 [
3491 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003492#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003493#ifdef HAVE_TERMCAP_H
3494# include <termcap.h>
3495#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003496#if STDC_HEADERS
3497# include <stdlib.h>
3498# include <stddef.h>
3499#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003500int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003501{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003502 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003503 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003504 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003505 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003506 ],[
3507 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003508 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003509 ])
3510
Bram Moolenaara88254f2017-11-02 23:04:14 +01003511if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003512 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003513fi
3514
3515AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003516AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003517#ifdef HAVE_TERMCAP_H
3518# include <termcap.h>
3519#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003520 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003521 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3522 [AC_MSG_RESULT(no)
3523 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003524 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003525#ifdef HAVE_TERMCAP_H
3526# include <termcap.h>
3527#endif
3528extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003529 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003530 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3531 AC_MSG_RESULT(no))]
3532 )
3533
3534AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003535AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003536#ifdef HAVE_TERMCAP_H
3537# include <termcap.h>
3538#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003539 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003540 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3541 [AC_MSG_RESULT(no)
3542 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003543 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003544#ifdef HAVE_TERMCAP_H
3545# include <termcap.h>
3546#endif
3547extern char *UP, *BC, PC;
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(UP_BC_PC_EXTERN),
3550 AC_MSG_RESULT(no))]
3551 )
3552
3553AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003554AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003555#ifdef HAVE_TERMCAP_H
3556# include <termcap.h>
3557#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003558 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003559 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3560 AC_MSG_RESULT(no))
3561
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003562AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003563AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003564#ifdef HAVE_TERMCAP_H
3565# include <termcap.h>
3566#endif
3567#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003568 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003569 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3570 AC_MSG_RESULT(no))
3571
Bram Moolenaar071d4272004-06-13 20:20:40 +00003572dnl On some SCO machines sys/select redefines struct timeval
3573AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003574AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003575#include <sys/types.h>
3576#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003577#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003578 AC_MSG_RESULT(yes)
3579 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3580 AC_MSG_RESULT(no))
3581
3582dnl AC_DECL_SYS_SIGLIST
3583
3584dnl Checks for pty.c (copied from screen) ==========================
3585AC_MSG_CHECKING(for /dev/ptc)
3586if test -r /dev/ptc; then
3587 AC_DEFINE(HAVE_DEV_PTC)
3588 AC_MSG_RESULT(yes)
3589else
3590 AC_MSG_RESULT(no)
3591fi
3592
3593AC_MSG_CHECKING(for SVR4 ptys)
3594if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003595 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003596// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3597char *ptsname(int);
3598int unlockpt(int);
3599int grantpt(int);
3600 ], [
3601 ptsname(0);
3602 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003603 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003604 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3605 AC_MSG_RESULT(no))
3606else
3607 AC_MSG_RESULT(no)
3608fi
3609
3610AC_MSG_CHECKING(for ptyranges)
3611if test -d /dev/ptym ; then
3612 pdir='/dev/ptym'
3613else
3614 pdir='/dev'
3615fi
3616dnl SCO uses ptyp%d
3617AC_EGREP_CPP(yes,
3618[#ifdef M_UNIX
3619 yes;
3620#endif
3621 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3622dnl if test -c /dev/ptyp19; then
3623dnl ptys=`echo /dev/ptyp??`
3624dnl else
3625dnl ptys=`echo $pdir/pty??`
3626dnl fi
3627if test "$ptys" != "$pdir/pty??" ; then
3628 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3629 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3630 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3631 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3632 AC_MSG_RESULT([$p0 / $p1])
3633else
3634 AC_MSG_RESULT([don't know])
3635fi
3636
Bram Moolenaar071d4272004-06-13 20:20:40 +00003637dnl Checks for library functions. ===================================
3638
Bram Moolenaar071d4272004-06-13 20:20:40 +00003639dnl check if struct sigcontext is defined (used for SGI only)
3640AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003641AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003642#include <signal.h>
Sam Jamesf8ea1062022-11-05 15:13:50 +00003643int test_sig()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003644{
3645 struct sigcontext *scont;
3646 scont = (struct sigcontext *)0;
3647 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003648} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003649 AC_MSG_RESULT(yes)
3650 AC_DEFINE(HAVE_SIGCONTEXT),
3651 AC_MSG_RESULT(no))
3652
3653dnl tricky stuff: try to find out if getcwd() is implemented with
3654dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003655AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3656 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003657 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003658#include "confdefs.h"
3659#ifdef HAVE_UNISTD_H
3660#include <unistd.h>
3661#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003662char *dagger[] = { "IFS=pwd", 0 };
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003663int main()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003664{
3665 char buffer[500];
3666 extern char **environ;
3667 environ = dagger;
3668 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003669}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003670 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003671 vim_cv_getcwd_broken=no
3672 ],[
3673 vim_cv_getcwd_broken=yes
3674 ],[
3675 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3676 ])
3677 ])
3678
3679if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3680 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003681 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003682fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003683
Bram Moolenaar25153e12010-02-24 14:47:08 +01003684dnl Check for functions in one big call, to reduce the size of configure.
3685dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003686AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003687 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003688 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003689 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003690 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003691 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
Bram Moolenaar08210f82023-04-13 19:15:54 +01003692 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt \
3693 clock_gettime)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003694AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003695AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003696
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003697dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3698dnl appropriate, so that off_t is 64 bits when needed.
3699AC_SYS_LARGEFILE
3700
Bram Moolenaar21606672019-06-14 20:40:58 +02003701AC_MSG_CHECKING(--enable-canberra argument)
3702AC_ARG_ENABLE(canberra,
3703 [ --disable-canberra Do not use libcanberra.],
3704 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003705
Bram Moolenaar21606672019-06-14 20:40:58 +02003706if test "$enable_canberra" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003707 if test "$features" = "huge"; then
Bram Moolenaar21606672019-06-14 20:40:58 +02003708 AC_MSG_RESULT(Defaulting to yes)
3709 enable_canberra="yes"
3710 else
3711 AC_MSG_RESULT(Defaulting to no)
3712 enable_canberra="no"
3713 fi
3714else
Bram Moolenaar12471262022-01-18 11:11:25 +00003715 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01003716 AC_MSG_RESULT([cannot use sound with tiny features])
Bram Moolenaar12471262022-01-18 11:11:25 +00003717 enable_canberra="no"
3718 else
3719 AC_MSG_RESULT($enable_canberra)
3720 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003721fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003722if test "$enable_canberra" = "yes"; then
3723 if test "x$PKG_CONFIG" != "xno"; then
3724 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3725 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3726 fi
3727 if test "x$canberra_lib" = "x"; then
3728 canberra_lib=-lcanberra
3729 canberra_cflags=-D_REENTRANT
3730 fi
3731 AC_MSG_CHECKING(for libcanberra)
3732 ac_save_CFLAGS="$CFLAGS"
3733 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003734 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003735 CFLAGS="$CFLAGS $canberra_cflags"
3736 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003737 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003738 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003739 # include <canberra.h>
3740 ], [
3741 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003742 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003743 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003744 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003745fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003746
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003747AC_MSG_CHECKING(--enable-libsodium argument)
3748AC_ARG_ENABLE(libsodium,
3749 [ --disable-libsodium Do not use libsodium.],
3750 , [enable_libsodium="maybe"])
3751
3752if test "$enable_libsodium" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003753 if test "$features" = "huge"; then
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003754 AC_MSG_RESULT(Defaulting to yes)
3755 enable_libsodium="yes"
3756 else
3757 AC_MSG_RESULT(Defaulting to no)
3758 enable_libsodium="no"
3759 fi
3760else
3761 AC_MSG_RESULT($enable_libsodium)
3762fi
3763if test "$enable_libsodium" = "yes"; then
3764 if test "x$PKG_CONFIG" != "xno"; then
3765 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3766 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3767 fi
3768 if test "x$libsodium_lib" = "x"; then
3769 libsodium_lib=-lsodium
3770 libsodium_cflags=
3771 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003772 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003773 ac_save_CFLAGS="$CFLAGS"
3774 ac_save_LIBS="$LIBS"
3775 CFLAGS="$CFLAGS $libsodium_cflags"
3776 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003777 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003778 # include <sodium.h>
3779 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003780 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003781 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3782 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3783fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003784
Bram Moolenaar071d4272004-06-13 20:20:40 +00003785dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3786AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003787AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003788[#include <sys/types.h>
3789#include <sys/stat.h>],
3790[ struct stat st;
3791 int n;
3792
3793 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003794 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003795 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3796 AC_MSG_RESULT(no))
3797
Paul Ollis65745772022-06-05 16:55:54 +01003798dnl Check for timer_create. It probably requires the 'rt' library.
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003799dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
3800dnl works, on Solaris timer_create() exists but fails at runtime.
Bram Moolenaarefffa532022-07-28 22:39:54 +01003801AC_CACHE_CHECK([for timer_create without -lrt], [vim_cv_timer_create], [
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003802AC_RUN_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar5748b7f2022-07-28 12:09:04 +01003803#if STDC_HEADERS
3804# include <stdlib.h>
3805# include <stddef.h>
3806#endif
3807#include <signal.h>
3808#include <time.h>
Bram Moolenaare5303952022-06-19 17:05:47 +01003809static void set_flag(union sigval sv) {}
Paul Ollis65745772022-06-05 16:55:54 +01003810], [
3811 struct timespec ts;
3812 struct sigevent action = {0};
3813 timer_t timer_id;
3814
3815 action.sigev_notify = SIGEV_THREAD;
3816 action.sigev_notify_function = set_flag;
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003817 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3818 exit(1); // cannot create a monotonic timer
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003819 ])],
Bram Moolenaarefffa532022-07-28 22:39:54 +01003820 vim_cv_timer_create=yes,
3821 vim_cv_timer_create=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003822 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003823 )])
Paul Ollis65745772022-06-05 16:55:54 +01003824
Bram Moolenaarefffa532022-07-28 22:39:54 +01003825dnl If the previous failed, check for timer_create() and linking with -lrt.
3826if test "x$vim_cv_timer_create" = "xno" ; then
3827 save_LIBS="$LIBS"
3828 LIBS="$LIBS -lrt"
3829 AC_CACHE_CHECK([for timer_create with -lrt], [vim_cv_timer_create_with_lrt], [
3830 AC_RUN_IFELSE([AC_LANG_PROGRAM([
3831 #if STDC_HEADERS
3832 # include <stdlib.h>
3833 # include <stddef.h>
3834 #endif
3835 #include <signal.h>
3836 #include <time.h>
3837 static void set_flag(union sigval sv) {}
3838 ], [
3839 struct timespec ts;
3840 struct sigevent action = {0};
3841 timer_t timer_id;
3842
3843 action.sigev_notify = SIGEV_THREAD;
3844 action.sigev_notify_function = set_flag;
3845 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3846 exit(1); // cannot create a monotonic timer
3847 ])],
3848 vim_cv_timer_create_with_lrt=yes,
3849 vim_cv_timer_create_with_lrt=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003850 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create_with_lrt'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003851 )])
3852 LIBS="$save_LIBS"
3853else
3854 vim_cv_timer_create_with_lrt=no
3855fi
Richard Purdie509695c2022-07-24 20:48:00 +01003856
3857if test "x$vim_cv_timer_create" = "xyes" ; then
3858 AC_DEFINE(HAVE_TIMER_CREATE)
3859fi
Bram Moolenaarefffa532022-07-28 22:39:54 +01003860if test "x$vim_cv_timer_create_with_lrt" = "xyes" ; then
3861 AC_DEFINE(HAVE_TIMER_CREATE)
3862 LIBS="$LIBS -lrt"
3863fi
Paul Ollis65745772022-06-05 16:55:54 +01003864
Bram Moolenaar446cb832008-06-24 21:56:24 +00003865AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3866 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003867 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003868#include "confdefs.h"
3869#if STDC_HEADERS
3870# include <stdlib.h>
3871# include <stddef.h>
3872#endif
3873#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003874#include <sys/stat.h>
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003875int main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003876 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003877 vim_cv_stat_ignores_slash=yes
3878 ],[
3879 vim_cv_stat_ignores_slash=no
3880 ],[
3881 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3882 ])
3883 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003884
Bram Moolenaar446cb832008-06-24 21:56:24 +00003885if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3886 AC_DEFINE(STAT_IGNORES_SLASH)
3887fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003888
3889dnl nanoseconds field of struct stat
3890AC_CACHE_CHECK([for nanoseconds field of struct stat],
3891 ac_cv_struct_st_mtim_nsec,
3892 [ac_save_CPPFLAGS="$CPPFLAGS"
3893 ac_cv_struct_st_mtim_nsec=no
3894 # st_mtim.tv_nsec -- the usual case
3895 # st_mtim._tv_nsec -- Solaris 2.6, if
3896 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3897 # && !defined __EXTENSIONS__)
3898 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3899 # st_mtime_n -- AIX 5.2 and above
3900 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3901 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
3902 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003903 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3904#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003905 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3906 done
3907 CPPFLAGS="$ac_save_CPPFLAGS"
3908])
3909if test $ac_cv_struct_st_mtim_nsec != no; then
3910 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3911 [Define if struct stat contains a nanoseconds field])
3912fi
Bram Moolenaare5303952022-06-19 17:05:47 +01003913
Bram Moolenaar071d4272004-06-13 20:20:40 +00003914dnl Link with iconv for charset translation, if not found without library.
3915dnl check for iconv() requires including iconv.h
3916dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3917dnl has been installed.
3918AC_MSG_CHECKING(for iconv_open())
3919save_LIBS="$LIBS"
3920LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003921AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003922#ifdef HAVE_ICONV_H
3923# include <iconv.h>
3924#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003925 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003926 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3927 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003928 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003929#ifdef HAVE_ICONV_H
3930# include <iconv.h>
3931#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003932 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003933 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3934 AC_MSG_RESULT(no)))
3935
3936
3937AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003938AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003939#ifdef HAVE_LANGINFO_H
3940# include <langinfo.h>
3941#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003942], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003943 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3944 AC_MSG_RESULT(no))
3945
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01003946dnl Floating point support may require the "m" library
Bram Moolenaar446cb832008-06-24 21:56:24 +00003947AC_CHECK_LIB(m, strtod)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003948
Bram Moolenaara6b89762016-02-29 21:38:26 +01003949dnl isinf() and isnan() need to include header files and may need -lm.
3950AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003951AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003952#ifdef HAVE_MATH_H
3953# include <math.h>
3954#endif
3955#if STDC_HEADERS
3956# include <stdlib.h>
3957# include <stddef.h>
3958#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003959], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003960 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3961 AC_MSG_RESULT(no))
3962
3963AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003964AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003965#ifdef HAVE_MATH_H
3966# include <math.h>
3967#endif
3968#if STDC_HEADERS
3969# include <stdlib.h>
3970# include <stddef.h>
3971#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003972], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003973 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3974 AC_MSG_RESULT(no))
3975
Bram Moolenaar071d4272004-06-13 20:20:40 +00003976dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3977dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003978dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003979AC_MSG_CHECKING(--disable-acl argument)
3980AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003981 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003982 , [enable_acl="yes"])
3983if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003984 AC_MSG_RESULT(no)
3985 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003986 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3987 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3988
Bram Moolenaard6d30422018-01-28 22:48:55 +01003989 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003990 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003991#include <sys/types.h>
3992#ifdef HAVE_SYS_ACL_H
3993# include <sys/acl.h>
3994#endif
3995acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3996 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003997 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003998 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3999 AC_MSG_RESULT(no))
4000
Bram Moolenaard6d30422018-01-28 22:48:55 +01004001 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4002 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004003 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004004#ifdef HAVE_SYS_ACL_H
4005# include <sys/acl.h>
4006#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004007 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004008 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004009 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004010
Bram Moolenaard6d30422018-01-28 22:48:55 +01004011 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004012 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004013#if STDC_HEADERS
4014# include <stdlib.h>
4015# include <stddef.h>
4016#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004017#ifdef HAVE_SYS_ACL_H
4018# include <sys/acl.h>
4019#endif
4020#ifdef HAVE_SYS_ACCESS_H
4021# include <sys/access.h>
4022#endif
4023#define _ALL_SOURCE
4024
4025#include <sys/stat.h>
4026
4027int aclsize;
4028struct acl *aclent;], [aclsize = sizeof(struct acl);
4029 aclent = (void *)malloc(aclsize);
4030 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004031 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004032 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4033 AC_MSG_RESULT(no))
4034else
4035 AC_MSG_RESULT(yes)
4036fi
4037
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004038if test "x$GTK_CFLAGS" != "x"; then
4039 dnl pango_shape_full() is new, fall back to pango_shape().
4040 AC_MSG_CHECKING(for pango_shape_full)
4041 ac_save_CFLAGS="$CFLAGS"
4042 ac_save_LIBS="$LIBS"
4043 CFLAGS="$CFLAGS $GTK_CFLAGS"
4044 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004045 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004046 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004047 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004048 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4049 AC_MSG_RESULT(no))
4050 CFLAGS="$ac_save_CFLAGS"
4051 LIBS="$ac_save_LIBS"
4052fi
4053
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004054AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004055AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004056 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004057 [enable_gpm="yes"])
4058
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004059if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4060 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004061 dnl Checking if gpm support can be compiled
4062 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4063 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004064 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004065 [#include <gpm.h>
4066 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004067 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004068 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4069 dnl FEAT_MOUSE_GPM if mouse support is included
4070 [vi_cv_have_gpm=yes],
4071 [vi_cv_have_gpm=no])
4072 [LIBS="$olibs"]
4073 )
4074 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004075 if test "$enable_gpm" = "yes"; then
4076 LIBS="$LIBS -lgpm"
4077 else
4078 AC_DEFINE(DYNAMIC_GPM)
4079 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004080 AC_DEFINE(HAVE_GPM)
4081 fi
4082else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004083 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004084fi
4085
Bram Moolenaar446cb832008-06-24 21:56:24 +00004086AC_MSG_CHECKING(--disable-sysmouse argument)
4087AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004088 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004089 [enable_sysmouse="yes"])
4090
4091if test "$enable_sysmouse" = "yes"; then
4092 AC_MSG_RESULT(no)
4093 dnl Checking if sysmouse support can be compiled
4094 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4095 dnl defines FEAT_SYSMOUSE if mouse support is included
4096 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004097 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004098 [#include <sys/consio.h>
4099 #include <signal.h>
4100 #include <sys/fbio.h>],
4101 [struct mouse_info mouse;
4102 mouse.operation = MOUSE_MODE;
4103 mouse.operation = MOUSE_SHOW;
4104 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004105 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004106 [vi_cv_have_sysmouse=yes],
4107 [vi_cv_have_sysmouse=no])
4108 )
4109 if test $vi_cv_have_sysmouse = yes; then
4110 AC_DEFINE(HAVE_SYSMOUSE)
4111 fi
4112else
4113 AC_MSG_RESULT(yes)
4114fi
4115
Bram Moolenaarf05da212009-11-17 16:13:15 +00004116dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4117AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004118AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004119[#if HAVE_FCNTL_H
4120# include <fcntl.h>
4121#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004122[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004123 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4124 AC_MSG_RESULT(not usable))
4125
Bram Moolenaar071d4272004-06-13 20:20:40 +00004126dnl rename needs to be checked separately to work on Nextstep with cc
4127AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004128AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004129 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4130 AC_MSG_RESULT(no))
4131
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004132dnl check for dirfd()
4133AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004134AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004135[#include <sys/types.h>
4136#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004137[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004138AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4139
4140dnl check for flock()
4141AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004142AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004143[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004144[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004145AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4146
Bram Moolenaar071d4272004-06-13 20:20:40 +00004147dnl sysctl() may exist but not the arguments we use
4148AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004149AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004150[#include <sys/types.h>
4151#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004152[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004153 size_t len;
4154
4155 mib[0] = CTL_HW;
4156 mib[1] = HW_USERMEM;
4157 len = sizeof(r);
4158 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004159 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004160 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4161 AC_MSG_RESULT(not usable))
4162
Bram Moolenaare2982d62021-10-06 11:27:21 +01004163dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004164dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004165AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004166AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004167[#include <sys/types.h>
4168#include <sys/sysinfo.h>],
4169[ struct sysinfo sinfo;
4170 int t;
4171
4172 (void)sysinfo(&sinfo);
4173 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004174 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004175 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4176 AC_MSG_RESULT(not usable))
4177
Bram Moolenaar914572a2007-05-01 11:37:47 +00004178dnl struct sysinfo may have the mem_unit field or not
4179AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004180AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004181[#include <sys/types.h>
4182#include <sys/sysinfo.h>],
4183[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004184 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004185 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004186 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4187 AC_MSG_RESULT(no))
4188
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004189dnl struct sysinfo may have the uptime field or not
4190AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004191AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004192[#include <sys/types.h>
4193#include <sys/sysinfo.h>],
4194[ struct sysinfo sinfo;
4195 long ut;
4196
4197 (void)sysinfo(&sinfo);
4198 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004199 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004200 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4201 AC_MSG_RESULT(no))
4202
Bram Moolenaar071d4272004-06-13 20:20:40 +00004203dnl sysconf() may exist but not support what we want to use
4204AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004205AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004206[#include <unistd.h>],
4207[ (void)sysconf(_SC_PAGESIZE);
4208 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004209 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004210 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4211 AC_MSG_RESULT(not usable))
4212
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004213dnl check if we have _SC_SIGSTKSZ via sysconf()
4214AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004215AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004216[#include <unistd.h>],
4217[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004218 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004219 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4220 AC_MSG_RESULT(not usable))
4221
Bram Moolenaar914703b2010-05-31 21:59:46 +02004222AC_CHECK_SIZEOF([int])
4223AC_CHECK_SIZEOF([long])
4224AC_CHECK_SIZEOF([time_t])
4225AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004226
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004227dnl Use different names to avoid clashing with other header files.
4228AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4229AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4230
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004231dnl Make sure that uint32_t is really 32 bits unsigned.
4232AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004233AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004234#ifdef HAVE_STDINT_H
4235# include <stdint.h>
4236#endif
4237#ifdef HAVE_INTTYPES_H
4238# include <inttypes.h>
4239#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004240int main() {
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004241 uint32_t nr1 = (uint32_t)-1;
4242 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004243 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4244 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004245}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004246AC_MSG_RESULT(ok),
4247AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004248AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004249
Bram Moolenaar446cb832008-06-24 21:56:24 +00004250dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4251dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4252
Bram Moolenaar071d4272004-06-13 20:20:40 +00004253[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004254#include "confdefs.h"
4255#ifdef HAVE_STRING_H
4256# include <string.h>
4257#endif
4258#if STDC_HEADERS
4259# include <stdlib.h>
4260# include <stddef.h>
4261#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004262int main() {
Bram Moolenaar071d4272004-06-13 20:20:40 +00004263 char buf[10];
4264 strcpy(buf, "abcdefghi");
4265 mch_memmove(buf, buf + 2, 3);
4266 if (strncmp(buf, "ababcf", 6))
4267 exit(1);
4268 strcpy(buf, "abcdefghi");
4269 mch_memmove(buf + 2, buf, 3);
4270 if (strncmp(buf, "cdedef", 6))
4271 exit(1);
4272 exit(0); /* libc version works properly. */
4273}']
4274
Bram Moolenaar446cb832008-06-24 21:56:24 +00004275AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4276 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004277 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 +00004278 [
4279 vim_cv_memmove_handles_overlap=yes
4280 ],[
4281 vim_cv_memmove_handles_overlap=no
4282 ],[
4283 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4284 ])
4285 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004286
Bram Moolenaar446cb832008-06-24 21:56:24 +00004287if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4288 AC_DEFINE(USEMEMMOVE)
4289else
4290 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4291 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004292 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 +00004293 [
4294 vim_cv_bcopy_handles_overlap=yes
4295 ],[
4296 vim_cv_bcopy_handles_overlap=no
4297 ],[
4298 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4299 ])
4300 ])
4301
4302 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4303 AC_DEFINE(USEBCOPY)
4304 else
4305 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4306 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004307 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 +00004308 [
4309 vim_cv_memcpy_handles_overlap=yes
4310 ],[
4311 vim_cv_memcpy_handles_overlap=no
4312 ],[
4313 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4314 ])
4315 ])
4316
4317 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4318 AC_DEFINE(USEMEMCPY)
4319 fi
4320 fi
4321fi
4322
Bram Moolenaar071d4272004-06-13 20:20:40 +00004323
4324dnl Check for multibyte locale functions
4325dnl Find out if _Xsetlocale() is supported by libX11.
4326dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004327if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004328 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004329 libs_save=$LIBS
4330 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4331 CFLAGS="$CFLAGS $X_CFLAGS"
4332
4333 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004334 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4335 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004336 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4337 AC_MSG_RESULT(no))
4338
4339 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004340 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004341 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4342
Bram Moolenaar071d4272004-06-13 20:20:40 +00004343 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004344 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004345fi
4346
4347dnl Link with xpg4, it is said to make Korean locale working
4348AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4349
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004350dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004351dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004352dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004353dnl -t for typedefs (many ctags have this)
4354dnl -s for static functions (Elvis ctags only?)
4355dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4356dnl -i+m to test for older Exuberant ctags
4357AC_MSG_CHECKING(how to create tags)
4358test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004359if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004360 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004361elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004362 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004363elif (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 +01004364 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004365else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004366 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004367 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4368 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4369 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4370 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4371 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4372 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4373 (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 +00004374fi
4375test -f tags.save && mv tags.save tags
4376AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4377
4378dnl Check how we can run man with a section number
4379AC_MSG_CHECKING(how to run man with a section nr)
4380MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004381(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 +00004382AC_MSG_RESULT($MANDEF)
4383if test "$MANDEF" = "man -s"; then
4384 AC_DEFINE(USEMAN_S)
4385fi
4386
4387dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004388dnl We take care to base this on an empty LIBS: on some systems libelf would be
4389dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4390dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004391AC_MSG_CHECKING(--disable-nls argument)
4392AC_ARG_ENABLE(nls,
4393 [ --disable-nls Don't support NLS (gettext()).], ,
4394 [enable_nls="yes"])
4395
4396if test "$enable_nls" = "yes"; then
4397 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004398
4399 INSTALL_LANGS=install-languages
4400 AC_SUBST(INSTALL_LANGS)
4401 INSTALL_TOOL_LANGS=install-tool-languages
4402 AC_SUBST(INSTALL_TOOL_LANGS)
4403
Bram Moolenaar071d4272004-06-13 20:20:40 +00004404 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4405 AC_MSG_CHECKING([for NLS])
4406 if test -f po/Makefile; then
4407 have_gettext="no"
4408 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004409 olibs=$LIBS
4410 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004411 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004412 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004413 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004414 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4415 LIBS="-lintl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004416 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004417 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004418 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004419 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4420 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004421 AC_MSG_RESULT([gettext() doesn't work]);
4422 LIBS=$olibs))
4423 else
4424 AC_MSG_RESULT([msgfmt not found - disabled]);
4425 fi
Martin Tournoij7904fa42022-10-04 16:28:45 +01004426 if test $have_gettext = "yes" -a "x$features" != "xtiny"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004427 AC_DEFINE(HAVE_GETTEXT)
4428 MAKEMO=yes
4429 AC_SUBST(MAKEMO)
4430 dnl this was added in GNU gettext 0.10.36
4431 AC_CHECK_FUNCS(bind_textdomain_codeset)
4432 dnl _nl_msg_cat_cntr is required for GNU gettext
4433 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004434 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004435 [#include <libintl.h>
4436 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004437 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004438 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4439 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004440 AC_MSG_CHECKING([if msgfmt supports --desktop])
4441 MSGFMT_DESKTOP=
4442 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004443 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4444 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4445 dnl 0.19.3 is also broken.
4446 AC_MSG_RESULT([broken])
4447 else
4448 AC_MSG_RESULT([yes])
4449 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4450 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004451 else
4452 AC_MSG_RESULT([no])
4453 fi
4454 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004455 fi
4456 else
4457 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4458 fi
4459else
4460 AC_MSG_RESULT(yes)
4461fi
4462
4463dnl Check for dynamic linking loader
4464AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4465if test x${DLL} = xdlfcn.h; then
4466 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4467 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004468 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004469 extern void* dlopen();
4470 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004471 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004472 AC_MSG_RESULT(yes);
4473 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4474 AC_MSG_RESULT(no);
4475 AC_MSG_CHECKING([for dlopen() in -ldl])
4476 olibs=$LIBS
4477 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004478 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004479 extern void* dlopen();
4480 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004481 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004482 AC_MSG_RESULT(yes);
4483 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4484 AC_MSG_RESULT(no);
4485 LIBS=$olibs))
4486 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4487 dnl ick :-)
4488 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004489 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004490 extern void* dlsym();
4491 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004492 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004493 AC_MSG_RESULT(yes);
4494 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4495 AC_MSG_RESULT(no);
4496 AC_MSG_CHECKING([for dlsym() in -ldl])
4497 olibs=$LIBS
4498 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004499 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004500 extern void* dlsym();
4501 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004502 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004503 AC_MSG_RESULT(yes);
4504 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4505 AC_MSG_RESULT(no);
4506 LIBS=$olibs))
4507elif test x${DLL} = xdl.h; then
4508 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4509 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004510 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004511 extern void* shl_load();
4512 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004513 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004514 AC_MSG_RESULT(yes);
4515 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4516 AC_MSG_RESULT(no);
4517 AC_MSG_CHECKING([for shl_load() in -ldld])
4518 olibs=$LIBS
4519 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004520 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004521 extern void* shl_load();
4522 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004523 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004524 AC_MSG_RESULT(yes);
4525 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4526 AC_MSG_RESULT(no);
4527 LIBS=$olibs))
4528fi
4529AC_CHECK_HEADERS(setjmp.h)
4530
Bram Moolenaard0573012017-10-28 21:11:06 +02004531if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004532 dnl -ldl must come after DynaLoader.a
4533 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4534 LIBS=`echo $LIBS | sed s/-ldl//`
4535 PERL_LIBS="$PERL_LIBS -ldl"
4536 fi
4537fi
4538
Bram Moolenaard0573012017-10-28 21:11:06 +02004539if test "$MACOS_X" = "yes"; then
4540 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004541 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004542 if test "$features" = "tiny"; then
Yee Cheng Chin4314e4f2022-10-08 13:50:05 +01004543 dnl Since no FEAT_CLIPBOARD or FEAT_SOUND, no need for os_macosx.m.
Bram Moolenaard0573012017-10-28 21:11:06 +02004544 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4545 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004546 AC_MSG_RESULT([yes, we need CoreServices])
4547 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004548 else
4549 AC_MSG_RESULT([yes, we need AppKit])
4550 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004551 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004552 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004553 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004554 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004555fi
4556
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004557dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4558dnl it everywhere.
4559if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4560 CFLAGS="$CFLAGS -D_REENTRANT"
4561fi
4562
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004563dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4564dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4565dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004566dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4567dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004568DEPEND_CFLAGS_FILTER=
4569if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004570 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004571 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004572 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004573 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004574 AC_MSG_RESULT(yes)
4575 else
4576 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004577 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004578 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4579 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004580 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004581 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004582 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4583 if test "$gccmajor" -gt "3"; then
Zdenek Dohnal42196982023-01-18 16:09:51 +00004584 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/ *-Wp,-U_FORTIFY_SOURCE/ /g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
4585 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/ *-Wp,-U_FORTIFY_SOURCE/ /g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004586 AC_MSG_RESULT(yes)
4587 else
4588 AC_MSG_RESULT(no)
4589 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004590fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004591AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004592
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004593dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4594dnl isn't required, but the CFLAGS for some of the libraries we're using
4595dnl include the define. Since the define changes the size of some datatypes
4596dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4597dnl consistent value. It's therefore safest to force the use of the define
4598dnl if it's present in any of the *_CFLAGS variables.
4599AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004600if 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 +01004601 AC_MSG_RESULT(yes)
4602 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4603else
4604 AC_MSG_RESULT(no)
4605fi
4606
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004607dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4608dnl between "-L" and the path that follows.
4609LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4610
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004611dnl link.sh tries to avoid overlinking in a hackish way.
4612dnl At least GNU ld supports --as-needed which provides the same functionality
4613dnl at linker level. Let's use it.
4614AC_MSG_CHECKING(linker --as-needed support)
4615LINK_AS_NEEDED=
4616# Check if linker supports --as-needed and --no-as-needed options
4617if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004618 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4619 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4620 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004621 LINK_AS_NEEDED=yes
4622fi
4623if test "$LINK_AS_NEEDED" = yes; then
4624 AC_MSG_RESULT(yes)
4625else
4626 AC_MSG_RESULT(no)
4627fi
4628AC_SUBST(LINK_AS_NEEDED)
4629
Bram Moolenaar77c19352012-06-13 19:19:41 +02004630# IBM z/OS reset CFLAGS for config.mk
4631if test "$zOSUnix" = "yes"; then
4632 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4633fi
4634
Bram Moolenaar071d4272004-06-13 20:20:40 +00004635dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004636AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4637AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004638
4639dnl vim: set sw=2 tw=78 fo+=l: