blob: 798e9b8942ae19bf5533a23baede59c0dda18f67 [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
3dnl Process this file with autoconf 2.12 or 2.13 to produce "configure".
4dnl Should also work with autoconf 2.54 and later.
5
6AC_INIT(vim.h)
7AC_CONFIG_HEADER(auto/config.h:config.h.in)
8
9dnl Being able to run configure means the system is Unix (compatible).
10AC_DEFINE(UNIX)
11AC_PROG_MAKE_SET
12
13dnl Checks for programs.
Bram Moolenaar22640082018-04-19 20:39:41 +020014AC_PROG_CC_C99 dnl required by almost everything
Bram Moolenaarc0394412017-04-20 20:20:23 +020015AC_PROG_CPP dnl required by header file checks
16AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
17AC_PROG_FGREP dnl finds working grep -F
18AC_ISC_POSIX dnl required by AC_C_CROSS
19AC_PROG_AWK dnl required for "make html" in ../doc
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21dnl Don't strip if we don't have it
22AC_CHECK_PROG(STRIP, strip, strip, :)
23
Bram Moolenaar325b7a22004-07-05 15:58:32 +000024dnl Check for extension of executables
Bram Moolenaar071d4272004-06-13 20:20:40 +000025AC_EXEEXT
26
Bram Moolenaar446cb832008-06-24 21:56:24 +000027dnl Check for standard headers. We don't use this in Vim but other stuff
28dnl in autoconf needs it, where it uses STDC_HEADERS.
29AC_HEADER_STDC
30AC_HEADER_SYS_WAIT
31
Bram Moolenaar561f8a52018-04-17 22:02:45 +020032dnl Check that the C99 features that Vim uses are supported:
Bram Moolenaar22640082018-04-19 20:39:41 +020033if test x"$ac_cv_prog_cc_c99" != xno; then
34 dnl If the compiler doesn't explicitly support C99, then check
35 dnl for the specific features Vim uses
36
37 AC_TYPE_LONG_LONG_INT
38 if test "$ac_cv_type_long_long_int" = no; then
39 AC_MSG_FAILURE([Compiler does not support long long int])
40 fi
41
42 AC_MSG_CHECKING([if the compiler supports trailing commas])
43 trailing_commas=no
44 AC_TRY_COMPILE([], [
45 enum {
46 one,
47 };],
48 [AC_MSG_RESULT(yes); trailing_commas=yes],
49 [AC_MSG_RESULT(no)])
50 if test "$trailing_commas" = no; then
51 AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
52 fi
53
54 AC_MSG_CHECKING([if the compiler supports C++ comments])
55 slash_comments=no
56 AC_TRY_COMPILE([],
57 [// C++ comments?],
58 [AC_MSG_RESULT(yes); slash_comments=yes],
59 [AC_MSG_RESULT(no)])
60 if test "$slash_comments" = no; then
61 AC_MSG_FAILURE([Compiler does not support C++ comments])
62 fi
63fi
Bram Moolenaar561f8a52018-04-17 22:02:45 +020064
Bram Moolenaar8f1dde52020-06-05 23:16:29 +020065dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
66dnl "compiled" timestamp in :version's output. Attempt to get the formatted
67dnl date using GNU date syntax, BSD date syntax, and finally falling back to
68dnl just using the current time.
69if test -n "$SOURCE_DATE_EPOCH"; then
70 DATE_FMT="%b %d %Y %H:%M:%S"
71 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")
72 AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
73 BUILD_DATE_MSG=-"echo -e '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNOTE: build date/time is fixed: $BUILD_DATE\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='"
74 AC_SUBST(BUILD_DATE_MSG)
75fi
76
Bram Moolenaarf788a062011-12-14 20:51:25 +010077dnl Check for the flag that fails if stuff are missing.
78
79AC_MSG_CHECKING(--enable-fail-if-missing argument)
80AC_ARG_ENABLE(fail_if_missing,
81 [ --enable-fail-if-missing Fail if dependencies on additional features
82 specified on the command line are missing.],
83 [fail_if_missing="yes"],
84 [fail_if_missing="no"])
85AC_MSG_RESULT($fail_if_missing)
86
Bram Moolenaard2a05492018-07-27 22:35:15 +020087dnl Keep original value to check later.
88with_x_arg="$with_x"
89
Bram Moolenaar071d4272004-06-13 20:20:40 +000090dnl Set default value for CFLAGS if none is defined or it's empty
91if test -z "$CFLAGS"; then
92 CFLAGS="-O"
Bram Moolenaar4d8479b2021-01-31 14:36:06 +010093 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall -Wno-deprecated-declarations"
Bram Moolenaar071d4272004-06-13 20:20:40 +000094fi
95if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000096 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020097 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000098 if test "x$gccversion" = "x"; then
99 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +0200100 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 +0000101 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +0000102 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
103 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000104 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
106 else
107 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
108 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
109 CFLAGS="$CFLAGS -fno-strength-reduce"
110 fi
111 fi
112fi
113
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200114dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
115dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
116dnl the version number of the clang in use.
117dnl Note that this does not work to get the version of clang 3.1 or 3.2.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100118AC_MSG_CHECKING(for clang version)
119CLANG_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 +0200120if test x"$CLANG_VERSION_STRING" != x"" ; then
121 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
122 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
123 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
124 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
125 AC_MSG_RESULT($CLANG_VERSION)
126 dnl If you find the same issue with versions earlier than 500.2.75,
127 dnl change the constant 500002075 below appropriately. To get the
128 dnl integer corresponding to a version number, refer to the
129 dnl definition of CLANG_VERSION above.
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100130 dnl Clang 11 reports "11", assume Clang 10 and later work like this.
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100131 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaarebd211c2021-01-30 19:33:36 +0100132 if test "$CLANG_MAJOR" -ge 10 -o "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100133 AC_MSG_RESULT(no)
134 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
135 else
136 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200137 fi
138else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100139 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200140fi
141
Bram Moolenaar446cb832008-06-24 21:56:24 +0000142dnl If configure thinks we are cross compiling, there might be something
143dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200144CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000146 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200147 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200149AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000151dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
152dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
154
155if test -f ./toolcheck; then
156 AC_CHECKING(for buggy tools)
157 sh ./toolcheck 1>&AC_FD_MSG
158fi
159
160OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
161
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100162AC_MSG_CHECKING(for Haiku)
163case `uname` in
164 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
165 *) HAIKU=no; AC_MSG_RESULT(no);;
166esac
167
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168dnl If QNX is found, assume we don't want to use Xphoton
169dnl unless it was specifically asked for (--with-x)
170AC_MSG_CHECKING(for QNX)
171case `uname` in
172 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
173 test -z "$with_x" && with_x=no
174 QNX=yes; AC_MSG_RESULT(yes);;
175 *) QNX=no; AC_MSG_RESULT(no);;
176esac
177
178dnl Check for Darwin and MacOS X
179dnl We do a check for MacOS X in the very beginning because there
180dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181AC_MSG_CHECKING([for Darwin (Mac OS X)])
182if test "`(uname) 2>/dev/null`" = Darwin; then
183 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200184 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200185 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186
187 AC_MSG_CHECKING(--disable-darwin argument)
188 AC_ARG_ENABLE(darwin,
189 [ --disable-darwin Disable Darwin (Mac OS X) support.],
190 , [enable_darwin="yes"])
191 if test "$enable_darwin" = "yes"; then
192 AC_MSG_RESULT(no)
193 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200194 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195 AC_MSG_RESULT(yes)
196 else
197 AC_MSG_RESULT([no, Darwin support disabled])
198 enable_darwin=no
199 fi
200 else
201 AC_MSG_RESULT([yes, Darwin support excluded])
202 fi
203
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000204 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000205 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000206 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000207 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000208
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100209 AC_MSG_CHECKING(--with-developer-dir argument)
210 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
211 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100212 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100213
214 if test "x$DEVELOPER_DIR" = "x"; then
215 AC_PATH_PROG(XCODE_SELECT, xcode-select)
216 if test "x$XCODE_SELECT" != "x"; then
217 AC_MSG_CHECKING(for developer dir using xcode-select)
218 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
219 AC_MSG_RESULT([$DEVELOPER_DIR])
220 else
221 DEVELOPER_DIR=/Developer
222 fi
223 fi
224
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000225 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000226 AC_MSG_CHECKING(for 10.4 universal SDK)
227 dnl There is a terrible inconsistency (but we appear to get away with it):
228 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
229 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
230 dnl tests using the preprocessor are actually done with the wrong header
231 dnl files. $LDFLAGS is set at the end, because configure uses it together
232 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000233 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000234 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000235 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100236 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000237 AC_TRY_LINK([ ], [ ],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000238 AC_MSG_RESULT(found, will make universal binary),
239
240 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000241 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000242 AC_MSG_CHECKING(if Intel architecture is supported)
243 CPPFLAGS="$CPPFLAGS -arch i386"
244 LDFLAGS="$save_ldflags -arch i386"
245 AC_TRY_LINK([ ], [ ],
246 AC_MSG_RESULT(yes); MACARCH="intel",
247 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000248 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000249 CPPFLAGS="$save_cppflags -arch ppc"
250 LDFLAGS="$save_ldflags -arch ppc"))
251 elif test "x$MACARCH" = "xintel"; then
252 CPPFLAGS="$CPPFLAGS -arch intel"
253 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000254 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000255 CPPFLAGS="$CPPFLAGS -arch ppc"
256 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000257 fi
258
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200260 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200261 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000262 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000263 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100264 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200265 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200266
267 dnl Assume we don't want X11 unless it was specifically asked for
268 dnl (--with-x) or Motif, Athena or GTK GUI is used.
269 if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2 -a "X$enable_gui" != Xgtk3; then
270 with_x=no
271 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000273
Bram Moolenaardb552d602006-03-23 22:59:57 +0000274 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000275 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000276 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000277 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
278 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
279 fi
280
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281else
282 AC_MSG_RESULT(no)
283fi
284
Bram Moolenaar39766a72013-11-03 00:41:00 +0100285dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
286dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100287AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100288
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289AC_SUBST(OS_EXTRA_SRC)
290AC_SUBST(OS_EXTRA_OBJ)
291
292dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
293dnl Only when the directory exists and it wasn't there yet.
294dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000295dnl Skip all of this when cross-compiling.
296if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000297 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000298 have_local_include=''
299 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000300 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
301 --without-local-dir do not search /usr/local for local libraries.], [
302 local_dir="$withval"
303 case "$withval" in
304 */*) ;;
305 no)
306 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200307 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000308 have_local_lib=yes
309 ;;
310 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
311 esac
312 AC_MSG_RESULT($local_dir)
313 ], [
314 local_dir=/usr/local
315 AC_MSG_RESULT(Defaulting to $local_dir)
316 ])
317 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000318 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100319 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
320 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000321 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000322 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000323 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000324 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
325 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 +0000326 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000327 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000328 fi
329 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000330 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
331 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 +0000332 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000333 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000334 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335 fi
336fi
337
338AC_MSG_CHECKING(--with-vim-name argument)
339AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
340 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000341 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342AC_SUBST(VIMNAME)
343AC_MSG_CHECKING(--with-ex-name argument)
344AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
345 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
346 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
347AC_SUBST(EXNAME)
348AC_MSG_CHECKING(--with-view-name argument)
349AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
350 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
351 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
352AC_SUBST(VIEWNAME)
353
354AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100355AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
356 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357 AC_MSG_RESULT(no))
358
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100359if test "X$RUNTIME_GLOBAL" != "X"; then
360 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" }')
361 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
362 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
363fi
364
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365AC_MSG_CHECKING(--with-modified-by argument)
366AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
367 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
368 AC_MSG_RESULT(no))
369
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200370dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000371AC_MSG_CHECKING(if character set is EBCDIC)
372AC_TRY_COMPILE([ ],
373[ /* TryCompile function for CharSet.
374 Treat any failure as ASCII for compatibility with existing art.
375 Use compile-time rather than run-time tests for cross-compiler
376 tolerance. */
377#if '0'!=240
378make an error "Character set is not EBCDIC"
379#endif ],
380[ # TryCompile action if true
381cf_cv_ebcdic=yes ],
382[ # TryCompile action if false
383cf_cv_ebcdic=no])
384# end of TryCompile ])
385# end of CacheVal CvEbcdic
386AC_MSG_RESULT($cf_cv_ebcdic)
387case "$cf_cv_ebcdic" in #(vi
388 yes) AC_DEFINE(EBCDIC)
389 line_break='"\\n"'
390 ;;
391 *) line_break='"\\012"';;
392esac
393AC_SUBST(line_break)
394
395if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200396dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200397AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398case `uname` in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200399 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400 dnl If using cc the environment variable _CC_CCMODE must be
401 dnl set to "1", so that some compiler extensions are enabled.
402 dnl If using c89 the environment variable is named _CC_C89MODE.
403 dnl Note: compile with c89 never tested.
404 if test "$CC" = "cc"; then
405 ccm="$_CC_CCMODE"
406 ccn="CC"
407 else
408 if test "$CC" = "c89"; then
409 ccm="$_CC_C89MODE"
410 ccn="C89"
411 else
412 ccm=1
413 fi
414 fi
415 if test "$ccm" != "1"; then
416 echo ""
417 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200418 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200419 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420 echo " Do:"
421 echo " export _CC_${ccn}MODE=1"
422 echo " and then call configure again."
423 echo "------------------------------------------"
424 exit 1
425 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200426 # Set CFLAGS for configure process.
427 # This will be reset later for config.mk.
428 # Use haltonmsg to force error for missing H files.
429 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
430 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000431 AC_MSG_RESULT(yes)
432 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200433 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434 AC_MSG_RESULT(no)
435 ;;
436esac
437fi
438
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200439dnl Set QUOTESED. Needs additional backslashes on zOS
440if test "$zOSUnix" = "yes"; then
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100441 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200442else
Bram Moolenaarabcbb0e2020-12-23 12:33:42 +0100443 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200444fi
445AC_SUBST(QUOTESED)
446
447
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200448dnl Link with -lsmack for Smack stuff; if not found
449AC_MSG_CHECKING(--disable-smack argument)
450AC_ARG_ENABLE(smack,
451 [ --disable-smack Do not check for Smack support.],
452 , enable_smack="yes")
453if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200454 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200455 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200456else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200457 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200458fi
459if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200460 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
461fi
462if test "$enable_smack" = "yes"; then
463 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
464 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
465 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200466 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200467fi
468if test "$enable_smack" = "yes"; then
469 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200470 [LIBS="$LIBS -lattr"
471 found_smack="yes"
472 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000473fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200475dnl When smack was found don't search for SELinux
476if test "x$found_smack" = "x"; then
477 dnl Link with -lselinux for SELinux stuff; if not found
478 AC_MSG_CHECKING(--disable-selinux argument)
479 AC_ARG_ENABLE(selinux,
480 [ --disable-selinux Do not check for SELinux support.],
481 , enable_selinux="yes")
482 if test "$enable_selinux" = "yes"; then
483 AC_MSG_RESULT(no)
484 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100485 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200486 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100487 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200488 else
489 AC_MSG_RESULT(yes)
490 fi
491fi
492
Bram Moolenaar071d4272004-06-13 20:20:40 +0000493dnl Check user requested features.
494
495AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200496AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000497 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100498 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499
500dovimdiff=""
501dogvimdiff=""
502case "$features" in
503 tiny) AC_DEFINE(FEAT_TINY) ;;
504 small) AC_DEFINE(FEAT_SMALL) ;;
505 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
506 dogvimdiff="installgvimdiff" ;;
507 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
508 dogvimdiff="installgvimdiff" ;;
509 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
510 dogvimdiff="installgvimdiff" ;;
511 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
512esac
513
514AC_SUBST(dovimdiff)
515AC_SUBST(dogvimdiff)
516
517AC_MSG_CHECKING(--with-compiledby argument)
518AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
519 compiledby="$withval"; AC_MSG_RESULT($withval),
520 compiledby=""; AC_MSG_RESULT(no))
521AC_SUBST(compiledby)
522
523AC_MSG_CHECKING(--disable-xsmp argument)
524AC_ARG_ENABLE(xsmp,
525 [ --disable-xsmp Disable XSMP session management],
526 , enable_xsmp="yes")
527
528if test "$enable_xsmp" = "yes"; then
529 AC_MSG_RESULT(no)
530 AC_MSG_CHECKING(--disable-xsmp-interact argument)
531 AC_ARG_ENABLE(xsmp-interact,
532 [ --disable-xsmp-interact Disable XSMP interaction],
533 , enable_xsmp_interact="yes")
534 if test "$enable_xsmp_interact" = "yes"; then
535 AC_MSG_RESULT(no)
536 AC_DEFINE(USE_XSMP_INTERACT)
537 else
538 AC_MSG_RESULT(yes)
539 fi
540else
541 AC_MSG_RESULT(yes)
542fi
543
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200544dnl Check for Lua feature.
545AC_MSG_CHECKING(--enable-luainterp argument)
546AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200547 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200548 [enable_luainterp="no"])
549AC_MSG_RESULT($enable_luainterp)
550
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200551if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100552 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
553 AC_MSG_ERROR([cannot use Lua with tiny or small features])
554 fi
555
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200556 dnl -- find the lua executable
557 AC_SUBST(vi_cv_path_lua)
558
559 AC_MSG_CHECKING(--with-lua-prefix argument)
560 AC_ARG_WITH(lua_prefix,
561 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
562 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200563 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200564
565 if test "X$with_lua_prefix" != "X"; then
566 vi_cv_path_lua_pfx="$with_lua_prefix"
567 else
568 AC_MSG_CHECKING(LUA_PREFIX environment var)
569 if test "X$LUA_PREFIX" != "X"; then
570 AC_MSG_RESULT("$LUA_PREFIX")
571 vi_cv_path_lua_pfx="$LUA_PREFIX"
572 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200573 AC_MSG_RESULT([not set, default to /usr])
574 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200575 fi
576 fi
577
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200578 AC_MSG_CHECKING(--with-luajit)
579 AC_ARG_WITH(luajit,
580 [ --with-luajit Link with LuaJIT instead of Lua.],
581 [vi_cv_with_luajit="$withval"],
582 [vi_cv_with_luajit="no"])
583 AC_MSG_RESULT($vi_cv_with_luajit)
584
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200585 LUA_INC=
586 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200587 if test "x$vi_cv_with_luajit" != "xno"; then
588 dnl -- try to find LuaJIT executable
589 AC_PATH_PROG(vi_cv_path_luajit, luajit)
590 if test "X$vi_cv_path_luajit" != "X"; then
591 dnl -- find LuaJIT version
592 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100593 [ 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 +0200594 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
595 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
596 vi_cv_path_lua="$vi_cv_path_luajit"
597 vi_cv_version_lua="$vi_cv_version_lua_luajit"
598 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200599 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200600 dnl -- try to find Lua executable
601 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
602 if test "X$vi_cv_path_plain_lua" != "X"; then
603 dnl -- find Lua version
604 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
605 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
606 fi
607 vi_cv_path_lua="$vi_cv_path_plain_lua"
608 vi_cv_version_lua="$vi_cv_version_plain_lua"
609 fi
610 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
611 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 +0100612 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200613 AC_MSG_RESULT(yes)
614 LUA_INC=/luajit-$vi_cv_version_luajit
615 fi
616 fi
617 if test "X$LUA_INC" = "X"; then
618 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100619 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200620 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200621 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200622 AC_MSG_RESULT(no)
623 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 +0100624 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200625 AC_MSG_RESULT(yes)
626 LUA_INC=/lua$vi_cv_version_lua
627 else
628 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200629
630 # Detect moonjit:
631 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
632 lua_suf=/moonjit-2.3
633 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200634 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200635 if test -d "$dir" ; then
Bram Moolenaara79a8942020-12-17 20:50:25 +0100636 lua_suf=`basename "$dir"`
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200637 lua_suf="/$lua_suf"
638 break
639 fi
640 done
641 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
642 if test -f "$inc_path$lua_suf/lua.h"; then
643 AC_MSG_RESULT(yes)
644 LUA_INC=$lua_suf
645 else
646 AC_MSG_RESULT(no)
647 vi_cv_path_lua_pfx=
648 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200649 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200650 fi
651 fi
652 fi
653
654 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200655 if test "x$vi_cv_with_luajit" != "xno"; then
656 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
657 if test "X$multiarch" != "X"; then
658 lib_multiarch="lib/${multiarch}"
659 else
660 lib_multiarch="lib"
661 fi
662 if test "X$vi_cv_version_lua" = "X"; then
663 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
664 else
665 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
666 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200667 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 if test "X$LUA_INC" != "X"; then
669 dnl Test alternate location using version
670 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
671 else
672 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
673 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200674 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200675 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200676 lua_ok="yes"
677 else
678 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
679 libs_save=$LIBS
680 LIBS="$LIBS $LUA_LIBS"
681 AC_TRY_LINK(,[ ],
682 AC_MSG_RESULT(yes); lua_ok="yes",
683 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
684 LIBS=$libs_save
685 fi
686 if test "x$lua_ok" = "xyes"; then
687 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
688 LUA_SRC="if_lua.c"
689 LUA_OBJ="objects/if_lua.o"
690 LUA_PRO="if_lua.pro"
691 AC_DEFINE(FEAT_LUA)
692 fi
693 if test "$enable_luainterp" = "dynamic"; then
694 if test "x$vi_cv_with_luajit" != "xno"; then
695 luajit="jit"
696 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200697 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
698 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
699 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200700 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200701 ext="dylib"
702 indexes=""
703 else
704 ext="so"
705 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
706 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
707 if test "X$multiarch" != "X"; then
708 lib_multiarch="lib/${multiarch}"
709 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200710 fi
711 dnl Determine the sover for the current version, but fallback to
712 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200713 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200714 for subdir in "${lib_multiarch}" lib64 lib; do
715 if test -z "$subdir"; then
716 continue
717 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200718 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
719 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
720 for i in $indexes ""; do
721 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200722 sover2="$i"
723 break 3
724 fi
725 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100726 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200727 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200728 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200729 if test "X$sover" = "X"; then
730 AC_MSG_RESULT(no)
731 lua_ok="no"
732 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
733 else
734 AC_MSG_RESULT(yes)
735 lua_ok="yes"
736 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
737 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200738 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200739 AC_DEFINE(DYNAMIC_LUA)
740 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200741 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200742 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200743 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200744 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200745 test "`(uname -m) 2>/dev/null`" = "x86_64"; then
746 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
747 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
748 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200749 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200750 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100751 AC_MSG_ERROR([could not configure lua])
752 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200753 AC_SUBST(LUA_SRC)
754 AC_SUBST(LUA_OBJ)
755 AC_SUBST(LUA_PRO)
756 AC_SUBST(LUA_LIBS)
757 AC_SUBST(LUA_CFLAGS)
758fi
759
760
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000761dnl Check for MzScheme feature.
762AC_MSG_CHECKING(--enable-mzschemeinterp argument)
763AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200764 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000765 [enable_mzschemeinterp="no"])
766AC_MSG_RESULT($enable_mzschemeinterp)
767
768if test "$enable_mzschemeinterp" = "yes"; then
769 dnl -- find the mzscheme executable
770 AC_SUBST(vi_cv_path_mzscheme)
771
772 AC_MSG_CHECKING(--with-plthome argument)
773 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000774 [ --with-plthome=PLTHOME Use PLTHOME.],
775 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000776 with_plthome="";AC_MSG_RESULT("no"))
777
778 if test "X$with_plthome" != "X"; then
779 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100780 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000781 else
782 AC_MSG_CHECKING(PLTHOME environment var)
783 if test "X$PLTHOME" != "X"; then
784 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000785 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100786 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000787 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000788 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000789 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000790 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000791
792 dnl resolve symbolic link, the executable is often elsewhere and there
793 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000794 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000795 lsout=`ls -l $vi_cv_path_mzscheme`
796 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
797 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
798 fi
799 fi
800
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000801 if test "X$vi_cv_path_mzscheme" != "X"; then
802 dnl -- find where MzScheme thinks it was installed
803 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000804 dnl different versions of MzScheme differ in command line processing
805 dnl use universal approach
806 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000807 (build-path (call-with-values \
808 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000809 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
810 dnl Remove a trailing slash
811 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
812 sed -e 's+/$++'` ])
813 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000814 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000815 fi
816 fi
817
818 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100819 AC_MSG_CHECKING(for racket include directory)
820 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
821 if test "X$SCHEME_INC" != "X"; then
822 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000823 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100824 AC_MSG_RESULT(not found)
825 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
826 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
827 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000828 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000829 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000830 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100831 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
832 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000833 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100834 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000835 else
836 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100837 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
838 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100839 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100840 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100841 else
842 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100843 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
844 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100845 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100846 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100847 else
848 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100849 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
850 if test -f /usr/include/racket/scheme.h; then
851 AC_MSG_RESULT(yes)
852 SCHEME_INC=/usr/include/racket
853 else
854 AC_MSG_RESULT(no)
855 vi_cv_path_mzscheme_pfx=
856 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100857 fi
858 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000859 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000860 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000861 fi
862 fi
863
864 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100865
866 AC_MSG_CHECKING(for racket lib directory)
867 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
868 if test "X$SCHEME_LIB" != "X"; then
869 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000870 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100871 AC_MSG_RESULT(not found)
872 fi
873
874 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
875 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200876 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100877 MZSCHEME_LIBS="-framework Racket"
878 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
879 elif test -f "${path}/libmzscheme3m.a"; then
880 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
881 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
882 elif test -f "${path}/libracket3m.a"; then
883 MZSCHEME_LIBS="${path}/libracket3m.a"
Bram Moolenaar588d2412020-10-03 14:24:19 +0200884 if test -f "${path}/librktio.a"; then
885 MZSCHEME_LIBS="${MZSCHEME_LIBS} ${path}/librktio.a"
886 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100887 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
888 elif test -f "${path}/libracket.a"; then
889 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
890 elif test -f "${path}/libmzscheme.a"; then
891 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
892 else
893 dnl Using shared objects
894 if test -f "${path}/libmzscheme3m.so"; then
895 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
896 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
897 elif test -f "${path}/libracket3m.so"; then
898 MZSCHEME_LIBS="-L${path} -lracket3m"
899 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
900 elif test -f "${path}/libracket.so"; then
901 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
902 else
903 dnl try next until last
904 if test "$path" != "$SCHEME_LIB"; then
905 continue
906 fi
907 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
908 fi
909 if test "$GCC" = yes; then
910 dnl Make Vim remember the path to the library. For when it's not in
911 dnl $LD_LIBRARY_PATH.
912 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
913 elif test "`(uname) 2>/dev/null`" = SunOS &&
914 uname -r | grep '^5' >/dev/null; then
915 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
916 fi
917 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000918 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100919 if test "X$MZSCHEME_LIBS" != "X"; then
920 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000921 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100922 done
923
924 AC_MSG_CHECKING([if racket requires -pthread])
925 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
926 AC_MSG_RESULT(yes)
927 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
928 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
929 else
930 AC_MSG_RESULT(no)
931 fi
932
933 AC_MSG_CHECKING(for racket config directory)
934 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
935 if test "X$SCHEME_CONFIGDIR" != "X"; then
936 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
937 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
938 else
939 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000940 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100941
942 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100943 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))))'`
944 if test "X$SCHEME_COLLECTS" = "X"; then
945 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
946 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100947 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100948 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
949 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100950 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100951 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
952 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
953 else
954 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
955 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
956 fi
Bram Moolenaar75676462013-01-30 14:55:42 +0100957 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100958 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100959 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000960 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100961 if test "X$SCHEME_COLLECTS" != "X" ; then
962 AC_MSG_RESULT(${SCHEME_COLLECTS})
963 else
964 AC_MSG_RESULT(not found)
965 fi
966
967 AC_MSG_CHECKING(for mzscheme_base.c)
968 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000969 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100970 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
971 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100972 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100973 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100974 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100975 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
976 MZSCHEME_MOD="++lib scheme/base"
977 else
978 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
979 MZSCHEME_EXTRA="mzscheme_base.c"
980 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
981 MZSCHEME_MOD=""
982 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100983 fi
984 fi
985 if test "X$MZSCHEME_EXTRA" != "X" ; then
986 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000987 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100988 AC_MSG_RESULT(needed)
989 else
990 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000991 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100992
Bram Moolenaar9e902192013-07-17 18:58:11 +0200993 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
994 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
995
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000996 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100997 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200998
999 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
1000 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
1001 cflags_save=$CFLAGS
1002 libs_save=$LIBS
1003 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1004 LIBS="$LIBS $MZSCHEME_LIBS"
1005 AC_TRY_LINK(,[ ],
1006 AC_MSG_RESULT(yes); mzs_ok=yes,
1007 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1008 CFLAGS=$cflags_save
1009 LIBS=$libs_save
1010 if test $mzs_ok = yes; then
1011 MZSCHEME_SRC="if_mzsch.c"
1012 MZSCHEME_OBJ="objects/if_mzsch.o"
1013 MZSCHEME_PRO="if_mzsch.pro"
1014 AC_DEFINE(FEAT_MZSCHEME)
1015 else
1016 MZSCHEME_CFLAGS=
1017 MZSCHEME_LIBS=
1018 MZSCHEME_EXTRA=
1019 MZSCHEME_MZC=
1020 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001021 fi
1022 AC_SUBST(MZSCHEME_SRC)
1023 AC_SUBST(MZSCHEME_OBJ)
1024 AC_SUBST(MZSCHEME_PRO)
1025 AC_SUBST(MZSCHEME_LIBS)
1026 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001027 AC_SUBST(MZSCHEME_EXTRA)
1028 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001029fi
1030
1031
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032AC_MSG_CHECKING(--enable-perlinterp argument)
1033AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001034 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001035 [enable_perlinterp="no"])
1036AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001037if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001038 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1039 AC_MSG_ERROR([cannot use Perl with tiny or small features])
1040 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001041 AC_SUBST(vi_cv_path_perl)
1042 AC_PATH_PROG(vi_cv_path_perl, perl)
1043 if test "X$vi_cv_path_perl" != "X"; then
1044 AC_MSG_CHECKING(Perl version)
1045 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1046 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001047 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001048 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1049 badthreads=no
1050 else
1051 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1052 eval `$vi_cv_path_perl -V:use5005threads`
1053 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1054 badthreads=no
1055 else
1056 badthreads=yes
1057 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1058 fi
1059 else
1060 badthreads=yes
1061 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1062 fi
1063 fi
1064 if test $badthreads = no; then
1065 AC_MSG_RESULT(OK)
1066 eval `$vi_cv_path_perl -V:shrpenv`
1067 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1068 shrpenv=""
1069 fi
1070 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1071 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001072 vi_cv_perl_extutils=unknown_perl_extutils_path
1073 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1074 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1075 if test -f "$xsubpp_path"; then
1076 vi_cv_perl_xsubpp="$xsubpp_path"
1077 fi
1078 done
1079 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001081 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001082 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001083 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001084 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001085 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1086 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001087 -e 's/-pipe //' \
1088 -e 's/-W[[^ ]]*//g' \
1089 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001090 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1091 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1092 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1093 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1094 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1095 dnl a test in configure may fail because of that.
1096 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1097 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1098
1099 dnl check that compiling a simple program still works with the flags
1100 dnl added for Perl.
1101 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1102 cflags_save=$CFLAGS
1103 libs_save=$LIBS
1104 ldflags_save=$LDFLAGS
1105 CFLAGS="$CFLAGS $perlcppflags"
1106 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001107 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001108 LDFLAGS="$perlldflags $LDFLAGS"
1109 AC_TRY_LINK(,[ ],
1110 AC_MSG_RESULT(yes); perl_ok=yes,
1111 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1112 CFLAGS=$cflags_save
1113 LIBS=$libs_save
1114 LDFLAGS=$ldflags_save
1115 if test $perl_ok = yes; then
1116 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001117 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001118 fi
1119 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001120 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001121 LDFLAGS="$perlldflags $LDFLAGS"
1122 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001123 fi
1124 PERL_LIBS=$perllibs
1125 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1126 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1127 PERL_PRO="if_perl.pro if_perlsfio.pro"
1128 AC_DEFINE(FEAT_PERL)
1129 fi
1130 fi
1131 else
1132 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1133 fi
1134 fi
1135
Bram Moolenaard0573012017-10-28 21:11:06 +02001136 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001137 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001138 dir=/System/Library/Perl
1139 darwindir=$dir/darwin
1140 if test -d $darwindir; then
1141 PERL=/usr/bin/perl
1142 else
1143 dnl Mac OS X 10.3
1144 dir=/System/Library/Perl/5.8.1
1145 darwindir=$dir/darwin-thread-multi-2level
1146 if test -d $darwindir; then
1147 PERL=/usr/bin/perl
1148 fi
1149 fi
1150 if test -n "$PERL"; then
1151 PERL_DIR="$dir"
1152 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1153 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1154 PERL_LIBS="-L$darwindir/CORE -lperl"
1155 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001156 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1157 dnl be included if requested by passing --with-mac-arch to
1158 dnl configure, so strip these flags first (if present)
1159 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1160 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 +00001161 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001162 if test "$enable_perlinterp" = "dynamic"; then
1163 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1164 AC_DEFINE(DYNAMIC_PERL)
1165 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1166 fi
1167 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001168
1169 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1170 AC_MSG_ERROR([could not configure perl])
1171 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172fi
1173AC_SUBST(shrpenv)
1174AC_SUBST(PERL_SRC)
1175AC_SUBST(PERL_OBJ)
1176AC_SUBST(PERL_PRO)
1177AC_SUBST(PERL_CFLAGS)
1178AC_SUBST(PERL_LIBS)
1179
1180AC_MSG_CHECKING(--enable-pythoninterp argument)
1181AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001182 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001183 [enable_pythoninterp="no"])
1184AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001185if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001186 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1187 AC_MSG_ERROR([cannot use Python with tiny or small features])
1188 fi
1189
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001191 AC_MSG_CHECKING(--with-python-command argument)
1192 AC_SUBST(vi_cv_path_python)
1193 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1194 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1195 AC_MSG_RESULT(no))
1196
1197 if test "X$vi_cv_path_python" = "X"; then
1198 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1199 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001200 if test "X$vi_cv_path_python" != "X"; then
1201
1202 dnl -- get its version number
1203 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1204 [[vi_cv_var_python_version=`
1205 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1206 ]])
1207
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001208 dnl -- it must be at least version 2.3
1209 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001210 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001211 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001212 then
1213 AC_MSG_RESULT(yep)
1214
1215 dnl -- find where python thinks it was installed
1216 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1217 [ vi_cv_path_python_pfx=`
1218 ${vi_cv_path_python} -c \
1219 "import sys; print sys.prefix"` ])
1220
1221 dnl -- and where it thinks it runs
1222 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1223 [ vi_cv_path_python_epfx=`
1224 ${vi_cv_path_python} -c \
1225 "import sys; print sys.exec_prefix"` ])
1226
1227 dnl -- python's internal library path
1228
1229 AC_CACHE_VAL(vi_cv_path_pythonpath,
1230 [ vi_cv_path_pythonpath=`
1231 unset PYTHONPATH;
1232 ${vi_cv_path_python} -c \
1233 "import sys, string; print string.join(sys.path,':')"` ])
1234
1235 dnl -- where the Python implementation library archives are
1236
1237 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001238 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001239 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001240
1241 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1242 [
1243 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001244 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1245 if test -d "$d" && test -f "$d/config.c"; then
1246 vi_cv_path_python_conf="$d"
1247 else
1248 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1249 for subdir in lib64 lib share; do
1250 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1251 if test -d "$d" && test -f "$d/config.c"; then
1252 vi_cv_path_python_conf="$d"
1253 fi
1254 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001256 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001257 ])
1258
1259 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1260
1261 if test "X$PYTHON_CONFDIR" = "X"; then
1262 AC_MSG_RESULT([can't find it!])
1263 else
1264
1265 dnl -- we need to examine Python's config/Makefile too
1266 dnl see what the interpreter is built from
1267 AC_CACHE_VAL(vi_cv_path_python_plibs,
1268 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001269 pwd=`pwd`
1270 tmp_mkf="$pwd/config-PyMake$$"
1271 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001272__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001273 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001274 @echo "python_LIBS='$(LIBS)'"
1275 @echo "python_SYSLIBS='$(SYSLIBS)'"
1276 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001277 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001278 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001279 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1280 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1281 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282eof
1283 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001284 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1285 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001286 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001287 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1288 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001289 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1290 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1291 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001292 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001293 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001294 dnl -- Check if the path contained in python_LINKFORSHARED is
1295 dnl usable for vim build. If not, make and try other
1296 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001297 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001298 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1299 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1300 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1301 dnl -- The path looks relative. Guess the absolute one using
1302 dnl the prefix and try that.
1303 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1304 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1305 dnl -- A last resort.
1306 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1307 dnl -- No check is done. The last word is left to the
1308 dnl "sanity" test on link flags that follows shortly.
1309 fi
1310 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1311 fi
1312 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001313 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 +00001314 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1315 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1316 fi
1317 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001318 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001319 [
1320 if test "X$python_DLLLIBRARY" != "X"; then
1321 vi_cv_dll_name_python="$python_DLLLIBRARY"
1322 else
1323 vi_cv_dll_name_python="$python_INSTSONAME"
1324 fi
1325 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326
1327 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1328 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001329 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001330 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001331 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 +00001332 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001333 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001334 dnl Define PYTHON_HOME if --with-python-config-dir was used
1335 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1336
1337 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001339 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001340
1341 dnl On FreeBSD linking with "-pthread" is required to use threads.
1342 dnl _THREAD_SAFE must be used for compiling then.
1343 dnl The "-pthread" is added to $LIBS, so that the following check for
1344 dnl sigaltstack() will look in libc_r (it's there in libc!).
1345 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1346 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1347 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1348 AC_MSG_CHECKING([if -pthread should be used])
1349 threadsafe_flag=
1350 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001351 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001352 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001353 test "$GCC" = yes && threadsafe_flag="-pthread"
1354 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1355 threadsafe_flag="-D_THREAD_SAFE"
1356 thread_lib="-pthread"
1357 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001358 if test "`(uname) 2>/dev/null`" = SunOS; then
1359 threadsafe_flag="-pthreads"
1360 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361 fi
1362 libs_save_old=$LIBS
1363 if test -n "$threadsafe_flag"; then
1364 cflags_save=$CFLAGS
1365 CFLAGS="$CFLAGS $threadsafe_flag"
1366 LIBS="$LIBS $thread_lib"
1367 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001368 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001369 AC_MSG_RESULT(no); LIBS=$libs_save_old
1370 )
1371 CFLAGS=$cflags_save
1372 else
1373 AC_MSG_RESULT(no)
1374 fi
1375
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001376 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001377 dnl added for Python.
1378 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1379 cflags_save=$CFLAGS
1380 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001381 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001382 LIBS="$LIBS $PYTHON_LIBS"
1383 AC_TRY_LINK(,[ ],
1384 AC_MSG_RESULT(yes); python_ok=yes,
1385 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1386 CFLAGS=$cflags_save
1387 LIBS=$libs_save
1388 if test $python_ok = yes; then
1389 AC_DEFINE(FEAT_PYTHON)
1390 else
1391 LIBS=$libs_save_old
1392 PYTHON_SRC=
1393 PYTHON_OBJ=
1394 PYTHON_LIBS=
1395 PYTHON_CFLAGS=
1396 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001397 fi
1398 else
1399 AC_MSG_RESULT(too old)
1400 fi
1401 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001402
1403 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1404 AC_MSG_ERROR([could not configure python])
1405 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001406fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001407
Bram Moolenaar071d4272004-06-13 20:20:40 +00001408AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001409AC_SUBST(PYTHON_CFLAGS)
1410AC_SUBST(PYTHON_SRC)
1411AC_SUBST(PYTHON_OBJ)
1412
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001413
1414AC_MSG_CHECKING(--enable-python3interp argument)
1415AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001416 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001417 [enable_python3interp="no"])
1418AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001419if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001420 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1421 AC_MSG_ERROR([cannot use Python with tiny or small features])
1422 fi
1423
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001424 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001425 AC_MSG_CHECKING(--with-python3-command argument)
1426 AC_SUBST(vi_cv_path_python3)
1427 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1428 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1429 AC_MSG_RESULT(no))
1430
1431 if test "X$vi_cv_path_python3" = "X"; then
1432 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1433 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001434 if test "X$vi_cv_path_python3" != "X"; then
1435
1436 dnl -- get its version number
1437 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1438 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001439 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001440 ]])
1441
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001442 dnl -- it must be at least version 3
1443 AC_MSG_CHECKING(Python is 3.0 or better)
1444 if ${vi_cv_path_python3} -c \
1445 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1446 then
1447 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001448
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001449 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1450 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001451 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001452 vi_cv_var_python3_abiflags=
1453 if ${vi_cv_path_python3} -c \
1454 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1455 then
1456 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1457 "import sys; print(sys.abiflags)"`
1458 fi ])
1459
1460 dnl -- find where python3 thinks it was installed
1461 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1462 [ vi_cv_path_python3_pfx=`
1463 ${vi_cv_path_python3} -c \
1464 "import sys; print(sys.prefix)"` ])
1465
1466 dnl -- and where it thinks it runs
1467 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1468 [ vi_cv_path_python3_epfx=`
1469 ${vi_cv_path_python3} -c \
1470 "import sys; print(sys.exec_prefix)"` ])
1471
1472 dnl -- python3's internal library path
1473
1474 AC_CACHE_VAL(vi_cv_path_python3path,
1475 [ vi_cv_path_python3path=`
1476 unset PYTHONPATH;
1477 ${vi_cv_path_python3} -c \
1478 "import sys, string; print(':'.join(sys.path))"` ])
1479
1480 dnl -- where the Python implementation library archives are
1481
1482 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001483 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001484 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001485
1486 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1487 [
1488 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001489 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001490 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1491 if test -d "$d" && test -f "$d/config.c"; then
1492 vi_cv_path_python3_conf="$d"
1493 else
1494 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1495 for subdir in lib64 lib share; do
1496 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1497 if test -d "$d" && test -f "$d/config.c"; then
1498 vi_cv_path_python3_conf="$d"
1499 fi
1500 done
1501 done
1502 fi
1503 ])
1504
1505 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1506
1507 if test "X$PYTHON3_CONFDIR" = "X"; then
1508 AC_MSG_RESULT([can't find it!])
1509 else
1510
1511 dnl -- we need to examine Python's config/Makefile too
1512 dnl see what the interpreter is built from
1513 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1514 [
1515 pwd=`pwd`
1516 tmp_mkf="$pwd/config-PyMake$$"
1517 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001518__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001519 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001520 @echo "python3_LIBS='$(LIBS)'"
1521 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001522 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001523 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001524eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001525 dnl -- delete the lines from make about Entering/Leaving directory
1526 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1527 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001528 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 +02001529 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1530 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1531 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1532 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1533 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001534 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001535 [
1536 if test "X$python3_DLLLIBRARY" != "X"; then
1537 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1538 else
1539 vi_cv_dll_name_python3="$python3_INSTSONAME"
1540 fi
1541 ])
1542
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001543 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1544 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001545 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 +02001546 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001547 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 +02001548 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001549 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001550 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1551 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1552 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001553 PYTHON3_SRC="if_python3.c"
1554 PYTHON3_OBJ="objects/if_python3.o"
1555
1556 dnl On FreeBSD linking with "-pthread" is required to use threads.
1557 dnl _THREAD_SAFE must be used for compiling then.
1558 dnl The "-pthread" is added to $LIBS, so that the following check for
1559 dnl sigaltstack() will look in libc_r (it's there in libc!).
1560 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1561 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1562 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1563 AC_MSG_CHECKING([if -pthread should be used])
1564 threadsafe_flag=
1565 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001566 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001567 if test "`(uname) 2>/dev/null`" != Darwin; then
1568 test "$GCC" = yes && threadsafe_flag="-pthread"
1569 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1570 threadsafe_flag="-D_THREAD_SAFE"
1571 thread_lib="-pthread"
1572 fi
1573 if test "`(uname) 2>/dev/null`" = SunOS; then
1574 threadsafe_flag="-pthreads"
1575 fi
1576 fi
1577 libs_save_old=$LIBS
1578 if test -n "$threadsafe_flag"; then
1579 cflags_save=$CFLAGS
1580 CFLAGS="$CFLAGS $threadsafe_flag"
1581 LIBS="$LIBS $thread_lib"
1582 AC_TRY_LINK(,[ ],
1583 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1584 AC_MSG_RESULT(no); LIBS=$libs_save_old
1585 )
1586 CFLAGS=$cflags_save
1587 else
1588 AC_MSG_RESULT(no)
1589 fi
1590
1591 dnl check that compiling a simple program still works with the flags
1592 dnl added for Python.
1593 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1594 cflags_save=$CFLAGS
1595 libs_save=$LIBS
1596 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1597 LIBS="$LIBS $PYTHON3_LIBS"
1598 AC_TRY_LINK(,[ ],
1599 AC_MSG_RESULT(yes); python3_ok=yes,
1600 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1601 CFLAGS=$cflags_save
1602 LIBS=$libs_save
1603 if test "$python3_ok" = yes; then
1604 AC_DEFINE(FEAT_PYTHON3)
1605 else
1606 LIBS=$libs_save_old
1607 PYTHON3_SRC=
1608 PYTHON3_OBJ=
1609 PYTHON3_LIBS=
1610 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001611 fi
1612 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001613 else
1614 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001615 fi
1616 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001617 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1618 AC_MSG_ERROR([could not configure python3])
1619 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001620fi
1621
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001622AC_SUBST(PYTHON3_LIBS)
1623AC_SUBST(PYTHON3_CFLAGS)
1624AC_SUBST(PYTHON3_SRC)
1625AC_SUBST(PYTHON3_OBJ)
1626
1627dnl if python2.x and python3.x are enabled one can only link in code
1628dnl with dlopen(), dlsym(), dlclose()
1629if test "$python_ok" = yes && test "$python3_ok" = yes; then
1630 AC_DEFINE(DYNAMIC_PYTHON)
1631 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001632 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001633 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001634 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001635 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001636 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001637 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001638 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001639 #include <dlfcn.h>
1640 /* If this program fails, then RTLD_GLOBAL is needed.
1641 * RTLD_GLOBAL will be used and then it is not possible to
1642 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001643 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001644 */
1645
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001646 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001647 {
1648 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001649 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001650 if (pylib != 0)
1651 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001652 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001653 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1654 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1655 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001656 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001657 (*init)();
1658 needed = (*simple)("import termios") == -1;
1659 (*final)();
1660 dlclose(pylib);
1661 }
1662 return !needed;
1663 }
1664
1665 int main(int argc, char** argv)
1666 {
1667 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001668 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001669 not_needed = 1;
1670 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001671 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001672 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001673
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001674 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001675 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001676
1677 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1678 cflags_save=$CFLAGS
1679 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001680 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001681 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001682 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001683 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001684 #include <dlfcn.h>
1685 #include <wchar.h>
1686 /* If this program fails, then RTLD_GLOBAL is needed.
1687 * RTLD_GLOBAL will be used and then it is not possible to
1688 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001689 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001690 */
1691
1692 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1693 {
1694 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001695 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001696 if (pylib != 0)
1697 {
1698 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1699 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1700 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1701 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1702 (*pfx)(prefix);
1703 (*init)();
1704 needed = (*simple)("import termios") == -1;
1705 (*final)();
1706 dlclose(pylib);
1707 }
1708 return !needed;
1709 }
1710
1711 int main(int argc, char** argv)
1712 {
1713 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001714 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001715 not_needed = 1;
1716 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001717 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001718 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1719
1720 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001721 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001722
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001723 PYTHON_SRC="if_python.c"
1724 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001725 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001726 PYTHON_LIBS=
1727 PYTHON3_SRC="if_python3.c"
1728 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001729 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001730 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001731elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1732 AC_DEFINE(DYNAMIC_PYTHON)
1733 PYTHON_SRC="if_python.c"
1734 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001735 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001736 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001737elif test "$python_ok" = yes; then
1738 dnl Check that adding -fPIE works. It may be needed when using a static
1739 dnl Python library.
1740 AC_MSG_CHECKING([if -fPIE can be added for Python])
1741 cflags_save=$CFLAGS
1742 libs_save=$LIBS
1743 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1744 LIBS="$LIBS $PYTHON_LIBS"
1745 AC_TRY_LINK(,[ ],
1746 AC_MSG_RESULT(yes); fpie_ok=yes,
1747 AC_MSG_RESULT(no); fpie_ok=no)
1748 CFLAGS=$cflags_save
1749 LIBS=$libs_save
1750 if test $fpie_ok = yes; then
1751 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1752 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001753elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1754 AC_DEFINE(DYNAMIC_PYTHON3)
1755 PYTHON3_SRC="if_python3.c"
1756 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001757 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001758 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001759elif test "$python3_ok" = yes; then
1760 dnl Check that adding -fPIE works. It may be needed when using a static
1761 dnl Python library.
1762 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1763 cflags_save=$CFLAGS
1764 libs_save=$LIBS
1765 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1766 LIBS="$LIBS $PYTHON3_LIBS"
1767 AC_TRY_LINK(,[ ],
1768 AC_MSG_RESULT(yes); fpie_ok=yes,
1769 AC_MSG_RESULT(no); fpie_ok=no)
1770 CFLAGS=$cflags_save
1771 LIBS=$libs_save
1772 if test $fpie_ok = yes; then
1773 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1774 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001775fi
1776
Bram Moolenaar071d4272004-06-13 20:20:40 +00001777AC_MSG_CHECKING(--enable-tclinterp argument)
1778AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001779 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780 [enable_tclinterp="no"])
1781AC_MSG_RESULT($enable_tclinterp)
1782
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001783if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001784
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001785 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001786 AC_MSG_CHECKING(--with-tclsh argument)
1787 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1788 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001789 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001790 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1791 AC_SUBST(vi_cv_path_tcl)
1792
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001793 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1794 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1795 tclsh_name="tclsh8.4"
1796 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1797 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001798 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001799 tclsh_name="tclsh8.2"
1800 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1801 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001802 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1803 tclsh_name="tclsh8.0"
1804 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1805 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001806 dnl still didn't find it, try without version number
1807 if test "X$vi_cv_path_tcl" = "X"; then
1808 tclsh_name="tclsh"
1809 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1810 fi
1811 if test "X$vi_cv_path_tcl" != "X"; then
1812 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001813 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001814 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1815 AC_MSG_RESULT($tclver - OK);
1816 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 +01001817 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001818
1819 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001820 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001821 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 +00001822 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001823 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001824 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001825 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1826 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 +00001827 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001828 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001829 for try in $tclinc; do
1830 if test -f "$try/tcl.h"; then
1831 AC_MSG_RESULT($try/tcl.h)
1832 TCL_INC=$try
1833 break
1834 fi
1835 done
1836 if test -z "$TCL_INC"; then
1837 AC_MSG_RESULT(<not found>)
1838 SKIP_TCL=YES
1839 fi
1840 if test -z "$SKIP_TCL"; then
1841 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001842 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001843 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001844 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001845 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001846 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001847 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001848 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1849 tclcnf=`echo $tclinc | sed s/include/lib/g`
1850 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001851 fi
1852 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001853 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001854 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001855 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001856 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001857 if test "$enable_tclinterp" = "dynamic"; then
1858 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1859 else
1860 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1861 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001862 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001863 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001864 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 +00001865 break
1866 fi
1867 done
1868 if test -z "$TCL_LIBS"; then
1869 AC_MSG_RESULT(<not found>)
1870 AC_MSG_CHECKING(for Tcl library by myself)
1871 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001872 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001873 for ext in .so .a ; do
1874 for ver in "" $tclver ; do
1875 for try in $tcllib ; do
1876 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001877 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001878 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001879 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001880 if test "`(uname) 2>/dev/null`" = SunOS &&
1881 uname -r | grep '^5' >/dev/null; then
1882 TCL_LIBS="$TCL_LIBS -R $try"
1883 fi
1884 break 3
1885 fi
1886 done
1887 done
1888 done
1889 if test -z "$TCL_LIBS"; then
1890 AC_MSG_RESULT(<not found>)
1891 SKIP_TCL=YES
1892 fi
1893 fi
1894 if test -z "$SKIP_TCL"; then
1895 AC_DEFINE(FEAT_TCL)
1896 TCL_SRC=if_tcl.c
1897 TCL_OBJ=objects/if_tcl.o
1898 TCL_PRO=if_tcl.pro
1899 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1900 fi
1901 fi
1902 else
1903 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1904 fi
1905 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001906 if test "$enable_tclinterp" = "dynamic"; then
1907 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1908 AC_DEFINE(DYNAMIC_TCL)
1909 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1910 fi
1911 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001912 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1913 AC_MSG_ERROR([could not configure Tcl])
1914 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001915fi
1916AC_SUBST(TCL_SRC)
1917AC_SUBST(TCL_OBJ)
1918AC_SUBST(TCL_PRO)
1919AC_SUBST(TCL_CFLAGS)
1920AC_SUBST(TCL_LIBS)
1921
1922AC_MSG_CHECKING(--enable-rubyinterp argument)
1923AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001924 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001925 [enable_rubyinterp="no"])
1926AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001927if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001928 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1929 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1930 fi
1931
Bram Moolenaar165641d2010-02-17 16:23:09 +01001932 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001933 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001934 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1935 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1936 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001937 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001938 if test "X$vi_cv_path_ruby" != "X"; then
1939 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001940 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 +00001941 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001942 AC_MSG_CHECKING(Ruby rbconfig)
1943 ruby_rbconfig="RbConfig"
1944 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1945 ruby_rbconfig="Config"
1946 fi
1947 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001948 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001949 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 +00001950 if test "X$rubyhdrdir" != "X"; then
1951 AC_MSG_RESULT($rubyhdrdir)
1952 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001953 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1954 if test -d "$rubyarchdir"; then
1955 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001956 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001957 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001958 if test "X$rubyversion" = "X"; then
1959 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1960 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001961 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001962 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001963 if test "X$rubylibs" != "X"; then
1964 RUBY_LIBS="$rubylibs"
1965 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001966 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1967 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001968 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01001969 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02001970 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1971 elif test "$librubyarg" = "libruby.a"; then
1972 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1973 librubyarg="-lruby"
1974 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001975 fi
1976
1977 if test "X$librubyarg" != "X"; then
1978 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1979 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001980 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001981 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001982 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1983 dnl be included if requested by passing --with-mac-arch to
1984 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001985 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001986 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001987 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001988 LDFLAGS="$rubyldflags $LDFLAGS"
1989 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001990 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001991 fi
1992 RUBY_SRC="if_ruby.c"
1993 RUBY_OBJ="objects/if_ruby.o"
1994 RUBY_PRO="if_ruby.pro"
1995 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001996 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02001997 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02001998 if test -z "$libruby_soname"; then
1999 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2000 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002001 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002002 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002003 RUBY_LIBS=
2004 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002005 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2006 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2007 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002008 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002009 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002010 fi
2011 else
2012 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2013 fi
2014 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002015
2016 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2017 AC_MSG_ERROR([could not configure Ruby])
2018 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002019fi
2020AC_SUBST(RUBY_SRC)
2021AC_SUBST(RUBY_OBJ)
2022AC_SUBST(RUBY_PRO)
2023AC_SUBST(RUBY_CFLAGS)
2024AC_SUBST(RUBY_LIBS)
2025
2026AC_MSG_CHECKING(--enable-cscope argument)
2027AC_ARG_ENABLE(cscope,
2028 [ --enable-cscope Include cscope interface.], ,
2029 [enable_cscope="no"])
2030AC_MSG_RESULT($enable_cscope)
2031if test "$enable_cscope" = "yes"; then
2032 AC_DEFINE(FEAT_CSCOPE)
2033fi
2034
Bram Moolenaar071d4272004-06-13 20:20:40 +00002035AC_MSG_CHECKING(--disable-netbeans argument)
2036AC_ARG_ENABLE(netbeans,
2037 [ --disable-netbeans Disable NetBeans integration support.],
2038 , [enable_netbeans="yes"])
2039if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002040 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2041 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2042 enable_netbeans="no"
2043 else
2044 AC_MSG_RESULT(no)
2045 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002046else
2047 AC_MSG_RESULT(yes)
2048fi
2049
2050AC_MSG_CHECKING(--disable-channel argument)
2051AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002052 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002053 , [enable_channel="yes"])
2054if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002055 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2056 AC_MSG_RESULT([cannot use channels with tiny or small features])
2057 enable_channel="no"
2058 else
2059 AC_MSG_RESULT(no)
2060 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002061else
2062 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002063 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002064 enable_netbeans="no"
2065 else
2066 AC_MSG_RESULT(yes)
2067 fi
2068fi
2069
Bram Moolenaar16435482016-01-24 21:31:54 +01002070if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002071 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002072 if test "x$HAIKU" = "xyes"; then
2073 AC_CHECK_LIB(network, socket)
2074 else
2075 AC_CHECK_LIB(socket, socket)
2076 fi
2077
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002078 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
2079 [AC_TRY_LINK([
2080#include <stdio.h>
2081#include <stdlib.h>
2082#include <stdarg.h>
2083#include <fcntl.h>
2084#include <netdb.h>
2085#include <netinet/in.h>
2086#include <errno.h>
2087#include <sys/types.h>
2088#include <sys/socket.h>
2089 /* Check bitfields */
2090 struct nbbuf {
2091 unsigned int initDone:1;
2092 unsigned short signmaplen;
2093 };
2094 ], [
2095 /* Check creating a socket. */
2096 struct sockaddr_in server;
2097 struct addrinfo *res;
2098 (void)socket(AF_INET, SOCK_STREAM, 0);
2099 (void)htons(100);
2100 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2101 if (errno == ECONNREFUSED)
2102 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2103 (void)freeaddrinfo(res);
2104 ],
2105 [vim_cv_ipv6_networking="yes"],
2106 [vim_cv_ipv6_networking="no"])])
2107
2108 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2109 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002110 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002111 else
2112 dnl On Solaris we need the nsl library.
2113 AC_CHECK_LIB(nsl, gethostbyname)
2114 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
2115 [AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002116#include <stdio.h>
2117#include <stdlib.h>
2118#include <stdarg.h>
2119#include <fcntl.h>
2120#include <netdb.h>
2121#include <netinet/in.h>
2122#include <errno.h>
2123#include <sys/types.h>
2124#include <sys/socket.h>
2125 /* Check bitfields */
2126 struct nbbuf {
2127 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002128 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002129 };
2130 ], [
2131 /* Check creating a socket. */
2132 struct sockaddr_in server;
2133 (void)socket(AF_INET, SOCK_STREAM, 0);
2134 (void)htons(100);
2135 (void)gethostbyname("microsoft.com");
2136 if (errno == ECONNREFUSED)
2137 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2138 ],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002139 [vim_cv_ipv4_networking="yes"],
2140 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2141 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002142fi
2143if test "$enable_netbeans" = "yes"; then
2144 AC_DEFINE(FEAT_NETBEANS_INTG)
2145 NETBEANS_SRC="netbeans.c"
2146 AC_SUBST(NETBEANS_SRC)
2147 NETBEANS_OBJ="objects/netbeans.o"
2148 AC_SUBST(NETBEANS_OBJ)
2149fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002150if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002151 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002152 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002153 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002154 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002155 AC_SUBST(CHANNEL_OBJ)
2156fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002157
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002158AC_MSG_CHECKING(--enable-terminal argument)
2159AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002160 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002161 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002162if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002163 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2164 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2165 enable_terminal="no"
2166 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002167 if test "$enable_terminal" = "auto"; then
2168 enable_terminal="yes"
2169 AC_MSG_RESULT(defaulting to yes)
2170 else
2171 AC_MSG_RESULT(yes)
2172 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002173 fi
2174else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002175 if test "$enable_terminal" = "auto"; then
2176 enable_terminal="no"
2177 AC_MSG_RESULT(defaulting to no)
2178 else
2179 AC_MSG_RESULT(no)
2180 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002181fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002182if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002183 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002184 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 +02002185 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002186 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 +02002187 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002188 TERM_TEST="test_libvterm"
2189 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002190fi
2191
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002192AC_MSG_CHECKING(--enable-autoservername argument)
2193AC_ARG_ENABLE(autoservername,
2194 [ --enable-autoservername Automatically define servername at vim startup.], ,
2195 [enable_autoservername="no"])
2196AC_MSG_RESULT($enable_autoservername)
2197if test "$enable_autoservername" = "yes"; then
2198 AC_DEFINE(FEAT_AUTOSERVERNAME)
2199fi
2200
Bram Moolenaar071d4272004-06-13 20:20:40 +00002201AC_MSG_CHECKING(--enable-multibyte argument)
2202AC_ARG_ENABLE(multibyte,
2203 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002204 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002205AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002206if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002207 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2208 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002209fi
2210
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002211dnl Right-to-Left language support for Vim will be included with big features,
2212dnl unless ENABLE_RIGHTLEFT is undefined.
2213AC_MSG_CHECKING(--disable-rightleft argument)
2214AC_ARG_ENABLE(rightleft,
2215 [ --disable-rightleft Do not include Right-to-Left language support.],
2216 , [enable_rightleft="yes"])
2217if test "$enable_rightleft" = "yes"; then
2218 AC_MSG_RESULT(no)
2219else
2220 AC_MSG_RESULT(yes)
2221 AC_DEFINE(DISABLE_RIGHTLEFT)
2222fi
2223
2224dnl Arabic language support for Vim will be included with big features,
2225dnl unless ENABLE_ARABIC is undefined.
2226AC_MSG_CHECKING(--disable-arabic argument)
2227AC_ARG_ENABLE(arabic,
2228 [ --disable-arabic Do not include Arabic language support.],
2229 , [enable_arabic="yes"])
2230if test "$enable_arabic" = "yes"; then
2231 AC_MSG_RESULT(no)
2232else
2233 AC_MSG_RESULT(yes)
2234 AC_DEFINE(DISABLE_ARABIC)
2235fi
2236
Bram Moolenaar14184a32019-02-16 15:10:30 +01002237dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002238AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002239 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002240
Bram Moolenaar071d4272004-06-13 20:20:40 +00002241AC_MSG_CHECKING(--enable-xim argument)
2242AC_ARG_ENABLE(xim,
2243 [ --enable-xim Include XIM input support.],
2244 AC_MSG_RESULT($enable_xim),
2245 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002246
2247AC_MSG_CHECKING(--enable-fontset argument)
2248AC_ARG_ENABLE(fontset,
2249 [ --enable-fontset Include X fontset output support.], ,
2250 [enable_fontset="no"])
2251AC_MSG_RESULT($enable_fontset)
2252dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2253
2254test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002255test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002256if test "$with_x" = no; then
2257 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2258else
2259 dnl Do this check early, so that its failure can override user requests.
2260
2261 AC_PATH_PROG(xmkmfpath, xmkmf)
2262
2263 AC_PATH_XTRA
2264
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002265 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002266 dnl be compiled with a special option.
2267 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002268 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002269 CFLAGS="$CFLAGS -W c,dll"
2270 LDFLAGS="$LDFLAGS -W l,dll"
2271 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2272 fi
2273
2274 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002275 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002276
2277 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2278 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2279 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2280 X_LIBS="$X_LIBS -L$x_libraries"
2281 if test "`(uname) 2>/dev/null`" = SunOS &&
2282 uname -r | grep '^5' >/dev/null; then
2283 X_LIBS="$X_LIBS -R $x_libraries"
2284 fi
2285 fi
2286
2287 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2288 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2289 AC_MSG_RESULT(Corrected X includes to $x_includes)
2290 X_CFLAGS="$X_CFLAGS -I$x_includes"
2291 fi
2292
2293 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2294 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2295 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2296 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2297 dnl Same for "-R/usr/lib ".
2298 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2299
2300
2301 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002302 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2303 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002304 AC_MSG_CHECKING(if X11 header files can be found)
2305 cflags_save=$CFLAGS
2306 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002307 AC_TRY_COMPILE([#include <X11/Xlib.h>
2308#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002309 AC_MSG_RESULT(yes),
2310 AC_MSG_RESULT(no); no_x=yes)
2311 CFLAGS=$cflags_save
2312
2313 if test "${no_x-no}" = yes; then
2314 with_x=no
2315 else
2316 AC_DEFINE(HAVE_X11)
2317 X_LIB="-lXt -lX11";
2318 AC_SUBST(X_LIB)
2319
2320 ac_save_LDFLAGS="$LDFLAGS"
2321 LDFLAGS="-L$x_libraries $LDFLAGS"
2322
2323 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2324 dnl For HP-UX 10.20 it must be before -lSM -lICE
2325 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2326 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2327
2328 dnl Some systems need -lnsl -lsocket when testing for ICE.
2329 dnl The check above doesn't do this, try here (again). Also needed to get
2330 dnl them after Xdmcp. link.sh will remove them when not needed.
2331 dnl Check for other function than above to avoid the cached value
2332 AC_CHECK_LIB(ICE, IceOpenConnection,
2333 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2334
2335 dnl Check for -lXpm (needed for some versions of Motif)
2336 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2337 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2338 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2339
2340 dnl Check that the X11 header files don't use implicit declarations
2341 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2342 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002343 dnl -Werror is GCC only, others like Solaris Studio might not like it
2344 if test "$GCC" = yes; then
2345 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2346 else
2347 CFLAGS="$CFLAGS $X_CFLAGS"
2348 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002349 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2350 AC_MSG_RESULT(no),
2351 CFLAGS="$CFLAGS -Wno-implicit-int"
2352 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2353 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2354 AC_MSG_RESULT(test failed)
2355 )
2356 )
2357 CFLAGS=$cflags_save
2358
2359 LDFLAGS="$ac_save_LDFLAGS"
2360
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002361 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2362 AC_CACHE_VAL(ac_cv_small_wchar_t,
2363 [AC_TRY_RUN([
2364#include <X11/Xlib.h>
2365#if STDC_HEADERS
2366# include <stdlib.h>
2367# include <stddef.h>
2368#endif
2369 main()
2370 {
2371 if (sizeof(wchar_t) <= 2)
2372 exit(1);
2373 exit(0);
2374 }],
2375 ac_cv_small_wchar_t="no",
2376 ac_cv_small_wchar_t="yes",
2377 AC_MSG_ERROR(failed to compile test program))])
2378 AC_MSG_RESULT($ac_cv_small_wchar_t)
2379 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2380 AC_DEFINE(SMALL_WCHAR_T)
2381 fi
2382
Bram Moolenaar071d4272004-06-13 20:20:40 +00002383 fi
2384fi
2385
Bram Moolenaard2a05492018-07-27 22:35:15 +02002386dnl Check if --with-x was given but it doesn't work.
2387if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2388 AC_MSG_ERROR([could not configure X])
2389fi
2390
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002391test "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 +00002392
2393AC_MSG_CHECKING(--enable-gui argument)
2394AC_ARG_ENABLE(gui,
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002395 [ --enable-gui[=OPTS] X11 GUI. [default=auto] [OPTS=auto/no/gtk2/gnome2/gtk3/motif/athena/neXtaw/haiku/photon/carbon]], , enable_gui="auto")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002396
2397dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2398dnl Do not use character classes for portability with old tools.
2399enable_gui_canon=`echo "_$enable_gui" | \
2400 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2401
2402dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002403SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002404SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002405SKIP_GNOME=YES
2406SKIP_MOTIF=YES
2407SKIP_ATHENA=YES
2408SKIP_NEXTAW=YES
2409SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002410SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002411GUITYPE=NONE
2412
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002413if test "x$HAIKU" = "xyes"; then
2414 SKIP_HAIKU=
2415 case "$enable_gui_canon" in
2416 no) AC_MSG_RESULT(no GUI support)
2417 SKIP_HAIKU=YES ;;
2418 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2419 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2420 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2421 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2422 SKIP_HAIKU=YES ;;
2423 esac
2424elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002425 SKIP_PHOTON=
2426 case "$enable_gui_canon" in
2427 no) AC_MSG_RESULT(no GUI support)
2428 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002429 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2430 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002431 photon) AC_MSG_RESULT(Photon GUI support) ;;
2432 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2433 SKIP_PHOTON=YES ;;
2434 esac
2435
Bram Moolenaar040f9752020-08-11 23:08:48 +02002436elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2437 case "$enable_gui_canon" in
2438 no) AC_MSG_RESULT(no GUI support) ;;
2439 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2440 gui_auto=yes ;;
2441 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002442 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002443 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002444else
2445
Bram Moolenaar071d4272004-06-13 20:20:40 +00002446 case "$enable_gui_canon" in
2447 no|none) AC_MSG_RESULT(no GUI support) ;;
2448 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002449 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002450 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002451 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002452 SKIP_GNOME=
2453 SKIP_MOTIF=
2454 SKIP_ATHENA=
Bram Moolenaar097148e2020-08-11 21:58:20 +02002455 SKIP_NEXTAW=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002456 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002457 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002458 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2459 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002460 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002461 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2462 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463 motif) AC_MSG_RESULT(Motif GUI support)
2464 SKIP_MOTIF=;;
2465 athena) AC_MSG_RESULT(Athena GUI support)
2466 SKIP_ATHENA=;;
2467 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2468 SKIP_NEXTAW=;;
2469 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2470 esac
2471
2472fi
2473
Bram Moolenaar071d4272004-06-13 20:20:40 +00002474if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2475 -a "$enable_gui_canon" != "gnome2"; then
2476 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2477 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002478 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002479 , enable_gtk2_check="yes")
2480 AC_MSG_RESULT($enable_gtk2_check)
2481 if test "x$enable_gtk2_check" = "xno"; then
2482 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002483 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002484 fi
2485fi
2486
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002487if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002488 AC_MSG_CHECKING(whether or not to look for GNOME)
2489 AC_ARG_ENABLE(gnome-check,
2490 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2491 , enable_gnome_check="no")
2492 AC_MSG_RESULT($enable_gnome_check)
2493 if test "x$enable_gnome_check" = "xno"; then
2494 SKIP_GNOME=YES
2495 fi
2496fi
2497
Bram Moolenaar98921892016-02-23 17:14:37 +01002498if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2499 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2500 AC_ARG_ENABLE(gtk3-check,
2501 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2502 , enable_gtk3_check="yes")
2503 AC_MSG_RESULT($enable_gtk3_check)
2504 if test "x$enable_gtk3_check" = "xno"; then
2505 SKIP_GTK3=YES
2506 fi
2507fi
2508
Bram Moolenaar071d4272004-06-13 20:20:40 +00002509if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2510 AC_MSG_CHECKING(whether or not to look for Motif)
2511 AC_ARG_ENABLE(motif-check,
2512 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2513 , enable_motif_check="yes")
2514 AC_MSG_RESULT($enable_motif_check)
2515 if test "x$enable_motif_check" = "xno"; then
2516 SKIP_MOTIF=YES
2517 fi
2518fi
2519
2520if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2521 AC_MSG_CHECKING(whether or not to look for Athena)
2522 AC_ARG_ENABLE(athena-check,
2523 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2524 , enable_athena_check="yes")
2525 AC_MSG_RESULT($enable_athena_check)
2526 if test "x$enable_athena_check" = "xno"; then
2527 SKIP_ATHENA=YES
2528 fi
2529fi
2530
2531if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2532 AC_MSG_CHECKING(whether or not to look for neXtaw)
2533 AC_ARG_ENABLE(nextaw-check,
2534 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2535 , enable_nextaw_check="yes")
2536 AC_MSG_RESULT($enable_nextaw_check);
2537 if test "x$enable_nextaw_check" = "xno"; then
2538 SKIP_NEXTAW=YES
2539 fi
2540fi
2541
Bram Moolenaar071d4272004-06-13 20:20:40 +00002542dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002543dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002544dnl
2545dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002546dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002547dnl
2548AC_DEFUN(AM_PATH_GTK,
2549[
2550 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2551 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002552 no_gtk=""
2553 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2554 && $PKG_CONFIG --exists gtk+-2.0; then
2555 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002556 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2557 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002558 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2559 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2560 dnl something like that.
2561 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002562 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002563 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2564 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2565 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2566 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2567 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2568 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2569 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2570 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002571 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2572 && $PKG_CONFIG --exists gtk+-3.0; then
2573 {
2574 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2575 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2576
2577 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2578 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2579 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2580 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2581 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2582 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2583 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2584 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2585 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2586 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002587 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002588 dnl Put some text before the "no" to hint at installing the gtk-dev
2589 dnl packages.
2590 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002591 no_gtk=yes
2592 fi
2593
2594 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2595 {
2596 ac_save_CFLAGS="$CFLAGS"
2597 ac_save_LIBS="$LIBS"
2598 CFLAGS="$CFLAGS $GTK_CFLAGS"
2599 LIBS="$LIBS $GTK_LIBS"
2600
2601 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002602 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002603 dnl
2604 rm -f conf.gtktest
2605 AC_TRY_RUN([
2606#include <gtk/gtk.h>
2607#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002608#if STDC_HEADERS
2609# include <stdlib.h>
2610# include <stddef.h>
2611#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002612
2613int
2614main ()
2615{
2616int major, minor, micro;
2617char *tmp_version;
2618
2619system ("touch conf.gtktest");
2620
2621/* HP/UX 9 (%@#!) writes to sscanf strings */
2622tmp_version = g_strdup("$min_gtk_version");
2623if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2624 printf("%s, bad version string\n", "$min_gtk_version");
2625 exit(1);
2626 }
2627
2628if ((gtk_major_version > major) ||
2629 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2630 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2631 (gtk_micro_version >= micro)))
2632{
2633 return 0;
2634}
2635return 1;
2636}
2637],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2638 CFLAGS="$ac_save_CFLAGS"
2639 LIBS="$ac_save_LIBS"
2640 }
2641 fi
2642 if test "x$no_gtk" = x ; then
2643 if test "x$enable_gtktest" = "xyes"; then
2644 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2645 else
2646 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2647 fi
2648 ifelse([$2], , :, [$2])
2649 else
2650 {
2651 AC_MSG_RESULT(no)
2652 GTK_CFLAGS=""
2653 GTK_LIBS=""
2654 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002655 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2656 AC_MSG_ERROR([could not configure GTK])
2657 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002658 }
2659 fi
2660 }
2661 else
2662 GTK_CFLAGS=""
2663 GTK_LIBS=""
2664 ifelse([$3], , :, [$3])
2665 fi
2666 AC_SUBST(GTK_CFLAGS)
2667 AC_SUBST(GTK_LIBS)
2668 rm -f conf.gtktest
2669])
2670
2671dnl ---------------------------------------------------------------------------
2672dnl gnome
2673dnl ---------------------------------------------------------------------------
2674AC_DEFUN([GNOME_INIT_HOOK],
2675[
2676 AC_SUBST(GNOME_LIBS)
2677 AC_SUBST(GNOME_LIBDIR)
2678 AC_SUBST(GNOME_INCLUDEDIR)
2679
2680 AC_ARG_WITH(gnome-includes,
2681 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2682 [CFLAGS="$CFLAGS -I$withval"]
2683 )
2684
2685 AC_ARG_WITH(gnome-libs,
2686 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2687 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2688 )
2689
2690 AC_ARG_WITH(gnome,
2691 [ --with-gnome Specify prefix for GNOME files],
2692 if test x$withval = xyes; then
2693 want_gnome=yes
2694 ifelse([$1], [], :, [$1])
2695 else
2696 if test "x$withval" = xno; then
2697 want_gnome=no
2698 else
2699 want_gnome=yes
2700 LDFLAGS="$LDFLAGS -L$withval/lib"
2701 CFLAGS="$CFLAGS -I$withval/include"
2702 gnome_prefix=$withval/lib
2703 fi
2704 fi,
2705 want_gnome=yes)
2706
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002707 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002708 {
2709 AC_MSG_CHECKING(for libgnomeui-2.0)
2710 if $PKG_CONFIG --exists libgnomeui-2.0; then
2711 AC_MSG_RESULT(yes)
2712 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2713 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2714 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002715
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002716 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2717 dnl This might not be the right way but it works for me...
2718 AC_MSG_CHECKING(for FreeBSD)
2719 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2720 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002721 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002722 GNOME_LIBS="$GNOME_LIBS -pthread"
2723 else
2724 AC_MSG_RESULT(no)
2725 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002726 $1
2727 else
2728 AC_MSG_RESULT(not found)
2729 if test "x$2" = xfail; then
2730 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2731 fi
2732 fi
2733 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002734 fi
2735])
2736
2737AC_DEFUN([GNOME_INIT],[
2738 GNOME_INIT_HOOK([],fail)
2739])
2740
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002741if test "X$PKG_CONFIG" = "X"; then
2742 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2743fi
2744
Bram Moolenaar071d4272004-06-13 20:20:40 +00002745
2746dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002747dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002748dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002749if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002750
2751 AC_MSG_CHECKING(--disable-gtktest argument)
2752 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2753 , enable_gtktest=yes)
2754 if test "x$enable_gtktest" = "xyes" ; then
2755 AC_MSG_RESULT(gtk test enabled)
2756 else
2757 AC_MSG_RESULT(gtk test disabled)
2758 fi
2759
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002760 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002761 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2762 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002763 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2764 dnl found.
2765 save_skip_gtk3=$SKIP_GTK3
2766 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002767 AM_PATH_GTK(2.2.0,
2768 [GUI_LIB_LOC="$GTK_LIBDIR"
2769 GTK_LIBNAME="$GTK_LIBS"
2770 GUI_INC_LOC="$GTK_CFLAGS"], )
2771 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002772 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002773 SKIP_ATHENA=YES
2774 SKIP_NEXTAW=YES
2775 SKIP_MOTIF=YES
2776 GUITYPE=GTK
2777 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002778 else
2779 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002780 fi
2781 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002782 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002783 dnl
2784 dnl if GTK exists, then check for GNOME.
2785 dnl
2786 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002787 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002788 GNOME_INIT_HOOK([have_gnome=yes])
2789 if test "x$have_gnome" = xyes ; then
2790 AC_DEFINE(FEAT_GUI_GNOME)
2791 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2792 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002793 fi
2794 }
2795 fi
2796 fi
2797fi
2798
Bram Moolenaar98921892016-02-23 17:14:37 +01002799
2800dnl ---------------------------------------------------------------------------
2801dnl Check for GTK3.
2802dnl ---------------------------------------------------------------------------
2803if test -z "$SKIP_GTK3"; then
2804
2805 AC_MSG_CHECKING(--disable-gtktest argument)
2806 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2807 , enable_gtktest=yes)
2808 if test "x$enable_gtktest" = "xyes" ; then
2809 AC_MSG_RESULT(gtk test enabled)
2810 else
2811 AC_MSG_RESULT(gtk test disabled)
2812 fi
2813
Bram Moolenaar98921892016-02-23 17:14:37 +01002814 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002815 save_skip_gtk2=$SKIP_GTK2
2816 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002817 AM_PATH_GTK(3.0.0,
2818 [GUI_LIB_LOC="$GTK_LIBDIR"
2819 GTK_LIBNAME="$GTK_LIBS"
2820 GUI_INC_LOC="$GTK_CFLAGS"], )
2821 if test "x$GTK_CFLAGS" != "x"; then
2822 SKIP_GTK2=YES
2823 SKIP_GNOME=YES
2824 SKIP_ATHENA=YES
2825 SKIP_NEXTAW=YES
2826 SKIP_MOTIF=YES
2827 GUITYPE=GTK
2828 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002829 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002830 else
2831 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002832 fi
2833 fi
2834fi
2835
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002836dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002837dnl glib-compile-resources is found in PATH, use GResource.
2838if test "x$GUITYPE" = "xGTK"; then
2839 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2840 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2841 if test "x$gdk_pixbuf_version" != x ; then
2842 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2843 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2844 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002845 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002846 AC_MSG_RESULT([OK.])
2847 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2848 AC_MSG_CHECKING([glib-compile-resources])
2849 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002850 GLIB_COMPILE_RESOURCES=""
2851 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002852 else
2853 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002854 AC_DEFINE(USE_GRESOURCE)
2855 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2856 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002857 fi
2858 else
2859 AC_MSG_RESULT([not usable.])
2860 fi
2861 else
2862 AC_MSG_RESULT([cannot obtain from pkg_config.])
2863 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002864
2865 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2866 AC_ARG_ENABLE(icon_cache_update,
2867 [ --disable-icon-cache-update update disabled],
2868 [],
2869 [enable_icon_cache_update="yes"])
2870 if test "$enable_icon_cache_update" = "yes"; then
2871 AC_MSG_RESULT([not set])
2872 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2873 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2874 AC_MSG_RESULT([not found in PATH.])
2875 fi
2876 else
2877 AC_MSG_RESULT([update disabled])
2878 fi
2879
2880 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2881 AC_ARG_ENABLE(desktop_database_update,
2882 [ --disable-desktop-database-update update disabled],
2883 [],
2884 [enable_desktop_database_update="yes"])
2885 if test "$enable_desktop_database_update" = "yes"; then
2886 AC_MSG_RESULT([not set])
2887 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2888 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2889 AC_MSG_RESULT([not found in PATH.])
2890 fi
2891 else
2892 AC_MSG_RESULT([update disabled])
2893 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002894fi
2895AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002896AC_SUBST(GRESOURCE_SRC)
2897AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002898AC_SUBST(GTK_UPDATE_ICON_CACHE)
2899AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002900
Bram Moolenaar071d4272004-06-13 20:20:40 +00002901dnl Check for Motif include files location.
2902dnl The LAST one found is used, this makes the highest version to be used,
2903dnl e.g. when Motif1.2 and Motif2.0 are both present.
2904
2905if test -z "$SKIP_MOTIF"; then
2906 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"
2907 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2908 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2909
2910 AC_MSG_CHECKING(for location of Motif GUI includes)
2911 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2912 GUI_INC_LOC=
2913 for try in $gui_includes; do
2914 if test -f "$try/Xm/Xm.h"; then
2915 GUI_INC_LOC=$try
2916 fi
2917 done
2918 if test -n "$GUI_INC_LOC"; then
2919 if test "$GUI_INC_LOC" = /usr/include; then
2920 GUI_INC_LOC=
2921 AC_MSG_RESULT(in default path)
2922 else
2923 AC_MSG_RESULT($GUI_INC_LOC)
2924 fi
2925 else
2926 AC_MSG_RESULT(<not found>)
2927 SKIP_MOTIF=YES
2928 fi
2929fi
2930
2931dnl Check for Motif library files location. In the same order as the include
2932dnl files, to avoid a mixup if several versions are present
2933
2934if test -z "$SKIP_MOTIF"; then
2935 AC_MSG_CHECKING(--with-motif-lib argument)
2936 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002937 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002938 [ MOTIF_LIBNAME="${withval}" ] )
2939
2940 if test -n "$MOTIF_LIBNAME"; then
2941 AC_MSG_RESULT($MOTIF_LIBNAME)
2942 GUI_LIB_LOC=
2943 else
2944 AC_MSG_RESULT(no)
2945
2946 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2947 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2948
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002949 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2950 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002951 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002952 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 +00002953 GUI_LIB_LOC=
2954 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002955 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002956 if test -f "$libtry"; then
2957 GUI_LIB_LOC=$try
2958 fi
2959 done
2960 done
2961 if test -n "$GUI_LIB_LOC"; then
2962 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002963 if test "$GUI_LIB_LOC" = /usr/lib \
2964 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2965 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002966 GUI_LIB_LOC=
2967 AC_MSG_RESULT(in default path)
2968 else
2969 if test -n "$GUI_LIB_LOC"; then
2970 AC_MSG_RESULT($GUI_LIB_LOC)
2971 if test "`(uname) 2>/dev/null`" = SunOS &&
2972 uname -r | grep '^5' >/dev/null; then
2973 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2974 fi
2975 fi
2976 fi
2977 MOTIF_LIBNAME=-lXm
2978 else
2979 AC_MSG_RESULT(<not found>)
2980 SKIP_MOTIF=YES
2981 fi
2982 fi
2983fi
2984
2985if test -z "$SKIP_MOTIF"; then
2986 SKIP_ATHENA=YES
2987 SKIP_NEXTAW=YES
2988 GUITYPE=MOTIF
2989 AC_SUBST(MOTIF_LIBNAME)
2990fi
2991
2992dnl Check if the Athena files can be found
2993
2994GUI_X_LIBS=
2995
2996if test -z "$SKIP_ATHENA"; then
2997 AC_MSG_CHECKING(if Athena header files can be found)
2998 cflags_save=$CFLAGS
2999 CFLAGS="$CFLAGS $X_CFLAGS"
3000 AC_TRY_COMPILE([
3001#include <X11/Intrinsic.h>
3002#include <X11/Xaw/Paned.h>], ,
3003 AC_MSG_RESULT(yes),
3004 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
3005 CFLAGS=$cflags_save
3006fi
3007
3008if test -z "$SKIP_ATHENA"; then
3009 GUITYPE=ATHENA
3010fi
3011
3012if test -z "$SKIP_NEXTAW"; then
3013 AC_MSG_CHECKING(if neXtaw header files can be found)
3014 cflags_save=$CFLAGS
3015 CFLAGS="$CFLAGS $X_CFLAGS"
3016 AC_TRY_COMPILE([
3017#include <X11/Intrinsic.h>
3018#include <X11/neXtaw/Paned.h>], ,
3019 AC_MSG_RESULT(yes),
3020 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
3021 CFLAGS=$cflags_save
3022fi
3023
3024if test -z "$SKIP_NEXTAW"; then
3025 GUITYPE=NEXTAW
3026fi
3027
3028if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3029 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3030 dnl Avoid adding it when it twice
3031 if test -n "$GUI_INC_LOC"; then
3032 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3033 fi
3034 if test -n "$GUI_LIB_LOC"; then
3035 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3036 fi
3037
3038 dnl Check for -lXext and then for -lXmu
3039 ldflags_save=$LDFLAGS
3040 LDFLAGS="$X_LIBS $LDFLAGS"
3041 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3042 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3043 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3044 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3045 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3046 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3047 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3048 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3049 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3050 if test -z "$SKIP_MOTIF"; then
3051 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3052 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3053 fi
3054 LDFLAGS=$ldflags_save
3055
3056 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3057 AC_MSG_CHECKING(for extra X11 defines)
3058 NARROW_PROTO=
3059 rm -fr conftestdir
3060 if mkdir conftestdir; then
3061 cd conftestdir
3062 cat > Imakefile <<'EOF'
3063acfindx:
3064 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3065EOF
3066 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3067 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3068 fi
3069 cd ..
3070 rm -fr conftestdir
3071 fi
3072 if test -z "$NARROW_PROTO"; then
3073 AC_MSG_RESULT(no)
3074 else
3075 AC_MSG_RESULT($NARROW_PROTO)
3076 fi
3077 AC_SUBST(NARROW_PROTO)
3078fi
3079
3080dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3081dnl use the X11 include path
3082if test "$enable_xsmp" = "yes"; then
3083 cppflags_save=$CPPFLAGS
3084 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3085 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3086 CPPFLAGS=$cppflags_save
3087fi
3088
3089
Bram Moolenaar98921892016-02-23 17:14:37 +01003090if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003091 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3092 cppflags_save=$CPPFLAGS
3093 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3094 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3095
3096 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3097 if test ! "$enable_xim" = "no"; then
3098 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3099 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3100 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003101 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003102 fi
3103 CPPFLAGS=$cppflags_save
3104
Bram Moolenaar54612582019-11-21 17:13:31 +01003105 dnl automatically enable XIM in the GUI
3106 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003107 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3108 enable_xim="yes"
3109 fi
3110fi
3111
3112if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3113 cppflags_save=$CPPFLAGS
3114 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003115dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3116 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3117 AC_TRY_COMPILE([
3118#include <X11/Intrinsic.h>
3119#include <X11/Xmu/Editres.h>],
3120 [int i; i = 0;],
3121 AC_MSG_RESULT(yes)
3122 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3123 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003124 CPPFLAGS=$cppflags_save
3125fi
3126
3127dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3128if test -z "$SKIP_MOTIF"; then
3129 cppflags_save=$CPPFLAGS
3130 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003131 if test "$zOSUnix" = "yes"; then
3132 xmheader="Xm/Xm.h"
3133 else
3134 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003135 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003136 fi
3137 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003138
Bram Moolenaar77c19352012-06-13 19:19:41 +02003139 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003140 dnl Solaris uses XpmAttributes_21, very annoying.
3141 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3142 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3143 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3144 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3145 )
3146 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003147 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003148 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003149 CPPFLAGS=$cppflags_save
3150fi
3151
3152if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3153 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3154 enable_xim="no"
3155fi
3156if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3157 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3158 enable_fontset="no"
3159fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003160if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003161 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3162 enable_fontset="no"
3163fi
3164
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003165dnl There is no test for the Haiku GUI, if it's selected it's used
3166if test -z "$SKIP_HAIKU"; then
3167 GUITYPE=HAIKUGUI
3168fi
3169
Bram Moolenaar071d4272004-06-13 20:20:40 +00003170if test -z "$SKIP_PHOTON"; then
3171 GUITYPE=PHOTONGUI
3172fi
3173
3174AC_SUBST(GUI_INC_LOC)
3175AC_SUBST(GUI_LIB_LOC)
3176AC_SUBST(GUITYPE)
3177AC_SUBST(GUI_X_LIBS)
3178
3179if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3180 AC_MSG_ERROR([cannot use workshop without Motif])
3181fi
3182
3183dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3184if test "$enable_xim" = "yes"; then
3185 AC_DEFINE(FEAT_XIM)
3186fi
3187if test "$enable_fontset" = "yes"; then
3188 AC_DEFINE(FEAT_XFONTSET)
3189fi
3190
3191
3192dnl ---------------------------------------------------------------------------
3193dnl end of GUI-checking
3194dnl ---------------------------------------------------------------------------
3195
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003196AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003197if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003198 dnl Linux
3199 AC_MSG_RESULT([/proc/self/exe])
3200 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3201elif test -L "/proc/self/path/a.out"; then
3202 dnl Solaris
3203 AC_MSG_RESULT([/proc/self/path/a.out])
3204 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3205elif test -L "/proc/curproc/file"; then
3206 dnl FreeBSD
3207 AC_MSG_RESULT([/proc/curproc/file])
3208 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003209else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003210 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003211fi
3212
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003213dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003214AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003215case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003216 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003217 AC_MSG_CHECKING(for CYGWIN clipboard support)
3218 if test "x$with_x" = "xno" ; then
3219 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3220 AC_MSG_RESULT(yes)
3221 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3222 else
3223 AC_MSG_RESULT(no - using X11)
3224 fi ;;
3225
3226 *) CYGWIN=no; AC_MSG_RESULT(no);;
3227esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003228
Bram Moolenaar071d4272004-06-13 20:20:40 +00003229dnl Checks for libraries and include files.
3230
Bram Moolenaar446cb832008-06-24 21:56:24 +00003231AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3232 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003233 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003234#include "confdefs.h"
3235#include <ctype.h>
3236#if STDC_HEADERS
3237# include <stdlib.h>
3238# include <stddef.h>
3239#endif
3240main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003241 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003242 vim_cv_toupper_broken=yes
3243 ],[
3244 vim_cv_toupper_broken=no
3245 ],[
3246 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3247 ])])
3248
3249if test "x$vim_cv_toupper_broken" = "xyes" ; then
3250 AC_DEFINE(BROKEN_TOUPPER)
3251fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003252
3253AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003254AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003255 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3256 AC_MSG_RESULT(no))
3257
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003258AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3259AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3260 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3261 AC_MSG_RESULT(no))
3262
Bram Moolenaar071d4272004-06-13 20:20:40 +00003263dnl Checks for header files.
3264AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3265dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3266if test "$HAS_ELF" = 1; then
3267 AC_CHECK_LIB(elf, main)
3268fi
3269
3270AC_HEADER_DIRENT
3271
Bram Moolenaar071d4272004-06-13 20:20:40 +00003272dnl If sys/wait.h is not found it might still exist but not be POSIX
3273dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3274if test $ac_cv_header_sys_wait_h = no; then
3275 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3276 AC_TRY_COMPILE([#include <sys/wait.h>],
3277 [union wait xx, yy; xx = yy],
3278 AC_MSG_RESULT(yes)
3279 AC_DEFINE(HAVE_SYS_WAIT_H)
3280 AC_DEFINE(HAVE_UNION_WAIT),
3281 AC_MSG_RESULT(no))
3282fi
3283
Bram Moolenaar779a7752016-01-30 23:26:34 +01003284AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003285 sys/select.h sys/utsname.h termcap.h fcntl.h \
3286 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3287 termio.h iconv.h inttypes.h langinfo.h math.h \
3288 unistd.h stropts.h errno.h sys/resource.h \
3289 sys/systeminfo.h locale.h sys/stream.h termios.h \
3290 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003291 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003292 util/debug.h util/msg18n.h frame.h sys/acl.h \
3293 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003294
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003295dnl sys/ptem.h depends on sys/stream.h on Solaris
3296AC_CHECK_HEADERS(sys/ptem.h, [], [],
3297[#if defined HAVE_SYS_STREAM_H
3298# include <sys/stream.h>
3299#endif])
3300
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003301dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3302AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3303[#if defined HAVE_SYS_PARAM_H
3304# include <sys/param.h>
3305#endif])
3306
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003307
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003308dnl pthread_np.h may exist but can only be used after including pthread.h
3309AC_MSG_CHECKING([for pthread_np.h])
3310AC_TRY_COMPILE([
3311#include <pthread.h>
3312#include <pthread_np.h>],
3313 [int i; i = 0;],
3314 AC_MSG_RESULT(yes)
3315 AC_DEFINE(HAVE_PTHREAD_NP_H),
3316 AC_MSG_RESULT(no))
3317
Bram Moolenaare344bea2005-09-01 20:46:49 +00003318AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003319if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003320 dnl The strings.h file on OS/X contains a warning and nothing useful.
3321 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3322else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003323
3324dnl Check if strings.h and string.h can both be included when defined.
3325AC_MSG_CHECKING([if strings.h can be included after string.h])
3326cppflags_save=$CPPFLAGS
3327CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3328AC_TRY_COMPILE([
3329#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3330# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3331 /* but don't do it on AIX 5.1 (Uribarri) */
3332#endif
3333#ifdef HAVE_XM_XM_H
3334# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3335#endif
3336#ifdef HAVE_STRING_H
3337# include <string.h>
3338#endif
3339#if defined(HAVE_STRINGS_H)
3340# include <strings.h>
3341#endif
3342 ], [int i; i = 0;],
3343 AC_MSG_RESULT(yes),
3344 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3345 AC_MSG_RESULT(no))
3346CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003347fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003348
3349dnl Checks for typedefs, structures, and compiler characteristics.
3350AC_PROG_GCC_TRADITIONAL
3351AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003352AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003353AC_TYPE_MODE_T
3354AC_TYPE_OFF_T
3355AC_TYPE_PID_T
3356AC_TYPE_SIZE_T
3357AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003358AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003359
Bram Moolenaar071d4272004-06-13 20:20:40 +00003360AC_HEADER_TIME
3361AC_CHECK_TYPE(ino_t, long)
3362AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003363AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003364AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003365
3366AC_MSG_CHECKING(for rlim_t)
3367if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3368 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3369else
3370 AC_EGREP_CPP(dnl
3371changequote(<<,>>)dnl
3372<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3373changequote([,]),
3374 [
3375#include <sys/types.h>
3376#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003377# include <stdlib.h>
3378# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003379#endif
3380#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003381# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003382#endif
3383 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3384 AC_MSG_RESULT($ac_cv_type_rlim_t)
3385fi
3386if test $ac_cv_type_rlim_t = no; then
3387 cat >> confdefs.h <<\EOF
3388#define rlim_t unsigned long
3389EOF
3390fi
3391
3392AC_MSG_CHECKING(for stack_t)
3393if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3394 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3395else
3396 AC_EGREP_CPP(stack_t,
3397 [
3398#include <sys/types.h>
3399#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003400# include <stdlib.h>
3401# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003402#endif
3403#include <signal.h>
3404 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3405 AC_MSG_RESULT($ac_cv_type_stack_t)
3406fi
3407if test $ac_cv_type_stack_t = no; then
3408 cat >> confdefs.h <<\EOF
3409#define stack_t struct sigaltstack
3410EOF
3411fi
3412
3413dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3414AC_MSG_CHECKING(whether stack_t has an ss_base field)
3415AC_TRY_COMPILE([
3416#include <sys/types.h>
3417#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003418# include <stdlib.h>
3419# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003420#endif
3421#include <signal.h>
3422#include "confdefs.h"
3423 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3424 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3425 AC_MSG_RESULT(no))
3426
3427olibs="$LIBS"
3428AC_MSG_CHECKING(--with-tlib argument)
3429AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3430if test -n "$with_tlib"; then
3431 AC_MSG_RESULT($with_tlib)
3432 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003433 AC_MSG_CHECKING(for linking with $with_tlib library)
3434 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3435 dnl Need to check for tgetent() below.
3436 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003437else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003438 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003439 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3440 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003441 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003442 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003443 dnl Older versions of ncurses have bugs, get a new one!
3444 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003445 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003446 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003447 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3448 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003449 esac
3450 for libname in $tlibs; do
3451 AC_CHECK_LIB(${libname}, tgetent,,)
3452 if test "x$olibs" != "x$LIBS"; then
3453 dnl It's possible that a library is found but it doesn't work
3454 dnl e.g., shared library that cannot be found
3455 dnl compile and run a test program to be sure
3456 AC_TRY_RUN([
3457#ifdef HAVE_TERMCAP_H
3458# include <termcap.h>
3459#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003460#if STDC_HEADERS
3461# include <stdlib.h>
3462# include <stddef.h>
3463#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003464main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3465 res="OK", res="FAIL", res="FAIL")
3466 if test "$res" = "OK"; then
3467 break
3468 fi
3469 AC_MSG_RESULT($libname library is not usable)
3470 LIBS="$olibs"
3471 fi
3472 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003473 if test "x$olibs" = "x$LIBS"; then
3474 AC_MSG_RESULT(no terminal library found)
3475 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003476fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003477
3478if test "x$olibs" = "x$LIBS"; then
3479 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaarbd7f7c12020-07-28 21:03:37 +02003480 AC_TRY_LINK([int tgetent(char *, const char *);],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003481 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3482 AC_MSG_RESULT(yes),
3483 AC_MSG_ERROR([NOT FOUND!
3484 You need to install a terminal library; for example ncurses.
3485 Or specify the name of the library with --with-tlib.]))
3486fi
3487
Bram Moolenaar446cb832008-06-24 21:56:24 +00003488AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3489 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003490 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003491#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003492#ifdef HAVE_TERMCAP_H
3493# include <termcap.h>
3494#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003495#ifdef HAVE_STRING_H
3496# include <string.h>
3497#endif
3498#if STDC_HEADERS
3499# include <stdlib.h>
3500# include <stddef.h>
3501#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003502main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003503{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003504 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003505 vim_cv_terminfo=no
3506 ],[
3507 vim_cv_terminfo=yes
3508 ],[
3509 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3510 ])
3511 ])
3512
3513if test "x$vim_cv_terminfo" = "xyes" ; then
3514 AC_DEFINE(TERMINFO)
3515fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003516
Bram Moolenaara88254f2017-11-02 23:04:14 +01003517AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003518 [
3519 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003520#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003521#ifdef HAVE_TERMCAP_H
3522# include <termcap.h>
3523#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003524#if STDC_HEADERS
3525# include <stdlib.h>
3526# include <stddef.h>
3527#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003528main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003529{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003530 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003531 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003532 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003533 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003534 ],[
3535 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003536 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003537 ])
3538
Bram Moolenaara88254f2017-11-02 23:04:14 +01003539if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003540 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003541fi
3542
3543AC_MSG_CHECKING(whether termcap.h contains ospeed)
3544AC_TRY_LINK([
3545#ifdef HAVE_TERMCAP_H
3546# include <termcap.h>
3547#endif
3548 ], [ospeed = 20000],
3549 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3550 [AC_MSG_RESULT(no)
3551 AC_MSG_CHECKING(whether ospeed can be extern)
3552 AC_TRY_LINK([
3553#ifdef HAVE_TERMCAP_H
3554# include <termcap.h>
3555#endif
3556extern short ospeed;
3557 ], [ospeed = 20000],
3558 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3559 AC_MSG_RESULT(no))]
3560 )
3561
3562AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3563AC_TRY_LINK([
3564#ifdef HAVE_TERMCAP_H
3565# include <termcap.h>
3566#endif
3567 ], [if (UP == 0 && BC == 0) PC = 1],
3568 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3569 [AC_MSG_RESULT(no)
3570 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3571 AC_TRY_LINK([
3572#ifdef HAVE_TERMCAP_H
3573# include <termcap.h>
3574#endif
3575extern char *UP, *BC, PC;
3576 ], [if (UP == 0 && BC == 0) PC = 1],
3577 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3578 AC_MSG_RESULT(no))]
3579 )
3580
3581AC_MSG_CHECKING(whether tputs() uses outfuntype)
3582AC_TRY_COMPILE([
3583#ifdef HAVE_TERMCAP_H
3584# include <termcap.h>
3585#endif
3586 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3587 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3588 AC_MSG_RESULT(no))
3589
3590dnl On some SCO machines sys/select redefines struct timeval
3591AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3592AC_TRY_COMPILE([
3593#include <sys/types.h>
3594#include <sys/time.h>
3595#include <sys/select.h>], ,
3596 AC_MSG_RESULT(yes)
3597 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3598 AC_MSG_RESULT(no))
3599
3600dnl AC_DECL_SYS_SIGLIST
3601
3602dnl Checks for pty.c (copied from screen) ==========================
3603AC_MSG_CHECKING(for /dev/ptc)
3604if test -r /dev/ptc; then
3605 AC_DEFINE(HAVE_DEV_PTC)
3606 AC_MSG_RESULT(yes)
3607else
3608 AC_MSG_RESULT(no)
3609fi
3610
3611AC_MSG_CHECKING(for SVR4 ptys)
3612if test -c /dev/ptmx ; then
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003613 AC_TRY_LINK([
3614// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3615char *ptsname(int);
3616int unlockpt(int);
3617int grantpt(int);
3618 ], [
3619 ptsname(0);
3620 grantpt(0);
3621 unlockpt(0);],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003622 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3623 AC_MSG_RESULT(no))
3624else
3625 AC_MSG_RESULT(no)
3626fi
3627
3628AC_MSG_CHECKING(for ptyranges)
3629if test -d /dev/ptym ; then
3630 pdir='/dev/ptym'
3631else
3632 pdir='/dev'
3633fi
3634dnl SCO uses ptyp%d
3635AC_EGREP_CPP(yes,
3636[#ifdef M_UNIX
3637 yes;
3638#endif
3639 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3640dnl if test -c /dev/ptyp19; then
3641dnl ptys=`echo /dev/ptyp??`
3642dnl else
3643dnl ptys=`echo $pdir/pty??`
3644dnl fi
3645if test "$ptys" != "$pdir/pty??" ; then
3646 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3647 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3648 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3649 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3650 AC_MSG_RESULT([$p0 / $p1])
3651else
3652 AC_MSG_RESULT([don't know])
3653fi
3654
Bram Moolenaar071d4272004-06-13 20:20:40 +00003655dnl Checks for library functions. ===================================
3656
3657AC_TYPE_SIGNAL
3658
3659dnl find out what to use at the end of a signal function
3660if test $ac_cv_type_signal = void; then
3661 AC_DEFINE(SIGRETURN, [return])
3662else
3663 AC_DEFINE(SIGRETURN, [return 0])
3664fi
3665
3666dnl check if struct sigcontext is defined (used for SGI only)
3667AC_MSG_CHECKING(for struct sigcontext)
3668AC_TRY_COMPILE([
3669#include <signal.h>
3670test_sig()
3671{
3672 struct sigcontext *scont;
3673 scont = (struct sigcontext *)0;
3674 return 1;
3675} ], ,
3676 AC_MSG_RESULT(yes)
3677 AC_DEFINE(HAVE_SIGCONTEXT),
3678 AC_MSG_RESULT(no))
3679
3680dnl tricky stuff: try to find out if getcwd() is implemented with
3681dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003682AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3683 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003684 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003685#include "confdefs.h"
3686#ifdef HAVE_UNISTD_H
3687#include <unistd.h>
3688#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003689char *dagger[] = { "IFS=pwd", 0 };
3690main()
3691{
3692 char buffer[500];
3693 extern char **environ;
3694 environ = dagger;
3695 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003696}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003697 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003698 vim_cv_getcwd_broken=no
3699 ],[
3700 vim_cv_getcwd_broken=yes
3701 ],[
3702 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3703 ])
3704 ])
3705
3706if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3707 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003708 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003709fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003710
Bram Moolenaar25153e12010-02-24 14:47:08 +01003711dnl Check for functions in one big call, to reduce the size of configure.
3712dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003713AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003714 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003715 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003716 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003717 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003718 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3719 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003720AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003721AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003722
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003723dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3724dnl appropriate, so that off_t is 64 bits when needed.
3725AC_SYS_LARGEFILE
3726
Bram Moolenaar21606672019-06-14 20:40:58 +02003727AC_MSG_CHECKING(--enable-canberra argument)
3728AC_ARG_ENABLE(canberra,
3729 [ --disable-canberra Do not use libcanberra.],
3730 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003731
Bram Moolenaar21606672019-06-14 20:40:58 +02003732if test "$enable_canberra" = "maybe"; then
3733 if test "$features" = "big" -o "$features" = "huge"; then
3734 AC_MSG_RESULT(Defaulting to yes)
3735 enable_canberra="yes"
3736 else
3737 AC_MSG_RESULT(Defaulting to no)
3738 enable_canberra="no"
3739 fi
3740else
3741 AC_MSG_RESULT($enable_canberra)
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003742fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003743if test "$enable_canberra" = "yes"; then
3744 if test "x$PKG_CONFIG" != "xno"; then
3745 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3746 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3747 fi
3748 if test "x$canberra_lib" = "x"; then
3749 canberra_lib=-lcanberra
3750 canberra_cflags=-D_REENTRANT
3751 fi
3752 AC_MSG_CHECKING(for libcanberra)
3753 ac_save_CFLAGS="$CFLAGS"
3754 ac_save_LIBS="$LIBS"
3755 CFLAGS="$CFLAGS $canberra_cflags"
3756 LIBS="$LIBS $canberra_lib"
3757 AC_TRY_LINK([
3758 # include <canberra.h>
3759 ], [
3760 ca_context *hello;
3761 ca_context_create(&hello);],
3762 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003763 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003764fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003765
3766
Bram Moolenaar071d4272004-06-13 20:20:40 +00003767dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3768AC_MSG_CHECKING(for st_blksize)
3769AC_TRY_COMPILE(
3770[#include <sys/types.h>
3771#include <sys/stat.h>],
3772[ struct stat st;
3773 int n;
3774
3775 stat("/", &st);
3776 n = (int)st.st_blksize;],
3777 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3778 AC_MSG_RESULT(no))
3779
Bram Moolenaar446cb832008-06-24 21:56:24 +00003780AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3781 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003782 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003783#include "confdefs.h"
3784#if STDC_HEADERS
3785# include <stdlib.h>
3786# include <stddef.h>
3787#endif
3788#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003789#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003790main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003791 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003792 vim_cv_stat_ignores_slash=yes
3793 ],[
3794 vim_cv_stat_ignores_slash=no
3795 ],[
3796 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3797 ])
3798 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003799
Bram Moolenaar446cb832008-06-24 21:56:24 +00003800if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3801 AC_DEFINE(STAT_IGNORES_SLASH)
3802fi
3803
Bram Moolenaar071d4272004-06-13 20:20:40 +00003804dnl Link with iconv for charset translation, if not found without library.
3805dnl check for iconv() requires including iconv.h
3806dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3807dnl has been installed.
3808AC_MSG_CHECKING(for iconv_open())
3809save_LIBS="$LIBS"
3810LIBS="$LIBS -liconv"
3811AC_TRY_LINK([
3812#ifdef HAVE_ICONV_H
3813# include <iconv.h>
3814#endif
3815 ], [iconv_open("fr", "to");],
3816 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3817 LIBS="$save_LIBS"
3818 AC_TRY_LINK([
3819#ifdef HAVE_ICONV_H
3820# include <iconv.h>
3821#endif
3822 ], [iconv_open("fr", "to");],
3823 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3824 AC_MSG_RESULT(no)))
3825
3826
3827AC_MSG_CHECKING(for nl_langinfo(CODESET))
3828AC_TRY_LINK([
3829#ifdef HAVE_LANGINFO_H
3830# include <langinfo.h>
3831#endif
3832], [char *cs = nl_langinfo(CODESET);],
3833 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3834 AC_MSG_RESULT(no))
3835
Bram Moolenaar446cb832008-06-24 21:56:24 +00003836dnl Need various functions for floating point support. Only enable
3837dnl floating point when they are all present.
3838AC_CHECK_LIB(m, strtod)
3839AC_MSG_CHECKING([for strtod() and other floating point functions])
3840AC_TRY_LINK([
3841#ifdef HAVE_MATH_H
3842# include <math.h>
3843#endif
3844#if STDC_HEADERS
3845# include <stdlib.h>
3846# include <stddef.h>
3847#endif
3848], [char *s; double d;
3849 d = strtod("1.1", &s);
3850 d = fabs(1.11);
3851 d = ceil(1.11);
3852 d = floor(1.11);
3853 d = log10(1.11);
3854 d = pow(1.11, 2.22);
3855 d = sqrt(1.11);
3856 d = sin(1.11);
3857 d = cos(1.11);
3858 d = atan(1.11);
3859 ],
3860 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3861 AC_MSG_RESULT(no))
3862
Bram Moolenaara6b89762016-02-29 21:38:26 +01003863dnl isinf() and isnan() need to include header files and may need -lm.
3864AC_MSG_CHECKING([for isinf()])
3865AC_TRY_LINK([
3866#ifdef HAVE_MATH_H
3867# include <math.h>
3868#endif
3869#if STDC_HEADERS
3870# include <stdlib.h>
3871# include <stddef.h>
3872#endif
3873], [int r = isinf(1.11); ],
3874 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3875 AC_MSG_RESULT(no))
3876
3877AC_MSG_CHECKING([for isnan()])
3878AC_TRY_LINK([
3879#ifdef HAVE_MATH_H
3880# include <math.h>
3881#endif
3882#if STDC_HEADERS
3883# include <stdlib.h>
3884# include <stddef.h>
3885#endif
3886], [int r = isnan(1.11); ],
3887 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3888 AC_MSG_RESULT(no))
3889
Bram Moolenaar071d4272004-06-13 20:20:40 +00003890dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3891dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003892dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003893AC_MSG_CHECKING(--disable-acl argument)
3894AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003895 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003896 , [enable_acl="yes"])
3897if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003898 AC_MSG_RESULT(no)
3899 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003900 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3901 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3902
Bram Moolenaard6d30422018-01-28 22:48:55 +01003903 AC_MSG_CHECKING(for POSIX ACL support)
3904 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003905#include <sys/types.h>
3906#ifdef HAVE_SYS_ACL_H
3907# include <sys/acl.h>
3908#endif
3909acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3910 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3911 acl_free(acl);],
3912 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3913 AC_MSG_RESULT(no))
3914
Bram Moolenaard6d30422018-01-28 22:48:55 +01003915 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3916 AC_MSG_CHECKING(for Solaris ACL support)
3917 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003918#ifdef HAVE_SYS_ACL_H
3919# include <sys/acl.h>
3920#endif], [acl("foo", GETACLCNT, 0, NULL);
3921 ],
3922 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003923 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003924
Bram Moolenaard6d30422018-01-28 22:48:55 +01003925 AC_MSG_CHECKING(for AIX ACL support)
3926 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003927#if STDC_HEADERS
3928# include <stdlib.h>
3929# include <stddef.h>
3930#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003931#ifdef HAVE_SYS_ACL_H
3932# include <sys/acl.h>
3933#endif
3934#ifdef HAVE_SYS_ACCESS_H
3935# include <sys/access.h>
3936#endif
3937#define _ALL_SOURCE
3938
3939#include <sys/stat.h>
3940
3941int aclsize;
3942struct acl *aclent;], [aclsize = sizeof(struct acl);
3943 aclent = (void *)malloc(aclsize);
3944 statacl("foo", STX_NORMAL, aclent, aclsize);
3945 ],
3946 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3947 AC_MSG_RESULT(no))
3948else
3949 AC_MSG_RESULT(yes)
3950fi
3951
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003952if test "x$GTK_CFLAGS" != "x"; then
3953 dnl pango_shape_full() is new, fall back to pango_shape().
3954 AC_MSG_CHECKING(for pango_shape_full)
3955 ac_save_CFLAGS="$CFLAGS"
3956 ac_save_LIBS="$LIBS"
3957 CFLAGS="$CFLAGS $GTK_CFLAGS"
3958 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003959 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003960 [#include <gtk/gtk.h>],
3961 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3962 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3963 AC_MSG_RESULT(no))
3964 CFLAGS="$ac_save_CFLAGS"
3965 LIBS="$ac_save_LIBS"
3966fi
3967
Bram Moolenaar071d4272004-06-13 20:20:40 +00003968AC_MSG_CHECKING(--disable-gpm argument)
3969AC_ARG_ENABLE(gpm,
3970 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3971 [enable_gpm="yes"])
3972
3973if test "$enable_gpm" = "yes"; then
3974 AC_MSG_RESULT(no)
3975 dnl Checking if gpm support can be compiled
3976 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3977 [olibs="$LIBS" ; LIBS="-lgpm"]
3978 AC_TRY_LINK(
3979 [#include <gpm.h>
3980 #include <linux/keyboard.h>],
3981 [Gpm_GetLibVersion(NULL);],
3982 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3983 dnl FEAT_MOUSE_GPM if mouse support is included
3984 [vi_cv_have_gpm=yes],
3985 [vi_cv_have_gpm=no])
3986 [LIBS="$olibs"]
3987 )
3988 if test $vi_cv_have_gpm = yes; then
3989 LIBS="$LIBS -lgpm"
3990 AC_DEFINE(HAVE_GPM)
3991 fi
3992else
3993 AC_MSG_RESULT(yes)
3994fi
3995
Bram Moolenaar446cb832008-06-24 21:56:24 +00003996AC_MSG_CHECKING(--disable-sysmouse argument)
3997AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003998 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00003999 [enable_sysmouse="yes"])
4000
4001if test "$enable_sysmouse" = "yes"; then
4002 AC_MSG_RESULT(no)
4003 dnl Checking if sysmouse support can be compiled
4004 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4005 dnl defines FEAT_SYSMOUSE if mouse support is included
4006 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
4007 AC_TRY_LINK(
4008 [#include <sys/consio.h>
4009 #include <signal.h>
4010 #include <sys/fbio.h>],
4011 [struct mouse_info mouse;
4012 mouse.operation = MOUSE_MODE;
4013 mouse.operation = MOUSE_SHOW;
4014 mouse.u.mode.mode = 0;
4015 mouse.u.mode.signal = SIGUSR2;],
4016 [vi_cv_have_sysmouse=yes],
4017 [vi_cv_have_sysmouse=no])
4018 )
4019 if test $vi_cv_have_sysmouse = yes; then
4020 AC_DEFINE(HAVE_SYSMOUSE)
4021 fi
4022else
4023 AC_MSG_RESULT(yes)
4024fi
4025
Bram Moolenaarf05da212009-11-17 16:13:15 +00004026dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4027AC_MSG_CHECKING(for FD_CLOEXEC)
4028AC_TRY_COMPILE(
4029[#if HAVE_FCNTL_H
4030# include <fcntl.h>
4031#endif],
4032[ int flag = FD_CLOEXEC;],
4033 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4034 AC_MSG_RESULT(not usable))
4035
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036dnl rename needs to be checked separately to work on Nextstep with cc
4037AC_MSG_CHECKING(for rename)
4038AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4039 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4040 AC_MSG_RESULT(no))
4041
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004042dnl check for dirfd()
4043AC_MSG_CHECKING(for dirfd)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004044AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004045[#include <sys/types.h>
4046#include <dirent.h>],
4047[DIR * dir=opendir("dirname"); dirfd(dir);],
4048AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4049
4050dnl check for flock()
4051AC_MSG_CHECKING(for flock)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004052AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004053[#include <sys/file.h>],
4054[flock(10, LOCK_SH);],
4055AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4056
Bram Moolenaar071d4272004-06-13 20:20:40 +00004057dnl sysctl() may exist but not the arguments we use
4058AC_MSG_CHECKING(for sysctl)
4059AC_TRY_COMPILE(
4060[#include <sys/types.h>
4061#include <sys/sysctl.h>],
4062[ int mib[2], r;
4063 size_t len;
4064
4065 mib[0] = CTL_HW;
4066 mib[1] = HW_USERMEM;
4067 len = sizeof(r);
4068 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4069 ],
4070 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4071 AC_MSG_RESULT(not usable))
4072
4073dnl sysinfo() may exist but not be Linux compatible
4074AC_MSG_CHECKING(for sysinfo)
4075AC_TRY_COMPILE(
4076[#include <sys/types.h>
4077#include <sys/sysinfo.h>],
4078[ struct sysinfo sinfo;
4079 int t;
4080
4081 (void)sysinfo(&sinfo);
4082 t = sinfo.totalram;
4083 ],
4084 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4085 AC_MSG_RESULT(not usable))
4086
Bram Moolenaar914572a2007-05-01 11:37:47 +00004087dnl struct sysinfo may have the mem_unit field or not
4088AC_MSG_CHECKING(for sysinfo.mem_unit)
4089AC_TRY_COMPILE(
4090[#include <sys/types.h>
4091#include <sys/sysinfo.h>],
4092[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004093 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00004094 ],
4095 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4096 AC_MSG_RESULT(no))
4097
Bram Moolenaar071d4272004-06-13 20:20:40 +00004098dnl sysconf() may exist but not support what we want to use
4099AC_MSG_CHECKING(for sysconf)
4100AC_TRY_COMPILE(
4101[#include <unistd.h>],
4102[ (void)sysconf(_SC_PAGESIZE);
4103 (void)sysconf(_SC_PHYS_PAGES);
4104 ],
4105 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4106 AC_MSG_RESULT(not usable))
4107
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004108dnl check if we have _SC_SIGSTKSZ via sysconf()
4109AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
4110AC_TRY_COMPILE(
4111[#include <unistd.h>],
4112[ (void)sysconf(_SC_SIGSTKSZ);
4113 ],
4114 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4115 AC_MSG_RESULT(not usable))
4116
Bram Moolenaar914703b2010-05-31 21:59:46 +02004117AC_CHECK_SIZEOF([int])
4118AC_CHECK_SIZEOF([long])
4119AC_CHECK_SIZEOF([time_t])
4120AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004121
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004122dnl Use different names to avoid clashing with other header files.
4123AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4124AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4125
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004126dnl Make sure that uint32_t is really 32 bits unsigned.
4127AC_MSG_CHECKING([uint32_t is 32 bits])
4128AC_TRY_RUN([
4129#ifdef HAVE_STDINT_H
4130# include <stdint.h>
4131#endif
4132#ifdef HAVE_INTTYPES_H
4133# include <inttypes.h>
4134#endif
4135main() {
4136 uint32_t nr1 = (uint32_t)-1;
4137 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004138 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4139 return 0;
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004140}],
4141AC_MSG_RESULT(ok),
4142AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004143AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004144
Bram Moolenaar446cb832008-06-24 21:56:24 +00004145dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4146dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4147
Bram Moolenaar071d4272004-06-13 20:20:40 +00004148[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004149#include "confdefs.h"
4150#ifdef HAVE_STRING_H
4151# include <string.h>
4152#endif
4153#if STDC_HEADERS
4154# include <stdlib.h>
4155# include <stddef.h>
4156#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004157main() {
4158 char buf[10];
4159 strcpy(buf, "abcdefghi");
4160 mch_memmove(buf, buf + 2, 3);
4161 if (strncmp(buf, "ababcf", 6))
4162 exit(1);
4163 strcpy(buf, "abcdefghi");
4164 mch_memmove(buf + 2, buf, 3);
4165 if (strncmp(buf, "cdedef", 6))
4166 exit(1);
4167 exit(0); /* libc version works properly. */
4168}']
4169
Bram Moolenaar446cb832008-06-24 21:56:24 +00004170AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4171 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004172 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 +00004173 [
4174 vim_cv_memmove_handles_overlap=yes
4175 ],[
4176 vim_cv_memmove_handles_overlap=no
4177 ],[
4178 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4179 ])
4180 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004181
Bram Moolenaar446cb832008-06-24 21:56:24 +00004182if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4183 AC_DEFINE(USEMEMMOVE)
4184else
4185 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4186 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004187 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 +00004188 [
4189 vim_cv_bcopy_handles_overlap=yes
4190 ],[
4191 vim_cv_bcopy_handles_overlap=no
4192 ],[
4193 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4194 ])
4195 ])
4196
4197 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4198 AC_DEFINE(USEBCOPY)
4199 else
4200 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4201 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004202 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 +00004203 [
4204 vim_cv_memcpy_handles_overlap=yes
4205 ],[
4206 vim_cv_memcpy_handles_overlap=no
4207 ],[
4208 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4209 ])
4210 ])
4211
4212 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4213 AC_DEFINE(USEMEMCPY)
4214 fi
4215 fi
4216fi
4217
Bram Moolenaar071d4272004-06-13 20:20:40 +00004218
4219dnl Check for multibyte locale functions
4220dnl Find out if _Xsetlocale() is supported by libX11.
4221dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004222if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004223 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004224 libs_save=$LIBS
4225 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4226 CFLAGS="$CFLAGS $X_CFLAGS"
4227
4228 AC_MSG_CHECKING(whether X_LOCALE needed)
4229 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4230 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4231 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4232 AC_MSG_RESULT(no))
4233
4234 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4235 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4236 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4237
Bram Moolenaar071d4272004-06-13 20:20:40 +00004238 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004239 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004240fi
4241
4242dnl Link with xpg4, it is said to make Korean locale working
4243AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4244
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004245dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004246dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004247dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004248dnl -t for typedefs (many ctags have this)
4249dnl -s for static functions (Elvis ctags only?)
4250dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4251dnl -i+m to test for older Exuberant ctags
4252AC_MSG_CHECKING(how to create tags)
4253test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004254if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004255 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004256elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004257 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004258elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004259 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004260else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004261 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004262 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4263 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4264 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4265 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4266 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4267 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4268 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4269fi
4270test -f tags.save && mv tags.save tags
4271AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4272
4273dnl Check how we can run man with a section number
4274AC_MSG_CHECKING(how to run man with a section nr)
4275MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004276(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 +00004277AC_MSG_RESULT($MANDEF)
4278if test "$MANDEF" = "man -s"; then
4279 AC_DEFINE(USEMAN_S)
4280fi
4281
4282dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004283dnl We take care to base this on an empty LIBS: on some systems libelf would be
4284dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4285dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004286AC_MSG_CHECKING(--disable-nls argument)
4287AC_ARG_ENABLE(nls,
4288 [ --disable-nls Don't support NLS (gettext()).], ,
4289 [enable_nls="yes"])
4290
4291if test "$enable_nls" = "yes"; then
4292 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004293
4294 INSTALL_LANGS=install-languages
4295 AC_SUBST(INSTALL_LANGS)
4296 INSTALL_TOOL_LANGS=install-tool-languages
4297 AC_SUBST(INSTALL_TOOL_LANGS)
4298
Bram Moolenaar071d4272004-06-13 20:20:40 +00004299 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4300 AC_MSG_CHECKING([for NLS])
4301 if test -f po/Makefile; then
4302 have_gettext="no"
4303 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004304 olibs=$LIBS
4305 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004306 AC_TRY_LINK(
4307 [#include <libintl.h>],
4308 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004309 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4310 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004311 AC_TRY_LINK(
4312 [#include <libintl.h>],
4313 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004314 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4315 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004316 AC_MSG_RESULT([gettext() doesn't work]);
4317 LIBS=$olibs))
4318 else
4319 AC_MSG_RESULT([msgfmt not found - disabled]);
4320 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004321 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004322 AC_DEFINE(HAVE_GETTEXT)
4323 MAKEMO=yes
4324 AC_SUBST(MAKEMO)
4325 dnl this was added in GNU gettext 0.10.36
4326 AC_CHECK_FUNCS(bind_textdomain_codeset)
4327 dnl _nl_msg_cat_cntr is required for GNU gettext
4328 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4329 AC_TRY_LINK(
4330 [#include <libintl.h>
4331 extern int _nl_msg_cat_cntr;],
4332 [++_nl_msg_cat_cntr;],
4333 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4334 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004335 AC_MSG_CHECKING([if msgfmt supports --desktop])
4336 MSGFMT_DESKTOP=
4337 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004338 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4339 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4340 dnl 0.19.3 is also broken.
4341 AC_MSG_RESULT([broken])
4342 else
4343 AC_MSG_RESULT([yes])
4344 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4345 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004346 else
4347 AC_MSG_RESULT([no])
4348 fi
4349 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004350 fi
4351 else
4352 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4353 fi
4354else
4355 AC_MSG_RESULT(yes)
4356fi
4357
4358dnl Check for dynamic linking loader
4359AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4360if test x${DLL} = xdlfcn.h; then
4361 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4362 AC_MSG_CHECKING([for dlopen()])
4363 AC_TRY_LINK(,[
4364 extern void* dlopen();
4365 dlopen();
4366 ],
4367 AC_MSG_RESULT(yes);
4368 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4369 AC_MSG_RESULT(no);
4370 AC_MSG_CHECKING([for dlopen() in -ldl])
4371 olibs=$LIBS
4372 LIBS="$LIBS -ldl"
4373 AC_TRY_LINK(,[
4374 extern void* dlopen();
4375 dlopen();
4376 ],
4377 AC_MSG_RESULT(yes);
4378 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4379 AC_MSG_RESULT(no);
4380 LIBS=$olibs))
4381 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4382 dnl ick :-)
4383 AC_MSG_CHECKING([for dlsym()])
4384 AC_TRY_LINK(,[
4385 extern void* dlsym();
4386 dlsym();
4387 ],
4388 AC_MSG_RESULT(yes);
4389 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4390 AC_MSG_RESULT(no);
4391 AC_MSG_CHECKING([for dlsym() in -ldl])
4392 olibs=$LIBS
4393 LIBS="$LIBS -ldl"
4394 AC_TRY_LINK(,[
4395 extern void* dlsym();
4396 dlsym();
4397 ],
4398 AC_MSG_RESULT(yes);
4399 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4400 AC_MSG_RESULT(no);
4401 LIBS=$olibs))
4402elif test x${DLL} = xdl.h; then
4403 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4404 AC_MSG_CHECKING([for shl_load()])
4405 AC_TRY_LINK(,[
4406 extern void* shl_load();
4407 shl_load();
4408 ],
4409 AC_MSG_RESULT(yes);
4410 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4411 AC_MSG_RESULT(no);
4412 AC_MSG_CHECKING([for shl_load() in -ldld])
4413 olibs=$LIBS
4414 LIBS="$LIBS -ldld"
4415 AC_TRY_LINK(,[
4416 extern void* shl_load();
4417 shl_load();
4418 ],
4419 AC_MSG_RESULT(yes);
4420 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4421 AC_MSG_RESULT(no);
4422 LIBS=$olibs))
4423fi
4424AC_CHECK_HEADERS(setjmp.h)
4425
Bram Moolenaard0573012017-10-28 21:11:06 +02004426if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004427 dnl -ldl must come after DynaLoader.a
4428 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4429 LIBS=`echo $LIBS | sed s/-ldl//`
4430 PERL_LIBS="$PERL_LIBS -ldl"
4431 fi
4432fi
4433
Bram Moolenaard0573012017-10-28 21:11:06 +02004434if test "$MACOS_X" = "yes"; then
4435 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004436 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004437 if test "$features" = "tiny"; then
4438 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4439 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4440 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004441 AC_MSG_RESULT([yes, we need CoreServices])
4442 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004443 else
4444 AC_MSG_RESULT([yes, we need AppKit])
4445 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004446 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004447 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004448 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004449 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004450fi
4451
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004452dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4453dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4454dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004455dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4456dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004457DEPEND_CFLAGS_FILTER=
4458if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004459 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004460 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004461 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004462 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004463 AC_MSG_RESULT(yes)
4464 else
4465 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004466 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004467 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4468 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004469 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004470 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004471 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4472 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004473 CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-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/'`
Bram Moolenaar91b992c2019-11-17 19:07:42 +01004474 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004475 AC_MSG_RESULT(yes)
4476 else
4477 AC_MSG_RESULT(no)
4478 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004479fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004480AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004481
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004482dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4483dnl isn't required, but the CFLAGS for some of the libraries we're using
4484dnl include the define. Since the define changes the size of some datatypes
4485dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4486dnl consistent value. It's therefore safest to force the use of the define
4487dnl if it's present in any of the *_CFLAGS variables.
4488AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004489if 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 +01004490 AC_MSG_RESULT(yes)
4491 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4492else
4493 AC_MSG_RESULT(no)
4494fi
4495
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004496dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4497dnl between "-L" and the path that follows.
4498LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4499
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004500dnl link.sh tries to avoid overlinking in a hackish way.
4501dnl At least GNU ld supports --as-needed which provides the same functionality
4502dnl at linker level. Let's use it.
4503AC_MSG_CHECKING(linker --as-needed support)
4504LINK_AS_NEEDED=
4505# Check if linker supports --as-needed and --no-as-needed options
4506if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004507 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004508 LINK_AS_NEEDED=yes
4509fi
4510if test "$LINK_AS_NEEDED" = yes; then
4511 AC_MSG_RESULT(yes)
4512else
4513 AC_MSG_RESULT(no)
4514fi
4515AC_SUBST(LINK_AS_NEEDED)
4516
Bram Moolenaar77c19352012-06-13 19:19:41 +02004517# IBM z/OS reset CFLAGS for config.mk
4518if test "$zOSUnix" = "yes"; then
4519 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4520fi
4521
Bram Moolenaar071d4272004-06-13 20:20:40 +00004522dnl write output files
4523AC_OUTPUT(auto/config.mk:config.mk.in)
4524
4525dnl vim: set sw=2 tw=78 fo+=l: