blob: a6a926e681f3939fae8a86c6a8a21e55f372ff2f [file] [log] [blame]
Bram Moolenaar3f7d0902016-11-12 21:13:42 +01001dnl configure.ac: autoconf script for Vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
Paul Ollis65745772022-06-05 16:55:54 +01003dnl Process this file with autoconf 2.69 to produce "configure".
4dnl This should also work with other versions of autoconf, but 2.70 and later
5dnl generate lots of hard to fix "obsolete" warnings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7AC_INIT(vim.h)
8AC_CONFIG_HEADER(auto/config.h:config.h.in)
9
10dnl Being able to run configure means the system is Unix (compatible).
11AC_DEFINE(UNIX)
12AC_PROG_MAKE_SET
13
14dnl Checks for programs.
Bram Moolenaar22640082018-04-19 20:39:41 +020015AC_PROG_CC_C99 dnl required by almost everything
Bram Moolenaarc0394412017-04-20 20:20:23 +020016AC_PROG_CPP dnl required by header file checks
17AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
18AC_PROG_FGREP dnl finds working grep -F
19AC_ISC_POSIX dnl required by AC_C_CROSS
20AC_PROG_AWK dnl required for "make html" in ../doc
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22dnl Don't strip if we don't have it
23AC_CHECK_PROG(STRIP, strip, strip, :)
24
Bram Moolenaar325b7a22004-07-05 15:58:32 +000025dnl Check for extension of executables
Bram Moolenaar071d4272004-06-13 20:20:40 +000026AC_EXEEXT
27
Bram Moolenaar446cb832008-06-24 21:56:24 +000028dnl Check for standard headers. We don't use this in Vim but other stuff
29dnl in autoconf needs it, where it uses STDC_HEADERS.
30AC_HEADER_STDC
31AC_HEADER_SYS_WAIT
32
Bram Moolenaar561f8a52018-04-17 22:02:45 +020033dnl Check that the C99 features that Vim uses are supported:
Bram Moolenaar22640082018-04-19 20:39:41 +020034if test x"$ac_cv_prog_cc_c99" != xno; then
35 dnl If the compiler doesn't explicitly support C99, then check
36 dnl for the specific features Vim uses
37
38 AC_TYPE_LONG_LONG_INT
39 if test "$ac_cv_type_long_long_int" = no; then
40 AC_MSG_FAILURE([Compiler does not support long long int])
41 fi
42
43 AC_MSG_CHECKING([if the compiler supports trailing commas])
44 trailing_commas=no
45 AC_TRY_COMPILE([], [
46 enum {
47 one,
48 };],
49 [AC_MSG_RESULT(yes); trailing_commas=yes],
50 [AC_MSG_RESULT(no)])
51 if test "$trailing_commas" = no; then
52 AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
53 fi
54
55 AC_MSG_CHECKING([if the compiler supports C++ comments])
56 slash_comments=no
57 AC_TRY_COMPILE([],
58 [// C++ comments?],
59 [AC_MSG_RESULT(yes); slash_comments=yes],
60 [AC_MSG_RESULT(no)])
61 if test "$slash_comments" = no; then
62 AC_MSG_FAILURE([Compiler does not support C++ comments])
63 fi
64fi
Bram Moolenaar561f8a52018-04-17 22:02:45 +020065
Bram Moolenaar8f1dde52020-06-05 23:16:29 +020066dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
67dnl "compiled" timestamp in :version's output. Attempt to get the formatted
68dnl date using GNU date syntax, BSD date syntax, and finally falling back to
69dnl just using the current time.
70if test -n "$SOURCE_DATE_EPOCH"; then
71 DATE_FMT="%b %d %Y %H:%M:%S"
72 BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT")
73 AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
74 BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
75 AC_SUBST(BUILD_DATE_MSG)
76fi
77
Bram Moolenaarf788a062011-12-14 20:51:25 +010078dnl Check for the flag that fails if stuff are missing.
79
80AC_MSG_CHECKING(--enable-fail-if-missing argument)
81AC_ARG_ENABLE(fail_if_missing,
82 [ --enable-fail-if-missing Fail if dependencies on additional features
83 specified on the command line are missing.],
84 [fail_if_missing="yes"],
85 [fail_if_missing="no"])
86AC_MSG_RESULT($fail_if_missing)
87
Bram Moolenaard2a05492018-07-27 22:35:15 +020088dnl Keep original value to check later.
89with_x_arg="$with_x"
90
Bram Moolenaar071d4272004-06-13 20:20:40 +000091dnl Set default value for CFLAGS if none is defined or it's empty
92if test -z "$CFLAGS"; then
93 CFLAGS="-O"
Bram Moolenaar4d8479b2021-01-31 14:36:06 +010094 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall -Wno-deprecated-declarations"
Bram Moolenaar071d4272004-06-13 20:20:40 +000095fi
96if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000097 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020098 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000099 if test "x$gccversion" = "x"; then
100 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +0200101 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 +0000102 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +0000103 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
104 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
157 AC_CHECKING(for buggy tools)
158 sh ./toolcheck 1>&AC_FD_MSG
159fi
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 Moolenaar595a7be2010-03-10 16:28:12 +0100240
241 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 Moolenaara23ccb82006-02-27 00:08:02 +0000264 AC_TRY_LINK([ ], [ ],
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"
272 AC_TRY_LINK([ ], [ ],
273 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 Moolenaar32466aa2006-02-24 23:53:04 +0000290 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100291 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200292 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200293
294 dnl Assume we don't want X11 unless it was specifically asked for
Bram Moolenaar0b40d082022-03-08 13:32:37 +0000295 dnl (--with-x) or Motif or GTK GUI is used.
296 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 +0200297 with_x=no
298 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000300
Bram Moolenaardb552d602006-03-23 22:59:57 +0000301 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000302 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000303 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000304 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
305 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
306 fi
307
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308else
309 AC_MSG_RESULT(no)
310fi
311
Bram Moolenaar39766a72013-11-03 00:41:00 +0100312dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
313dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100314AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100315
Bram Moolenaar071d4272004-06-13 20:20:40 +0000316AC_SUBST(OS_EXTRA_SRC)
317AC_SUBST(OS_EXTRA_OBJ)
318
319dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
320dnl Only when the directory exists and it wasn't there yet.
321dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000322dnl Skip all of this when cross-compiling.
323if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000324 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000325 have_local_include=''
326 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000327 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
328 --without-local-dir do not search /usr/local for local libraries.], [
329 local_dir="$withval"
330 case "$withval" in
331 */*) ;;
332 no)
333 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200334 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000335 have_local_lib=yes
336 ;;
337 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
338 esac
339 AC_MSG_RESULT($local_dir)
340 ], [
341 local_dir=/usr/local
342 AC_MSG_RESULT(Defaulting to $local_dir)
343 ])
344 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000345 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100346 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
347 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000348 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000349 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000351 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
352 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 +0000353 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000354 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000355 fi
356 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000357 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
358 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 +0000359 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000360 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000361 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362 fi
363fi
364
365AC_MSG_CHECKING(--with-vim-name argument)
366AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
367 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000368 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369AC_SUBST(VIMNAME)
370AC_MSG_CHECKING(--with-ex-name argument)
371AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
372 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
373 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
374AC_SUBST(EXNAME)
375AC_MSG_CHECKING(--with-view-name argument)
376AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
377 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
378 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
379AC_SUBST(VIEWNAME)
380
381AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100382AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
383 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000384 AC_MSG_RESULT(no))
385
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100386if test "X$RUNTIME_GLOBAL" != "X"; then
387 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" }')
388 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
389 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
390fi
391
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392AC_MSG_CHECKING(--with-modified-by argument)
393AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
394 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
395 AC_MSG_RESULT(no))
396
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200397dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398AC_MSG_CHECKING(if character set is EBCDIC)
399AC_TRY_COMPILE([ ],
400[ /* TryCompile function for CharSet.
401 Treat any failure as ASCII for compatibility with existing art.
402 Use compile-time rather than run-time tests for cross-compiler
403 tolerance. */
404#if '0'!=240
405make an error "Character set is not EBCDIC"
406#endif ],
407[ # TryCompile action if true
408cf_cv_ebcdic=yes ],
409[ # TryCompile action if false
410cf_cv_ebcdic=no])
411# end of TryCompile ])
412# end of CacheVal CvEbcdic
413AC_MSG_RESULT($cf_cv_ebcdic)
414case "$cf_cv_ebcdic" in #(vi
415 yes) AC_DEFINE(EBCDIC)
416 line_break='"\\n"'
417 ;;
418 *) line_break='"\\012"';;
419esac
420AC_SUBST(line_break)
421
422if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200423dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200424AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000425case $vim_cv_uname_output in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200426 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 dnl If using cc the environment variable _CC_CCMODE must be
428 dnl set to "1", so that some compiler extensions are enabled.
429 dnl If using c89 the environment variable is named _CC_C89MODE.
430 dnl Note: compile with c89 never tested.
431 if test "$CC" = "cc"; then
432 ccm="$_CC_CCMODE"
433 ccn="CC"
434 else
435 if test "$CC" = "c89"; then
436 ccm="$_CC_C89MODE"
437 ccn="C89"
438 else
439 ccm=1
440 fi
441 fi
442 if test "$ccm" != "1"; then
443 echo ""
444 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200445 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200446 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447 echo " Do:"
448 echo " export _CC_${ccn}MODE=1"
449 echo " and then call configure again."
450 echo "------------------------------------------"
451 exit 1
452 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200453 # Set CFLAGS for configure process.
454 # This will be reset later for config.mk.
455 # Use haltonmsg to force error for missing H files.
456 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
457 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458 AC_MSG_RESULT(yes)
459 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200460 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461 AC_MSG_RESULT(no)
462 ;;
463esac
464fi
465
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200466dnl Set QUOTESED. Needs additional backslashes on zOS
467if test "$zOSUnix" = "yes"; then
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100468 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200469else
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100470 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200471fi
472AC_SUBST(QUOTESED)
473
474
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200475dnl Link with -lsmack for Smack stuff; if not found
476AC_MSG_CHECKING(--disable-smack argument)
477AC_ARG_ENABLE(smack,
478 [ --disable-smack Do not check for Smack support.],
479 , enable_smack="yes")
480if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200481 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200482 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200483else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200484 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200485fi
486if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200487 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
488fi
489if test "$enable_smack" = "yes"; then
490 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
491 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
492 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200493 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200494fi
495if test "$enable_smack" = "yes"; then
496 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200497 [LIBS="$LIBS -lattr"
498 found_smack="yes"
499 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000500fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200502dnl When smack was found don't search for SELinux
503if test "x$found_smack" = "x"; then
504 dnl Link with -lselinux for SELinux stuff; if not found
505 AC_MSG_CHECKING(--disable-selinux argument)
506 AC_ARG_ENABLE(selinux,
507 [ --disable-selinux Do not check for SELinux support.],
508 , enable_selinux="yes")
509 if test "$enable_selinux" = "yes"; then
510 AC_MSG_RESULT(no)
511 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100512 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200513 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100514 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200515 else
516 AC_MSG_RESULT(yes)
517 fi
518fi
519
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520dnl Check user requested features.
521
522AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200523AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000524 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100525 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526
527dovimdiff=""
528dogvimdiff=""
529case "$features" in
530 tiny) AC_DEFINE(FEAT_TINY) ;;
531 small) AC_DEFINE(FEAT_SMALL) ;;
532 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
533 dogvimdiff="installgvimdiff" ;;
534 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
535 dogvimdiff="installgvimdiff" ;;
536 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
537 dogvimdiff="installgvimdiff" ;;
538 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
539esac
540
541AC_SUBST(dovimdiff)
542AC_SUBST(dogvimdiff)
543
Bram Moolenaar12471262022-01-18 11:11:25 +0000544if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
545 has_eval=no
546else
547 has_eval=yes
548fi
549
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550AC_MSG_CHECKING(--with-compiledby argument)
551AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
552 compiledby="$withval"; AC_MSG_RESULT($withval),
553 compiledby=""; AC_MSG_RESULT(no))
554AC_SUBST(compiledby)
555
556AC_MSG_CHECKING(--disable-xsmp argument)
557AC_ARG_ENABLE(xsmp,
558 [ --disable-xsmp Disable XSMP session management],
559 , enable_xsmp="yes")
560
561if test "$enable_xsmp" = "yes"; then
562 AC_MSG_RESULT(no)
563 AC_MSG_CHECKING(--disable-xsmp-interact argument)
564 AC_ARG_ENABLE(xsmp-interact,
565 [ --disable-xsmp-interact Disable XSMP interaction],
566 , enable_xsmp_interact="yes")
567 if test "$enable_xsmp_interact" = "yes"; then
568 AC_MSG_RESULT(no)
569 AC_DEFINE(USE_XSMP_INTERACT)
570 else
571 AC_MSG_RESULT(yes)
572 fi
573else
574 AC_MSG_RESULT(yes)
575fi
576
Bram Moolenaar67ffb412022-01-08 13:36:57 +0000577AC_MSG_CHECKING([diff feature])
578if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
579 AC_MSG_RESULT([disabled in $features version])
580else
581 AC_MSG_RESULT(enabled)
582 AC_DEFINE(FEAT_DIFF)
583 XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
584 AC_SUBST(XDIFF_OBJS_USED)
585fi
586
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200587dnl Check for Lua feature.
588AC_MSG_CHECKING(--enable-luainterp argument)
589AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200590 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200591 [enable_luainterp="no"])
592AC_MSG_RESULT($enable_luainterp)
593
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200594if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +0000595 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100596 AC_MSG_ERROR([cannot use Lua with tiny or small features])
597 fi
598
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200599 dnl -- find the lua executable
600 AC_SUBST(vi_cv_path_lua)
601
602 AC_MSG_CHECKING(--with-lua-prefix argument)
603 AC_ARG_WITH(lua_prefix,
604 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
605 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200606 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200607
608 if test "X$with_lua_prefix" != "X"; then
609 vi_cv_path_lua_pfx="$with_lua_prefix"
610 else
611 AC_MSG_CHECKING(LUA_PREFIX environment var)
612 if test "X$LUA_PREFIX" != "X"; then
613 AC_MSG_RESULT("$LUA_PREFIX")
614 vi_cv_path_lua_pfx="$LUA_PREFIX"
615 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200616 AC_MSG_RESULT([not set, default to /usr])
617 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200618 fi
619 fi
620
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200621 AC_MSG_CHECKING(--with-luajit)
622 AC_ARG_WITH(luajit,
623 [ --with-luajit Link with LuaJIT instead of Lua.],
624 [vi_cv_with_luajit="$withval"],
625 [vi_cv_with_luajit="no"])
626 AC_MSG_RESULT($vi_cv_with_luajit)
627
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200628 LUA_INC=
629 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200630 if test "x$vi_cv_with_luajit" != "xno"; then
631 dnl -- try to find LuaJIT executable
632 AC_PATH_PROG(vi_cv_path_luajit, luajit)
633 if test "X$vi_cv_path_luajit" != "X"; then
634 dnl -- find LuaJIT version
635 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100636 [ 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 +0200637 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
638 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
639 vi_cv_path_lua="$vi_cv_path_luajit"
640 vi_cv_version_lua="$vi_cv_version_lua_luajit"
641 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200642 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200643 dnl -- try to find Lua executable
644 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
645 if test "X$vi_cv_path_plain_lua" != "X"; then
646 dnl -- find Lua version
647 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
648 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
649 fi
650 vi_cv_path_lua="$vi_cv_path_plain_lua"
651 vi_cv_version_lua="$vi_cv_version_plain_lua"
652 fi
653 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
654 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 +0100655 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200656 AC_MSG_RESULT(yes)
657 LUA_INC=/luajit-$vi_cv_version_luajit
658 fi
659 fi
660 if test "X$LUA_INC" = "X"; then
661 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100662 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200663 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200664 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200665 AC_MSG_RESULT(no)
666 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 +0100667 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 AC_MSG_RESULT(yes)
669 LUA_INC=/lua$vi_cv_version_lua
670 else
671 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200672
673 # Detect moonjit:
674 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
675 lua_suf=/moonjit-2.3
676 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200677 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200678 if test -d "$dir" ; then
Bram Moolenaara79a8942020-12-17 20:50:25 +0100679 lua_suf=`basename "$dir"`
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200680 lua_suf="/$lua_suf"
681 break
682 fi
683 done
684 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
685 if test -f "$inc_path$lua_suf/lua.h"; then
686 AC_MSG_RESULT(yes)
687 LUA_INC=$lua_suf
688 else
689 AC_MSG_RESULT(no)
690 vi_cv_path_lua_pfx=
691 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200692 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200693 fi
694 fi
695 fi
696
697 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200698 if test "x$vi_cv_with_luajit" != "xno"; then
699 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
700 if test "X$multiarch" != "X"; then
701 lib_multiarch="lib/${multiarch}"
702 else
703 lib_multiarch="lib"
704 fi
705 if test "X$vi_cv_version_lua" = "X"; then
706 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
707 else
708 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
709 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200710 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200711 if test "X$LUA_INC" != "X"; then
712 dnl Test alternate location using version
713 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
714 else
715 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
716 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200717 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200718 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200719 lua_ok="yes"
720 else
721 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
722 libs_save=$LIBS
723 LIBS="$LIBS $LUA_LIBS"
724 AC_TRY_LINK(,[ ],
725 AC_MSG_RESULT(yes); lua_ok="yes",
726 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
727 LIBS=$libs_save
728 fi
729 if test "x$lua_ok" = "xyes"; then
730 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
731 LUA_SRC="if_lua.c"
732 LUA_OBJ="objects/if_lua.o"
733 LUA_PRO="if_lua.pro"
734 AC_DEFINE(FEAT_LUA)
735 fi
736 if test "$enable_luainterp" = "dynamic"; then
737 if test "x$vi_cv_with_luajit" != "xno"; then
738 luajit="jit"
739 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200740 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
741 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
742 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200743 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200744 ext="dylib"
745 indexes=""
746 else
747 ext="so"
748 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
749 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
750 if test "X$multiarch" != "X"; then
751 lib_multiarch="lib/${multiarch}"
752 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200753 fi
754 dnl Determine the sover for the current version, but fallback to
755 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200756 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200757 for subdir in "${lib_multiarch}" lib64 lib; do
758 if test -z "$subdir"; then
759 continue
760 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200761 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
762 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
763 for i in $indexes ""; do
764 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200765 sover2="$i"
766 break 3
767 fi
768 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100769 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200770 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200771 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200772 if test "X$sover" = "X"; then
773 AC_MSG_RESULT(no)
774 lua_ok="no"
775 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
776 else
777 AC_MSG_RESULT(yes)
778 lua_ok="yes"
779 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
780 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200781 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200782 AC_DEFINE(DYNAMIC_LUA)
783 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200784 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200785 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200786 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200787 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000788 test "$vim_cv_uname_m_output" = "x86_64"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200789 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
790 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
791 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200792 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200793 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100794 AC_MSG_ERROR([could not configure lua])
795 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200796 AC_SUBST(LUA_SRC)
797 AC_SUBST(LUA_OBJ)
798 AC_SUBST(LUA_PRO)
799 AC_SUBST(LUA_LIBS)
800 AC_SUBST(LUA_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +0000801 AC_SUBST(LUA_CFLAGS_EXTRA)
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200802fi
803
804
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000805dnl Check for MzScheme feature.
806AC_MSG_CHECKING(--enable-mzschemeinterp argument)
807AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200808 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000809 [enable_mzschemeinterp="no"])
810AC_MSG_RESULT($enable_mzschemeinterp)
811
812if test "$enable_mzschemeinterp" = "yes"; then
813 dnl -- find the mzscheme executable
814 AC_SUBST(vi_cv_path_mzscheme)
815
816 AC_MSG_CHECKING(--with-plthome argument)
817 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000818 [ --with-plthome=PLTHOME Use PLTHOME.],
819 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000820 with_plthome="";AC_MSG_RESULT("no"))
821
822 if test "X$with_plthome" != "X"; then
823 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100824 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000825 else
826 AC_MSG_CHECKING(PLTHOME environment var)
827 if test "X$PLTHOME" != "X"; then
828 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000829 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100830 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000831 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000832 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000833 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000834 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000835
836 dnl resolve symbolic link, the executable is often elsewhere and there
837 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000838 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000839 lsout=`ls -l $vi_cv_path_mzscheme`
840 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
841 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
842 fi
843 fi
844
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000845 if test "X$vi_cv_path_mzscheme" != "X"; then
846 dnl -- find where MzScheme thinks it was installed
847 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000848 dnl different versions of MzScheme differ in command line processing
849 dnl use universal approach
850 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000851 (build-path (call-with-values \
852 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000853 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
854 dnl Remove a trailing slash
855 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
856 sed -e 's+/$++'` ])
857 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000858 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000859 fi
860 fi
861
862 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100863 AC_MSG_CHECKING(for racket include directory)
864 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
865 if test "X$SCHEME_INC" != "X"; then
866 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000867 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100868 AC_MSG_RESULT(not found)
869 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
870 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
871 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000872 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000873 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000874 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100875 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
876 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000877 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100878 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000879 else
880 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100881 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
882 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100883 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100884 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100885 else
886 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100887 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
888 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100889 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100890 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100891 else
892 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100893 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
894 if test -f /usr/include/racket/scheme.h; then
895 AC_MSG_RESULT(yes)
896 SCHEME_INC=/usr/include/racket
897 else
898 AC_MSG_RESULT(no)
899 vi_cv_path_mzscheme_pfx=
900 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100901 fi
902 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000903 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000904 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000905 fi
906 fi
907
908 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100909
910 AC_MSG_CHECKING(for racket lib directory)
911 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
912 if test "X$SCHEME_LIB" != "X"; then
913 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000914 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100915 AC_MSG_RESULT(not found)
916 fi
917
918 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
919 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200920 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100921 MZSCHEME_LIBS="-framework Racket"
922 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
923 elif test -f "${path}/libmzscheme3m.a"; then
924 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
925 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
926 elif test -f "${path}/libracket3m.a"; then
927 MZSCHEME_LIBS="${path}/libracket3m.a"
Bram Moolenaar588d2412020-10-03 14:24:19 +0200928 if test -f "${path}/librktio.a"; then
929 MZSCHEME_LIBS="${MZSCHEME_LIBS} ${path}/librktio.a"
930 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100931 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
932 elif test -f "${path}/libracket.a"; then
933 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
934 elif test -f "${path}/libmzscheme.a"; then
935 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
936 else
937 dnl Using shared objects
938 if test -f "${path}/libmzscheme3m.so"; then
939 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
940 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
941 elif test -f "${path}/libracket3m.so"; then
942 MZSCHEME_LIBS="-L${path} -lracket3m"
943 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
944 elif test -f "${path}/libracket.so"; then
945 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
946 else
947 dnl try next until last
948 if test "$path" != "$SCHEME_LIB"; then
949 continue
950 fi
951 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
952 fi
953 if test "$GCC" = yes; then
954 dnl Make Vim remember the path to the library. For when it's not in
955 dnl $LD_LIBRARY_PATH.
956 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +0000957 elif test "$vim_cv_uname_output" = SunOS &&
958 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100959 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
960 fi
961 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000962 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100963 if test "X$MZSCHEME_LIBS" != "X"; then
964 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000965 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100966 done
967
968 AC_MSG_CHECKING([if racket requires -pthread])
969 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
970 AC_MSG_RESULT(yes)
971 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
972 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
973 else
974 AC_MSG_RESULT(no)
975 fi
976
977 AC_MSG_CHECKING(for racket config directory)
978 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
979 if test "X$SCHEME_CONFIGDIR" != "X"; then
980 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
981 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
982 else
983 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000984 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100985
986 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100987 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))))'`
988 if test "X$SCHEME_COLLECTS" = "X"; then
989 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
990 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100991 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100992 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
993 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100994 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100995 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
996 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
997 else
998 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
999 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
1000 fi
Bram Moolenaar75676462013-01-30 14:55:42 +01001001 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001002 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001003 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +00001004 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001005 if test "X$SCHEME_COLLECTS" != "X" ; then
1006 AC_MSG_RESULT(${SCHEME_COLLECTS})
1007 else
1008 AC_MSG_RESULT(not found)
1009 fi
1010
1011 AC_MSG_CHECKING(for mzscheme_base.c)
1012 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001013 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001014 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1015 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001016 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001017 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001018 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +01001019 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
1020 MZSCHEME_MOD="++lib scheme/base"
1021 else
1022 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
1023 MZSCHEME_EXTRA="mzscheme_base.c"
1024 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
1025 MZSCHEME_MOD=""
1026 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +01001027 fi
1028 fi
1029 if test "X$MZSCHEME_EXTRA" != "X" ; then
1030 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001031 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001032 AC_MSG_RESULT(needed)
1033 else
1034 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001035 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001036
Bram Moolenaar9e902192013-07-17 18:58:11 +02001037 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
1038 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
1039
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001040 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +01001041 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +02001042
1043 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1044 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1045 cflags_save=$CFLAGS
1046 libs_save=$LIBS
1047 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1048 LIBS="$LIBS $MZSCHEME_LIBS"
1049 AC_TRY_LINK(,[ ],
1050 AC_MSG_RESULT(yes); mzs_ok=yes,
1051 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1052 CFLAGS=$cflags_save
1053 LIBS=$libs_save
1054 if test $mzs_ok = yes; then
1055 MZSCHEME_SRC="if_mzsch.c"
1056 MZSCHEME_OBJ="objects/if_mzsch.o"
1057 MZSCHEME_PRO="if_mzsch.pro"
1058 AC_DEFINE(FEAT_MZSCHEME)
1059 else
1060 MZSCHEME_CFLAGS=
1061 MZSCHEME_LIBS=
1062 MZSCHEME_EXTRA=
1063 MZSCHEME_MZC=
1064 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001065 fi
1066 AC_SUBST(MZSCHEME_SRC)
1067 AC_SUBST(MZSCHEME_OBJ)
1068 AC_SUBST(MZSCHEME_PRO)
1069 AC_SUBST(MZSCHEME_LIBS)
1070 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001071 AC_SUBST(MZSCHEME_EXTRA)
1072 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001073fi
1074
1075
Bram Moolenaar071d4272004-06-13 20:20:40 +00001076AC_MSG_CHECKING(--enable-perlinterp argument)
1077AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001078 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001079 [enable_perlinterp="no"])
1080AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001081if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001082 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001083 AC_MSG_ERROR([cannot use Perl with tiny or small features])
1084 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085 AC_SUBST(vi_cv_path_perl)
1086 AC_PATH_PROG(vi_cv_path_perl, perl)
1087 if test "X$vi_cv_path_perl" != "X"; then
1088 AC_MSG_CHECKING(Perl version)
1089 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1090 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001091 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001092 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1093 badthreads=no
1094 else
1095 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1096 eval `$vi_cv_path_perl -V:use5005threads`
1097 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1098 badthreads=no
1099 else
1100 badthreads=yes
1101 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1102 fi
1103 else
1104 badthreads=yes
1105 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1106 fi
1107 fi
1108 if test $badthreads = no; then
1109 AC_MSG_RESULT(OK)
1110 eval `$vi_cv_path_perl -V:shrpenv`
1111 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1112 shrpenv=""
1113 fi
1114 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1115 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001116 vi_cv_perl_extutils=unknown_perl_extutils_path
1117 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1118 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1119 if test -f "$xsubpp_path"; then
1120 vi_cv_perl_xsubpp="$xsubpp_path"
1121 fi
1122 done
1123 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001125 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001126 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001127 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001128 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001129 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1130 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001131 -e 's/-pipe //' \
1132 -e 's/-W[[^ ]]*//g' \
1133 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1135 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1136 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1137 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1138 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1139 dnl a test in configure may fail because of that.
1140 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1141 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1142
1143 dnl check that compiling a simple program still works with the flags
1144 dnl added for Perl.
1145 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1146 cflags_save=$CFLAGS
1147 libs_save=$LIBS
1148 ldflags_save=$LDFLAGS
1149 CFLAGS="$CFLAGS $perlcppflags"
1150 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001151 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152 LDFLAGS="$perlldflags $LDFLAGS"
1153 AC_TRY_LINK(,[ ],
1154 AC_MSG_RESULT(yes); perl_ok=yes,
1155 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1156 CFLAGS=$cflags_save
1157 LIBS=$libs_save
1158 LDFLAGS=$ldflags_save
1159 if test $perl_ok = yes; then
1160 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001161 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001162 fi
1163 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001164 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001165 LDFLAGS="$perlldflags $LDFLAGS"
1166 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001167 fi
1168 PERL_LIBS=$perllibs
1169 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1170 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1171 PERL_PRO="if_perl.pro if_perlsfio.pro"
1172 AC_DEFINE(FEAT_PERL)
1173 fi
1174 fi
1175 else
1176 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1177 fi
1178 fi
1179
Bram Moolenaard0573012017-10-28 21:11:06 +02001180 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001181 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182 dir=/System/Library/Perl
1183 darwindir=$dir/darwin
1184 if test -d $darwindir; then
1185 PERL=/usr/bin/perl
1186 else
1187 dnl Mac OS X 10.3
1188 dir=/System/Library/Perl/5.8.1
1189 darwindir=$dir/darwin-thread-multi-2level
1190 if test -d $darwindir; then
1191 PERL=/usr/bin/perl
1192 fi
1193 fi
1194 if test -n "$PERL"; then
1195 PERL_DIR="$dir"
1196 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1197 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1198 PERL_LIBS="-L$darwindir/CORE -lperl"
1199 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001200 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1201 dnl be included if requested by passing --with-mac-arch to
1202 dnl configure, so strip these flags first (if present)
1203 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1204 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 +00001205 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001206 if test "$enable_perlinterp" = "dynamic"; then
1207 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1208 AC_DEFINE(DYNAMIC_PERL)
1209 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1210 fi
1211 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001212
1213 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1214 AC_MSG_ERROR([could not configure perl])
1215 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216fi
1217AC_SUBST(shrpenv)
1218AC_SUBST(PERL_SRC)
1219AC_SUBST(PERL_OBJ)
1220AC_SUBST(PERL_PRO)
1221AC_SUBST(PERL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001222AC_SUBST(PERL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001223AC_SUBST(PERL_LIBS)
1224
1225AC_MSG_CHECKING(--enable-pythoninterp argument)
1226AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001227 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001228 [enable_pythoninterp="no"])
1229AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001230if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001231 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001232 AC_MSG_ERROR([cannot use Python with tiny or small features])
1233 fi
1234
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001236 AC_MSG_CHECKING(--with-python-command argument)
1237 AC_SUBST(vi_cv_path_python)
1238 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1239 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1240 AC_MSG_RESULT(no))
1241
1242 if test "X$vi_cv_path_python" = "X"; then
1243 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1244 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001245 if test "X$vi_cv_path_python" != "X"; then
1246
1247 dnl -- get its version number
1248 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1249 [[vi_cv_var_python_version=`
1250 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1251 ]])
1252
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001253 dnl -- it must be at least version 2.3
1254 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001256 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001257 then
1258 AC_MSG_RESULT(yep)
1259
1260 dnl -- find where python thinks it was installed
1261 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1262 [ vi_cv_path_python_pfx=`
1263 ${vi_cv_path_python} -c \
1264 "import sys; print sys.prefix"` ])
1265
1266 dnl -- and where it thinks it runs
1267 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1268 [ vi_cv_path_python_epfx=`
1269 ${vi_cv_path_python} -c \
1270 "import sys; print sys.exec_prefix"` ])
1271
1272 dnl -- python's internal library path
1273
1274 AC_CACHE_VAL(vi_cv_path_pythonpath,
1275 [ vi_cv_path_pythonpath=`
1276 unset PYTHONPATH;
1277 ${vi_cv_path_python} -c \
1278 "import sys, string; print string.join(sys.path,':')"` ])
1279
1280 dnl -- where the Python implementation library archives are
1281
1282 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001283 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001284 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285
1286 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1287 [
1288 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001289 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1290 if test -d "$d" && test -f "$d/config.c"; then
1291 vi_cv_path_python_conf="$d"
1292 else
1293 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1294 for subdir in lib64 lib share; do
1295 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1296 if test -d "$d" && test -f "$d/config.c"; then
1297 vi_cv_path_python_conf="$d"
1298 fi
1299 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001301 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001302 ])
1303
1304 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1305
1306 if test "X$PYTHON_CONFDIR" = "X"; then
1307 AC_MSG_RESULT([can't find it!])
1308 else
1309
1310 dnl -- we need to examine Python's config/Makefile too
1311 dnl see what the interpreter is built from
1312 AC_CACHE_VAL(vi_cv_path_python_plibs,
1313 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001314 pwd=`pwd`
1315 tmp_mkf="$pwd/config-PyMake$$"
1316 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001317__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001318 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001319 @echo "python_LIBS='$(LIBS)'"
1320 @echo "python_SYSLIBS='$(SYSLIBS)'"
1321 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001322 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001323 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001324 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1325 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1326 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327eof
1328 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001329 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1330 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001331 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1333 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001334 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1335 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1336 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001337 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001338 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001339 dnl -- Check if the path contained in python_LINKFORSHARED is
1340 dnl usable for vim build. If not, make and try other
1341 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001342 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001343 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1344 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1345 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1346 dnl -- The path looks relative. Guess the absolute one using
1347 dnl the prefix and try that.
1348 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1349 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1350 dnl -- A last resort.
1351 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1352 dnl -- No check is done. The last word is left to the
1353 dnl "sanity" test on link flags that follows shortly.
1354 fi
1355 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1356 fi
1357 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001358 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 +00001359 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1360 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1361 fi
1362 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001363 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001364 [
1365 if test "X$python_DLLLIBRARY" != "X"; then
1366 vi_cv_dll_name_python="$python_DLLLIBRARY"
1367 else
1368 vi_cv_dll_name_python="$python_INSTSONAME"
1369 fi
1370 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001371
1372 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1373 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001374 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001376 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 +00001377 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001378 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001379 dnl Define PYTHON_HOME if --with-python-config-dir was used
1380 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1381
1382 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001383 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001384 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001385
1386 dnl On FreeBSD linking with "-pthread" is required to use threads.
1387 dnl _THREAD_SAFE must be used for compiling then.
1388 dnl The "-pthread" is added to $LIBS, so that the following check for
1389 dnl sigaltstack() will look in libc_r (it's there in libc!).
1390 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1391 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1392 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1393 AC_MSG_CHECKING([if -pthread should be used])
1394 threadsafe_flag=
1395 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001396 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001397 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001398 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001399 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001400 threadsafe_flag="-D_THREAD_SAFE"
1401 thread_lib="-pthread"
1402 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001403 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001404 threadsafe_flag="-pthreads"
1405 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001406 fi
1407 libs_save_old=$LIBS
1408 if test -n "$threadsafe_flag"; then
1409 cflags_save=$CFLAGS
1410 CFLAGS="$CFLAGS $threadsafe_flag"
1411 LIBS="$LIBS $thread_lib"
1412 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001413 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001414 AC_MSG_RESULT(no); LIBS=$libs_save_old
1415 )
1416 CFLAGS=$cflags_save
1417 else
1418 AC_MSG_RESULT(no)
1419 fi
1420
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001421 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001422 dnl added for Python.
1423 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1424 cflags_save=$CFLAGS
1425 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001426 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001427 LIBS="$LIBS $PYTHON_LIBS"
1428 AC_TRY_LINK(,[ ],
1429 AC_MSG_RESULT(yes); python_ok=yes,
1430 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1431 CFLAGS=$cflags_save
1432 LIBS=$libs_save
1433 if test $python_ok = yes; then
1434 AC_DEFINE(FEAT_PYTHON)
1435 else
1436 LIBS=$libs_save_old
1437 PYTHON_SRC=
1438 PYTHON_OBJ=
1439 PYTHON_LIBS=
1440 PYTHON_CFLAGS=
1441 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001442 fi
1443 else
1444 AC_MSG_RESULT(too old)
1445 fi
1446 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001447
1448 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1449 AC_MSG_ERROR([could not configure python])
1450 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001451fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001452
Bram Moolenaar071d4272004-06-13 20:20:40 +00001453AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001454AC_SUBST(PYTHON_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001455AC_SUBST(PYTHON_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001456AC_SUBST(PYTHON_SRC)
1457AC_SUBST(PYTHON_OBJ)
1458
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001459
1460AC_MSG_CHECKING(--enable-python3interp argument)
1461AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001462 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001463 [enable_python3interp="no"])
1464AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001465if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001466 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001467 AC_MSG_ERROR([cannot use Python with tiny or small features])
1468 fi
1469
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001470 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001471 AC_MSG_CHECKING(--with-python3-command argument)
1472 AC_SUBST(vi_cv_path_python3)
1473 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1474 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1475 AC_MSG_RESULT(no))
1476
1477 if test "X$vi_cv_path_python3" = "X"; then
1478 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1479 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001480 if test "X$vi_cv_path_python3" != "X"; then
1481
1482 dnl -- get its version number
1483 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1484 [[vi_cv_var_python3_version=`
Bram Moolenaar23c01922021-05-21 11:43:58 +02001485 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001486 ]])
1487
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001488 dnl -- it must be at least version 3
1489 AC_MSG_CHECKING(Python is 3.0 or better)
1490 if ${vi_cv_path_python3} -c \
1491 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1492 then
1493 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001494
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001495 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1496 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001497 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001498 vi_cv_var_python3_abiflags=
1499 if ${vi_cv_path_python3} -c \
1500 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1501 then
1502 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1503 "import sys; print(sys.abiflags)"`
1504 fi ])
1505
1506 dnl -- find where python3 thinks it was installed
1507 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1508 [ vi_cv_path_python3_pfx=`
1509 ${vi_cv_path_python3} -c \
1510 "import sys; print(sys.prefix)"` ])
1511
1512 dnl -- and where it thinks it runs
1513 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1514 [ vi_cv_path_python3_epfx=`
1515 ${vi_cv_path_python3} -c \
1516 "import sys; print(sys.exec_prefix)"` ])
1517
1518 dnl -- python3's internal library path
1519
1520 AC_CACHE_VAL(vi_cv_path_python3path,
1521 [ vi_cv_path_python3path=`
1522 unset PYTHONPATH;
1523 ${vi_cv_path_python3} -c \
1524 "import sys, string; print(':'.join(sys.path))"` ])
1525
1526 dnl -- where the Python implementation library archives are
1527
1528 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001529 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001530 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001531
1532 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1533 [
1534 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001535 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001536 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1537 if test "x$d" = "x"; then
1538 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1539 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001540 if test -d "$d" && test -f "$d/config.c"; then
1541 vi_cv_path_python3_conf="$d"
1542 else
1543 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1544 for subdir in lib64 lib share; do
1545 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1546 if test -d "$d" && test -f "$d/config.c"; then
1547 vi_cv_path_python3_conf="$d"
1548 fi
1549 done
1550 done
1551 fi
1552 ])
1553
1554 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1555
1556 if test "X$PYTHON3_CONFDIR" = "X"; then
1557 AC_MSG_RESULT([can't find it!])
1558 else
1559
1560 dnl -- we need to examine Python's config/Makefile too
1561 dnl see what the interpreter is built from
1562 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1563 [
1564 pwd=`pwd`
1565 tmp_mkf="$pwd/config-PyMake$$"
1566 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001567__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001568 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001569 @echo "python3_LIBS='$(LIBS)'"
1570 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001571 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001572 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001573eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001574 dnl -- delete the lines from make about Entering/Leaving directory
1575 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1576 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001577 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 +02001578 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1579 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1580 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1581 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1582 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001583 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001584 [
1585 if test "X$python3_DLLLIBRARY" != "X"; then
1586 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1587 else
1588 vi_cv_dll_name_python3="$python3_INSTSONAME"
1589 fi
1590 ])
1591
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001592 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1593 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001594 PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001595 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001596 PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001597 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001598 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001599 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1600 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1601 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001602 PYTHON3_SRC="if_python3.c"
1603 PYTHON3_OBJ="objects/if_python3.o"
1604
1605 dnl On FreeBSD linking with "-pthread" is required to use threads.
1606 dnl _THREAD_SAFE must be used for compiling then.
1607 dnl The "-pthread" is added to $LIBS, so that the following check for
1608 dnl sigaltstack() will look in libc_r (it's there in libc!).
1609 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1610 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1611 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1612 AC_MSG_CHECKING([if -pthread should be used])
1613 threadsafe_flag=
1614 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001615 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001616 if test "$vim_cv_uname_output" != Darwin; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001617 test "$GCC" = yes && threadsafe_flag="-pthread"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001618 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001619 threadsafe_flag="-D_THREAD_SAFE"
1620 thread_lib="-pthread"
1621 fi
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001622 if test "$vim_cv_uname_output" = SunOS; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001623 threadsafe_flag="-pthreads"
1624 fi
1625 fi
1626 libs_save_old=$LIBS
1627 if test -n "$threadsafe_flag"; then
1628 cflags_save=$CFLAGS
1629 CFLAGS="$CFLAGS $threadsafe_flag"
1630 LIBS="$LIBS $thread_lib"
1631 AC_TRY_LINK(,[ ],
1632 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1633 AC_MSG_RESULT(no); LIBS=$libs_save_old
1634 )
1635 CFLAGS=$cflags_save
1636 else
1637 AC_MSG_RESULT(no)
1638 fi
1639
1640 dnl check that compiling a simple program still works with the flags
1641 dnl added for Python.
1642 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1643 cflags_save=$CFLAGS
1644 libs_save=$LIBS
1645 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1646 LIBS="$LIBS $PYTHON3_LIBS"
1647 AC_TRY_LINK(,[ ],
1648 AC_MSG_RESULT(yes); python3_ok=yes,
1649 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1650 CFLAGS=$cflags_save
1651 LIBS=$libs_save
1652 if test "$python3_ok" = yes; then
1653 AC_DEFINE(FEAT_PYTHON3)
1654 else
1655 LIBS=$libs_save_old
1656 PYTHON3_SRC=
1657 PYTHON3_OBJ=
1658 PYTHON3_LIBS=
1659 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001660 fi
1661 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001662 else
1663 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001664 fi
1665 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001666 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1667 AC_MSG_ERROR([could not configure python3])
1668 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001669fi
1670
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001671AC_SUBST(PYTHON3_LIBS)
1672AC_SUBST(PYTHON3_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001673AC_SUBST(PYTHON3_CFLAGS_EXTRA)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001674AC_SUBST(PYTHON3_SRC)
1675AC_SUBST(PYTHON3_OBJ)
1676
1677dnl if python2.x and python3.x are enabled one can only link in code
1678dnl with dlopen(), dlsym(), dlclose()
1679if test "$python_ok" = yes && test "$python3_ok" = yes; then
1680 AC_DEFINE(DYNAMIC_PYTHON)
1681 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001682 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001683 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001684 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001685 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001686 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001687 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001688 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001689 #include <dlfcn.h>
1690 /* If this program fails, then RTLD_GLOBAL is needed.
1691 * RTLD_GLOBAL will be used and then it is not possible to
1692 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001693 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001694 */
1695
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001696 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001697 {
1698 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001699 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001700 if (pylib != 0)
1701 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001702 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001703 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1704 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1705 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001706 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001707 (*init)();
1708 needed = (*simple)("import termios") == -1;
1709 (*final)();
1710 dlclose(pylib);
1711 }
1712 return !needed;
1713 }
1714
1715 int main(int argc, char** argv)
1716 {
1717 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001718 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001719 not_needed = 1;
1720 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001721 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001722 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001723
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001724 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001725 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001726
1727 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1728 cflags_save=$CFLAGS
1729 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001730 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001731 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001732 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001733 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001734 #include <dlfcn.h>
1735 #include <wchar.h>
1736 /* If this program fails, then RTLD_GLOBAL is needed.
1737 * RTLD_GLOBAL will be used and then it is not possible to
1738 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001739 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001740 */
1741
1742 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1743 {
1744 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001745 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001746 if (pylib != 0)
1747 {
1748 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1749 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1750 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1751 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1752 (*pfx)(prefix);
1753 (*init)();
1754 needed = (*simple)("import termios") == -1;
1755 (*final)();
1756 dlclose(pylib);
1757 }
1758 return !needed;
1759 }
1760
1761 int main(int argc, char** argv)
1762 {
1763 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001764 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001765 not_needed = 1;
1766 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001767 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001768 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1769
1770 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001771 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001772
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001773 PYTHON_SRC="if_python.c"
1774 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001775 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001776 PYTHON_LIBS=
1777 PYTHON3_SRC="if_python3.c"
1778 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001779 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001780 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001781elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1782 AC_DEFINE(DYNAMIC_PYTHON)
1783 PYTHON_SRC="if_python.c"
1784 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001785 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001786 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001787elif test "$python_ok" = yes; then
1788 dnl Check that adding -fPIE works. It may be needed when using a static
1789 dnl Python library.
1790 AC_MSG_CHECKING([if -fPIE can be added for Python])
1791 cflags_save=$CFLAGS
1792 libs_save=$LIBS
1793 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1794 LIBS="$LIBS $PYTHON_LIBS"
1795 AC_TRY_LINK(,[ ],
1796 AC_MSG_RESULT(yes); fpie_ok=yes,
1797 AC_MSG_RESULT(no); fpie_ok=no)
1798 CFLAGS=$cflags_save
1799 LIBS=$libs_save
1800 if test $fpie_ok = yes; then
1801 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1802 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001803elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1804 AC_DEFINE(DYNAMIC_PYTHON3)
1805 PYTHON3_SRC="if_python3.c"
1806 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001807 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001808 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001809elif test "$python3_ok" = yes; then
1810 dnl Check that adding -fPIE works. It may be needed when using a static
1811 dnl Python library.
1812 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1813 cflags_save=$CFLAGS
1814 libs_save=$LIBS
1815 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1816 LIBS="$LIBS $PYTHON3_LIBS"
1817 AC_TRY_LINK(,[ ],
1818 AC_MSG_RESULT(yes); fpie_ok=yes,
1819 AC_MSG_RESULT(no); fpie_ok=no)
1820 CFLAGS=$cflags_save
1821 LIBS=$libs_save
1822 if test $fpie_ok = yes; then
1823 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1824 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001825fi
1826
Bram Moolenaar071d4272004-06-13 20:20:40 +00001827AC_MSG_CHECKING(--enable-tclinterp argument)
1828AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001829 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001830 [enable_tclinterp="no"])
1831AC_MSG_RESULT($enable_tclinterp)
1832
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001833if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001834
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001835 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001836 AC_MSG_CHECKING(--with-tclsh argument)
1837 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1838 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001839 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001840 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1841 AC_SUBST(vi_cv_path_tcl)
1842
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001843 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1844 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1845 tclsh_name="tclsh8.4"
1846 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1847 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001848 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 tclsh_name="tclsh8.2"
1850 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1851 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001852 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1853 tclsh_name="tclsh8.0"
1854 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1855 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001856 dnl still didn't find it, try without version number
1857 if test "X$vi_cv_path_tcl" = "X"; then
1858 tclsh_name="tclsh"
1859 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1860 fi
1861 if test "X$vi_cv_path_tcl" != "X"; then
1862 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001863 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001864 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1865 AC_MSG_RESULT($tclver - OK);
1866 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 +01001867 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001868
1869 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001870 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001871 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 +00001872 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001873 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001874 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001875 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1876 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 +00001877 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001878 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001879 for try in $tclinc; do
1880 if test -f "$try/tcl.h"; then
1881 AC_MSG_RESULT($try/tcl.h)
1882 TCL_INC=$try
1883 break
1884 fi
1885 done
1886 if test -z "$TCL_INC"; then
1887 AC_MSG_RESULT(<not found>)
1888 SKIP_TCL=YES
1889 fi
1890 if test -z "$SKIP_TCL"; then
1891 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001892 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001893 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001894 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001895 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001896 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001897 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001898 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1899 tclcnf=`echo $tclinc | sed s/include/lib/g`
1900 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001901 fi
1902 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001903 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001904 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001905 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001906 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001907 if test "$enable_tclinterp" = "dynamic"; then
1908 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1909 else
1910 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1911 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001912 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001913 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001914 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 +00001915 break
1916 fi
1917 done
1918 if test -z "$TCL_LIBS"; then
1919 AC_MSG_RESULT(<not found>)
1920 AC_MSG_CHECKING(for Tcl library by myself)
1921 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001922 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001923 for ext in .so .a ; do
1924 for ver in "" $tclver ; do
1925 for try in $tcllib ; do
1926 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001927 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001928 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001929 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00001930 if test "$vim_cv_uname_output" = SunOS &&
1931 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001932 TCL_LIBS="$TCL_LIBS -R $try"
1933 fi
1934 break 3
1935 fi
1936 done
1937 done
1938 done
1939 if test -z "$TCL_LIBS"; then
1940 AC_MSG_RESULT(<not found>)
1941 SKIP_TCL=YES
1942 fi
1943 fi
1944 if test -z "$SKIP_TCL"; then
1945 AC_DEFINE(FEAT_TCL)
1946 TCL_SRC=if_tcl.c
1947 TCL_OBJ=objects/if_tcl.o
1948 TCL_PRO=if_tcl.pro
1949 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1950 fi
1951 fi
1952 else
1953 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1954 fi
1955 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001956 if test "$enable_tclinterp" = "dynamic"; then
1957 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1958 AC_DEFINE(DYNAMIC_TCL)
1959 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1960 fi
1961 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001962 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1963 AC_MSG_ERROR([could not configure Tcl])
1964 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001965fi
1966AC_SUBST(TCL_SRC)
1967AC_SUBST(TCL_OBJ)
1968AC_SUBST(TCL_PRO)
1969AC_SUBST(TCL_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00001970AC_SUBST(TCL_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001971AC_SUBST(TCL_LIBS)
1972
1973AC_MSG_CHECKING(--enable-rubyinterp argument)
1974AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001975 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001976 [enable_rubyinterp="no"])
1977AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001978if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00001979 if test "$has_eval" = "no"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001980 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1981 fi
1982
Bram Moolenaar165641d2010-02-17 16:23:09 +01001983 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001984 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001985 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1986 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1987 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001988 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001989 if test "X$vi_cv_path_ruby" != "X"; then
1990 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001991 if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001992 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001993 AC_MSG_CHECKING(Ruby rbconfig)
1994 ruby_rbconfig="RbConfig"
1995 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1996 ruby_rbconfig="Config"
1997 fi
1998 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001999 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02002000 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 +00002001 if test "X$rubyhdrdir" != "X"; then
2002 AC_MSG_RESULT($rubyhdrdir)
2003 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01002004 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
2005 if test -d "$rubyarchdir"; then
2006 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01002007 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002008 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02002009 if test "X$rubyversion" = "X"; then
2010 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
2011 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01002012 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02002013 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002014 if test "X$rubylibs" != "X"; then
2015 RUBY_LIBS="$rubylibs"
2016 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002017 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
2018 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02002019 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01002020 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02002021 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
2022 elif test "$librubyarg" = "libruby.a"; then
2023 dnl required on Mac OS 10.3 where libruby.a doesn't exist
2024 librubyarg="-lruby"
2025 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002026 fi
2027
2028 if test "X$librubyarg" != "X"; then
2029 RUBY_LIBS="$librubyarg $RUBY_LIBS"
2030 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02002031 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002032 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002033 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
2034 dnl be included if requested by passing --with-mac-arch to
2035 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02002036 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002037 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01002038 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02002039 LDFLAGS="$rubyldflags $LDFLAGS"
2040 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00002041 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002042 fi
2043 RUBY_SRC="if_ruby.c"
2044 RUBY_OBJ="objects/if_ruby.o"
2045 RUBY_PRO="if_ruby.pro"
2046 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002047 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002048 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002049 if test -z "$libruby_soname"; then
2050 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2051 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002052 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002053 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002054 RUBY_LIBS=
2055 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002056 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2057 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2058 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002060 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002061 fi
2062 else
2063 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2064 fi
2065 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002066
2067 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2068 AC_MSG_ERROR([could not configure Ruby])
2069 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070fi
2071AC_SUBST(RUBY_SRC)
2072AC_SUBST(RUBY_OBJ)
2073AC_SUBST(RUBY_PRO)
2074AC_SUBST(RUBY_CFLAGS)
ichizok8bb3fe42021-12-28 15:51:45 +00002075AC_SUBST(RUBY_CFLAGS_EXTRA)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002076AC_SUBST(RUBY_LIBS)
2077
2078AC_MSG_CHECKING(--enable-cscope argument)
2079AC_ARG_ENABLE(cscope,
2080 [ --enable-cscope Include cscope interface.], ,
2081 [enable_cscope="no"])
2082AC_MSG_RESULT($enable_cscope)
2083if test "$enable_cscope" = "yes"; then
2084 AC_DEFINE(FEAT_CSCOPE)
2085fi
2086
Bram Moolenaar071d4272004-06-13 20:20:40 +00002087AC_MSG_CHECKING(--disable-netbeans argument)
2088AC_ARG_ENABLE(netbeans,
2089 [ --disable-netbeans Disable NetBeans integration support.],
2090 , [enable_netbeans="yes"])
2091if test "$enable_netbeans" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002092 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002093 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2094 enable_netbeans="no"
2095 else
2096 AC_MSG_RESULT(no)
2097 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002098else
2099 AC_MSG_RESULT(yes)
2100fi
2101
2102AC_MSG_CHECKING(--disable-channel argument)
2103AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002104 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002105 , [enable_channel="yes"])
2106if test "$enable_channel" = "yes"; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002107 if test "$has_eval" = "no"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002108 AC_MSG_RESULT([cannot use channels with tiny or small features])
2109 enable_channel="no"
2110 else
2111 AC_MSG_RESULT(no)
2112 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002113else
2114 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002115 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002116 enable_netbeans="no"
2117 else
2118 AC_MSG_RESULT(yes)
2119 fi
2120fi
2121
Bram Moolenaar16435482016-01-24 21:31:54 +01002122if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002123 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002124 if test "x$HAIKU" = "xyes"; then
2125 AC_CHECK_LIB(network, socket)
2126 else
2127 AC_CHECK_LIB(socket, socket)
2128 fi
2129
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002130 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
2131 [AC_TRY_LINK([
2132#include <stdio.h>
2133#include <stdlib.h>
2134#include <stdarg.h>
2135#include <fcntl.h>
2136#include <netdb.h>
2137#include <netinet/in.h>
2138#include <errno.h>
2139#include <sys/types.h>
2140#include <sys/socket.h>
2141 /* Check bitfields */
2142 struct nbbuf {
2143 unsigned int initDone:1;
2144 unsigned short signmaplen;
2145 };
2146 ], [
2147 /* Check creating a socket. */
2148 struct sockaddr_in server;
2149 struct addrinfo *res;
2150 (void)socket(AF_INET, SOCK_STREAM, 0);
2151 (void)htons(100);
2152 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2153 if (errno == ECONNREFUSED)
2154 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2155 (void)freeaddrinfo(res);
2156 ],
2157 [vim_cv_ipv6_networking="yes"],
2158 [vim_cv_ipv6_networking="no"])])
2159
2160 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2161 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002162 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002163 else
2164 dnl On Solaris we need the nsl library.
2165 AC_CHECK_LIB(nsl, gethostbyname)
2166 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
2167 [AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002168#include <stdio.h>
2169#include <stdlib.h>
2170#include <stdarg.h>
2171#include <fcntl.h>
2172#include <netdb.h>
2173#include <netinet/in.h>
2174#include <errno.h>
2175#include <sys/types.h>
2176#include <sys/socket.h>
2177 /* Check bitfields */
2178 struct nbbuf {
2179 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002180 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002181 };
2182 ], [
2183 /* Check creating a socket. */
2184 struct sockaddr_in server;
2185 (void)socket(AF_INET, SOCK_STREAM, 0);
2186 (void)htons(100);
2187 (void)gethostbyname("microsoft.com");
2188 if (errno == ECONNREFUSED)
2189 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2190 ],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002191 [vim_cv_ipv4_networking="yes"],
2192 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2193 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002194fi
2195if test "$enable_netbeans" = "yes"; then
2196 AC_DEFINE(FEAT_NETBEANS_INTG)
2197 NETBEANS_SRC="netbeans.c"
2198 AC_SUBST(NETBEANS_SRC)
2199 NETBEANS_OBJ="objects/netbeans.o"
2200 AC_SUBST(NETBEANS_OBJ)
2201fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002202if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002203 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002204 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002205 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002206 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002207 AC_SUBST(CHANNEL_OBJ)
2208fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002209
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002210AC_MSG_CHECKING(--enable-terminal argument)
2211AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002212 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002213 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002214if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaar12471262022-01-18 11:11:25 +00002215 if test "$has_eval" = "no"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002216 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2217 enable_terminal="no"
2218 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002219 if test "$enable_terminal" = "auto"; then
2220 enable_terminal="yes"
2221 AC_MSG_RESULT(defaulting to yes)
2222 else
2223 AC_MSG_RESULT(yes)
2224 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002225 fi
2226else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002227 if test "$enable_terminal" = "auto"; then
2228 enable_terminal="no"
2229 AC_MSG_RESULT(defaulting to no)
2230 else
2231 AC_MSG_RESULT(no)
2232 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002233fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002234if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002235 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002236 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 +02002237 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002238 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 +02002239 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002240 TERM_TEST="test_libvterm"
2241 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002242fi
2243
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002244AC_MSG_CHECKING(--enable-autoservername argument)
2245AC_ARG_ENABLE(autoservername,
2246 [ --enable-autoservername Automatically define servername at vim startup.], ,
2247 [enable_autoservername="no"])
2248AC_MSG_RESULT($enable_autoservername)
2249if test "$enable_autoservername" = "yes"; then
2250 AC_DEFINE(FEAT_AUTOSERVERNAME)
2251fi
2252
Bram Moolenaar071d4272004-06-13 20:20:40 +00002253AC_MSG_CHECKING(--enable-multibyte argument)
2254AC_ARG_ENABLE(multibyte,
2255 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002256 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002257AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002258if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002259 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2260 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261fi
2262
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002263dnl Right-to-Left language support for Vim will be included with big features,
2264dnl unless ENABLE_RIGHTLEFT is undefined.
2265AC_MSG_CHECKING(--disable-rightleft argument)
2266AC_ARG_ENABLE(rightleft,
2267 [ --disable-rightleft Do not include Right-to-Left language support.],
2268 , [enable_rightleft="yes"])
2269if test "$enable_rightleft" = "yes"; then
2270 AC_MSG_RESULT(no)
2271else
2272 AC_MSG_RESULT(yes)
2273 AC_DEFINE(DISABLE_RIGHTLEFT)
2274fi
2275
2276dnl Arabic language support for Vim will be included with big features,
2277dnl unless ENABLE_ARABIC is undefined.
2278AC_MSG_CHECKING(--disable-arabic argument)
2279AC_ARG_ENABLE(arabic,
2280 [ --disable-arabic Do not include Arabic language support.],
2281 , [enable_arabic="yes"])
2282if test "$enable_arabic" = "yes"; then
2283 AC_MSG_RESULT(no)
2284else
2285 AC_MSG_RESULT(yes)
2286 AC_DEFINE(DISABLE_ARABIC)
2287fi
2288
Bram Moolenaar14184a32019-02-16 15:10:30 +01002289dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002290AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002291 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002292
Bram Moolenaar071d4272004-06-13 20:20:40 +00002293AC_MSG_CHECKING(--enable-xim argument)
2294AC_ARG_ENABLE(xim,
2295 [ --enable-xim Include XIM input support.],
2296 AC_MSG_RESULT($enable_xim),
2297 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002298
2299AC_MSG_CHECKING(--enable-fontset argument)
2300AC_ARG_ENABLE(fontset,
2301 [ --enable-fontset Include X fontset output support.], ,
2302 [enable_fontset="no"])
2303AC_MSG_RESULT($enable_fontset)
2304dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2305
2306test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002307test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002308if test "$with_x" = no; then
2309 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2310else
2311 dnl Do this check early, so that its failure can override user requests.
2312
2313 AC_PATH_PROG(xmkmfpath, xmkmf)
2314
2315 AC_PATH_XTRA
2316
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002317 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002318 dnl be compiled with a special option.
2319 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002320 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002321 CFLAGS="$CFLAGS -W c,dll"
2322 LDFLAGS="$LDFLAGS -W l,dll"
2323 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2324 fi
2325
2326 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002327 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002328
2329 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2330 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2331 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2332 X_LIBS="$X_LIBS -L$x_libraries"
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002333 if test "$vim_cv_uname_output" = SunOS &&
2334 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002335 X_LIBS="$X_LIBS -R $x_libraries"
2336 fi
2337 fi
2338
2339 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2340 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2341 AC_MSG_RESULT(Corrected X includes to $x_includes)
2342 X_CFLAGS="$X_CFLAGS -I$x_includes"
2343 fi
2344
2345 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2346 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2347 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2348 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2349 dnl Same for "-R/usr/lib ".
2350 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2351
2352
2353 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002354 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2355 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002356 AC_MSG_CHECKING(if X11 header files can be found)
2357 cflags_save=$CFLAGS
2358 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002359 AC_TRY_COMPILE([#include <X11/Xlib.h>
2360#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002361 AC_MSG_RESULT(yes),
2362 AC_MSG_RESULT(no); no_x=yes)
2363 CFLAGS=$cflags_save
2364
2365 if test "${no_x-no}" = yes; then
2366 with_x=no
2367 else
2368 AC_DEFINE(HAVE_X11)
2369 X_LIB="-lXt -lX11";
2370 AC_SUBST(X_LIB)
2371
2372 ac_save_LDFLAGS="$LDFLAGS"
2373 LDFLAGS="-L$x_libraries $LDFLAGS"
2374
2375 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2376 dnl For HP-UX 10.20 it must be before -lSM -lICE
2377 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2378 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2379
2380 dnl Some systems need -lnsl -lsocket when testing for ICE.
2381 dnl The check above doesn't do this, try here (again). Also needed to get
2382 dnl them after Xdmcp. link.sh will remove them when not needed.
2383 dnl Check for other function than above to avoid the cached value
2384 AC_CHECK_LIB(ICE, IceOpenConnection,
2385 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2386
2387 dnl Check for -lXpm (needed for some versions of Motif)
2388 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2389 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2390 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2391
2392 dnl Check that the X11 header files don't use implicit declarations
2393 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2394 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002395 dnl -Werror is GCC only, others like Solaris Studio might not like it
2396 if test "$GCC" = yes; then
2397 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2398 else
2399 CFLAGS="$CFLAGS $X_CFLAGS"
2400 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002401 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2402 AC_MSG_RESULT(no),
2403 CFLAGS="$CFLAGS -Wno-implicit-int"
2404 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2405 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2406 AC_MSG_RESULT(test failed)
2407 )
2408 )
2409 CFLAGS=$cflags_save
2410
2411 LDFLAGS="$ac_save_LDFLAGS"
2412
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002413 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2414 AC_CACHE_VAL(ac_cv_small_wchar_t,
2415 [AC_TRY_RUN([
2416#include <X11/Xlib.h>
2417#if STDC_HEADERS
2418# include <stdlib.h>
2419# include <stddef.h>
2420#endif
2421 main()
2422 {
2423 if (sizeof(wchar_t) <= 2)
2424 exit(1);
2425 exit(0);
2426 }],
2427 ac_cv_small_wchar_t="no",
2428 ac_cv_small_wchar_t="yes",
2429 AC_MSG_ERROR(failed to compile test program))])
2430 AC_MSG_RESULT($ac_cv_small_wchar_t)
2431 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2432 AC_DEFINE(SMALL_WCHAR_T)
2433 fi
2434
Bram Moolenaar071d4272004-06-13 20:20:40 +00002435 fi
2436fi
2437
Bram Moolenaard2a05492018-07-27 22:35:15 +02002438dnl Check if --with-x was given but it doesn't work.
2439if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2440 AC_MSG_ERROR([could not configure X])
2441fi
2442
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002443test "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 +00002444
2445AC_MSG_CHECKING(--enable-gui argument)
2446AC_ARG_ENABLE(gui,
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002447 [ --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 +00002448
2449dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2450dnl Do not use character classes for portability with old tools.
2451enable_gui_canon=`echo "_$enable_gui" | \
2452 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2453
2454dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002455SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002456SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002457SKIP_GNOME=YES
2458SKIP_MOTIF=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002459SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002460SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002461GUITYPE=NONE
2462
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002463if test "x$HAIKU" = "xyes"; then
2464 SKIP_HAIKU=
2465 case "$enable_gui_canon" in
2466 no) AC_MSG_RESULT(no GUI support)
2467 SKIP_HAIKU=YES ;;
2468 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2469 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2470 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2471 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2472 SKIP_HAIKU=YES ;;
2473 esac
2474elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002475 SKIP_PHOTON=
2476 case "$enable_gui_canon" in
2477 no) AC_MSG_RESULT(no GUI support)
2478 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002479 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2480 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002481 photon) AC_MSG_RESULT(Photon GUI support) ;;
2482 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2483 SKIP_PHOTON=YES ;;
2484 esac
2485
Bram Moolenaar040f9752020-08-11 23:08:48 +02002486elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2487 case "$enable_gui_canon" in
2488 no) AC_MSG_RESULT(no GUI support) ;;
2489 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2490 gui_auto=yes ;;
2491 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002492 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002493 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002494else
2495
Bram Moolenaar071d4272004-06-13 20:20:40 +00002496 case "$enable_gui_canon" in
2497 no|none) AC_MSG_RESULT(no GUI support) ;;
2498 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002499 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002500 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002501 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502 SKIP_GNOME=
Bram Moolenaarf52fac22022-03-11 16:01:26 +00002503 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002504 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002505 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002506 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2507 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002508 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002509 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2510 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002511 motif) AC_MSG_RESULT(Motif GUI support)
2512 SKIP_MOTIF=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002513 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2514 esac
2515
2516fi
2517
Bram Moolenaar071d4272004-06-13 20:20:40 +00002518if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2519 -a "$enable_gui_canon" != "gnome2"; then
2520 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2521 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002522 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002523 , enable_gtk2_check="yes")
2524 AC_MSG_RESULT($enable_gtk2_check)
2525 if test "x$enable_gtk2_check" = "xno"; then
2526 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002527 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002528 fi
2529fi
2530
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002531if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002532 AC_MSG_CHECKING(whether or not to look for GNOME)
2533 AC_ARG_ENABLE(gnome-check,
2534 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2535 , enable_gnome_check="no")
2536 AC_MSG_RESULT($enable_gnome_check)
2537 if test "x$enable_gnome_check" = "xno"; then
2538 SKIP_GNOME=YES
2539 fi
2540fi
2541
Bram Moolenaar98921892016-02-23 17:14:37 +01002542if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2543 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2544 AC_ARG_ENABLE(gtk3-check,
2545 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2546 , enable_gtk3_check="yes")
2547 AC_MSG_RESULT($enable_gtk3_check)
2548 if test "x$enable_gtk3_check" = "xno"; then
2549 SKIP_GTK3=YES
2550 fi
2551fi
2552
Bram Moolenaar071d4272004-06-13 20:20:40 +00002553if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2554 AC_MSG_CHECKING(whether or not to look for Motif)
2555 AC_ARG_ENABLE(motif-check,
2556 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2557 , enable_motif_check="yes")
2558 AC_MSG_RESULT($enable_motif_check)
2559 if test "x$enable_motif_check" = "xno"; then
2560 SKIP_MOTIF=YES
2561 fi
2562fi
2563
Bram Moolenaar071d4272004-06-13 20:20:40 +00002564dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002565dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002566dnl
2567dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002568dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002569dnl
2570AC_DEFUN(AM_PATH_GTK,
2571[
2572 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2573 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002574 no_gtk=""
2575 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2576 && $PKG_CONFIG --exists gtk+-2.0; then
2577 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002578 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2579 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002580 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2581 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2582 dnl something like that.
2583 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002584 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002585 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2586 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2587 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2588 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2589 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2590 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2591 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2592 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002593 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2594 && $PKG_CONFIG --exists gtk+-3.0; then
2595 {
2596 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2597 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2598
2599 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2600 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2601 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2602 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2603 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2604 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2605 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2606 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2607 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2608 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002609 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002610 dnl Put some text before the "no" to hint at installing the gtk-dev
2611 dnl packages.
2612 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002613 no_gtk=yes
2614 fi
2615
2616 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2617 {
2618 ac_save_CFLAGS="$CFLAGS"
2619 ac_save_LIBS="$LIBS"
2620 CFLAGS="$CFLAGS $GTK_CFLAGS"
2621 LIBS="$LIBS $GTK_LIBS"
2622
2623 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002624 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002625 dnl
2626 rm -f conf.gtktest
2627 AC_TRY_RUN([
2628#include <gtk/gtk.h>
2629#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002630#if STDC_HEADERS
2631# include <stdlib.h>
2632# include <stddef.h>
2633#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002634
2635int
2636main ()
2637{
2638int major, minor, micro;
2639char *tmp_version;
2640
2641system ("touch conf.gtktest");
2642
2643/* HP/UX 9 (%@#!) writes to sscanf strings */
2644tmp_version = g_strdup("$min_gtk_version");
2645if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2646 printf("%s, bad version string\n", "$min_gtk_version");
2647 exit(1);
2648 }
2649
2650if ((gtk_major_version > major) ||
2651 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2652 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2653 (gtk_micro_version >= micro)))
2654{
2655 return 0;
2656}
2657return 1;
2658}
2659],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2660 CFLAGS="$ac_save_CFLAGS"
2661 LIBS="$ac_save_LIBS"
2662 }
2663 fi
2664 if test "x$no_gtk" = x ; then
2665 if test "x$enable_gtktest" = "xyes"; then
2666 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2667 else
2668 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2669 fi
2670 ifelse([$2], , :, [$2])
2671 else
2672 {
2673 AC_MSG_RESULT(no)
2674 GTK_CFLAGS=""
2675 GTK_LIBS=""
2676 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002677 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2678 AC_MSG_ERROR([could not configure GTK])
2679 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002680 }
2681 fi
2682 }
2683 else
2684 GTK_CFLAGS=""
2685 GTK_LIBS=""
2686 ifelse([$3], , :, [$3])
2687 fi
2688 AC_SUBST(GTK_CFLAGS)
2689 AC_SUBST(GTK_LIBS)
2690 rm -f conf.gtktest
2691])
2692
2693dnl ---------------------------------------------------------------------------
2694dnl gnome
2695dnl ---------------------------------------------------------------------------
2696AC_DEFUN([GNOME_INIT_HOOK],
2697[
2698 AC_SUBST(GNOME_LIBS)
2699 AC_SUBST(GNOME_LIBDIR)
2700 AC_SUBST(GNOME_INCLUDEDIR)
2701
2702 AC_ARG_WITH(gnome-includes,
2703 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2704 [CFLAGS="$CFLAGS -I$withval"]
2705 )
2706
2707 AC_ARG_WITH(gnome-libs,
2708 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2709 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2710 )
2711
2712 AC_ARG_WITH(gnome,
2713 [ --with-gnome Specify prefix for GNOME files],
2714 if test x$withval = xyes; then
2715 want_gnome=yes
2716 ifelse([$1], [], :, [$1])
2717 else
2718 if test "x$withval" = xno; then
2719 want_gnome=no
2720 else
2721 want_gnome=yes
2722 LDFLAGS="$LDFLAGS -L$withval/lib"
2723 CFLAGS="$CFLAGS -I$withval/include"
2724 gnome_prefix=$withval/lib
2725 fi
2726 fi,
2727 want_gnome=yes)
2728
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002729 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002730 {
2731 AC_MSG_CHECKING(for libgnomeui-2.0)
2732 if $PKG_CONFIG --exists libgnomeui-2.0; then
2733 AC_MSG_RESULT(yes)
2734 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2735 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2736 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002737
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002738 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2739 dnl This might not be the right way but it works for me...
2740 AC_MSG_CHECKING(for FreeBSD)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002741 if test "$vim_cv_uname_output" = FreeBSD; then
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002742 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002743 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002744 GNOME_LIBS="$GNOME_LIBS -pthread"
2745 else
2746 AC_MSG_RESULT(no)
2747 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002748 $1
2749 else
2750 AC_MSG_RESULT(not found)
2751 if test "x$2" = xfail; then
2752 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2753 fi
2754 fi
2755 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002756 fi
2757])
2758
2759AC_DEFUN([GNOME_INIT],[
2760 GNOME_INIT_HOOK([],fail)
2761])
2762
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002763if test "X$PKG_CONFIG" = "X"; then
2764 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2765fi
2766
Bram Moolenaar071d4272004-06-13 20:20:40 +00002767
2768dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002769dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002770dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002771if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002772
2773 AC_MSG_CHECKING(--disable-gtktest argument)
2774 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2775 , enable_gtktest=yes)
2776 if test "x$enable_gtktest" = "xyes" ; then
2777 AC_MSG_RESULT(gtk test enabled)
2778 else
2779 AC_MSG_RESULT(gtk test disabled)
2780 fi
2781
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002782 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002783 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2784 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002785 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2786 dnl found.
2787 save_skip_gtk3=$SKIP_GTK3
2788 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002789 AM_PATH_GTK(2.2.0,
2790 [GUI_LIB_LOC="$GTK_LIBDIR"
2791 GTK_LIBNAME="$GTK_LIBS"
2792 GUI_INC_LOC="$GTK_CFLAGS"], )
2793 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002794 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002795 SKIP_MOTIF=YES
2796 GUITYPE=GTK
2797 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002798 else
2799 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002800 fi
2801 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002802 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002803 dnl
2804 dnl if GTK exists, then check for GNOME.
2805 dnl
2806 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002807 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002808 GNOME_INIT_HOOK([have_gnome=yes])
2809 if test "x$have_gnome" = xyes ; then
2810 AC_DEFINE(FEAT_GUI_GNOME)
2811 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2812 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002813 fi
2814 }
2815 fi
2816 fi
2817fi
2818
Bram Moolenaar98921892016-02-23 17:14:37 +01002819
2820dnl ---------------------------------------------------------------------------
2821dnl Check for GTK3.
2822dnl ---------------------------------------------------------------------------
2823if test -z "$SKIP_GTK3"; then
2824
2825 AC_MSG_CHECKING(--disable-gtktest argument)
2826 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2827 , enable_gtktest=yes)
2828 if test "x$enable_gtktest" = "xyes" ; then
2829 AC_MSG_RESULT(gtk test enabled)
2830 else
2831 AC_MSG_RESULT(gtk test disabled)
2832 fi
2833
Bram Moolenaar98921892016-02-23 17:14:37 +01002834 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002835 save_skip_gtk2=$SKIP_GTK2
2836 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002837 AM_PATH_GTK(3.0.0,
2838 [GUI_LIB_LOC="$GTK_LIBDIR"
2839 GTK_LIBNAME="$GTK_LIBS"
2840 GUI_INC_LOC="$GTK_CFLAGS"], )
2841 if test "x$GTK_CFLAGS" != "x"; then
2842 SKIP_GTK2=YES
2843 SKIP_GNOME=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002844 SKIP_MOTIF=YES
2845 GUITYPE=GTK
2846 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002847 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002848 else
2849 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002850 fi
2851 fi
2852fi
2853
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002854dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002855dnl glib-compile-resources is found in PATH, use GResource.
2856if test "x$GUITYPE" = "xGTK"; then
2857 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2858 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2859 if test "x$gdk_pixbuf_version" != x ; then
2860 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2861 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2862 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002863 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002864 AC_MSG_RESULT([OK.])
2865 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2866 AC_MSG_CHECKING([glib-compile-resources])
2867 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002868 GLIB_COMPILE_RESOURCES=""
2869 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002870 else
2871 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002872 AC_DEFINE(USE_GRESOURCE)
2873 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2874 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002875 fi
2876 else
2877 AC_MSG_RESULT([not usable.])
2878 fi
2879 else
2880 AC_MSG_RESULT([cannot obtain from pkg_config.])
2881 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002882
2883 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2884 AC_ARG_ENABLE(icon_cache_update,
2885 [ --disable-icon-cache-update update disabled],
2886 [],
2887 [enable_icon_cache_update="yes"])
2888 if test "$enable_icon_cache_update" = "yes"; then
2889 AC_MSG_RESULT([not set])
2890 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2891 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2892 AC_MSG_RESULT([not found in PATH.])
2893 fi
2894 else
2895 AC_MSG_RESULT([update disabled])
2896 fi
2897
2898 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2899 AC_ARG_ENABLE(desktop_database_update,
2900 [ --disable-desktop-database-update update disabled],
2901 [],
2902 [enable_desktop_database_update="yes"])
2903 if test "$enable_desktop_database_update" = "yes"; then
2904 AC_MSG_RESULT([not set])
2905 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2906 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2907 AC_MSG_RESULT([not found in PATH.])
2908 fi
2909 else
2910 AC_MSG_RESULT([update disabled])
2911 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002912fi
2913AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002914AC_SUBST(GRESOURCE_SRC)
2915AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002916AC_SUBST(GTK_UPDATE_ICON_CACHE)
2917AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002918
Bram Moolenaar071d4272004-06-13 20:20:40 +00002919dnl Check for Motif include files location.
2920dnl The LAST one found is used, this makes the highest version to be used,
2921dnl e.g. when Motif1.2 and Motif2.0 are both present.
2922
2923if test -z "$SKIP_MOTIF"; then
2924 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"
2925 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2926 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2927
2928 AC_MSG_CHECKING(for location of Motif GUI includes)
2929 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2930 GUI_INC_LOC=
2931 for try in $gui_includes; do
2932 if test -f "$try/Xm/Xm.h"; then
2933 GUI_INC_LOC=$try
2934 fi
2935 done
2936 if test -n "$GUI_INC_LOC"; then
2937 if test "$GUI_INC_LOC" = /usr/include; then
2938 GUI_INC_LOC=
2939 AC_MSG_RESULT(in default path)
2940 else
2941 AC_MSG_RESULT($GUI_INC_LOC)
2942 fi
2943 else
2944 AC_MSG_RESULT(<not found>)
2945 SKIP_MOTIF=YES
2946 fi
2947fi
2948
2949dnl Check for Motif library files location. In the same order as the include
2950dnl files, to avoid a mixup if several versions are present
2951
2952if test -z "$SKIP_MOTIF"; then
2953 AC_MSG_CHECKING(--with-motif-lib argument)
2954 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002955 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002956 [ MOTIF_LIBNAME="${withval}" ] )
2957
2958 if test -n "$MOTIF_LIBNAME"; then
2959 AC_MSG_RESULT($MOTIF_LIBNAME)
2960 GUI_LIB_LOC=
2961 else
2962 AC_MSG_RESULT(no)
2963
2964 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2965 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2966
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002967 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2968 dnl linker will figure out which one to use, we only check if one exists.
Kelvin Leeb4716902022-04-04 17:20:01 +01002969 dnl Cygwin uses the .dll.a extension.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002970 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002971 gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /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 +00002972 GUI_LIB_LOC=
2973 for try in $gui_libs; do
Kelvin Leeb4716902022-04-04 17:20:01 +01002974 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 +00002975 if test -f "$libtry"; then
2976 GUI_LIB_LOC=$try
2977 fi
2978 done
2979 done
2980 if test -n "$GUI_LIB_LOC"; then
2981 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002982 if test "$GUI_LIB_LOC" = /usr/lib \
2983 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2984 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002985 GUI_LIB_LOC=
2986 AC_MSG_RESULT(in default path)
2987 else
2988 if test -n "$GUI_LIB_LOC"; then
2989 AC_MSG_RESULT($GUI_LIB_LOC)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00002990 if test "$vim_cv_uname_output" = SunOS &&
2991 echo $vim_cv_uname_r_output | grep '^5' >/dev/null; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002992 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2993 fi
2994 fi
2995 fi
2996 MOTIF_LIBNAME=-lXm
2997 else
2998 AC_MSG_RESULT(<not found>)
2999 SKIP_MOTIF=YES
3000 fi
3001 fi
3002fi
3003
3004if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003005 GUITYPE=MOTIF
3006 AC_SUBST(MOTIF_LIBNAME)
3007fi
3008
Bram Moolenaare2adcf32022-03-12 11:57:25 +00003009if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003010 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3011 dnl Avoid adding it when it twice
3012 if test -n "$GUI_INC_LOC"; then
3013 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3014 fi
3015 if test -n "$GUI_LIB_LOC"; then
3016 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3017 fi
3018
3019 dnl Check for -lXext and then for -lXmu
3020 ldflags_save=$LDFLAGS
3021 LDFLAGS="$X_LIBS $LDFLAGS"
3022 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3023 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3024 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3025 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3026 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3027 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3028 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3029 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3030 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3031 if test -z "$SKIP_MOTIF"; then
3032 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3033 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3034 fi
3035 LDFLAGS=$ldflags_save
3036
3037 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3038 AC_MSG_CHECKING(for extra X11 defines)
3039 NARROW_PROTO=
3040 rm -fr conftestdir
3041 if mkdir conftestdir; then
3042 cd conftestdir
3043 cat > Imakefile <<'EOF'
3044acfindx:
3045 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3046EOF
3047 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3048 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3049 fi
3050 cd ..
3051 rm -fr conftestdir
3052 fi
3053 if test -z "$NARROW_PROTO"; then
3054 AC_MSG_RESULT(no)
3055 else
3056 AC_MSG_RESULT($NARROW_PROTO)
3057 fi
3058 AC_SUBST(NARROW_PROTO)
3059fi
3060
3061dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3062dnl use the X11 include path
3063if test "$enable_xsmp" = "yes"; then
3064 cppflags_save=$CPPFLAGS
3065 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3066 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3067 CPPFLAGS=$cppflags_save
3068fi
3069
3070
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003071if test -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003072 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3073 cppflags_save=$CPPFLAGS
3074 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3075 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3076
3077 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3078 if test ! "$enable_xim" = "no"; then
3079 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3080 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3081 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003082 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003083 fi
3084 CPPFLAGS=$cppflags_save
3085
Bram Moolenaar54612582019-11-21 17:13:31 +01003086 dnl automatically enable XIM in the GUI
3087 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003088 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3089 enable_xim="yes"
3090 fi
3091fi
3092
Bram Moolenaarf52fac22022-03-11 16:01:26 +00003093if test -z "$SKIP_MOTIF"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003094 cppflags_save=$CPPFLAGS
3095 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003096dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3097 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3098 AC_TRY_COMPILE([
3099#include <X11/Intrinsic.h>
3100#include <X11/Xmu/Editres.h>],
3101 [int i; i = 0;],
3102 AC_MSG_RESULT(yes)
3103 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3104 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003105 CPPFLAGS=$cppflags_save
3106fi
3107
Bram Moolenaar0b40d082022-03-08 13:32:37 +00003108dnl Only use the Xm directory when compiling Motif.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003109if test -z "$SKIP_MOTIF"; then
3110 cppflags_save=$CPPFLAGS
3111 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003112 if test "$zOSUnix" = "yes"; then
3113 xmheader="Xm/Xm.h"
3114 else
3115 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003116 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003117 fi
3118 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003119
Bram Moolenaar77c19352012-06-13 19:19:41 +02003120 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003121 dnl Solaris uses XpmAttributes_21, very annoying.
3122 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3123 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3124 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3125 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3126 )
3127 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003128 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003129 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003130 CPPFLAGS=$cppflags_save
3131fi
3132
3133if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3134 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3135 enable_xim="no"
3136fi
3137if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3138 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3139 enable_fontset="no"
3140fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003141if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003142 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3143 enable_fontset="no"
3144fi
3145
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003146dnl There is no test for the Haiku GUI, if it's selected it's used
3147if test -z "$SKIP_HAIKU"; then
3148 GUITYPE=HAIKUGUI
3149fi
3150
Bram Moolenaar071d4272004-06-13 20:20:40 +00003151if test -z "$SKIP_PHOTON"; then
3152 GUITYPE=PHOTONGUI
3153fi
3154
3155AC_SUBST(GUI_INC_LOC)
3156AC_SUBST(GUI_LIB_LOC)
3157AC_SUBST(GUITYPE)
3158AC_SUBST(GUI_X_LIBS)
3159
3160if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3161 AC_MSG_ERROR([cannot use workshop without Motif])
3162fi
3163
3164dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3165if test "$enable_xim" = "yes"; then
3166 AC_DEFINE(FEAT_XIM)
3167fi
3168if test "$enable_fontset" = "yes"; then
3169 AC_DEFINE(FEAT_XFONTSET)
3170fi
3171
3172
3173dnl ---------------------------------------------------------------------------
3174dnl end of GUI-checking
3175dnl ---------------------------------------------------------------------------
3176
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003177AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003178if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003179 dnl Linux
3180 AC_MSG_RESULT([/proc/self/exe])
3181 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3182elif test -L "/proc/self/path/a.out"; then
3183 dnl Solaris
3184 AC_MSG_RESULT([/proc/self/path/a.out])
3185 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3186elif test -L "/proc/curproc/file"; then
3187 dnl FreeBSD
3188 AC_MSG_RESULT([/proc/curproc/file])
3189 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003190else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003191 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003192fi
3193
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003194dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003195AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003196case $vim_cv_uname_output in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003197 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003198 AC_MSG_CHECKING(for CYGWIN clipboard support)
3199 if test "x$with_x" = "xno" ; then
3200 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3201 AC_MSG_RESULT(yes)
3202 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3203 else
3204 AC_MSG_RESULT(no - using X11)
3205 fi ;;
3206
3207 *) CYGWIN=no; AC_MSG_RESULT(no);;
3208esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003209
Bram Moolenaar071d4272004-06-13 20:20:40 +00003210dnl Checks for libraries and include files.
3211
Bram Moolenaar446cb832008-06-24 21:56:24 +00003212AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3213 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003214 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003215#include "confdefs.h"
3216#include <ctype.h>
3217#if STDC_HEADERS
3218# include <stdlib.h>
3219# include <stddef.h>
3220#endif
3221main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003222 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003223 vim_cv_toupper_broken=yes
3224 ],[
3225 vim_cv_toupper_broken=no
3226 ],[
3227 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3228 ])])
3229
3230if test "x$vim_cv_toupper_broken" = "xyes" ; then
3231 AC_DEFINE(BROKEN_TOUPPER)
3232fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003233
3234AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003235AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003236 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3237 AC_MSG_RESULT(no))
3238
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003239AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3240AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3241 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3242 AC_MSG_RESULT(no))
3243
Bram Moolenaar071d4272004-06-13 20:20:40 +00003244dnl Checks for header files.
3245AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3246dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3247if test "$HAS_ELF" = 1; then
3248 AC_CHECK_LIB(elf, main)
3249fi
3250
3251AC_HEADER_DIRENT
3252
Bram Moolenaar071d4272004-06-13 20:20:40 +00003253dnl If sys/wait.h is not found it might still exist but not be POSIX
3254dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3255if test $ac_cv_header_sys_wait_h = no; then
3256 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3257 AC_TRY_COMPILE([#include <sys/wait.h>],
3258 [union wait xx, yy; xx = yy],
3259 AC_MSG_RESULT(yes)
3260 AC_DEFINE(HAVE_SYS_WAIT_H)
3261 AC_DEFINE(HAVE_UNION_WAIT),
3262 AC_MSG_RESULT(no))
3263fi
3264
Bram Moolenaar779a7752016-01-30 23:26:34 +01003265AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003266 sys/select.h sys/utsname.h termcap.h fcntl.h \
3267 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3268 termio.h iconv.h inttypes.h langinfo.h math.h \
3269 unistd.h stropts.h errno.h sys/resource.h \
3270 sys/systeminfo.h locale.h sys/stream.h termios.h \
3271 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003272 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003273 util/debug.h util/msg18n.h frame.h sys/acl.h \
3274 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003275
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003276dnl sys/ptem.h depends on sys/stream.h on Solaris
3277AC_CHECK_HEADERS(sys/ptem.h, [], [],
3278[#if defined HAVE_SYS_STREAM_H
3279# include <sys/stream.h>
3280#endif])
3281
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003282dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3283AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3284[#if defined HAVE_SYS_PARAM_H
3285# include <sys/param.h>
3286#endif])
3287
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003288
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003289dnl pthread_np.h may exist but can only be used after including pthread.h
3290AC_MSG_CHECKING([for pthread_np.h])
3291AC_TRY_COMPILE([
3292#include <pthread.h>
3293#include <pthread_np.h>],
3294 [int i; i = 0;],
3295 AC_MSG_RESULT(yes)
3296 AC_DEFINE(HAVE_PTHREAD_NP_H),
3297 AC_MSG_RESULT(no))
3298
Bram Moolenaare344bea2005-09-01 20:46:49 +00003299AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003300if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003301 dnl The strings.h file on OS/X contains a warning and nothing useful.
3302 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3303else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003304
3305dnl Check if strings.h and string.h can both be included when defined.
3306AC_MSG_CHECKING([if strings.h can be included after string.h])
3307cppflags_save=$CPPFLAGS
3308CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3309AC_TRY_COMPILE([
3310#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3311# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3312 /* but don't do it on AIX 5.1 (Uribarri) */
3313#endif
3314#ifdef HAVE_XM_XM_H
3315# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3316#endif
3317#ifdef HAVE_STRING_H
3318# include <string.h>
3319#endif
3320#if defined(HAVE_STRINGS_H)
3321# include <strings.h>
3322#endif
3323 ], [int i; i = 0;],
3324 AC_MSG_RESULT(yes),
3325 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3326 AC_MSG_RESULT(no))
3327CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003328fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003329
3330dnl Checks for typedefs, structures, and compiler characteristics.
3331AC_PROG_GCC_TRADITIONAL
3332AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003333AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003334AC_TYPE_MODE_T
3335AC_TYPE_OFF_T
3336AC_TYPE_PID_T
3337AC_TYPE_SIZE_T
3338AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003339AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003340
Bram Moolenaar071d4272004-06-13 20:20:40 +00003341AC_HEADER_TIME
3342AC_CHECK_TYPE(ino_t, long)
3343AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003344AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003345AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003346
3347AC_MSG_CHECKING(for rlim_t)
3348if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3349 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3350else
3351 AC_EGREP_CPP(dnl
3352changequote(<<,>>)dnl
3353<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3354changequote([,]),
3355 [
3356#include <sys/types.h>
3357#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003358# include <stdlib.h>
3359# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003360#endif
3361#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003362# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003363#endif
3364 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3365 AC_MSG_RESULT($ac_cv_type_rlim_t)
3366fi
3367if test $ac_cv_type_rlim_t = no; then
3368 cat >> confdefs.h <<\EOF
3369#define rlim_t unsigned long
3370EOF
3371fi
3372
3373AC_MSG_CHECKING(for stack_t)
3374if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3375 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3376else
3377 AC_EGREP_CPP(stack_t,
3378 [
3379#include <sys/types.h>
3380#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003381# include <stdlib.h>
3382# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003383#endif
3384#include <signal.h>
3385 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3386 AC_MSG_RESULT($ac_cv_type_stack_t)
3387fi
3388if test $ac_cv_type_stack_t = no; then
3389 cat >> confdefs.h <<\EOF
3390#define stack_t struct sigaltstack
3391EOF
3392fi
3393
3394dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3395AC_MSG_CHECKING(whether stack_t has an ss_base field)
3396AC_TRY_COMPILE([
3397#include <sys/types.h>
3398#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003399# include <stdlib.h>
3400# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003401#endif
3402#include <signal.h>
3403#include "confdefs.h"
3404 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3405 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3406 AC_MSG_RESULT(no))
3407
3408olibs="$LIBS"
3409AC_MSG_CHECKING(--with-tlib argument)
3410AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3411if test -n "$with_tlib"; then
3412 AC_MSG_RESULT($with_tlib)
3413 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003414 AC_MSG_CHECKING(for linking with $with_tlib library)
3415 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3416 dnl Need to check for tgetent() below.
3417 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003418else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003419 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003420 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3421 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003422 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003423 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003424 dnl Older versions of ncurses have bugs, get a new one!
3425 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003426 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar6840a0f2021-12-13 20:37:59 +00003427 case "$vim_cv_uname_output" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003428 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3429 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003430 esac
3431 for libname in $tlibs; do
3432 AC_CHECK_LIB(${libname}, tgetent,,)
3433 if test "x$olibs" != "x$LIBS"; then
3434 dnl It's possible that a library is found but it doesn't work
3435 dnl e.g., shared library that cannot be found
3436 dnl compile and run a test program to be sure
3437 AC_TRY_RUN([
3438#ifdef HAVE_TERMCAP_H
3439# include <termcap.h>
3440#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003441#if STDC_HEADERS
3442# include <stdlib.h>
3443# include <stddef.h>
3444#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003445main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3446 res="OK", res="FAIL", res="FAIL")
3447 if test "$res" = "OK"; then
3448 break
3449 fi
3450 AC_MSG_RESULT($libname library is not usable)
3451 LIBS="$olibs"
3452 fi
3453 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003454 if test "x$olibs" = "x$LIBS"; then
3455 AC_MSG_RESULT(no terminal library found)
3456 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003457fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003458
3459if test "x$olibs" = "x$LIBS"; then
3460 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaarbd7f7c12020-07-28 21:03:37 +02003461 AC_TRY_LINK([int tgetent(char *, const char *);],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003462 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3463 AC_MSG_RESULT(yes),
3464 AC_MSG_ERROR([NOT FOUND!
3465 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003466 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003467 Or specify the name of the library with --with-tlib.]))
3468fi
3469
Bram Moolenaar446cb832008-06-24 21:56:24 +00003470AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3471 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003472 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003473#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003474#ifdef HAVE_TERMCAP_H
3475# include <termcap.h>
3476#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003477#ifdef HAVE_STRING_H
3478# include <string.h>
3479#endif
3480#if STDC_HEADERS
3481# include <stdlib.h>
3482# include <stddef.h>
3483#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003484main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003485{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003486 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003487 vim_cv_terminfo=no
3488 ],[
3489 vim_cv_terminfo=yes
3490 ],[
3491 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3492 ])
3493 ])
3494
3495if test "x$vim_cv_terminfo" = "xyes" ; then
3496 AC_DEFINE(TERMINFO)
3497fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003498
Bram Moolenaara88254f2017-11-02 23:04:14 +01003499AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003500 [
3501 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003502#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003503#ifdef HAVE_TERMCAP_H
3504# include <termcap.h>
3505#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003506#if STDC_HEADERS
3507# include <stdlib.h>
3508# include <stddef.h>
3509#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003510main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003511{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003512 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003513 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003514 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003515 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003516 ],[
3517 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003518 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003519 ])
3520
Bram Moolenaara88254f2017-11-02 23:04:14 +01003521if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003522 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003523fi
3524
3525AC_MSG_CHECKING(whether termcap.h contains ospeed)
3526AC_TRY_LINK([
3527#ifdef HAVE_TERMCAP_H
3528# include <termcap.h>
3529#endif
3530 ], [ospeed = 20000],
3531 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3532 [AC_MSG_RESULT(no)
3533 AC_MSG_CHECKING(whether ospeed can be extern)
3534 AC_TRY_LINK([
3535#ifdef HAVE_TERMCAP_H
3536# include <termcap.h>
3537#endif
3538extern short ospeed;
3539 ], [ospeed = 20000],
3540 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3541 AC_MSG_RESULT(no))]
3542 )
3543
3544AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3545AC_TRY_LINK([
3546#ifdef HAVE_TERMCAP_H
3547# include <termcap.h>
3548#endif
3549 ], [if (UP == 0 && BC == 0) PC = 1],
3550 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3551 [AC_MSG_RESULT(no)
3552 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3553 AC_TRY_LINK([
3554#ifdef HAVE_TERMCAP_H
3555# include <termcap.h>
3556#endif
3557extern char *UP, *BC, PC;
3558 ], [if (UP == 0 && BC == 0) PC = 1],
3559 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3560 AC_MSG_RESULT(no))]
3561 )
3562
3563AC_MSG_CHECKING(whether tputs() uses outfuntype)
3564AC_TRY_COMPILE([
3565#ifdef HAVE_TERMCAP_H
3566# include <termcap.h>
3567#endif
3568 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3569 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3570 AC_MSG_RESULT(no))
3571
Bram Moolenaarb3a29552021-11-19 11:28:04 +00003572AC_MSG_CHECKING([whether del_curterm() can be used])
3573AC_TRY_LINK([
3574#ifdef HAVE_TERMCAP_H
3575# include <termcap.h>
3576#endif
3577#include <term.h>
3578 ], [if (cur_term) del_curterm(cur_term);],
3579 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
3580 AC_MSG_RESULT(no))
3581
Bram Moolenaar071d4272004-06-13 20:20:40 +00003582dnl On some SCO machines sys/select redefines struct timeval
3583AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3584AC_TRY_COMPILE([
3585#include <sys/types.h>
3586#include <sys/time.h>
3587#include <sys/select.h>], ,
3588 AC_MSG_RESULT(yes)
3589 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3590 AC_MSG_RESULT(no))
3591
3592dnl AC_DECL_SYS_SIGLIST
3593
3594dnl Checks for pty.c (copied from screen) ==========================
3595AC_MSG_CHECKING(for /dev/ptc)
3596if test -r /dev/ptc; then
3597 AC_DEFINE(HAVE_DEV_PTC)
3598 AC_MSG_RESULT(yes)
3599else
3600 AC_MSG_RESULT(no)
3601fi
3602
3603AC_MSG_CHECKING(for SVR4 ptys)
3604if test -c /dev/ptmx ; then
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003605 AC_TRY_LINK([
3606// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3607char *ptsname(int);
3608int unlockpt(int);
3609int grantpt(int);
3610 ], [
3611 ptsname(0);
3612 grantpt(0);
3613 unlockpt(0);],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003614 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3615 AC_MSG_RESULT(no))
3616else
3617 AC_MSG_RESULT(no)
3618fi
3619
3620AC_MSG_CHECKING(for ptyranges)
3621if test -d /dev/ptym ; then
3622 pdir='/dev/ptym'
3623else
3624 pdir='/dev'
3625fi
3626dnl SCO uses ptyp%d
3627AC_EGREP_CPP(yes,
3628[#ifdef M_UNIX
3629 yes;
3630#endif
3631 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3632dnl if test -c /dev/ptyp19; then
3633dnl ptys=`echo /dev/ptyp??`
3634dnl else
3635dnl ptys=`echo $pdir/pty??`
3636dnl fi
3637if test "$ptys" != "$pdir/pty??" ; then
3638 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3639 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3640 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3641 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3642 AC_MSG_RESULT([$p0 / $p1])
3643else
3644 AC_MSG_RESULT([don't know])
3645fi
3646
Bram Moolenaar071d4272004-06-13 20:20:40 +00003647dnl Checks for library functions. ===================================
3648
3649AC_TYPE_SIGNAL
3650
3651dnl find out what to use at the end of a signal function
3652if test $ac_cv_type_signal = void; then
3653 AC_DEFINE(SIGRETURN, [return])
3654else
3655 AC_DEFINE(SIGRETURN, [return 0])
3656fi
3657
3658dnl check if struct sigcontext is defined (used for SGI only)
3659AC_MSG_CHECKING(for struct sigcontext)
3660AC_TRY_COMPILE([
3661#include <signal.h>
3662test_sig()
3663{
3664 struct sigcontext *scont;
3665 scont = (struct sigcontext *)0;
3666 return 1;
3667} ], ,
3668 AC_MSG_RESULT(yes)
3669 AC_DEFINE(HAVE_SIGCONTEXT),
3670 AC_MSG_RESULT(no))
3671
3672dnl tricky stuff: try to find out if getcwd() is implemented with
3673dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003674AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3675 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003676 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003677#include "confdefs.h"
3678#ifdef HAVE_UNISTD_H
3679#include <unistd.h>
3680#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003681char *dagger[] = { "IFS=pwd", 0 };
3682main()
3683{
3684 char buffer[500];
3685 extern char **environ;
3686 environ = dagger;
3687 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003688}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003689 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003690 vim_cv_getcwd_broken=no
3691 ],[
3692 vim_cv_getcwd_broken=yes
3693 ],[
3694 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3695 ])
3696 ])
3697
3698if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3699 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003700 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003701fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003702
Bram Moolenaar25153e12010-02-24 14:47:08 +01003703dnl Check for functions in one big call, to reduce the size of configure.
3704dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003705AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003706 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003707 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003708 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003709 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003710 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3711 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003712AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003713AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003714
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003715dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3716dnl appropriate, so that off_t is 64 bits when needed.
3717AC_SYS_LARGEFILE
3718
Bram Moolenaar21606672019-06-14 20:40:58 +02003719AC_MSG_CHECKING(--enable-canberra argument)
3720AC_ARG_ENABLE(canberra,
3721 [ --disable-canberra Do not use libcanberra.],
3722 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003723
Bram Moolenaar21606672019-06-14 20:40:58 +02003724if test "$enable_canberra" = "maybe"; then
3725 if test "$features" = "big" -o "$features" = "huge"; then
3726 AC_MSG_RESULT(Defaulting to yes)
3727 enable_canberra="yes"
3728 else
3729 AC_MSG_RESULT(Defaulting to no)
3730 enable_canberra="no"
3731 fi
3732else
Bram Moolenaar12471262022-01-18 11:11:25 +00003733 if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
3734 AC_MSG_RESULT([cannot use sound with tiny or small features])
3735 enable_canberra="no"
3736 else
3737 AC_MSG_RESULT($enable_canberra)
3738 fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003739fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003740if test "$enable_canberra" = "yes"; then
3741 if test "x$PKG_CONFIG" != "xno"; then
3742 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3743 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3744 fi
3745 if test "x$canberra_lib" = "x"; then
3746 canberra_lib=-lcanberra
3747 canberra_cflags=-D_REENTRANT
3748 fi
3749 AC_MSG_CHECKING(for libcanberra)
3750 ac_save_CFLAGS="$CFLAGS"
3751 ac_save_LIBS="$LIBS"
Bram Moolenaar12471262022-01-18 11:11:25 +00003752 if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003753 CFLAGS="$CFLAGS $canberra_cflags"
3754 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003755 LIBS="$LIBS $canberra_lib"
3756 AC_TRY_LINK([
3757 # include <canberra.h>
3758 ], [
3759 ca_context *hello;
3760 ca_context_create(&hello);],
3761 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003762 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003763fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003764
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003765AC_MSG_CHECKING(--enable-libsodium argument)
3766AC_ARG_ENABLE(libsodium,
3767 [ --disable-libsodium Do not use libsodium.],
3768 , [enable_libsodium="maybe"])
3769
3770if test "$enable_libsodium" = "maybe"; then
3771 if test "$features" = "big" -o "$features" = "huge"; then
3772 AC_MSG_RESULT(Defaulting to yes)
3773 enable_libsodium="yes"
3774 else
3775 AC_MSG_RESULT(Defaulting to no)
3776 enable_libsodium="no"
3777 fi
3778else
3779 AC_MSG_RESULT($enable_libsodium)
3780fi
3781if test "$enable_libsodium" = "yes"; then
3782 if test "x$PKG_CONFIG" != "xno"; then
3783 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3784 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3785 fi
3786 if test "x$libsodium_lib" = "x"; then
3787 libsodium_lib=-lsodium
3788 libsodium_cflags=
3789 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003790 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003791 ac_save_CFLAGS="$CFLAGS"
3792 ac_save_LIBS="$LIBS"
3793 CFLAGS="$CFLAGS $libsodium_cflags"
3794 LIBS="$LIBS $libsodium_lib"
3795 AC_TRY_LINK([
3796 # include <sodium.h>
3797 ], [
3798 printf("%d", sodium_init()); ],
3799 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3800 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3801fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003802
Bram Moolenaar071d4272004-06-13 20:20:40 +00003803dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3804AC_MSG_CHECKING(for st_blksize)
3805AC_TRY_COMPILE(
3806[#include <sys/types.h>
3807#include <sys/stat.h>],
3808[ struct stat st;
3809 int n;
3810
3811 stat("/", &st);
3812 n = (int)st.st_blksize;],
3813 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3814 AC_MSG_RESULT(no))
3815
Paul Ollis65745772022-06-05 16:55:54 +01003816dnl Check for timer_create. It probably requires the 'rt' library.
3817AC_MSG_CHECKING([for timer_create])
3818save_LIBS="$LIBS"
3819LIBS="$LIBS -lrt"
3820AC_TRY_LINK([
3821#include<signal.h>
3822#include<time.h>
3823static void set_flag(union sigval) {}
3824], [
3825 struct timespec ts;
3826 struct sigevent action = {0};
3827 timer_t timer_id;
3828
3829 action.sigev_notify = SIGEV_THREAD;
3830 action.sigev_notify_function = set_flag;
3831 timer_create(CLOCK_REALTIME, &action, &timer_id);
3832 ],
3833 AC_MSG_RESULT(yes; with -lrt); AC_DEFINE(HAVE_TIMER_CREATE),
3834 LIBS="$save_LIBS"
3835 AC_TRY_LINK([
3836#include<signal.h>
3837#include<time.h>
3838static void set_flag(union sigval) {}
3839 ], [
3840 struct timespec ts;
3841 struct sigevent action = {0};
3842 timer_t timer_id;
3843
3844 action.sigev_notify = SIGEV_THREAD;
3845 action.sigev_notify_function = set_flag;
3846 timer_create(CLOCK_REALTIME, &action, &timer_id);
3847 ],
3848 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIMER_CREATE),
3849 AC_MSG_RESULT(no)))
3850
Bram Moolenaar446cb832008-06-24 21:56:24 +00003851AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3852 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003853 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003854#include "confdefs.h"
3855#if STDC_HEADERS
3856# include <stdlib.h>
3857# include <stddef.h>
3858#endif
3859#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003860#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003861main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003862 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003863 vim_cv_stat_ignores_slash=yes
3864 ],[
3865 vim_cv_stat_ignores_slash=no
3866 ],[
3867 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3868 ])
3869 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003870
Bram Moolenaar446cb832008-06-24 21:56:24 +00003871if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3872 AC_DEFINE(STAT_IGNORES_SLASH)
3873fi
Leah Neukirchen0a7984a2021-10-14 21:27:55 +01003874
3875dnl nanoseconds field of struct stat
3876AC_CACHE_CHECK([for nanoseconds field of struct stat],
3877 ac_cv_struct_st_mtim_nsec,
3878 [ac_save_CPPFLAGS="$CPPFLAGS"
3879 ac_cv_struct_st_mtim_nsec=no
3880 # st_mtim.tv_nsec -- the usual case
3881 # st_mtim._tv_nsec -- Solaris 2.6, if
3882 # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1
3883 # && !defined __EXTENSIONS__)
3884 # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2
3885 # st_mtime_n -- AIX 5.2 and above
3886 # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
3887 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
3888 CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
3889 AC_TRY_COMPILE([#include <sys/types.h>
3890#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;],
3891 [ac_cv_struct_st_mtim_nsec=$ac_val; break])
3892 done
3893 CPPFLAGS="$ac_save_CPPFLAGS"
3894])
3895if test $ac_cv_struct_st_mtim_nsec != no; then
3896 AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],
3897 [Define if struct stat contains a nanoseconds field])
3898fi
Bram Moolenaar446cb832008-06-24 21:56:24 +00003899
Bram Moolenaar071d4272004-06-13 20:20:40 +00003900dnl Link with iconv for charset translation, if not found without library.
3901dnl check for iconv() requires including iconv.h
3902dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3903dnl has been installed.
3904AC_MSG_CHECKING(for iconv_open())
3905save_LIBS="$LIBS"
3906LIBS="$LIBS -liconv"
3907AC_TRY_LINK([
3908#ifdef HAVE_ICONV_H
3909# include <iconv.h>
3910#endif
3911 ], [iconv_open("fr", "to");],
3912 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3913 LIBS="$save_LIBS"
3914 AC_TRY_LINK([
3915#ifdef HAVE_ICONV_H
3916# include <iconv.h>
3917#endif
3918 ], [iconv_open("fr", "to");],
3919 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3920 AC_MSG_RESULT(no)))
3921
3922
3923AC_MSG_CHECKING(for nl_langinfo(CODESET))
3924AC_TRY_LINK([
3925#ifdef HAVE_LANGINFO_H
3926# include <langinfo.h>
3927#endif
3928], [char *cs = nl_langinfo(CODESET);],
3929 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3930 AC_MSG_RESULT(no))
3931
Bram Moolenaar446cb832008-06-24 21:56:24 +00003932dnl Need various functions for floating point support. Only enable
3933dnl floating point when they are all present.
3934AC_CHECK_LIB(m, strtod)
3935AC_MSG_CHECKING([for strtod() and other floating point functions])
3936AC_TRY_LINK([
3937#ifdef HAVE_MATH_H
3938# include <math.h>
3939#endif
3940#if STDC_HEADERS
3941# include <stdlib.h>
3942# include <stddef.h>
3943#endif
3944], [char *s; double d;
3945 d = strtod("1.1", &s);
3946 d = fabs(1.11);
3947 d = ceil(1.11);
3948 d = floor(1.11);
3949 d = log10(1.11);
3950 d = pow(1.11, 2.22);
3951 d = sqrt(1.11);
3952 d = sin(1.11);
3953 d = cos(1.11);
3954 d = atan(1.11);
3955 ],
3956 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3957 AC_MSG_RESULT(no))
3958
Bram Moolenaara6b89762016-02-29 21:38:26 +01003959dnl isinf() and isnan() need to include header files and may need -lm.
3960AC_MSG_CHECKING([for isinf()])
3961AC_TRY_LINK([
3962#ifdef HAVE_MATH_H
3963# include <math.h>
3964#endif
3965#if STDC_HEADERS
3966# include <stdlib.h>
3967# include <stddef.h>
3968#endif
3969], [int r = isinf(1.11); ],
3970 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3971 AC_MSG_RESULT(no))
3972
3973AC_MSG_CHECKING([for isnan()])
3974AC_TRY_LINK([
3975#ifdef HAVE_MATH_H
3976# include <math.h>
3977#endif
3978#if STDC_HEADERS
3979# include <stdlib.h>
3980# include <stddef.h>
3981#endif
3982], [int r = isnan(1.11); ],
3983 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3984 AC_MSG_RESULT(no))
3985
Bram Moolenaar071d4272004-06-13 20:20:40 +00003986dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3987dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003988dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003989AC_MSG_CHECKING(--disable-acl argument)
3990AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003991 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003992 , [enable_acl="yes"])
3993if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003994 AC_MSG_RESULT(no)
3995 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003996 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3997 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3998
Bram Moolenaard6d30422018-01-28 22:48:55 +01003999 AC_MSG_CHECKING(for POSIX ACL support)
4000 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004001#include <sys/types.h>
4002#ifdef HAVE_SYS_ACL_H
4003# include <sys/acl.h>
4004#endif
4005acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
4006 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
4007 acl_free(acl);],
4008 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
4009 AC_MSG_RESULT(no))
4010
Bram Moolenaard6d30422018-01-28 22:48:55 +01004011 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
4012 AC_MSG_CHECKING(for Solaris ACL support)
4013 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00004014#ifdef HAVE_SYS_ACL_H
4015# include <sys/acl.h>
4016#endif], [acl("foo", GETACLCNT, 0, NULL);
4017 ],
4018 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01004019 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00004020
Bram Moolenaard6d30422018-01-28 22:48:55 +01004021 AC_MSG_CHECKING(for AIX ACL support)
4022 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00004023#if STDC_HEADERS
4024# include <stdlib.h>
4025# include <stddef.h>
4026#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004027#ifdef HAVE_SYS_ACL_H
4028# include <sys/acl.h>
4029#endif
4030#ifdef HAVE_SYS_ACCESS_H
4031# include <sys/access.h>
4032#endif
4033#define _ALL_SOURCE
4034
4035#include <sys/stat.h>
4036
4037int aclsize;
4038struct acl *aclent;], [aclsize = sizeof(struct acl);
4039 aclent = (void *)malloc(aclsize);
4040 statacl("foo", STX_NORMAL, aclent, aclsize);
4041 ],
4042 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
4043 AC_MSG_RESULT(no))
4044else
4045 AC_MSG_RESULT(yes)
4046fi
4047
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004048if test "x$GTK_CFLAGS" != "x"; then
4049 dnl pango_shape_full() is new, fall back to pango_shape().
4050 AC_MSG_CHECKING(for pango_shape_full)
4051 ac_save_CFLAGS="$CFLAGS"
4052 ac_save_LIBS="$LIBS"
4053 CFLAGS="$CFLAGS $GTK_CFLAGS"
4054 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02004055 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004056 [#include <gtk/gtk.h>],
4057 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
4058 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4059 AC_MSG_RESULT(no))
4060 CFLAGS="$ac_save_CFLAGS"
4061 LIBS="$ac_save_LIBS"
4062fi
4063
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004064AC_MSG_CHECKING(--enable-gpm argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004065AC_ARG_ENABLE(gpm,
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004066 [ --enable-gpm=OPTS Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00004067 [enable_gpm="yes"])
4068
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004069if test "$enable_gpm" = "yes" -o "$enable_gpm" = "dynamic"; then
4070 AC_MSG_RESULT($enable_gpm)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004071 dnl Checking if gpm support can be compiled
4072 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4073 [olibs="$LIBS" ; LIBS="-lgpm"]
4074 AC_TRY_LINK(
4075 [#include <gpm.h>
4076 #include <linux/keyboard.h>],
4077 [Gpm_GetLibVersion(NULL);],
4078 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4079 dnl FEAT_MOUSE_GPM if mouse support is included
4080 [vi_cv_have_gpm=yes],
4081 [vi_cv_have_gpm=no])
4082 [LIBS="$olibs"]
4083 )
4084 if test $vi_cv_have_gpm = yes; then
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004085 if test "$enable_gpm" = "yes"; then
4086 LIBS="$LIBS -lgpm"
4087 else
4088 AC_DEFINE(DYNAMIC_GPM)
4089 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004090 AC_DEFINE(HAVE_GPM)
4091 fi
4092else
Bram Moolenaar33fc4a62022-02-23 18:07:38 +00004093 AC_MSG_RESULT(no)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004094fi
4095
Bram Moolenaar446cb832008-06-24 21:56:24 +00004096AC_MSG_CHECKING(--disable-sysmouse argument)
4097AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004098 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004099 [enable_sysmouse="yes"])
4100
4101if test "$enable_sysmouse" = "yes"; then
4102 AC_MSG_RESULT(no)
4103 dnl Checking if sysmouse support can be compiled
4104 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4105 dnl defines FEAT_SYSMOUSE if mouse support is included
4106 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
4107 AC_TRY_LINK(
4108 [#include <sys/consio.h>
4109 #include <signal.h>
4110 #include <sys/fbio.h>],
4111 [struct mouse_info mouse;
4112 mouse.operation = MOUSE_MODE;
4113 mouse.operation = MOUSE_SHOW;
4114 mouse.u.mode.mode = 0;
4115 mouse.u.mode.signal = SIGUSR2;],
4116 [vi_cv_have_sysmouse=yes],
4117 [vi_cv_have_sysmouse=no])
4118 )
4119 if test $vi_cv_have_sysmouse = yes; then
4120 AC_DEFINE(HAVE_SYSMOUSE)
4121 fi
4122else
4123 AC_MSG_RESULT(yes)
4124fi
4125
Bram Moolenaarf05da212009-11-17 16:13:15 +00004126dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4127AC_MSG_CHECKING(for FD_CLOEXEC)
4128AC_TRY_COMPILE(
4129[#if HAVE_FCNTL_H
4130# include <fcntl.h>
4131#endif],
4132[ int flag = FD_CLOEXEC;],
4133 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4134 AC_MSG_RESULT(not usable))
4135
Bram Moolenaar071d4272004-06-13 20:20:40 +00004136dnl rename needs to be checked separately to work on Nextstep with cc
4137AC_MSG_CHECKING(for rename)
4138AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4139 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4140 AC_MSG_RESULT(no))
4141
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004142dnl check for dirfd()
4143AC_MSG_CHECKING(for dirfd)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004144AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004145[#include <sys/types.h>
4146#include <dirent.h>],
4147[DIR * dir=opendir("dirname"); dirfd(dir);],
4148AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4149
4150dnl check for flock()
4151AC_MSG_CHECKING(for flock)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004152AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004153[#include <sys/file.h>],
4154[flock(10, LOCK_SH);],
4155AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4156
Bram Moolenaar071d4272004-06-13 20:20:40 +00004157dnl sysctl() may exist but not the arguments we use
4158AC_MSG_CHECKING(for sysctl)
4159AC_TRY_COMPILE(
4160[#include <sys/types.h>
4161#include <sys/sysctl.h>],
4162[ int mib[2], r;
4163 size_t len;
4164
4165 mib[0] = CTL_HW;
4166 mib[1] = HW_USERMEM;
4167 len = sizeof(r);
4168 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4169 ],
4170 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4171 AC_MSG_RESULT(not usable))
4172
Bram Moolenaare2982d62021-10-06 11:27:21 +01004173dnl sysinfo() may exist but not be Linux compatible.
4174dnl On some FreeBSD systems it may depend on libsysinfo, use TRY_LINK
Bram Moolenaar071d4272004-06-13 20:20:40 +00004175AC_MSG_CHECKING(for sysinfo)
Bram Moolenaare2982d62021-10-06 11:27:21 +01004176AC_TRY_LINK(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004177[#include <sys/types.h>
4178#include <sys/sysinfo.h>],
4179[ struct sysinfo sinfo;
4180 int t;
4181
4182 (void)sysinfo(&sinfo);
4183 t = sinfo.totalram;
4184 ],
4185 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4186 AC_MSG_RESULT(not usable))
4187
Bram Moolenaar914572a2007-05-01 11:37:47 +00004188dnl struct sysinfo may have the mem_unit field or not
4189AC_MSG_CHECKING(for sysinfo.mem_unit)
4190AC_TRY_COMPILE(
4191[#include <sys/types.h>
4192#include <sys/sysinfo.h>],
4193[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004194 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00004195 ],
4196 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4197 AC_MSG_RESULT(no))
4198
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004199dnl struct sysinfo may have the uptime field or not
4200AC_MSG_CHECKING(for sysinfo.uptime)
4201AC_TRY_COMPILE(
4202[#include <sys/types.h>
4203#include <sys/sysinfo.h>],
4204[ struct sysinfo sinfo;
4205 long ut;
4206
4207 (void)sysinfo(&sinfo);
4208 ut = sinfo.uptime;
4209 ],
4210 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4211 AC_MSG_RESULT(no))
4212
Bram Moolenaar071d4272004-06-13 20:20:40 +00004213dnl sysconf() may exist but not support what we want to use
4214AC_MSG_CHECKING(for sysconf)
4215AC_TRY_COMPILE(
4216[#include <unistd.h>],
4217[ (void)sysconf(_SC_PAGESIZE);
4218 (void)sysconf(_SC_PHYS_PAGES);
4219 ],
4220 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4221 AC_MSG_RESULT(not usable))
4222
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004223dnl check if we have _SC_SIGSTKSZ via sysconf()
4224AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
4225AC_TRY_COMPILE(
4226[#include <unistd.h>],
4227[ (void)sysconf(_SC_SIGSTKSZ);
4228 ],
4229 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4230 AC_MSG_RESULT(not usable))
4231
Bram Moolenaar914703b2010-05-31 21:59:46 +02004232AC_CHECK_SIZEOF([int])
4233AC_CHECK_SIZEOF([long])
4234AC_CHECK_SIZEOF([time_t])
4235AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004236
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004237dnl Use different names to avoid clashing with other header files.
4238AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4239AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4240
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004241dnl Make sure that uint32_t is really 32 bits unsigned.
4242AC_MSG_CHECKING([uint32_t is 32 bits])
4243AC_TRY_RUN([
4244#ifdef HAVE_STDINT_H
4245# include <stdint.h>
4246#endif
4247#ifdef HAVE_INTTYPES_H
4248# include <inttypes.h>
4249#endif
4250main() {
4251 uint32_t nr1 = (uint32_t)-1;
4252 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004253 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4254 return 0;
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004255}],
4256AC_MSG_RESULT(ok),
4257AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004258AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004259
Bram Moolenaar446cb832008-06-24 21:56:24 +00004260dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4261dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4262
Bram Moolenaar071d4272004-06-13 20:20:40 +00004263[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004264#include "confdefs.h"
4265#ifdef HAVE_STRING_H
4266# include <string.h>
4267#endif
4268#if STDC_HEADERS
4269# include <stdlib.h>
4270# include <stddef.h>
4271#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004272main() {
4273 char buf[10];
4274 strcpy(buf, "abcdefghi");
4275 mch_memmove(buf, buf + 2, 3);
4276 if (strncmp(buf, "ababcf", 6))
4277 exit(1);
4278 strcpy(buf, "abcdefghi");
4279 mch_memmove(buf + 2, buf, 3);
4280 if (strncmp(buf, "cdedef", 6))
4281 exit(1);
4282 exit(0); /* libc version works properly. */
4283}']
4284
Bram Moolenaar446cb832008-06-24 21:56:24 +00004285AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4286 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004287 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 +00004288 [
4289 vim_cv_memmove_handles_overlap=yes
4290 ],[
4291 vim_cv_memmove_handles_overlap=no
4292 ],[
4293 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4294 ])
4295 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004296
Bram Moolenaar446cb832008-06-24 21:56:24 +00004297if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4298 AC_DEFINE(USEMEMMOVE)
4299else
4300 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4301 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004302 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 +00004303 [
4304 vim_cv_bcopy_handles_overlap=yes
4305 ],[
4306 vim_cv_bcopy_handles_overlap=no
4307 ],[
4308 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4309 ])
4310 ])
4311
4312 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4313 AC_DEFINE(USEBCOPY)
4314 else
4315 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4316 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004317 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 +00004318 [
4319 vim_cv_memcpy_handles_overlap=yes
4320 ],[
4321 vim_cv_memcpy_handles_overlap=no
4322 ],[
4323 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4324 ])
4325 ])
4326
4327 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4328 AC_DEFINE(USEMEMCPY)
4329 fi
4330 fi
4331fi
4332
Bram Moolenaar071d4272004-06-13 20:20:40 +00004333
4334dnl Check for multibyte locale functions
4335dnl Find out if _Xsetlocale() is supported by libX11.
4336dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004337if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004338 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004339 libs_save=$LIBS
4340 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4341 CFLAGS="$CFLAGS $X_CFLAGS"
4342
4343 AC_MSG_CHECKING(whether X_LOCALE needed)
4344 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4345 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4346 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4347 AC_MSG_RESULT(no))
4348
4349 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4350 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4351 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4352
Bram Moolenaar071d4272004-06-13 20:20:40 +00004353 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004354 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004355fi
4356
4357dnl Link with xpg4, it is said to make Korean locale working
4358AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4359
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004360dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004361dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004362dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004363dnl -t for typedefs (many ctags have this)
4364dnl -s for static functions (Elvis ctags only?)
4365dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4366dnl -i+m to test for older Exuberant ctags
4367AC_MSG_CHECKING(how to create tags)
4368test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004369if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004370 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004371elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004372 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004373elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004374 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004375else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004376 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004377 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4378 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4379 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4380 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4381 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4382 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4383 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4384fi
4385test -f tags.save && mv tags.save tags
4386AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4387
4388dnl Check how we can run man with a section number
4389AC_MSG_CHECKING(how to run man with a section nr)
4390MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004391(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AC_FD_CC && MANDEF="man -s"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004392AC_MSG_RESULT($MANDEF)
4393if test "$MANDEF" = "man -s"; then
4394 AC_DEFINE(USEMAN_S)
4395fi
4396
4397dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004398dnl We take care to base this on an empty LIBS: on some systems libelf would be
4399dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4400dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004401AC_MSG_CHECKING(--disable-nls argument)
4402AC_ARG_ENABLE(nls,
4403 [ --disable-nls Don't support NLS (gettext()).], ,
4404 [enable_nls="yes"])
4405
4406if test "$enable_nls" = "yes"; then
4407 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004408
4409 INSTALL_LANGS=install-languages
4410 AC_SUBST(INSTALL_LANGS)
4411 INSTALL_TOOL_LANGS=install-tool-languages
4412 AC_SUBST(INSTALL_TOOL_LANGS)
4413
Bram Moolenaar071d4272004-06-13 20:20:40 +00004414 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4415 AC_MSG_CHECKING([for NLS])
4416 if test -f po/Makefile; then
4417 have_gettext="no"
4418 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004419 olibs=$LIBS
4420 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004421 AC_TRY_LINK(
4422 [#include <libintl.h>],
4423 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004424 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4425 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004426 AC_TRY_LINK(
4427 [#include <libintl.h>],
4428 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004429 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4430 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004431 AC_MSG_RESULT([gettext() doesn't work]);
4432 LIBS=$olibs))
4433 else
4434 AC_MSG_RESULT([msgfmt not found - disabled]);
4435 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004436 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004437 AC_DEFINE(HAVE_GETTEXT)
4438 MAKEMO=yes
4439 AC_SUBST(MAKEMO)
4440 dnl this was added in GNU gettext 0.10.36
4441 AC_CHECK_FUNCS(bind_textdomain_codeset)
4442 dnl _nl_msg_cat_cntr is required for GNU gettext
4443 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4444 AC_TRY_LINK(
4445 [#include <libintl.h>
4446 extern int _nl_msg_cat_cntr;],
4447 [++_nl_msg_cat_cntr;],
4448 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4449 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004450 AC_MSG_CHECKING([if msgfmt supports --desktop])
4451 MSGFMT_DESKTOP=
4452 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004453 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4454 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4455 dnl 0.19.3 is also broken.
4456 AC_MSG_RESULT([broken])
4457 else
4458 AC_MSG_RESULT([yes])
4459 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4460 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004461 else
4462 AC_MSG_RESULT([no])
4463 fi
4464 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004465 fi
4466 else
4467 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4468 fi
4469else
4470 AC_MSG_RESULT(yes)
4471fi
4472
4473dnl Check for dynamic linking loader
4474AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4475if test x${DLL} = xdlfcn.h; then
4476 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4477 AC_MSG_CHECKING([for dlopen()])
4478 AC_TRY_LINK(,[
4479 extern void* dlopen();
4480 dlopen();
4481 ],
4482 AC_MSG_RESULT(yes);
4483 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4484 AC_MSG_RESULT(no);
4485 AC_MSG_CHECKING([for dlopen() in -ldl])
4486 olibs=$LIBS
4487 LIBS="$LIBS -ldl"
4488 AC_TRY_LINK(,[
4489 extern void* dlopen();
4490 dlopen();
4491 ],
4492 AC_MSG_RESULT(yes);
4493 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4494 AC_MSG_RESULT(no);
4495 LIBS=$olibs))
4496 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4497 dnl ick :-)
4498 AC_MSG_CHECKING([for dlsym()])
4499 AC_TRY_LINK(,[
4500 extern void* dlsym();
4501 dlsym();
4502 ],
4503 AC_MSG_RESULT(yes);
4504 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4505 AC_MSG_RESULT(no);
4506 AC_MSG_CHECKING([for dlsym() in -ldl])
4507 olibs=$LIBS
4508 LIBS="$LIBS -ldl"
4509 AC_TRY_LINK(,[
4510 extern void* dlsym();
4511 dlsym();
4512 ],
4513 AC_MSG_RESULT(yes);
4514 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4515 AC_MSG_RESULT(no);
4516 LIBS=$olibs))
4517elif test x${DLL} = xdl.h; then
4518 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4519 AC_MSG_CHECKING([for shl_load()])
4520 AC_TRY_LINK(,[
4521 extern void* shl_load();
4522 shl_load();
4523 ],
4524 AC_MSG_RESULT(yes);
4525 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4526 AC_MSG_RESULT(no);
4527 AC_MSG_CHECKING([for shl_load() in -ldld])
4528 olibs=$LIBS
4529 LIBS="$LIBS -ldld"
4530 AC_TRY_LINK(,[
4531 extern void* shl_load();
4532 shl_load();
4533 ],
4534 AC_MSG_RESULT(yes);
4535 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4536 AC_MSG_RESULT(no);
4537 LIBS=$olibs))
4538fi
4539AC_CHECK_HEADERS(setjmp.h)
4540
Bram Moolenaard0573012017-10-28 21:11:06 +02004541if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004542 dnl -ldl must come after DynaLoader.a
4543 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4544 LIBS=`echo $LIBS | sed s/-ldl//`
4545 PERL_LIBS="$PERL_LIBS -ldl"
4546 fi
4547fi
4548
Bram Moolenaard0573012017-10-28 21:11:06 +02004549if test "$MACOS_X" = "yes"; then
4550 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004551 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004552 if test "$features" = "tiny"; then
4553 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4554 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4555 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004556 AC_MSG_RESULT([yes, we need CoreServices])
4557 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004558 else
4559 AC_MSG_RESULT([yes, we need AppKit])
4560 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004561 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004562 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004563 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004564 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004565fi
4566
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004567dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4568dnl it everywhere.
4569if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4570 CFLAGS="$CFLAGS -D_REENTRANT"
4571fi
4572
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004573dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4574dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4575dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004576dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4577dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004578DEPEND_CFLAGS_FILTER=
4579if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004580 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004581 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004582 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004583 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004584 AC_MSG_RESULT(yes)
4585 else
4586 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004587 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004588 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4589 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004590 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004591 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004592 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4593 if test "$gccmajor" -gt "3"; then
Bram Moolenaar26f20132021-04-03 17:33:52 +02004594 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/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
4595 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/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004596 AC_MSG_RESULT(yes)
4597 else
4598 AC_MSG_RESULT(no)
4599 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004600fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004601AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004602
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004603dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4604dnl isn't required, but the CFLAGS for some of the libraries we're using
4605dnl include the define. Since the define changes the size of some datatypes
4606dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4607dnl consistent value. It's therefore safest to force the use of the define
4608dnl if it's present in any of the *_CFLAGS variables.
4609AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004610if 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 +01004611 AC_MSG_RESULT(yes)
4612 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4613else
4614 AC_MSG_RESULT(no)
4615fi
4616
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004617dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4618dnl between "-L" and the path that follows.
4619LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4620
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004621dnl link.sh tries to avoid overlinking in a hackish way.
4622dnl At least GNU ld supports --as-needed which provides the same functionality
4623dnl at linker level. Let's use it.
4624AC_MSG_CHECKING(linker --as-needed support)
4625LINK_AS_NEEDED=
4626# Check if linker supports --as-needed and --no-as-needed options
4627if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004628 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4629 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4630 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004631 LINK_AS_NEEDED=yes
4632fi
4633if test "$LINK_AS_NEEDED" = yes; then
4634 AC_MSG_RESULT(yes)
4635else
4636 AC_MSG_RESULT(no)
4637fi
4638AC_SUBST(LINK_AS_NEEDED)
4639
Bram Moolenaar77c19352012-06-13 19:19:41 +02004640# IBM z/OS reset CFLAGS for config.mk
4641if test "$zOSUnix" = "yes"; then
4642 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4643fi
4644
Bram Moolenaar071d4272004-06-13 20:20:40 +00004645dnl write output files
4646AC_OUTPUT(auto/config.mk:config.mk.in)
4647
4648dnl vim: set sw=2 tw=78 fo+=l: