blob: 2ee9b01827a07a0354b165f01ea1f0ed8d193b92 [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.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001166 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001167 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001168 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1169 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001170 -e 's/-pipe //' \
1171 -e 's/-W[[^ ]]*//g' \
1172 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001173 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1174 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1175 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1176 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1177 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1178 dnl a test in configure may fail because of that.
1179 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1180 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1181
1182 dnl check that compiling a simple program still works with the flags
1183 dnl added for Perl.
1184 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1185 cflags_save=$CFLAGS
1186 libs_save=$LIBS
1187 ldflags_save=$LDFLAGS
1188 CFLAGS="$CFLAGS $perlcppflags"
1189 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001190 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001191 LDFLAGS="$perlldflags $LDFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001192 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193 AC_MSG_RESULT(yes); perl_ok=yes,
1194 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1195 CFLAGS=$cflags_save
1196 LIBS=$libs_save
1197 LDFLAGS=$ldflags_save
1198 if test $perl_ok = yes; then
1199 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001200 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201 fi
1202 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001203 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001204 LDFLAGS="$perlldflags $LDFLAGS"
1205 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001206 fi
1207 PERL_LIBS=$perllibs
1208 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1209 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1210 PERL_PRO="if_perl.pro if_perlsfio.pro"
1211 AC_DEFINE(FEAT_PERL)
1212 fi
1213 fi
1214 else
1215 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1216 fi
1217 fi
1218
Bram Moolenaard0573012017-10-28 21:11:06 +02001219 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001220 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001221 dir=/System/Library/Perl
1222 darwindir=$dir/darwin
1223 if test -d $darwindir; then
1224 PERL=/usr/bin/perl
1225 else
1226 dnl Mac OS X 10.3
1227 dir=/System/Library/Perl/5.8.1
1228 darwindir=$dir/darwin-thread-multi-2level
1229 if test -d $darwindir; then
1230 PERL=/usr/bin/perl
1231 fi
1232 fi
1233 if test -n "$PERL"; then
1234 PERL_DIR="$dir"
1235 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1236 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1237 PERL_LIBS="-L$darwindir/CORE -lperl"
1238 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001239 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1240 dnl be included if requested by passing --with-mac-arch to
1241 dnl configure, so strip these flags first (if present)
1242 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1243 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 +00001244 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001245 if test "$enable_perlinterp" = "dynamic"; then
1246 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1247 AC_DEFINE(DYNAMIC_PERL)
1248 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
Christian Brabandt55460da2023-08-29 21:31:28 +02001249 PERL_LIBS=""
Bram Moolenaare06c1882010-07-21 22:05:20 +02001250 fi
1251 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001252
1253 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1254 AC_MSG_ERROR([could not configure perl])
1255 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256fi
1257AC_SUBST(shrpenv)
1258AC_SUBST(PERL_SRC)
1259AC_SUBST(PERL_OBJ)
1260AC_SUBST(PERL_PRO)
1261AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001262AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001263AC_SUBST(PERL_LIBS)
1264
1265AC_MSG_CHECKING(--enable-pythoninterp argument)
1266AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001267 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268 [enable_pythoninterp="no"])
1269AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001270if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001271 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001272 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001273 fi
1274
Bram Moolenaar071d4272004-06-13 20:20:40 +00001275 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001276 AC_MSG_CHECKING(--with-python-command argument)
1277 AC_SUBST(vi_cv_path_python)
1278 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1279 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1280 AC_MSG_RESULT(no))
1281
1282 if test "X$vi_cv_path_python" = "X"; then
1283 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1284 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285 if test "X$vi_cv_path_python" != "X"; then
1286
1287 dnl -- get its version number
1288 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1289 [[vi_cv_var_python_version=`
1290 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1291 ]])
1292
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001293 dnl -- it must be at least version 2.3
1294 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001295 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001296 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297 then
1298 AC_MSG_RESULT(yep)
1299
1300 dnl -- find where python thinks it was installed
1301 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1302 [ vi_cv_path_python_pfx=`
1303 ${vi_cv_path_python} -c \
1304 "import sys; print sys.prefix"` ])
1305
1306 dnl -- and where it thinks it runs
1307 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1308 [ vi_cv_path_python_epfx=`
1309 ${vi_cv_path_python} -c \
1310 "import sys; print sys.exec_prefix"` ])
1311
1312 dnl -- python's internal library path
1313
1314 AC_CACHE_VAL(vi_cv_path_pythonpath,
1315 [ vi_cv_path_pythonpath=`
1316 unset PYTHONPATH;
1317 ${vi_cv_path_python} -c \
1318 "import sys, string; print string.join(sys.path,':')"` ])
1319
1320 dnl -- where the Python implementation library archives are
1321
1322 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001323 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001324 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001325
1326 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1327 [
1328 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001329 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1330 if test -d "$d" && test -f "$d/config.c"; then
1331 vi_cv_path_python_conf="$d"
1332 else
1333 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1334 for subdir in lib64 lib share; do
1335 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1336 if test -d "$d" && test -f "$d/config.c"; then
1337 vi_cv_path_python_conf="$d"
1338 fi
1339 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001340 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001341 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001342 ])
1343
1344 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1345
1346 if test "X$PYTHON_CONFDIR" = "X"; then
1347 AC_MSG_RESULT([can't find it!])
1348 else
1349
1350 dnl -- we need to examine Python's config/Makefile too
1351 dnl see what the interpreter is built from
1352 AC_CACHE_VAL(vi_cv_path_python_plibs,
1353 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001354 pwd=`pwd`
1355 tmp_mkf="$pwd/config-PyMake$$"
1356 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001357__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001358 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001359 @echo "python_LIBS='$(LIBS)'"
1360 @echo "python_SYSLIBS='$(SYSLIBS)'"
1361 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001362 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001363 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001364 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1365 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1366 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001367eof
1368 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001369 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1370 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001371 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001372 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1373 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001374 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1375 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1376 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001377 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001378 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001379 dnl -- Check if the path contained in python_LINKFORSHARED is
1380 dnl usable for vim build. If not, make and try other
1381 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001382 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001383 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1384 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1385 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1386 dnl -- The path looks relative. Guess the absolute one using
1387 dnl the prefix and try that.
1388 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1389 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1390 dnl -- A last resort.
1391 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1392 dnl -- No check is done. The last word is left to the
1393 dnl "sanity" test on link flags that follows shortly.
1394 fi
1395 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1396 fi
1397 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001398 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 +00001399 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1400 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1401 fi
1402 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001403 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001404 [
1405 if test "X$python_DLLLIBRARY" != "X"; then
1406 vi_cv_dll_name_python="$python_DLLLIBRARY"
1407 else
1408 vi_cv_dll_name_python="$python_INSTSONAME"
1409 fi
1410 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001411
1412 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1413 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001414 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001415 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001416 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 +00001417 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001418 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001419 dnl Define PYTHON_HOME if --with-python-config-dir was used
1420 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1421
1422 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001423 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001424 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001425
1426 dnl On FreeBSD linking with "-pthread" is required to use threads.
1427 dnl _THREAD_SAFE must be used for compiling then.
1428 dnl The "-pthread" is added to $LIBS, so that the following check for
1429 dnl sigaltstack() will look in libc_r (it's there in libc!).
1430 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1431 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1432 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1433 AC_MSG_CHECKING([if -pthread should be used])
1434 threadsafe_flag=
1435 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001436 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001437 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001438 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001439 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001440 threadsafe_flag="-D_THREAD_SAFE"
1441 thread_lib="-pthread"
1442 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001443 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001444 threadsafe_flag="-pthreads"
1445 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001446 fi
1447 libs_save_old=$LIBS
1448 if test -n "$threadsafe_flag"; then
1449 cflags_save=$CFLAGS
1450 CFLAGS="$CFLAGS $threadsafe_flag"
1451 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001452 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001453 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001454 AC_MSG_RESULT(no); LIBS=$libs_save_old
1455 )
1456 CFLAGS=$cflags_save
1457 else
1458 AC_MSG_RESULT(no)
1459 fi
1460
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001461 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001462 dnl added for Python.
1463 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1464 cflags_save=$CFLAGS
1465 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001466 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001467 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001468 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001469 AC_MSG_RESULT(yes); python_ok=yes,
1470 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1471 CFLAGS=$cflags_save
1472 LIBS=$libs_save
1473 if test $python_ok = yes; then
1474 AC_DEFINE(FEAT_PYTHON)
1475 else
1476 LIBS=$libs_save_old
1477 PYTHON_SRC=
1478 PYTHON_OBJ=
1479 PYTHON_LIBS=
1480 PYTHON_CFLAGS=
1481 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001482 fi
1483 else
1484 AC_MSG_RESULT(too old)
1485 fi
1486 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001487
1488 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1489 AC_MSG_ERROR([could not configure python])
1490 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001491fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001492
Bram Moolenaar071d4272004-06-13 20:20:40 +00001493AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001494AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001495AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001496AC_SUBST(PYTHON_SRC)
1497AC_SUBST(PYTHON_OBJ)
1498
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001499
1500AC_MSG_CHECKING(--enable-python3interp argument)
1501AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001502 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001503 [enable_python3interp="no"])
1504AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001505if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001506 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001507 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001508 fi
1509
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001510 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001511 AC_MSG_CHECKING(--with-python3-command argument)
1512 AC_SUBST(vi_cv_path_python3)
1513 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1514 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1515 AC_MSG_RESULT(no))
1516
1517 if test "X$vi_cv_path_python3" = "X"; then
1518 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1519 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001520 if test "X$vi_cv_path_python3" != "X"; then
1521
1522 dnl -- get its version number
1523 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1524 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001525 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001526 ]])
1527
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001528 dnl -- it must be at least version 3
1529 AC_MSG_CHECKING(Python is 3.0 or better)
1530 if ${vi_cv_path_python3} -c \
1531 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1532 then
1533 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001534
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001535 dnl -- get the stable ABI version if passed in
1536 AC_MSG_CHECKING(--with-python3-stable-abi argument)
1537 AC_SUBST(vi_cv_var_python3_stable_abi)
1538 AC_ARG_WITH(python3-stable-abi, [ --with-python3-stable-abi=VERSION stable ABI version to target (e.g. 3.8)],
1539 vi_cv_var_python3_stable_abi="$withval"; AC_MSG_RESULT($vi_cv_var_python3_stable_abi),
1540 AC_MSG_RESULT(no))
1541 if test "X$vi_cv_var_python3_stable_abi" != "X"; then
1542 AC_CACHE_VAL(vi_cv_var_python3_stable_abi_hex,
1543 [
1544 vi_cv_var_python3_stable_abi_hex=`
1545 ${vi_cv_path_python3} -c \
1546 "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 +02001547 if test "X$vi_cv_var_python3_stable_abi_hex" = "X"; then
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001548 AC_MSG_ERROR([can't parse Python 3 stable ABI version. It should be "<major>.<minor>"])
1549 fi
1550 fi
1551
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001552 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1553 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001554 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001555 vi_cv_var_python3_abiflags=
1556 if ${vi_cv_path_python3} -c \
1557 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1558 then
Bram Moolenaare5303952022-06-19 17:05:47 +01001559 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001560 "import sys; print(sys.abiflags)"`
1561 fi ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001562
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001563 dnl -- find where python3 thinks it was installed
1564 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1565 [ vi_cv_path_python3_pfx=`
1566 ${vi_cv_path_python3} -c \
1567 "import sys; print(sys.prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001568
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001569 dnl -- and where it thinks it runs
1570 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1571 [ vi_cv_path_python3_epfx=`
1572 ${vi_cv_path_python3} -c \
1573 "import sys; print(sys.exec_prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001574
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001575 dnl -- python3's include path
1576 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_include,
1577 [ vi_cv_path_python3_include=`
1578 ${vi_cv_path_python3} -c \
1579 "import sysconfig; print(sysconfig.get_path(\"include\"))"` ])
1580
1581 dnl -- python3's platform include path
1582 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_platinclude,
1583 [ vi_cv_path_python3_platinclude=`
1584 ${vi_cv_path_python3} -c \
1585 "import sysconfig; print(sysconfig.get_path(\"platinclude\"))"` ])
1586
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001587 dnl -- python3's internal library path
Bram Moolenaare5303952022-06-19 17:05:47 +01001588
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001589 AC_CACHE_VAL(vi_cv_path_python3path,
1590 [ vi_cv_path_python3path=`
1591 unset PYTHONPATH;
1592 ${vi_cv_path_python3} -c \
1593 "import sys, string; print(':'.join(sys.path))"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001594
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001595 dnl -- where the Python implementation library archives are
Bram Moolenaare5303952022-06-19 17:05:47 +01001596
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001597 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001598 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001599 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaare5303952022-06-19 17:05:47 +01001600
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001601 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1602 [
1603 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001604 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001605 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1606 if test "x$d" = "x"; then
1607 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1608 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001609 if test -d "$d" && test -f "$d/config.c"; then
1610 vi_cv_path_python3_conf="$d"
1611 else
1612 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1613 for subdir in lib64 lib share; do
1614 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1615 if test -d "$d" && test -f "$d/config.c"; then
1616 vi_cv_path_python3_conf="$d"
1617 fi
1618 done
1619 done
1620 fi
1621 ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001622
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001623 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
Bram Moolenaare5303952022-06-19 17:05:47 +01001624
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001625 if test "X$PYTHON3_CONFDIR" = "X"; then
1626 AC_MSG_RESULT([can't find it!])
1627 else
Bram Moolenaare5303952022-06-19 17:05:47 +01001628
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001629 dnl -- we need to examine Python's config/Makefile too
1630 dnl see what the interpreter is built from
1631 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1632 [
1633 pwd=`pwd`
1634 tmp_mkf="$pwd/config-PyMake$$"
1635 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001636__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001637 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001638 @echo "python3_LIBS='$(LIBS)'"
1639 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001640 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001641 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001642 @echo "python3_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001643eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001644 dnl -- delete the lines from make about Entering/Leaving directory
1645 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1646 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001647 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 +02001648 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1649 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1650 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1651 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1652 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001653 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001654 [
1655 if test "X$python3_DLLLIBRARY" != "X"; then
1656 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001657 elif test "X$python3_PYTHONFRAMEWORKPREFIX" != "X"; then
1658 vi_cv_dll_name_python3="${python3_PYTHONFRAMEWORKPREFIX}/${python3_INSTSONAME}"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001659 else
1660 vi_cv_dll_name_python3="$python3_INSTSONAME"
1661 fi
1662 ])
1663
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001664 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001665 if test "${vi_cv_path_python3_include}" = "${vi_cv_path_python3_platinclude}"; then
1666 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001667 else
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001668 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include} -I${vi_cv_path_python3_platinclude}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001669 fi
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001670 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
1671 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1672 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1673 fi
1674 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1675 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPy_LIMITED_API=${vi_cv_var_python3_stable_abi_hex}"
1676 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001677 PYTHON3_SRC="if_python3.c"
1678 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaare5303952022-06-19 17:05:47 +01001679
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001680 dnl On FreeBSD linking with "-pthread" is required to use threads.
1681 dnl _THREAD_SAFE must be used for compiling then.
1682 dnl The "-pthread" is added to $LIBS, so that the following check for
1683 dnl sigaltstack() will look in libc_r (it's there in libc!).
1684 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1685 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1686 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1687 AC_MSG_CHECKING([if -pthread should be used])
1688 threadsafe_flag=
1689 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001690 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001691 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001692 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001693 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001694 threadsafe_flag="-D_THREAD_SAFE"
1695 thread_lib="-pthread"
1696 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001697 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001698 threadsafe_flag="-pthreads"
1699 fi
1700 fi
1701 libs_save_old=$LIBS
1702 if test -n "$threadsafe_flag"; then
1703 cflags_save=$CFLAGS
1704 CFLAGS="$CFLAGS $threadsafe_flag"
1705 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001706 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001707 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1708 AC_MSG_RESULT(no); LIBS=$libs_save_old
1709 )
1710 CFLAGS=$cflags_save
1711 else
1712 AC_MSG_RESULT(no)
1713 fi
Bram Moolenaare5303952022-06-19 17:05:47 +01001714
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001715 dnl check that compiling a simple program still works with the flags
1716 dnl added for Python.
1717 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1718 cflags_save=$CFLAGS
1719 libs_save=$LIBS
1720 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1721 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001722 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001723 AC_MSG_RESULT(yes); python3_ok=yes,
1724 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1725 CFLAGS=$cflags_save
1726 LIBS=$libs_save
1727 if test "$python3_ok" = yes; then
1728 AC_DEFINE(FEAT_PYTHON3)
1729 else
1730 LIBS=$libs_save_old
1731 PYTHON3_SRC=
1732 PYTHON3_OBJ=
1733 PYTHON3_LIBS=
1734 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001735 fi
1736 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001737 else
1738 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001739 fi
1740 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001741 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1742 AC_MSG_ERROR([could not configure python3])
1743 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001744fi
1745
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001746AC_SUBST(PYTHON3_LIBS)
1747AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001748AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001749AC_SUBST(PYTHON3_SRC)
1750AC_SUBST(PYTHON3_OBJ)
1751
1752dnl if python2.x and python3.x are enabled one can only link in code
Bram Moolenaare5303952022-06-19 17:05:47 +01001753dnl with dlopen(), dlsym(), dlclose()
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001754if test "$python_ok" = yes && test "$python3_ok" = yes; then
1755 AC_DEFINE(DYNAMIC_PYTHON)
1756 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001757 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1758 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1759 fi
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001760 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001761 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001762 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001763 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001764 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001765 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001766 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001767 #include <dlfcn.h>
1768 /* If this program fails, then RTLD_GLOBAL is needed.
1769 * RTLD_GLOBAL will be used and then it is not possible to
1770 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001771 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001772 */
1773
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001774 static int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001775 {
1776 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001777 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001778 if (pylib != 0)
1779 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001780 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001781 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1782 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1783 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001784 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001785 (*init)();
1786 needed = (*simple)("import termios") == -1;
1787 (*final)();
1788 dlclose(pylib);
1789 }
1790 return !needed;
1791 }
1792
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001793 int main()
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001794 {
1795 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001796 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001797 not_needed = 1;
1798 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001799 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001800 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001801
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001802 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001803 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001804
1805 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1806 cflags_save=$CFLAGS
1807 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001808 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001809 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001810 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001811 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001812 #include <dlfcn.h>
1813 #include <wchar.h>
1814 /* If this program fails, then RTLD_GLOBAL is needed.
1815 * RTLD_GLOBAL will be used and then it is not possible to
1816 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001817 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001818 */
1819
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001820 static int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001821 {
1822 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001823 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001824 if (pylib != 0)
1825 {
1826 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1827 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1828 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1829 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1830 (*pfx)(prefix);
1831 (*init)();
1832 needed = (*simple)("import termios") == -1;
1833 (*final)();
1834 dlclose(pylib);
1835 }
1836 return !needed;
1837 }
1838
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001839 int main()
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001840 {
1841 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001842 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001843 not_needed = 1;
1844 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001845 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001846 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1847
1848 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001849 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001850
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001851 PYTHON_SRC="if_python.c"
1852 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001853 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001854 PYTHON_LIBS=
1855 PYTHON3_SRC="if_python3.c"
1856 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001857 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001858 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001859elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1860 AC_DEFINE(DYNAMIC_PYTHON)
1861 PYTHON_SRC="if_python.c"
1862 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001863 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001864 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001865elif test "$python_ok" = yes; then
1866 dnl Check that adding -fPIE works. It may be needed when using a static
1867 dnl Python library.
1868 AC_MSG_CHECKING([if -fPIE can be added for Python])
1869 cflags_save=$CFLAGS
1870 libs_save=$LIBS
1871 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1872 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001873 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001874 AC_MSG_RESULT(yes); fpie_ok=yes,
1875 AC_MSG_RESULT(no); fpie_ok=no)
1876 CFLAGS=$cflags_save
1877 LIBS=$libs_save
1878 if test $fpie_ok = yes; then
1879 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1880 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001881elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1882 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001883 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1884 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1885 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001886 PYTHON3_SRC="if_python3.c"
1887 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001888 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001889 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001890elif test "$python3_ok" = yes; then
1891 dnl Check that adding -fPIE works. It may be needed when using a static
1892 dnl Python library.
1893 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1894 cflags_save=$CFLAGS
1895 libs_save=$LIBS
1896 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1897 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001898 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001899 AC_MSG_RESULT(yes); fpie_ok=yes,
1900 AC_MSG_RESULT(no); fpie_ok=no)
1901 CFLAGS=$cflags_save
1902 LIBS=$libs_save
1903 if test $fpie_ok = yes; then
1904 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1905 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001906fi
1907
Bram Moolenaar071d4272004-06-13 20:20:40 +00001908AC_MSG_CHECKING(--enable-tclinterp argument)
1909AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001910 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001911 [enable_tclinterp="no"])
1912AC_MSG_RESULT($enable_tclinterp)
1913
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001914if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001915
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001916 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001917 AC_MSG_CHECKING(--with-tclsh argument)
1918 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1919 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001920 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001921 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1922 AC_SUBST(vi_cv_path_tcl)
1923
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001924 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1925 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1926 tclsh_name="tclsh8.4"
1927 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1928 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001929 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001930 tclsh_name="tclsh8.2"
1931 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1932 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001933 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1934 tclsh_name="tclsh8.0"
1935 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1936 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001937 dnl still didn't find it, try without version number
1938 if test "X$vi_cv_path_tcl" = "X"; then
1939 tclsh_name="tclsh"
1940 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1941 fi
1942 if test "X$vi_cv_path_tcl" != "X"; then
1943 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001944 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001945 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1946 AC_MSG_RESULT($tclver - OK);
1947 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 +01001948 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001949
1950 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001951 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001952 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 +00001953 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001954 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001955 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001956 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1957 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 +00001958 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001959 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001960 for try in $tclinc; do
1961 if test -f "$try/tcl.h"; then
1962 AC_MSG_RESULT($try/tcl.h)
1963 TCL_INC=$try
1964 break
1965 fi
1966 done
1967 if test -z "$TCL_INC"; then
1968 AC_MSG_RESULT(<not found>)
1969 SKIP_TCL=YES
1970 fi
1971 if test -z "$SKIP_TCL"; then
1972 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001973 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001974 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001975 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001976 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001977 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001978 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001979 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1980 tclcnf=`echo $tclinc | sed s/include/lib/g`
1981 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001982 fi
1983 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001984 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001985 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001986 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001987 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001988 if test "$enable_tclinterp" = "dynamic"; then
1989 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1990 else
1991 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1992 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001993 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001994 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001995 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 +00001996 break
1997 fi
1998 done
1999 if test -z "$TCL_LIBS"; then
2000 AC_MSG_RESULT(<not found>)
2001 AC_MSG_CHECKING(for Tcl library by myself)
2002 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00002003 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002004 for ext in .so .a ; do
2005 for ver in "" $tclver ; do
2006 for try in $tcllib ; do
2007 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01002008 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002009 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01002010 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002011 if test "$vim_cv_uname_output" = SunOS &&
2012 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002013 TCL_LIBS="$TCL_LIBS -R $try"
2014 fi
2015 break 3
2016 fi
2017 done
2018 done
2019 done
2020 if test -z "$TCL_LIBS"; then
2021 AC_MSG_RESULT(<not found>)
2022 SKIP_TCL=YES
2023 fi
2024 fi
2025 if test -z "$SKIP_TCL"; then
2026 AC_DEFINE(FEAT_TCL)
2027 TCL_SRC=if_tcl.c
2028 TCL_OBJ=objects/if_tcl.o
2029 TCL_PRO=if_tcl.pro
2030 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
2031 fi
2032 fi
2033 else
2034 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
2035 fi
2036 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01002037 if test "$enable_tclinterp" = "dynamic"; then
2038 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
2039 AC_DEFINE(DYNAMIC_TCL)
2040 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
2041 fi
2042 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002043 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
2044 AC_MSG_ERROR([could not configure Tcl])
2045 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002046fi
2047AC_SUBST(TCL_SRC)
2048AC_SUBST(TCL_OBJ)
2049AC_SUBST(TCL_PRO)
2050AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002051AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002052AC_SUBST(TCL_LIBS)
2053
2054AC_MSG_CHECKING(--enable-rubyinterp argument)
2055AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002056 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002057 [enable_rubyinterp="no"])
2058AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002059if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002060 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002061 AC_MSG_ERROR([cannot use Ruby with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01002062 fi
2063
Bram Moolenaar165641d2010-02-17 16:23:09 +01002064 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002065 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02002066 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
2067 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
2068 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01002069 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070 if test "X$vi_cv_path_ruby" != "X"; then
2071 AC_MSG_CHECKING(Ruby version)
K.Takata236ccbf2022-09-22 16:12:06 +01002072 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 +00002073 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02002074 AC_MSG_CHECKING(Ruby rbconfig)
2075 ruby_rbconfig="RbConfig"
2076 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
2077 ruby_rbconfig="Config"
2078 fi
2079 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002080 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002081 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 +00002082 if test "X$rubyhdrdir" != "X"; then
2083 AC_MSG_RESULT($rubyhdrdir)
2084 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002085 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2086 if test -d "$rubyarchdir"; then
2087 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002088 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002089 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002090 if test "X$rubyversion" = "X"; then
K.Takata236ccbf2022-09-22 16:12:06 +01002091 rubyversion=`$vi_cv_path_ruby -e "print RUBY_VERSION.gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002092 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002093 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002094 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002095 if test "X$rubylibs" != "X"; then
2096 RUBY_LIBS="$rubylibs"
2097 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002098 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2099 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002100 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Illia Bobyre379e212023-09-30 22:59:27 +02002101 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby" >/dev/null; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002102 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2103 elif test "$librubyarg" = "libruby.a"; then
2104 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2105 librubyarg="-lruby"
2106 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002107 fi
2108
2109 if test "X$librubyarg" != "X"; then
2110 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2111 fi
Zdenek Dohnal1d822af2022-11-23 12:06:08 +00002112
2113 dnl Here the Ruby LDFLAGS used to be added to LDFLAGS, but that turns
2114 dnl out to cause trouble and was removed.
2115
Bram Moolenaar071d4272004-06-13 20:20:40 +00002116 RUBY_SRC="if_ruby.c"
2117 RUBY_OBJ="objects/if_ruby.o"
2118 RUBY_PRO="if_ruby.pro"
2119 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002120 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002121 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002122 if test -z "$libruby_soname"; then
2123 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2124 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002125 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002126 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002127 RUBY_LIBS=
2128 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002129 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2130 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2131 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002132 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002133 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002134 fi
2135 else
K.Takata236ccbf2022-09-22 16:12:06 +01002136 AC_MSG_RESULT(too old; need Ruby version 1.9.1 or later)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002137 fi
2138 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002139
2140 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2141 AC_MSG_ERROR([could not configure Ruby])
2142 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002143fi
2144AC_SUBST(RUBY_SRC)
2145AC_SUBST(RUBY_OBJ)
2146AC_SUBST(RUBY_PRO)
2147AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002148AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002149AC_SUBST(RUBY_LIBS)
2150
2151AC_MSG_CHECKING(--enable-cscope argument)
2152AC_ARG_ENABLE(cscope,
2153 [ --enable-cscope Include cscope interface.], ,
2154 [enable_cscope="no"])
2155AC_MSG_RESULT($enable_cscope)
2156if test "$enable_cscope" = "yes"; then
2157 AC_DEFINE(FEAT_CSCOPE)
2158fi
2159
Bram Moolenaar071d4272004-06-13 20:20:40 +00002160AC_MSG_CHECKING(--disable-netbeans argument)
2161AC_ARG_ENABLE(netbeans,
2162 [ --disable-netbeans Disable NetBeans integration support.],
2163 , [enable_netbeans="yes"])
2164if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002165 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002166 AC_MSG_RESULT([cannot use NetBeans with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002167 enable_netbeans="no"
2168 else
2169 AC_MSG_RESULT(no)
2170 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002171else
2172 AC_MSG_RESULT(yes)
2173fi
2174
2175AC_MSG_CHECKING(--disable-channel argument)
2176AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002177 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002178 , [enable_channel="yes"])
2179if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002180 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002181 AC_MSG_RESULT([cannot use channels with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002182 enable_channel="no"
2183 else
2184 AC_MSG_RESULT(no)
2185 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002186else
2187 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002188 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002189 enable_netbeans="no"
2190 else
2191 AC_MSG_RESULT(yes)
2192 fi
2193fi
2194
Bram Moolenaar16435482016-01-24 21:31:54 +01002195if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002196 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002197 if test "x$HAIKU" = "xyes"; then
2198 AC_CHECK_LIB(network, socket)
2199 else
2200 AC_CHECK_LIB(socket, socket)
2201 fi
2202
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002203 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002204 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002205#include <stdio.h>
2206#include <stdlib.h>
2207#include <stdarg.h>
2208#include <fcntl.h>
2209#include <netdb.h>
2210#include <netinet/in.h>
2211#include <errno.h>
2212#include <sys/types.h>
2213#include <sys/socket.h>
2214 /* Check bitfields */
2215 struct nbbuf {
2216 unsigned int initDone:1;
2217 unsigned short signmaplen;
2218 };
2219 ], [
2220 /* Check creating a socket. */
2221 struct sockaddr_in server;
2222 struct addrinfo *res;
2223 (void)socket(AF_INET, SOCK_STREAM, 0);
2224 (void)htons(100);
2225 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2226 if (errno == ECONNREFUSED)
2227 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2228 (void)freeaddrinfo(res);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002229 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002230 [vim_cv_ipv6_networking="yes"],
2231 [vim_cv_ipv6_networking="no"])])
2232
2233 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2234 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002235 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002236 else
2237 dnl On Solaris we need the nsl library.
2238 AC_CHECK_LIB(nsl, gethostbyname)
2239 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002240 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002241#include <stdio.h>
2242#include <stdlib.h>
2243#include <stdarg.h>
2244#include <fcntl.h>
2245#include <netdb.h>
2246#include <netinet/in.h>
2247#include <errno.h>
2248#include <sys/types.h>
2249#include <sys/socket.h>
2250 /* Check bitfields */
2251 struct nbbuf {
2252 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002253 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002254 };
2255 ], [
2256 /* Check creating a socket. */
2257 struct sockaddr_in server;
2258 (void)socket(AF_INET, SOCK_STREAM, 0);
2259 (void)htons(100);
2260 (void)gethostbyname("microsoft.com");
2261 if (errno == ECONNREFUSED)
2262 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002263 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002264 [vim_cv_ipv4_networking="yes"],
2265 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2266 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002267fi
2268if test "$enable_netbeans" = "yes"; then
2269 AC_DEFINE(FEAT_NETBEANS_INTG)
2270 NETBEANS_SRC="netbeans.c"
2271 AC_SUBST(NETBEANS_SRC)
2272 NETBEANS_OBJ="objects/netbeans.o"
2273 AC_SUBST(NETBEANS_OBJ)
2274fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002275if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002276 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002277 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002278 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002279 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002280 AC_SUBST(CHANNEL_OBJ)
2281fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002282
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002283AC_MSG_CHECKING(--enable-terminal argument)
2284AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002285 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002286 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002287if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002288 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002289 AC_MSG_RESULT([cannot use terminal emulator with tiny features])
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002290 enable_terminal="no"
2291 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002292 if test "$enable_terminal" = "auto"; then
2293 enable_terminal="yes"
2294 AC_MSG_RESULT(defaulting to yes)
2295 else
2296 AC_MSG_RESULT(yes)
2297 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002298 fi
2299else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002300 if test "$enable_terminal" = "auto"; then
2301 enable_terminal="no"
2302 AC_MSG_RESULT(defaulting to no)
2303 else
2304 AC_MSG_RESULT(no)
2305 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002306fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002307if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002308 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002309 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 +02002310 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002311 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 +02002312 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002313 TERM_TEST="test_libvterm"
2314 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002315fi
2316
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002317AC_MSG_CHECKING(--enable-autoservername argument)
2318AC_ARG_ENABLE(autoservername,
2319 [ --enable-autoservername Automatically define servername at vim startup.], ,
2320 [enable_autoservername="no"])
2321AC_MSG_RESULT($enable_autoservername)
2322if test "$enable_autoservername" = "yes"; then
2323 AC_DEFINE(FEAT_AUTOSERVERNAME)
2324fi
2325
Bram Moolenaar071d4272004-06-13 20:20:40 +00002326AC_MSG_CHECKING(--enable-multibyte argument)
2327AC_ARG_ENABLE(multibyte,
2328 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002329 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002330AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002331if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002332 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2333 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002334fi
2335
Martin Tournoij25f3a142022-10-08 19:26:41 +01002336dnl Right-to-Left language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002337dnl unless ENABLE_RIGHTLEFT is undefined.
2338AC_MSG_CHECKING(--disable-rightleft argument)
2339AC_ARG_ENABLE(rightleft,
2340 [ --disable-rightleft Do not include Right-to-Left language support.],
2341 , [enable_rightleft="yes"])
2342if test "$enable_rightleft" = "yes"; then
2343 AC_MSG_RESULT(no)
2344else
2345 AC_MSG_RESULT(yes)
2346 AC_DEFINE(DISABLE_RIGHTLEFT)
2347fi
2348
Martin Tournoij25f3a142022-10-08 19:26:41 +01002349dnl Arabic language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002350dnl unless ENABLE_ARABIC is undefined.
2351AC_MSG_CHECKING(--disable-arabic argument)
2352AC_ARG_ENABLE(arabic,
2353 [ --disable-arabic Do not include Arabic language support.],
2354 , [enable_arabic="yes"])
2355if test "$enable_arabic" = "yes"; then
2356 AC_MSG_RESULT(no)
2357else
2358 AC_MSG_RESULT(yes)
2359 AC_DEFINE(DISABLE_ARABIC)
2360fi
2361
Bram Moolenaar14184a32019-02-16 15:10:30 +01002362dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002363AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002364 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002365
Bram Moolenaar071d4272004-06-13 20:20:40 +00002366AC_MSG_CHECKING(--enable-xim argument)
2367AC_ARG_ENABLE(xim,
2368 [ --enable-xim Include XIM input support.],
2369 AC_MSG_RESULT($enable_xim),
2370 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002371
2372AC_MSG_CHECKING(--enable-fontset argument)
2373AC_ARG_ENABLE(fontset,
2374 [ --enable-fontset Include X fontset output support.], ,
2375 [enable_fontset="no"])
2376AC_MSG_RESULT($enable_fontset)
2377dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2378
2379test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002380test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002381if test "$with_x" = no; then
2382 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2383else
2384 dnl Do this check early, so that its failure can override user requests.
2385
2386 AC_PATH_PROG(xmkmfpath, xmkmf)
2387
2388 AC_PATH_XTRA
2389
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002390 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002391 dnl be compiled with a special option.
2392 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002393 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002394 CFLAGS="$CFLAGS -W c,dll"
2395 LDFLAGS="$LDFLAGS -W l,dll"
2396 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2397 fi
2398
2399 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002400 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002401
2402 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2403 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2404 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2405 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002406 if test "$vim_cv_uname_output" = SunOS &&
2407 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002408 X_LIBS="$X_LIBS -R $x_libraries"
2409 fi
2410 fi
2411
2412 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2413 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2414 AC_MSG_RESULT(Corrected X includes to $x_includes)
2415 X_CFLAGS="$X_CFLAGS -I$x_includes"
2416 fi
2417
2418 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2419 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2420 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2421 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2422 dnl Same for "-R/usr/lib ".
2423 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2424
2425
2426 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002427 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2428 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002429 AC_MSG_CHECKING(if X11 header files can be found)
2430 cflags_save=$CFLAGS
2431 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002432 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
2433#include <X11/Intrinsic.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002434 AC_MSG_RESULT(yes),
2435 AC_MSG_RESULT(no); no_x=yes)
2436 CFLAGS=$cflags_save
2437
2438 if test "${no_x-no}" = yes; then
2439 with_x=no
2440 else
2441 AC_DEFINE(HAVE_X11)
2442 X_LIB="-lXt -lX11";
2443 AC_SUBST(X_LIB)
2444
2445 ac_save_LDFLAGS="$LDFLAGS"
2446 LDFLAGS="-L$x_libraries $LDFLAGS"
2447
2448 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2449 dnl For HP-UX 10.20 it must be before -lSM -lICE
2450 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2451 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2452
2453 dnl Some systems need -lnsl -lsocket when testing for ICE.
2454 dnl The check above doesn't do this, try here (again). Also needed to get
2455 dnl them after Xdmcp. link.sh will remove them when not needed.
2456 dnl Check for other function than above to avoid the cached value
2457 AC_CHECK_LIB(ICE, IceOpenConnection,
2458 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2459
2460 dnl Check for -lXpm (needed for some versions of Motif)
2461 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2462 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2463 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2464
2465 dnl Check that the X11 header files don't use implicit declarations
2466 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2467 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002468 dnl -Werror is GCC only, others like Solaris Studio might not like it
2469 if test "$GCC" = yes; then
2470 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2471 else
2472 CFLAGS="$CFLAGS $X_CFLAGS"
2473 fi
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002474 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002475 AC_MSG_RESULT(no),
2476 CFLAGS="$CFLAGS -Wno-implicit-int"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002477 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002478 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2479 AC_MSG_RESULT(test failed)
2480 )
2481 )
2482 CFLAGS=$cflags_save
2483
2484 LDFLAGS="$ac_save_LDFLAGS"
2485
Mike Gilberta055b442023-08-20 19:01:41 +02002486 AC_CHECK_SIZEOF([wchar_t])
2487 if test "$ac_cv_sizeof_wchar_t" -le 2; then
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002488 AC_DEFINE(SMALL_WCHAR_T)
2489 fi
2490
Bram Moolenaar071d4272004-06-13 20:20:40 +00002491 fi
2492fi
2493
Bram Moolenaard2a05492018-07-27 22:35:15 +02002494dnl Check if --with-x was given but it doesn't work.
2495if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2496 AC_MSG_ERROR([could not configure X])
2497fi
2498
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002499test "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 +00002500
2501AC_MSG_CHECKING(--enable-gui argument)
2502AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002503 [ --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 +00002504
2505dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2506dnl Do not use character classes for portability with old tools.
2507enable_gui_canon=`echo "_$enable_gui" | \
2508 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2509
2510dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002511SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002512SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002513SKIP_GNOME=YES
2514SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002515SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002516SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002517GUITYPE=NONE
2518
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002519if test "x$HAIKU" = "xyes"; then
2520 SKIP_HAIKU=
2521 case "$enable_gui_canon" in
2522 no) AC_MSG_RESULT(no GUI support)
2523 SKIP_HAIKU=YES ;;
2524 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2525 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2526 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2527 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2528 SKIP_HAIKU=YES ;;
2529 esac
2530elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002531 SKIP_PHOTON=
2532 case "$enable_gui_canon" in
2533 no) AC_MSG_RESULT(no GUI support)
2534 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002535 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2536 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002537 photon) AC_MSG_RESULT(Photon GUI support) ;;
2538 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2539 SKIP_PHOTON=YES ;;
2540 esac
2541
Bram Moolenaar040f9752020-08-11 23:08:48 +02002542elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2543 case "$enable_gui_canon" in
2544 no) AC_MSG_RESULT(no GUI support) ;;
2545 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2546 gui_auto=yes ;;
2547 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002548 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002549 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002550else
2551
Bram Moolenaar071d4272004-06-13 20:20:40 +00002552 case "$enable_gui_canon" in
2553 no|none) AC_MSG_RESULT(no GUI support) ;;
2554 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002555 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002556 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002557 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002558 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002559 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002560 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002561 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002562 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2563 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002564 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002565 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2566 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002567 motif) AC_MSG_RESULT(Motif GUI support)
2568 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002569 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2570 esac
2571
2572fi
2573
Bram Moolenaar071d4272004-06-13 20:20:40 +00002574if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2575 -a "$enable_gui_canon" != "gnome2"; then
2576 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2577 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002578 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002579 , enable_gtk2_check="yes")
2580 AC_MSG_RESULT($enable_gtk2_check)
2581 if test "x$enable_gtk2_check" = "xno"; then
2582 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002583 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002584 fi
2585fi
2586
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002587if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002588 AC_MSG_CHECKING(whether or not to look for GNOME)
2589 AC_ARG_ENABLE(gnome-check,
2590 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2591 , enable_gnome_check="no")
2592 AC_MSG_RESULT($enable_gnome_check)
2593 if test "x$enable_gnome_check" = "xno"; then
2594 SKIP_GNOME=YES
2595 fi
2596fi
2597
Bram Moolenaar98921892016-02-23 17:14:37 +01002598if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2599 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2600 AC_ARG_ENABLE(gtk3-check,
2601 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2602 , enable_gtk3_check="yes")
2603 AC_MSG_RESULT($enable_gtk3_check)
2604 if test "x$enable_gtk3_check" = "xno"; then
2605 SKIP_GTK3=YES
2606 fi
2607fi
2608
Bram Moolenaar071d4272004-06-13 20:20:40 +00002609if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2610 AC_MSG_CHECKING(whether or not to look for Motif)
2611 AC_ARG_ENABLE(motif-check,
2612 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2613 , enable_motif_check="yes")
2614 AC_MSG_RESULT($enable_motif_check)
2615 if test "x$enable_motif_check" = "xno"; then
2616 SKIP_MOTIF=YES
2617 fi
2618fi
2619
Bram Moolenaar071d4272004-06-13 20:20:40 +00002620dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002621dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002622dnl
2623dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002624dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002625dnl
2626AC_DEFUN(AM_PATH_GTK,
2627[
2628 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2629 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002630 no_gtk=""
2631 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2632 && $PKG_CONFIG --exists gtk+-2.0; then
2633 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002634 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2635 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002636 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2637 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2638 dnl something like that.
2639 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002640 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002641 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2642 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2643 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2644 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2645 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2646 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2647 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2648 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002649 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2650 && $PKG_CONFIG --exists gtk+-3.0; then
2651 {
2652 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2653 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2654
2655 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2656 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2657 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2658 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2659 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2660 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2661 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2662 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2663 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2664 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002665 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002666 dnl Put some text before the "no" to hint at installing the gtk-dev
2667 dnl packages.
2668 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002669 no_gtk=yes
2670 fi
2671
2672 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2673 {
2674 ac_save_CFLAGS="$CFLAGS"
2675 ac_save_LIBS="$LIBS"
2676 CFLAGS="$CFLAGS $GTK_CFLAGS"
2677 LIBS="$LIBS $GTK_LIBS"
2678
2679 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002680 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002681 dnl
2682 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002683 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002684#include <gtk/gtk.h>
2685#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002686#if STDC_HEADERS
2687# include <stdlib.h>
2688# include <stddef.h>
2689#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002690
2691int
2692main ()
2693{
2694int major, minor, micro;
2695char *tmp_version;
2696
2697system ("touch conf.gtktest");
2698
2699/* HP/UX 9 (%@#!) writes to sscanf strings */
2700tmp_version = g_strdup("$min_gtk_version");
2701if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2702 printf("%s, bad version string\n", "$min_gtk_version");
2703 exit(1);
2704 }
2705
2706if ((gtk_major_version > major) ||
2707 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2708 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2709 (gtk_micro_version >= micro)))
2710{
2711 return 0;
2712}
2713return 1;
2714}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002715])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002716 CFLAGS="$ac_save_CFLAGS"
2717 LIBS="$ac_save_LIBS"
2718 }
2719 fi
2720 if test "x$no_gtk" = x ; then
2721 if test "x$enable_gtktest" = "xyes"; then
2722 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2723 else
2724 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2725 fi
2726 ifelse([$2], , :, [$2])
2727 else
2728 {
2729 AC_MSG_RESULT(no)
2730 GTK_CFLAGS=""
2731 GTK_LIBS=""
2732 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002733 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2734 AC_MSG_ERROR([could not configure GTK])
2735 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002736 }
2737 fi
2738 }
2739 else
2740 GTK_CFLAGS=""
2741 GTK_LIBS=""
2742 ifelse([$3], , :, [$3])
2743 fi
2744 AC_SUBST(GTK_CFLAGS)
2745 AC_SUBST(GTK_LIBS)
2746 rm -f conf.gtktest
2747])
2748
2749dnl ---------------------------------------------------------------------------
2750dnl gnome
2751dnl ---------------------------------------------------------------------------
2752AC_DEFUN([GNOME_INIT_HOOK],
2753[
2754 AC_SUBST(GNOME_LIBS)
2755 AC_SUBST(GNOME_LIBDIR)
2756 AC_SUBST(GNOME_INCLUDEDIR)
2757
2758 AC_ARG_WITH(gnome-includes,
2759 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2760 [CFLAGS="$CFLAGS -I$withval"]
2761 )
2762
2763 AC_ARG_WITH(gnome-libs,
2764 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2765 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2766 )
2767
2768 AC_ARG_WITH(gnome,
2769 [ --with-gnome Specify prefix for GNOME files],
2770 if test x$withval = xyes; then
2771 want_gnome=yes
2772 ifelse([$1], [], :, [$1])
2773 else
2774 if test "x$withval" = xno; then
2775 want_gnome=no
2776 else
2777 want_gnome=yes
2778 LDFLAGS="$LDFLAGS -L$withval/lib"
2779 CFLAGS="$CFLAGS -I$withval/include"
2780 gnome_prefix=$withval/lib
2781 fi
2782 fi,
2783 want_gnome=yes)
2784
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002785 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002786 {
2787 AC_MSG_CHECKING(for libgnomeui-2.0)
2788 if $PKG_CONFIG --exists libgnomeui-2.0; then
2789 AC_MSG_RESULT(yes)
2790 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2791 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2792 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002793
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002794 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2795 dnl This might not be the right way but it works for me...
2796 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002797 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002798 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002799 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002800 GNOME_LIBS="$GNOME_LIBS -pthread"
2801 else
2802 AC_MSG_RESULT(no)
2803 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002804 $1
2805 else
2806 AC_MSG_RESULT(not found)
2807 if test "x$2" = xfail; then
2808 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2809 fi
2810 fi
2811 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002812 fi
2813])
2814
2815AC_DEFUN([GNOME_INIT],[
2816 GNOME_INIT_HOOK([],fail)
2817])
2818
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002819if test "X$PKG_CONFIG" = "X"; then
2820 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2821fi
2822
Bram Moolenaar071d4272004-06-13 20:20:40 +00002823
2824dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002825dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002826dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002827if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002828
2829 AC_MSG_CHECKING(--disable-gtktest argument)
2830 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2831 , enable_gtktest=yes)
2832 if test "x$enable_gtktest" = "xyes" ; then
2833 AC_MSG_RESULT(gtk test enabled)
2834 else
2835 AC_MSG_RESULT(gtk test disabled)
2836 fi
2837
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002838 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002839 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2840 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002841 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2842 dnl found.
2843 save_skip_gtk3=$SKIP_GTK3
2844 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002845 AM_PATH_GTK(2.2.0,
2846 [GUI_LIB_LOC="$GTK_LIBDIR"
2847 GTK_LIBNAME="$GTK_LIBS"
2848 GUI_INC_LOC="$GTK_CFLAGS"], )
2849 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002850 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002851 SKIP_MOTIF=YES
2852 GUITYPE=GTK
2853 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002854 else
2855 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002856 fi
2857 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002858 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002859 dnl
2860 dnl if GTK exists, then check for GNOME.
2861 dnl
2862 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002863 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002864 GNOME_INIT_HOOK([have_gnome=yes])
2865 if test "x$have_gnome" = xyes ; then
2866 AC_DEFINE(FEAT_GUI_GNOME)
2867 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2868 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002869 fi
2870 }
2871 fi
2872 fi
2873fi
2874
Bram Moolenaar98921892016-02-23 17:14:37 +01002875
2876dnl ---------------------------------------------------------------------------
2877dnl Check for GTK3.
2878dnl ---------------------------------------------------------------------------
2879if test -z "$SKIP_GTK3"; then
2880
2881 AC_MSG_CHECKING(--disable-gtktest argument)
2882 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2883 , enable_gtktest=yes)
2884 if test "x$enable_gtktest" = "xyes" ; then
2885 AC_MSG_RESULT(gtk test enabled)
2886 else
2887 AC_MSG_RESULT(gtk test disabled)
2888 fi
2889
Bram Moolenaar98921892016-02-23 17:14:37 +01002890 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002891 save_skip_gtk2=$SKIP_GTK2
2892 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002893 AM_PATH_GTK(3.0.0,
2894 [GUI_LIB_LOC="$GTK_LIBDIR"
2895 GTK_LIBNAME="$GTK_LIBS"
2896 GUI_INC_LOC="$GTK_CFLAGS"], )
2897 if test "x$GTK_CFLAGS" != "x"; then
2898 SKIP_GTK2=YES
2899 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002900 SKIP_MOTIF=YES
2901 GUITYPE=GTK
2902 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002903 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002904 else
2905 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002906 fi
2907 fi
2908fi
2909
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002910dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002911dnl glib-compile-resources is found in PATH, use GResource.
2912if test "x$GUITYPE" = "xGTK"; then
2913 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2914 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2915 if test "x$gdk_pixbuf_version" != x ; then
2916 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2917 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2918 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002919 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002920 AC_MSG_RESULT([OK.])
2921 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2922 AC_MSG_CHECKING([glib-compile-resources])
2923 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002924 GLIB_COMPILE_RESOURCES=""
2925 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002926 else
2927 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002928 AC_DEFINE(USE_GRESOURCE)
2929 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2930 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002931 fi
2932 else
2933 AC_MSG_RESULT([not usable.])
2934 fi
2935 else
2936 AC_MSG_RESULT([cannot obtain from pkg_config.])
2937 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002938
2939 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2940 AC_ARG_ENABLE(icon_cache_update,
2941 [ --disable-icon-cache-update update disabled],
2942 [],
2943 [enable_icon_cache_update="yes"])
2944 if test "$enable_icon_cache_update" = "yes"; then
2945 AC_MSG_RESULT([not set])
2946 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2947 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2948 AC_MSG_RESULT([not found in PATH.])
2949 fi
2950 else
2951 AC_MSG_RESULT([update disabled])
2952 fi
2953
2954 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2955 AC_ARG_ENABLE(desktop_database_update,
2956 [ --disable-desktop-database-update update disabled],
2957 [],
2958 [enable_desktop_database_update="yes"])
2959 if test "$enable_desktop_database_update" = "yes"; then
2960 AC_MSG_RESULT([not set])
2961 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2962 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2963 AC_MSG_RESULT([not found in PATH.])
2964 fi
2965 else
2966 AC_MSG_RESULT([update disabled])
2967 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002968fi
2969AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002970AC_SUBST(GRESOURCE_SRC)
2971AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002972AC_SUBST(GTK_UPDATE_ICON_CACHE)
2973AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002974
Bram Moolenaar071d4272004-06-13 20:20:40 +00002975dnl Check for Motif include files location.
2976dnl The LAST one found is used, this makes the highest version to be used,
2977dnl e.g. when Motif1.2 and Motif2.0 are both present.
2978
2979if test -z "$SKIP_MOTIF"; then
2980 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"
2981 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2982 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2983
2984 AC_MSG_CHECKING(for location of Motif GUI includes)
2985 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2986 GUI_INC_LOC=
2987 for try in $gui_includes; do
2988 if test -f "$try/Xm/Xm.h"; then
2989 GUI_INC_LOC=$try
2990 fi
2991 done
2992 if test -n "$GUI_INC_LOC"; then
2993 if test "$GUI_INC_LOC" = /usr/include; then
2994 GUI_INC_LOC=
2995 AC_MSG_RESULT(in default path)
2996 else
2997 AC_MSG_RESULT($GUI_INC_LOC)
2998 fi
2999 else
3000 AC_MSG_RESULT(<not found>)
3001 SKIP_MOTIF=YES
3002 fi
3003fi
3004
3005dnl Check for Motif library files location. In the same order as the include
3006dnl files, to avoid a mixup if several versions are present
3007
3008if test -z "$SKIP_MOTIF"; then
3009 AC_MSG_CHECKING(--with-motif-lib argument)
3010 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003011 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003012 [ MOTIF_LIBNAME="${withval}" ] )
3013
3014 if test -n "$MOTIF_LIBNAME"; then
3015 AC_MSG_RESULT($MOTIF_LIBNAME)
3016 GUI_LIB_LOC=
3017 else
3018 AC_MSG_RESULT(no)
3019
3020 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
3021 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
3022
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003023 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
3024 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01003025 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar01967f52023-04-12 16:24:03 +01003026 dnl OpenSUSE appears to use /usr/lib64.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003027 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar01967f52023-04-12 16:24:03 +01003028 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 +00003029 GUI_LIB_LOC=
3030 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01003031 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 +00003032 if test -f "$libtry"; then
3033 GUI_LIB_LOC=$try
3034 fi
3035 done
3036 done
3037 if test -n "$GUI_LIB_LOC"; then
Bram Moolenaar01967f52023-04-12 16:24:03 +01003038 dnl Remove /usr/lib, it causes trouble on some systems.
3039 dnl For consistency also remove other standard lib directories.
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003040 if test "$GUI_LIB_LOC" = /usr/lib \
Bram Moolenaar01967f52023-04-12 16:24:03 +01003041 -o "$GUI_LIB_LOC" = /usr/lib64 \
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003042 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
3043 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003044 GUI_LIB_LOC=
3045 AC_MSG_RESULT(in default path)
3046 else
3047 if test -n "$GUI_LIB_LOC"; then
3048 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003049 if test "$vim_cv_uname_output" = SunOS &&
3050 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003051 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
3052 fi
3053 fi
3054 fi
3055 MOTIF_LIBNAME=-lXm
3056 else
3057 AC_MSG_RESULT(<not found>)
3058 SKIP_MOTIF=YES
3059 fi
3060 fi
3061fi
3062
3063if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003064 GUITYPE=MOTIF
3065 AC_SUBST(MOTIF_LIBNAME)
3066fi
3067
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003068if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003069 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3070 dnl Avoid adding it when it twice
3071 if test -n "$GUI_INC_LOC"; then
3072 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3073 fi
3074 if test -n "$GUI_LIB_LOC"; then
3075 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3076 fi
3077
3078 dnl Check for -lXext and then for -lXmu
3079 ldflags_save=$LDFLAGS
3080 LDFLAGS="$X_LIBS $LDFLAGS"
3081 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3082 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3083 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3084 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3085 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3086 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3087 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3088 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3089 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3090 if test -z "$SKIP_MOTIF"; then
3091 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3092 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3093 fi
3094 LDFLAGS=$ldflags_save
3095
3096 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3097 AC_MSG_CHECKING(for extra X11 defines)
3098 NARROW_PROTO=
3099 rm -fr conftestdir
3100 if mkdir conftestdir; then
3101 cd conftestdir
3102 cat > Imakefile <<'EOF'
3103acfindx:
3104 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3105EOF
3106 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3107 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3108 fi
3109 cd ..
3110 rm -fr conftestdir
3111 fi
3112 if test -z "$NARROW_PROTO"; then
3113 AC_MSG_RESULT(no)
3114 else
3115 AC_MSG_RESULT($NARROW_PROTO)
3116 fi
3117 AC_SUBST(NARROW_PROTO)
3118fi
3119
3120dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3121dnl use the X11 include path
3122if test "$enable_xsmp" = "yes"; then
3123 cppflags_save=$CPPFLAGS
3124 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3125 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3126 CPPFLAGS=$cppflags_save
3127fi
3128
3129
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003130if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003131 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3132 cppflags_save=$CPPFLAGS
3133 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3134 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3135
3136 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3137 if test ! "$enable_xim" = "no"; then
3138 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3139 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3140 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003141 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003142 fi
3143 CPPFLAGS=$cppflags_save
3144
Bram Moolenaar54612582019-11-21 17:13:31 +01003145 dnl automatically enable XIM in the GUI
3146 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003147 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3148 enable_xim="yes"
3149 fi
3150fi
3151
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003152if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003153 cppflags_save=$CPPFLAGS
3154 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003155dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3156 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003157 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003158#include <X11/Intrinsic.h>
3159#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003160 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003161 AC_MSG_RESULT(yes)
3162 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3163 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003164 CPPFLAGS=$cppflags_save
3165fi
3166
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003167dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003168if test -z "$SKIP_MOTIF"; then
3169 cppflags_save=$CPPFLAGS
3170 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003171 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003172 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003173 else
Bram Moolenaarde1d7342022-06-05 20:03:17 +01003174 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 +01003175 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003176
Bram Moolenaar77c19352012-06-13 19:19:41 +02003177 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003178 dnl Solaris uses XpmAttributes_21, very annoying.
3179 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003180 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003181 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3182 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3183 )
3184 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003185 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003186 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003187 CPPFLAGS=$cppflags_save
3188fi
3189
3190if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3191 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3192 enable_xim="no"
3193fi
3194if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3195 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3196 enable_fontset="no"
3197fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003198if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003199 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3200 enable_fontset="no"
3201fi
3202
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003203dnl There is no test for the Haiku GUI, if it's selected it's used
3204if test -z "$SKIP_HAIKU"; then
3205 GUITYPE=HAIKUGUI
3206fi
3207
Bram Moolenaar071d4272004-06-13 20:20:40 +00003208if test -z "$SKIP_PHOTON"; then
3209 GUITYPE=PHOTONGUI
3210fi
3211
3212AC_SUBST(GUI_INC_LOC)
3213AC_SUBST(GUI_LIB_LOC)
3214AC_SUBST(GUITYPE)
3215AC_SUBST(GUI_X_LIBS)
3216
3217if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3218 AC_MSG_ERROR([cannot use workshop without Motif])
3219fi
3220
3221dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3222if test "$enable_xim" = "yes"; then
3223 AC_DEFINE(FEAT_XIM)
3224fi
3225if test "$enable_fontset" = "yes"; then
3226 AC_DEFINE(FEAT_XFONTSET)
3227fi
3228
3229
3230dnl ---------------------------------------------------------------------------
3231dnl end of GUI-checking
3232dnl ---------------------------------------------------------------------------
3233
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003234AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003235if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003236 dnl Linux
3237 AC_MSG_RESULT([/proc/self/exe])
3238 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3239elif test -L "/proc/self/path/a.out"; then
3240 dnl Solaris
3241 AC_MSG_RESULT([/proc/self/path/a.out])
3242 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3243elif test -L "/proc/curproc/file"; then
3244 dnl FreeBSD
3245 AC_MSG_RESULT([/proc/curproc/file])
3246 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003247else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003248 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003249fi
3250
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003251dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003252AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003253case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003254 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003255 AC_MSG_CHECKING(for CYGWIN clipboard support)
3256 if test "x$with_x" = "xno" ; then
3257 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3258 AC_MSG_RESULT(yes)
3259 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3260 else
3261 AC_MSG_RESULT(no - using X11)
3262 fi ;;
3263
3264 *) CYGWIN=no; AC_MSG_RESULT(no);;
3265esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003266
Bram Moolenaar071d4272004-06-13 20:20:40 +00003267dnl Checks for libraries and include files.
3268
Bram Moolenaar446cb832008-06-24 21:56:24 +00003269AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3270 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003271 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003272#include "confdefs.h"
3273#include <ctype.h>
3274#if STDC_HEADERS
3275# include <stdlib.h>
3276# include <stddef.h>
3277#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003278int main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003279 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003280 vim_cv_toupper_broken=yes
3281 ],[
3282 vim_cv_toupper_broken=no
3283 ],[
3284 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3285 ])])
3286
3287if test "x$vim_cv_toupper_broken" = "xyes" ; then
3288 AC_DEFINE(BROKEN_TOUPPER)
3289fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003290
3291AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003292AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003293 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3294 AC_MSG_RESULT(no))
3295
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003296AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003297AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003298 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3299 AC_MSG_RESULT(no))
3300
Bram Moolenaar071d4272004-06-13 20:20:40 +00003301dnl Checks for header files.
3302AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3303dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3304if test "$HAS_ELF" = 1; then
3305 AC_CHECK_LIB(elf, main)
3306fi
3307
3308AC_HEADER_DIRENT
3309
Bram Moolenaar071d4272004-06-13 20:20:40 +00003310dnl If sys/wait.h is not found it might still exist but not be POSIX
3311dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3312if test $ac_cv_header_sys_wait_h = no; then
3313 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003314 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3315 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003316 AC_MSG_RESULT(yes)
3317 AC_DEFINE(HAVE_SYS_WAIT_H)
3318 AC_DEFINE(HAVE_UNION_WAIT),
3319 AC_MSG_RESULT(no))
3320fi
3321
Bram Moolenaar779a7752016-01-30 23:26:34 +01003322AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003323 sys/select.h sys/utsname.h termcap.h fcntl.h \
3324 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3325 termio.h iconv.h inttypes.h langinfo.h math.h \
3326 unistd.h stropts.h errno.h sys/resource.h \
3327 sys/systeminfo.h locale.h sys/stream.h termios.h \
3328 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003329 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003330 util/debug.h util/msg18n.h frame.h sys/acl.h \
3331 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003332
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003333dnl sys/ptem.h depends on sys/stream.h on Solaris
3334AC_CHECK_HEADERS(sys/ptem.h, [], [],
3335[#if defined HAVE_SYS_STREAM_H
3336# include <sys/stream.h>
3337#endif])
3338
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003339dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3340AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3341[#if defined HAVE_SYS_PARAM_H
3342# include <sys/param.h>
3343#endif])
3344
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003345
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003346dnl pthread_np.h may exist but can only be used after including pthread.h
3347AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003348AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003349#include <pthread.h>
3350#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003351 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003352 AC_MSG_RESULT(yes)
3353 AC_DEFINE(HAVE_PTHREAD_NP_H),
3354 AC_MSG_RESULT(no))
3355
Bram Moolenaare344bea2005-09-01 20:46:49 +00003356AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003357if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003358 dnl The strings.h file on OS/X contains a warning and nothing useful.
3359 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3360else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003361
3362dnl Check if strings.h and string.h can both be included when defined.
3363AC_MSG_CHECKING([if strings.h can be included after string.h])
3364cppflags_save=$CPPFLAGS
3365CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003366AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003367#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3368# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3369 /* but don't do it on AIX 5.1 (Uribarri) */
3370#endif
3371#ifdef HAVE_XM_XM_H
3372# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3373#endif
3374#ifdef HAVE_STRING_H
3375# include <string.h>
3376#endif
3377#if defined(HAVE_STRINGS_H)
3378# include <strings.h>
3379#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003380 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003381 AC_MSG_RESULT(yes),
3382 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3383 AC_MSG_RESULT(no))
3384CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003385fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003386
3387dnl Checks for typedefs, structures, and compiler characteristics.
3388AC_PROG_GCC_TRADITIONAL
3389AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003390AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003391AC_TYPE_MODE_T
3392AC_TYPE_OFF_T
3393AC_TYPE_PID_T
3394AC_TYPE_SIZE_T
3395AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003396AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003397
Illia Bobyrf39842f2023-08-27 18:21:23 +02003398AC_CHECK_HEADERS_ONCE([sys/time.h])
3399
Bram Moolenaar071d4272004-06-13 20:20:40 +00003400AC_CHECK_TYPE(ino_t, long)
3401AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003402AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003403AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003404
3405AC_MSG_CHECKING(for rlim_t)
3406if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3407 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3408else
3409 AC_EGREP_CPP(dnl
3410changequote(<<,>>)dnl
3411<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3412changequote([,]),
3413 [
3414#include <sys/types.h>
3415#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003416# include <stdlib.h>
3417# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003418#endif
3419#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003420# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003421#endif
3422 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3423 AC_MSG_RESULT($ac_cv_type_rlim_t)
3424fi
3425if test $ac_cv_type_rlim_t = no; then
3426 cat >> confdefs.h <<\EOF
3427#define rlim_t unsigned long
3428EOF
3429fi
3430
3431AC_MSG_CHECKING(for stack_t)
3432if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3433 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3434else
3435 AC_EGREP_CPP(stack_t,
3436 [
3437#include <sys/types.h>
3438#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003439# include <stdlib.h>
3440# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003441#endif
3442#include <signal.h>
3443 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3444 AC_MSG_RESULT($ac_cv_type_stack_t)
3445fi
3446if test $ac_cv_type_stack_t = no; then
3447 cat >> confdefs.h <<\EOF
3448#define stack_t struct sigaltstack
3449EOF
3450fi
3451
3452dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3453AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003454AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003455#include <sys/types.h>
3456#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003457# include <stdlib.h>
3458# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003459#endif
3460#include <signal.h>
3461#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003462 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003463 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3464 AC_MSG_RESULT(no))
3465
3466olibs="$LIBS"
3467AC_MSG_CHECKING(--with-tlib argument)
3468AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3469if test -n "$with_tlib"; then
3470 AC_MSG_RESULT($with_tlib)
3471 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003472 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003473 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003474 dnl Need to check for tgetent() below.
3475 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003476else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003477 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003478 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3479 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003480 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003481 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003482 dnl Older versions of ncurses have bugs, get a new one!
3483 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003484 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003485 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003486 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3487 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003488 esac
3489 for libname in $tlibs; do
3490 AC_CHECK_LIB(${libname}, tgetent,,)
3491 if test "x$olibs" != "x$LIBS"; then
3492 dnl It's possible that a library is found but it doesn't work
3493 dnl e.g., shared library that cannot be found
3494 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003495 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003496#ifdef HAVE_TERMCAP_H
3497# include <termcap.h>
3498#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003499#if STDC_HEADERS
3500# include <stdlib.h>
3501# include <stddef.h>
3502#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003503int main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003504 res="OK", res="FAIL", res="FAIL")
3505 if test "$res" = "OK"; then
3506 break
3507 fi
3508 AC_MSG_RESULT($libname library is not usable)
3509 LIBS="$olibs"
3510 fi
3511 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003512 if test "x$olibs" = "x$LIBS"; then
3513 AC_MSG_RESULT(no terminal library found)
3514 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003515fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003516
3517if test "x$olibs" = "x$LIBS"; then
3518 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003519 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3520 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003521 AC_MSG_RESULT(yes),
3522 AC_MSG_ERROR([NOT FOUND!
3523 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003524 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003525 Or specify the name of the library with --with-tlib.]))
3526fi
3527
Bram Moolenaar446cb832008-06-24 21:56:24 +00003528AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3529 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003530 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003531#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003532#ifdef HAVE_TERMCAP_H
3533# include <termcap.h>
3534#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003535#ifdef HAVE_STRING_H
3536# include <string.h>
3537#endif
3538#if STDC_HEADERS
3539# include <stdlib.h>
3540# include <stddef.h>
3541#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003542int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003543{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003544 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003545 vim_cv_terminfo=no
3546 ],[
3547 vim_cv_terminfo=yes
3548 ],[
3549 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3550 ])
3551 ])
3552
3553if test "x$vim_cv_terminfo" = "xyes" ; then
3554 AC_DEFINE(TERMINFO)
3555fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003556
Bram Moolenaara88254f2017-11-02 23:04:14 +01003557AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003558 [
3559 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003560#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003561#ifdef HAVE_TERMCAP_H
3562# include <termcap.h>
3563#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003564#if STDC_HEADERS
3565# include <stdlib.h>
3566# include <stddef.h>
3567#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003568int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003569{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003570 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003571 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003572 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003573 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003574 ],[
3575 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003576 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003577 ])
3578
Bram Moolenaara88254f2017-11-02 23:04:14 +01003579if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003580 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003581fi
3582
3583AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003584AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003585#ifdef HAVE_TERMCAP_H
3586# include <termcap.h>
3587#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003588 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003589 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3590 [AC_MSG_RESULT(no)
3591 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003592 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003593#ifdef HAVE_TERMCAP_H
3594# include <termcap.h>
3595#endif
3596extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003597 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003598 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3599 AC_MSG_RESULT(no))]
3600 )
3601
3602AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003603AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003604#ifdef HAVE_TERMCAP_H
3605# include <termcap.h>
3606#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003607 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003608 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3609 [AC_MSG_RESULT(no)
3610 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003611 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003612#ifdef HAVE_TERMCAP_H
3613# include <termcap.h>
3614#endif
3615extern char *UP, *BC, PC;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003616 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003617 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3618 AC_MSG_RESULT(no))]
3619 )
3620
3621AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003622AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003623#ifdef HAVE_TERMCAP_H
3624# include <termcap.h>
3625#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003626 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003627 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3628 AC_MSG_RESULT(no))
3629
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003630AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003631AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003632#ifdef HAVE_TERMCAP_H
3633# include <termcap.h>
3634#endif
3635#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003636 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003637 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3638 AC_MSG_RESULT(no))
3639
Bram Moolenaar071d4272004-06-13 20:20:40 +00003640dnl On some SCO machines sys/select redefines struct timeval
3641AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003642AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003643#include <sys/types.h>
3644#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003645#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003646 AC_MSG_RESULT(yes)
3647 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3648 AC_MSG_RESULT(no))
3649
Bram Moolenaar071d4272004-06-13 20:20:40 +00003650dnl Checks for pty.c (copied from screen) ==========================
3651AC_MSG_CHECKING(for /dev/ptc)
3652if test -r /dev/ptc; then
3653 AC_DEFINE(HAVE_DEV_PTC)
3654 AC_MSG_RESULT(yes)
3655else
3656 AC_MSG_RESULT(no)
3657fi
3658
3659AC_MSG_CHECKING(for SVR4 ptys)
3660if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003661 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003662// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3663char *ptsname(int);
3664int unlockpt(int);
3665int grantpt(int);
3666 ], [
3667 ptsname(0);
3668 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003669 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003670 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3671 AC_MSG_RESULT(no))
3672else
3673 AC_MSG_RESULT(no)
3674fi
3675
3676AC_MSG_CHECKING(for ptyranges)
3677if test -d /dev/ptym ; then
3678 pdir='/dev/ptym'
3679else
3680 pdir='/dev'
3681fi
3682dnl SCO uses ptyp%d
3683AC_EGREP_CPP(yes,
3684[#ifdef M_UNIX
3685 yes;
3686#endif
3687 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3688dnl if test -c /dev/ptyp19; then
3689dnl ptys=`echo /dev/ptyp??`
3690dnl else
3691dnl ptys=`echo $pdir/pty??`
3692dnl fi
3693if test "$ptys" != "$pdir/pty??" ; then
3694 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3695 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3696 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3697 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3698 AC_MSG_RESULT([$p0 / $p1])
3699else
3700 AC_MSG_RESULT([don't know])
3701fi
3702
Bram Moolenaar071d4272004-06-13 20:20:40 +00003703dnl Checks for library functions. ===================================
3704
Bram Moolenaar071d4272004-06-13 20:20:40 +00003705dnl check if struct sigcontext is defined (used for SGI only)
3706AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003707AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003708#include <signal.h>
Sam Jamesf8ea1062022-11-05 15:13:50 +00003709int test_sig()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003710{
3711 struct sigcontext *scont;
3712 scont = (struct sigcontext *)0;
3713 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003714} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003715 AC_MSG_RESULT(yes)
3716 AC_DEFINE(HAVE_SIGCONTEXT),
3717 AC_MSG_RESULT(no))
3718
3719dnl tricky stuff: try to find out if getcwd() is implemented with
3720dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003721AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3722 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003723 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003724#include "confdefs.h"
3725#ifdef HAVE_UNISTD_H
3726#include <unistd.h>
3727#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003728char *dagger[] = { "IFS=pwd", 0 };
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003729int main()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003730{
3731 char buffer[500];
3732 extern char **environ;
3733 environ = dagger;
3734 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003735}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003736 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003737 vim_cv_getcwd_broken=no
3738 ],[
3739 vim_cv_getcwd_broken=yes
3740 ],[
3741 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3742 ])
3743 ])
3744
3745if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3746 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003747 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003748fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003749
Bram Moolenaar25153e12010-02-24 14:47:08 +01003750dnl Check for functions in one big call, to reduce the size of configure.
3751dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003752AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003753 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003754 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003755 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003756 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003757 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
Bram Moolenaar08210f82023-04-13 19:15:54 +01003758 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt \
3759 clock_gettime)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003760AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003761AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003762
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003763dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3764dnl appropriate, so that off_t is 64 bits when needed.
3765AC_SYS_LARGEFILE
3766
Bram Moolenaar21606672019-06-14 20:40:58 +02003767AC_MSG_CHECKING(--enable-canberra argument)
3768AC_ARG_ENABLE(canberra,
3769 [ --disable-canberra Do not use libcanberra.],
3770 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003771
Bram Moolenaar21606672019-06-14 20:40:58 +02003772if test "$enable_canberra" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003773 if test "$features" = "huge"; then
Bram Moolenaar21606672019-06-14 20:40:58 +02003774 AC_MSG_RESULT(Defaulting to yes)
3775 enable_canberra="yes"
3776 else
3777 AC_MSG_RESULT(Defaulting to no)
3778 enable_canberra="no"
3779 fi
3780else
Bram Moolenaar12471262022-01-18 11:11:25 +00003781 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01003782 AC_MSG_RESULT([cannot use sound with tiny features])
Bram Moolenaar12471262022-01-18 11:11:25 +00003783 enable_canberra="no"
3784 else
3785 AC_MSG_RESULT($enable_canberra)
3786 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003787fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003788if test "$enable_canberra" = "yes"; then
3789 if test "x$PKG_CONFIG" != "xno"; then
3790 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3791 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3792 fi
3793 if test "x$canberra_lib" = "x"; then
3794 canberra_lib=-lcanberra
3795 canberra_cflags=-D_REENTRANT
3796 fi
3797 AC_MSG_CHECKING(for libcanberra)
3798 ac_save_CFLAGS="$CFLAGS"
3799 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003800 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003801 CFLAGS="$CFLAGS $canberra_cflags"
3802 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003803 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003804 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003805 # include <canberra.h>
3806 ], [
3807 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003808 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003809 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003810 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003811fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003812
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003813AC_MSG_CHECKING(--enable-libsodium argument)
3814AC_ARG_ENABLE(libsodium,
3815 [ --disable-libsodium Do not use libsodium.],
3816 , [enable_libsodium="maybe"])
3817
3818if test "$enable_libsodium" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003819 if test "$features" = "huge"; then
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003820 AC_MSG_RESULT(Defaulting to yes)
3821 enable_libsodium="yes"
3822 else
3823 AC_MSG_RESULT(Defaulting to no)
3824 enable_libsodium="no"
3825 fi
3826else
3827 AC_MSG_RESULT($enable_libsodium)
3828fi
3829if test "$enable_libsodium" = "yes"; then
3830 if test "x$PKG_CONFIG" != "xno"; then
3831 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3832 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3833 fi
3834 if test "x$libsodium_lib" = "x"; then
3835 libsodium_lib=-lsodium
3836 libsodium_cflags=
3837 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003838 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003839 ac_save_CFLAGS="$CFLAGS"
3840 ac_save_LIBS="$LIBS"
3841 CFLAGS="$CFLAGS $libsodium_cflags"
3842 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003843 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003844 # include <sodium.h>
3845 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003846 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003847 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3848 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3849fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003850
Bram Moolenaar071d4272004-06-13 20:20:40 +00003851dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3852AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003853AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003854[#include <sys/types.h>
3855#include <sys/stat.h>],
3856[ struct stat st;
3857 int n;
3858
3859 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003860 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003861 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3862 AC_MSG_RESULT(no))
3863
Paul Ollis65745772022-06-05 16:55:54 +01003864dnl Check for timer_create. It probably requires the 'rt' library.
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003865dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
3866dnl works, on Solaris timer_create() exists but fails at runtime.
Bram Moolenaarefffa532022-07-28 22:39:54 +01003867AC_CACHE_CHECK([for timer_create without -lrt], [vim_cv_timer_create], [
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003868AC_RUN_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar5748b7f2022-07-28 12:09:04 +01003869#if STDC_HEADERS
3870# include <stdlib.h>
3871# include <stddef.h>
3872#endif
3873#include <signal.h>
3874#include <time.h>
Bram Moolenaare5303952022-06-19 17:05:47 +01003875static void set_flag(union sigval sv) {}
Paul Ollis65745772022-06-05 16:55:54 +01003876], [
3877 struct timespec ts;
3878 struct sigevent action = {0};
3879 timer_t timer_id;
3880
3881 action.sigev_notify = SIGEV_THREAD;
3882 action.sigev_notify_function = set_flag;
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003883 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3884 exit(1); // cannot create a monotonic timer
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003885 ])],
Bram Moolenaarefffa532022-07-28 22:39:54 +01003886 vim_cv_timer_create=yes,
3887 vim_cv_timer_create=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003888 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003889 )])
Paul Ollis65745772022-06-05 16:55:54 +01003890
Bram Moolenaarefffa532022-07-28 22:39:54 +01003891dnl If the previous failed, check for timer_create() and linking with -lrt.
3892if test "x$vim_cv_timer_create" = "xno" ; then
3893 save_LIBS="$LIBS"
3894 LIBS="$LIBS -lrt"
3895 AC_CACHE_CHECK([for timer_create with -lrt], [vim_cv_timer_create_with_lrt], [
3896 AC_RUN_IFELSE([AC_LANG_PROGRAM([
3897 #if STDC_HEADERS
3898 # include <stdlib.h>
3899 # include <stddef.h>
3900 #endif
3901 #include <signal.h>
3902 #include <time.h>
3903 static void set_flag(union sigval sv) {}
3904 ], [
3905 struct timespec ts;
3906 struct sigevent action = {0};
3907 timer_t timer_id;
3908
3909 action.sigev_notify = SIGEV_THREAD;
3910 action.sigev_notify_function = set_flag;
3911 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3912 exit(1); // cannot create a monotonic timer
3913 ])],
3914 vim_cv_timer_create_with_lrt=yes,
3915 vim_cv_timer_create_with_lrt=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003916 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 +01003917 )])
3918 LIBS="$save_LIBS"
3919else
3920 vim_cv_timer_create_with_lrt=no
3921fi
Richard Purdie509695c2022-07-24 20:48:00 +01003922
3923if test "x$vim_cv_timer_create" = "xyes" ; then
3924 AC_DEFINE(HAVE_TIMER_CREATE)
3925fi
Bram Moolenaarefffa532022-07-28 22:39:54 +01003926if test "x$vim_cv_timer_create_with_lrt" = "xyes" ; then
3927 AC_DEFINE(HAVE_TIMER_CREATE)
3928 LIBS="$LIBS -lrt"
3929fi
Paul Ollis65745772022-06-05 16:55:54 +01003930
Bram Moolenaar446cb832008-06-24 21:56:24 +00003931AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3932 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003933 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003934#include "confdefs.h"
3935#if STDC_HEADERS
3936# include <stdlib.h>
3937# include <stddef.h>
3938#endif
3939#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003940#include <sys/stat.h>
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003941int main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003942 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003943 vim_cv_stat_ignores_slash=yes
3944 ],[
3945 vim_cv_stat_ignores_slash=no
3946 ],[
3947 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3948 ])
3949 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003950
Bram Moolenaar446cb832008-06-24 21:56:24 +00003951if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3952 AC_DEFINE(STAT_IGNORES_SLASH)
3953fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003954
3955dnl nanoseconds field of struct stat
3956AC_CACHE_CHECK([for nanoseconds field of struct stat],
3957 ac_cv_struct_st_mtim_nsec,
3958 [ac_save_CPPFLAGS="$CPPFLAGS"
3959 ac_cv_struct_st_mtim_nsec=no
3960 # st_mtim.tv_nsec -- the usual case
3961 # st_mtim._tv_nsec -- Solaris 2.6, if
3962 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3963 # && !defined __EXTENSIONS__)
3964 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3965 # st_mtime_n -- AIX 5.2 and above
3966 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3967 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
3968 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003969 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3970#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003971 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3972 done
3973 CPPFLAGS="$ac_save_CPPFLAGS"
3974])
3975if test $ac_cv_struct_st_mtim_nsec != no; then
3976 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3977 [Define if struct stat contains a nanoseconds field])
3978fi
Bram Moolenaare5303952022-06-19 17:05:47 +01003979
Bram Moolenaar071d4272004-06-13 20:20:40 +00003980dnl Link with iconv for charset translation, if not found without library.
3981dnl check for iconv() requires including iconv.h
3982dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3983dnl has been installed.
3984AC_MSG_CHECKING(for iconv_open())
3985save_LIBS="$LIBS"
3986LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003987AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003988#ifdef HAVE_ICONV_H
3989# include <iconv.h>
3990#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003991 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003992 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3993 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003994 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003995#ifdef HAVE_ICONV_H
3996# include <iconv.h>
3997#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003998 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003999 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
4000 AC_MSG_RESULT(no)))
4001
4002
4003AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004004AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004005#ifdef HAVE_LANGINFO_H
4006# include <langinfo.h>
4007#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004008], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004009 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
4010 AC_MSG_RESULT(no))
4011
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01004012dnl Floating point support may require the "m" library
Bram Moolenaar446cb832008-06-24 21:56:24 +00004013AC_CHECK_LIB(m, strtod)
Bram Moolenaar446cb832008-06-24 21:56:24 +00004014
Bram Moolenaara6b89762016-02-29 21:38:26 +01004015dnl isinf() and isnan() need to include header files and may need -lm.
4016AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004017AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01004018#ifdef HAVE_MATH_H
4019# include <math.h>
4020#endif
4021#if STDC_HEADERS
4022# include <stdlib.h>
4023# include <stddef.h>
4024#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004025], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004026 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
4027 AC_MSG_RESULT(no))
4028
4029AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004030AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01004031#ifdef HAVE_MATH_H
4032# include <math.h>
4033#endif
4034#if STDC_HEADERS
4035# include <stdlib.h>
4036# include <stddef.h>
4037#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004038], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004039 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
4040 AC_MSG_RESULT(no))
4041
Bram Moolenaar071d4272004-06-13 20:20:40 +00004042dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
4043dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004044dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004045AC_MSG_CHECKING(--disable-acl argument)
4046AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01004047 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004048 , [enable_acl="yes"])
4049if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01004050 AC_MSG_RESULT(no)
4051 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004052 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
4053 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
4054
Bram Moolenaard6d30422018-01-28 22:48:55 +01004055 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004056 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004057#include <sys/types.h>
4058#ifdef HAVE_SYS_ACL_H
4059# include <sys/acl.h>
4060#endif
4061acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4062 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004063 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004064 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4065 AC_MSG_RESULT(no))
4066
Bram Moolenaard6d30422018-01-28 22:48:55 +01004067 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4068 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004069 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004070#ifdef HAVE_SYS_ACL_H
4071# include <sys/acl.h>
4072#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004073 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004074 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004075 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004076
Bram Moolenaard6d30422018-01-28 22:48:55 +01004077 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004078 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004079#if STDC_HEADERS
4080# include <stdlib.h>
4081# include <stddef.h>
4082#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004083#ifdef HAVE_SYS_ACL_H
4084# include <sys/acl.h>
4085#endif
4086#ifdef HAVE_SYS_ACCESS_H
4087# include <sys/access.h>
4088#endif
4089#define _ALL_SOURCE
4090
4091#include <sys/stat.h>
4092
4093int aclsize;
4094struct acl *aclent;], [aclsize = sizeof(struct acl);
4095 aclent = (void *)malloc(aclsize);
4096 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004097 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004098 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4099 AC_MSG_RESULT(no))
4100else
4101 AC_MSG_RESULT(yes)
4102fi
4103
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004104if test "x$GTK_CFLAGS" != "x"; then
4105 dnl pango_shape_full() is new, fall back to pango_shape().
4106 AC_MSG_CHECKING(for pango_shape_full)
4107 ac_save_CFLAGS="$CFLAGS"
4108 ac_save_LIBS="$LIBS"
4109 CFLAGS="$CFLAGS $GTK_CFLAGS"
4110 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004111 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004112 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004113 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004114 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4115 AC_MSG_RESULT(no))
4116 CFLAGS="$ac_save_CFLAGS"
4117 LIBS="$ac_save_LIBS"
4118fi
4119
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004120AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004121AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004122 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004123 [enable_gpm="yes"])
4124
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004125if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4126 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004127 dnl Checking if gpm support can be compiled
4128 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4129 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004130 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004131 [#include <gpm.h>
4132 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004133 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004134 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4135 dnl FEAT_MOUSE_GPM if mouse support is included
4136 [vi_cv_have_gpm=yes],
4137 [vi_cv_have_gpm=no])
4138 [LIBS="$olibs"]
4139 )
4140 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004141 if test "$enable_gpm" = "yes"; then
4142 LIBS="$LIBS -lgpm"
4143 else
4144 AC_DEFINE(DYNAMIC_GPM)
4145 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004146 AC_DEFINE(HAVE_GPM)
4147 fi
4148else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004149 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004150fi
4151
Bram Moolenaar446cb832008-06-24 21:56:24 +00004152AC_MSG_CHECKING(--disable-sysmouse argument)
4153AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004154 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004155 [enable_sysmouse="yes"])
4156
4157if test "$enable_sysmouse" = "yes"; then
4158 AC_MSG_RESULT(no)
4159 dnl Checking if sysmouse support can be compiled
4160 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4161 dnl defines FEAT_SYSMOUSE if mouse support is included
4162 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004163 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004164 [#include <sys/consio.h>
4165 #include <signal.h>
4166 #include <sys/fbio.h>],
4167 [struct mouse_info mouse;
4168 mouse.operation = MOUSE_MODE;
4169 mouse.operation = MOUSE_SHOW;
4170 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004171 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004172 [vi_cv_have_sysmouse=yes],
4173 [vi_cv_have_sysmouse=no])
4174 )
4175 if test $vi_cv_have_sysmouse = yes; then
4176 AC_DEFINE(HAVE_SYSMOUSE)
4177 fi
4178else
4179 AC_MSG_RESULT(yes)
4180fi
4181
Bram Moolenaarf05da212009-11-17 16:13:15 +00004182dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4183AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004184AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004185[#if HAVE_FCNTL_H
4186# include <fcntl.h>
4187#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004188[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004189 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4190 AC_MSG_RESULT(not usable))
4191
Bram Moolenaar071d4272004-06-13 20:20:40 +00004192dnl rename needs to be checked separately to work on Nextstep with cc
4193AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004194AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004195 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4196 AC_MSG_RESULT(no))
4197
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004198dnl check for dirfd()
4199AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004200AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004201[#include <sys/types.h>
4202#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004203[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004204AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4205
4206dnl check for flock()
4207AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004208AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004209[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004210[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004211AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4212
Bram Moolenaar071d4272004-06-13 20:20:40 +00004213dnl sysctl() may exist but not the arguments we use
4214AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004215AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004216[#include <sys/types.h>
4217#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004218[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004219 size_t len;
4220
4221 mib[0] = CTL_HW;
4222 mib[1] = HW_USERMEM;
4223 len = sizeof(r);
4224 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004225 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004226 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4227 AC_MSG_RESULT(not usable))
4228
Bram Moolenaare2982d62021-10-06 11:27:21 +01004229dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004230dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004231AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004232AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004233[#include <sys/types.h>
4234#include <sys/sysinfo.h>],
4235[ struct sysinfo sinfo;
4236 int t;
4237
4238 (void)sysinfo(&sinfo);
4239 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004240 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004241 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4242 AC_MSG_RESULT(not usable))
4243
Bram Moolenaar914572a2007-05-01 11:37:47 +00004244dnl struct sysinfo may have the mem_unit field or not
4245AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004246AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004247[#include <sys/types.h>
4248#include <sys/sysinfo.h>],
4249[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004250 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004251 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004252 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4253 AC_MSG_RESULT(no))
4254
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004255dnl struct sysinfo may have the uptime field or not
4256AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004257AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004258[#include <sys/types.h>
4259#include <sys/sysinfo.h>],
4260[ struct sysinfo sinfo;
4261 long ut;
4262
4263 (void)sysinfo(&sinfo);
4264 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004265 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004266 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4267 AC_MSG_RESULT(no))
4268
Bram Moolenaar071d4272004-06-13 20:20:40 +00004269dnl sysconf() may exist but not support what we want to use
4270AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004271AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004272[#include <unistd.h>],
4273[ (void)sysconf(_SC_PAGESIZE);
4274 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004275 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004276 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4277 AC_MSG_RESULT(not usable))
4278
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004279dnl check if we have _SC_SIGSTKSZ via sysconf()
4280AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004281AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004282[#include <unistd.h>],
4283[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004284 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004285 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4286 AC_MSG_RESULT(not usable))
4287
Bram Moolenaar914703b2010-05-31 21:59:46 +02004288AC_CHECK_SIZEOF([int])
4289AC_CHECK_SIZEOF([long])
4290AC_CHECK_SIZEOF([time_t])
4291AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004292
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004293dnl Use different names to avoid clashing with other header files.
4294AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4295AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4296
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004297dnl Make sure that uint32_t is really 32 bits unsigned.
4298AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004299AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004300#ifdef HAVE_STDINT_H
4301# include <stdint.h>
4302#endif
4303#ifdef HAVE_INTTYPES_H
4304# include <inttypes.h>
4305#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004306int main() {
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004307 uint32_t nr1 = (uint32_t)-1;
4308 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004309 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4310 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004311}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004312AC_MSG_RESULT(ok),
4313AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004314AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004315
Bram Moolenaar446cb832008-06-24 21:56:24 +00004316dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4317dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4318
Bram Moolenaar071d4272004-06-13 20:20:40 +00004319[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004320#include "confdefs.h"
4321#ifdef HAVE_STRING_H
4322# include <string.h>
4323#endif
4324#if STDC_HEADERS
4325# include <stdlib.h>
4326# include <stddef.h>
4327#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004328int main() {
Bram Moolenaar071d4272004-06-13 20:20:40 +00004329 char buf[10];
4330 strcpy(buf, "abcdefghi");
4331 mch_memmove(buf, buf + 2, 3);
4332 if (strncmp(buf, "ababcf", 6))
4333 exit(1);
4334 strcpy(buf, "abcdefghi");
4335 mch_memmove(buf + 2, buf, 3);
4336 if (strncmp(buf, "cdedef", 6))
4337 exit(1);
4338 exit(0); /* libc version works properly. */
4339}']
4340
Bram Moolenaar446cb832008-06-24 21:56:24 +00004341AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4342 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004343 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 +00004344 [
4345 vim_cv_memmove_handles_overlap=yes
4346 ],[
4347 vim_cv_memmove_handles_overlap=no
4348 ],[
4349 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4350 ])
4351 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004352
Bram Moolenaar446cb832008-06-24 21:56:24 +00004353if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4354 AC_DEFINE(USEMEMMOVE)
4355else
4356 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4357 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004358 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 +00004359 [
4360 vim_cv_bcopy_handles_overlap=yes
4361 ],[
4362 vim_cv_bcopy_handles_overlap=no
4363 ],[
4364 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4365 ])
4366 ])
4367
4368 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4369 AC_DEFINE(USEBCOPY)
4370 else
4371 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4372 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004373 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 +00004374 [
4375 vim_cv_memcpy_handles_overlap=yes
4376 ],[
4377 vim_cv_memcpy_handles_overlap=no
4378 ],[
4379 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4380 ])
4381 ])
4382
4383 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4384 AC_DEFINE(USEMEMCPY)
4385 fi
4386 fi
4387fi
4388
Bram Moolenaar071d4272004-06-13 20:20:40 +00004389
4390dnl Check for multibyte locale functions
4391dnl Find out if _Xsetlocale() is supported by libX11.
4392dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004393if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004394 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004395 libs_save=$LIBS
4396 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4397 CFLAGS="$CFLAGS $X_CFLAGS"
4398
4399 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004400 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4401 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004402 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4403 AC_MSG_RESULT(no))
4404
4405 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004406 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004407 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4408
Bram Moolenaar071d4272004-06-13 20:20:40 +00004409 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004410 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004411fi
4412
4413dnl Link with xpg4, it is said to make Korean locale working
4414AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4415
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004416dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004417dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004418dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004419dnl -t for typedefs (many ctags have this)
4420dnl -s for static functions (Elvis ctags only?)
4421dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4422dnl -i+m to test for older Exuberant ctags
4423AC_MSG_CHECKING(how to create tags)
4424test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004425if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004426 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004427elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004428 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004429elif (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 +01004430 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004431else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004432 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004433 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4434 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4435 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4436 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4437 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4438 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4439 (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 +00004440fi
4441test -f tags.save && mv tags.save tags
4442AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4443
4444dnl Check how we can run man with a section number
4445AC_MSG_CHECKING(how to run man with a section nr)
4446MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004447(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 +00004448AC_MSG_RESULT($MANDEF)
4449if test "$MANDEF" = "man -s"; then
4450 AC_DEFINE(USEMAN_S)
4451fi
4452
4453dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004454dnl We take care to base this on an empty LIBS: on some systems libelf would be
4455dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4456dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004457AC_MSG_CHECKING(--disable-nls argument)
4458AC_ARG_ENABLE(nls,
4459 [ --disable-nls Don't support NLS (gettext()).], ,
4460 [enable_nls="yes"])
4461
4462if test "$enable_nls" = "yes"; then
4463 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004464
4465 INSTALL_LANGS=install-languages
4466 AC_SUBST(INSTALL_LANGS)
4467 INSTALL_TOOL_LANGS=install-tool-languages
4468 AC_SUBST(INSTALL_TOOL_LANGS)
4469
Bram Moolenaar071d4272004-06-13 20:20:40 +00004470 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4471 AC_MSG_CHECKING([for NLS])
4472 if test -f po/Makefile; then
4473 have_gettext="no"
4474 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004475 olibs=$LIBS
4476 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004477 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004478 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004479 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004480 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4481 LIBS="-lintl"
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 with -lintl]); have_gettext="yes";
4486 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004487 AC_MSG_RESULT([gettext() doesn't work]);
4488 LIBS=$olibs))
4489 else
4490 AC_MSG_RESULT([msgfmt not found - disabled]);
4491 fi
Martin Tournoij7904fa42022-10-04 16:28:45 +01004492 if test $have_gettext = "yes" -a "x$features" != "xtiny"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004493 AC_DEFINE(HAVE_GETTEXT)
4494 MAKEMO=yes
4495 AC_SUBST(MAKEMO)
4496 dnl this was added in GNU gettext 0.10.36
4497 AC_CHECK_FUNCS(bind_textdomain_codeset)
4498 dnl _nl_msg_cat_cntr is required for GNU gettext
4499 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004500 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004501 [#include <libintl.h>
4502 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004503 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004504 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4505 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004506 AC_MSG_CHECKING([if msgfmt supports --desktop])
4507 MSGFMT_DESKTOP=
4508 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004509 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4510 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4511 dnl 0.19.3 is also broken.
4512 AC_MSG_RESULT([broken])
4513 else
4514 AC_MSG_RESULT([yes])
4515 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4516 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004517 else
4518 AC_MSG_RESULT([no])
4519 fi
4520 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004521 fi
4522 else
4523 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4524 fi
4525else
4526 AC_MSG_RESULT(yes)
4527fi
4528
4529dnl Check for dynamic linking loader
4530AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4531if test x${DLL} = xdlfcn.h; then
4532 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4533 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004534 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004535 extern void* dlopen();
4536 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004537 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004538 AC_MSG_RESULT(yes);
4539 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4540 AC_MSG_RESULT(no);
4541 AC_MSG_CHECKING([for dlopen() in -ldl])
4542 olibs=$LIBS
4543 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004544 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004545 extern void* dlopen();
4546 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004547 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004548 AC_MSG_RESULT(yes);
4549 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4550 AC_MSG_RESULT(no);
4551 LIBS=$olibs))
4552 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4553 dnl ick :-)
4554 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004555 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004556 extern void* dlsym();
4557 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004558 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004559 AC_MSG_RESULT(yes);
4560 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4561 AC_MSG_RESULT(no);
4562 AC_MSG_CHECKING([for dlsym() in -ldl])
4563 olibs=$LIBS
4564 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004565 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004566 extern void* dlsym();
4567 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004568 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004569 AC_MSG_RESULT(yes);
4570 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4571 AC_MSG_RESULT(no);
4572 LIBS=$olibs))
4573elif test x${DLL} = xdl.h; then
4574 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4575 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004576 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004577 extern void* shl_load();
4578 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004579 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004580 AC_MSG_RESULT(yes);
4581 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4582 AC_MSG_RESULT(no);
4583 AC_MSG_CHECKING([for shl_load() in -ldld])
4584 olibs=$LIBS
4585 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004586 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004587 extern void* shl_load();
4588 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004589 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004590 AC_MSG_RESULT(yes);
4591 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4592 AC_MSG_RESULT(no);
4593 LIBS=$olibs))
4594fi
4595AC_CHECK_HEADERS(setjmp.h)
4596
Bram Moolenaard0573012017-10-28 21:11:06 +02004597if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004598 dnl -ldl must come after DynaLoader.a
4599 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4600 LIBS=`echo $LIBS | sed s/-ldl//`
4601 PERL_LIBS="$PERL_LIBS -ldl"
4602 fi
4603fi
4604
Bram Moolenaard0573012017-10-28 21:11:06 +02004605if test "$MACOS_X" = "yes"; then
4606 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004607 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004608 if test "$features" = "tiny"; then
Yee Cheng Chin4314e4f2022-10-08 13:50:05 +01004609 dnl Since no FEAT_CLIPBOARD or FEAT_SOUND, no need for os_macosx.m.
Bram Moolenaard0573012017-10-28 21:11:06 +02004610 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4611 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004612 AC_MSG_RESULT([yes, we need CoreServices])
4613 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004614 else
4615 AC_MSG_RESULT([yes, we need AppKit])
4616 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004617 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004618 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004619 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004620 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004621fi
4622
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004623dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4624dnl it everywhere.
4625if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4626 CFLAGS="$CFLAGS -D_REENTRANT"
4627fi
4628
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004629dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4630dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4631dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004632dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4633dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004634DEPEND_CFLAGS_FILTER=
4635if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004636 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004637 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004638 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004639 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004640 AC_MSG_RESULT(yes)
4641 else
4642 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004643 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004644 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4645 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004646 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004647 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004648 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4649 if test "$gccmajor" -gt "3"; then
Zdenek Dohnal42196982023-01-18 16:09:51 +00004650 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/'`
4651 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 +00004652 AC_MSG_RESULT(yes)
4653 else
4654 AC_MSG_RESULT(no)
4655 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004656fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004657AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004658
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004659dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4660dnl isn't required, but the CFLAGS for some of the libraries we're using
4661dnl include the define. Since the define changes the size of some datatypes
4662dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4663dnl consistent value. It's therefore safest to force the use of the define
4664dnl if it's present in any of the *_CFLAGS variables.
4665AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004666if 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 +01004667 AC_MSG_RESULT(yes)
4668 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4669else
4670 AC_MSG_RESULT(no)
4671fi
4672
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004673dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4674dnl between "-L" and the path that follows.
4675LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4676
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004677dnl link.sh tries to avoid overlinking in a hackish way.
4678dnl At least GNU ld supports --as-needed which provides the same functionality
4679dnl at linker level. Let's use it.
4680AC_MSG_CHECKING(linker --as-needed support)
4681LINK_AS_NEEDED=
4682# Check if linker supports --as-needed and --no-as-needed options
4683if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004684 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4685 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4686 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004687 LINK_AS_NEEDED=yes
4688fi
4689if test "$LINK_AS_NEEDED" = yes; then
4690 AC_MSG_RESULT(yes)
4691else
4692 AC_MSG_RESULT(no)
4693fi
4694AC_SUBST(LINK_AS_NEEDED)
4695
Bram Moolenaar77c19352012-06-13 19:19:41 +02004696# IBM z/OS reset CFLAGS for config.mk
4697if test "$zOSUnix" = "yes"; then
4698 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4699fi
4700
Bram Moolenaar071d4272004-06-13 20:20:40 +00004701dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004702AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4703AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004704
4705dnl vim: set sw=2 tw=78 fo+=l: