blob: d56001f9b5cd8ab3055781feb33114f720601f07 [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
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002419 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2420 AC_CACHE_VAL(ac_cv_small_wchar_t,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002421 [AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002422#include <X11/Xlib.h>
2423#if STDC_HEADERS
2424# include <stdlib.h>
2425# include <stddef.h>
2426#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01002427 int main()
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002428 {
2429 if (sizeof(wchar_t) <= 2)
2430 exit(1);
2431 exit(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002432 }])],
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002433 ac_cv_small_wchar_t="no",
2434 ac_cv_small_wchar_t="yes",
2435 AC_MSG_ERROR(failed to compile test program))])
2436 AC_MSG_RESULT($ac_cv_small_wchar_t)
2437 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2438 AC_DEFINE(SMALL_WCHAR_T)
2439 fi
2440
Bram Moolenaar071d4272004-06-13 20:20:40 +00002441 fi
2442fi
2443
Bram Moolenaard2a05492018-07-27 22:35:15 +02002444dnl Check if --with-x was given but it doesn't work.
2445if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2446 AC_MSG_ERROR([could not configure X])
2447fi
2448
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002449test "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 +00002450
2451AC_MSG_CHECKING(--enable-gui argument)
2452AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002453 [ --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 +00002454
2455dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2456dnl Do not use character classes for portability with old tools.
2457enable_gui_canon=`echo "_$enable_gui" | \
2458 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2459
2460dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002461SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002462SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463SKIP_GNOME=YES
2464SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002465SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002466SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002467GUITYPE=NONE
2468
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002469if test "x$HAIKU" = "xyes"; then
2470 SKIP_HAIKU=
2471 case "$enable_gui_canon" in
2472 no) AC_MSG_RESULT(no GUI support)
2473 SKIP_HAIKU=YES ;;
2474 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2475 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2476 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2477 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2478 SKIP_HAIKU=YES ;;
2479 esac
2480elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002481 SKIP_PHOTON=
2482 case "$enable_gui_canon" in
2483 no) AC_MSG_RESULT(no GUI support)
2484 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002485 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2486 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002487 photon) AC_MSG_RESULT(Photon GUI support) ;;
2488 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2489 SKIP_PHOTON=YES ;;
2490 esac
2491
Bram Moolenaar040f9752020-08-11 23:08:48 +02002492elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2493 case "$enable_gui_canon" in
2494 no) AC_MSG_RESULT(no GUI support) ;;
2495 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2496 gui_auto=yes ;;
2497 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002498 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002499 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002500else
2501
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502 case "$enable_gui_canon" in
2503 no|none) AC_MSG_RESULT(no GUI support) ;;
2504 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002505 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002506 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002507 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002508 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002509 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002510 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002511 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002512 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2513 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002514 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002515 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2516 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002517 motif) AC_MSG_RESULT(Motif GUI support)
2518 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002519 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2520 esac
2521
2522fi
2523
Bram Moolenaar071d4272004-06-13 20:20:40 +00002524if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2525 -a "$enable_gui_canon" != "gnome2"; then
2526 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2527 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002528 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002529 , enable_gtk2_check="yes")
2530 AC_MSG_RESULT($enable_gtk2_check)
2531 if test "x$enable_gtk2_check" = "xno"; then
2532 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002533 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002534 fi
2535fi
2536
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002537if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002538 AC_MSG_CHECKING(whether or not to look for GNOME)
2539 AC_ARG_ENABLE(gnome-check,
2540 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2541 , enable_gnome_check="no")
2542 AC_MSG_RESULT($enable_gnome_check)
2543 if test "x$enable_gnome_check" = "xno"; then
2544 SKIP_GNOME=YES
2545 fi
2546fi
2547
Bram Moolenaar98921892016-02-23 17:14:37 +01002548if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2549 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2550 AC_ARG_ENABLE(gtk3-check,
2551 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2552 , enable_gtk3_check="yes")
2553 AC_MSG_RESULT($enable_gtk3_check)
2554 if test "x$enable_gtk3_check" = "xno"; then
2555 SKIP_GTK3=YES
2556 fi
2557fi
2558
Bram Moolenaar071d4272004-06-13 20:20:40 +00002559if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2560 AC_MSG_CHECKING(whether or not to look for Motif)
2561 AC_ARG_ENABLE(motif-check,
2562 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2563 , enable_motif_check="yes")
2564 AC_MSG_RESULT($enable_motif_check)
2565 if test "x$enable_motif_check" = "xno"; then
2566 SKIP_MOTIF=YES
2567 fi
2568fi
2569
Bram Moolenaar071d4272004-06-13 20:20:40 +00002570dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002571dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002572dnl
2573dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002574dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002575dnl
2576AC_DEFUN(AM_PATH_GTK,
2577[
2578 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2579 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002580 no_gtk=""
2581 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2582 && $PKG_CONFIG --exists gtk+-2.0; then
2583 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002584 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2585 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002586 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2587 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2588 dnl something like that.
2589 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002590 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002591 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2592 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2593 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2594 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2595 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2596 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2597 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2598 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002599 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2600 && $PKG_CONFIG --exists gtk+-3.0; then
2601 {
2602 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2603 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2604
2605 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2606 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2607 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2608 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2609 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2610 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2611 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2612 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2613 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2614 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002615 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002616 dnl Put some text before the "no" to hint at installing the gtk-dev
2617 dnl packages.
2618 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002619 no_gtk=yes
2620 fi
2621
2622 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2623 {
2624 ac_save_CFLAGS="$CFLAGS"
2625 ac_save_LIBS="$LIBS"
2626 CFLAGS="$CFLAGS $GTK_CFLAGS"
2627 LIBS="$LIBS $GTK_LIBS"
2628
2629 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002630 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002631 dnl
2632 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002633 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002634#include <gtk/gtk.h>
2635#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002636#if STDC_HEADERS
2637# include <stdlib.h>
2638# include <stddef.h>
2639#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002640
2641int
2642main ()
2643{
2644int major, minor, micro;
2645char *tmp_version;
2646
2647system ("touch conf.gtktest");
2648
2649/* HP/UX 9 (%@#!) writes to sscanf strings */
2650tmp_version = g_strdup("$min_gtk_version");
2651if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2652 printf("%s, bad version string\n", "$min_gtk_version");
2653 exit(1);
2654 }
2655
2656if ((gtk_major_version > major) ||
2657 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2658 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2659 (gtk_micro_version >= micro)))
2660{
2661 return 0;
2662}
2663return 1;
2664}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002665])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002666 CFLAGS="$ac_save_CFLAGS"
2667 LIBS="$ac_save_LIBS"
2668 }
2669 fi
2670 if test "x$no_gtk" = x ; then
2671 if test "x$enable_gtktest" = "xyes"; then
2672 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2673 else
2674 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2675 fi
2676 ifelse([$2], , :, [$2])
2677 else
2678 {
2679 AC_MSG_RESULT(no)
2680 GTK_CFLAGS=""
2681 GTK_LIBS=""
2682 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002683 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2684 AC_MSG_ERROR([could not configure GTK])
2685 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002686 }
2687 fi
2688 }
2689 else
2690 GTK_CFLAGS=""
2691 GTK_LIBS=""
2692 ifelse([$3], , :, [$3])
2693 fi
2694 AC_SUBST(GTK_CFLAGS)
2695 AC_SUBST(GTK_LIBS)
2696 rm -f conf.gtktest
2697])
2698
2699dnl ---------------------------------------------------------------------------
2700dnl gnome
2701dnl ---------------------------------------------------------------------------
2702AC_DEFUN([GNOME_INIT_HOOK],
2703[
2704 AC_SUBST(GNOME_LIBS)
2705 AC_SUBST(GNOME_LIBDIR)
2706 AC_SUBST(GNOME_INCLUDEDIR)
2707
2708 AC_ARG_WITH(gnome-includes,
2709 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2710 [CFLAGS="$CFLAGS -I$withval"]
2711 )
2712
2713 AC_ARG_WITH(gnome-libs,
2714 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2715 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2716 )
2717
2718 AC_ARG_WITH(gnome,
2719 [ --with-gnome Specify prefix for GNOME files],
2720 if test x$withval = xyes; then
2721 want_gnome=yes
2722 ifelse([$1], [], :, [$1])
2723 else
2724 if test "x$withval" = xno; then
2725 want_gnome=no
2726 else
2727 want_gnome=yes
2728 LDFLAGS="$LDFLAGS -L$withval/lib"
2729 CFLAGS="$CFLAGS -I$withval/include"
2730 gnome_prefix=$withval/lib
2731 fi
2732 fi,
2733 want_gnome=yes)
2734
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002735 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002736 {
2737 AC_MSG_CHECKING(for libgnomeui-2.0)
2738 if $PKG_CONFIG --exists libgnomeui-2.0; then
2739 AC_MSG_RESULT(yes)
2740 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2741 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2742 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002743
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002744 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2745 dnl This might not be the right way but it works for me...
2746 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002747 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002748 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002749 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002750 GNOME_LIBS="$GNOME_LIBS -pthread"
2751 else
2752 AC_MSG_RESULT(no)
2753 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002754 $1
2755 else
2756 AC_MSG_RESULT(not found)
2757 if test "x$2" = xfail; then
2758 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2759 fi
2760 fi
2761 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002762 fi
2763])
2764
2765AC_DEFUN([GNOME_INIT],[
2766 GNOME_INIT_HOOK([],fail)
2767])
2768
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002769if test "X$PKG_CONFIG" = "X"; then
2770 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2771fi
2772
Bram Moolenaar071d4272004-06-13 20:20:40 +00002773
2774dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002775dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002776dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002777if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002778
2779 AC_MSG_CHECKING(--disable-gtktest argument)
2780 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2781 , enable_gtktest=yes)
2782 if test "x$enable_gtktest" = "xyes" ; then
2783 AC_MSG_RESULT(gtk test enabled)
2784 else
2785 AC_MSG_RESULT(gtk test disabled)
2786 fi
2787
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002788 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002789 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2790 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002791 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2792 dnl found.
2793 save_skip_gtk3=$SKIP_GTK3
2794 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002795 AM_PATH_GTK(2.2.0,
2796 [GUI_LIB_LOC="$GTK_LIBDIR"
2797 GTK_LIBNAME="$GTK_LIBS"
2798 GUI_INC_LOC="$GTK_CFLAGS"], )
2799 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002800 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002801 SKIP_MOTIF=YES
2802 GUITYPE=GTK
2803 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002804 else
2805 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002806 fi
2807 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002808 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002809 dnl
2810 dnl if GTK exists, then check for GNOME.
2811 dnl
2812 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002813 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002814 GNOME_INIT_HOOK([have_gnome=yes])
2815 if test "x$have_gnome" = xyes ; then
2816 AC_DEFINE(FEAT_GUI_GNOME)
2817 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2818 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002819 fi
2820 }
2821 fi
2822 fi
2823fi
2824
Bram Moolenaar98921892016-02-23 17:14:37 +01002825
2826dnl ---------------------------------------------------------------------------
2827dnl Check for GTK3.
2828dnl ---------------------------------------------------------------------------
2829if test -z "$SKIP_GTK3"; then
2830
2831 AC_MSG_CHECKING(--disable-gtktest argument)
2832 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2833 , enable_gtktest=yes)
2834 if test "x$enable_gtktest" = "xyes" ; then
2835 AC_MSG_RESULT(gtk test enabled)
2836 else
2837 AC_MSG_RESULT(gtk test disabled)
2838 fi
2839
Bram Moolenaar98921892016-02-23 17:14:37 +01002840 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002841 save_skip_gtk2=$SKIP_GTK2
2842 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002843 AM_PATH_GTK(3.0.0,
2844 [GUI_LIB_LOC="$GTK_LIBDIR"
2845 GTK_LIBNAME="$GTK_LIBS"
2846 GUI_INC_LOC="$GTK_CFLAGS"], )
2847 if test "x$GTK_CFLAGS" != "x"; then
2848 SKIP_GTK2=YES
2849 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002850 SKIP_MOTIF=YES
2851 GUITYPE=GTK
2852 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002853 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002854 else
2855 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002856 fi
2857 fi
2858fi
2859
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002860dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002861dnl glib-compile-resources is found in PATH, use GResource.
2862if test "x$GUITYPE" = "xGTK"; then
2863 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2864 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2865 if test "x$gdk_pixbuf_version" != x ; then
2866 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2867 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2868 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002869 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002870 AC_MSG_RESULT([OK.])
2871 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2872 AC_MSG_CHECKING([glib-compile-resources])
2873 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002874 GLIB_COMPILE_RESOURCES=""
2875 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002876 else
2877 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002878 AC_DEFINE(USE_GRESOURCE)
2879 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2880 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002881 fi
2882 else
2883 AC_MSG_RESULT([not usable.])
2884 fi
2885 else
2886 AC_MSG_RESULT([cannot obtain from pkg_config.])
2887 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002888
2889 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2890 AC_ARG_ENABLE(icon_cache_update,
2891 [ --disable-icon-cache-update update disabled],
2892 [],
2893 [enable_icon_cache_update="yes"])
2894 if test "$enable_icon_cache_update" = "yes"; then
2895 AC_MSG_RESULT([not set])
2896 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2897 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2898 AC_MSG_RESULT([not found in PATH.])
2899 fi
2900 else
2901 AC_MSG_RESULT([update disabled])
2902 fi
2903
2904 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2905 AC_ARG_ENABLE(desktop_database_update,
2906 [ --disable-desktop-database-update update disabled],
2907 [],
2908 [enable_desktop_database_update="yes"])
2909 if test "$enable_desktop_database_update" = "yes"; then
2910 AC_MSG_RESULT([not set])
2911 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2912 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2913 AC_MSG_RESULT([not found in PATH.])
2914 fi
2915 else
2916 AC_MSG_RESULT([update disabled])
2917 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002918fi
2919AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002920AC_SUBST(GRESOURCE_SRC)
2921AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002922AC_SUBST(GTK_UPDATE_ICON_CACHE)
2923AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002924
Bram Moolenaar071d4272004-06-13 20:20:40 +00002925dnl Check for Motif include files location.
2926dnl The LAST one found is used, this makes the highest version to be used,
2927dnl e.g. when Motif1.2 and Motif2.0 are both present.
2928
2929if test -z "$SKIP_MOTIF"; then
2930 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"
2931 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2932 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2933
2934 AC_MSG_CHECKING(for location of Motif GUI includes)
2935 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2936 GUI_INC_LOC=
2937 for try in $gui_includes; do
2938 if test -f "$try/Xm/Xm.h"; then
2939 GUI_INC_LOC=$try
2940 fi
2941 done
2942 if test -n "$GUI_INC_LOC"; then
2943 if test "$GUI_INC_LOC" = /usr/include; then
2944 GUI_INC_LOC=
2945 AC_MSG_RESULT(in default path)
2946 else
2947 AC_MSG_RESULT($GUI_INC_LOC)
2948 fi
2949 else
2950 AC_MSG_RESULT(<not found>)
2951 SKIP_MOTIF=YES
2952 fi
2953fi
2954
2955dnl Check for Motif library files location. In the same order as the include
2956dnl files, to avoid a mixup if several versions are present
2957
2958if test -z "$SKIP_MOTIF"; then
2959 AC_MSG_CHECKING(--with-motif-lib argument)
2960 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002961 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002962 [ MOTIF_LIBNAME="${withval}" ] )
2963
2964 if test -n "$MOTIF_LIBNAME"; then
2965 AC_MSG_RESULT($MOTIF_LIBNAME)
2966 GUI_LIB_LOC=
2967 else
2968 AC_MSG_RESULT(no)
2969
2970 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2971 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2972
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002973 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2974 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01002975 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar01967f52023-04-12 16:24:03 +01002976 dnl OpenSUSE appears to use /usr/lib64.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002977 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar01967f52023-04-12 16:24:03 +01002978 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 +00002979 GUI_LIB_LOC=
2980 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01002981 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 +00002982 if test -f "$libtry"; then
2983 GUI_LIB_LOC=$try
2984 fi
2985 done
2986 done
2987 if test -n "$GUI_LIB_LOC"; then
Bram Moolenaar01967f52023-04-12 16:24:03 +01002988 dnl Remove /usr/lib, it causes trouble on some systems.
2989 dnl For consistency also remove other standard lib directories.
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002990 if test "$GUI_LIB_LOC" = /usr/lib \
Bram Moolenaar01967f52023-04-12 16:24:03 +01002991 -o "$GUI_LIB_LOC" = /usr/lib64 \
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002992 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2993 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002994 GUI_LIB_LOC=
2995 AC_MSG_RESULT(in default path)
2996 else
2997 if test -n "$GUI_LIB_LOC"; then
2998 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002999 if test "$vim_cv_uname_output" = SunOS &&
3000 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003001 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
3002 fi
3003 fi
3004 fi
3005 MOTIF_LIBNAME=-lXm
3006 else
3007 AC_MSG_RESULT(<not found>)
3008 SKIP_MOTIF=YES
3009 fi
3010 fi
3011fi
3012
3013if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003014 GUITYPE=MOTIF
3015 AC_SUBST(MOTIF_LIBNAME)
3016fi
3017
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003018if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003019 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3020 dnl Avoid adding it when it twice
3021 if test -n "$GUI_INC_LOC"; then
3022 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3023 fi
3024 if test -n "$GUI_LIB_LOC"; then
3025 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3026 fi
3027
3028 dnl Check for -lXext and then for -lXmu
3029 ldflags_save=$LDFLAGS
3030 LDFLAGS="$X_LIBS $LDFLAGS"
3031 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3032 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3033 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3034 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3035 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3036 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3037 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3038 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3039 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3040 if test -z "$SKIP_MOTIF"; then
3041 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3042 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3043 fi
3044 LDFLAGS=$ldflags_save
3045
3046 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3047 AC_MSG_CHECKING(for extra X11 defines)
3048 NARROW_PROTO=
3049 rm -fr conftestdir
3050 if mkdir conftestdir; then
3051 cd conftestdir
3052 cat > Imakefile <<'EOF'
3053acfindx:
3054 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3055EOF
3056 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3057 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3058 fi
3059 cd ..
3060 rm -fr conftestdir
3061 fi
3062 if test -z "$NARROW_PROTO"; then
3063 AC_MSG_RESULT(no)
3064 else
3065 AC_MSG_RESULT($NARROW_PROTO)
3066 fi
3067 AC_SUBST(NARROW_PROTO)
3068fi
3069
3070dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3071dnl use the X11 include path
3072if test "$enable_xsmp" = "yes"; then
3073 cppflags_save=$CPPFLAGS
3074 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3075 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3076 CPPFLAGS=$cppflags_save
3077fi
3078
3079
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003080if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003081 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3082 cppflags_save=$CPPFLAGS
3083 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3084 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3085
3086 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3087 if test ! "$enable_xim" = "no"; then
3088 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3089 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3090 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003091 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003092 fi
3093 CPPFLAGS=$cppflags_save
3094
Bram Moolenaar54612582019-11-21 17:13:31 +01003095 dnl automatically enable XIM in the GUI
3096 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003097 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3098 enable_xim="yes"
3099 fi
3100fi
3101
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003102if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003103 cppflags_save=$CPPFLAGS
3104 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003105dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3106 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003107 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003108#include <X11/Intrinsic.h>
3109#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003110 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003111 AC_MSG_RESULT(yes)
3112 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3113 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003114 CPPFLAGS=$cppflags_save
3115fi
3116
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003117dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003118if test -z "$SKIP_MOTIF"; then
3119 cppflags_save=$CPPFLAGS
3120 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003121 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003122 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003123 else
Bram Moolenaarde1d7342022-06-05 20:03:17 +01003124 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 +01003125 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003126
Bram Moolenaar77c19352012-06-13 19:19:41 +02003127 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003128 dnl Solaris uses XpmAttributes_21, very annoying.
3129 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003130 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003131 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3132 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3133 )
3134 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003135 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003136 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003137 CPPFLAGS=$cppflags_save
3138fi
3139
3140if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3141 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3142 enable_xim="no"
3143fi
3144if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3145 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3146 enable_fontset="no"
3147fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003148if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003149 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3150 enable_fontset="no"
3151fi
3152
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003153dnl There is no test for the Haiku GUI, if it's selected it's used
3154if test -z "$SKIP_HAIKU"; then
3155 GUITYPE=HAIKUGUI
3156fi
3157
Bram Moolenaar071d4272004-06-13 20:20:40 +00003158if test -z "$SKIP_PHOTON"; then
3159 GUITYPE=PHOTONGUI
3160fi
3161
3162AC_SUBST(GUI_INC_LOC)
3163AC_SUBST(GUI_LIB_LOC)
3164AC_SUBST(GUITYPE)
3165AC_SUBST(GUI_X_LIBS)
3166
3167if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3168 AC_MSG_ERROR([cannot use workshop without Motif])
3169fi
3170
3171dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3172if test "$enable_xim" = "yes"; then
3173 AC_DEFINE(FEAT_XIM)
3174fi
3175if test "$enable_fontset" = "yes"; then
3176 AC_DEFINE(FEAT_XFONTSET)
3177fi
3178
3179
3180dnl ---------------------------------------------------------------------------
3181dnl end of GUI-checking
3182dnl ---------------------------------------------------------------------------
3183
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003184AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003185if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003186 dnl Linux
3187 AC_MSG_RESULT([/proc/self/exe])
3188 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3189elif test -L "/proc/self/path/a.out"; then
3190 dnl Solaris
3191 AC_MSG_RESULT([/proc/self/path/a.out])
3192 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3193elif test -L "/proc/curproc/file"; then
3194 dnl FreeBSD
3195 AC_MSG_RESULT([/proc/curproc/file])
3196 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003197else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003198 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003199fi
3200
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003201dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003202AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003203case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003204 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003205 AC_MSG_CHECKING(for CYGWIN clipboard support)
3206 if test "x$with_x" = "xno" ; then
3207 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3208 AC_MSG_RESULT(yes)
3209 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3210 else
3211 AC_MSG_RESULT(no - using X11)
3212 fi ;;
3213
3214 *) CYGWIN=no; AC_MSG_RESULT(no);;
3215esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003216
Bram Moolenaar071d4272004-06-13 20:20:40 +00003217dnl Checks for libraries and include files.
3218
Bram Moolenaar446cb832008-06-24 21:56:24 +00003219AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3220 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003221 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003222#include "confdefs.h"
3223#include <ctype.h>
3224#if STDC_HEADERS
3225# include <stdlib.h>
3226# include <stddef.h>
3227#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003228int main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003229 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003230 vim_cv_toupper_broken=yes
3231 ],[
3232 vim_cv_toupper_broken=no
3233 ],[
3234 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3235 ])])
3236
3237if test "x$vim_cv_toupper_broken" = "xyes" ; then
3238 AC_DEFINE(BROKEN_TOUPPER)
3239fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003240
3241AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003242AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003243 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3244 AC_MSG_RESULT(no))
3245
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003246AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003247AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003248 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3249 AC_MSG_RESULT(no))
3250
Bram Moolenaar071d4272004-06-13 20:20:40 +00003251dnl Checks for header files.
3252AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3253dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3254if test "$HAS_ELF" = 1; then
3255 AC_CHECK_LIB(elf, main)
3256fi
3257
3258AC_HEADER_DIRENT
3259
Bram Moolenaar071d4272004-06-13 20:20:40 +00003260dnl If sys/wait.h is not found it might still exist but not be POSIX
3261dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3262if test $ac_cv_header_sys_wait_h = no; then
3263 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003264 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3265 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003266 AC_MSG_RESULT(yes)
3267 AC_DEFINE(HAVE_SYS_WAIT_H)
3268 AC_DEFINE(HAVE_UNION_WAIT),
3269 AC_MSG_RESULT(no))
3270fi
3271
Bram Moolenaar779a7752016-01-30 23:26:34 +01003272AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003273 sys/select.h sys/utsname.h termcap.h fcntl.h \
3274 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3275 termio.h iconv.h inttypes.h langinfo.h math.h \
3276 unistd.h stropts.h errno.h sys/resource.h \
3277 sys/systeminfo.h locale.h sys/stream.h termios.h \
3278 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003279 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003280 util/debug.h util/msg18n.h frame.h sys/acl.h \
3281 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003282
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003283dnl sys/ptem.h depends on sys/stream.h on Solaris
3284AC_CHECK_HEADERS(sys/ptem.h, [], [],
3285[#if defined HAVE_SYS_STREAM_H
3286# include <sys/stream.h>
3287#endif])
3288
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003289dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3290AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3291[#if defined HAVE_SYS_PARAM_H
3292# include <sys/param.h>
3293#endif])
3294
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003295
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003296dnl pthread_np.h may exist but can only be used after including pthread.h
3297AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003298AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003299#include <pthread.h>
3300#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003301 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003302 AC_MSG_RESULT(yes)
3303 AC_DEFINE(HAVE_PTHREAD_NP_H),
3304 AC_MSG_RESULT(no))
3305
Bram Moolenaare344bea2005-09-01 20:46:49 +00003306AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003307if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003308 dnl The strings.h file on OS/X contains a warning and nothing useful.
3309 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3310else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003311
3312dnl Check if strings.h and string.h can both be included when defined.
3313AC_MSG_CHECKING([if strings.h can be included after string.h])
3314cppflags_save=$CPPFLAGS
3315CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003316AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003317#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3318# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3319 /* but don't do it on AIX 5.1 (Uribarri) */
3320#endif
3321#ifdef HAVE_XM_XM_H
3322# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3323#endif
3324#ifdef HAVE_STRING_H
3325# include <string.h>
3326#endif
3327#if defined(HAVE_STRINGS_H)
3328# include <strings.h>
3329#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003330 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003331 AC_MSG_RESULT(yes),
3332 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3333 AC_MSG_RESULT(no))
3334CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003335fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003336
3337dnl Checks for typedefs, structures, and compiler characteristics.
3338AC_PROG_GCC_TRADITIONAL
3339AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003340AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003341AC_TYPE_MODE_T
3342AC_TYPE_OFF_T
3343AC_TYPE_PID_T
3344AC_TYPE_SIZE_T
3345AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003346AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003347
Bram Moolenaar071d4272004-06-13 20:20:40 +00003348AC_HEADER_TIME
3349AC_CHECK_TYPE(ino_t, long)
3350AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003351AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003352AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003353
3354AC_MSG_CHECKING(for rlim_t)
3355if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3356 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3357else
3358 AC_EGREP_CPP(dnl
3359changequote(<<,>>)dnl
3360<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3361changequote([,]),
3362 [
3363#include <sys/types.h>
3364#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003365# include <stdlib.h>
3366# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003367#endif
3368#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003369# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003370#endif
3371 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3372 AC_MSG_RESULT($ac_cv_type_rlim_t)
3373fi
3374if test $ac_cv_type_rlim_t = no; then
3375 cat >> confdefs.h <<\EOF
3376#define rlim_t unsigned long
3377EOF
3378fi
3379
3380AC_MSG_CHECKING(for stack_t)
3381if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3382 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3383else
3384 AC_EGREP_CPP(stack_t,
3385 [
3386#include <sys/types.h>
3387#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003388# include <stdlib.h>
3389# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003390#endif
3391#include <signal.h>
3392 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3393 AC_MSG_RESULT($ac_cv_type_stack_t)
3394fi
3395if test $ac_cv_type_stack_t = no; then
3396 cat >> confdefs.h <<\EOF
3397#define stack_t struct sigaltstack
3398EOF
3399fi
3400
3401dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3402AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003403AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003404#include <sys/types.h>
3405#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003406# include <stdlib.h>
3407# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003408#endif
3409#include <signal.h>
3410#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003411 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003412 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3413 AC_MSG_RESULT(no))
3414
3415olibs="$LIBS"
3416AC_MSG_CHECKING(--with-tlib argument)
3417AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3418if test -n "$with_tlib"; then
3419 AC_MSG_RESULT($with_tlib)
3420 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003421 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003422 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003423 dnl Need to check for tgetent() below.
3424 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003425else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003426 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003427 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3428 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003429 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003430 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003431 dnl Older versions of ncurses have bugs, get a new one!
3432 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003433 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003434 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003435 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3436 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003437 esac
3438 for libname in $tlibs; do
3439 AC_CHECK_LIB(${libname}, tgetent,,)
3440 if test "x$olibs" != "x$LIBS"; then
3441 dnl It's possible that a library is found but it doesn't work
3442 dnl e.g., shared library that cannot be found
3443 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003444 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003445#ifdef HAVE_TERMCAP_H
3446# include <termcap.h>
3447#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003448#if STDC_HEADERS
3449# include <stdlib.h>
3450# include <stddef.h>
3451#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003452int main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003453 res="OK", res="FAIL", res="FAIL")
3454 if test "$res" = "OK"; then
3455 break
3456 fi
3457 AC_MSG_RESULT($libname library is not usable)
3458 LIBS="$olibs"
3459 fi
3460 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003461 if test "x$olibs" = "x$LIBS"; then
3462 AC_MSG_RESULT(no terminal library found)
3463 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003464fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003465
3466if test "x$olibs" = "x$LIBS"; then
3467 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003468 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3469 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003470 AC_MSG_RESULT(yes),
3471 AC_MSG_ERROR([NOT FOUND!
3472 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003473 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003474 Or specify the name of the library with --with-tlib.]))
3475fi
3476
Bram Moolenaar446cb832008-06-24 21:56:24 +00003477AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3478 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003479 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003480#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003481#ifdef HAVE_TERMCAP_H
3482# include <termcap.h>
3483#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003484#ifdef HAVE_STRING_H
3485# include <string.h>
3486#endif
3487#if STDC_HEADERS
3488# include <stdlib.h>
3489# include <stddef.h>
3490#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003491int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003492{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003493 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003494 vim_cv_terminfo=no
3495 ],[
3496 vim_cv_terminfo=yes
3497 ],[
3498 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3499 ])
3500 ])
3501
3502if test "x$vim_cv_terminfo" = "xyes" ; then
3503 AC_DEFINE(TERMINFO)
3504fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003505
Bram Moolenaara88254f2017-11-02 23:04:14 +01003506AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003507 [
3508 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003509#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003510#ifdef HAVE_TERMCAP_H
3511# include <termcap.h>
3512#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003513#if STDC_HEADERS
3514# include <stdlib.h>
3515# include <stddef.h>
3516#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003517int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003518{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003519 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003520 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003521 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003522 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003523 ],[
3524 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003525 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003526 ])
3527
Bram Moolenaara88254f2017-11-02 23:04:14 +01003528if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003529 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003530fi
3531
3532AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003533AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003534#ifdef HAVE_TERMCAP_H
3535# include <termcap.h>
3536#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003537 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003538 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3539 [AC_MSG_RESULT(no)
3540 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003541 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003542#ifdef HAVE_TERMCAP_H
3543# include <termcap.h>
3544#endif
3545extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003546 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003547 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3548 AC_MSG_RESULT(no))]
3549 )
3550
3551AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003552AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003553#ifdef HAVE_TERMCAP_H
3554# include <termcap.h>
3555#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003556 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003557 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3558 [AC_MSG_RESULT(no)
3559 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003560 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003561#ifdef HAVE_TERMCAP_H
3562# include <termcap.h>
3563#endif
3564extern char *UP, *BC, PC;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003565 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003566 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3567 AC_MSG_RESULT(no))]
3568 )
3569
3570AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003571AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003572#ifdef HAVE_TERMCAP_H
3573# include <termcap.h>
3574#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003575 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003576 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3577 AC_MSG_RESULT(no))
3578
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003579AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003580AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003581#ifdef HAVE_TERMCAP_H
3582# include <termcap.h>
3583#endif
3584#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003585 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003586 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3587 AC_MSG_RESULT(no))
3588
Bram Moolenaar071d4272004-06-13 20:20:40 +00003589dnl On some SCO machines sys/select redefines struct timeval
3590AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003591AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003592#include <sys/types.h>
3593#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003594#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003595 AC_MSG_RESULT(yes)
3596 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3597 AC_MSG_RESULT(no))
3598
3599dnl AC_DECL_SYS_SIGLIST
3600
3601dnl Checks for pty.c (copied from screen) ==========================
3602AC_MSG_CHECKING(for /dev/ptc)
3603if test -r /dev/ptc; then
3604 AC_DEFINE(HAVE_DEV_PTC)
3605 AC_MSG_RESULT(yes)
3606else
3607 AC_MSG_RESULT(no)
3608fi
3609
3610AC_MSG_CHECKING(for SVR4 ptys)
3611if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003612 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003613// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3614char *ptsname(int);
3615int unlockpt(int);
3616int grantpt(int);
3617 ], [
3618 ptsname(0);
3619 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003620 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003621 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3622 AC_MSG_RESULT(no))
3623else
3624 AC_MSG_RESULT(no)
3625fi
3626
3627AC_MSG_CHECKING(for ptyranges)
3628if test -d /dev/ptym ; then
3629 pdir='/dev/ptym'
3630else
3631 pdir='/dev'
3632fi
3633dnl SCO uses ptyp%d
3634AC_EGREP_CPP(yes,
3635[#ifdef M_UNIX
3636 yes;
3637#endif
3638 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3639dnl if test -c /dev/ptyp19; then
3640dnl ptys=`echo /dev/ptyp??`
3641dnl else
3642dnl ptys=`echo $pdir/pty??`
3643dnl fi
3644if test "$ptys" != "$pdir/pty??" ; then
3645 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3646 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3647 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3648 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3649 AC_MSG_RESULT([$p0 / $p1])
3650else
3651 AC_MSG_RESULT([don't know])
3652fi
3653
Bram Moolenaar071d4272004-06-13 20:20:40 +00003654dnl Checks for library functions. ===================================
3655
Bram Moolenaar071d4272004-06-13 20:20:40 +00003656dnl check if struct sigcontext is defined (used for SGI only)
3657AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003658AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003659#include <signal.h>
Sam Jamesf8ea1062022-11-05 15:13:50 +00003660int test_sig()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003661{
3662 struct sigcontext *scont;
3663 scont = (struct sigcontext *)0;
3664 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003665} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003666 AC_MSG_RESULT(yes)
3667 AC_DEFINE(HAVE_SIGCONTEXT),
3668 AC_MSG_RESULT(no))
3669
3670dnl tricky stuff: try to find out if getcwd() is implemented with
3671dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003672AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3673 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003674 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003675#include "confdefs.h"
3676#ifdef HAVE_UNISTD_H
3677#include <unistd.h>
3678#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003679char *dagger[] = { "IFS=pwd", 0 };
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003680int main()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003681{
3682 char buffer[500];
3683 extern char **environ;
3684 environ = dagger;
3685 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003686}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003687 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003688 vim_cv_getcwd_broken=no
3689 ],[
3690 vim_cv_getcwd_broken=yes
3691 ],[
3692 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3693 ])
3694 ])
3695
3696if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3697 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003698 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003699fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003700
Bram Moolenaar25153e12010-02-24 14:47:08 +01003701dnl Check for functions in one big call, to reduce the size of configure.
3702dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003703AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003704 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003705 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003706 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003707 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003708 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
Bram Moolenaar08210f82023-04-13 19:15:54 +01003709 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt \
3710 clock_gettime)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003711AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003712AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003713
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003714dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3715dnl appropriate, so that off_t is 64 bits when needed.
3716AC_SYS_LARGEFILE
3717
Bram Moolenaar21606672019-06-14 20:40:58 +02003718AC_MSG_CHECKING(--enable-canberra argument)
3719AC_ARG_ENABLE(canberra,
3720 [ --disable-canberra Do not use libcanberra.],
3721 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003722
Bram Moolenaar21606672019-06-14 20:40:58 +02003723if test "$enable_canberra" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003724 if test "$features" = "huge"; then
Bram Moolenaar21606672019-06-14 20:40:58 +02003725 AC_MSG_RESULT(Defaulting to yes)
3726 enable_canberra="yes"
3727 else
3728 AC_MSG_RESULT(Defaulting to no)
3729 enable_canberra="no"
3730 fi
3731else
Bram Moolenaar12471262022-01-18 11:11:25 +00003732 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01003733 AC_MSG_RESULT([cannot use sound with tiny features])
Bram Moolenaar12471262022-01-18 11:11:25 +00003734 enable_canberra="no"
3735 else
3736 AC_MSG_RESULT($enable_canberra)
3737 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003738fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003739if test "$enable_canberra" = "yes"; then
3740 if test "x$PKG_CONFIG" != "xno"; then
3741 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3742 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3743 fi
3744 if test "x$canberra_lib" = "x"; then
3745 canberra_lib=-lcanberra
3746 canberra_cflags=-D_REENTRANT
3747 fi
3748 AC_MSG_CHECKING(for libcanberra)
3749 ac_save_CFLAGS="$CFLAGS"
3750 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003751 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003752 CFLAGS="$CFLAGS $canberra_cflags"
3753 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003754 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003755 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003756 # include <canberra.h>
3757 ], [
3758 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003759 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003760 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003761 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003762fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003763
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003764AC_MSG_CHECKING(--enable-libsodium argument)
3765AC_ARG_ENABLE(libsodium,
3766 [ --disable-libsodium Do not use libsodium.],
3767 , [enable_libsodium="maybe"])
3768
3769if test "$enable_libsodium" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003770 if test "$features" = "huge"; then
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003771 AC_MSG_RESULT(Defaulting to yes)
3772 enable_libsodium="yes"
3773 else
3774 AC_MSG_RESULT(Defaulting to no)
3775 enable_libsodium="no"
3776 fi
3777else
3778 AC_MSG_RESULT($enable_libsodium)
3779fi
3780if test "$enable_libsodium" = "yes"; then
3781 if test "x$PKG_CONFIG" != "xno"; then
3782 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3783 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3784 fi
3785 if test "x$libsodium_lib" = "x"; then
3786 libsodium_lib=-lsodium
3787 libsodium_cflags=
3788 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003789 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003790 ac_save_CFLAGS="$CFLAGS"
3791 ac_save_LIBS="$LIBS"
3792 CFLAGS="$CFLAGS $libsodium_cflags"
3793 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003794 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003795 # include <sodium.h>
3796 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003797 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003798 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3799 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3800fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003801
Bram Moolenaar071d4272004-06-13 20:20:40 +00003802dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3803AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003804AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003805[#include <sys/types.h>
3806#include <sys/stat.h>],
3807[ struct stat st;
3808 int n;
3809
3810 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003811 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003812 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3813 AC_MSG_RESULT(no))
3814
Paul Ollis65745772022-06-05 16:55:54 +01003815dnl Check for timer_create. It probably requires the 'rt' library.
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003816dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
3817dnl works, on Solaris timer_create() exists but fails at runtime.
Bram Moolenaarefffa532022-07-28 22:39:54 +01003818AC_CACHE_CHECK([for timer_create without -lrt], [vim_cv_timer_create], [
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003819AC_RUN_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar5748b7f2022-07-28 12:09:04 +01003820#if STDC_HEADERS
3821# include <stdlib.h>
3822# include <stddef.h>
3823#endif
3824#include <signal.h>
3825#include <time.h>
Bram Moolenaare5303952022-06-19 17:05:47 +01003826static void set_flag(union sigval sv) {}
Paul Ollis65745772022-06-05 16:55:54 +01003827], [
3828 struct timespec ts;
3829 struct sigevent action = {0};
3830 timer_t timer_id;
3831
3832 action.sigev_notify = SIGEV_THREAD;
3833 action.sigev_notify_function = set_flag;
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003834 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3835 exit(1); // cannot create a monotonic timer
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003836 ])],
Bram Moolenaarefffa532022-07-28 22:39:54 +01003837 vim_cv_timer_create=yes,
3838 vim_cv_timer_create=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003839 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003840 )])
Paul Ollis65745772022-06-05 16:55:54 +01003841
Bram Moolenaarefffa532022-07-28 22:39:54 +01003842dnl If the previous failed, check for timer_create() and linking with -lrt.
3843if test "x$vim_cv_timer_create" = "xno" ; then
3844 save_LIBS="$LIBS"
3845 LIBS="$LIBS -lrt"
3846 AC_CACHE_CHECK([for timer_create with -lrt], [vim_cv_timer_create_with_lrt], [
3847 AC_RUN_IFELSE([AC_LANG_PROGRAM([
3848 #if STDC_HEADERS
3849 # include <stdlib.h>
3850 # include <stddef.h>
3851 #endif
3852 #include <signal.h>
3853 #include <time.h>
3854 static void set_flag(union sigval sv) {}
3855 ], [
3856 struct timespec ts;
3857 struct sigevent action = {0};
3858 timer_t timer_id;
3859
3860 action.sigev_notify = SIGEV_THREAD;
3861 action.sigev_notify_function = set_flag;
3862 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3863 exit(1); // cannot create a monotonic timer
3864 ])],
3865 vim_cv_timer_create_with_lrt=yes,
3866 vim_cv_timer_create_with_lrt=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003867 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 +01003868 )])
3869 LIBS="$save_LIBS"
3870else
3871 vim_cv_timer_create_with_lrt=no
3872fi
Richard Purdie509695c2022-07-24 20:48:00 +01003873
3874if test "x$vim_cv_timer_create" = "xyes" ; then
3875 AC_DEFINE(HAVE_TIMER_CREATE)
3876fi
Bram Moolenaarefffa532022-07-28 22:39:54 +01003877if test "x$vim_cv_timer_create_with_lrt" = "xyes" ; then
3878 AC_DEFINE(HAVE_TIMER_CREATE)
3879 LIBS="$LIBS -lrt"
3880fi
Paul Ollis65745772022-06-05 16:55:54 +01003881
Bram Moolenaar446cb832008-06-24 21:56:24 +00003882AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3883 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003884 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003885#include "confdefs.h"
3886#if STDC_HEADERS
3887# include <stdlib.h>
3888# include <stddef.h>
3889#endif
3890#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003891#include <sys/stat.h>
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003892int main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003893 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003894 vim_cv_stat_ignores_slash=yes
3895 ],[
3896 vim_cv_stat_ignores_slash=no
3897 ],[
3898 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3899 ])
3900 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003901
Bram Moolenaar446cb832008-06-24 21:56:24 +00003902if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3903 AC_DEFINE(STAT_IGNORES_SLASH)
3904fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003905
3906dnl nanoseconds field of struct stat
3907AC_CACHE_CHECK([for nanoseconds field of struct stat],
3908 ac_cv_struct_st_mtim_nsec,
3909 [ac_save_CPPFLAGS="$CPPFLAGS"
3910 ac_cv_struct_st_mtim_nsec=no
3911 # st_mtim.tv_nsec -- the usual case
3912 # st_mtim._tv_nsec -- Solaris 2.6, if
3913 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3914 # && !defined __EXTENSIONS__)
3915 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3916 # st_mtime_n -- AIX 5.2 and above
3917 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3918 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
3919 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003920 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3921#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003922 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3923 done
3924 CPPFLAGS="$ac_save_CPPFLAGS"
3925])
3926if test $ac_cv_struct_st_mtim_nsec != no; then
3927 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3928 [Define if struct stat contains a nanoseconds field])
3929fi
Bram Moolenaare5303952022-06-19 17:05:47 +01003930
Bram Moolenaar071d4272004-06-13 20:20:40 +00003931dnl Link with iconv for charset translation, if not found without library.
3932dnl check for iconv() requires including iconv.h
3933dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3934dnl has been installed.
3935AC_MSG_CHECKING(for iconv_open())
3936save_LIBS="$LIBS"
3937LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003938AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003939#ifdef HAVE_ICONV_H
3940# include <iconv.h>
3941#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003942 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003943 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3944 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003945 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003946#ifdef HAVE_ICONV_H
3947# include <iconv.h>
3948#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003949 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003950 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3951 AC_MSG_RESULT(no)))
3952
3953
3954AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003955AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003956#ifdef HAVE_LANGINFO_H
3957# include <langinfo.h>
3958#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003959], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003960 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3961 AC_MSG_RESULT(no))
3962
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01003963dnl Floating point support may require the "m" library
Bram Moolenaar446cb832008-06-24 21:56:24 +00003964AC_CHECK_LIB(m, strtod)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003965
Bram Moolenaara6b89762016-02-29 21:38:26 +01003966dnl isinf() and isnan() need to include header files and may need -lm.
3967AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003968AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003969#ifdef HAVE_MATH_H
3970# include <math.h>
3971#endif
3972#if STDC_HEADERS
3973# include <stdlib.h>
3974# include <stddef.h>
3975#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003976], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003977 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3978 AC_MSG_RESULT(no))
3979
3980AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003981AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003982#ifdef HAVE_MATH_H
3983# include <math.h>
3984#endif
3985#if STDC_HEADERS
3986# include <stdlib.h>
3987# include <stddef.h>
3988#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003989], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01003990 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3991 AC_MSG_RESULT(no))
3992
Bram Moolenaar071d4272004-06-13 20:20:40 +00003993dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3994dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003995dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003996AC_MSG_CHECKING(--disable-acl argument)
3997AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003998 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003999 , [enable_acl="yes"])
4000if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01004001 AC_MSG_RESULT(no)
4002 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004003 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
4004 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
4005
Bram Moolenaard6d30422018-01-28 22:48:55 +01004006 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004007 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004008#include <sys/types.h>
4009#ifdef HAVE_SYS_ACL_H
4010# include <sys/acl.h>
4011#endif
4012acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4013 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004014 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004015 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4016 AC_MSG_RESULT(no))
4017
Bram Moolenaard6d30422018-01-28 22:48:55 +01004018 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4019 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004020 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004021#ifdef HAVE_SYS_ACL_H
4022# include <sys/acl.h>
4023#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004024 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004025 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004026 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004027
Bram Moolenaard6d30422018-01-28 22:48:55 +01004028 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004029 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004030#if STDC_HEADERS
4031# include <stdlib.h>
4032# include <stddef.h>
4033#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004034#ifdef HAVE_SYS_ACL_H
4035# include <sys/acl.h>
4036#endif
4037#ifdef HAVE_SYS_ACCESS_H
4038# include <sys/access.h>
4039#endif
4040#define _ALL_SOURCE
4041
4042#include <sys/stat.h>
4043
4044int aclsize;
4045struct acl *aclent;], [aclsize = sizeof(struct acl);
4046 aclent = (void *)malloc(aclsize);
4047 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004048 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004049 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4050 AC_MSG_RESULT(no))
4051else
4052 AC_MSG_RESULT(yes)
4053fi
4054
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004055if test "x$GTK_CFLAGS" != "x"; then
4056 dnl pango_shape_full() is new, fall back to pango_shape().
4057 AC_MSG_CHECKING(for pango_shape_full)
4058 ac_save_CFLAGS="$CFLAGS"
4059 ac_save_LIBS="$LIBS"
4060 CFLAGS="$CFLAGS $GTK_CFLAGS"
4061 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004062 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004063 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004064 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004065 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4066 AC_MSG_RESULT(no))
4067 CFLAGS="$ac_save_CFLAGS"
4068 LIBS="$ac_save_LIBS"
4069fi
4070
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004071AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004072AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004073 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004074 [enable_gpm="yes"])
4075
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004076if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4077 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004078 dnl Checking if gpm support can be compiled
4079 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4080 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004081 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004082 [#include <gpm.h>
4083 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004084 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004085 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4086 dnl FEAT_MOUSE_GPM if mouse support is included
4087 [vi_cv_have_gpm=yes],
4088 [vi_cv_have_gpm=no])
4089 [LIBS="$olibs"]
4090 )
4091 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004092 if test "$enable_gpm" = "yes"; then
4093 LIBS="$LIBS -lgpm"
4094 else
4095 AC_DEFINE(DYNAMIC_GPM)
4096 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004097 AC_DEFINE(HAVE_GPM)
4098 fi
4099else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004100 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004101fi
4102
Bram Moolenaar446cb832008-06-24 21:56:24 +00004103AC_MSG_CHECKING(--disable-sysmouse argument)
4104AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004105 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004106 [enable_sysmouse="yes"])
4107
4108if test "$enable_sysmouse" = "yes"; then
4109 AC_MSG_RESULT(no)
4110 dnl Checking if sysmouse support can be compiled
4111 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4112 dnl defines FEAT_SYSMOUSE if mouse support is included
4113 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004114 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004115 [#include <sys/consio.h>
4116 #include <signal.h>
4117 #include <sys/fbio.h>],
4118 [struct mouse_info mouse;
4119 mouse.operation = MOUSE_MODE;
4120 mouse.operation = MOUSE_SHOW;
4121 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004122 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004123 [vi_cv_have_sysmouse=yes],
4124 [vi_cv_have_sysmouse=no])
4125 )
4126 if test $vi_cv_have_sysmouse = yes; then
4127 AC_DEFINE(HAVE_SYSMOUSE)
4128 fi
4129else
4130 AC_MSG_RESULT(yes)
4131fi
4132
Bram Moolenaarf05da212009-11-17 16:13:15 +00004133dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4134AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004135AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004136[#if HAVE_FCNTL_H
4137# include <fcntl.h>
4138#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004139[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004140 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4141 AC_MSG_RESULT(not usable))
4142
Bram Moolenaar071d4272004-06-13 20:20:40 +00004143dnl rename needs to be checked separately to work on Nextstep with cc
4144AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004145AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004146 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4147 AC_MSG_RESULT(no))
4148
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004149dnl check for dirfd()
4150AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004151AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004152[#include <sys/types.h>
4153#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004154[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004155AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4156
4157dnl check for flock()
4158AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004159AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004160[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004161[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004162AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4163
Bram Moolenaar071d4272004-06-13 20:20:40 +00004164dnl sysctl() may exist but not the arguments we use
4165AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004166AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004167[#include <sys/types.h>
4168#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004169[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004170 size_t len;
4171
4172 mib[0] = CTL_HW;
4173 mib[1] = HW_USERMEM;
4174 len = sizeof(r);
4175 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004176 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004177 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4178 AC_MSG_RESULT(not usable))
4179
Bram Moolenaare2982d62021-10-06 11:27:21 +01004180dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004181dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004182AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004183AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004184[#include <sys/types.h>
4185#include <sys/sysinfo.h>],
4186[ struct sysinfo sinfo;
4187 int t;
4188
4189 (void)sysinfo(&sinfo);
4190 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004191 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004192 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4193 AC_MSG_RESULT(not usable))
4194
Bram Moolenaar914572a2007-05-01 11:37:47 +00004195dnl struct sysinfo may have the mem_unit field or not
4196AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004197AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004198[#include <sys/types.h>
4199#include <sys/sysinfo.h>],
4200[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004201 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004202 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004203 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4204 AC_MSG_RESULT(no))
4205
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004206dnl struct sysinfo may have the uptime field or not
4207AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004208AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004209[#include <sys/types.h>
4210#include <sys/sysinfo.h>],
4211[ struct sysinfo sinfo;
4212 long ut;
4213
4214 (void)sysinfo(&sinfo);
4215 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004216 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004217 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4218 AC_MSG_RESULT(no))
4219
Bram Moolenaar071d4272004-06-13 20:20:40 +00004220dnl sysconf() may exist but not support what we want to use
4221AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004222AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004223[#include <unistd.h>],
4224[ (void)sysconf(_SC_PAGESIZE);
4225 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004226 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004227 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4228 AC_MSG_RESULT(not usable))
4229
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004230dnl check if we have _SC_SIGSTKSZ via sysconf()
4231AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004232AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004233[#include <unistd.h>],
4234[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004235 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004236 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4237 AC_MSG_RESULT(not usable))
4238
Bram Moolenaar914703b2010-05-31 21:59:46 +02004239AC_CHECK_SIZEOF([int])
4240AC_CHECK_SIZEOF([long])
4241AC_CHECK_SIZEOF([time_t])
4242AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004243
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004244dnl Use different names to avoid clashing with other header files.
4245AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4246AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4247
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004248dnl Make sure that uint32_t is really 32 bits unsigned.
4249AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004250AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004251#ifdef HAVE_STDINT_H
4252# include <stdint.h>
4253#endif
4254#ifdef HAVE_INTTYPES_H
4255# include <inttypes.h>
4256#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004257int main() {
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004258 uint32_t nr1 = (uint32_t)-1;
4259 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004260 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4261 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004262}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004263AC_MSG_RESULT(ok),
4264AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004265AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004266
Bram Moolenaar446cb832008-06-24 21:56:24 +00004267dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4268dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4269
Bram Moolenaar071d4272004-06-13 20:20:40 +00004270[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004271#include "confdefs.h"
4272#ifdef HAVE_STRING_H
4273# include <string.h>
4274#endif
4275#if STDC_HEADERS
4276# include <stdlib.h>
4277# include <stddef.h>
4278#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004279int main() {
Bram Moolenaar071d4272004-06-13 20:20:40 +00004280 char buf[10];
4281 strcpy(buf, "abcdefghi");
4282 mch_memmove(buf, buf + 2, 3);
4283 if (strncmp(buf, "ababcf", 6))
4284 exit(1);
4285 strcpy(buf, "abcdefghi");
4286 mch_memmove(buf + 2, buf, 3);
4287 if (strncmp(buf, "cdedef", 6))
4288 exit(1);
4289 exit(0); /* libc version works properly. */
4290}']
4291
Bram Moolenaar446cb832008-06-24 21:56:24 +00004292AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4293 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004294 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 +00004295 [
4296 vim_cv_memmove_handles_overlap=yes
4297 ],[
4298 vim_cv_memmove_handles_overlap=no
4299 ],[
4300 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4301 ])
4302 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004303
Bram Moolenaar446cb832008-06-24 21:56:24 +00004304if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4305 AC_DEFINE(USEMEMMOVE)
4306else
4307 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4308 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004309 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 +00004310 [
4311 vim_cv_bcopy_handles_overlap=yes
4312 ],[
4313 vim_cv_bcopy_handles_overlap=no
4314 ],[
4315 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4316 ])
4317 ])
4318
4319 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4320 AC_DEFINE(USEBCOPY)
4321 else
4322 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4323 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004324 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 +00004325 [
4326 vim_cv_memcpy_handles_overlap=yes
4327 ],[
4328 vim_cv_memcpy_handles_overlap=no
4329 ],[
4330 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4331 ])
4332 ])
4333
4334 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4335 AC_DEFINE(USEMEMCPY)
4336 fi
4337 fi
4338fi
4339
Bram Moolenaar071d4272004-06-13 20:20:40 +00004340
4341dnl Check for multibyte locale functions
4342dnl Find out if _Xsetlocale() is supported by libX11.
4343dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004344if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004345 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004346 libs_save=$LIBS
4347 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4348 CFLAGS="$CFLAGS $X_CFLAGS"
4349
4350 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004351 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4352 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004353 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4354 AC_MSG_RESULT(no))
4355
4356 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004357 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004358 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4359
Bram Moolenaar071d4272004-06-13 20:20:40 +00004360 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004361 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004362fi
4363
4364dnl Link with xpg4, it is said to make Korean locale working
4365AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4366
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004367dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004368dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004369dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004370dnl -t for typedefs (many ctags have this)
4371dnl -s for static functions (Elvis ctags only?)
4372dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4373dnl -i+m to test for older Exuberant ctags
4374AC_MSG_CHECKING(how to create tags)
4375test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004376if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004377 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004378elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004379 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004380elif (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 +01004381 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004382else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004383 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004384 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4385 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4386 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4387 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4388 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4389 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4390 (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 +00004391fi
4392test -f tags.save && mv tags.save tags
4393AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4394
4395dnl Check how we can run man with a section number
4396AC_MSG_CHECKING(how to run man with a section nr)
4397MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004398(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 +00004399AC_MSG_RESULT($MANDEF)
4400if test "$MANDEF" = "man -s"; then
4401 AC_DEFINE(USEMAN_S)
4402fi
4403
4404dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004405dnl We take care to base this on an empty LIBS: on some systems libelf would be
4406dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4407dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004408AC_MSG_CHECKING(--disable-nls argument)
4409AC_ARG_ENABLE(nls,
4410 [ --disable-nls Don't support NLS (gettext()).], ,
4411 [enable_nls="yes"])
4412
4413if test "$enable_nls" = "yes"; then
4414 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004415
4416 INSTALL_LANGS=install-languages
4417 AC_SUBST(INSTALL_LANGS)
4418 INSTALL_TOOL_LANGS=install-tool-languages
4419 AC_SUBST(INSTALL_TOOL_LANGS)
4420
Bram Moolenaar071d4272004-06-13 20:20:40 +00004421 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4422 AC_MSG_CHECKING([for NLS])
4423 if test -f po/Makefile; then
4424 have_gettext="no"
4425 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004426 olibs=$LIBS
4427 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004428 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004429 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004430 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004431 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4432 LIBS="-lintl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004433 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004434 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004435 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004436 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4437 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004438 AC_MSG_RESULT([gettext() doesn't work]);
4439 LIBS=$olibs))
4440 else
4441 AC_MSG_RESULT([msgfmt not found - disabled]);
4442 fi
Martin Tournoij7904fa42022-10-04 16:28:45 +01004443 if test $have_gettext = "yes" -a "x$features" != "xtiny"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004444 AC_DEFINE(HAVE_GETTEXT)
4445 MAKEMO=yes
4446 AC_SUBST(MAKEMO)
4447 dnl this was added in GNU gettext 0.10.36
4448 AC_CHECK_FUNCS(bind_textdomain_codeset)
4449 dnl _nl_msg_cat_cntr is required for GNU gettext
4450 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004451 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004452 [#include <libintl.h>
4453 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004454 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004455 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4456 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004457 AC_MSG_CHECKING([if msgfmt supports --desktop])
4458 MSGFMT_DESKTOP=
4459 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004460 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4461 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4462 dnl 0.19.3 is also broken.
4463 AC_MSG_RESULT([broken])
4464 else
4465 AC_MSG_RESULT([yes])
4466 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4467 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004468 else
4469 AC_MSG_RESULT([no])
4470 fi
4471 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004472 fi
4473 else
4474 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4475 fi
4476else
4477 AC_MSG_RESULT(yes)
4478fi
4479
4480dnl Check for dynamic linking loader
4481AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4482if test x${DLL} = xdlfcn.h; then
4483 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4484 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004485 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004486 extern void* dlopen();
4487 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004488 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004489 AC_MSG_RESULT(yes);
4490 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4491 AC_MSG_RESULT(no);
4492 AC_MSG_CHECKING([for dlopen() in -ldl])
4493 olibs=$LIBS
4494 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004495 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004496 extern void* dlopen();
4497 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004498 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004499 AC_MSG_RESULT(yes);
4500 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4501 AC_MSG_RESULT(no);
4502 LIBS=$olibs))
4503 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4504 dnl ick :-)
4505 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004506 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004507 extern void* dlsym();
4508 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004509 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004510 AC_MSG_RESULT(yes);
4511 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4512 AC_MSG_RESULT(no);
4513 AC_MSG_CHECKING([for dlsym() in -ldl])
4514 olibs=$LIBS
4515 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004516 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004517 extern void* dlsym();
4518 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004519 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004520 AC_MSG_RESULT(yes);
4521 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4522 AC_MSG_RESULT(no);
4523 LIBS=$olibs))
4524elif test x${DLL} = xdl.h; then
4525 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4526 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004527 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004528 extern void* shl_load();
4529 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004530 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004531 AC_MSG_RESULT(yes);
4532 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4533 AC_MSG_RESULT(no);
4534 AC_MSG_CHECKING([for shl_load() in -ldld])
4535 olibs=$LIBS
4536 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004537 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004538 extern void* shl_load();
4539 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004540 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004541 AC_MSG_RESULT(yes);
4542 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4543 AC_MSG_RESULT(no);
4544 LIBS=$olibs))
4545fi
4546AC_CHECK_HEADERS(setjmp.h)
4547
Bram Moolenaard0573012017-10-28 21:11:06 +02004548if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004549 dnl -ldl must come after DynaLoader.a
4550 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4551 LIBS=`echo $LIBS | sed s/-ldl//`
4552 PERL_LIBS="$PERL_LIBS -ldl"
4553 fi
4554fi
4555
Bram Moolenaard0573012017-10-28 21:11:06 +02004556if test "$MACOS_X" = "yes"; then
4557 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004558 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004559 if test "$features" = "tiny"; then
Yee Cheng Chin4314e4f2022-10-08 13:50:05 +01004560 dnl Since no FEAT_CLIPBOARD or FEAT_SOUND, no need for os_macosx.m.
Bram Moolenaard0573012017-10-28 21:11:06 +02004561 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4562 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004563 AC_MSG_RESULT([yes, we need CoreServices])
4564 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004565 else
4566 AC_MSG_RESULT([yes, we need AppKit])
4567 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004568 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004569 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004570 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004571 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004572fi
4573
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004574dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4575dnl it everywhere.
4576if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4577 CFLAGS="$CFLAGS -D_REENTRANT"
4578fi
4579
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004580dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4581dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4582dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004583dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4584dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004585DEPEND_CFLAGS_FILTER=
4586if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004587 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004588 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004589 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004590 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004591 AC_MSG_RESULT(yes)
4592 else
4593 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004594 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004595 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4596 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004597 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004598 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004599 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4600 if test "$gccmajor" -gt "3"; then
Zdenek Dohnal42196982023-01-18 16:09:51 +00004601 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/'`
4602 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 +00004603 AC_MSG_RESULT(yes)
4604 else
4605 AC_MSG_RESULT(no)
4606 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004607fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004608AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004609
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004610dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4611dnl isn't required, but the CFLAGS for some of the libraries we're using
4612dnl include the define. Since the define changes the size of some datatypes
4613dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4614dnl consistent value. It's therefore safest to force the use of the define
4615dnl if it's present in any of the *_CFLAGS variables.
4616AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004617if 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 +01004618 AC_MSG_RESULT(yes)
4619 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4620else
4621 AC_MSG_RESULT(no)
4622fi
4623
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004624dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4625dnl between "-L" and the path that follows.
4626LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4627
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004628dnl link.sh tries to avoid overlinking in a hackish way.
4629dnl At least GNU ld supports --as-needed which provides the same functionality
4630dnl at linker level. Let's use it.
4631AC_MSG_CHECKING(linker --as-needed support)
4632LINK_AS_NEEDED=
4633# Check if linker supports --as-needed and --no-as-needed options
4634if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004635 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4636 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4637 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004638 LINK_AS_NEEDED=yes
4639fi
4640if test "$LINK_AS_NEEDED" = yes; then
4641 AC_MSG_RESULT(yes)
4642else
4643 AC_MSG_RESULT(no)
4644fi
4645AC_SUBST(LINK_AS_NEEDED)
4646
Bram Moolenaar77c19352012-06-13 19:19:41 +02004647# IBM z/OS reset CFLAGS for config.mk
4648if test "$zOSUnix" = "yes"; then
4649 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4650fi
4651
Bram Moolenaar071d4272004-06-13 20:20:40 +00004652dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004653AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4654AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004655
4656dnl vim: set sw=2 tw=78 fo+=l: