blob: e21e23490af12866155c87a4cef2362e4eb77534 [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
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200483 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
484fi
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)
523 AC_CHECK_HEADER([attr/xattr.h], [AC_DEFINE(HAVE_XATTR)])
524else
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
1135 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1136 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1137 if test -f "$xsubpp_path"; then
1138 vi_cv_perl_xsubpp="$xsubpp_path"
1139 fi
1140 done
1141 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001142 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001143 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001144 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001145 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001146 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001147 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1148 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001149 -e 's/-pipe //' \
1150 -e 's/-W[[^ ]]*//g' \
1151 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1153 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1154 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1155 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1156 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1157 dnl a test in configure may fail because of that.
1158 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1159 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1160
1161 dnl check that compiling a simple program still works with the flags
1162 dnl added for Perl.
1163 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1164 cflags_save=$CFLAGS
1165 libs_save=$LIBS
1166 ldflags_save=$LDFLAGS
1167 CFLAGS="$CFLAGS $perlcppflags"
1168 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001169 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001170 LDFLAGS="$perlldflags $LDFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001171 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172 AC_MSG_RESULT(yes); perl_ok=yes,
1173 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1174 CFLAGS=$cflags_save
1175 LIBS=$libs_save
1176 LDFLAGS=$ldflags_save
1177 if test $perl_ok = yes; then
1178 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001179 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001180 fi
1181 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001182 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001183 LDFLAGS="$perlldflags $LDFLAGS"
1184 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001185 fi
1186 PERL_LIBS=$perllibs
1187 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1188 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1189 PERL_PRO="if_perl.pro if_perlsfio.pro"
1190 AC_DEFINE(FEAT_PERL)
1191 fi
1192 fi
1193 else
1194 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1195 fi
1196 fi
1197
Bram Moolenaard0573012017-10-28 21:11:06 +02001198 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001199 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001200 dir=/System/Library/Perl
1201 darwindir=$dir/darwin
1202 if test -d $darwindir; then
1203 PERL=/usr/bin/perl
1204 else
1205 dnl Mac OS X 10.3
1206 dir=/System/Library/Perl/5.8.1
1207 darwindir=$dir/darwin-thread-multi-2level
1208 if test -d $darwindir; then
1209 PERL=/usr/bin/perl
1210 fi
1211 fi
1212 if test -n "$PERL"; then
1213 PERL_DIR="$dir"
1214 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1215 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1216 PERL_LIBS="-L$darwindir/CORE -lperl"
1217 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001218 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1219 dnl be included if requested by passing --with-mac-arch to
1220 dnl configure, so strip these flags first (if present)
1221 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1222 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 +00001223 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001224 if test "$enable_perlinterp" = "dynamic"; then
1225 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1226 AC_DEFINE(DYNAMIC_PERL)
1227 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
Christian Brabandt55460da2023-08-29 21:31:28 +02001228 PERL_LIBS=""
Bram Moolenaare06c1882010-07-21 22:05:20 +02001229 fi
1230 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001231
1232 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1233 AC_MSG_ERROR([could not configure perl])
1234 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235fi
1236AC_SUBST(shrpenv)
1237AC_SUBST(PERL_SRC)
1238AC_SUBST(PERL_OBJ)
1239AC_SUBST(PERL_PRO)
1240AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001241AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001242AC_SUBST(PERL_LIBS)
1243
1244AC_MSG_CHECKING(--enable-pythoninterp argument)
1245AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001246 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001247 [enable_pythoninterp="no"])
1248AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001249if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001250 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001251 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001252 fi
1253
Bram Moolenaar071d4272004-06-13 20:20:40 +00001254 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001255 AC_MSG_CHECKING(--with-python-command argument)
1256 AC_SUBST(vi_cv_path_python)
1257 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1258 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1259 AC_MSG_RESULT(no))
1260
1261 if test "X$vi_cv_path_python" = "X"; then
1262 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1263 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001264 if test "X$vi_cv_path_python" != "X"; then
1265
1266 dnl -- get its version number
1267 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1268 [[vi_cv_var_python_version=`
1269 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1270 ]])
1271
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001272 dnl -- it must be at least version 2.3
1273 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001274 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001275 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001276 then
1277 AC_MSG_RESULT(yep)
1278
1279 dnl -- find where python thinks it was installed
1280 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1281 [ vi_cv_path_python_pfx=`
1282 ${vi_cv_path_python} -c \
1283 "import sys; print sys.prefix"` ])
1284
1285 dnl -- and where it thinks it runs
1286 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1287 [ vi_cv_path_python_epfx=`
1288 ${vi_cv_path_python} -c \
1289 "import sys; print sys.exec_prefix"` ])
1290
1291 dnl -- python's internal library path
1292
1293 AC_CACHE_VAL(vi_cv_path_pythonpath,
1294 [ vi_cv_path_pythonpath=`
1295 unset PYTHONPATH;
1296 ${vi_cv_path_python} -c \
1297 "import sys, string; print string.join(sys.path,':')"` ])
1298
1299 dnl -- where the Python implementation library archives are
1300
1301 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001302 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001303 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001304
1305 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1306 [
1307 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001308 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1309 if test -d "$d" && test -f "$d/config.c"; then
1310 vi_cv_path_python_conf="$d"
1311 else
1312 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1313 for subdir in lib64 lib share; do
1314 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1315 if test -d "$d" && test -f "$d/config.c"; then
1316 vi_cv_path_python_conf="$d"
1317 fi
1318 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001319 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001320 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001321 ])
1322
1323 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1324
1325 if test "X$PYTHON_CONFDIR" = "X"; then
1326 AC_MSG_RESULT([can't find it!])
1327 else
1328
1329 dnl -- we need to examine Python's config/Makefile too
1330 dnl see what the interpreter is built from
1331 AC_CACHE_VAL(vi_cv_path_python_plibs,
1332 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001333 pwd=`pwd`
1334 tmp_mkf="$pwd/config-PyMake$$"
1335 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001336__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001337 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338 @echo "python_LIBS='$(LIBS)'"
1339 @echo "python_SYSLIBS='$(SYSLIBS)'"
1340 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001341 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001342 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001343 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1344 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1345 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001346eof
1347 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001348 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1349 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001350 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001351 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1352 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001353 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1354 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1355 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001356 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001357 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001358 dnl -- Check if the path contained in python_LINKFORSHARED is
1359 dnl usable for vim build. If not, make and try other
1360 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001361 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001362 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1363 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1364 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1365 dnl -- The path looks relative. Guess the absolute one using
1366 dnl the prefix and try that.
1367 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1368 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1369 dnl -- A last resort.
1370 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1371 dnl -- No check is done. The last word is left to the
1372 dnl "sanity" test on link flags that follows shortly.
1373 fi
1374 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1375 fi
1376 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001377 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 +00001378 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1379 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1380 fi
1381 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001382 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001383 [
1384 if test "X$python_DLLLIBRARY" != "X"; then
1385 vi_cv_dll_name_python="$python_DLLLIBRARY"
1386 else
1387 vi_cv_dll_name_python="$python_INSTSONAME"
1388 fi
1389 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001390
1391 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1392 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001393 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001394 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001395 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 +00001396 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001397 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001398 dnl Define PYTHON_HOME if --with-python-config-dir was used
1399 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1400
1401 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001402 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001403 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001404
1405 dnl On FreeBSD linking with "-pthread" is required to use threads.
1406 dnl _THREAD_SAFE must be used for compiling then.
1407 dnl The "-pthread" is added to $LIBS, so that the following check for
1408 dnl sigaltstack() will look in libc_r (it's there in libc!).
1409 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1410 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1411 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1412 AC_MSG_CHECKING([if -pthread should be used])
1413 threadsafe_flag=
1414 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001415 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001416 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001417 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001418 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001419 threadsafe_flag="-D_THREAD_SAFE"
1420 thread_lib="-pthread"
1421 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001422 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001423 threadsafe_flag="-pthreads"
1424 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001425 fi
1426 libs_save_old=$LIBS
1427 if test -n "$threadsafe_flag"; then
1428 cflags_save=$CFLAGS
1429 CFLAGS="$CFLAGS $threadsafe_flag"
1430 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001431 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001432 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001433 AC_MSG_RESULT(no); LIBS=$libs_save_old
1434 )
1435 CFLAGS=$cflags_save
1436 else
1437 AC_MSG_RESULT(no)
1438 fi
1439
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001440 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001441 dnl added for Python.
1442 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1443 cflags_save=$CFLAGS
1444 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001445 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001446 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001447 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00001448 AC_MSG_RESULT(yes); python_ok=yes,
1449 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1450 CFLAGS=$cflags_save
1451 LIBS=$libs_save
1452 if test $python_ok = yes; then
1453 AC_DEFINE(FEAT_PYTHON)
1454 else
1455 LIBS=$libs_save_old
1456 PYTHON_SRC=
1457 PYTHON_OBJ=
1458 PYTHON_LIBS=
1459 PYTHON_CFLAGS=
1460 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001461 fi
1462 else
1463 AC_MSG_RESULT(too old)
1464 fi
1465 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001466
1467 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1468 AC_MSG_ERROR([could not configure python])
1469 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001470fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001471
Bram Moolenaar071d4272004-06-13 20:20:40 +00001472AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001473AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001474AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001475AC_SUBST(PYTHON_SRC)
1476AC_SUBST(PYTHON_OBJ)
1477
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001478
1479AC_MSG_CHECKING(--enable-python3interp argument)
1480AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001481 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001482 [enable_python3interp="no"])
1483AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001484if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001485 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01001486 AC_MSG_ERROR([cannot use Python with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01001487 fi
1488
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001489 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001490 AC_MSG_CHECKING(--with-python3-command argument)
1491 AC_SUBST(vi_cv_path_python3)
1492 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1493 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1494 AC_MSG_RESULT(no))
1495
1496 if test "X$vi_cv_path_python3" = "X"; then
1497 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1498 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001499 if test "X$vi_cv_path_python3" != "X"; then
1500
1501 dnl -- get its version number
1502 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1503 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001504 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001505 ]])
1506
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001507 dnl -- it must be at least version 3
1508 AC_MSG_CHECKING(Python is 3.0 or better)
1509 if ${vi_cv_path_python3} -c \
1510 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1511 then
1512 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001513
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001514 dnl -- get the stable ABI version if passed in
1515 AC_MSG_CHECKING(--with-python3-stable-abi argument)
1516 AC_SUBST(vi_cv_var_python3_stable_abi)
1517 AC_ARG_WITH(python3-stable-abi, [ --with-python3-stable-abi=VERSION stable ABI version to target (e.g. 3.8)],
1518 vi_cv_var_python3_stable_abi="$withval"; AC_MSG_RESULT($vi_cv_var_python3_stable_abi),
1519 AC_MSG_RESULT(no))
1520 if test "X$vi_cv_var_python3_stable_abi" != "X"; then
1521 AC_CACHE_VAL(vi_cv_var_python3_stable_abi_hex,
1522 [
1523 vi_cv_var_python3_stable_abi_hex=`
1524 ${vi_cv_path_python3} -c \
1525 "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 +02001526 if test "X$vi_cv_var_python3_stable_abi_hex" = "X"; then
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001527 AC_MSG_ERROR([can't parse Python 3 stable ABI version. It should be "<major>.<minor>"])
1528 fi
1529 fi
1530
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001531 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1532 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001533 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001534 vi_cv_var_python3_abiflags=
1535 if ${vi_cv_path_python3} -c \
1536 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1537 then
Bram Moolenaare5303952022-06-19 17:05:47 +01001538 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001539 "import sys; print(sys.abiflags)"`
1540 fi ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001541
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001542 dnl -- find where python3 thinks it was installed
1543 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1544 [ vi_cv_path_python3_pfx=`
1545 ${vi_cv_path_python3} -c \
1546 "import sys; print(sys.prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001547
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001548 dnl -- and where it thinks it runs
1549 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1550 [ vi_cv_path_python3_epfx=`
1551 ${vi_cv_path_python3} -c \
1552 "import sys; print(sys.exec_prefix)"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001553
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001554 dnl -- python3's include path
1555 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_include,
1556 [ vi_cv_path_python3_include=`
1557 ${vi_cv_path_python3} -c \
1558 "import sysconfig; print(sysconfig.get_path(\"include\"))"` ])
1559
1560 dnl -- python3's platform include path
1561 AC_CACHE_CHECK(Python's include path,vi_cv_path_python3_platinclude,
1562 [ vi_cv_path_python3_platinclude=`
1563 ${vi_cv_path_python3} -c \
1564 "import sysconfig; print(sysconfig.get_path(\"platinclude\"))"` ])
1565
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001566 dnl -- python3's internal library path
Bram Moolenaare5303952022-06-19 17:05:47 +01001567
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001568 AC_CACHE_VAL(vi_cv_path_python3path,
1569 [ vi_cv_path_python3path=`
1570 unset PYTHONPATH;
1571 ${vi_cv_path_python3} -c \
1572 "import sys, string; print(':'.join(sys.path))"` ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001573
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001574 dnl -- where the Python implementation library archives are
Bram Moolenaare5303952022-06-19 17:05:47 +01001575
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001576 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001577 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001578 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaare5303952022-06-19 17:05:47 +01001579
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001580 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1581 [
1582 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001583 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001584 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1585 if test "x$d" = "x"; then
1586 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1587 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001588 if test -d "$d" && test -f "$d/config.c"; then
1589 vi_cv_path_python3_conf="$d"
1590 else
1591 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1592 for subdir in lib64 lib share; do
1593 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1594 if test -d "$d" && test -f "$d/config.c"; then
1595 vi_cv_path_python3_conf="$d"
1596 fi
1597 done
1598 done
1599 fi
1600 ])
Bram Moolenaare5303952022-06-19 17:05:47 +01001601
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001602 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
Bram Moolenaare5303952022-06-19 17:05:47 +01001603
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001604 if test "X$PYTHON3_CONFDIR" = "X"; then
1605 AC_MSG_RESULT([can't find it!])
1606 else
Bram Moolenaare5303952022-06-19 17:05:47 +01001607
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001608 dnl -- we need to examine Python's config/Makefile too
1609 dnl see what the interpreter is built from
1610 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1611 [
1612 pwd=`pwd`
1613 tmp_mkf="$pwd/config-PyMake$$"
1614 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001615__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001616 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001617 @echo "python3_LIBS='$(LIBS)'"
1618 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001619 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001620 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001621 @echo "python3_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001622eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001623 dnl -- delete the lines from make about Entering/Leaving directory
1624 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1625 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001626 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 +02001627 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1628 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1629 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1630 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1631 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001632 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001633 [
1634 if test "X$python3_DLLLIBRARY" != "X"; then
1635 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
Yee Cheng Chinb6ebe5a2023-04-05 18:24:50 +01001636 elif test "X$python3_PYTHONFRAMEWORKPREFIX" != "X"; then
1637 vi_cv_dll_name_python3="${python3_PYTHONFRAMEWORKPREFIX}/${python3_INSTSONAME}"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001638 else
1639 vi_cv_dll_name_python3="$python3_INSTSONAME"
1640 fi
1641 ])
1642
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001643 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001644 if test "${vi_cv_path_python3_include}" = "${vi_cv_path_python3_platinclude}"; then
1645 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001646 else
Illia Bobyr74e1dad2023-08-27 18:26:54 +02001647 PYTHON3_CFLAGS="-I${vi_cv_path_python3_include} -I${vi_cv_path_python3_platinclude}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001648 fi
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001649 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
1650 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1651 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1652 fi
1653 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1654 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPy_LIMITED_API=${vi_cv_var_python3_stable_abi_hex}"
1655 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001656 PYTHON3_SRC="if_python3.c"
1657 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaare5303952022-06-19 17:05:47 +01001658
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001659 dnl On FreeBSD linking with "-pthread" is required to use threads.
1660 dnl _THREAD_SAFE must be used for compiling then.
1661 dnl The "-pthread" is added to $LIBS, so that the following check for
1662 dnl sigaltstack() will look in libc_r (it's there in libc!).
1663 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1664 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1665 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1666 AC_MSG_CHECKING([if -pthread should be used])
1667 threadsafe_flag=
1668 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001669 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001670 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001671 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001672 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001673 threadsafe_flag="-D_THREAD_SAFE"
1674 thread_lib="-pthread"
1675 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001676 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001677 threadsafe_flag="-pthreads"
1678 fi
1679 fi
1680 libs_save_old=$LIBS
1681 if test -n "$threadsafe_flag"; then
1682 cflags_save=$CFLAGS
1683 CFLAGS="$CFLAGS $threadsafe_flag"
1684 LIBS="$LIBS $thread_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001685 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001686 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1687 AC_MSG_RESULT(no); LIBS=$libs_save_old
1688 )
1689 CFLAGS=$cflags_save
1690 else
1691 AC_MSG_RESULT(no)
1692 fi
Bram Moolenaare5303952022-06-19 17:05:47 +01001693
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001694 dnl check that compiling a simple program still works with the flags
1695 dnl added for Python.
1696 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1697 cflags_save=$CFLAGS
1698 libs_save=$LIBS
1699 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1700 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001701 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001702 AC_MSG_RESULT(yes); python3_ok=yes,
1703 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1704 CFLAGS=$cflags_save
1705 LIBS=$libs_save
1706 if test "$python3_ok" = yes; then
1707 AC_DEFINE(FEAT_PYTHON3)
1708 else
1709 LIBS=$libs_save_old
1710 PYTHON3_SRC=
1711 PYTHON3_OBJ=
1712 PYTHON3_LIBS=
1713 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001714 fi
1715 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001716 else
1717 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001718 fi
1719 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001720 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1721 AC_MSG_ERROR([could not configure python3])
1722 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001723fi
1724
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001725AC_SUBST(PYTHON3_LIBS)
1726AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001727AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001728AC_SUBST(PYTHON3_SRC)
1729AC_SUBST(PYTHON3_OBJ)
1730
1731dnl if python2.x and python3.x are enabled one can only link in code
Bram Moolenaare5303952022-06-19 17:05:47 +01001732dnl with dlopen(), dlsym(), dlclose()
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001733if test "$python_ok" = yes && test "$python3_ok" = yes; then
1734 AC_DEFINE(DYNAMIC_PYTHON)
1735 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001736 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1737 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1738 fi
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001739 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001740 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001741 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001742 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001743 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001744 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001745 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001746 #include <dlfcn.h>
1747 /* If this program fails, then RTLD_GLOBAL is needed.
1748 * RTLD_GLOBAL will be used and then it is not possible to
1749 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001750 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001751 */
1752
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001753 static int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001754 {
1755 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001756 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001757 if (pylib != 0)
1758 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001759 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001760 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1761 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1762 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001763 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001764 (*init)();
1765 needed = (*simple)("import termios") == -1;
1766 (*final)();
1767 dlclose(pylib);
1768 }
1769 return !needed;
1770 }
1771
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001772 int main()
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001773 {
1774 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001775 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001776 not_needed = 1;
1777 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001778 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001779 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001780
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001781 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001782 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001783
1784 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1785 cflags_save=$CFLAGS
1786 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001787 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001788 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001789 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001790 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001791 #include <dlfcn.h>
1792 #include <wchar.h>
1793 /* If this program fails, then RTLD_GLOBAL is needed.
1794 * RTLD_GLOBAL will be used and then it is not possible to
1795 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001796 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001797 */
1798
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001799 static int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001800 {
1801 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001802 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001803 if (pylib != 0)
1804 {
1805 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1806 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1807 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1808 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1809 (*pfx)(prefix);
1810 (*init)();
1811 needed = (*simple)("import termios") == -1;
1812 (*final)();
1813 dlclose(pylib);
1814 }
1815 return !needed;
1816 }
1817
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01001818 int main()
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001819 {
1820 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001821 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001822 not_needed = 1;
1823 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001824 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001825 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1826
1827 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001828 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001829
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001830 PYTHON_SRC="if_python.c"
1831 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001832 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001833 PYTHON_LIBS=
1834 PYTHON3_SRC="if_python3.c"
1835 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001836 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001837 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001838elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1839 AC_DEFINE(DYNAMIC_PYTHON)
1840 PYTHON_SRC="if_python.c"
1841 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001842 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001843 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001844elif test "$python_ok" = yes; then
1845 dnl Check that adding -fPIE works. It may be needed when using a static
1846 dnl Python library.
1847 AC_MSG_CHECKING([if -fPIE can be added for Python])
1848 cflags_save=$CFLAGS
1849 libs_save=$LIBS
1850 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1851 LIBS="$LIBS $PYTHON_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001852 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001853 AC_MSG_RESULT(yes); fpie_ok=yes,
1854 AC_MSG_RESULT(no); fpie_ok=no)
1855 CFLAGS=$cflags_save
1856 LIBS=$libs_save
1857 if test $fpie_ok = yes; then
1858 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1859 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001860elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1861 AC_DEFINE(DYNAMIC_PYTHON3)
Yee Cheng Chinc13b3d12023-08-20 21:18:38 +02001862 if test "X$vi_cv_var_python3_stable_abi_hex" != "X"; then
1863 AC_DEFINE(DYNAMIC_PYTHON3_STABLE_ABI)
1864 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001865 PYTHON3_SRC="if_python3.c"
1866 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001867 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001868 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001869elif test "$python3_ok" = yes; then
1870 dnl Check that adding -fPIE works. It may be needed when using a static
1871 dnl Python library.
1872 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1873 cflags_save=$CFLAGS
1874 libs_save=$LIBS
1875 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1876 LIBS="$LIBS $PYTHON3_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01001877 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
Bram Moolenaare741f272013-07-09 21:57:52 +02001878 AC_MSG_RESULT(yes); fpie_ok=yes,
1879 AC_MSG_RESULT(no); fpie_ok=no)
1880 CFLAGS=$cflags_save
1881 LIBS=$libs_save
1882 if test $fpie_ok = yes; then
1883 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1884 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001885fi
1886
Bram Moolenaar071d4272004-06-13 20:20:40 +00001887AC_MSG_CHECKING(--enable-tclinterp argument)
1888AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001889 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001890 [enable_tclinterp="no"])
1891AC_MSG_RESULT($enable_tclinterp)
1892
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001893if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001894
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001895 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001896 AC_MSG_CHECKING(--with-tclsh argument)
1897 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1898 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001899 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001900 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1901 AC_SUBST(vi_cv_path_tcl)
1902
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001903 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1904 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1905 tclsh_name="tclsh8.4"
1906 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1907 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001908 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001909 tclsh_name="tclsh8.2"
1910 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1911 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001912 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1913 tclsh_name="tclsh8.0"
1914 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1915 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001916 dnl still didn't find it, try without version number
1917 if test "X$vi_cv_path_tcl" = "X"; then
1918 tclsh_name="tclsh"
1919 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1920 fi
1921 if test "X$vi_cv_path_tcl" != "X"; then
1922 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001923 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001924 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1925 AC_MSG_RESULT($tclver - OK);
1926 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 +01001927 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001928
1929 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001930 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001931 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 +00001932 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001933 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001934 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001935 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1936 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 +00001937 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001938 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001939 for try in $tclinc; do
1940 if test -f "$try/tcl.h"; then
1941 AC_MSG_RESULT($try/tcl.h)
1942 TCL_INC=$try
1943 break
1944 fi
1945 done
1946 if test -z "$TCL_INC"; then
1947 AC_MSG_RESULT(<not found>)
1948 SKIP_TCL=YES
1949 fi
1950 if test -z "$SKIP_TCL"; then
1951 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001952 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001953 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001954 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001955 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001956 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001957 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001958 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1959 tclcnf=`echo $tclinc | sed s/include/lib/g`
1960 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001961 fi
1962 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001963 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001964 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001965 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001966 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001967 if test "$enable_tclinterp" = "dynamic"; then
1968 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1969 else
1970 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1971 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001972 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001973 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001974 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 +00001975 break
1976 fi
1977 done
1978 if test -z "$TCL_LIBS"; then
1979 AC_MSG_RESULT(<not found>)
1980 AC_MSG_CHECKING(for Tcl library by myself)
1981 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001982 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001983 for ext in .so .a ; do
1984 for ver in "" $tclver ; do
1985 for try in $tcllib ; do
1986 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001987 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001988 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001989 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001990 if test "$vim_cv_uname_output" = SunOS &&
1991 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001992 TCL_LIBS="$TCL_LIBS -R $try"
1993 fi
1994 break 3
1995 fi
1996 done
1997 done
1998 done
1999 if test -z "$TCL_LIBS"; then
2000 AC_MSG_RESULT(<not found>)
2001 SKIP_TCL=YES
2002 fi
2003 fi
2004 if test -z "$SKIP_TCL"; then
2005 AC_DEFINE(FEAT_TCL)
2006 TCL_SRC=if_tcl.c
2007 TCL_OBJ=objects/if_tcl.o
2008 TCL_PRO=if_tcl.pro
2009 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
2010 fi
2011 fi
2012 else
2013 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
2014 fi
2015 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01002016 if test "$enable_tclinterp" = "dynamic"; then
2017 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
2018 AC_DEFINE(DYNAMIC_TCL)
2019 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
2020 fi
2021 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002022 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
2023 AC_MSG_ERROR([could not configure Tcl])
2024 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002025fi
2026AC_SUBST(TCL_SRC)
2027AC_SUBST(TCL_OBJ)
2028AC_SUBST(TCL_PRO)
2029AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002030AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002031AC_SUBST(TCL_LIBS)
2032
2033AC_MSG_CHECKING(--enable-rubyinterp argument)
2034AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002035 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002036 [enable_rubyinterp="no"])
2037AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002038if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002039 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002040 AC_MSG_ERROR([cannot use Ruby with tiny features])
Bram Moolenaar0b105412014-11-30 13:34:23 +01002041 fi
2042
Bram Moolenaar165641d2010-02-17 16:23:09 +01002043 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002044 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02002045 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
2046 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
2047 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01002048 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002049 if test "X$vi_cv_path_ruby" != "X"; then
2050 AC_MSG_CHECKING(Ruby version)
K.Takata236ccbf2022-09-22 16:12:06 +01002051 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 +00002052 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02002053 AC_MSG_CHECKING(Ruby rbconfig)
2054 ruby_rbconfig="RbConfig"
2055 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
2056 ruby_rbconfig="Config"
2057 fi
2058 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002060 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 +00002061 if test "X$rubyhdrdir" != "X"; then
2062 AC_MSG_RESULT($rubyhdrdir)
2063 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002064 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2065 if test -d "$rubyarchdir"; then
2066 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002067 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002068 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002069 if test "X$rubyversion" = "X"; then
K.Takata236ccbf2022-09-22 16:12:06 +01002070 rubyversion=`$vi_cv_path_ruby -e "print RUBY_VERSION.gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002071 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002072 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002073 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002074 if test "X$rubylibs" != "X"; then
2075 RUBY_LIBS="$rubylibs"
2076 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002077 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2078 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002079 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01002080 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002081 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2082 elif test "$librubyarg" = "libruby.a"; then
2083 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2084 librubyarg="-lruby"
2085 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002086 fi
2087
2088 if test "X$librubyarg" != "X"; then
2089 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2090 fi
Zdenek Dohnal1d822af2022-11-23 12:06:08 +00002091
2092 dnl Here the Ruby LDFLAGS used to be added to LDFLAGS, but that turns
2093 dnl out to cause trouble and was removed.
2094
Bram Moolenaar071d4272004-06-13 20:20:40 +00002095 RUBY_SRC="if_ruby.c"
2096 RUBY_OBJ="objects/if_ruby.o"
2097 RUBY_PRO="if_ruby.pro"
2098 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002099 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002100 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002101 if test -z "$libruby_soname"; then
2102 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2103 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002104 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002105 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002106 RUBY_LIBS=
2107 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002108 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2109 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2110 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002111 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002112 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002113 fi
2114 else
K.Takata236ccbf2022-09-22 16:12:06 +01002115 AC_MSG_RESULT(too old; need Ruby version 1.9.1 or later)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002116 fi
2117 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002118
2119 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2120 AC_MSG_ERROR([could not configure Ruby])
2121 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002122fi
2123AC_SUBST(RUBY_SRC)
2124AC_SUBST(RUBY_OBJ)
2125AC_SUBST(RUBY_PRO)
2126AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002127AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002128AC_SUBST(RUBY_LIBS)
2129
2130AC_MSG_CHECKING(--enable-cscope argument)
2131AC_ARG_ENABLE(cscope,
2132 [ --enable-cscope Include cscope interface.], ,
2133 [enable_cscope="no"])
2134AC_MSG_RESULT($enable_cscope)
2135if test "$enable_cscope" = "yes"; then
2136 AC_DEFINE(FEAT_CSCOPE)
2137fi
2138
Bram Moolenaar071d4272004-06-13 20:20:40 +00002139AC_MSG_CHECKING(--disable-netbeans argument)
2140AC_ARG_ENABLE(netbeans,
2141 [ --disable-netbeans Disable NetBeans integration support.],
2142 , [enable_netbeans="yes"])
2143if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002144 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002145 AC_MSG_RESULT([cannot use NetBeans with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002146 enable_netbeans="no"
2147 else
2148 AC_MSG_RESULT(no)
2149 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002150else
2151 AC_MSG_RESULT(yes)
2152fi
2153
2154AC_MSG_CHECKING(--disable-channel argument)
2155AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002156 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002157 , [enable_channel="yes"])
2158if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002159 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002160 AC_MSG_RESULT([cannot use channels with tiny features])
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002161 enable_channel="no"
2162 else
2163 AC_MSG_RESULT(no)
2164 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002165else
2166 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002167 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002168 enable_netbeans="no"
2169 else
2170 AC_MSG_RESULT(yes)
2171 fi
2172fi
2173
Bram Moolenaar16435482016-01-24 21:31:54 +01002174if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002175 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002176 if test "x$HAIKU" = "xyes"; then
2177 AC_CHECK_LIB(network, socket)
2178 else
2179 AC_CHECK_LIB(socket, socket)
2180 fi
2181
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002182 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002183 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002184#include <stdio.h>
2185#include <stdlib.h>
2186#include <stdarg.h>
2187#include <fcntl.h>
2188#include <netdb.h>
2189#include <netinet/in.h>
2190#include <errno.h>
2191#include <sys/types.h>
2192#include <sys/socket.h>
2193 /* Check bitfields */
2194 struct nbbuf {
2195 unsigned int initDone:1;
2196 unsigned short signmaplen;
2197 };
2198 ], [
2199 /* Check creating a socket. */
2200 struct sockaddr_in server;
2201 struct addrinfo *res;
2202 (void)socket(AF_INET, SOCK_STREAM, 0);
2203 (void)htons(100);
2204 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2205 if (errno == ECONNREFUSED)
2206 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2207 (void)freeaddrinfo(res);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002208 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002209 [vim_cv_ipv6_networking="yes"],
2210 [vim_cv_ipv6_networking="no"])])
2211
2212 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2213 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002214 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002215 else
2216 dnl On Solaris we need the nsl library.
2217 AC_CHECK_LIB(nsl, gethostbyname)
2218 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002219 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002220#include <stdio.h>
2221#include <stdlib.h>
2222#include <stdarg.h>
2223#include <fcntl.h>
2224#include <netdb.h>
2225#include <netinet/in.h>
2226#include <errno.h>
2227#include <sys/types.h>
2228#include <sys/socket.h>
2229 /* Check bitfields */
2230 struct nbbuf {
2231 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002232 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002233 };
2234 ], [
2235 /* Check creating a socket. */
2236 struct sockaddr_in server;
2237 (void)socket(AF_INET, SOCK_STREAM, 0);
2238 (void)htons(100);
2239 (void)gethostbyname("microsoft.com");
2240 if (errno == ECONNREFUSED)
2241 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002242 ])],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002243 [vim_cv_ipv4_networking="yes"],
2244 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2245 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002246fi
2247if test "$enable_netbeans" = "yes"; then
2248 AC_DEFINE(FEAT_NETBEANS_INTG)
2249 NETBEANS_SRC="netbeans.c"
2250 AC_SUBST(NETBEANS_SRC)
2251 NETBEANS_OBJ="objects/netbeans.o"
2252 AC_SUBST(NETBEANS_OBJ)
2253fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002254if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002255 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002256 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002257 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002258 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002259 AC_SUBST(CHANNEL_OBJ)
2260fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002262AC_MSG_CHECKING(--enable-terminal argument)
2263AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002264 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002265 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002266if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002267 if test "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01002268 AC_MSG_RESULT([cannot use terminal emulator with tiny features])
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002269 enable_terminal="no"
2270 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002271 if test "$enable_terminal" = "auto"; then
2272 enable_terminal="yes"
2273 AC_MSG_RESULT(defaulting to yes)
2274 else
2275 AC_MSG_RESULT(yes)
2276 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002277 fi
2278else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002279 if test "$enable_terminal" = "auto"; then
2280 enable_terminal="no"
2281 AC_MSG_RESULT(defaulting to no)
2282 else
2283 AC_MSG_RESULT(no)
2284 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002285fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002286if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002287 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002288 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 +02002289 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002290 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 +02002291 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002292 TERM_TEST="test_libvterm"
2293 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002294fi
2295
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002296AC_MSG_CHECKING(--enable-autoservername argument)
2297AC_ARG_ENABLE(autoservername,
2298 [ --enable-autoservername Automatically define servername at vim startup.], ,
2299 [enable_autoservername="no"])
2300AC_MSG_RESULT($enable_autoservername)
2301if test "$enable_autoservername" = "yes"; then
2302 AC_DEFINE(FEAT_AUTOSERVERNAME)
2303fi
2304
Bram Moolenaar071d4272004-06-13 20:20:40 +00002305AC_MSG_CHECKING(--enable-multibyte argument)
2306AC_ARG_ENABLE(multibyte,
2307 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002308 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002309AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002310if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002311 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2312 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002313fi
2314
Martin Tournoij25f3a142022-10-08 19:26:41 +01002315dnl Right-to-Left language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002316dnl unless ENABLE_RIGHTLEFT is undefined.
2317AC_MSG_CHECKING(--disable-rightleft argument)
2318AC_ARG_ENABLE(rightleft,
2319 [ --disable-rightleft Do not include Right-to-Left language support.],
2320 , [enable_rightleft="yes"])
2321if test "$enable_rightleft" = "yes"; then
2322 AC_MSG_RESULT(no)
2323else
2324 AC_MSG_RESULT(yes)
2325 AC_DEFINE(DISABLE_RIGHTLEFT)
2326fi
2327
Martin Tournoij25f3a142022-10-08 19:26:41 +01002328dnl Arabic language support for Vim will be included with huge features,
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002329dnl unless ENABLE_ARABIC is undefined.
2330AC_MSG_CHECKING(--disable-arabic argument)
2331AC_ARG_ENABLE(arabic,
2332 [ --disable-arabic Do not include Arabic language support.],
2333 , [enable_arabic="yes"])
2334if test "$enable_arabic" = "yes"; then
2335 AC_MSG_RESULT(no)
2336else
2337 AC_MSG_RESULT(yes)
2338 AC_DEFINE(DISABLE_ARABIC)
2339fi
2340
Bram Moolenaar14184a32019-02-16 15:10:30 +01002341dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002342AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002343 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002344
Bram Moolenaar071d4272004-06-13 20:20:40 +00002345AC_MSG_CHECKING(--enable-xim argument)
2346AC_ARG_ENABLE(xim,
2347 [ --enable-xim Include XIM input support.],
2348 AC_MSG_RESULT($enable_xim),
2349 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002350
2351AC_MSG_CHECKING(--enable-fontset argument)
2352AC_ARG_ENABLE(fontset,
2353 [ --enable-fontset Include X fontset output support.], ,
2354 [enable_fontset="no"])
2355AC_MSG_RESULT($enable_fontset)
2356dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2357
2358test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002359test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002360if test "$with_x" = no; then
2361 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2362else
2363 dnl Do this check early, so that its failure can override user requests.
2364
2365 AC_PATH_PROG(xmkmfpath, xmkmf)
2366
2367 AC_PATH_XTRA
2368
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002369 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002370 dnl be compiled with a special option.
2371 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002372 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002373 CFLAGS="$CFLAGS -W c,dll"
2374 LDFLAGS="$LDFLAGS -W l,dll"
2375 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2376 fi
2377
2378 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002379 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002380
2381 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2382 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2383 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2384 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002385 if test "$vim_cv_uname_output" = SunOS &&
2386 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002387 X_LIBS="$X_LIBS -R $x_libraries"
2388 fi
2389 fi
2390
2391 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2392 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2393 AC_MSG_RESULT(Corrected X includes to $x_includes)
2394 X_CFLAGS="$X_CFLAGS -I$x_includes"
2395 fi
2396
2397 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2398 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2399 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2400 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2401 dnl Same for "-R/usr/lib ".
2402 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2403
2404
2405 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002406 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2407 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002408 AC_MSG_CHECKING(if X11 header files can be found)
2409 cflags_save=$CFLAGS
2410 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002411 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
2412#include <X11/Intrinsic.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002413 AC_MSG_RESULT(yes),
2414 AC_MSG_RESULT(no); no_x=yes)
2415 CFLAGS=$cflags_save
2416
2417 if test "${no_x-no}" = yes; then
2418 with_x=no
2419 else
2420 AC_DEFINE(HAVE_X11)
2421 X_LIB="-lXt -lX11";
2422 AC_SUBST(X_LIB)
2423
2424 ac_save_LDFLAGS="$LDFLAGS"
2425 LDFLAGS="-L$x_libraries $LDFLAGS"
2426
2427 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2428 dnl For HP-UX 10.20 it must be before -lSM -lICE
2429 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2430 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2431
2432 dnl Some systems need -lnsl -lsocket when testing for ICE.
2433 dnl The check above doesn't do this, try here (again). Also needed to get
2434 dnl them after Xdmcp. link.sh will remove them when not needed.
2435 dnl Check for other function than above to avoid the cached value
2436 AC_CHECK_LIB(ICE, IceOpenConnection,
2437 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2438
2439 dnl Check for -lXpm (needed for some versions of Motif)
2440 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2441 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2442 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2443
2444 dnl Check that the X11 header files don't use implicit declarations
2445 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2446 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002447 dnl -Werror is GCC only, others like Solaris Studio might not like it
2448 if test "$GCC" = yes; then
2449 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2450 else
2451 CFLAGS="$CFLAGS $X_CFLAGS"
2452 fi
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002453 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002454 AC_MSG_RESULT(no),
2455 CFLAGS="$CFLAGS -Wno-implicit-int"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002456 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002457 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2458 AC_MSG_RESULT(test failed)
2459 )
2460 )
2461 CFLAGS=$cflags_save
2462
2463 LDFLAGS="$ac_save_LDFLAGS"
2464
Mike Gilberta055b442023-08-20 19:01:41 +02002465 AC_CHECK_SIZEOF([wchar_t])
2466 if test "$ac_cv_sizeof_wchar_t" -le 2; then
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002467 AC_DEFINE(SMALL_WCHAR_T)
2468 fi
2469
Bram Moolenaar071d4272004-06-13 20:20:40 +00002470 fi
2471fi
2472
Bram Moolenaard2a05492018-07-27 22:35:15 +02002473dnl Check if --with-x was given but it doesn't work.
2474if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2475 AC_MSG_ERROR([could not configure X])
2476fi
2477
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002478test "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 +00002479
2480AC_MSG_CHECKING(--enable-gui argument)
2481AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002482 [ --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 +00002483
2484dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2485dnl Do not use character classes for portability with old tools.
2486enable_gui_canon=`echo "_$enable_gui" | \
2487 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2488
2489dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002490SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002491SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002492SKIP_GNOME=YES
2493SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002494SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002495SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002496GUITYPE=NONE
2497
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002498if test "x$HAIKU" = "xyes"; then
2499 SKIP_HAIKU=
2500 case "$enable_gui_canon" in
2501 no) AC_MSG_RESULT(no GUI support)
2502 SKIP_HAIKU=YES ;;
2503 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2504 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2505 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2506 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2507 SKIP_HAIKU=YES ;;
2508 esac
2509elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002510 SKIP_PHOTON=
2511 case "$enable_gui_canon" in
2512 no) AC_MSG_RESULT(no GUI support)
2513 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002514 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2515 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002516 photon) AC_MSG_RESULT(Photon GUI support) ;;
2517 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2518 SKIP_PHOTON=YES ;;
2519 esac
2520
Bram Moolenaar040f9752020-08-11 23:08:48 +02002521elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2522 case "$enable_gui_canon" in
2523 no) AC_MSG_RESULT(no GUI support) ;;
2524 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2525 gui_auto=yes ;;
2526 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002527 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002528 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002529else
2530
Bram Moolenaar071d4272004-06-13 20:20:40 +00002531 case "$enable_gui_canon" in
2532 no|none) AC_MSG_RESULT(no GUI support) ;;
2533 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002534 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002535 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002536 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002537 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002538 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002539 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002540 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002541 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2542 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002543 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002544 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2545 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002546 motif) AC_MSG_RESULT(Motif GUI support)
2547 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002548 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2549 esac
2550
2551fi
2552
Bram Moolenaar071d4272004-06-13 20:20:40 +00002553if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2554 -a "$enable_gui_canon" != "gnome2"; then
2555 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2556 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002557 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002558 , enable_gtk2_check="yes")
2559 AC_MSG_RESULT($enable_gtk2_check)
2560 if test "x$enable_gtk2_check" = "xno"; then
2561 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002562 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002563 fi
2564fi
2565
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002566if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002567 AC_MSG_CHECKING(whether or not to look for GNOME)
2568 AC_ARG_ENABLE(gnome-check,
2569 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2570 , enable_gnome_check="no")
2571 AC_MSG_RESULT($enable_gnome_check)
2572 if test "x$enable_gnome_check" = "xno"; then
2573 SKIP_GNOME=YES
2574 fi
2575fi
2576
Bram Moolenaar98921892016-02-23 17:14:37 +01002577if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2578 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2579 AC_ARG_ENABLE(gtk3-check,
2580 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2581 , enable_gtk3_check="yes")
2582 AC_MSG_RESULT($enable_gtk3_check)
2583 if test "x$enable_gtk3_check" = "xno"; then
2584 SKIP_GTK3=YES
2585 fi
2586fi
2587
Bram Moolenaar071d4272004-06-13 20:20:40 +00002588if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2589 AC_MSG_CHECKING(whether or not to look for Motif)
2590 AC_ARG_ENABLE(motif-check,
2591 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2592 , enable_motif_check="yes")
2593 AC_MSG_RESULT($enable_motif_check)
2594 if test "x$enable_motif_check" = "xno"; then
2595 SKIP_MOTIF=YES
2596 fi
2597fi
2598
Bram Moolenaar071d4272004-06-13 20:20:40 +00002599dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002600dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002601dnl
2602dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002603dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002604dnl
2605AC_DEFUN(AM_PATH_GTK,
2606[
2607 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2608 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002609 no_gtk=""
2610 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2611 && $PKG_CONFIG --exists gtk+-2.0; then
2612 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002613 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2614 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002615 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2616 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2617 dnl something like that.
2618 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002619 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002620 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2621 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2622 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2623 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2624 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2625 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2626 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2627 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002628 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2629 && $PKG_CONFIG --exists gtk+-3.0; then
2630 {
2631 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2632 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2633
2634 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2635 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2636 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2637 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2638 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2639 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2640 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2641 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2642 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2643 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002644 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002645 dnl Put some text before the "no" to hint at installing the gtk-dev
2646 dnl packages.
2647 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002648 no_gtk=yes
2649 fi
2650
2651 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2652 {
2653 ac_save_CFLAGS="$CFLAGS"
2654 ac_save_LIBS="$LIBS"
2655 CFLAGS="$CFLAGS $GTK_CFLAGS"
2656 LIBS="$LIBS $GTK_LIBS"
2657
2658 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002659 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002660 dnl
2661 rm -f conf.gtktest
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002662 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002663#include <gtk/gtk.h>
2664#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002665#if STDC_HEADERS
2666# include <stdlib.h>
2667# include <stddef.h>
2668#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002669
2670int
2671main ()
2672{
2673int major, minor, micro;
2674char *tmp_version;
2675
2676system ("touch conf.gtktest");
2677
2678/* HP/UX 9 (%@#!) writes to sscanf strings */
2679tmp_version = g_strdup("$min_gtk_version");
2680if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2681 printf("%s, bad version string\n", "$min_gtk_version");
2682 exit(1);
2683 }
2684
2685if ((gtk_major_version > major) ||
2686 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2687 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2688 (gtk_micro_version >= micro)))
2689{
2690 return 0;
2691}
2692return 1;
2693}
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01002694])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002695 CFLAGS="$ac_save_CFLAGS"
2696 LIBS="$ac_save_LIBS"
2697 }
2698 fi
2699 if test "x$no_gtk" = x ; then
2700 if test "x$enable_gtktest" = "xyes"; then
2701 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2702 else
2703 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2704 fi
2705 ifelse([$2], , :, [$2])
2706 else
2707 {
2708 AC_MSG_RESULT(no)
2709 GTK_CFLAGS=""
2710 GTK_LIBS=""
2711 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002712 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2713 AC_MSG_ERROR([could not configure GTK])
2714 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002715 }
2716 fi
2717 }
2718 else
2719 GTK_CFLAGS=""
2720 GTK_LIBS=""
2721 ifelse([$3], , :, [$3])
2722 fi
2723 AC_SUBST(GTK_CFLAGS)
2724 AC_SUBST(GTK_LIBS)
2725 rm -f conf.gtktest
2726])
2727
2728dnl ---------------------------------------------------------------------------
2729dnl gnome
2730dnl ---------------------------------------------------------------------------
2731AC_DEFUN([GNOME_INIT_HOOK],
2732[
2733 AC_SUBST(GNOME_LIBS)
2734 AC_SUBST(GNOME_LIBDIR)
2735 AC_SUBST(GNOME_INCLUDEDIR)
2736
2737 AC_ARG_WITH(gnome-includes,
2738 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2739 [CFLAGS="$CFLAGS -I$withval"]
2740 )
2741
2742 AC_ARG_WITH(gnome-libs,
2743 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2744 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2745 )
2746
2747 AC_ARG_WITH(gnome,
2748 [ --with-gnome Specify prefix for GNOME files],
2749 if test x$withval = xyes; then
2750 want_gnome=yes
2751 ifelse([$1], [], :, [$1])
2752 else
2753 if test "x$withval" = xno; then
2754 want_gnome=no
2755 else
2756 want_gnome=yes
2757 LDFLAGS="$LDFLAGS -L$withval/lib"
2758 CFLAGS="$CFLAGS -I$withval/include"
2759 gnome_prefix=$withval/lib
2760 fi
2761 fi,
2762 want_gnome=yes)
2763
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002764 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002765 {
2766 AC_MSG_CHECKING(for libgnomeui-2.0)
2767 if $PKG_CONFIG --exists libgnomeui-2.0; then
2768 AC_MSG_RESULT(yes)
2769 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2770 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2771 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002772
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002773 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2774 dnl This might not be the right way but it works for me...
2775 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002776 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002777 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002778 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002779 GNOME_LIBS="$GNOME_LIBS -pthread"
2780 else
2781 AC_MSG_RESULT(no)
2782 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002783 $1
2784 else
2785 AC_MSG_RESULT(not found)
2786 if test "x$2" = xfail; then
2787 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2788 fi
2789 fi
2790 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002791 fi
2792])
2793
2794AC_DEFUN([GNOME_INIT],[
2795 GNOME_INIT_HOOK([],fail)
2796])
2797
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002798if test "X$PKG_CONFIG" = "X"; then
2799 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2800fi
2801
Bram Moolenaar071d4272004-06-13 20:20:40 +00002802
2803dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002804dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002805dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002806if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002807
2808 AC_MSG_CHECKING(--disable-gtktest argument)
2809 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2810 , enable_gtktest=yes)
2811 if test "x$enable_gtktest" = "xyes" ; then
2812 AC_MSG_RESULT(gtk test enabled)
2813 else
2814 AC_MSG_RESULT(gtk test disabled)
2815 fi
2816
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002817 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002818 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2819 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002820 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2821 dnl found.
2822 save_skip_gtk3=$SKIP_GTK3
2823 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002824 AM_PATH_GTK(2.2.0,
2825 [GUI_LIB_LOC="$GTK_LIBDIR"
2826 GTK_LIBNAME="$GTK_LIBS"
2827 GUI_INC_LOC="$GTK_CFLAGS"], )
2828 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002829 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002830 SKIP_MOTIF=YES
2831 GUITYPE=GTK
2832 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002833 else
2834 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002835 fi
2836 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002837 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002838 dnl
2839 dnl if GTK exists, then check for GNOME.
2840 dnl
2841 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002842 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002843 GNOME_INIT_HOOK([have_gnome=yes])
2844 if test "x$have_gnome" = xyes ; then
2845 AC_DEFINE(FEAT_GUI_GNOME)
2846 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2847 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002848 fi
2849 }
2850 fi
2851 fi
2852fi
2853
Bram Moolenaar98921892016-02-23 17:14:37 +01002854
2855dnl ---------------------------------------------------------------------------
2856dnl Check for GTK3.
2857dnl ---------------------------------------------------------------------------
2858if test -z "$SKIP_GTK3"; then
2859
2860 AC_MSG_CHECKING(--disable-gtktest argument)
2861 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2862 , enable_gtktest=yes)
2863 if test "x$enable_gtktest" = "xyes" ; then
2864 AC_MSG_RESULT(gtk test enabled)
2865 else
2866 AC_MSG_RESULT(gtk test disabled)
2867 fi
2868
Bram Moolenaar98921892016-02-23 17:14:37 +01002869 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002870 save_skip_gtk2=$SKIP_GTK2
2871 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002872 AM_PATH_GTK(3.0.0,
2873 [GUI_LIB_LOC="$GTK_LIBDIR"
2874 GTK_LIBNAME="$GTK_LIBS"
2875 GUI_INC_LOC="$GTK_CFLAGS"], )
2876 if test "x$GTK_CFLAGS" != "x"; then
2877 SKIP_GTK2=YES
2878 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002879 SKIP_MOTIF=YES
2880 GUITYPE=GTK
2881 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002882 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002883 else
2884 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002885 fi
2886 fi
2887fi
2888
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002889dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002890dnl glib-compile-resources is found in PATH, use GResource.
2891if test "x$GUITYPE" = "xGTK"; then
2892 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2893 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2894 if test "x$gdk_pixbuf_version" != x ; then
2895 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2896 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2897 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002898 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002899 AC_MSG_RESULT([OK.])
2900 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2901 AC_MSG_CHECKING([glib-compile-resources])
2902 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002903 GLIB_COMPILE_RESOURCES=""
2904 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002905 else
2906 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002907 AC_DEFINE(USE_GRESOURCE)
2908 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2909 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002910 fi
2911 else
2912 AC_MSG_RESULT([not usable.])
2913 fi
2914 else
2915 AC_MSG_RESULT([cannot obtain from pkg_config.])
2916 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002917
2918 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2919 AC_ARG_ENABLE(icon_cache_update,
2920 [ --disable-icon-cache-update update disabled],
2921 [],
2922 [enable_icon_cache_update="yes"])
2923 if test "$enable_icon_cache_update" = "yes"; then
2924 AC_MSG_RESULT([not set])
2925 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2926 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2927 AC_MSG_RESULT([not found in PATH.])
2928 fi
2929 else
2930 AC_MSG_RESULT([update disabled])
2931 fi
2932
2933 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2934 AC_ARG_ENABLE(desktop_database_update,
2935 [ --disable-desktop-database-update update disabled],
2936 [],
2937 [enable_desktop_database_update="yes"])
2938 if test "$enable_desktop_database_update" = "yes"; then
2939 AC_MSG_RESULT([not set])
2940 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2941 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2942 AC_MSG_RESULT([not found in PATH.])
2943 fi
2944 else
2945 AC_MSG_RESULT([update disabled])
2946 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002947fi
2948AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002949AC_SUBST(GRESOURCE_SRC)
2950AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002951AC_SUBST(GTK_UPDATE_ICON_CACHE)
2952AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002953
Bram Moolenaar071d4272004-06-13 20:20:40 +00002954dnl Check for Motif include files location.
2955dnl The LAST one found is used, this makes the highest version to be used,
2956dnl e.g. when Motif1.2 and Motif2.0 are both present.
2957
2958if test -z "$SKIP_MOTIF"; then
2959 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"
2960 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2961 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2962
2963 AC_MSG_CHECKING(for location of Motif GUI includes)
2964 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2965 GUI_INC_LOC=
2966 for try in $gui_includes; do
2967 if test -f "$try/Xm/Xm.h"; then
2968 GUI_INC_LOC=$try
2969 fi
2970 done
2971 if test -n "$GUI_INC_LOC"; then
2972 if test "$GUI_INC_LOC" = /usr/include; then
2973 GUI_INC_LOC=
2974 AC_MSG_RESULT(in default path)
2975 else
2976 AC_MSG_RESULT($GUI_INC_LOC)
2977 fi
2978 else
2979 AC_MSG_RESULT(<not found>)
2980 SKIP_MOTIF=YES
2981 fi
2982fi
2983
2984dnl Check for Motif library files location. In the same order as the include
2985dnl files, to avoid a mixup if several versions are present
2986
2987if test -z "$SKIP_MOTIF"; then
2988 AC_MSG_CHECKING(--with-motif-lib argument)
2989 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002990 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002991 [ MOTIF_LIBNAME="${withval}" ] )
2992
2993 if test -n "$MOTIF_LIBNAME"; then
2994 AC_MSG_RESULT($MOTIF_LIBNAME)
2995 GUI_LIB_LOC=
2996 else
2997 AC_MSG_RESULT(no)
2998
2999 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
3000 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
3001
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003002 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
3003 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01003004 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar01967f52023-04-12 16:24:03 +01003005 dnl OpenSUSE appears to use /usr/lib64.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003006 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar01967f52023-04-12 16:24:03 +01003007 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 +00003008 GUI_LIB_LOC=
3009 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01003010 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 +00003011 if test -f "$libtry"; then
3012 GUI_LIB_LOC=$try
3013 fi
3014 done
3015 done
3016 if test -n "$GUI_LIB_LOC"; then
Bram Moolenaar01967f52023-04-12 16:24:03 +01003017 dnl Remove /usr/lib, it causes trouble on some systems.
3018 dnl For consistency also remove other standard lib directories.
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003019 if test "$GUI_LIB_LOC" = /usr/lib \
Bram Moolenaar01967f52023-04-12 16:24:03 +01003020 -o "$GUI_LIB_LOC" = /usr/lib64 \
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02003021 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
3022 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003023 GUI_LIB_LOC=
3024 AC_MSG_RESULT(in default path)
3025 else
3026 if test -n "$GUI_LIB_LOC"; then
3027 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003028 if test "$vim_cv_uname_output" = SunOS &&
3029 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003030 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
3031 fi
3032 fi
3033 fi
3034 MOTIF_LIBNAME=-lXm
3035 else
3036 AC_MSG_RESULT(<not found>)
3037 SKIP_MOTIF=YES
3038 fi
3039 fi
3040fi
3041
3042if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003043 GUITYPE=MOTIF
3044 AC_SUBST(MOTIF_LIBNAME)
3045fi
3046
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003047if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003048 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3049 dnl Avoid adding it when it twice
3050 if test -n "$GUI_INC_LOC"; then
3051 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3052 fi
3053 if test -n "$GUI_LIB_LOC"; then
3054 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3055 fi
3056
3057 dnl Check for -lXext and then for -lXmu
3058 ldflags_save=$LDFLAGS
3059 LDFLAGS="$X_LIBS $LDFLAGS"
3060 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3061 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3062 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3063 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3064 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3065 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3066 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3067 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3068 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3069 if test -z "$SKIP_MOTIF"; then
3070 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3071 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3072 fi
3073 LDFLAGS=$ldflags_save
3074
3075 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3076 AC_MSG_CHECKING(for extra X11 defines)
3077 NARROW_PROTO=
3078 rm -fr conftestdir
3079 if mkdir conftestdir; then
3080 cd conftestdir
3081 cat > Imakefile <<'EOF'
3082acfindx:
3083 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3084EOF
3085 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3086 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3087 fi
3088 cd ..
3089 rm -fr conftestdir
3090 fi
3091 if test -z "$NARROW_PROTO"; then
3092 AC_MSG_RESULT(no)
3093 else
3094 AC_MSG_RESULT($NARROW_PROTO)
3095 fi
3096 AC_SUBST(NARROW_PROTO)
3097fi
3098
3099dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3100dnl use the X11 include path
3101if test "$enable_xsmp" = "yes"; then
3102 cppflags_save=$CPPFLAGS
3103 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3104 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3105 CPPFLAGS=$cppflags_save
3106fi
3107
3108
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003109if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003110 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3111 cppflags_save=$CPPFLAGS
3112 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3113 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3114
3115 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3116 if test ! "$enable_xim" = "no"; then
3117 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3118 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3119 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003120 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003121 fi
3122 CPPFLAGS=$cppflags_save
3123
Bram Moolenaar54612582019-11-21 17:13:31 +01003124 dnl automatically enable XIM in the GUI
3125 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003126 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3127 enable_xim="yes"
3128 fi
3129fi
3130
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003131if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003132 cppflags_save=$CPPFLAGS
3133 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003134dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3135 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003136 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003137#include <X11/Intrinsic.h>
3138#include <X11/Xmu/Editres.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003139 [int i; i = 0;])],
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003140 AC_MSG_RESULT(yes)
3141 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3142 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003143 CPPFLAGS=$cppflags_save
3144fi
3145
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003146dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003147if test -z "$SKIP_MOTIF"; then
3148 cppflags_save=$CPPFLAGS
3149 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003150 if test "$zOSUnix" = "yes"; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003151 AC_CHECK_HEADERS(Xm/Xm.h)
Bram Moolenaar77c19352012-06-13 19:19:41 +02003152 else
Bram Moolenaarde1d7342022-06-05 20:03:17 +01003153 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 +01003154 fi
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003155
Bram Moolenaar77c19352012-06-13 19:19:41 +02003156 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003157 dnl Solaris uses XpmAttributes_21, very annoying.
3158 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003159 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003160 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3161 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3162 )
3163 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003164 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003165 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003166 CPPFLAGS=$cppflags_save
3167fi
3168
3169if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3170 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3171 enable_xim="no"
3172fi
3173if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3174 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3175 enable_fontset="no"
3176fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003177if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003178 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3179 enable_fontset="no"
3180fi
3181
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003182dnl There is no test for the Haiku GUI, if it's selected it's used
3183if test -z "$SKIP_HAIKU"; then
3184 GUITYPE=HAIKUGUI
3185fi
3186
Bram Moolenaar071d4272004-06-13 20:20:40 +00003187if test -z "$SKIP_PHOTON"; then
3188 GUITYPE=PHOTONGUI
3189fi
3190
3191AC_SUBST(GUI_INC_LOC)
3192AC_SUBST(GUI_LIB_LOC)
3193AC_SUBST(GUITYPE)
3194AC_SUBST(GUI_X_LIBS)
3195
3196if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3197 AC_MSG_ERROR([cannot use workshop without Motif])
3198fi
3199
3200dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3201if test "$enable_xim" = "yes"; then
3202 AC_DEFINE(FEAT_XIM)
3203fi
3204if test "$enable_fontset" = "yes"; then
3205 AC_DEFINE(FEAT_XFONTSET)
3206fi
3207
3208
3209dnl ---------------------------------------------------------------------------
3210dnl end of GUI-checking
3211dnl ---------------------------------------------------------------------------
3212
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003213AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003214if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003215 dnl Linux
3216 AC_MSG_RESULT([/proc/self/exe])
3217 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3218elif test -L "/proc/self/path/a.out"; then
3219 dnl Solaris
3220 AC_MSG_RESULT([/proc/self/path/a.out])
3221 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3222elif test -L "/proc/curproc/file"; then
3223 dnl FreeBSD
3224 AC_MSG_RESULT([/proc/curproc/file])
3225 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003226else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003227 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003228fi
3229
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003230dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003231AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003232case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003233 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003234 AC_MSG_CHECKING(for CYGWIN clipboard support)
3235 if test "x$with_x" = "xno" ; then
3236 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3237 AC_MSG_RESULT(yes)
3238 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3239 else
3240 AC_MSG_RESULT(no - using X11)
3241 fi ;;
3242
3243 *) CYGWIN=no; AC_MSG_RESULT(no);;
3244esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003245
Bram Moolenaar071d4272004-06-13 20:20:40 +00003246dnl Checks for libraries and include files.
3247
Bram Moolenaar446cb832008-06-24 21:56:24 +00003248AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3249 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003250 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003251#include "confdefs.h"
3252#include <ctype.h>
3253#if STDC_HEADERS
3254# include <stdlib.h>
3255# include <stddef.h>
3256#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003257int main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003258 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003259 vim_cv_toupper_broken=yes
3260 ],[
3261 vim_cv_toupper_broken=no
3262 ],[
3263 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3264 ])])
3265
3266if test "x$vim_cv_toupper_broken" = "xyes" ; then
3267 AC_DEFINE(BROKEN_TOUPPER)
3268fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003269
3270AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003271AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003272 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3273 AC_MSG_RESULT(no))
3274
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003275AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003276AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003277 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3278 AC_MSG_RESULT(no))
3279
Bram Moolenaar071d4272004-06-13 20:20:40 +00003280dnl Checks for header files.
3281AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3282dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3283if test "$HAS_ELF" = 1; then
3284 AC_CHECK_LIB(elf, main)
3285fi
3286
3287AC_HEADER_DIRENT
3288
Bram Moolenaar071d4272004-06-13 20:20:40 +00003289dnl If sys/wait.h is not found it might still exist but not be POSIX
3290dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3291if test $ac_cv_header_sys_wait_h = no; then
3292 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003293 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
3294 [union wait xx, yy; xx = yy])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003295 AC_MSG_RESULT(yes)
3296 AC_DEFINE(HAVE_SYS_WAIT_H)
3297 AC_DEFINE(HAVE_UNION_WAIT),
3298 AC_MSG_RESULT(no))
3299fi
3300
Bram Moolenaar779a7752016-01-30 23:26:34 +01003301AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003302 sys/select.h sys/utsname.h termcap.h fcntl.h \
3303 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3304 termio.h iconv.h inttypes.h langinfo.h math.h \
3305 unistd.h stropts.h errno.h sys/resource.h \
3306 sys/systeminfo.h locale.h sys/stream.h termios.h \
3307 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003308 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003309 util/debug.h util/msg18n.h frame.h sys/acl.h \
3310 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003311
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003312dnl sys/ptem.h depends on sys/stream.h on Solaris
3313AC_CHECK_HEADERS(sys/ptem.h, [], [],
3314[#if defined HAVE_SYS_STREAM_H
3315# include <sys/stream.h>
3316#endif])
3317
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003318dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3319AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3320[#if defined HAVE_SYS_PARAM_H
3321# include <sys/param.h>
3322#endif])
3323
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003324
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003325dnl pthread_np.h may exist but can only be used after including pthread.h
3326AC_MSG_CHECKING([for pthread_np.h])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003327AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003328#include <pthread.h>
3329#include <pthread_np.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003330 [int i; i = 0;])],
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003331 AC_MSG_RESULT(yes)
3332 AC_DEFINE(HAVE_PTHREAD_NP_H),
3333 AC_MSG_RESULT(no))
3334
Bram Moolenaare344bea2005-09-01 20:46:49 +00003335AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003336if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003337 dnl The strings.h file on OS/X contains a warning and nothing useful.
3338 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3339else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003340
3341dnl Check if strings.h and string.h can both be included when defined.
3342AC_MSG_CHECKING([if strings.h can be included after string.h])
3343cppflags_save=$CPPFLAGS
3344CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003345AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003346#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3347# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3348 /* but don't do it on AIX 5.1 (Uribarri) */
3349#endif
3350#ifdef HAVE_XM_XM_H
3351# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3352#endif
3353#ifdef HAVE_STRING_H
3354# include <string.h>
3355#endif
3356#if defined(HAVE_STRINGS_H)
3357# include <strings.h>
3358#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003359 ], [int i; i = 0;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003360 AC_MSG_RESULT(yes),
3361 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3362 AC_MSG_RESULT(no))
3363CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003364fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003365
3366dnl Checks for typedefs, structures, and compiler characteristics.
3367AC_PROG_GCC_TRADITIONAL
3368AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003369AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003370AC_TYPE_MODE_T
3371AC_TYPE_OFF_T
3372AC_TYPE_PID_T
3373AC_TYPE_SIZE_T
3374AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003375AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003376
Illia Bobyrf39842f2023-08-27 18:21:23 +02003377AC_CHECK_HEADERS_ONCE([sys/time.h])
3378
Bram Moolenaar071d4272004-06-13 20:20:40 +00003379AC_CHECK_TYPE(ino_t, long)
3380AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003381AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003382AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003383
3384AC_MSG_CHECKING(for rlim_t)
3385if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3386 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3387else
3388 AC_EGREP_CPP(dnl
3389changequote(<<,>>)dnl
3390<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3391changequote([,]),
3392 [
3393#include <sys/types.h>
3394#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003395# include <stdlib.h>
3396# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003397#endif
3398#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003399# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003400#endif
3401 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3402 AC_MSG_RESULT($ac_cv_type_rlim_t)
3403fi
3404if test $ac_cv_type_rlim_t = no; then
3405 cat >> confdefs.h <<\EOF
3406#define rlim_t unsigned long
3407EOF
3408fi
3409
3410AC_MSG_CHECKING(for stack_t)
3411if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3412 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3413else
3414 AC_EGREP_CPP(stack_t,
3415 [
3416#include <sys/types.h>
3417#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003418# include <stdlib.h>
3419# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003420#endif
3421#include <signal.h>
3422 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3423 AC_MSG_RESULT($ac_cv_type_stack_t)
3424fi
3425if test $ac_cv_type_stack_t = no; then
3426 cat >> confdefs.h <<\EOF
3427#define stack_t struct sigaltstack
3428EOF
3429fi
3430
3431dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3432AC_MSG_CHECKING(whether stack_t has an ss_base field)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003433AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003434#include <sys/types.h>
3435#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003436# include <stdlib.h>
3437# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003438#endif
3439#include <signal.h>
3440#include "confdefs.h"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003441 ], [stack_t sigstk; sigstk.ss_base = 0; ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003442 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3443 AC_MSG_RESULT(no))
3444
3445olibs="$LIBS"
3446AC_MSG_CHECKING(--with-tlib argument)
3447AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3448if test -n "$with_tlib"; then
3449 AC_MSG_RESULT($with_tlib)
3450 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003451 AC_MSG_CHECKING(for linking with $with_tlib library)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003452 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003453 dnl Need to check for tgetent() below.
3454 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003455else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003456 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003457 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3458 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003459 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003460 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003461 dnl Older versions of ncurses have bugs, get a new one!
3462 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003463 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003464 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003465 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3466 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003467 esac
3468 for libname in $tlibs; do
3469 AC_CHECK_LIB(${libname}, tgetent,,)
3470 if test "x$olibs" != "x$LIBS"; then
3471 dnl It's possible that a library is found but it doesn't work
3472 dnl e.g., shared library that cannot be found
3473 dnl compile and run a test program to be sure
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003474 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003475#ifdef HAVE_TERMCAP_H
3476# include <termcap.h>
3477#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003478#if STDC_HEADERS
3479# include <stdlib.h>
3480# include <stddef.h>
3481#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003482int main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003483 res="OK", res="FAIL", res="FAIL")
3484 if test "$res" = "OK"; then
3485 break
3486 fi
3487 AC_MSG_RESULT($libname library is not usable)
3488 LIBS="$olibs"
3489 fi
3490 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003491 if test "x$olibs" = "x$LIBS"; then
3492 AC_MSG_RESULT(no terminal library found)
3493 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003494fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003495
3496if test "x$olibs" = "x$LIBS"; then
3497 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003498 AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
3499 [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003500 AC_MSG_RESULT(yes),
3501 AC_MSG_ERROR([NOT FOUND!
3502 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003503 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003504 Or specify the name of the library with --with-tlib.]))
3505fi
3506
Bram Moolenaar446cb832008-06-24 21:56:24 +00003507AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3508 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003509 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003510#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003511#ifdef HAVE_TERMCAP_H
3512# include <termcap.h>
3513#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003514#ifdef HAVE_STRING_H
3515# include <string.h>
3516#endif
3517#if STDC_HEADERS
3518# include <stdlib.h>
3519# include <stddef.h>
3520#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003521int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003522{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003523 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003524 vim_cv_terminfo=no
3525 ],[
3526 vim_cv_terminfo=yes
3527 ],[
3528 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3529 ])
3530 ])
3531
3532if test "x$vim_cv_terminfo" = "xyes" ; then
3533 AC_DEFINE(TERMINFO)
3534fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003535
Bram Moolenaara88254f2017-11-02 23:04:14 +01003536AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003537 [
3538 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003539#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003540#ifdef HAVE_TERMCAP_H
3541# include <termcap.h>
3542#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003543#if STDC_HEADERS
3544# include <stdlib.h>
3545# include <stddef.h>
3546#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003547int main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003548{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003549 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003550 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003551 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003552 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003553 ],[
3554 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003555 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003556 ])
3557
Bram Moolenaara88254f2017-11-02 23:04:14 +01003558if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003559 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003560fi
3561
3562AC_MSG_CHECKING(whether termcap.h contains ospeed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003563AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003564#ifdef HAVE_TERMCAP_H
3565# include <termcap.h>
3566#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003567 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003568 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3569 [AC_MSG_RESULT(no)
3570 AC_MSG_CHECKING(whether ospeed can be extern)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003571 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003572#ifdef HAVE_TERMCAP_H
3573# include <termcap.h>
3574#endif
3575extern short ospeed;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003576 ], [ospeed = 20000])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003577 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3578 AC_MSG_RESULT(no))]
3579 )
3580
3581AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003582AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003583#ifdef HAVE_TERMCAP_H
3584# include <termcap.h>
3585#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003586 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003587 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3588 [AC_MSG_RESULT(no)
3589 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003590 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003591#ifdef HAVE_TERMCAP_H
3592# include <termcap.h>
3593#endif
3594extern char *UP, *BC, PC;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003595 ], [if (UP == 0 && BC == 0) PC = 1])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003596 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3597 AC_MSG_RESULT(no))]
3598 )
3599
3600AC_MSG_CHECKING(whether tputs() uses outfuntype)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003601AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003602#ifdef HAVE_TERMCAP_H
3603# include <termcap.h>
3604#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003605 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003606 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3607 AC_MSG_RESULT(no))
3608
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003609AC_MSG_CHECKING([whether del_curterm() can be used])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003610AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003611#ifdef HAVE_TERMCAP_H
3612# include <termcap.h>
3613#endif
3614#include <term.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003615 ], [if (cur_term) del_curterm(cur_term);])],
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003616 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3617 AC_MSG_RESULT(no))
3618
Bram Moolenaar071d4272004-06-13 20:20:40 +00003619dnl On some SCO machines sys/select redefines struct timeval
3620AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003621AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003622#include <sys/types.h>
3623#include <sys/time.h>
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003624#include <sys/select.h>], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003625 AC_MSG_RESULT(yes)
3626 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3627 AC_MSG_RESULT(no))
3628
Bram Moolenaar071d4272004-06-13 20:20:40 +00003629dnl Checks for pty.c (copied from screen) ==========================
3630AC_MSG_CHECKING(for /dev/ptc)
3631if test -r /dev/ptc; then
3632 AC_DEFINE(HAVE_DEV_PTC)
3633 AC_MSG_RESULT(yes)
3634else
3635 AC_MSG_RESULT(no)
3636fi
3637
3638AC_MSG_CHECKING(for SVR4 ptys)
3639if test -c /dev/ptmx ; then
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003640 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003641// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3642char *ptsname(int);
3643int unlockpt(int);
3644int grantpt(int);
3645 ], [
3646 ptsname(0);
3647 grantpt(0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003648 unlockpt(0);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003649 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3650 AC_MSG_RESULT(no))
3651else
3652 AC_MSG_RESULT(no)
3653fi
3654
3655AC_MSG_CHECKING(for ptyranges)
3656if test -d /dev/ptym ; then
3657 pdir='/dev/ptym'
3658else
3659 pdir='/dev'
3660fi
3661dnl SCO uses ptyp%d
3662AC_EGREP_CPP(yes,
3663[#ifdef M_UNIX
3664 yes;
3665#endif
3666 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3667dnl if test -c /dev/ptyp19; then
3668dnl ptys=`echo /dev/ptyp??`
3669dnl else
3670dnl ptys=`echo $pdir/pty??`
3671dnl fi
3672if test "$ptys" != "$pdir/pty??" ; then
3673 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3674 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3675 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3676 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3677 AC_MSG_RESULT([$p0 / $p1])
3678else
3679 AC_MSG_RESULT([don't know])
3680fi
3681
Bram Moolenaar071d4272004-06-13 20:20:40 +00003682dnl Checks for library functions. ===================================
3683
Bram Moolenaar071d4272004-06-13 20:20:40 +00003684dnl check if struct sigcontext is defined (used for SGI only)
3685AC_MSG_CHECKING(for struct sigcontext)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003686AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003687#include <signal.h>
Sam Jamesf8ea1062022-11-05 15:13:50 +00003688int test_sig()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003689{
3690 struct sigcontext *scont;
3691 scont = (struct sigcontext *)0;
3692 return 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003693} ], )],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003694 AC_MSG_RESULT(yes)
3695 AC_DEFINE(HAVE_SIGCONTEXT),
3696 AC_MSG_RESULT(no))
3697
3698dnl tricky stuff: try to find out if getcwd() is implemented with
3699dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003700AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3701 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003702 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003703#include "confdefs.h"
3704#ifdef HAVE_UNISTD_H
3705#include <unistd.h>
3706#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003707char *dagger[] = { "IFS=pwd", 0 };
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003708int main()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003709{
3710 char buffer[500];
3711 extern char **environ;
3712 environ = dagger;
3713 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003714}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003715 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003716 vim_cv_getcwd_broken=no
3717 ],[
3718 vim_cv_getcwd_broken=yes
3719 ],[
3720 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3721 ])
3722 ])
3723
3724if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3725 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003726 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003727fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003728
Bram Moolenaar25153e12010-02-24 14:47:08 +01003729dnl Check for functions in one big call, to reduce the size of configure.
3730dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003731AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003732 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003733 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003734 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003735 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003736 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
Bram Moolenaar08210f82023-04-13 19:15:54 +01003737 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt \
3738 clock_gettime)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003739AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003740AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003741
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003742dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3743dnl appropriate, so that off_t is 64 bits when needed.
3744AC_SYS_LARGEFILE
3745
Bram Moolenaar21606672019-06-14 20:40:58 +02003746AC_MSG_CHECKING(--enable-canberra argument)
3747AC_ARG_ENABLE(canberra,
3748 [ --disable-canberra Do not use libcanberra.],
3749 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003750
Bram Moolenaar21606672019-06-14 20:40:58 +02003751if test "$enable_canberra" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003752 if test "$features" = "huge"; then
Bram Moolenaar21606672019-06-14 20:40:58 +02003753 AC_MSG_RESULT(Defaulting to yes)
3754 enable_canberra="yes"
3755 else
3756 AC_MSG_RESULT(Defaulting to no)
3757 enable_canberra="no"
3758 fi
3759else
Bram Moolenaar12471262022-01-18 11:11:25 +00003760 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
Martin Tournoij7904fa42022-10-04 16:28:45 +01003761 AC_MSG_RESULT([cannot use sound with tiny features])
Bram Moolenaar12471262022-01-18 11:11:25 +00003762 enable_canberra="no"
3763 else
3764 AC_MSG_RESULT($enable_canberra)
3765 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003766fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003767if test "$enable_canberra" = "yes"; then
3768 if test "x$PKG_CONFIG" != "xno"; then
3769 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3770 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3771 fi
3772 if test "x$canberra_lib" = "x"; then
3773 canberra_lib=-lcanberra
3774 canberra_cflags=-D_REENTRANT
3775 fi
3776 AC_MSG_CHECKING(for libcanberra)
3777 ac_save_CFLAGS="$CFLAGS"
3778 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003779 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003780 CFLAGS="$CFLAGS $canberra_cflags"
3781 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003782 LIBS="$LIBS $canberra_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003783 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar21606672019-06-14 20:40:58 +02003784 # include <canberra.h>
3785 ], [
3786 ca_context *hello;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003787 ca_context_create(&hello);])],
Bram Moolenaar21606672019-06-14 20:40:58 +02003788 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003789 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003790fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003791
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003792AC_MSG_CHECKING(--enable-libsodium argument)
3793AC_ARG_ENABLE(libsodium,
3794 [ --disable-libsodium Do not use libsodium.],
3795 , [enable_libsodium="maybe"])
3796
3797if test "$enable_libsodium" = "maybe"; then
Martin Tournoij25f3a142022-10-08 19:26:41 +01003798 if test "$features" = "huge"; then
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003799 AC_MSG_RESULT(Defaulting to yes)
3800 enable_libsodium="yes"
3801 else
3802 AC_MSG_RESULT(Defaulting to no)
3803 enable_libsodium="no"
3804 fi
3805else
3806 AC_MSG_RESULT($enable_libsodium)
3807fi
3808if test "$enable_libsodium" = "yes"; then
3809 if test "x$PKG_CONFIG" != "xno"; then
3810 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3811 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3812 fi
3813 if test "x$libsodium_lib" = "x"; then
3814 libsodium_lib=-lsodium
3815 libsodium_cflags=
3816 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003817 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003818 ac_save_CFLAGS="$CFLAGS"
3819 ac_save_LIBS="$LIBS"
3820 CFLAGS="$CFLAGS $libsodium_cflags"
3821 LIBS="$LIBS $libsodium_lib"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003822 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003823 # include <sodium.h>
3824 ], [
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003825 printf("%d", sodium_init()); ])],
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003826 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3827 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3828fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003829
Bram Moolenaar071d4272004-06-13 20:20:40 +00003830dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3831AC_MSG_CHECKING(for st_blksize)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003832AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00003833[#include <sys/types.h>
3834#include <sys/stat.h>],
3835[ struct stat st;
3836 int n;
3837
3838 stat("/", &st);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003839 n = (int)st.st_blksize;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003840 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3841 AC_MSG_RESULT(no))
3842
Paul Ollis65745772022-06-05 16:55:54 +01003843dnl Check for timer_create. It probably requires the 'rt' library.
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003844dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
3845dnl works, on Solaris timer_create() exists but fails at runtime.
Bram Moolenaarefffa532022-07-28 22:39:54 +01003846AC_CACHE_CHECK([for timer_create without -lrt], [vim_cv_timer_create], [
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003847AC_RUN_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar5748b7f2022-07-28 12:09:04 +01003848#if STDC_HEADERS
3849# include <stdlib.h>
3850# include <stddef.h>
3851#endif
3852#include <signal.h>
3853#include <time.h>
Bram Moolenaare5303952022-06-19 17:05:47 +01003854static void set_flag(union sigval sv) {}
Paul Ollis65745772022-06-05 16:55:54 +01003855], [
3856 struct timespec ts;
3857 struct sigevent action = {0};
3858 timer_t timer_id;
3859
3860 action.sigev_notify = SIGEV_THREAD;
3861 action.sigev_notify_function = set_flag;
Bram Moolenaarf2ce76a2022-07-02 11:40:40 +01003862 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3863 exit(1); // cannot create a monotonic timer
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003864 ])],
Bram Moolenaarefffa532022-07-28 22:39:54 +01003865 vim_cv_timer_create=yes,
3866 vim_cv_timer_create=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003867 AC_MSG_WARN([failed to build test program; if cross-compiling please set 'vim_cv_timer_create'])
Bram Moolenaarefffa532022-07-28 22:39:54 +01003868 )])
Paul Ollis65745772022-06-05 16:55:54 +01003869
Bram Moolenaarefffa532022-07-28 22:39:54 +01003870dnl If the previous failed, check for timer_create() and linking with -lrt.
3871if test "x$vim_cv_timer_create" = "xno" ; then
3872 save_LIBS="$LIBS"
3873 LIBS="$LIBS -lrt"
3874 AC_CACHE_CHECK([for timer_create with -lrt], [vim_cv_timer_create_with_lrt], [
3875 AC_RUN_IFELSE([AC_LANG_PROGRAM([
3876 #if STDC_HEADERS
3877 # include <stdlib.h>
3878 # include <stddef.h>
3879 #endif
3880 #include <signal.h>
3881 #include <time.h>
3882 static void set_flag(union sigval sv) {}
3883 ], [
3884 struct timespec ts;
3885 struct sigevent action = {0};
3886 timer_t timer_id;
3887
3888 action.sigev_notify = SIGEV_THREAD;
3889 action.sigev_notify_function = set_flag;
3890 if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
3891 exit(1); // cannot create a monotonic timer
3892 ])],
3893 vim_cv_timer_create_with_lrt=yes,
3894 vim_cv_timer_create_with_lrt=no,
Bram Moolenaar5f6cae82022-07-30 11:00:50 +01003895 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 +01003896 )])
3897 LIBS="$save_LIBS"
3898else
3899 vim_cv_timer_create_with_lrt=no
3900fi
Richard Purdie509695c2022-07-24 20:48:00 +01003901
3902if test "x$vim_cv_timer_create" = "xyes" ; then
3903 AC_DEFINE(HAVE_TIMER_CREATE)
3904fi
Bram Moolenaarefffa532022-07-28 22:39:54 +01003905if test "x$vim_cv_timer_create_with_lrt" = "xyes" ; then
3906 AC_DEFINE(HAVE_TIMER_CREATE)
3907 LIBS="$LIBS -lrt"
3908fi
Paul Ollis65745772022-06-05 16:55:54 +01003909
Bram Moolenaar446cb832008-06-24 21:56:24 +00003910AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3911 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003912 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003913#include "confdefs.h"
3914#if STDC_HEADERS
3915# include <stdlib.h>
3916# include <stddef.h>
3917#endif
3918#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003919#include <sys/stat.h>
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01003920int main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003921 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003922 vim_cv_stat_ignores_slash=yes
3923 ],[
3924 vim_cv_stat_ignores_slash=no
3925 ],[
3926 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3927 ])
3928 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003929
Bram Moolenaar446cb832008-06-24 21:56:24 +00003930if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3931 AC_DEFINE(STAT_IGNORES_SLASH)
3932fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003933
3934dnl nanoseconds field of struct stat
3935AC_CACHE_CHECK([for nanoseconds field of struct stat],
3936 ac_cv_struct_st_mtim_nsec,
3937 [ac_save_CPPFLAGS="$CPPFLAGS"
3938 ac_cv_struct_st_mtim_nsec=no
3939 # st_mtim.tv_nsec -- the usual case
3940 # st_mtim._tv_nsec -- Solaris 2.6, if
3941 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3942 # && !defined __EXTENSIONS__)
3943 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3944 # st_mtime_n -- AIX 5.2 and above
3945 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3946 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
3947 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003948 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
3949#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003950 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3951 done
3952 CPPFLAGS="$ac_save_CPPFLAGS"
3953])
3954if test $ac_cv_struct_st_mtim_nsec != no; then
3955 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3956 [Define if struct stat contains a nanoseconds field])
3957fi
Bram Moolenaare5303952022-06-19 17:05:47 +01003958
Bram Moolenaar071d4272004-06-13 20:20:40 +00003959dnl Link with iconv for charset translation, if not found without library.
3960dnl check for iconv() requires including iconv.h
3961dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3962dnl has been installed.
3963AC_MSG_CHECKING(for iconv_open())
3964save_LIBS="$LIBS"
3965LIBS="$LIBS -liconv"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003966AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003967#ifdef HAVE_ICONV_H
3968# include <iconv.h>
3969#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003970 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003971 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3972 LIBS="$save_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003973 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003974#ifdef HAVE_ICONV_H
3975# include <iconv.h>
3976#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003977 ], [iconv_open("fr", "to");])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003978 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3979 AC_MSG_RESULT(no)))
3980
3981
3982AC_MSG_CHECKING(for nl_langinfo(CODESET))
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003983AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003984#ifdef HAVE_LANGINFO_H
3985# include <langinfo.h>
3986#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003987], [char *cs = nl_langinfo(CODESET);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003988 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3989 AC_MSG_RESULT(no))
3990
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01003991dnl Floating point support may require the "m" library
Bram Moolenaar446cb832008-06-24 21:56:24 +00003992AC_CHECK_LIB(m, strtod)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003993
Bram Moolenaara6b89762016-02-29 21:38:26 +01003994dnl isinf() and isnan() need to include header files and may need -lm.
3995AC_MSG_CHECKING([for isinf()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01003996AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01003997#ifdef HAVE_MATH_H
3998# include <math.h>
3999#endif
4000#if STDC_HEADERS
4001# include <stdlib.h>
4002# include <stddef.h>
4003#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004004], [int r = isinf(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004005 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
4006 AC_MSG_RESULT(no))
4007
4008AC_MSG_CHECKING([for isnan()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004009AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaara6b89762016-02-29 21:38:26 +01004010#ifdef HAVE_MATH_H
4011# include <math.h>
4012#endif
4013#if STDC_HEADERS
4014# include <stdlib.h>
4015# include <stddef.h>
4016#endif
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004017], [int r = isnan(1.11); ])],
Bram Moolenaara6b89762016-02-29 21:38:26 +01004018 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
4019 AC_MSG_RESULT(no))
4020
Bram Moolenaar071d4272004-06-13 20:20:40 +00004021dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
4022dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004023dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004024AC_MSG_CHECKING(--disable-acl argument)
4025AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01004026 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004027 , [enable_acl="yes"])
4028if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01004029 AC_MSG_RESULT(no)
4030 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004031 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
4032 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
4033
Bram Moolenaard6d30422018-01-28 22:48:55 +01004034 AC_MSG_CHECKING(for POSIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004035 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036#include <sys/types.h>
4037#ifdef HAVE_SYS_ACL_H
4038# include <sys/acl.h>
4039#endif
4040acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4041 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004042 acl_free(acl);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004043 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4044 AC_MSG_RESULT(no))
4045
Bram Moolenaard6d30422018-01-28 22:48:55 +01004046 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4047 AC_MSG_CHECKING(for Solaris ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004048 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004049#ifdef HAVE_SYS_ACL_H
4050# include <sys/acl.h>
4051#endif], [acl("foo", GETACLCNT, 0, NULL);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004052 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004053 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004054 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004055
Bram Moolenaard6d30422018-01-28 22:48:55 +01004056 AC_MSG_CHECKING(for AIX ACL support)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004057 AC_LINK_IFELSE([AC_LANG_PROGRAM([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004058#if STDC_HEADERS
4059# include <stdlib.h>
4060# include <stddef.h>
4061#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004062#ifdef HAVE_SYS_ACL_H
4063# include <sys/acl.h>
4064#endif
4065#ifdef HAVE_SYS_ACCESS_H
4066# include <sys/access.h>
4067#endif
4068#define _ALL_SOURCE
4069
4070#include <sys/stat.h>
4071
4072int aclsize;
4073struct acl *aclent;], [aclsize = sizeof(struct acl);
4074 aclent = (void *)malloc(aclsize);
4075 statacl("foo", STX_NORMAL, aclent, aclsize);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004076 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004077 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4078 AC_MSG_RESULT(no))
4079else
4080 AC_MSG_RESULT(yes)
4081fi
4082
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004083if test "x$GTK_CFLAGS" != "x"; then
4084 dnl pango_shape_full() is new, fall back to pango_shape().
4085 AC_MSG_CHECKING(for pango_shape_full)
4086 ac_save_CFLAGS="$CFLAGS"
4087 ac_save_LIBS="$LIBS"
4088 CFLAGS="$CFLAGS $GTK_CFLAGS"
4089 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004090 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004091 [#include <gtk/gtk.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004092 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004093 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4094 AC_MSG_RESULT(no))
4095 CFLAGS="$ac_save_CFLAGS"
4096 LIBS="$ac_save_LIBS"
4097fi
4098
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004099AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004100AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004101 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004102 [enable_gpm="yes"])
4103
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004104if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4105 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004106 dnl Checking if gpm support can be compiled
4107 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4108 [olibs="$LIBS" ; LIBS="-lgpm"]
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004109 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004110 [#include <gpm.h>
4111 #include <linux/keyboard.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004112 [Gpm_GetLibVersion(NULL);])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004113 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4114 dnl FEAT_MOUSE_GPM if mouse support is included
4115 [vi_cv_have_gpm=yes],
4116 [vi_cv_have_gpm=no])
4117 [LIBS="$olibs"]
4118 )
4119 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004120 if test "$enable_gpm" = "yes"; then
4121 LIBS="$LIBS -lgpm"
4122 else
4123 AC_DEFINE(DYNAMIC_GPM)
4124 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004125 AC_DEFINE(HAVE_GPM)
4126 fi
4127else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004128 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004129fi
4130
Bram Moolenaar446cb832008-06-24 21:56:24 +00004131AC_MSG_CHECKING(--disable-sysmouse argument)
4132AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004133 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004134 [enable_sysmouse="yes"])
4135
4136if test "$enable_sysmouse" = "yes"; then
4137 AC_MSG_RESULT(no)
4138 dnl Checking if sysmouse support can be compiled
4139 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4140 dnl defines FEAT_SYSMOUSE if mouse support is included
4141 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004142 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar446cb832008-06-24 21:56:24 +00004143 [#include <sys/consio.h>
4144 #include <signal.h>
4145 #include <sys/fbio.h>],
4146 [struct mouse_info mouse;
4147 mouse.operation = MOUSE_MODE;
4148 mouse.operation = MOUSE_SHOW;
4149 mouse.u.mode.mode = 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004150 mouse.u.mode.signal = SIGUSR2;])],
Bram Moolenaar446cb832008-06-24 21:56:24 +00004151 [vi_cv_have_sysmouse=yes],
4152 [vi_cv_have_sysmouse=no])
4153 )
4154 if test $vi_cv_have_sysmouse = yes; then
4155 AC_DEFINE(HAVE_SYSMOUSE)
4156 fi
4157else
4158 AC_MSG_RESULT(yes)
4159fi
4160
Bram Moolenaarf05da212009-11-17 16:13:15 +00004161dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4162AC_MSG_CHECKING(for FD_CLOEXEC)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004163AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf05da212009-11-17 16:13:15 +00004164[#if HAVE_FCNTL_H
4165# include <fcntl.h>
4166#endif],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004167[ int flag = FD_CLOEXEC;])],
Bram Moolenaarf05da212009-11-17 16:13:15 +00004168 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4169 AC_MSG_RESULT(not usable))
4170
Bram Moolenaar071d4272004-06-13 20:20:40 +00004171dnl rename needs to be checked separately to work on Nextstep with cc
4172AC_MSG_CHECKING(for rename)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004173AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004174 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4175 AC_MSG_RESULT(no))
4176
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004177dnl check for dirfd()
4178AC_MSG_CHECKING(for dirfd)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004179AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004180[#include <sys/types.h>
4181#include <dirent.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004182[DIR * dir=opendir("dirname"); dirfd(dir);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004183AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4184
4185dnl check for flock()
4186AC_MSG_CHECKING(for flock)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004187AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004188[#include <sys/file.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004189[flock(10, LOCK_SH);])],
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004190AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4191
Bram Moolenaar071d4272004-06-13 20:20:40 +00004192dnl sysctl() may exist but not the arguments we use
4193AC_MSG_CHECKING(for sysctl)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004194AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004195[#include <sys/types.h>
4196#include <sys/sysctl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004197[[ int mib[2], r;
Bram Moolenaar071d4272004-06-13 20:20:40 +00004198 size_t len;
4199
4200 mib[0] = CTL_HW;
4201 mib[1] = HW_USERMEM;
4202 len = sizeof(r);
4203 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004204 ]])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004205 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4206 AC_MSG_RESULT(not usable))
4207
Bram Moolenaare2982d62021-10-06 11:27:21 +01004208dnl sysinfo() may exist but not be Linux compatible.
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004209dnl On some FreeBSD systems it may depend on libsysinfo, try to link
Bram Moolenaar071d4272004-06-13 20:20:40 +00004210AC_MSG_CHECKING(for sysinfo)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004211AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004212[#include <sys/types.h>
4213#include <sys/sysinfo.h>],
4214[ struct sysinfo sinfo;
4215 int t;
4216
4217 (void)sysinfo(&sinfo);
4218 t = sinfo.totalram;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004219 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004220 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4221 AC_MSG_RESULT(not usable))
4222
Bram Moolenaar914572a2007-05-01 11:37:47 +00004223dnl struct sysinfo may have the mem_unit field or not
4224AC_MSG_CHECKING(for sysinfo.mem_unit)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004225AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar914572a2007-05-01 11:37:47 +00004226[#include <sys/types.h>
4227#include <sys/sysinfo.h>],
4228[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004229 sinfo.mem_unit = 1;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004230 ])],
Bram Moolenaar914572a2007-05-01 11:37:47 +00004231 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4232 AC_MSG_RESULT(no))
4233
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004234dnl struct sysinfo may have the uptime field or not
4235AC_MSG_CHECKING(for sysinfo.uptime)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004236AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004237[#include <sys/types.h>
4238#include <sys/sysinfo.h>],
4239[ struct sysinfo sinfo;
4240 long ut;
4241
4242 (void)sysinfo(&sinfo);
4243 ut = sinfo.uptime;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004244 ])],
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004245 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4246 AC_MSG_RESULT(no))
4247
Bram Moolenaar071d4272004-06-13 20:20:40 +00004248dnl sysconf() may exist but not support what we want to use
4249AC_MSG_CHECKING(for sysconf)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004250AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004251[#include <unistd.h>],
4252[ (void)sysconf(_SC_PAGESIZE);
4253 (void)sysconf(_SC_PHYS_PAGES);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004254 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004255 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4256 AC_MSG_RESULT(not usable))
4257
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004258dnl check if we have _SC_SIGSTKSZ via sysconf()
4259AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004260AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004261[#include <unistd.h>],
4262[ (void)sysconf(_SC_SIGSTKSZ);
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004263 ])],
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004264 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4265 AC_MSG_RESULT(not usable))
4266
Bram Moolenaar914703b2010-05-31 21:59:46 +02004267AC_CHECK_SIZEOF([int])
4268AC_CHECK_SIZEOF([long])
4269AC_CHECK_SIZEOF([time_t])
4270AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004271
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004272dnl Use different names to avoid clashing with other header files.
4273AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4274AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4275
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004276dnl Make sure that uint32_t is really 32 bits unsigned.
4277AC_MSG_CHECKING([uint32_t is 32 bits])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004278AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004279#ifdef HAVE_STDINT_H
4280# include <stdint.h>
4281#endif
4282#ifdef HAVE_INTTYPES_H
4283# include <inttypes.h>
4284#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004285int main() {
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004286 uint32_t nr1 = (uint32_t)-1;
4287 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004288 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4289 return 0;
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004290}])],
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004291AC_MSG_RESULT(ok),
4292AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004293AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004294
Bram Moolenaar446cb832008-06-24 21:56:24 +00004295dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4296dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4297
Bram Moolenaar071d4272004-06-13 20:20:40 +00004298[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004299#include "confdefs.h"
4300#ifdef HAVE_STRING_H
4301# include <string.h>
4302#endif
4303#if STDC_HEADERS
4304# include <stdlib.h>
4305# include <stddef.h>
4306#endif
Bram Moolenaar0f0d3a72022-06-19 18:02:05 +01004307int main() {
Bram Moolenaar071d4272004-06-13 20:20:40 +00004308 char buf[10];
4309 strcpy(buf, "abcdefghi");
4310 mch_memmove(buf, buf + 2, 3);
4311 if (strncmp(buf, "ababcf", 6))
4312 exit(1);
4313 strcpy(buf, "abcdefghi");
4314 mch_memmove(buf + 2, buf, 3);
4315 if (strncmp(buf, "cdedef", 6))
4316 exit(1);
4317 exit(0); /* libc version works properly. */
4318}']
4319
Bram Moolenaar446cb832008-06-24 21:56:24 +00004320AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4321 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004322 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 +00004323 [
4324 vim_cv_memmove_handles_overlap=yes
4325 ],[
4326 vim_cv_memmove_handles_overlap=no
4327 ],[
4328 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4329 ])
4330 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004331
Bram Moolenaar446cb832008-06-24 21:56:24 +00004332if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4333 AC_DEFINE(USEMEMMOVE)
4334else
4335 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4336 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004337 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 +00004338 [
4339 vim_cv_bcopy_handles_overlap=yes
4340 ],[
4341 vim_cv_bcopy_handles_overlap=no
4342 ],[
4343 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4344 ])
4345 ])
4346
4347 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4348 AC_DEFINE(USEBCOPY)
4349 else
4350 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4351 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004352 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 +00004353 [
4354 vim_cv_memcpy_handles_overlap=yes
4355 ],[
4356 vim_cv_memcpy_handles_overlap=no
4357 ],[
4358 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4359 ])
4360 ])
4361
4362 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4363 AC_DEFINE(USEMEMCPY)
4364 fi
4365 fi
4366fi
4367
Bram Moolenaar071d4272004-06-13 20:20:40 +00004368
4369dnl Check for multibyte locale functions
4370dnl Find out if _Xsetlocale() is supported by libX11.
4371dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004372if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004373 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004374 libs_save=$LIBS
4375 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4376 CFLAGS="$CFLAGS $X_CFLAGS"
4377
4378 AC_MSG_CHECKING(whether X_LOCALE needed)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004379 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
4380 AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004381 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4382 AC_MSG_RESULT(no))
4383
4384 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004385 AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004386 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4387
Bram Moolenaar071d4272004-06-13 20:20:40 +00004388 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004389 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004390fi
4391
4392dnl Link with xpg4, it is said to make Korean locale working
4393AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4394
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004395dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004396dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004397dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004398dnl -t for typedefs (many ctags have this)
4399dnl -s for static functions (Elvis ctags only?)
4400dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4401dnl -i+m to test for older Exuberant ctags
4402AC_MSG_CHECKING(how to create tags)
4403test -f tags && mv tags tags.save
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004404if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004405 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004406elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004407 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004408elif (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 +01004409 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004410else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004411 TAGPRG="ctags"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004412 (eval etags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
4413 (eval etags -c /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
4414 (eval ctags /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
4415 (eval ctags -t /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
4416 (eval ctags -ts /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
4417 (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
4418 (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 +00004419fi
4420test -f tags.save && mv tags.save tags
4421AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4422
4423dnl Check how we can run man with a section number
4424AC_MSG_CHECKING(how to run man with a section nr)
4425MANDEF="man"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004426(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 +00004427AC_MSG_RESULT($MANDEF)
4428if test "$MANDEF" = "man -s"; then
4429 AC_DEFINE(USEMAN_S)
4430fi
4431
4432dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004433dnl We take care to base this on an empty LIBS: on some systems libelf would be
4434dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4435dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004436AC_MSG_CHECKING(--disable-nls argument)
4437AC_ARG_ENABLE(nls,
4438 [ --disable-nls Don't support NLS (gettext()).], ,
4439 [enable_nls="yes"])
4440
4441if test "$enable_nls" = "yes"; then
4442 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004443
4444 INSTALL_LANGS=install-languages
4445 AC_SUBST(INSTALL_LANGS)
4446 INSTALL_TOOL_LANGS=install-tool-languages
4447 AC_SUBST(INSTALL_TOOL_LANGS)
4448
Bram Moolenaar071d4272004-06-13 20:20:40 +00004449 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4450 AC_MSG_CHECKING([for NLS])
4451 if test -f po/Makefile; then
4452 have_gettext="no"
4453 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004454 olibs=$LIBS
4455 LIBS=""
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004456 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004457 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004458 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004459 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4460 LIBS="-lintl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004461 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004462 [#include <libintl.h>],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004463 [gettext("Test");])],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004464 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4465 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004466 AC_MSG_RESULT([gettext() doesn't work]);
4467 LIBS=$olibs))
4468 else
4469 AC_MSG_RESULT([msgfmt not found - disabled]);
4470 fi
Martin Tournoij7904fa42022-10-04 16:28:45 +01004471 if test $have_gettext = "yes" -a "x$features" != "xtiny"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004472 AC_DEFINE(HAVE_GETTEXT)
4473 MAKEMO=yes
4474 AC_SUBST(MAKEMO)
4475 dnl this was added in GNU gettext 0.10.36
4476 AC_CHECK_FUNCS(bind_textdomain_codeset)
4477 dnl _nl_msg_cat_cntr is required for GNU gettext
4478 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004479 AC_LINK_IFELSE([AC_LANG_PROGRAM(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004480 [#include <libintl.h>
4481 extern int _nl_msg_cat_cntr;],
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004482 [++_nl_msg_cat_cntr;])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004483 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4484 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004485 AC_MSG_CHECKING([if msgfmt supports --desktop])
4486 MSGFMT_DESKTOP=
4487 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004488 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4489 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4490 dnl 0.19.3 is also broken.
4491 AC_MSG_RESULT([broken])
4492 else
4493 AC_MSG_RESULT([yes])
4494 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4495 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004496 else
4497 AC_MSG_RESULT([no])
4498 fi
4499 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004500 fi
4501 else
4502 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4503 fi
4504else
4505 AC_MSG_RESULT(yes)
4506fi
4507
4508dnl Check for dynamic linking loader
4509AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4510if test x${DLL} = xdlfcn.h; then
4511 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4512 AC_MSG_CHECKING([for dlopen()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004513 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004514 extern void* dlopen();
4515 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004516 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004517 AC_MSG_RESULT(yes);
4518 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4519 AC_MSG_RESULT(no);
4520 AC_MSG_CHECKING([for dlopen() in -ldl])
4521 olibs=$LIBS
4522 LIBS="$LIBS -ldl"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004523 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004524 extern void* dlopen();
4525 dlopen();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004526 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004527 AC_MSG_RESULT(yes);
4528 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4529 AC_MSG_RESULT(no);
4530 LIBS=$olibs))
4531 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4532 dnl ick :-)
4533 AC_MSG_CHECKING([for dlsym()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004534 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004535 extern void* dlsym();
4536 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004537 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004538 AC_MSG_RESULT(yes);
4539 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4540 AC_MSG_RESULT(no);
4541 AC_MSG_CHECKING([for dlsym() 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* dlsym();
4546 dlsym();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004547 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004548 AC_MSG_RESULT(yes);
4549 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4550 AC_MSG_RESULT(no);
4551 LIBS=$olibs))
4552elif test x${DLL} = xdl.h; then
4553 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4554 AC_MSG_CHECKING([for shl_load()])
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004555 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004556 extern void* shl_load();
4557 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004558 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004559 AC_MSG_RESULT(yes);
4560 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4561 AC_MSG_RESULT(no);
4562 AC_MSG_CHECKING([for shl_load() in -ldld])
4563 olibs=$LIBS
4564 LIBS="$LIBS -ldld"
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004565 AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
Bram Moolenaar071d4272004-06-13 20:20:40 +00004566 extern void* shl_load();
4567 shl_load();
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004568 ])],
Bram Moolenaar071d4272004-06-13 20:20:40 +00004569 AC_MSG_RESULT(yes);
4570 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4571 AC_MSG_RESULT(no);
4572 LIBS=$olibs))
4573fi
4574AC_CHECK_HEADERS(setjmp.h)
4575
Bram Moolenaard0573012017-10-28 21:11:06 +02004576if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004577 dnl -ldl must come after DynaLoader.a
4578 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4579 LIBS=`echo $LIBS | sed s/-ldl//`
4580 PERL_LIBS="$PERL_LIBS -ldl"
4581 fi
4582fi
4583
Bram Moolenaard0573012017-10-28 21:11:06 +02004584if test "$MACOS_X" = "yes"; then
4585 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004586 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004587 if test "$features" = "tiny"; then
Yee Cheng Chin4314e4f2022-10-08 13:50:05 +01004588 dnl Since no FEAT_CLIPBOARD or FEAT_SOUND, no need for os_macosx.m.
Bram Moolenaard0573012017-10-28 21:11:06 +02004589 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4590 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004591 AC_MSG_RESULT([yes, we need CoreServices])
4592 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004593 else
4594 AC_MSG_RESULT([yes, we need AppKit])
4595 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004596 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004597 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004598 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004599 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004600fi
4601
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004602dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4603dnl it everywhere.
4604if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4605 CFLAGS="$CFLAGS -D_REENTRANT"
4606fi
4607
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004608dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4609dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4610dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004611dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4612dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004613DEPEND_CFLAGS_FILTER=
4614if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004615 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004616 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004617 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004618 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004619 AC_MSG_RESULT(yes)
4620 else
4621 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004622 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004623 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4624 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004625 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004626 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004627 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4628 if test "$gccmajor" -gt "3"; then
Zdenek Dohnal42196982023-01-18 16:09:51 +00004629 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/'`
4630 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 +00004631 AC_MSG_RESULT(yes)
4632 else
4633 AC_MSG_RESULT(no)
4634 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004635fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004636AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004637
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004638dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4639dnl isn't required, but the CFLAGS for some of the libraries we're using
4640dnl include the define. Since the define changes the size of some datatypes
4641dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4642dnl consistent value. It's therefore safest to force the use of the define
4643dnl if it's present in any of the *_CFLAGS variables.
4644AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004645if 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 +01004646 AC_MSG_RESULT(yes)
4647 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4648else
4649 AC_MSG_RESULT(no)
4650fi
4651
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004652dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4653dnl between "-L" and the path that follows.
4654LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4655
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004656dnl link.sh tries to avoid overlinking in a hackish way.
4657dnl At least GNU ld supports --as-needed which provides the same functionality
4658dnl at linker level. Let's use it.
4659AC_MSG_CHECKING(linker --as-needed support)
4660LINK_AS_NEEDED=
4661# Check if linker supports --as-needed and --no-as-needed options
4662if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004663 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4664 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4665 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004666 LINK_AS_NEEDED=yes
4667fi
4668if test "$LINK_AS_NEEDED" = yes; then
4669 AC_MSG_RESULT(yes)
4670else
4671 AC_MSG_RESULT(no)
4672fi
4673AC_SUBST(LINK_AS_NEEDED)
4674
Bram Moolenaar77c19352012-06-13 19:19:41 +02004675# IBM z/OS reset CFLAGS for config.mk
4676if test "$zOSUnix" = "yes"; then
4677 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4678fi
4679
Bram Moolenaar071d4272004-06-13 20:20:40 +00004680dnl write output files
Bram Moolenaar1004b3d2022-06-05 19:51:55 +01004681AC_CONFIG_FILES(auto/config.mk:config.mk.in)
4682AC_OUTPUT
Bram Moolenaar071d4272004-06-13 20:20:40 +00004683
4684dnl vim: set sw=2 tw=78 fo+=l: