blob: f6e54b30b06de85f8b80a6ac34b8fac19c548baa [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
Illia Bobyra96d5442023-08-30 16:30:15 +02003dnl Process this file with autoconf 2.71 to produce "configure".
Bram Moolenaar071d4272004-06-13 20:20:40 +00004
Illia Bobyrf39842f2023-08-27 18:21:23 +02005AC_INIT
6AC_CONFIG_SRCDIR([vim.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01007AC_CONFIG_HEADERS(auto/config.h:config.h.in)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9dnl Being able to run configure means the system is Unix (compatible).
10AC_DEFINE(UNIX)
11AC_PROG_MAKE_SET
12
13dnl Checks for programs.
Illia Bobyra96d5442023-08-30 16:30:15 +020014AC_PROG_CC dnl required by almost everything
Bram Moolenaarc0394412017-04-20 20:20:23 +020015AC_PROG_CPP dnl required by header file checks
Illia Bobyrf39842f2023-08-27 18:21:23 +020016AC_PROG_EGREP dnl required by AC_EGREP_CPP
Bram Moolenaarc0394412017-04-20 20:20:23 +020017AC_PROG_FGREP dnl finds working grep -F
Bram Moolenaarc0394412017-04-20 20:20:23 +020018AC_PROG_AWK dnl required for "make html" in ../doc
Bram Moolenaar071d4272004-06-13 20:20:40 +000019
20dnl Don't strip if we don't have it
21AC_CHECK_PROG(STRIP, strip, strip, :)
22
Bram Moolenaar325b7a22004-07-05 15:58:32 +000023dnl Check for extension of executables
Bram Moolenaar071d4272004-06-13 20:20:40 +000024AC_EXEEXT
25
Bram Moolenaar446cb832008-06-24 21:56:24 +000026AC_HEADER_SYS_WAIT
27
Bram Moolenaar561f8a52018-04-17 22:02:45 +020028dnl Check that the C99 features that Vim uses are supported:
Bram Moolenaar22640082018-04-19 20:39:41 +020029if test x"$ac_cv_prog_cc_c99" != xno; then
30 dnl If the compiler doesn't explicitly support C99, then check
31 dnl for the specific features Vim uses
32
33 AC_TYPE_LONG_LONG_INT
34 if test "$ac_cv_type_long_long_int" = no; then
35 AC_MSG_FAILURE([Compiler does not support long long int])
36 fi
37
38 AC_MSG_CHECKING([if the compiler supports trailing commas])
39 trailing_commas=no
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010040 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
Bram Moolenaar22640082018-04-19 20:39:41 +020041 enum {
42 one,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010043 };])],
Bram Moolenaar22640082018-04-19 20:39:41 +020044 [AC_MSG_RESULT(yes); trailing_commas=yes],
45 [AC_MSG_RESULT(no)])
46 if test "$trailing_commas" = no; then
47 AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
48 fi
49
50 AC_MSG_CHECKING([if the compiler supports C++ comments])
51 slash_comments=no
Bram Moolenaar1004b3d2022-06-05 19:51:55 +010052 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
53 [// C++ comments?])],
Bram Moolenaar22640082018-04-19 20:39:41 +020054 [AC_MSG_RESULT(yes); slash_comments=yes],
55 [AC_MSG_RESULT(no)])
56 if test "$slash_comments" = no; then
57 AC_MSG_FAILURE([Compiler does not support C++ comments])
58 fi
59fi
Bram Moolenaar561f8a52018-04-17 22:02:45 +020060
Bram Moolenaar8f1dde52020-06-05 23:16:29 +020061dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
62dnl "compiled" timestamp in :version's output. Attempt to get the formatted
63dnl date using GNU date syntax, BSD date syntax, and finally falling back to
64dnl just using the current time.
65if test -n "$SOURCE_DATE_EPOCH"; then
66 DATE_FMT="%b %d %Y %H:%M:%S"
67 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")
68 AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
69 BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
70 AC_SUBST(BUILD_DATE_MSG)
71fi
72
Bram Moolenaarf788a062011-12-14 20:51:25 +010073dnl Check for the flag that fails if stuff are missing.
74
75AC_MSG_CHECKING(--enable-fail-if-missing argument)
76AC_ARG_ENABLE(fail_if_missing,
77 [ --enable-fail-if-missing Fail if dependencies on additional features
Bram Moolenaare5303952022-06-19 17:05:47 +010078 specified on the command line are missing.],
Bram Moolenaarf788a062011-12-14 20:51:25 +010079 [fail_if_missing="yes"],
80 [fail_if_missing="no"])
81AC_MSG_RESULT($fail_if_missing)
82
Bram Moolenaard2a05492018-07-27 22:35:15 +020083dnl Keep original value to check later.
84with_x_arg="$with_x"
85
Bram Moolenaar071d4272004-06-13 20:20:40 +000086dnl Set default value for CFLAGS if none is defined or it's empty
87if test -z "$CFLAGS"; then
88 CFLAGS="-O"
Bram Moolenaar4d8479b2021-01-31 14:36:06 +010089 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall -Wno-deprecated-declarations"
Bram Moolenaar071d4272004-06-13 20:20:40 +000090fi
Rose00d07e72023-05-06 18:07:14 +010091
Bram Moolenaar071d4272004-06-13 20:20:40 +000092if test "$GCC" = yes; then
Rose00d07e72023-05-06 18:07:14 +010093 dnl Method that should work for nearly all gcc versions.
Bram Moolenaarc8836f72014-04-12 13:12:24 +020094 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000095 if test "x$gccversion" = "x"; then
96 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +020097 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 +000098 fi
Rose00d07e72023-05-06 18:07:14 +010099
100 dnl Gcc version 4.0.1 was reported to cause trouble on Macintosh by Marcin
101 dnl Dalecki. For Mac with Intel the symptom reported is: malloc() reports
102 dnl double free. This happens in expand_filename(), because the optimizer
103 dnl swaps two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000104 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000105 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
107 else
108 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
109 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
110 CFLAGS="$CFLAGS -fno-strength-reduce"
111 fi
112 fi
113fi
114
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200115dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
116dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
117dnl the version number of the clang in use.
118dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100119AC_MSG_CHECKING(for clang version)
120CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed -n -e 's/^.*clang[[^0-9]]*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200121if test x"$CLANG_VERSION_STRING" != x"" ; then
122 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
123 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
124 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
125 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
126 AC_MSG_RESULT($CLANG_VERSION)
127 dnl If you find the same issue with versions earlier than 500.2.75,
128 dnl change the constant 500002075 below appropriately. To get the
129 dnl integer corresponding to a version number, refer to the
130 dnl definition of CLANG_VERSION above.
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100131 dnl Clang 11 reports "11", assume Clang 10 and later work like this.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100132 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100133 if test "$CLANG_MAJOR" -ge 10 -o "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100134 AC_MSG_RESULT(no)
135 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
136 else
137 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200138 fi
139else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100140 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200141fi
142
Bram Moolenaar446cb832008-06-24 21:56:24 +0000143dnl If configure thinks we are cross compiling, there might be something
144dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200145CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000147 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200148 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200150AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000152dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
153dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
155
156if test -f ./toolcheck; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100157 AC_MSG_CHECKING(for buggy tools)
158 sh ./toolcheck 1>&AS_MESSAGE_FD
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159fi
160
161OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
162
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000163dnl When cross-compiling set $vim_cv_uname_output, $vim_cv_uname_r_output and
164dnl $vim_cv_uname_m_output to the desired value for the target system
165AC_MSG_CHECKING(uname)
166if test "x$vim_cv_uname_output" = "x" ; then
167 vim_cv_uname_output=`(uname) 2>/dev/null`
168 AC_MSG_RESULT($vim_cv_uname_output)
169else
170 AC_MSG_RESULT([$vim_cv_uname_output (cached)])
171fi
172
173AC_MSG_CHECKING(uname -r)
174if test "x$vim_cv_uname_r_output" = "x" ; then
175 vim_cv_uname_r_output=`(uname -r) 2>/dev/null`
176 AC_MSG_RESULT($vim_cv_uname_r_output)
177else
178 AC_MSG_RESULT([$vim_cv_uname_r_output (cached)])
179fi
180
181AC_MSG_CHECKING(uname -m)
182if test "x$vim_cv_uname_m_output" = "x" ; then
183 vim_cv_uname_m_output=`(uname -m) 2>/dev/null`
184 AC_MSG_RESULT($vim_cv_uname_m_output)
185else
186 AC_MSG_RESULT([$vim_cv_uname_m_output (cached)])
187fi
188
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100189AC_MSG_CHECKING(for Haiku)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000190case $vim_cv_uname_output in
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100191 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
192 *) HAIKU=no; AC_MSG_RESULT(no);;
193esac
194
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195dnl If QNX is found, assume we don't want to use Xphoton
196dnl unless it was specifically asked for (--with-x)
197AC_MSG_CHECKING(for QNX)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000198case $vim_cv_uname_output in
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
200 test -z "$with_x" && with_x=no
201 QNX=yes; AC_MSG_RESULT(yes);;
202 *) QNX=no; AC_MSG_RESULT(no);;
203esac
204
205dnl Check for Darwin and MacOS X
206dnl We do a check for MacOS X in the very beginning because there
207dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208AC_MSG_CHECKING([for Darwin (Mac OS X)])
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000209if test "$vim_cv_uname_output" = Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200211 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200212 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
214 AC_MSG_CHECKING(--disable-darwin argument)
215 AC_ARG_ENABLE(darwin,
216 [ --disable-darwin Disable Darwin (Mac OS X) support.],
217 , [enable_darwin="yes"])
218 if test "$enable_darwin" = "yes"; then
219 AC_MSG_RESULT(no)
220 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200221 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222 AC_MSG_RESULT(yes)
223 else
224 AC_MSG_RESULT([no, Darwin support disabled])
225 enable_darwin=no
226 fi
227 else
228 AC_MSG_RESULT([yes, Darwin support excluded])
229 fi
230
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000231 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000232 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000233 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000234 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000235
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100236 AC_MSG_CHECKING(--with-developer-dir argument)
237 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
238 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100239 AC_MSG_RESULT(not present))
Bram Moolenaare5303952022-06-19 17:05:47 +0100240
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100241 if test "x$DEVELOPER_DIR" = "x"; then
242 AC_PATH_PROG(XCODE_SELECT, xcode-select)
243 if test "x$XCODE_SELECT" != "x"; then
244 AC_MSG_CHECKING(for developer dir using xcode-select)
245 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
246 AC_MSG_RESULT([$DEVELOPER_DIR])
247 else
248 DEVELOPER_DIR=/Developer
249 fi
250 fi
251
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000252 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000253 AC_MSG_CHECKING(for 10.4 universal SDK)
254 dnl There is a terrible inconsistency (but we appear to get away with it):
255 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
256 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
257 dnl tests using the preprocessor are actually done with the wrong header
258 dnl files. $LDFLAGS is set at the end, because configure uses it together
259 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000260 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000261 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000262 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100263 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100264 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000265 AC_MSG_RESULT(found, will make universal binary),
266
267 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000268 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000269 AC_MSG_CHECKING(if Intel architecture is supported)
270 CPPFLAGS="$CPPFLAGS -arch i386"
271 LDFLAGS="$save_ldflags -arch i386"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100272 AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000273 AC_MSG_RESULT(yes); MACARCH="intel",
274 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000275 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000276 CPPFLAGS="$save_cppflags -arch ppc"
277 LDFLAGS="$save_ldflags -arch ppc"))
278 elif test "x$MACARCH" = "xintel"; then
279 CPPFLAGS="$CPPFLAGS -arch intel"
280 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000281 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000282 CPPFLAGS="$CPPFLAGS -arch ppc"
283 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000284 fi
285
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200287 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200288 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000289 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaare5303952022-06-19 17:05:47 +0100290 dnl os_macosx.m implements timer_create() and friends
291 AC_DEFINE(HAVE_TIMER_CREATE)
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000292 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100293 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200294 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200295
296 dnl Assume we don't want X11 unless it was specifically asked for
Bram Moolenaar0b40d082022-03-08 13:32:37 +0000297 dnl (--with-x) or Motif or GTK GUI is used.
298 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 +0200299 with_x=no
300 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301 fi
302else
303 AC_MSG_RESULT(no)
304fi
305
Bram Moolenaar39766a72013-11-03 00:41:00 +0100306dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
307dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100308AC_CHECK_HEADERS(AvailabilityMacros.h)
Evan Miller25448072022-12-30 10:42:23 +0000309# 10.5 and earlier lack dispatch
310AC_CHECK_HEADERS(dispatch/dispatch.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100311
Bram Moolenaar071d4272004-06-13 20:20:40 +0000312AC_SUBST(OS_EXTRA_SRC)
313AC_SUBST(OS_EXTRA_OBJ)
314
315dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
316dnl Only when the directory exists and it wasn't there yet.
317dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000318dnl Skip all of this when cross-compiling.
319if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000320 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000321 have_local_include=''
322 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000323 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
324 --without-local-dir do not search /usr/local for local libraries.], [
325 local_dir="$withval"
326 case "$withval" in
327 */*) ;;
328 no)
329 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200330 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000331 have_local_lib=yes
332 ;;
333 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
334 esac
335 AC_MSG_RESULT($local_dir)
336 ], [
337 local_dir=/usr/local
338 AC_MSG_RESULT(Defaulting to $local_dir)
339 ])
340 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000341 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100342 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
343 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000344 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000345 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000346 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000347 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
348 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 +0000349 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000350 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000351 fi
352 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000353 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
354 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 +0000355 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000356 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000357 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358 fi
359fi
360
361AC_MSG_CHECKING(--with-vim-name argument)
362AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
363 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000364 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365AC_SUBST(VIMNAME)
366AC_MSG_CHECKING(--with-ex-name argument)
367AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
368 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
369 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
370AC_SUBST(EXNAME)
371AC_MSG_CHECKING(--with-view-name argument)
372AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
373 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
374 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
375AC_SUBST(VIEWNAME)
376
377AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100378AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
379 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000380 AC_MSG_RESULT(no))
381
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100382if test "X$RUNTIME_GLOBAL" != "X"; then
383 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" }')
384 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
385 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
386fi
387
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388AC_MSG_CHECKING(--with-modified-by argument)
389AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
390 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
391 AC_MSG_RESULT(no))
392
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200393dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000394AC_MSG_CHECKING(if character set is EBCDIC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100395AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396[ /* TryCompile function for CharSet.
397 Treat any failure as ASCII for compatibility with existing art.
398 Use compile-time rather than run-time tests for cross-compiler
399 tolerance. */
400#if '0'!=240
401make an error "Character set is not EBCDIC"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100402#endif ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403[ # TryCompile action if true
404cf_cv_ebcdic=yes ],
405[ # TryCompile action if false
406cf_cv_ebcdic=no])
407# end of TryCompile ])
408# end of CacheVal CvEbcdic
409AC_MSG_RESULT($cf_cv_ebcdic)
410case "$cf_cv_ebcdic" in #(vi
411 yes) AC_DEFINE(EBCDIC)
412 line_break='"\\n"'
413 ;;
414 *) line_break='"\\012"';;
415esac
416AC_SUBST(line_break)
417
418if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200419dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200420AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000421case $vim_cv_uname_output in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200422 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423 dnl If using cc the environment variable _CC_CCMODE must be
424 dnl set to "1", so that some compiler extensions are enabled.
425 dnl If using c89 the environment variable is named _CC_C89MODE.
426 dnl Note: compile with c89 never tested.
427 if test "$CC" = "cc"; then
428 ccm="$_CC_CCMODE"
429 ccn="CC"
430 else
431 if test "$CC" = "c89"; then
432 ccm="$_CC_C89MODE"
433 ccn="C89"
434 else
435 ccm=1
436 fi
437 fi
438 if test "$ccm" != "1"; then
439 echo ""
440 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200441 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200442 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443 echo " Do:"
444 echo " export _CC_${ccn}MODE=1"
445 echo " and then call configure again."
446 echo "------------------------------------------"
447 exit 1
448 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200449 # Set CFLAGS for configure process.
450 # This will be reset later for config.mk.
451 # Use haltonmsg to force error for missing H files.
452 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
453 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454 AC_MSG_RESULT(yes)
455 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200456 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457 AC_MSG_RESULT(no)
458 ;;
459esac
460fi
461
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200462dnl Set QUOTESED. Needs additional backslashes on zOS
463if test "$zOSUnix" = "yes"; then
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100464 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200465else
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100466 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200467fi
468AC_SUBST(QUOTESED)
469
470
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200471dnl Link with -lsmack for Smack stuff; if not found
472AC_MSG_CHECKING(--disable-smack argument)
473AC_ARG_ENABLE(smack,
474 [ --disable-smack Do not check for Smack support.],
475 , enable_smack="yes")
476if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200477 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200478 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200479else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200480 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200481fi
482if test "$enable_smack" = "yes"; then
zeertzjq6de4e582023-09-30 14:19:14 +0200483 AC_CHECK_HEADER([sys/xattr.h], true, enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200484fi
485if test "$enable_smack" = "yes"; then
486 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
487 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
488 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200489 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200490fi
491if test "$enable_smack" = "yes"; then
492 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200493 [LIBS="$LIBS -lattr"
494 found_smack="yes"
495 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000496fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000497
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200498dnl When smack was found don't search for SELinux
499if test "x$found_smack" = "x"; then
500 dnl Link with -lselinux for SELinux stuff; if not found
501 AC_MSG_CHECKING(--disable-selinux argument)
502 AC_ARG_ENABLE(selinux,
503 [ --disable-selinux Do not check for SELinux support.],
504 , enable_selinux="yes")
505 if test "$enable_selinux" = "yes"; then
506 AC_MSG_RESULT(no)
507 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100508 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200509 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100510 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200511 else
512 AC_MSG_RESULT(yes)
513 fi
514fi
515
Christian Brabandte085dfd2023-09-30 12:49:18 +0200516dnl enable xattr support
517AC_MSG_CHECKING(--enable-xattr argument)
518AC_ARG_ENABLE(xattr,
519 [ --disable-xattr Do not check for XATTR support.],
520 , enable_xattr="yes")
521if test "$enable_xattr" = "yes"; then
522 AC_MSG_RESULT(yes)
zeertzjq6de4e582023-09-30 14:19:14 +0200523 AC_CHECK_HEADER([sys/xattr.h], [AC_DEFINE(HAVE_XATTR)])
Christian Brabandte085dfd2023-09-30 12:49:18 +0200524else
525 AC_MSG_RESULT(no)
526fi
527
Bram Moolenaar071d4272004-06-13 20:20:40 +0000528dnl Check user requested features.
529
530AC_MSG_CHECKING(--with-features argument)
Martin Tournoij25f3a142022-10-08 19:26:41 +0100531AC_ARG_WITH(features, [ --with-features=TYPE tiny, normal or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100533 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534
Martin Tournoij7904fa42022-10-04 16:28:45 +0100535dnl "small" is supported for backwards compatibility, now an alias for "tiny"
Martin Tournoij25f3a142022-10-08 19:26:41 +0100536dnl "big" is supported for backwards compatibility, now an alias for "normal"
Martin Tournoij7904fa42022-10-04 16:28:45 +0100537case "$features" in
Martin Tournoij25f3a142022-10-08 19:26:41 +0100538 small) features="tiny" ;;
539 big) features="normal" ;;
Martin Tournoij7904fa42022-10-04 16:28:45 +0100540esac
541
Bram Moolenaar071d4272004-06-13 20:20:40 +0000542dovimdiff=""
543dogvimdiff=""
544case "$features" in
545 tiny) AC_DEFINE(FEAT_TINY) ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
547 dogvimdiff="installgvimdiff" ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +0000548 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
549 dogvimdiff="installgvimdiff" ;;
550 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
551esac
552
553AC_SUBST(dovimdiff)
554AC_SUBST(dogvimdiff)
555
Martin Tournoij7904fa42022-10-04 16:28:45 +0100556if test "x$features" = "xtiny"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000557 has_eval=no
558else
559 has_eval=yes
560fi
561
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562AC_MSG_CHECKING(--with-compiledby argument)
563AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
564 compiledby="$withval"; AC_MSG_RESULT($withval),
565 compiledby=""; AC_MSG_RESULT(no))
566AC_SUBST(compiledby)
567
568AC_MSG_CHECKING(--disable-xsmp argument)
569AC_ARG_ENABLE(xsmp,
570 [ --disable-xsmp Disable XSMP session management],
571 , enable_xsmp="yes")
572
573if test "$enable_xsmp" = "yes"; then
574 AC_MSG_RESULT(no)
575 AC_MSG_CHECKING(--disable-xsmp-interact argument)
576 AC_ARG_ENABLE(xsmp-interact,
577 [ --disable-xsmp-interact Disable XSMP interaction],
578 , enable_xsmp_interact="yes")
579 if test "$enable_xsmp_interact" = "yes"; then
580 AC_MSG_RESULT(no)
581 AC_DEFINE(USE_XSMP_INTERACT)
582 else
583 AC_MSG_RESULT(yes)
584 fi
585else
586 AC_MSG_RESULT(yes)
587fi
588
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000589AC_MSG_CHECKING([diff feature])
Martin Tournoij7904fa42022-10-04 16:28:45 +0100590if test "x$features" = "xtiny"; then
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000591 AC_MSG_RESULT([disabled in $features version])
592else
593 AC_MSG_RESULT(enabled)
594 AC_DEFINE(FEAT_DIFF)
595 XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
596 AC_SUBST(XDIFF_OBJS_USED)
597fi
598
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200599dnl Check for Lua feature.
600AC_MSG_CHECKING(--enable-luainterp argument)
601AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200602 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200603 [enable_luainterp="no"])
604AC_MSG_RESULT($enable_luainterp)
605
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200606if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000607 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +0100608 AC_MSG_ERROR([cannot use Lua with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100609 fi
610
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200611 dnl -- find the lua executable
612 AC_SUBST(vi_cv_path_lua)
613
614 AC_MSG_CHECKING(--with-lua-prefix argument)
615 AC_ARG_WITH(lua_prefix,
616 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
617 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200618 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200619
620 if test "X$with_lua_prefix" != "X"; then
621 vi_cv_path_lua_pfx="$with_lua_prefix"
622 else
623 AC_MSG_CHECKING(LUA_PREFIX environment var)
624 if test "X$LUA_PREFIX" != "X"; then
625 AC_MSG_RESULT("$LUA_PREFIX")
626 vi_cv_path_lua_pfx="$LUA_PREFIX"
627 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200628 AC_MSG_RESULT([not set, default to /usr])
629 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200630 fi
631 fi
632
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200633 AC_MSG_CHECKING(--with-luajit)
634 AC_ARG_WITH(luajit,
635 [ --with-luajit Link with LuaJIT instead of Lua.],
636 [vi_cv_with_luajit="$withval"],
637 [vi_cv_with_luajit="no"])
638 AC_MSG_RESULT($vi_cv_with_luajit)
639
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200640 LUA_INC=
641 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200642 if test "x$vi_cv_with_luajit" != "xno"; then
643 dnl -- try to find LuaJIT executable
644 AC_PATH_PROG(vi_cv_path_luajit, luajit)
645 if test "X$vi_cv_path_luajit" != "X"; then
646 dnl -- find LuaJIT version
647 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
ichizokbddc6ad2023-08-29 20:54:32 +0200648 [ 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 +0200649 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
650 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
651 vi_cv_path_lua="$vi_cv_path_luajit"
652 vi_cv_version_lua="$vi_cv_version_lua_luajit"
653 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200654 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200655 dnl -- try to find Lua executable
656 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
657 if test "X$vi_cv_path_plain_lua" != "X"; then
658 dnl -- find Lua version
659 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
660 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
661 fi
662 vi_cv_path_lua="$vi_cv_path_plain_lua"
663 vi_cv_version_lua="$vi_cv_version_plain_lua"
664 fi
665 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
666 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 +0100667 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 AC_MSG_RESULT(yes)
669 LUA_INC=/luajit-$vi_cv_version_luajit
670 fi
671 fi
672 if test "X$LUA_INC" = "X"; then
673 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100674 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200675 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200676 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200677 AC_MSG_RESULT(no)
678 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 +0100679 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200680 AC_MSG_RESULT(yes)
681 LUA_INC=/lua$vi_cv_version_lua
682 else
683 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200684
685 # Detect moonjit:
686 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
687 lua_suf=/moonjit-2.3
688 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200689 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200690 if test -d "$dir" ; then
Bram Moolenaara79a8942020-12-17 20:50:25 +0100691 lua_suf=`basename "$dir"`
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200692 lua_suf="/$lua_suf"
693 break
694 fi
695 done
696 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
697 if test -f "$inc_path$lua_suf/lua.h"; then
698 AC_MSG_RESULT(yes)
699 LUA_INC=$lua_suf
700 else
701 AC_MSG_RESULT(no)
702 vi_cv_path_lua_pfx=
703 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200704 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200705 fi
706 fi
707 fi
708
709 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200710 if test "x$vi_cv_with_luajit" != "xno"; then
711 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
712 if test "X$multiarch" != "X"; then
713 lib_multiarch="lib/${multiarch}"
714 else
715 lib_multiarch="lib"
716 fi
717 if test "X$vi_cv_version_lua" = "X"; then
718 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
719 else
720 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
721 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200722 else
Bram Moolenaar869113f2023-03-31 21:29:00 +0100723 dnl Test alternate lib location including version
724 if test -d "${vi_cv_path_lua_pfx}/lib/lua$vi_cv_version_lua"; then
725 LUALIBDIR="lib/lua$vi_cv_version_lua"
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200726 else
Bram Moolenaar869113f2023-03-31 21:29:00 +0100727 LUALIBDIR=lib
728 fi
729 if test "X$LUA_INC" != "X"; then
730 dnl Test alternate name including version
731 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${LUALIBDIR} -llua$vi_cv_version_lua"
732 else
733 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${LUALIBDIR} -llua"
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200734 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200735 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200736 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200737 lua_ok="yes"
738 else
739 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
740 libs_save=$LIBS
741 LIBS="$LIBS $LUA_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +0100742 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200743 AC_MSG_RESULT(yes); lua_ok="yes",
744 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
745 LIBS=$libs_save
746 fi
747 if test "x$lua_ok" = "xyes"; then
748 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
749 LUA_SRC="if_lua.c"
750 LUA_OBJ="objects/if_lua.o"
751 LUA_PRO="if_lua.pro"
752 AC_DEFINE(FEAT_LUA)
753 fi
754 if test "$enable_luainterp" = "dynamic"; then
755 if test "x$vi_cv_with_luajit" != "xno"; then
756 luajit="jit"
757 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200758 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
759 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
760 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200761 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200762 ext="dylib"
763 indexes=""
764 else
765 ext="so"
766 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
767 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
768 if test "X$multiarch" != "X"; then
769 lib_multiarch="lib/${multiarch}"
770 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200771 fi
772 dnl Determine the sover for the current version, but fallback to
773 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200774 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200775 for subdir in "${lib_multiarch}" lib64 lib; do
776 if test -z "$subdir"; then
777 continue
778 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200779 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
780 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
781 for i in $indexes ""; do
782 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200783 sover2="$i"
784 break 3
785 fi
786 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100787 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200788 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200789 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200790 if test "X$sover" = "X"; then
791 AC_MSG_RESULT(no)
792 lua_ok="no"
793 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
794 else
795 AC_MSG_RESULT(yes)
796 lua_ok="yes"
797 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
798 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200799 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200800 AC_DEFINE(DYNAMIC_LUA)
801 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200802 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200803 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200804 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200805 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000806 test "$vim_cv_uname_m_output" = "x86_64"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200807 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
808 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
809 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200810 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200811 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100812 AC_MSG_ERROR([could not configure lua])
813 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200814 AC_SUBST(LUA_SRC)
815 AC_SUBST(LUA_OBJ)
816 AC_SUBST(LUA_PRO)
817 AC_SUBST(LUA_LIBS)
818 AC_SUBST(LUA_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +0000819 AC_SUBST(LUA_CFLAGS_EXTRA)
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200820fi
821
822
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000823dnl Check for MzScheme feature.
824AC_MSG_CHECKING(--enable-mzschemeinterp argument)
825AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200826 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000827 [enable_mzschemeinterp="no"])
828AC_MSG_RESULT($enable_mzschemeinterp)
829
830if test "$enable_mzschemeinterp" = "yes"; then
831 dnl -- find the mzscheme executable
832 AC_SUBST(vi_cv_path_mzscheme)
833
834 AC_MSG_CHECKING(--with-plthome argument)
835 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000836 [ --with-plthome=PLTHOME Use PLTHOME.],
837 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000838 with_plthome="";AC_MSG_RESULT("no"))
839
840 if test "X$with_plthome" != "X"; then
841 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100842 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000843 else
844 AC_MSG_CHECKING(PLTHOME environment var)
845 if test "X$PLTHOME" != "X"; then
846 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000847 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100848 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000849 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000850 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000851 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000852 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000853
854 dnl resolve symbolic link, the executable is often elsewhere and there
855 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000856 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000857 lsout=`ls -l $vi_cv_path_mzscheme`
858 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
859 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
860 fi
861 fi
862
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000863 if test "X$vi_cv_path_mzscheme" != "X"; then
864 dnl -- find where MzScheme thinks it was installed
865 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000866 dnl different versions of MzScheme differ in command line processing
867 dnl use universal approach
868 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000869 (build-path (call-with-values \
870 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000871 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
872 dnl Remove a trailing slash
873 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
874 sed -e 's+/$++'` ])
875 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000876 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000877 fi
878 fi
879
880 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100881 AC_MSG_CHECKING(for racket include directory)
882 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
883 if test "X$SCHEME_INC" != "X"; then
884 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000885 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100886 AC_MSG_RESULT(not found)
887 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
888 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
889 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000890 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000891 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000892 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100893 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
894 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000895 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100896 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000897 else
898 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100899 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
900 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100901 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100902 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100903 else
904 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100905 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
906 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100907 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100908 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100909 else
910 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100911 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
912 if test -f /usr/include/racket/scheme.h; then
913 AC_MSG_RESULT(yes)
914 SCHEME_INC=/usr/include/racket
915 else
916 AC_MSG_RESULT(no)
917 vi_cv_path_mzscheme_pfx=
918 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100919 fi
920 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000921 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000922 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000923 fi
924 fi
925
926 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100927
928 AC_MSG_CHECKING(for racket lib directory)
929 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
930 if test "X$SCHEME_LIB" != "X"; then
931 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000932 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100933 AC_MSG_RESULT(not found)
934 fi
935
936 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
937 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200938 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100939 MZSCHEME_LIBS="-framework Racket"
940 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
941 elif test -f "${path}/libmzscheme3m.a"; then
942 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
943 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
944 elif test -f "${path}/libracket3m.a"; then
945 MZSCHEME_LIBS="${path}/libracket3m.a"
Bram Moolenaar588d2412020-10-03 14:24:19 +0200946 if test -f "${path}/librktio.a"; then
947 MZSCHEME_LIBS="${MZSCHEME_LIBS} ${path}/librktio.a"
948 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100949 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
950 elif test -f "${path}/libracket.a"; then
951 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
952 elif test -f "${path}/libmzscheme.a"; then
953 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
954 else
955 dnl Using shared objects
956 if test -f "${path}/libmzscheme3m.so"; then
957 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
958 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
959 elif test -f "${path}/libracket3m.so"; then
960 MZSCHEME_LIBS="-L${path} -lracket3m"
961 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
962 elif test -f "${path}/libracket.so"; then
963 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
964 else
965 dnl try next until last
966 if test "$path" != "$SCHEME_LIB"; then
967 continue
968 fi
969 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
970 fi
971 if test "$GCC" = yes; then
972 dnl Make Vim remember the path to the library. For when it's not in
973 dnl $LD_LIBRARY_PATH.
974 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000975 elif test "$vim_cv_uname_output" = SunOS &&
976 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100977 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
978 fi
979 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000980 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100981 if test "X$MZSCHEME_LIBS" != "X"; then
982 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000983 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100984 done
985
986 AC_MSG_CHECKING([if racket requires -pthread])
987 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
988 AC_MSG_RESULT(yes)
989 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
990 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
991 else
992 AC_MSG_RESULT(no)
993 fi
994
995 AC_MSG_CHECKING(for racket config directory)
996 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
997 if test "X$SCHEME_CONFIGDIR" != "X"; then
998 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
999 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
1000 else
1001 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001002 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001003
1004 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +01001005 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))))'`
1006 if test "X$SCHEME_COLLECTS" = "X"; then
1007 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
1008 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001009 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +01001010 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
1011 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +01001012 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +01001013 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
1014 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
1015 else
1016 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
1017 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
1018 fi
Bram Moolenaar75676462013-01-30 14:55:42 +01001019 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001020 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001021 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +00001022 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001023 if test "X$SCHEME_COLLECTS" != "X" ; then
1024 AC_MSG_RESULT(${SCHEME_COLLECTS})
1025 else
1026 AC_MSG_RESULT(not found)
1027 fi
1028
1029 AC_MSG_CHECKING(for mzscheme_base.c)
1030 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001031 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001032 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1033 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001034 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001035 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001036 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001037 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1038 MZSCHEME_MOD="++lib scheme/base"
1039 else
1040 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
1041 MZSCHEME_EXTRA="mzscheme_base.c"
1042 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
1043 MZSCHEME_MOD=""
1044 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001045 fi
1046 fi
1047 if test "X$MZSCHEME_EXTRA" != "X" ; then
1048 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001049 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001050 AC_MSG_RESULT(needed)
1051 else
1052 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001053 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001054
Bram Moolenaar9e902192013-07-17 18:58:11 +02001055 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
1056 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
1057
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001058 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001059 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +02001060
1061 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1062 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1063 cflags_save=$CFLAGS
1064 libs_save=$LIBS
1065 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1066 LIBS="$LIBS $MZSCHEME_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001067 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar9e902192013-07-17 18:58:11 +02001068 AC_MSG_RESULT(yes); mzs_ok=yes,
1069 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1070 CFLAGS=$cflags_save
1071 LIBS=$libs_save
1072 if test $mzs_ok = yes; then
1073 MZSCHEME_SRC="if_mzsch.c"
1074 MZSCHEME_OBJ="objects/if_mzsch.o"
1075 MZSCHEME_PRO="if_mzsch.pro"
1076 AC_DEFINE(FEAT_MZSCHEME)
1077 else
1078 MZSCHEME_CFLAGS=
1079 MZSCHEME_LIBS=
1080 MZSCHEME_EXTRA=
1081 MZSCHEME_MZC=
1082 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001083 fi
1084 AC_SUBST(MZSCHEME_SRC)
1085 AC_SUBST(MZSCHEME_OBJ)
1086 AC_SUBST(MZSCHEME_PRO)
1087 AC_SUBST(MZSCHEME_LIBS)
1088 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001089 AC_SUBST(MZSCHEME_EXTRA)
1090 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001091fi
1092
1093
Bram Moolenaar071d4272004-06-13 20:20:40 +00001094AC_MSG_CHECKING(--enable-perlinterp argument)
1095AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001096 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001097 [enable_perlinterp="no"])
1098AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001099if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001100 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001101 AC_MSG_ERROR([cannot use Perl with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001102 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001103 AC_SUBST(vi_cv_path_perl)
1104 AC_PATH_PROG(vi_cv_path_perl, perl)
1105 if test "X$vi_cv_path_perl" != "X"; then
1106 AC_MSG_CHECKING(Perl version)
1107 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1108 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001109 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001110 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1111 badthreads=no
1112 else
1113 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1114 eval `$vi_cv_path_perl -V:use5005threads`
1115 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1116 badthreads=no
1117 else
1118 badthreads=yes
1119 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1120 fi
1121 else
1122 badthreads=yes
1123 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1124 fi
1125 fi
1126 if test $badthreads = no; then
1127 AC_MSG_RESULT(OK)
1128 eval `$vi_cv_path_perl -V:shrpenv`
1129 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1130 shrpenv=""
1131 fi
1132 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1133 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001134 vi_cv_perl_extutils=unknown_perl_extutils_path
Zdenek Dohnal1b1c9f22023-11-02 20:19:06 +01001135
1136 AC_MSG_CHECKING(--with-xsubpp path)
1137 vi_cv_perl_xsubpp=
1138 AC_ARG_WITH(xsubpp, [ --with-xsubpp=PATH path to the xsubpp command], [
1139 if test -f "$withval"
1140 then
1141 vi_cv_perl_xsubpp="$withval"
1142 fi
1143 ])
1144
1145 if test "x$vi_cv_perl_xsubpp" = "x"
1146 then
1147 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1148 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1149 if test -f "$xsubpp_path"; then
1150 vi_cv_perl_xsubpp="$xsubpp_path"
1151 fi
1152 done
1153 fi
1154
1155 if test "x$vi_cv_perl_xsubpp" = "x"
1156 then
1157 AC_MSG_RESULT(empty)
1158 else
1159 AC_MSG_RESULT($vi_cv_perl_xsubpp)
1160 fi
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001161 AC_SUBST(vi_cv_perl_xsubpp)
Zdenek Dohnal1b1c9f22023-11-02 20:19:06 +01001162
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001164 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001165 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Christian Brabandt2f9aef42024-02-12 23:12:26 +01001166 dnl Remove -pipe and -Wxxx, it confuses cproto
1167 dnl Remove -flto[=auto], it causes link failures for clang
Bram Moolenaar071d4272004-06-13 20:20:40 +00001168 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001169 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1170 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001171 -e 's/-pipe //' \
Christian Brabandt2f9aef42024-02-12 23:12:26 +01001172 -e 's/-flto\(=auto\)\? //' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001173 -e 's/-W[[^ ]]*//g' \
1174 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001175 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1176 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1177 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1178 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1179 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1180 dnl a test in configure may fail because of that.
1181 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1182 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1183
1184 dnl check that compiling a simple program still works with the flags
1185 dnl added for Perl.
1186 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1187 cflags_save=$CFLAGS
1188 libs_save=$LIBS
1189 ldflags_save=$LDFLAGS
1190 CFLAGS="$CFLAGS $perlcppflags"
1191 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001192 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193 LDFLAGS="$perlldflags $LDFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001194 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001195 AC_MSG_RESULT(yes); perl_ok=yes,
1196 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1197 CFLAGS=$cflags_save
1198 LIBS=$libs_save
1199 LDFLAGS=$ldflags_save
1200 if test $perl_ok = yes; then
1201 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001202 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001203 fi
1204 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001205 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001206 LDFLAGS="$perlldflags $LDFLAGS"
1207 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208 fi
1209 PERL_LIBS=$perllibs
1210 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1211 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1212 PERL_PRO="if_perl.pro if_perlsfio.pro"
1213 AC_DEFINE(FEAT_PERL)
1214 fi
1215 fi
1216 else
1217 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1218 fi
1219 fi
1220
Bram Moolenaard0573012017-10-28 21:11:06 +02001221 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001222 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001223 dir=/System/Library/Perl
1224 darwindir=$dir/darwin
1225 if test -d $darwindir; then
1226 PERL=/usr/bin/perl
1227 else
1228 dnl Mac OS X 10.3
1229 dir=/System/Library/Perl/5.8.1
1230 darwindir=$dir/darwin-thread-multi-2level
1231 if test -d $darwindir; then
1232 PERL=/usr/bin/perl
1233 fi
1234 fi
1235 if test -n "$PERL"; then
1236 PERL_DIR="$dir"
1237 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1238 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1239 PERL_LIBS="-L$darwindir/CORE -lperl"
1240 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001241 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1242 dnl be included if requested by passing --with-mac-arch to
1243 dnl configure, so strip these flags first (if present)
1244 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1245 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 +00001246 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001247 if test "$enable_perlinterp" = "dynamic"; then
1248 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1249 AC_DEFINE(DYNAMIC_PERL)
1250 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
Christian Brabandt55460da2023-08-29 21:31:28 +02001251 PERL_LIBS=""
Bram Moolenaare06c1882010-07-21 22:05:20 +02001252 fi
1253 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001254
1255 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1256 AC_MSG_ERROR([could not configure perl])
1257 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001258fi
1259AC_SUBST(shrpenv)
1260AC_SUBST(PERL_SRC)
1261AC_SUBST(PERL_OBJ)
1262AC_SUBST(PERL_PRO)
1263AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001264AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001265AC_SUBST(PERL_LIBS)
1266
1267AC_MSG_CHECKING(--enable-pythoninterp argument)
1268AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001269 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001270 [enable_pythoninterp="no"])
1271AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001272if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001273 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001274 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001275 fi
1276
Bram Moolenaar071d4272004-06-13 20:20:40 +00001277 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001278 AC_MSG_CHECKING(--with-python-command argument)
1279 AC_SUBST(vi_cv_path_python)
1280 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1281 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1282 AC_MSG_RESULT(no))
1283
1284 if test "X$vi_cv_path_python" = "X"; then
1285 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1286 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001287 if test "X$vi_cv_path_python" != "X"; then
1288
1289 dnl -- get its version number
1290 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1291 [[vi_cv_var_python_version=`
1292 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1293 ]])
1294
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001295 dnl -- it must be at least version 2.3
1296 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001298 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001299 then
1300 AC_MSG_RESULT(yep)
1301
1302 dnl -- find where python thinks it was installed
1303 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1304 [ vi_cv_path_python_pfx=`
1305 ${vi_cv_path_python} -c \
1306 "import sys; print sys.prefix"` ])
1307
1308 dnl -- and where it thinks it runs
1309 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1310 [ vi_cv_path_python_epfx=`
1311 ${vi_cv_path_python} -c \
1312 "import sys; print sys.exec_prefix"` ])
1313
1314 dnl -- python's internal library path
1315
1316 AC_CACHE_VAL(vi_cv_path_pythonpath,
1317 [ vi_cv_path_pythonpath=`
1318 unset PYTHONPATH;
1319 ${vi_cv_path_python} -c \
1320 "import sys, string; print string.join(sys.path,':')"` ])
1321
1322 dnl -- where the Python implementation library archives are
1323
1324 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001325 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001326 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327
1328 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1329 [
1330 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001331 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1332 if test -d "$d" && test -f "$d/config.c"; then
1333 vi_cv_path_python_conf="$d"
1334 else
1335 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1336 for subdir in lib64 lib share; do
1337 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1338 if test -d "$d" && test -f "$d/config.c"; then
1339 vi_cv_path_python_conf="$d"
1340 fi
1341 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001342 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001343 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001344 ])
1345
1346 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1347
1348 if test "X$PYTHON_CONFDIR" = "X"; then
1349 AC_MSG_RESULT([can't find it!])
1350 else
1351
1352 dnl -- we need to examine Python's config/Makefile too
1353 dnl see what the interpreter is built from
1354 AC_CACHE_VAL(vi_cv_path_python_plibs,
1355 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001356 pwd=`pwd`
1357 tmp_mkf="$pwd/config-PyMake$$"
1358 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001359__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001360 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361 @echo "python_LIBS='$(LIBS)'"
1362 @echo "python_SYSLIBS='$(SYSLIBS)'"
1363 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001364 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001365 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001366 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1367 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1368 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001369eof
1370 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001371 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1372 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001373 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001374 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1375 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001376 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1377 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1378 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001379 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001380 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001381 dnl -- Check if the path contained in python_LINKFORSHARED is
1382 dnl usable for vim build. If not, make and try other
1383 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001384 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001385 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1386 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1387 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1388 dnl -- The path looks relative. Guess the absolute one using
1389 dnl the prefix and try that.
1390 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1391 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1392 dnl -- A last resort.
1393 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1394 dnl -- No check is done. The last word is left to the
1395 dnl "sanity" test on link flags that follows shortly.
1396 fi
1397 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1398 fi
1399 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001400 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 +00001401 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1402 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1403 fi
1404 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001405 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001406 [
1407 if test "X$python_DLLLIBRARY" != "X"; then
1408 vi_cv_dll_name_python="$python_DLLLIBRARY"
1409 else
1410 vi_cv_dll_name_python="$python_INSTSONAME"
1411 fi
1412 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001413
1414 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1415 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001416 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001417 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001418 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 +00001419 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001420 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001421 dnl Define PYTHON_HOME if --with-python-config-dir was used
1422 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1423
1424 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001425 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001426 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001427
1428 dnl On FreeBSD linking with "-pthread" is required to use threads.
1429 dnl _THREAD_SAFE must be used for compiling then.
1430 dnl The "-pthread" is added to $LIBS, so that the following check for
1431 dnl sigaltstack() will look in libc_r (it's there in libc!).
1432 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1433 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1434 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1435 AC_MSG_CHECKING([if -pthread should be used])
1436 threadsafe_flag=
1437 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001438 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001439 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001440 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001441 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001442 threadsafe_flag="-D_THREAD_SAFE"
1443 thread_lib="-pthread"
1444 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001445 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001446 threadsafe_flag="-pthreads"
1447 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001448 fi
1449 libs_save_old=$LIBS
1450 if test -n "$threadsafe_flag"; then
1451 cflags_save=$CFLAGS
1452 CFLAGS="$CFLAGS $threadsafe_flag"
1453 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001454 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001455 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001456 AC_MSG_RESULT(no); LIBS=$libs_save_old
1457 )
1458 CFLAGS=$cflags_save
1459 else
1460 AC_MSG_RESULT(no)
1461 fi
1462
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001463 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001464 dnl added for Python.
1465 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1466 cflags_save=$CFLAGS
1467 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001468 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001469 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001470 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001471 AC_MSG_RESULT(yes); python_ok=yes,
1472 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1473 CFLAGS=$cflags_save
1474 LIBS=$libs_save
1475 if test $python_ok = yes; then
1476 AC_DEFINE(FEAT_PYTHON)
1477 else
1478 LIBS=$libs_save_old
1479 PYTHON_SRC=
1480 PYTHON_OBJ=
1481 PYTHON_LIBS=
1482 PYTHON_CFLAGS=
1483 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001484 fi
1485 else
1486 AC_MSG_RESULT(too old)
1487 fi
1488 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001489
1490 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1491 AC_MSG_ERROR([could not configure python])
1492 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001493fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001494
Bram Moolenaar071d4272004-06-13 20:20:40 +00001495AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001496AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001497AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001498AC_SUBST(PYTHON_SRC)
1499AC_SUBST(PYTHON_OBJ)
1500
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001501
1502AC_MSG_CHECKING(--enable-python3interp argument)
1503AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001504 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001505 [enable_python3interp="no"])
1506AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001507if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001508 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001509 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001510 fi
1511
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001512 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001513 AC_MSG_CHECKING(--with-python3-command argument)
1514 AC_SUBST(vi_cv_path_python3)
1515 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1516 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1517 AC_MSG_RESULT(no))
1518
1519 if test "X$vi_cv_path_python3" = "X"; then
1520 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1521 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001522 if test "X$vi_cv_path_python3" != "X"; then
1523
1524 dnl -- get its version number
1525 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1526 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001527 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001528 ]])
1529
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001530 dnl -- it must be at least version 3
1531 AC_MSG_CHECKING(Python is 3.0 or better)
1532 if ${vi_cv_path_python3} -c \
1533 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1534 then
1535 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001536
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001537 dnl -- get the stable ABI version if passed in
1538 AC_MSG_CHECKING(--with-python3-stable-abi argument)
1539 AC_SUBST(vi_cv_var_python3_stable_abi)
1540 AC_ARG_WITH(python3-stable-abi, [ --with-python3-stable-abi=VERSION stable ABI version to target (e.g. 3.8)],
1541 vi_cv_var_python3_stable_abi="$withval"; AC_MSG_RESULT($vi_cv_var_python3_stable_abi),
1542 AC_MSG_RESULT(no))
1543 if test "X$vi_cv_var_python3_stable_abi" != "X"; then
1544 AC_CACHE_VAL(vi_cv_var_python3_stable_abi_hex,
1545 [
1546 vi_cv_var_python3_stable_abi_hex=`
1547 ${vi_cv_path_python3} -c \
1548 "major_minor='${vi_cv_var_python3_stable_abi}'.split('.'); print('0x{0:X}'.format( (int(major_minor.__getitem__(0))<<24) + (int(major_minor.__getitem__(1))<<16) ))"` ])
Yee Cheng Chine7d79eb2023-09-16 13:38:26 +02001549 if test "X$vi_cv_var_python3_stable_abi_hex" = "X"; then
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001550 AC_MSG_ERROR([can't parse Python 3 stable ABI version. It should be "<major>.<minor>"])
1551 fi
1552 fi
1553
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001554 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1555 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001556 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001557 vi_cv_var_python3_abiflags=
1558 if ${vi_cv_path_python3} -c \
1559 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1560 then
Bram Moolenaare5303952022-06-19 17:05:47 +01001561 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001562 "import sys; print(sys.abiflags)"`
1563 fi ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001564
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001565 dnl -- find where python3 thinks it was installed
1566 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1567 [ vi_cv_path_python3_pfx=`
1568 ${vi_cv_path_python3} -c \
1569 "import sys; print(sys.prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001570
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001571 dnl -- and where it thinks it runs
1572 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1573 [ vi_cv_path_python3_epfx=`
1574 ${vi_cv_path_python3} -c \
1575 "import sys; print(sys.exec_prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001576
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001577 dnl -- python3's include path
1578 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_include,
1579 [ vi_cv_path_python3_include=`
1580 ${vi_cv_path_python3} -c \
1581 "import sysconfig; print(sysconfig.get_path(\"include\"))"` ])
1582
1583 dnl -- python3's platform include path
1584 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_platinclude,
1585 [ vi_cv_path_python3_platinclude=`
1586 ${vi_cv_path_python3} -c \
1587 "import sysconfig; print(sysconfig.get_path(\"platinclude\"))"` ])
1588
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001589 dnl -- python3's internal library path
Bram Moolenaare5303952022-06-19 17:05:47 +01001590
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001591 AC_CACHE_VAL(vi_cv_path_python3path,
1592 [ vi_cv_path_python3path=`
1593 unset PYTHONPATH;
1594 ${vi_cv_path_python3} -c \
1595 "import sys, string; print(':'.join(sys.path))"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001596
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001597 dnl -- where the Python implementation library archives are
Bram Moolenaare5303952022-06-19 17:05:47 +01001598
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001599 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001600 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001601 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaare5303952022-06-19 17:05:47 +01001602
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001603 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1604 [
1605 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001606 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001607 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1608 if test "x$d" = "x"; then
1609 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1610 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001611 if test -d "$d" && test -f "$d/config.c"; then
1612 vi_cv_path_python3_conf="$d"
1613 else
1614 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1615 for subdir in lib64 lib share; do
1616 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1617 if test -d "$d" && test -f "$d/config.c"; then
1618 vi_cv_path_python3_conf="$d"
1619 fi
1620 done
1621 done
1622 fi
1623 ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001624
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001625 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
Bram Moolenaare5303952022-06-19 17:05:47 +01001626
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001627 if test "X$PYTHON3_CONFDIR" = "X"; then
1628 AC_MSG_RESULT([can't find it!])
1629 else
Bram Moolenaare5303952022-06-19 17:05:47 +01001630
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001631 dnl -- we need to examine Python's config/Makefile too
1632 dnl see what the interpreter is built from
1633 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1634 [
1635 pwd=`pwd`
1636 tmp_mkf="$pwd/config-PyMake$$"
1637 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001638__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001639 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001640 @echo "python3_LIBS='$(LIBS)'"
1641 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001642 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001643 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001644 @echo "python3_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001645eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001646 dnl -- delete the lines from make about Entering/Leaving directory
1647 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1648 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001649 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 +02001650 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1651 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1652 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1653 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1654 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001655 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001656 [
1657 if test "X$python3_DLLLIBRARY" != "X"; then
1658 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001659 elif test "X$python3_PYTHONFRAMEWORKPREFIX" != "X"; then
1660 vi_cv_dll_name_python3="${python3_PYTHONFRAMEWORKPREFIX}/${python3_INSTSONAME}"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001661 else
1662 vi_cv_dll_name_python3="$python3_INSTSONAME"
1663 fi
1664 ])
1665
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001666 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001667 if test "${vi_cv_path_python3_include}" = "${vi_cv_path_python3_platinclude}"; then
1668 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001669 else
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001670 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include} -I${vi_cv_path_python3_platinclude}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001671 fi
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001672 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
1673 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1674 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1675 fi
1676 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1677 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPy_LIMITED_API=${vi_cv_var_python3_stable_abi_hex}"
1678 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001679 PYTHON3_SRC="if_python3.c"
1680 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaare5303952022-06-19 17:05:47 +01001681
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001682 dnl On FreeBSD linking with "-pthread" is required to use threads.
1683 dnl _THREAD_SAFE must be used for compiling then.
1684 dnl The "-pthread" is added to $LIBS, so that the following check for
1685 dnl sigaltstack() will look in libc_r (it's there in libc!).
1686 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1687 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1688 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1689 AC_MSG_CHECKING([if -pthread should be used])
1690 threadsafe_flag=
1691 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001692 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001693 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001694 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001695 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001696 threadsafe_flag="-D_THREAD_SAFE"
1697 thread_lib="-pthread"
1698 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001699 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001700 threadsafe_flag="-pthreads"
1701 fi
1702 fi
1703 libs_save_old=$LIBS
1704 if test -n "$threadsafe_flag"; then
1705 cflags_save=$CFLAGS
1706 CFLAGS="$CFLAGS $threadsafe_flag"
1707 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001708 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001709 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1710 AC_MSG_RESULT(no); LIBS=$libs_save_old
1711 )
1712 CFLAGS=$cflags_save
1713 else
1714 AC_MSG_RESULT(no)
1715 fi
Bram Moolenaare5303952022-06-19 17:05:47 +01001716
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001717 dnl check that compiling a simple program still works with the flags
1718 dnl added for Python.
1719 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1720 cflags_save=$CFLAGS
1721 libs_save=$LIBS
1722 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1723 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001724 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001725 AC_MSG_RESULT(yes); python3_ok=yes,
1726 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1727 CFLAGS=$cflags_save
1728 LIBS=$libs_save
1729 if test "$python3_ok" = yes; then
1730 AC_DEFINE(FEAT_PYTHON3)
1731 else
1732 LIBS=$libs_save_old
1733 PYTHON3_SRC=
1734 PYTHON3_OBJ=
1735 PYTHON3_LIBS=
1736 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001737 fi
1738 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001739 else
1740 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001741 fi
1742 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001743 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1744 AC_MSG_ERROR([could not configure python3])
1745 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001746fi
1747
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001748AC_SUBST(PYTHON3_LIBS)
1749AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001750AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001751AC_SUBST(PYTHON3_SRC)
1752AC_SUBST(PYTHON3_OBJ)
1753
1754dnl if python2.x and python3.x are enabled one can only link in code
Bram Moolenaare5303952022-06-19 17:05:47 +01001755dnl with dlopen(), dlsym(), dlclose()
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001756if test "$python_ok" = yes && test "$python3_ok" = yes; then
1757 AC_DEFINE(DYNAMIC_PYTHON)
1758 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001759 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1760 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1761 fi
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001762 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001763 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001764 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001765 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001766 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001767 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001768 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001769 #include <dlfcn.h>
1770 /* If this program fails, then RTLD_GLOBAL is needed.
1771 * RTLD_GLOBAL will be used and then it is not possible to
1772 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001773 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001774 */
1775
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001776 static int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001777 {
1778 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001779 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001780 if (pylib != 0)
1781 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001782 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001783 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1784 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1785 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001786 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001787 (*init)();
1788 needed = (*simple)("import termios") == -1;
1789 (*final)();
1790 dlclose(pylib);
1791 }
1792 return !needed;
1793 }
1794
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001795 int main()
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001796 {
1797 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001798 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001799 not_needed = 1;
1800 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001801 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001802 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001803
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001804 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001805 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001806
1807 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1808 cflags_save=$CFLAGS
1809 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001810 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001811 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001812 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001813 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001814 #include <dlfcn.h>
1815 #include <wchar.h>
1816 /* If this program fails, then RTLD_GLOBAL is needed.
1817 * RTLD_GLOBAL will be used and then it is not possible to
1818 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001819 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001820 */
1821
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001822 static int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001823 {
1824 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001825 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001826 if (pylib != 0)
1827 {
1828 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1829 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1830 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1831 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1832 (*pfx)(prefix);
1833 (*init)();
1834 needed = (*simple)("import termios") == -1;
1835 (*final)();
1836 dlclose(pylib);
1837 }
1838 return !needed;
1839 }
1840
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001841 int main()
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001842 {
1843 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001844 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001845 not_needed = 1;
1846 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001847 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001848 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1849
1850 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001851 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001852
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001853 PYTHON_SRC="if_python.c"
1854 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001855 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001856 PYTHON_LIBS=
1857 PYTHON3_SRC="if_python3.c"
1858 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001859 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001860 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001861elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1862 AC_DEFINE(DYNAMIC_PYTHON)
1863 PYTHON_SRC="if_python.c"
1864 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001865 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001866 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001867elif test "$python_ok" = yes; then
1868 dnl Check that adding -fPIE works. It may be needed when using a static
1869 dnl Python library.
1870 AC_MSG_CHECKING([if -fPIE can be added for Python])
1871 cflags_save=$CFLAGS
1872 libs_save=$LIBS
1873 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1874 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001875 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001876 AC_MSG_RESULT(yes); fpie_ok=yes,
1877 AC_MSG_RESULT(no); fpie_ok=no)
1878 CFLAGS=$cflags_save
1879 LIBS=$libs_save
1880 if test $fpie_ok = yes; then
1881 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1882 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001883elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1884 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001885 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1886 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1887 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001888 PYTHON3_SRC="if_python3.c"
1889 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001890 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001891 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001892elif test "$python3_ok" = yes; then
1893 dnl Check that adding -fPIE works. It may be needed when using a static
1894 dnl Python library.
1895 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1896 cflags_save=$CFLAGS
1897 libs_save=$LIBS
1898 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1899 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001900 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001901 AC_MSG_RESULT(yes); fpie_ok=yes,
1902 AC_MSG_RESULT(no); fpie_ok=no)
1903 CFLAGS=$cflags_save
1904 LIBS=$libs_save
1905 if test $fpie_ok = yes; then
1906 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1907 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001908fi
1909
Bram Moolenaar071d4272004-06-13 20:20:40 +00001910AC_MSG_CHECKING(--enable-tclinterp argument)
1911AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001912 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001913 [enable_tclinterp="no"])
1914AC_MSG_RESULT($enable_tclinterp)
1915
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001916if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001917
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001918 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001919 AC_MSG_CHECKING(--with-tclsh argument)
1920 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1921 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001922 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001923 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1924 AC_SUBST(vi_cv_path_tcl)
1925
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001926 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1927 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1928 tclsh_name="tclsh8.4"
1929 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1930 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001931 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001932 tclsh_name="tclsh8.2"
1933 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1934 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001935 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1936 tclsh_name="tclsh8.0"
1937 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1938 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001939 dnl still didn't find it, try without version number
1940 if test "X$vi_cv_path_tcl" = "X"; then
1941 tclsh_name="tclsh"
1942 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1943 fi
1944 if test "X$vi_cv_path_tcl" != "X"; then
1945 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001946 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001947 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1948 AC_MSG_RESULT($tclver - OK);
1949 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 +01001950 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001951
1952 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001953 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001954 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 +00001955 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001956 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001957 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001958 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1959 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 +00001960 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001961 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001962 for try in $tclinc; do
1963 if test -f "$try/tcl.h"; then
1964 AC_MSG_RESULT($try/tcl.h)
1965 TCL_INC=$try
1966 break
1967 fi
1968 done
1969 if test -z "$TCL_INC"; then
1970 AC_MSG_RESULT(<not found>)
1971 SKIP_TCL=YES
1972 fi
1973 if test -z "$SKIP_TCL"; then
1974 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001975 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001976 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001977 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001978 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001979 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001980 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001981 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1982 tclcnf=`echo $tclinc | sed s/include/lib/g`
1983 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001984 fi
1985 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001986 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001987 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001988 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001989 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001990 if test "$enable_tclinterp" = "dynamic"; then
1991 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1992 else
1993 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1994 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001995 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001996 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001997 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 +00001998 break
1999 fi
2000 done
2001 if test -z "$TCL_LIBS"; then
2002 AC_MSG_RESULT(<not found>)
2003 AC_MSG_CHECKING(for Tcl library by myself)
2004 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00002005 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002006 for ext in .so .a ; do
2007 for ver in "" $tclver ; do
2008 for try in $tcllib ; do
2009 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01002010 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002011 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01002012 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002013 if test "$vim_cv_uname_output" = SunOS &&
2014 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002015 TCL_LIBS="$TCL_LIBS -R $try"
2016 fi
2017 break 3
2018 fi
2019 done
2020 done
2021 done
2022 if test -z "$TCL_LIBS"; then
2023 AC_MSG_RESULT(<not found>)
2024 SKIP_TCL=YES
2025 fi
2026 fi
2027 if test -z "$SKIP_TCL"; then
2028 AC_DEFINE(FEAT_TCL)
2029 TCL_SRC=if_tcl.c
2030 TCL_OBJ=objects/if_tcl.o
2031 TCL_PRO=if_tcl.pro
2032 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
2033 fi
2034 fi
2035 else
2036 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
2037 fi
2038 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01002039 if test "$enable_tclinterp" = "dynamic"; then
2040 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
2041 AC_DEFINE(DYNAMIC_TCL)
2042 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
2043 fi
2044 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002045 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
2046 AC_MSG_ERROR([could not configure Tcl])
2047 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002048fi
2049AC_SUBST(TCL_SRC)
2050AC_SUBST(TCL_OBJ)
2051AC_SUBST(TCL_PRO)
2052AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002053AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002054AC_SUBST(TCL_LIBS)
2055
2056AC_MSG_CHECKING(--enable-rubyinterp argument)
2057AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002058 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 [enable_rubyinterp="no"])
2060AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002061if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002062 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002063 AC_MSG_ERROR([cannot use Ruby with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01002064 fi
2065
Bram Moolenaar165641d2010-02-17 16:23:09 +01002066 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002067 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02002068 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
2069 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
2070 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01002071 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002072 if test "X$vi_cv_path_ruby" != "X"; then
2073 AC_MSG_CHECKING(Ruby version)
K.Takata236ccbf2022-09-22 16:12:06 +01002074 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 +00002075 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02002076 AC_MSG_CHECKING(Ruby rbconfig)
2077 ruby_rbconfig="RbConfig"
2078 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
2079 ruby_rbconfig="Config"
2080 fi
2081 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002082 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002083 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 +00002084 if test "X$rubyhdrdir" != "X"; then
2085 AC_MSG_RESULT($rubyhdrdir)
2086 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002087 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2088 if test -d "$rubyarchdir"; then
2089 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002090 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002091 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002092 if test "X$rubyversion" = "X"; then
K.Takata236ccbf2022-09-22 16:12:06 +01002093 rubyversion=`$vi_cv_path_ruby -e "print RUBY_VERSION.gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002094 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002095 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002096 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002097 if test "X$rubylibs" != "X"; then
2098 RUBY_LIBS="$rubylibs"
2099 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002100 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2101 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002102 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Illia Bobyre379e212023-09-30 22:59:27 +02002103 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby" >/dev/null; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002104 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2105 elif test "$librubyarg" = "libruby.a"; then
2106 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2107 librubyarg="-lruby"
2108 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002109 fi
2110
2111 if test "X$librubyarg" != "X"; then
2112 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2113 fi
Zdenek Dohnal1d822af2022-11-23 12:06:08 +00002114
2115 dnl Here the Ruby LDFLAGS used to be added to LDFLAGS, but that turns
2116 dnl out to cause trouble and was removed.
2117
Bram Moolenaar071d4272004-06-13 20:20:40 +00002118 RUBY_SRC="if_ruby.c"
2119 RUBY_OBJ="objects/if_ruby.o"
2120 RUBY_PRO="if_ruby.pro"
2121 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002122 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002123 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002124 if test -z "$libruby_soname"; then
2125 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2126 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002127 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002128 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002129 RUBY_LIBS=
2130 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002131 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2132 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2133 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002134 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002135 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002136 fi
2137 else
K.Takata236ccbf2022-09-22 16:12:06 +01002138 AC_MSG_RESULT(too old; need Ruby version 1.9.1 or later)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002139 fi
2140 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002141
2142 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2143 AC_MSG_ERROR([could not configure Ruby])
2144 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002145fi
2146AC_SUBST(RUBY_SRC)
2147AC_SUBST(RUBY_OBJ)
2148AC_SUBST(RUBY_PRO)
2149AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002150AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002151AC_SUBST(RUBY_LIBS)
2152
2153AC_MSG_CHECKING(--enable-cscope argument)
2154AC_ARG_ENABLE(cscope,
2155 [ --enable-cscope Include cscope interface.], ,
2156 [enable_cscope="no"])
2157AC_MSG_RESULT($enable_cscope)
2158if test "$enable_cscope" = "yes"; then
2159 AC_DEFINE(FEAT_CSCOPE)
2160fi
2161
Bram Moolenaar071d4272004-06-13 20:20:40 +00002162AC_MSG_CHECKING(--disable-netbeans argument)
2163AC_ARG_ENABLE(netbeans,
2164 [ --disable-netbeans Disable NetBeans integration support.],
2165 , [enable_netbeans="yes"])
2166if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002167 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002168 AC_MSG_RESULT([cannot use NetBeans with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002169 enable_netbeans="no"
2170 else
2171 AC_MSG_RESULT(no)
2172 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002173else
2174 AC_MSG_RESULT(yes)
2175fi
2176
2177AC_MSG_CHECKING(--disable-channel argument)
2178AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002179 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002180 , [enable_channel="yes"])
2181if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002182 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002183 AC_MSG_RESULT([cannot use channels with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002184 enable_channel="no"
2185 else
2186 AC_MSG_RESULT(no)
2187 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002188else
2189 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002190 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002191 enable_netbeans="no"
2192 else
2193 AC_MSG_RESULT(yes)
2194 fi
2195fi
2196
Bram Moolenaar16435482016-01-24 21:31:54 +01002197if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002198 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002199 if test "x$HAIKU" = "xyes"; then
2200 AC_CHECK_LIB(network, socket)
2201 else
2202 AC_CHECK_LIB(socket, socket)
2203 fi
2204
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002205 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002206 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002207#include <stdio.h>
2208#include <stdlib.h>
2209#include <stdarg.h>
2210#include <fcntl.h>
2211#include <netdb.h>
2212#include <netinet/in.h>
2213#include <errno.h>
2214#include <sys/types.h>
2215#include <sys/socket.h>
2216 /* Check bitfields */
2217 struct nbbuf {
2218 unsigned int initDone:1;
2219 unsigned short signmaplen;
2220 };
2221 ], [
2222 /* Check creating a socket. */
2223 struct sockaddr_in server;
2224 struct addrinfo *res;
2225 (void)socket(AF_INET, SOCK_STREAM, 0);
2226 (void)htons(100);
2227 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2228 if (errno == ECONNREFUSED)
2229 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2230 (void)freeaddrinfo(res);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002231 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002232 [vim_cv_ipv6_networking="yes"],
2233 [vim_cv_ipv6_networking="no"])])
2234
2235 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2236 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002237 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002238 else
2239 dnl On Solaris we need the nsl library.
2240 AC_CHECK_LIB(nsl, gethostbyname)
2241 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002242 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002243#include <stdio.h>
2244#include <stdlib.h>
2245#include <stdarg.h>
2246#include <fcntl.h>
2247#include <netdb.h>
2248#include <netinet/in.h>
2249#include <errno.h>
2250#include <sys/types.h>
2251#include <sys/socket.h>
2252 /* Check bitfields */
2253 struct nbbuf {
2254 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002255 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002256 };
2257 ], [
2258 /* Check creating a socket. */
2259 struct sockaddr_in server;
2260 (void)socket(AF_INET, SOCK_STREAM, 0);
2261 (void)htons(100);
2262 (void)gethostbyname("microsoft.com");
2263 if (errno == ECONNREFUSED)
2264 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002265 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002266 [vim_cv_ipv4_networking="yes"],
2267 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2268 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002269fi
2270if test "$enable_netbeans" = "yes"; then
2271 AC_DEFINE(FEAT_NETBEANS_INTG)
2272 NETBEANS_SRC="netbeans.c"
2273 AC_SUBST(NETBEANS_SRC)
2274 NETBEANS_OBJ="objects/netbeans.o"
2275 AC_SUBST(NETBEANS_OBJ)
2276fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002277if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002278 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002279 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002280 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002281 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002282 AC_SUBST(CHANNEL_OBJ)
2283fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002284
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002285AC_MSG_CHECKING(--enable-terminal argument)
2286AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002287 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002288 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002289if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002290 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002291 AC_MSG_RESULT([cannot use terminal emulator with tiny features])
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002292 enable_terminal="no"
2293 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002294 if test "$enable_terminal" = "auto"; then
2295 enable_terminal="yes"
2296 AC_MSG_RESULT(defaulting to yes)
2297 else
2298 AC_MSG_RESULT(yes)
2299 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002300 fi
2301else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002302 if test "$enable_terminal" = "auto"; then
2303 enable_terminal="no"
2304 AC_MSG_RESULT(defaulting to no)
2305 else
2306 AC_MSG_RESULT(no)
2307 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002308fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002309if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002310 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002311 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 +02002312 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002313 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 +02002314 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002315 TERM_TEST="test_libvterm"
2316 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002317fi
2318
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002319AC_MSG_CHECKING(--enable-autoservername argument)
2320AC_ARG_ENABLE(autoservername,
2321 [ --enable-autoservername Automatically define servername at vim startup.], ,
2322 [enable_autoservername="no"])
2323AC_MSG_RESULT($enable_autoservername)
2324if test "$enable_autoservername" = "yes"; then
2325 AC_DEFINE(FEAT_AUTOSERVERNAME)
2326fi
2327
Bram Moolenaar071d4272004-06-13 20:20:40 +00002328AC_MSG_CHECKING(--enable-multibyte argument)
2329AC_ARG_ENABLE(multibyte,
2330 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002331 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002332AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002333if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002334 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2335 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002336fi
2337
Martin Tournoij25f3a142022-10-08 19:26:41 +01002338dnl Right-to-Left language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002339dnl unless ENABLE_RIGHTLEFT is undefined.
2340AC_MSG_CHECKING(--disable-rightleft argument)
2341AC_ARG_ENABLE(rightleft,
2342 [ --disable-rightleft Do not include Right-to-Left language support.],
2343 , [enable_rightleft="yes"])
2344if test "$enable_rightleft" = "yes"; then
2345 AC_MSG_RESULT(no)
2346else
2347 AC_MSG_RESULT(yes)
2348 AC_DEFINE(DISABLE_RIGHTLEFT)
2349fi
2350
Martin Tournoij25f3a142022-10-08 19:26:41 +01002351dnl Arabic language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002352dnl unless ENABLE_ARABIC is undefined.
2353AC_MSG_CHECKING(--disable-arabic argument)
2354AC_ARG_ENABLE(arabic,
2355 [ --disable-arabic Do not include Arabic language support.],
2356 , [enable_arabic="yes"])
2357if test "$enable_arabic" = "yes"; then
2358 AC_MSG_RESULT(no)
2359else
2360 AC_MSG_RESULT(yes)
2361 AC_DEFINE(DISABLE_ARABIC)
2362fi
2363
Bram Moolenaar14184a32019-02-16 15:10:30 +01002364dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002365AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002366 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002367
Bram Moolenaar071d4272004-06-13 20:20:40 +00002368AC_MSG_CHECKING(--enable-xim argument)
2369AC_ARG_ENABLE(xim,
2370 [ --enable-xim Include XIM input support.],
2371 AC_MSG_RESULT($enable_xim),
2372 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002373
2374AC_MSG_CHECKING(--enable-fontset argument)
2375AC_ARG_ENABLE(fontset,
2376 [ --enable-fontset Include X fontset output support.], ,
2377 [enable_fontset="no"])
2378AC_MSG_RESULT($enable_fontset)
2379dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2380
2381test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002382test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002383if test "$with_x" = no; then
2384 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2385else
2386 dnl Do this check early, so that its failure can override user requests.
2387
2388 AC_PATH_PROG(xmkmfpath, xmkmf)
2389
2390 AC_PATH_XTRA
2391
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002392 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002393 dnl be compiled with a special option.
2394 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002395 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002396 CFLAGS="$CFLAGS -W c,dll"
2397 LDFLAGS="$LDFLAGS -W l,dll"
2398 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2399 fi
2400
2401 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002402 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002403
2404 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2405 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2406 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2407 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002408 if test "$vim_cv_uname_output" = SunOS &&
2409 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002410 X_LIBS="$X_LIBS -R $x_libraries"
2411 fi
2412 fi
2413
2414 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2415 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2416 AC_MSG_RESULT(Corrected X includes to $x_includes)
2417 X_CFLAGS="$X_CFLAGS -I$x_includes"
2418 fi
2419
2420 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2421 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2422 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2423 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2424 dnl Same for "-R/usr/lib ".
2425 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2426
2427
2428 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002429 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2430 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002431 AC_MSG_CHECKING(if X11 header files can be found)
2432 cflags_save=$CFLAGS
2433 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002434 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
2435#include <X11/Intrinsic.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002436 AC_MSG_RESULT(yes),
2437 AC_MSG_RESULT(no); no_x=yes)
2438 CFLAGS=$cflags_save
2439
2440 if test "${no_x-no}" = yes; then
2441 with_x=no
2442 else
2443 AC_DEFINE(HAVE_X11)
2444 X_LIB="-lXt -lX11";
2445 AC_SUBST(X_LIB)
2446
2447 ac_save_LDFLAGS="$LDFLAGS"
2448 LDFLAGS="-L$x_libraries $LDFLAGS"
2449
2450 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2451 dnl For HP-UX 10.20 it must be before -lSM -lICE
2452 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2453 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2454
2455 dnl Some systems need -lnsl -lsocket when testing for ICE.
2456 dnl The check above doesn't do this, try here (again). Also needed to get
2457 dnl them after Xdmcp. link.sh will remove them when not needed.
2458 dnl Check for other function than above to avoid the cached value
2459 AC_CHECK_LIB(ICE, IceOpenConnection,
2460 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2461
2462 dnl Check for -lXpm (needed for some versions of Motif)
2463 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2464 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2465 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2466
2467 dnl Check that the X11 header files don't use implicit declarations
2468 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2469 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002470 dnl -Werror is GCC only, others like Solaris Studio might not like it
2471 if test "$GCC" = yes; then
2472 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2473 else
2474 CFLAGS="$CFLAGS $X_CFLAGS"
2475 fi
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002476 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002477 AC_MSG_RESULT(no),
2478 CFLAGS="$CFLAGS -Wno-implicit-int"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002479 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002480 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2481 AC_MSG_RESULT(test failed)
2482 )
2483 )
2484 CFLAGS=$cflags_save
2485
2486 LDFLAGS="$ac_save_LDFLAGS"
2487
Mike Gilberta055b442023-08-20 19:01:41 +02002488 AC_CHECK_SIZEOF([wchar_t])
2489 if test "$ac_cv_sizeof_wchar_t" -le 2; then
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002490 AC_DEFINE(SMALL_WCHAR_T)
2491 fi
2492
Bram Moolenaar071d4272004-06-13 20:20:40 +00002493 fi
2494fi
2495
Bram Moolenaard2a05492018-07-27 22:35:15 +02002496dnl Check if --with-x was given but it doesn't work.
2497if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2498 AC_MSG_ERROR([could not configure X])
2499fi
2500
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002501test "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 +00002502
2503AC_MSG_CHECKING(--enable-gui argument)
2504AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002505 [ --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 +00002506
2507dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2508dnl Do not use character classes for portability with old tools.
2509enable_gui_canon=`echo "_$enable_gui" | \
2510 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2511
2512dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002513SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002514SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002515SKIP_GNOME=YES
2516SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002517SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002518SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002519GUITYPE=NONE
2520
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002521if test "x$HAIKU" = "xyes"; then
2522 SKIP_HAIKU=
2523 case "$enable_gui_canon" in
2524 no) AC_MSG_RESULT(no GUI support)
2525 SKIP_HAIKU=YES ;;
2526 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2527 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2528 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2529 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2530 SKIP_HAIKU=YES ;;
2531 esac
2532elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002533 SKIP_PHOTON=
2534 case "$enable_gui_canon" in
2535 no) AC_MSG_RESULT(no GUI support)
2536 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002537 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2538 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002539 photon) AC_MSG_RESULT(Photon GUI support) ;;
2540 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2541 SKIP_PHOTON=YES ;;
2542 esac
2543
Bram Moolenaar040f9752020-08-11 23:08:48 +02002544elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2545 case "$enable_gui_canon" in
2546 no) AC_MSG_RESULT(no GUI support) ;;
2547 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2548 gui_auto=yes ;;
2549 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002550 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002551 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002552else
2553
Bram Moolenaar071d4272004-06-13 20:20:40 +00002554 case "$enable_gui_canon" in
2555 no|none) AC_MSG_RESULT(no GUI support) ;;
2556 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002557 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002558 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002559 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002560 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002561 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002562 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002563 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002564 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2565 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002566 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002567 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2568 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002569 motif) AC_MSG_RESULT(Motif GUI support)
2570 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002571 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2572 esac
2573
2574fi
2575
Bram Moolenaar071d4272004-06-13 20:20:40 +00002576if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2577 -a "$enable_gui_canon" != "gnome2"; then
2578 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2579 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002580 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002581 , enable_gtk2_check="yes")
2582 AC_MSG_RESULT($enable_gtk2_check)
2583 if test "x$enable_gtk2_check" = "xno"; then
2584 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002585 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002586 fi
2587fi
2588
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002589if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002590 AC_MSG_CHECKING(whether or not to look for GNOME)
2591 AC_ARG_ENABLE(gnome-check,
2592 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2593 , enable_gnome_check="no")
2594 AC_MSG_RESULT($enable_gnome_check)
2595 if test "x$enable_gnome_check" = "xno"; then
2596 SKIP_GNOME=YES
2597 fi
2598fi
2599
Bram Moolenaar98921892016-02-23 17:14:37 +01002600if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2601 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2602 AC_ARG_ENABLE(gtk3-check,
2603 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2604 , enable_gtk3_check="yes")
2605 AC_MSG_RESULT($enable_gtk3_check)
2606 if test "x$enable_gtk3_check" = "xno"; then
2607 SKIP_GTK3=YES
2608 fi
2609fi
2610
Bram Moolenaar071d4272004-06-13 20:20:40 +00002611if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2612 AC_MSG_CHECKING(whether or not to look for Motif)
2613 AC_ARG_ENABLE(motif-check,
2614 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2615 , enable_motif_check="yes")
2616 AC_MSG_RESULT($enable_motif_check)
2617 if test "x$enable_motif_check" = "xno"; then
2618 SKIP_MOTIF=YES
2619 fi
2620fi
2621
Bram Moolenaar071d4272004-06-13 20:20:40 +00002622dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002623dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002624dnl
2625dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002626dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002627dnl
2628AC_DEFUN(AM_PATH_GTK,
2629[
2630 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2631 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002632 no_gtk=""
2633 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2634 && $PKG_CONFIG --exists gtk+-2.0; then
2635 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002636 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2637 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002638 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2639 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2640 dnl something like that.
2641 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002642 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002643 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2644 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2645 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2646 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2647 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2648 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2649 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2650 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002651 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2652 && $PKG_CONFIG --exists gtk+-3.0; then
2653 {
2654 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2655 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2656
2657 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2658 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2659 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2660 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2661 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2662 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2663 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2664 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2665 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2666 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002667 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002668 dnl Put some text before the "no" to hint at installing the gtk-dev
2669 dnl packages.
2670 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002671 no_gtk=yes
2672 fi
2673
2674 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2675 {
2676 ac_save_CFLAGS="$CFLAGS"
2677 ac_save_LIBS="$LIBS"
2678 CFLAGS="$CFLAGS $GTK_CFLAGS"
2679 LIBS="$LIBS $GTK_LIBS"
2680
2681 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002682 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002683 dnl
2684 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002685 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002686#include <gtk/gtk.h>
2687#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002688#if STDC_HEADERS
2689# include <stdlib.h>
2690# include <stddef.h>
2691#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002692
2693int
2694main ()
2695{
2696int major, minor, micro;
2697char *tmp_version;
2698
2699system ("touch conf.gtktest");
2700
2701/* HP/UX 9 (%@#!) writes to sscanf strings */
2702tmp_version = g_strdup("$min_gtk_version");
2703if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2704 printf("%s, bad version string\n", "$min_gtk_version");
Zdenek Dohnal549f8c02023-12-14 20:22:49 +01002705 g_free(tmp_version);
Bram Moolenaar071d4272004-06-13 20:20:40 +00002706 exit(1);
2707 }
2708
Zdenek Dohnal549f8c02023-12-14 20:22:49 +01002709g_free(tmp_version);
2710
Bram Moolenaar071d4272004-06-13 20:20:40 +00002711if ((gtk_major_version > major) ||
2712 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2713 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2714 (gtk_micro_version >= micro)))
2715{
2716 return 0;
2717}
2718return 1;
2719}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002720])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002721 CFLAGS="$ac_save_CFLAGS"
2722 LIBS="$ac_save_LIBS"
2723 }
2724 fi
2725 if test "x$no_gtk" = x ; then
2726 if test "x$enable_gtktest" = "xyes"; then
2727 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2728 else
2729 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2730 fi
2731 ifelse([$2], , :, [$2])
2732 else
2733 {
2734 AC_MSG_RESULT(no)
2735 GTK_CFLAGS=""
2736 GTK_LIBS=""
2737 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002738 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2739 AC_MSG_ERROR([could not configure GTK])
2740 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002741 }
2742 fi
2743 }
2744 else
2745 GTK_CFLAGS=""
2746 GTK_LIBS=""
2747 ifelse([$3], , :, [$3])
2748 fi
2749 AC_SUBST(GTK_CFLAGS)
2750 AC_SUBST(GTK_LIBS)
2751 rm -f conf.gtktest
2752])
2753
2754dnl ---------------------------------------------------------------------------
2755dnl gnome
2756dnl ---------------------------------------------------------------------------
2757AC_DEFUN([GNOME_INIT_HOOK],
2758[
2759 AC_SUBST(GNOME_LIBS)
2760 AC_SUBST(GNOME_LIBDIR)
2761 AC_SUBST(GNOME_INCLUDEDIR)
2762
2763 AC_ARG_WITH(gnome-includes,
2764 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2765 [CFLAGS="$CFLAGS -I$withval"]
2766 )
2767
2768 AC_ARG_WITH(gnome-libs,
2769 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2770 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2771 )
2772
2773 AC_ARG_WITH(gnome,
2774 [ --with-gnome Specify prefix for GNOME files],
2775 if test x$withval = xyes; then
2776 want_gnome=yes
2777 ifelse([$1], [], :, [$1])
2778 else
2779 if test "x$withval" = xno; then
2780 want_gnome=no
2781 else
2782 want_gnome=yes
2783 LDFLAGS="$LDFLAGS -L$withval/lib"
2784 CFLAGS="$CFLAGS -I$withval/include"
2785 gnome_prefix=$withval/lib
2786 fi
2787 fi,
2788 want_gnome=yes)
2789
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002790 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002791 {
2792 AC_MSG_CHECKING(for libgnomeui-2.0)
2793 if $PKG_CONFIG --exists libgnomeui-2.0; then
2794 AC_MSG_RESULT(yes)
2795 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2796 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2797 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002798
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002799 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2800 dnl This might not be the right way but it works for me...
2801 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002802 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002803 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002804 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002805 GNOME_LIBS="$GNOME_LIBS -pthread"
2806 else
2807 AC_MSG_RESULT(no)
2808 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002809 $1
2810 else
2811 AC_MSG_RESULT(not found)
2812 if test "x$2" = xfail; then
2813 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2814 fi
2815 fi
2816 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002817 fi
2818])
2819
2820AC_DEFUN([GNOME_INIT],[
2821 GNOME_INIT_HOOK([],fail)
2822])
2823
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002824if test "X$PKG_CONFIG" = "X"; then
2825 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2826fi
2827
Bram Moolenaar071d4272004-06-13 20:20:40 +00002828
2829dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002830dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002831dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002832if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002833
2834 AC_MSG_CHECKING(--disable-gtktest argument)
2835 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2836 , enable_gtktest=yes)
2837 if test "x$enable_gtktest" = "xyes" ; then
2838 AC_MSG_RESULT(gtk test enabled)
2839 else
2840 AC_MSG_RESULT(gtk test disabled)
2841 fi
2842
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002843 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002844 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2845 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002846 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2847 dnl found.
2848 save_skip_gtk3=$SKIP_GTK3
2849 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002850 AM_PATH_GTK(2.2.0,
2851 [GUI_LIB_LOC="$GTK_LIBDIR"
2852 GTK_LIBNAME="$GTK_LIBS"
2853 GUI_INC_LOC="$GTK_CFLAGS"], )
2854 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002855 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002856 SKIP_MOTIF=YES
2857 GUITYPE=GTK
2858 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002859 else
2860 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002861 fi
2862 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002863 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002864 dnl
2865 dnl if GTK exists, then check for GNOME.
2866 dnl
2867 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002868 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002869 GNOME_INIT_HOOK([have_gnome=yes])
2870 if test "x$have_gnome" = xyes ; then
2871 AC_DEFINE(FEAT_GUI_GNOME)
2872 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2873 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002874 fi
2875 }
2876 fi
2877 fi
2878fi
2879
Bram Moolenaar98921892016-02-23 17:14:37 +01002880
2881dnl ---------------------------------------------------------------------------
2882dnl Check for GTK3.
2883dnl ---------------------------------------------------------------------------
2884if test -z "$SKIP_GTK3"; then
2885
2886 AC_MSG_CHECKING(--disable-gtktest argument)
2887 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2888 , enable_gtktest=yes)
2889 if test "x$enable_gtktest" = "xyes" ; then
2890 AC_MSG_RESULT(gtk test enabled)
2891 else
2892 AC_MSG_RESULT(gtk test disabled)
2893 fi
2894
Bram Moolenaar98921892016-02-23 17:14:37 +01002895 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002896 save_skip_gtk2=$SKIP_GTK2
2897 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002898 AM_PATH_GTK(3.0.0,
2899 [GUI_LIB_LOC="$GTK_LIBDIR"
2900 GTK_LIBNAME="$GTK_LIBS"
2901 GUI_INC_LOC="$GTK_CFLAGS"], )
2902 if test "x$GTK_CFLAGS" != "x"; then
2903 SKIP_GTK2=YES
2904 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002905 SKIP_MOTIF=YES
2906 GUITYPE=GTK
2907 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002908 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002909 else
2910 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002911 fi
2912 fi
2913fi
2914
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002915dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002916dnl glib-compile-resources is found in PATH, use GResource.
2917if test "x$GUITYPE" = "xGTK"; then
2918 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2919 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2920 if test "x$gdk_pixbuf_version" != x ; then
2921 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2922 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2923 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002924 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002925 AC_MSG_RESULT([OK.])
2926 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2927 AC_MSG_CHECKING([glib-compile-resources])
2928 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002929 GLIB_COMPILE_RESOURCES=""
2930 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002931 else
2932 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002933 AC_DEFINE(USE_GRESOURCE)
2934 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2935 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002936 fi
2937 else
2938 AC_MSG_RESULT([not usable.])
2939 fi
2940 else
2941 AC_MSG_RESULT([cannot obtain from pkg_config.])
2942 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002943
2944 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2945 AC_ARG_ENABLE(icon_cache_update,
2946 [ --disable-icon-cache-update update disabled],
2947 [],
2948 [enable_icon_cache_update="yes"])
2949 if test "$enable_icon_cache_update" = "yes"; then
2950 AC_MSG_RESULT([not set])
2951 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2952 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2953 AC_MSG_RESULT([not found in PATH.])
2954 fi
2955 else
2956 AC_MSG_RESULT([update disabled])
2957 fi
2958
2959 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2960 AC_ARG_ENABLE(desktop_database_update,
2961 [ --disable-desktop-database-update update disabled],
2962 [],
2963 [enable_desktop_database_update="yes"])
2964 if test "$enable_desktop_database_update" = "yes"; then
2965 AC_MSG_RESULT([not set])
2966 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2967 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2968 AC_MSG_RESULT([not found in PATH.])
2969 fi
2970 else
2971 AC_MSG_RESULT([update disabled])
2972 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002973fi
2974AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002975AC_SUBST(GRESOURCE_SRC)
2976AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002977AC_SUBST(GTK_UPDATE_ICON_CACHE)
2978AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002979
Bram Moolenaar071d4272004-06-13 20:20:40 +00002980dnl Check for Motif include files location.
2981dnl The LAST one found is used, this makes the highest version to be used,
2982dnl e.g. when Motif1.2 and Motif2.0 are both present.
2983
2984if test -z "$SKIP_MOTIF"; then
2985 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"
2986 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2987 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2988
2989 AC_MSG_CHECKING(for location of Motif GUI includes)
2990 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2991 GUI_INC_LOC=
2992 for try in $gui_includes; do
2993 if test -f "$try/Xm/Xm.h"; then
2994 GUI_INC_LOC=$try
2995 fi
2996 done
2997 if test -n "$GUI_INC_LOC"; then
2998 if test "$GUI_INC_LOC" = /usr/include; then
2999 GUI_INC_LOC=
3000 AC_MSG_RESULT(in default path)
3001 else
3002 AC_MSG_RESULT($GUI_INC_LOC)
3003 fi
3004 else
3005 AC_MSG_RESULT(<not found>)
3006 SKIP_MOTIF=YES
3007 fi
3008fi
3009
3010dnl Check for Motif library files location. In the same order as the include
3011dnl files, to avoid a mixup if several versions are present
3012
3013if test -z "$SKIP_MOTIF"; then
3014 AC_MSG_CHECKING(--with-motif-lib argument)
3015 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003016 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003017 [ MOTIF_LIBNAME="${withval}" ] )
3018
3019 if test -n "$MOTIF_LIBNAME"; then
3020 AC_MSG_RESULT($MOTIF_LIBNAME)
3021 GUI_LIB_LOC=
3022 else
3023 AC_MSG_RESULT(no)
3024
3025 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
3026 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
3027
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003028 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
3029 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01003030 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar01967f52023-04-12 16:24:03 +01003031 dnl OpenSUSE appears to use /usr/lib64.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003032 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar01967f52023-04-12 16:24:03 +01003033 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 +00003034 GUI_LIB_LOC=
3035 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01003036 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 +00003037 if test -f "$libtry"; then
3038 GUI_LIB_LOC=$try
3039 fi
3040 done
3041 done
3042 if test -n "$GUI_LIB_LOC"; then
Bram Moolenaar01967f52023-04-12 16:24:03 +01003043 dnl Remove /usr/lib, it causes trouble on some systems.
3044 dnl For consistency also remove other standard lib directories.
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003045 if test "$GUI_LIB_LOC" = /usr/lib \
Bram Moolenaar01967f52023-04-12 16:24:03 +01003046 -o "$GUI_LIB_LOC" = /usr/lib64 \
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003047 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
3048 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003049 GUI_LIB_LOC=
3050 AC_MSG_RESULT(in default path)
3051 else
3052 if test -n "$GUI_LIB_LOC"; then
3053 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003054 if test "$vim_cv_uname_output" = SunOS &&
3055 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003056 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
3057 fi
3058 fi
3059 fi
3060 MOTIF_LIBNAME=-lXm
3061 else
3062 AC_MSG_RESULT(<not found>)
3063 SKIP_MOTIF=YES
3064 fi
3065 fi
3066fi
3067
3068if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003069 GUITYPE=MOTIF
3070 AC_SUBST(MOTIF_LIBNAME)
3071fi
3072
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003073if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003074 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3075 dnl Avoid adding it when it twice
3076 if test -n "$GUI_INC_LOC"; then
3077 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3078 fi
3079 if test -n "$GUI_LIB_LOC"; then
3080 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3081 fi
3082
3083 dnl Check for -lXext and then for -lXmu
3084 ldflags_save=$LDFLAGS
3085 LDFLAGS="$X_LIBS $LDFLAGS"
3086 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3087 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3088 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3089 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3090 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3091 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3092 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3093 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3094 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3095 if test -z "$SKIP_MOTIF"; then
3096 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3097 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3098 fi
3099 LDFLAGS=$ldflags_save
3100
3101 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3102 AC_MSG_CHECKING(for extra X11 defines)
3103 NARROW_PROTO=
3104 rm -fr conftestdir
3105 if mkdir conftestdir; then
3106 cd conftestdir
3107 cat > Imakefile <<'EOF'
3108acfindx:
3109 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3110EOF
3111 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3112 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3113 fi
3114 cd ..
3115 rm -fr conftestdir
3116 fi
3117 if test -z "$NARROW_PROTO"; then
3118 AC_MSG_RESULT(no)
3119 else
3120 AC_MSG_RESULT($NARROW_PROTO)
3121 fi
3122 AC_SUBST(NARROW_PROTO)
3123fi
3124
3125dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3126dnl use the X11 include path
3127if test "$enable_xsmp" = "yes"; then
3128 cppflags_save=$CPPFLAGS
3129 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3130 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3131 CPPFLAGS=$cppflags_save
3132fi
3133
3134
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003135if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003136 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3137 cppflags_save=$CPPFLAGS
3138 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3139 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3140
3141 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3142 if test ! "$enable_xim" = "no"; then
3143 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3144 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3145 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003146 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003147 fi
3148 CPPFLAGS=$cppflags_save
3149
Bram Moolenaar54612582019-11-21 17:13:31 +01003150 dnl automatically enable XIM in the GUI
3151 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003152 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3153 enable_xim="yes"
3154 fi
3155fi
3156
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003157if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003158 cppflags_save=$CPPFLAGS
3159 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003160dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3161 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003162 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003163#include <X11/Intrinsic.h>
3164#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003165 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003166 AC_MSG_RESULT(yes)
3167 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3168 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003169 CPPFLAGS=$cppflags_save
3170fi
3171
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003172dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003173if test -z "$SKIP_MOTIF"; then
3174 cppflags_save=$CPPFLAGS
3175 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003176 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003177 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003178 else
Bram Moolenaarde1d7342022-06-05 20:03:17 +01003179 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 +01003180 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003181
Bram Moolenaar77c19352012-06-13 19:19:41 +02003182 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003183 dnl Solaris uses XpmAttributes_21, very annoying.
3184 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003185 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003186 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3187 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3188 )
3189 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003190 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003191 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003192 CPPFLAGS=$cppflags_save
3193fi
3194
3195if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3196 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3197 enable_xim="no"
3198fi
3199if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3200 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3201 enable_fontset="no"
3202fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003203if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003204 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3205 enable_fontset="no"
3206fi
3207
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003208dnl There is no test for the Haiku GUI, if it's selected it's used
3209if test -z "$SKIP_HAIKU"; then
3210 GUITYPE=HAIKUGUI
3211fi
3212
Bram Moolenaar071d4272004-06-13 20:20:40 +00003213if test -z "$SKIP_PHOTON"; then
3214 GUITYPE=PHOTONGUI
3215fi
3216
3217AC_SUBST(GUI_INC_LOC)
3218AC_SUBST(GUI_LIB_LOC)
3219AC_SUBST(GUITYPE)
3220AC_SUBST(GUI_X_LIBS)
3221
3222if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3223 AC_MSG_ERROR([cannot use workshop without Motif])
3224fi
3225
3226dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3227if test "$enable_xim" = "yes"; then
3228 AC_DEFINE(FEAT_XIM)
3229fi
3230if test "$enable_fontset" = "yes"; then
3231 AC_DEFINE(FEAT_XFONTSET)
3232fi
3233
3234
3235dnl ---------------------------------------------------------------------------
3236dnl end of GUI-checking
3237dnl ---------------------------------------------------------------------------
3238
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003239AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003240if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003241 dnl Linux
3242 AC_MSG_RESULT([/proc/self/exe])
3243 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3244elif test -L "/proc/self/path/a.out"; then
3245 dnl Solaris
3246 AC_MSG_RESULT([/proc/self/path/a.out])
3247 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3248elif test -L "/proc/curproc/file"; then
3249 dnl FreeBSD
3250 AC_MSG_RESULT([/proc/curproc/file])
3251 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003252else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003253 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003254fi
3255
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003256dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003257AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003258case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003259 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003260 AC_MSG_CHECKING(for CYGWIN clipboard support)
3261 if test "x$with_x" = "xno" ; then
3262 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3263 AC_MSG_RESULT(yes)
3264 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3265 else
3266 AC_MSG_RESULT(no - using X11)
3267 fi ;;
3268
3269 *) CYGWIN=no; AC_MSG_RESULT(no);;
3270esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003271
Bram Moolenaar071d4272004-06-13 20:20:40 +00003272dnl Checks for libraries and include files.
3273
Bram Moolenaar446cb832008-06-24 21:56:24 +00003274AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3275 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003276 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003277#include "confdefs.h"
3278#include <ctype.h>
3279#if STDC_HEADERS
3280# include <stdlib.h>
3281# include <stddef.h>
3282#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003283int main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003284 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003285 vim_cv_toupper_broken=yes
3286 ],[
3287 vim_cv_toupper_broken=no
3288 ],[
3289 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3290 ])])
3291
3292if test "x$vim_cv_toupper_broken" = "xyes" ; then
3293 AC_DEFINE(BROKEN_TOUPPER)
3294fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003295
3296AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003297AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003298 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3299 AC_MSG_RESULT(no))
3300
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003301AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003302AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003303 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3304 AC_MSG_RESULT(no))
3305
Bram Moolenaar071d4272004-06-13 20:20:40 +00003306dnl Checks for header files.
3307AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3308dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3309if test "$HAS_ELF" = 1; then
3310 AC_CHECK_LIB(elf, main)
3311fi
3312
3313AC_HEADER_DIRENT
3314
Bram Moolenaar071d4272004-06-13 20:20:40 +00003315dnl If sys/wait.h is not found it might still exist but not be POSIX
3316dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3317if test $ac_cv_header_sys_wait_h = no; then
3318 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003319 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3320 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003321 AC_MSG_RESULT(yes)
3322 AC_DEFINE(HAVE_SYS_WAIT_H)
3323 AC_DEFINE(HAVE_UNION_WAIT),
3324 AC_MSG_RESULT(no))
3325fi
3326
Bram Moolenaar779a7752016-01-30 23:26:34 +01003327AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003328 sys/select.h sys/utsname.h termcap.h fcntl.h \
3329 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3330 termio.h iconv.h inttypes.h langinfo.h math.h \
3331 unistd.h stropts.h errno.h sys/resource.h \
3332 sys/systeminfo.h locale.h sys/stream.h termios.h \
3333 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003334 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003335 util/debug.h util/msg18n.h frame.h sys/acl.h \
3336 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003337
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003338dnl sys/ptem.h depends on sys/stream.h on Solaris
3339AC_CHECK_HEADERS(sys/ptem.h, [], [],
3340[#if defined HAVE_SYS_STREAM_H
3341# include <sys/stream.h>
3342#endif])
3343
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003344dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3345AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3346[#if defined HAVE_SYS_PARAM_H
3347# include <sys/param.h>
3348#endif])
3349
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003350
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003351dnl pthread_np.h may exist but can only be used after including pthread.h
3352AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003353AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003354#include <pthread.h>
3355#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003356 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003357 AC_MSG_RESULT(yes)
3358 AC_DEFINE(HAVE_PTHREAD_NP_H),
3359 AC_MSG_RESULT(no))
3360
Bram Moolenaare344bea2005-09-01 20:46:49 +00003361AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003362if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003363 dnl The strings.h file on OS/X contains a warning and nothing useful.
3364 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3365else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003366
3367dnl Check if strings.h and string.h can both be included when defined.
3368AC_MSG_CHECKING([if strings.h can be included after string.h])
3369cppflags_save=$CPPFLAGS
3370CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003371AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003372#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3373# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3374 /* but don't do it on AIX 5.1 (Uribarri) */
3375#endif
3376#ifdef HAVE_XM_XM_H
3377# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3378#endif
3379#ifdef HAVE_STRING_H
3380# include <string.h>
3381#endif
3382#if defined(HAVE_STRINGS_H)
3383# include <strings.h>
3384#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003385 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003386 AC_MSG_RESULT(yes),
3387 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3388 AC_MSG_RESULT(no))
3389CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003390fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003391
3392dnl Checks for typedefs, structures, and compiler characteristics.
3393AC_PROG_GCC_TRADITIONAL
3394AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003395AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003396AC_TYPE_MODE_T
3397AC_TYPE_OFF_T
3398AC_TYPE_PID_T
3399AC_TYPE_SIZE_T
3400AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003401AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003402
Illia Bobyrf39842f2023-08-27 18:21:23 +02003403AC_CHECK_HEADERS_ONCE([sys/time.h])
3404
Bram Moolenaar071d4272004-06-13 20:20:40 +00003405AC_CHECK_TYPE(ino_t, long)
3406AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003407AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003408AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003409
3410AC_MSG_CHECKING(for rlim_t)
3411if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3412 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3413else
3414 AC_EGREP_CPP(dnl
3415changequote(<<,>>)dnl
3416<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3417changequote([,]),
3418 [
3419#include <sys/types.h>
3420#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003421# include <stdlib.h>
3422# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003423#endif
3424#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003425# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003426#endif
3427 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3428 AC_MSG_RESULT($ac_cv_type_rlim_t)
3429fi
3430if test $ac_cv_type_rlim_t = no; then
3431 cat >> confdefs.h <<\EOF
3432#define rlim_t unsigned long
3433EOF
3434fi
3435
3436AC_MSG_CHECKING(for stack_t)
3437if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3438 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3439else
3440 AC_EGREP_CPP(stack_t,
3441 [
3442#include <sys/types.h>
3443#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003444# include <stdlib.h>
3445# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003446#endif
3447#include <signal.h>
3448 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3449 AC_MSG_RESULT($ac_cv_type_stack_t)
3450fi
3451if test $ac_cv_type_stack_t = no; then
3452 cat >> confdefs.h <<\EOF
3453#define stack_t struct sigaltstack
3454EOF
3455fi
3456
3457dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3458AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003459AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003460#include <sys/types.h>
3461#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003462# include <stdlib.h>
3463# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003464#endif
3465#include <signal.h>
3466#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003467 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003468 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3469 AC_MSG_RESULT(no))
3470
3471olibs="$LIBS"
3472AC_MSG_CHECKING(--with-tlib argument)
3473AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3474if test -n "$with_tlib"; then
3475 AC_MSG_RESULT($with_tlib)
3476 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003477 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003478 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003479 dnl Need to check for tgetent() below.
3480 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003481else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003482 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003483 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3484 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003485 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003486 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003487 dnl Older versions of ncurses have bugs, get a new one!
3488 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003489 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003490 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003491 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3492 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003493 esac
3494 for libname in $tlibs; do
3495 AC_CHECK_LIB(${libname}, tgetent,,)
3496 if test "x$olibs" != "x$LIBS"; then
3497 dnl It's possible that a library is found but it doesn't work
3498 dnl e.g., shared library that cannot be found
3499 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003500 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003501#ifdef HAVE_TERMCAP_H
3502# include <termcap.h>
3503#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003504#if STDC_HEADERS
3505# include <stdlib.h>
3506# include <stddef.h>
3507#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003508int main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003509 res="OK", res="FAIL", res="FAIL")
3510 if test "$res" = "OK"; then
3511 break
3512 fi
3513 AC_MSG_RESULT($libname library is not usable)
3514 LIBS="$olibs"
3515 fi
3516 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003517 if test "x$olibs" = "x$LIBS"; then
3518 AC_MSG_RESULT(no terminal library found)
3519 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003520fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003521
3522if test "x$olibs" = "x$LIBS"; then
3523 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003524 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3525 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003526 AC_MSG_RESULT(yes),
3527 AC_MSG_ERROR([NOT FOUND!
3528 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003529 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003530 Or specify the name of the library with --with-tlib.]))
3531fi
3532
Bram Moolenaar446cb832008-06-24 21:56:24 +00003533AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3534 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003535 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003536#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003537#ifdef HAVE_TERMCAP_H
3538# include <termcap.h>
3539#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003540#ifdef HAVE_STRING_H
3541# include <string.h>
3542#endif
3543#if STDC_HEADERS
3544# include <stdlib.h>
3545# include <stddef.h>
3546#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003547int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003548{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003549 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003550 vim_cv_terminfo=no
3551 ],[
3552 vim_cv_terminfo=yes
3553 ],[
3554 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3555 ])
3556 ])
3557
3558if test "x$vim_cv_terminfo" = "xyes" ; then
3559 AC_DEFINE(TERMINFO)
3560fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003561
Bram Moolenaara88254f2017-11-02 23:04:14 +01003562AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003563 [
3564 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003565#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003566#ifdef HAVE_TERMCAP_H
3567# include <termcap.h>
3568#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003569#if STDC_HEADERS
3570# include <stdlib.h>
3571# include <stddef.h>
3572#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003573int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003574{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003575 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003576 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003577 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003578 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003579 ],[
3580 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003581 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003582 ])
3583
Bram Moolenaara88254f2017-11-02 23:04:14 +01003584if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003585 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003586fi
3587
3588AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003589AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003590#ifdef HAVE_TERMCAP_H
3591# include <termcap.h>
3592#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003593 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003594 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3595 [AC_MSG_RESULT(no)
3596 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003597 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003598#ifdef HAVE_TERMCAP_H
3599# include <termcap.h>
3600#endif
3601extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003602 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003603 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3604 AC_MSG_RESULT(no))]
3605 )
3606
3607AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003608AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003609#ifdef HAVE_TERMCAP_H
3610# include <termcap.h>
3611#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003612 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003613 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3614 [AC_MSG_RESULT(no)
3615 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003616 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003617#ifdef HAVE_TERMCAP_H
3618# include <termcap.h>
3619#endif
3620extern char *UP, *BC, PC;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003621 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003622 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3623 AC_MSG_RESULT(no))]
3624 )
3625
3626AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003627AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003628#ifdef HAVE_TERMCAP_H
3629# include <termcap.h>
3630#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003631 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003632 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3633 AC_MSG_RESULT(no))
3634
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003635AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003636AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003637#ifdef HAVE_TERMCAP_H
3638# include <termcap.h>
3639#endif
3640#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003641 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003642 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3643 AC_MSG_RESULT(no))
3644
Bram Moolenaar071d4272004-06-13 20:20:40 +00003645dnl On some SCO machines sys/select redefines struct timeval
3646AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003647AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003648#include <sys/types.h>
3649#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003650#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003651 AC_MSG_RESULT(yes)
3652 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3653 AC_MSG_RESULT(no))
3654
Bram Moolenaar071d4272004-06-13 20:20:40 +00003655dnl Checks for pty.c (copied from screen) ==========================
3656AC_MSG_CHECKING(for /dev/ptc)
3657if test -r /dev/ptc; then
3658 AC_DEFINE(HAVE_DEV_PTC)
3659 AC_MSG_RESULT(yes)
3660else
3661 AC_MSG_RESULT(no)
3662fi
3663
3664AC_MSG_CHECKING(for SVR4 ptys)
3665if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003666 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003667// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3668char *ptsname(int);
3669int unlockpt(int);
3670int grantpt(int);
3671 ], [
3672 ptsname(0);
3673 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003674 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003675 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3676 AC_MSG_RESULT(no))
3677else
3678 AC_MSG_RESULT(no)
3679fi
3680
3681AC_MSG_CHECKING(for ptyranges)
3682if test -d /dev/ptym ; then
3683 pdir='/dev/ptym'
3684else
3685 pdir='/dev'
3686fi
3687dnl SCO uses ptyp%d
3688AC_EGREP_CPP(yes,
3689[#ifdef M_UNIX
3690 yes;
3691#endif
3692 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3693dnl if test -c /dev/ptyp19; then
3694dnl ptys=`echo /dev/ptyp??`
3695dnl else
3696dnl ptys=`echo $pdir/pty??`
3697dnl fi
3698if test "$ptys" != "$pdir/pty??" ; then
3699 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3700 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3701 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3702 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3703 AC_MSG_RESULT([$p0 / $p1])
3704else
3705 AC_MSG_RESULT([don't know])
3706fi
3707
Bram Moolenaar071d4272004-06-13 20:20:40 +00003708dnl Checks for library functions. ===================================
3709
Bram Moolenaar071d4272004-06-13 20:20:40 +00003710dnl check if struct sigcontext is defined (used for SGI only)
3711AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003712AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003713#include <signal.h>
Sam Jamesf8ea1062022-11-05 15:13:50 +00003714int test_sig()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003715{
3716 struct sigcontext *scont;
3717 scont = (struct sigcontext *)0;
3718 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003719} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003720 AC_MSG_RESULT(yes)
3721 AC_DEFINE(HAVE_SIGCONTEXT),
3722 AC_MSG_RESULT(no))
3723
3724dnl tricky stuff: try to find out if getcwd() is implemented with
3725dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003726AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3727 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003728 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003729#include "confdefs.h"
3730#ifdef HAVE_UNISTD_H
3731#include <unistd.h>
3732#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003733char *dagger[] = { "IFS=pwd", 0 };
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003734int main()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003735{
3736 char buffer[500];
3737 extern char **environ;
3738 environ = dagger;
3739 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003740}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003741 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003742 vim_cv_getcwd_broken=no
3743 ],[
3744 vim_cv_getcwd_broken=yes
3745 ],[
3746 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3747 ])
3748 ])
3749
3750if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3751 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003752 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003753fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003754
Bram Moolenaar25153e12010-02-24 14:47:08 +01003755dnl Check for functions in one big call, to reduce the size of configure.
3756dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003757AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003758 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003759 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003760 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003761 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003762 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
Bram Moolenaar08210f82023-04-13 19:15:54 +01003763 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt \
3764 clock_gettime)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003765AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003766AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003767
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003768dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3769dnl appropriate, so that off_t is 64 bits when needed.
3770AC_SYS_LARGEFILE
3771
Bram Moolenaar21606672019-06-14 20:40:58 +02003772AC_MSG_CHECKING(--enable-canberra argument)
3773AC_ARG_ENABLE(canberra,
3774 [ --disable-canberra Do not use libcanberra.],
3775 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003776
Bram Moolenaar21606672019-06-14 20:40:58 +02003777if test "$enable_canberra" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003778 if test "$features" = "huge"; then
Bram Moolenaar21606672019-06-14 20:40:58 +02003779 AC_MSG_RESULT(Defaulting to yes)
3780 enable_canberra="yes"
3781 else
3782 AC_MSG_RESULT(Defaulting to no)
3783 enable_canberra="no"
3784 fi
3785else
Bram Moolenaar12471262022-01-18 11:11:25 +00003786 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01003787 AC_MSG_RESULT([cannot use sound with tiny features])
Bram Moolenaar12471262022-01-18 11:11:25 +00003788 enable_canberra="no"
3789 else
3790 AC_MSG_RESULT($enable_canberra)
3791 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003792fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003793if test "$enable_canberra" = "yes"; then
3794 if test "x$PKG_CONFIG" != "xno"; then
3795 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3796 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3797 fi
3798 if test "x$canberra_lib" = "x"; then
3799 canberra_lib=-lcanberra
3800 canberra_cflags=-D_REENTRANT
3801 fi
3802 AC_MSG_CHECKING(for libcanberra)
3803 ac_save_CFLAGS="$CFLAGS"
3804 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003805 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003806 CFLAGS="$CFLAGS $canberra_cflags"
3807 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003808 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003809 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003810 # include <canberra.h>
3811 ], [
3812 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003813 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003814 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003815 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003816fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003817
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003818AC_MSG_CHECKING(--enable-libsodium argument)
3819AC_ARG_ENABLE(libsodium,
3820 [ --disable-libsodium Do not use libsodium.],
3821 , [enable_libsodium="maybe"])
3822
3823if test "$enable_libsodium" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003824 if test "$features" = "huge"; then
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003825 AC_MSG_RESULT(Defaulting to yes)
3826 enable_libsodium="yes"
3827 else
3828 AC_MSG_RESULT(Defaulting to no)
3829 enable_libsodium="no"
3830 fi
3831else
3832 AC_MSG_RESULT($enable_libsodium)
3833fi
3834if test "$enable_libsodium" = "yes"; then
3835 if test "x$PKG_CONFIG" != "xno"; then
3836 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3837 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3838 fi
3839 if test "x$libsodium_lib" = "x"; then
3840 libsodium_lib=-lsodium
3841 libsodium_cflags=
3842 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003843 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003844 ac_save_CFLAGS="$CFLAGS"
3845 ac_save_LIBS="$LIBS"
3846 CFLAGS="$CFLAGS $libsodium_cflags"
3847 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003848 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003849 # include <sodium.h>
3850 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003851 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003852 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3853 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3854fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003855
Bram Moolenaar071d4272004-06-13 20:20:40 +00003856dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3857AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003858AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003859[#include <sys/types.h>
3860#include <sys/stat.h>],
3861[ struct stat st;
3862 int n;
3863
3864 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003865 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003866 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3867 AC_MSG_RESULT(no))
3868
Paul Ollis65745772022-06-05 16:55:54 +01003869dnl Check for timer_create. It probably requires the 'rt' library.
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003870dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
3871dnl works, on Solaris timer_create() exists but fails at runtime.
Bram Moolenaarefffa532022-07-28 22:39:54 +01003872AC_CACHE_CHECK([for timer_create without -lrt], [vim_cv_timer_create], [
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003873AC_RUN_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar5748b7f2022-07-28 12:09:04 +01003874#if STDC_HEADERS
3875# include <stdlib.h>
3876# include <stddef.h>
3877#endif
3878#include <signal.h>
3879#include <time.h>
Bram Moolenaare5303952022-06-19 17:05:47 +01003880static void set_flag(union sigval sv) {}
Paul Ollis65745772022-06-05 16:55:54 +01003881], [
3882 struct timespec ts;
3883 struct sigevent action = {0};
3884 timer_t timer_id;
3885
3886 action.sigev_notify = SIGEV_THREAD;
3887 action.sigev_notify_function = set_flag;
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003888 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3889 exit(1); // cannot create a monotonic timer
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003890 ])],
Bram Moolenaarefffa532022-07-28 22:39:54 +01003891 vim_cv_timer_create=yes,
3892 vim_cv_timer_create=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003893 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003894 )])
Paul Ollis65745772022-06-05 16:55:54 +01003895
Bram Moolenaarefffa532022-07-28 22:39:54 +01003896dnl If the previous failed, check for timer_create() and linking with -lrt.
3897if test "x$vim_cv_timer_create" = "xno" ; then
3898 save_LIBS="$LIBS"
3899 LIBS="$LIBS -lrt"
3900 AC_CACHE_CHECK([for timer_create with -lrt], [vim_cv_timer_create_with_lrt], [
3901 AC_RUN_IFELSE([AC_LANG_PROGRAM([
3902 #if STDC_HEADERS
3903 # include <stdlib.h>
3904 # include <stddef.h>
3905 #endif
3906 #include <signal.h>
3907 #include <time.h>
3908 static void set_flag(union sigval sv) {}
3909 ], [
3910 struct timespec ts;
3911 struct sigevent action = {0};
3912 timer_t timer_id;
3913
3914 action.sigev_notify = SIGEV_THREAD;
3915 action.sigev_notify_function = set_flag;
3916 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3917 exit(1); // cannot create a monotonic timer
3918 ])],
3919 vim_cv_timer_create_with_lrt=yes,
3920 vim_cv_timer_create_with_lrt=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003921 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 +01003922 )])
3923 LIBS="$save_LIBS"
3924else
3925 vim_cv_timer_create_with_lrt=no
3926fi
Richard Purdie509695c2022-07-24 20:48:00 +01003927
3928if test "x$vim_cv_timer_create" = "xyes" ; then
3929 AC_DEFINE(HAVE_TIMER_CREATE)
3930fi
Bram Moolenaarefffa532022-07-28 22:39:54 +01003931if test "x$vim_cv_timer_create_with_lrt" = "xyes" ; then
3932 AC_DEFINE(HAVE_TIMER_CREATE)
3933 LIBS="$LIBS -lrt"
3934fi
Paul Ollis65745772022-06-05 16:55:54 +01003935
Bram Moolenaar446cb832008-06-24 21:56:24 +00003936AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3937 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003938 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003939#include "confdefs.h"
3940#if STDC_HEADERS
3941# include <stdlib.h>
3942# include <stddef.h>
3943#endif
3944#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003945#include <sys/stat.h>
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003946int main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003947 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003948 vim_cv_stat_ignores_slash=yes
3949 ],[
3950 vim_cv_stat_ignores_slash=no
3951 ],[
3952 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3953 ])
3954 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003955
Bram Moolenaar446cb832008-06-24 21:56:24 +00003956if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3957 AC_DEFINE(STAT_IGNORES_SLASH)
3958fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003959
3960dnl nanoseconds field of struct stat
3961AC_CACHE_CHECK([for nanoseconds field of struct stat],
3962 ac_cv_struct_st_mtim_nsec,
3963 [ac_save_CPPFLAGS="$CPPFLAGS"
3964 ac_cv_struct_st_mtim_nsec=no
3965 # st_mtim.tv_nsec -- the usual case
3966 # st_mtim._tv_nsec -- Solaris 2.6, if
3967 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3968 # && !defined __EXTENSIONS__)
3969 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3970 # st_mtime_n -- AIX 5.2 and above
3971 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3972 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
3973 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003974 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3975#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003976 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3977 done
3978 CPPFLAGS="$ac_save_CPPFLAGS"
3979])
3980if test $ac_cv_struct_st_mtim_nsec != no; then
3981 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3982 [Define if struct stat contains a nanoseconds field])
3983fi
Bram Moolenaare5303952022-06-19 17:05:47 +01003984
Bram Moolenaar071d4272004-06-13 20:20:40 +00003985dnl Link with iconv for charset translation, if not found without library.
3986dnl check for iconv() requires including iconv.h
3987dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3988dnl has been installed.
3989AC_MSG_CHECKING(for iconv_open())
3990save_LIBS="$LIBS"
3991LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003992AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003993#ifdef HAVE_ICONV_H
3994# include <iconv.h>
3995#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003996 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003997 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3998 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003999 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004000#ifdef HAVE_ICONV_H
4001# include <iconv.h>
4002#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004003 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004004 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
4005 AC_MSG_RESULT(no)))
4006
4007
4008AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004009AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004010#ifdef HAVE_LANGINFO_H
4011# include <langinfo.h>
4012#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004013], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004014 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
4015 AC_MSG_RESULT(no))
4016
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01004017dnl Floating point support may require the "m" library
Bram Moolenaar446cb832008-06-24 21:56:24 +00004018AC_CHECK_LIB(m, strtod)
Bram Moolenaar446cb832008-06-24 21:56:24 +00004019
Bram Moolenaara6b89762016-02-29 21:38:26 +01004020dnl isinf() and isnan() need to include header files and may need -lm.
4021AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004022AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01004023#ifdef HAVE_MATH_H
4024# include <math.h>
4025#endif
4026#if STDC_HEADERS
4027# include <stdlib.h>
4028# include <stddef.h>
4029#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004030], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004031 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
4032 AC_MSG_RESULT(no))
4033
4034AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004035AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01004036#ifdef HAVE_MATH_H
4037# include <math.h>
4038#endif
4039#if STDC_HEADERS
4040# include <stdlib.h>
4041# include <stddef.h>
4042#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004043], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004044 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
4045 AC_MSG_RESULT(no))
4046
Bram Moolenaar071d4272004-06-13 20:20:40 +00004047dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
4048dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004049dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004050AC_MSG_CHECKING(--disable-acl argument)
4051AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01004052 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004053 , [enable_acl="yes"])
4054if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01004055 AC_MSG_RESULT(no)
4056 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004057 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
4058 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
4059
Bram Moolenaard6d30422018-01-28 22:48:55 +01004060 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004061 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004062#include <sys/types.h>
4063#ifdef HAVE_SYS_ACL_H
4064# include <sys/acl.h>
4065#endif
4066acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4067 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004068 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004069 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4070 AC_MSG_RESULT(no))
4071
Bram Moolenaard6d30422018-01-28 22:48:55 +01004072 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4073 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004074 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004075#ifdef HAVE_SYS_ACL_H
4076# include <sys/acl.h>
4077#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004078 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004079 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004080 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004081
Bram Moolenaard6d30422018-01-28 22:48:55 +01004082 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004083 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004084#if STDC_HEADERS
4085# include <stdlib.h>
4086# include <stddef.h>
4087#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004088#ifdef HAVE_SYS_ACL_H
4089# include <sys/acl.h>
4090#endif
4091#ifdef HAVE_SYS_ACCESS_H
4092# include <sys/access.h>
4093#endif
4094#define _ALL_SOURCE
4095
4096#include <sys/stat.h>
4097
4098int aclsize;
4099struct acl *aclent;], [aclsize = sizeof(struct acl);
4100 aclent = (void *)malloc(aclsize);
4101 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004102 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004103 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4104 AC_MSG_RESULT(no))
4105else
4106 AC_MSG_RESULT(yes)
4107fi
4108
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004109if test "x$GTK_CFLAGS" != "x"; then
4110 dnl pango_shape_full() is new, fall back to pango_shape().
4111 AC_MSG_CHECKING(for pango_shape_full)
4112 ac_save_CFLAGS="$CFLAGS"
4113 ac_save_LIBS="$LIBS"
4114 CFLAGS="$CFLAGS $GTK_CFLAGS"
4115 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004116 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004117 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004118 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004119 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4120 AC_MSG_RESULT(no))
4121 CFLAGS="$ac_save_CFLAGS"
4122 LIBS="$ac_save_LIBS"
4123fi
4124
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004125AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004126AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004127 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004128 [enable_gpm="yes"])
4129
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004130if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4131 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004132 dnl Checking if gpm support can be compiled
4133 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4134 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004135 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004136 [#include <gpm.h>
4137 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004138 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004139 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4140 dnl FEAT_MOUSE_GPM if mouse support is included
4141 [vi_cv_have_gpm=yes],
4142 [vi_cv_have_gpm=no])
4143 [LIBS="$olibs"]
4144 )
4145 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004146 if test "$enable_gpm" = "yes"; then
4147 LIBS="$LIBS -lgpm"
4148 else
4149 AC_DEFINE(DYNAMIC_GPM)
4150 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004151 AC_DEFINE(HAVE_GPM)
4152 fi
4153else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004154 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004155fi
4156
Bram Moolenaar446cb832008-06-24 21:56:24 +00004157AC_MSG_CHECKING(--disable-sysmouse argument)
4158AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004159 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004160 [enable_sysmouse="yes"])
4161
4162if test "$enable_sysmouse" = "yes"; then
4163 AC_MSG_RESULT(no)
4164 dnl Checking if sysmouse support can be compiled
4165 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4166 dnl defines FEAT_SYSMOUSE if mouse support is included
4167 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004168 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004169 [#include <sys/consio.h>
4170 #include <signal.h>
4171 #include <sys/fbio.h>],
4172 [struct mouse_info mouse;
4173 mouse.operation = MOUSE_MODE;
4174 mouse.operation = MOUSE_SHOW;
4175 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004176 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004177 [vi_cv_have_sysmouse=yes],
4178 [vi_cv_have_sysmouse=no])
4179 )
4180 if test $vi_cv_have_sysmouse = yes; then
4181 AC_DEFINE(HAVE_SYSMOUSE)
4182 fi
4183else
4184 AC_MSG_RESULT(yes)
4185fi
4186
Bram Moolenaarf05da212009-11-17 16:13:15 +00004187dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4188AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004189AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004190[#if HAVE_FCNTL_H
4191# include <fcntl.h>
4192#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004193[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004194 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4195 AC_MSG_RESULT(not usable))
4196
Bram Moolenaar071d4272004-06-13 20:20:40 +00004197dnl rename needs to be checked separately to work on Nextstep with cc
4198AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004199AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004200 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4201 AC_MSG_RESULT(no))
4202
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004203dnl check for dirfd()
4204AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004205AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004206[#include <sys/types.h>
4207#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004208[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004209AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4210
4211dnl check for flock()
4212AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004213AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004214[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004215[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004216AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4217
Bram Moolenaar071d4272004-06-13 20:20:40 +00004218dnl sysctl() may exist but not the arguments we use
4219AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004220AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004221[#include <sys/types.h>
4222#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004223[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004224 size_t len;
4225
4226 mib[0] = CTL_HW;
4227 mib[1] = HW_USERMEM;
4228 len = sizeof(r);
4229 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004230 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004231 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4232 AC_MSG_RESULT(not usable))
4233
Bram Moolenaare2982d62021-10-06 11:27:21 +01004234dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004235dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004236AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004237AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004238[#include <sys/types.h>
4239#include <sys/sysinfo.h>],
4240[ struct sysinfo sinfo;
4241 int t;
4242
4243 (void)sysinfo(&sinfo);
4244 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004245 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004246 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4247 AC_MSG_RESULT(not usable))
4248
Bram Moolenaar914572a2007-05-01 11:37:47 +00004249dnl struct sysinfo may have the mem_unit field or not
4250AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004251AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004252[#include <sys/types.h>
4253#include <sys/sysinfo.h>],
4254[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004255 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004256 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004257 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4258 AC_MSG_RESULT(no))
4259
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004260dnl struct sysinfo may have the uptime field or not
4261AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004262AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004263[#include <sys/types.h>
4264#include <sys/sysinfo.h>],
4265[ struct sysinfo sinfo;
4266 long ut;
4267
4268 (void)sysinfo(&sinfo);
4269 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004270 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004271 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4272 AC_MSG_RESULT(no))
4273
Bram Moolenaar071d4272004-06-13 20:20:40 +00004274dnl sysconf() may exist but not support what we want to use
4275AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004276AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004277[#include <unistd.h>],
4278[ (void)sysconf(_SC_PAGESIZE);
4279 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004280 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004281 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4282 AC_MSG_RESULT(not usable))
4283
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004284dnl check if we have _SC_SIGSTKSZ via sysconf()
4285AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004286AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004287[#include <unistd.h>],
4288[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004289 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004290 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4291 AC_MSG_RESULT(not usable))
4292
Bram Moolenaar914703b2010-05-31 21:59:46 +02004293AC_CHECK_SIZEOF([int])
4294AC_CHECK_SIZEOF([long])
4295AC_CHECK_SIZEOF([time_t])
4296AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004297
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004298dnl Use different names to avoid clashing with other header files.
4299AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4300AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4301
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004302dnl Make sure that uint32_t is really 32 bits unsigned.
4303AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004304AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004305#ifdef HAVE_STDINT_H
4306# include <stdint.h>
4307#endif
4308#ifdef HAVE_INTTYPES_H
4309# include <inttypes.h>
4310#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004311int main() {
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004312 uint32_t nr1 = (uint32_t)-1;
4313 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004314 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4315 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004316}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004317AC_MSG_RESULT(ok),
4318AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004319AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004320
Bram Moolenaar446cb832008-06-24 21:56:24 +00004321dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4322dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4323
Bram Moolenaar071d4272004-06-13 20:20:40 +00004324[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004325#include "confdefs.h"
4326#ifdef HAVE_STRING_H
4327# include <string.h>
4328#endif
4329#if STDC_HEADERS
4330# include <stdlib.h>
4331# include <stddef.h>
4332#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004333int main() {
Bram Moolenaar071d4272004-06-13 20:20:40 +00004334 char buf[10];
4335 strcpy(buf, "abcdefghi");
4336 mch_memmove(buf, buf + 2, 3);
4337 if (strncmp(buf, "ababcf", 6))
4338 exit(1);
4339 strcpy(buf, "abcdefghi");
4340 mch_memmove(buf + 2, buf, 3);
4341 if (strncmp(buf, "cdedef", 6))
4342 exit(1);
4343 exit(0); /* libc version works properly. */
4344}']
4345
Bram Moolenaar446cb832008-06-24 21:56:24 +00004346AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4347 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004348 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 +00004349 [
4350 vim_cv_memmove_handles_overlap=yes
4351 ],[
4352 vim_cv_memmove_handles_overlap=no
4353 ],[
4354 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4355 ])
4356 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004357
Bram Moolenaar446cb832008-06-24 21:56:24 +00004358if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4359 AC_DEFINE(USEMEMMOVE)
4360else
4361 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4362 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004363 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 +00004364 [
4365 vim_cv_bcopy_handles_overlap=yes
4366 ],[
4367 vim_cv_bcopy_handles_overlap=no
4368 ],[
4369 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4370 ])
4371 ])
4372
4373 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4374 AC_DEFINE(USEBCOPY)
4375 else
4376 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4377 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004378 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 +00004379 [
4380 vim_cv_memcpy_handles_overlap=yes
4381 ],[
4382 vim_cv_memcpy_handles_overlap=no
4383 ],[
4384 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4385 ])
4386 ])
4387
4388 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4389 AC_DEFINE(USEMEMCPY)
4390 fi
4391 fi
4392fi
4393
Bram Moolenaar071d4272004-06-13 20:20:40 +00004394
4395dnl Check for multibyte locale functions
4396dnl Find out if _Xsetlocale() is supported by libX11.
4397dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004398if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004399 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004400 libs_save=$LIBS
4401 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4402 CFLAGS="$CFLAGS $X_CFLAGS"
4403
4404 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004405 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4406 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004407 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4408 AC_MSG_RESULT(no))
4409
4410 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004411 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004412 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4413
Bram Moolenaar071d4272004-06-13 20:20:40 +00004414 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004415 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004416fi
4417
4418dnl Link with xpg4, it is said to make Korean locale working
4419AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4420
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004421dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004422dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004423dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004424dnl -t for typedefs (many ctags have this)
4425dnl -s for static functions (Elvis ctags only?)
4426dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4427dnl -i+m to test for older Exuberant ctags
4428AC_MSG_CHECKING(how to create tags)
4429test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004430if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004431 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004432elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004433 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004434elif (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 +01004435 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004436else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004437 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004438 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4439 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4440 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4441 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4442 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4443 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4444 (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 +00004445fi
4446test -f tags.save && mv tags.save tags
4447AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4448
4449dnl Check how we can run man with a section number
4450AC_MSG_CHECKING(how to run man with a section nr)
4451MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004452(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 +00004453AC_MSG_RESULT($MANDEF)
4454if test "$MANDEF" = "man -s"; then
4455 AC_DEFINE(USEMAN_S)
4456fi
4457
4458dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004459dnl We take care to base this on an empty LIBS: on some systems libelf would be
4460dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4461dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004462AC_MSG_CHECKING(--disable-nls argument)
4463AC_ARG_ENABLE(nls,
4464 [ --disable-nls Don't support NLS (gettext()).], ,
4465 [enable_nls="yes"])
4466
4467if test "$enable_nls" = "yes"; then
4468 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004469
4470 INSTALL_LANGS=install-languages
4471 AC_SUBST(INSTALL_LANGS)
4472 INSTALL_TOOL_LANGS=install-tool-languages
4473 AC_SUBST(INSTALL_TOOL_LANGS)
4474
Bram Moolenaar071d4272004-06-13 20:20:40 +00004475 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4476 AC_MSG_CHECKING([for NLS])
4477 if test -f po/Makefile; then
4478 have_gettext="no"
4479 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004480 olibs=$LIBS
4481 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004482 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004483 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004484 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004485 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4486 LIBS="-lintl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004487 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004488 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004489 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004490 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4491 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004492 AC_MSG_RESULT([gettext() doesn't work]);
4493 LIBS=$olibs))
4494 else
4495 AC_MSG_RESULT([msgfmt not found - disabled]);
4496 fi
Martin Tournoij7904fa42022-10-04 16:28:45 +01004497 if test $have_gettext = "yes" -a "x$features" != "xtiny"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004498 AC_DEFINE(HAVE_GETTEXT)
4499 MAKEMO=yes
4500 AC_SUBST(MAKEMO)
4501 dnl this was added in GNU gettext 0.10.36
4502 AC_CHECK_FUNCS(bind_textdomain_codeset)
4503 dnl _nl_msg_cat_cntr is required for GNU gettext
4504 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004505 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004506 [#include <libintl.h>
4507 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004508 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004509 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4510 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004511 AC_MSG_CHECKING([if msgfmt supports --desktop])
4512 MSGFMT_DESKTOP=
4513 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004514 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4515 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4516 dnl 0.19.3 is also broken.
4517 AC_MSG_RESULT([broken])
4518 else
4519 AC_MSG_RESULT([yes])
4520 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4521 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004522 else
4523 AC_MSG_RESULT([no])
4524 fi
4525 AC_SUBST(MSGFMT_DESKTOP)
Vladimír Marek87319172024-04-11 21:54:34 +02004526 AC_MSG_CHECKING([if $MSGFMT supports --no-convert])
RestorerZe498caf2024-03-12 22:11:36 +01004527 if "$MSGFMT" --help | grep -q -- '--no-convert' >/dev/null; then
4528 AC_MSG_RESULT([yes])
Vladimír Marek87319172024-04-11 21:54:34 +02004529 MSGFMTCMD="OLD_PO_FILE_INPUT=yes $MSGFMT --no-convert -v"
RestorerZe498caf2024-03-12 22:11:36 +01004530 else
4531 AC_MSG_RESULT([no])
Vladimír Marek87319172024-04-11 21:54:34 +02004532 MSGFMTCMD="OLD_PO_FILE_INPUT=yes $MSGFMT -v"
RestorerZe498caf2024-03-12 22:11:36 +01004533 fi
4534 AC_SUBST(MSGFMTCMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004535 fi
4536 else
4537 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4538 fi
4539else
4540 AC_MSG_RESULT(yes)
4541fi
4542
4543dnl Check for dynamic linking loader
4544AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4545if test x${DLL} = xdlfcn.h; then
4546 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4547 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004548 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004549 extern void* dlopen();
4550 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004551 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004552 AC_MSG_RESULT(yes);
4553 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4554 AC_MSG_RESULT(no);
4555 AC_MSG_CHECKING([for dlopen() in -ldl])
4556 olibs=$LIBS
4557 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004558 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004559 extern void* dlopen();
4560 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004561 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004562 AC_MSG_RESULT(yes);
4563 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4564 AC_MSG_RESULT(no);
4565 LIBS=$olibs))
4566 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4567 dnl ick :-)
4568 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004569 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004570 extern void* dlsym();
4571 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004572 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004573 AC_MSG_RESULT(yes);
4574 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4575 AC_MSG_RESULT(no);
4576 AC_MSG_CHECKING([for dlsym() in -ldl])
4577 olibs=$LIBS
4578 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004579 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004580 extern void* dlsym();
4581 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004582 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004583 AC_MSG_RESULT(yes);
4584 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4585 AC_MSG_RESULT(no);
4586 LIBS=$olibs))
4587elif test x${DLL} = xdl.h; then
4588 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4589 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004590 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004591 extern void* shl_load();
4592 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004593 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004594 AC_MSG_RESULT(yes);
4595 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4596 AC_MSG_RESULT(no);
4597 AC_MSG_CHECKING([for shl_load() in -ldld])
4598 olibs=$LIBS
4599 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004600 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004601 extern void* shl_load();
4602 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004603 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004604 AC_MSG_RESULT(yes);
4605 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4606 AC_MSG_RESULT(no);
4607 LIBS=$olibs))
4608fi
4609AC_CHECK_HEADERS(setjmp.h)
4610
Bram Moolenaard0573012017-10-28 21:11:06 +02004611if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004612 dnl -ldl must come after DynaLoader.a
4613 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4614 LIBS=`echo $LIBS | sed s/-ldl//`
4615 PERL_LIBS="$PERL_LIBS -ldl"
4616 fi
4617fi
4618
Bram Moolenaard0573012017-10-28 21:11:06 +02004619if test "$MACOS_X" = "yes"; then
4620 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004621 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004622 if test "$features" = "tiny"; then
Yee Cheng Chin4314e4f2022-10-08 13:50:05 +01004623 dnl Since no FEAT_CLIPBOARD or FEAT_SOUND, no need for os_macosx.m.
Bram Moolenaard0573012017-10-28 21:11:06 +02004624 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4625 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004626 AC_MSG_RESULT([yes, we need CoreServices])
4627 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004628 else
4629 AC_MSG_RESULT([yes, we need AppKit])
4630 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004631 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004632 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004633 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004634 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004635fi
4636
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004637dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4638dnl it everywhere.
4639if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4640 CFLAGS="$CFLAGS -D_REENTRANT"
4641fi
4642
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004643dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4644dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4645dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004646dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4647dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004648DEPEND_CFLAGS_FILTER=
4649if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004650 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004651 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004652 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004653 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004654 AC_MSG_RESULT(yes)
4655 else
4656 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004657 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004658 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4659 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004660 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004661 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004662 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4663 if test "$gccmajor" -gt "3"; then
Zdenek Dohnal42196982023-01-18 16:09:51 +00004664 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/'`
4665 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 +00004666 AC_MSG_RESULT(yes)
4667 else
4668 AC_MSG_RESULT(no)
4669 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004670fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004671AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004672
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004673dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4674dnl isn't required, but the CFLAGS for some of the libraries we're using
4675dnl include the define. Since the define changes the size of some datatypes
4676dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4677dnl consistent value. It's therefore safest to force the use of the define
4678dnl if it's present in any of the *_CFLAGS variables.
4679AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004680if 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 +01004681 AC_MSG_RESULT(yes)
4682 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4683else
4684 AC_MSG_RESULT(no)
4685fi
4686
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004687dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4688dnl between "-L" and the path that follows.
4689LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4690
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004691dnl link.sh tries to avoid overlinking in a hackish way.
4692dnl At least GNU ld supports --as-needed which provides the same functionality
4693dnl at linker level. Let's use it.
4694AC_MSG_CHECKING(linker --as-needed support)
4695LINK_AS_NEEDED=
4696# Check if linker supports --as-needed and --no-as-needed options
4697if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004698 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4699 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4700 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004701 LINK_AS_NEEDED=yes
4702fi
4703if test "$LINK_AS_NEEDED" = yes; then
4704 AC_MSG_RESULT(yes)
4705else
4706 AC_MSG_RESULT(no)
4707fi
4708AC_SUBST(LINK_AS_NEEDED)
4709
Bram Moolenaar77c19352012-06-13 19:19:41 +02004710# IBM z/OS reset CFLAGS for config.mk
4711if test "$zOSUnix" = "yes"; then
4712 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4713fi
4714
Bram Moolenaar071d4272004-06-13 20:20:40 +00004715dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004716AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4717AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004718
4719dnl vim: set sw=2 tw=78 fo+=l: