blob: bb77485f31c530266e058aab918c8dfc6f0ff67d [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 Moolenaar23c01922021-05-21 11:43:58 +02001439 ${vi_cv_path_python3} -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))'`
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}"
Zdenek Dohnal31e299c2021-06-10 18:50:55 +02001490 d=`${vi_cv_path_python3} -c "import sysconfig; print(sysconfig.get_config_var('LIBPL'))" 2> /dev/null`
1491 if test "x$d" = "x"; then
1492 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1493 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001494 if test -d "$d" && test -f "$d/config.c"; then
1495 vi_cv_path_python3_conf="$d"
1496 else
1497 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1498 for subdir in lib64 lib share; do
1499 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1500 if test -d "$d" && test -f "$d/config.c"; then
1501 vi_cv_path_python3_conf="$d"
1502 fi
1503 done
1504 done
1505 fi
1506 ])
1507
1508 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1509
1510 if test "X$PYTHON3_CONFDIR" = "X"; then
1511 AC_MSG_RESULT([can't find it!])
1512 else
1513
1514 dnl -- we need to examine Python's config/Makefile too
1515 dnl see what the interpreter is built from
1516 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1517 [
1518 pwd=`pwd`
1519 tmp_mkf="$pwd/config-PyMake$$"
1520 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001521__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001522 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001523 @echo "python3_LIBS='$(LIBS)'"
1524 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001525 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001526 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001527eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001528 dnl -- delete the lines from make about Entering/Leaving directory
1529 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1530 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001531 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 +02001532 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1533 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1534 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1535 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1536 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001537 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001538 [
1539 if test "X$python3_DLLLIBRARY" != "X"; then
1540 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1541 else
1542 vi_cv_dll_name_python3="$python3_INSTSONAME"
1543 fi
1544 ])
1545
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001546 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1547 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001548 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 +02001549 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001550 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 +02001551 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001552 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001553 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1554 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1555 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001556 PYTHON3_SRC="if_python3.c"
1557 PYTHON3_OBJ="objects/if_python3.o"
1558
1559 dnl On FreeBSD linking with "-pthread" is required to use threads.
1560 dnl _THREAD_SAFE must be used for compiling then.
1561 dnl The "-pthread" is added to $LIBS, so that the following check for
1562 dnl sigaltstack() will look in libc_r (it's there in libc!).
1563 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1564 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1565 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1566 AC_MSG_CHECKING([if -pthread should be used])
1567 threadsafe_flag=
1568 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001569 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001570 if test "`(uname) 2>/dev/null`" != Darwin; then
1571 test "$GCC" = yes && threadsafe_flag="-pthread"
1572 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1573 threadsafe_flag="-D_THREAD_SAFE"
1574 thread_lib="-pthread"
1575 fi
1576 if test "`(uname) 2>/dev/null`" = SunOS; then
1577 threadsafe_flag="-pthreads"
1578 fi
1579 fi
1580 libs_save_old=$LIBS
1581 if test -n "$threadsafe_flag"; then
1582 cflags_save=$CFLAGS
1583 CFLAGS="$CFLAGS $threadsafe_flag"
1584 LIBS="$LIBS $thread_lib"
1585 AC_TRY_LINK(,[ ],
1586 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1587 AC_MSG_RESULT(no); LIBS=$libs_save_old
1588 )
1589 CFLAGS=$cflags_save
1590 else
1591 AC_MSG_RESULT(no)
1592 fi
1593
1594 dnl check that compiling a simple program still works with the flags
1595 dnl added for Python.
1596 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1597 cflags_save=$CFLAGS
1598 libs_save=$LIBS
1599 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1600 LIBS="$LIBS $PYTHON3_LIBS"
1601 AC_TRY_LINK(,[ ],
1602 AC_MSG_RESULT(yes); python3_ok=yes,
1603 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1604 CFLAGS=$cflags_save
1605 LIBS=$libs_save
1606 if test "$python3_ok" = yes; then
1607 AC_DEFINE(FEAT_PYTHON3)
1608 else
1609 LIBS=$libs_save_old
1610 PYTHON3_SRC=
1611 PYTHON3_OBJ=
1612 PYTHON3_LIBS=
1613 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001614 fi
1615 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001616 else
1617 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001618 fi
1619 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001620 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1621 AC_MSG_ERROR([could not configure python3])
1622 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001623fi
1624
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001625AC_SUBST(PYTHON3_LIBS)
1626AC_SUBST(PYTHON3_CFLAGS)
1627AC_SUBST(PYTHON3_SRC)
1628AC_SUBST(PYTHON3_OBJ)
1629
1630dnl if python2.x and python3.x are enabled one can only link in code
1631dnl with dlopen(), dlsym(), dlclose()
1632if test "$python_ok" = yes && test "$python3_ok" = yes; then
1633 AC_DEFINE(DYNAMIC_PYTHON)
1634 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001635 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001636 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001637 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001638 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001639 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001640 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001641 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001642 #include <dlfcn.h>
1643 /* If this program fails, then RTLD_GLOBAL is needed.
1644 * RTLD_GLOBAL will be used and then it is not possible to
1645 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001646 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001647 */
1648
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001649 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001650 {
1651 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001652 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001653 if (pylib != 0)
1654 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001655 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001656 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1657 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1658 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001659 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001660 (*init)();
1661 needed = (*simple)("import termios") == -1;
1662 (*final)();
1663 dlclose(pylib);
1664 }
1665 return !needed;
1666 }
1667
1668 int main(int argc, char** argv)
1669 {
1670 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001671 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001672 not_needed = 1;
1673 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001674 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001675 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001676
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001677 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001678 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001679
1680 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1681 cflags_save=$CFLAGS
1682 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001683 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001684 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001685 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001686 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001687 #include <dlfcn.h>
1688 #include <wchar.h>
1689 /* If this program fails, then RTLD_GLOBAL is needed.
1690 * RTLD_GLOBAL will be used and then it is not possible to
1691 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001692 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001693 */
1694
1695 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1696 {
1697 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001698 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001699 if (pylib != 0)
1700 {
1701 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1702 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1703 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1704 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1705 (*pfx)(prefix);
1706 (*init)();
1707 needed = (*simple)("import termios") == -1;
1708 (*final)();
1709 dlclose(pylib);
1710 }
1711 return !needed;
1712 }
1713
1714 int main(int argc, char** argv)
1715 {
1716 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001717 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001718 not_needed = 1;
1719 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001720 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001721 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1722
1723 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001724 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001725
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001726 PYTHON_SRC="if_python.c"
1727 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001728 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001729 PYTHON_LIBS=
1730 PYTHON3_SRC="if_python3.c"
1731 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001732 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001733 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001734elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1735 AC_DEFINE(DYNAMIC_PYTHON)
1736 PYTHON_SRC="if_python.c"
1737 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001738 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001739 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001740elif test "$python_ok" = yes; then
1741 dnl Check that adding -fPIE works. It may be needed when using a static
1742 dnl Python library.
1743 AC_MSG_CHECKING([if -fPIE can be added for Python])
1744 cflags_save=$CFLAGS
1745 libs_save=$LIBS
1746 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1747 LIBS="$LIBS $PYTHON_LIBS"
1748 AC_TRY_LINK(,[ ],
1749 AC_MSG_RESULT(yes); fpie_ok=yes,
1750 AC_MSG_RESULT(no); fpie_ok=no)
1751 CFLAGS=$cflags_save
1752 LIBS=$libs_save
1753 if test $fpie_ok = yes; then
1754 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1755 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001756elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1757 AC_DEFINE(DYNAMIC_PYTHON3)
1758 PYTHON3_SRC="if_python3.c"
1759 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001760 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001761 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001762elif test "$python3_ok" = yes; then
1763 dnl Check that adding -fPIE works. It may be needed when using a static
1764 dnl Python library.
1765 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1766 cflags_save=$CFLAGS
1767 libs_save=$LIBS
1768 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1769 LIBS="$LIBS $PYTHON3_LIBS"
1770 AC_TRY_LINK(,[ ],
1771 AC_MSG_RESULT(yes); fpie_ok=yes,
1772 AC_MSG_RESULT(no); fpie_ok=no)
1773 CFLAGS=$cflags_save
1774 LIBS=$libs_save
1775 if test $fpie_ok = yes; then
1776 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1777 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001778fi
1779
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780AC_MSG_CHECKING(--enable-tclinterp argument)
1781AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001782 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001783 [enable_tclinterp="no"])
1784AC_MSG_RESULT($enable_tclinterp)
1785
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001786if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001787
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001788 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001789 AC_MSG_CHECKING(--with-tclsh argument)
1790 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1791 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001792 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001793 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1794 AC_SUBST(vi_cv_path_tcl)
1795
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001796 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1797 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1798 tclsh_name="tclsh8.4"
1799 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1800 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001801 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001802 tclsh_name="tclsh8.2"
1803 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1804 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001805 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1806 tclsh_name="tclsh8.0"
1807 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1808 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001809 dnl still didn't find it, try without version number
1810 if test "X$vi_cv_path_tcl" = "X"; then
1811 tclsh_name="tclsh"
1812 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1813 fi
1814 if test "X$vi_cv_path_tcl" != "X"; then
1815 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001816 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001817 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1818 AC_MSG_RESULT($tclver - OK);
1819 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 +01001820 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001821
1822 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001823 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001824 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 +00001825 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001826 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001827 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001828 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1829 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 +00001830 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001831 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001832 for try in $tclinc; do
1833 if test -f "$try/tcl.h"; then
1834 AC_MSG_RESULT($try/tcl.h)
1835 TCL_INC=$try
1836 break
1837 fi
1838 done
1839 if test -z "$TCL_INC"; then
1840 AC_MSG_RESULT(<not found>)
1841 SKIP_TCL=YES
1842 fi
1843 if test -z "$SKIP_TCL"; then
1844 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001845 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001846 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001847 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001848 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001849 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001850 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001851 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1852 tclcnf=`echo $tclinc | sed s/include/lib/g`
1853 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001854 fi
1855 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001856 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001857 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001858 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001859 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001860 if test "$enable_tclinterp" = "dynamic"; then
1861 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1862 else
1863 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1864 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001865 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001866 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001867 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 +00001868 break
1869 fi
1870 done
1871 if test -z "$TCL_LIBS"; then
1872 AC_MSG_RESULT(<not found>)
1873 AC_MSG_CHECKING(for Tcl library by myself)
1874 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001875 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001876 for ext in .so .a ; do
1877 for ver in "" $tclver ; do
1878 for try in $tcllib ; do
1879 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001880 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001881 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001882 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001883 if test "`(uname) 2>/dev/null`" = SunOS &&
1884 uname -r | grep '^5' >/dev/null; then
1885 TCL_LIBS="$TCL_LIBS -R $try"
1886 fi
1887 break 3
1888 fi
1889 done
1890 done
1891 done
1892 if test -z "$TCL_LIBS"; then
1893 AC_MSG_RESULT(<not found>)
1894 SKIP_TCL=YES
1895 fi
1896 fi
1897 if test -z "$SKIP_TCL"; then
1898 AC_DEFINE(FEAT_TCL)
1899 TCL_SRC=if_tcl.c
1900 TCL_OBJ=objects/if_tcl.o
1901 TCL_PRO=if_tcl.pro
1902 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1903 fi
1904 fi
1905 else
1906 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1907 fi
1908 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001909 if test "$enable_tclinterp" = "dynamic"; then
1910 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1911 AC_DEFINE(DYNAMIC_TCL)
1912 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1913 fi
1914 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001915 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1916 AC_MSG_ERROR([could not configure Tcl])
1917 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001918fi
1919AC_SUBST(TCL_SRC)
1920AC_SUBST(TCL_OBJ)
1921AC_SUBST(TCL_PRO)
1922AC_SUBST(TCL_CFLAGS)
1923AC_SUBST(TCL_LIBS)
1924
1925AC_MSG_CHECKING(--enable-rubyinterp argument)
1926AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001927 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001928 [enable_rubyinterp="no"])
1929AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001930if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001931 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1932 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1933 fi
1934
Bram Moolenaar165641d2010-02-17 16:23:09 +01001935 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001936 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001937 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1938 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1939 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001940 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001941 if test "X$vi_cv_path_ruby" != "X"; then
1942 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001943 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 +00001944 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001945 AC_MSG_CHECKING(Ruby rbconfig)
1946 ruby_rbconfig="RbConfig"
1947 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1948 ruby_rbconfig="Config"
1949 fi
1950 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001951 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001952 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 +00001953 if test "X$rubyhdrdir" != "X"; then
1954 AC_MSG_RESULT($rubyhdrdir)
1955 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001956 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1957 if test -d "$rubyarchdir"; then
1958 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001959 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001960 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001961 if test "X$rubyversion" = "X"; then
1962 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1963 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001964 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001965 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001966 if test "X$rubylibs" != "X"; then
1967 RUBY_LIBS="$rubylibs"
1968 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001969 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1970 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001971 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaard5a986f2020-12-06 21:11:31 +01001972 if test -f "$rubylibdir/$librubya" || expr "$librubyarg" : "-lruby"; then
Bram Moolenaarac499e32013-06-02 19:14:17 +02001973 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1974 elif test "$librubyarg" = "libruby.a"; then
1975 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1976 librubyarg="-lruby"
1977 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001978 fi
1979
1980 if test "X$librubyarg" != "X"; then
1981 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1982 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001983 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001984 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001985 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1986 dnl be included if requested by passing --with-mac-arch to
1987 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001988 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001989 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001990 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001991 LDFLAGS="$rubyldflags $LDFLAGS"
1992 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001993 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001994 fi
1995 RUBY_SRC="if_ruby.c"
1996 RUBY_OBJ="objects/if_ruby.o"
1997 RUBY_PRO="if_ruby.pro"
1998 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001999 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02002000 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02002001 if test -z "$libruby_soname"; then
2002 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
2003 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002004 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01002005 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002006 RUBY_LIBS=
2007 fi
Bram Moolenaar864a28b2020-12-28 21:36:56 +01002008 if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
2009 RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
2010 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002011 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002012 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002013 fi
2014 else
2015 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2016 fi
2017 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002018
2019 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2020 AC_MSG_ERROR([could not configure Ruby])
2021 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002022fi
2023AC_SUBST(RUBY_SRC)
2024AC_SUBST(RUBY_OBJ)
2025AC_SUBST(RUBY_PRO)
2026AC_SUBST(RUBY_CFLAGS)
2027AC_SUBST(RUBY_LIBS)
2028
2029AC_MSG_CHECKING(--enable-cscope argument)
2030AC_ARG_ENABLE(cscope,
2031 [ --enable-cscope Include cscope interface.], ,
2032 [enable_cscope="no"])
2033AC_MSG_RESULT($enable_cscope)
2034if test "$enable_cscope" = "yes"; then
2035 AC_DEFINE(FEAT_CSCOPE)
2036fi
2037
Bram Moolenaar071d4272004-06-13 20:20:40 +00002038AC_MSG_CHECKING(--disable-netbeans argument)
2039AC_ARG_ENABLE(netbeans,
2040 [ --disable-netbeans Disable NetBeans integration support.],
2041 , [enable_netbeans="yes"])
2042if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002043 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2044 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2045 enable_netbeans="no"
2046 else
2047 AC_MSG_RESULT(no)
2048 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002049else
2050 AC_MSG_RESULT(yes)
2051fi
2052
2053AC_MSG_CHECKING(--disable-channel argument)
2054AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002055 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002056 , [enable_channel="yes"])
2057if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002058 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2059 AC_MSG_RESULT([cannot use channels with tiny or small features])
2060 enable_channel="no"
2061 else
2062 AC_MSG_RESULT(no)
2063 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002064else
2065 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002066 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002067 enable_netbeans="no"
2068 else
2069 AC_MSG_RESULT(yes)
2070 fi
2071fi
2072
Bram Moolenaar16435482016-01-24 21:31:54 +01002073if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002074 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002075 if test "x$HAIKU" = "xyes"; then
2076 AC_CHECK_LIB(network, socket)
2077 else
2078 AC_CHECK_LIB(socket, socket)
2079 fi
2080
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002081 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
2082 [AC_TRY_LINK([
2083#include <stdio.h>
2084#include <stdlib.h>
2085#include <stdarg.h>
2086#include <fcntl.h>
2087#include <netdb.h>
2088#include <netinet/in.h>
2089#include <errno.h>
2090#include <sys/types.h>
2091#include <sys/socket.h>
2092 /* Check bitfields */
2093 struct nbbuf {
2094 unsigned int initDone:1;
2095 unsigned short signmaplen;
2096 };
2097 ], [
2098 /* Check creating a socket. */
2099 struct sockaddr_in server;
2100 struct addrinfo *res;
2101 (void)socket(AF_INET, SOCK_STREAM, 0);
2102 (void)htons(100);
2103 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2104 if (errno == ECONNREFUSED)
2105 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2106 (void)freeaddrinfo(res);
2107 ],
2108 [vim_cv_ipv6_networking="yes"],
2109 [vim_cv_ipv6_networking="no"])])
2110
2111 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2112 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002113 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002114 else
2115 dnl On Solaris we need the nsl library.
2116 AC_CHECK_LIB(nsl, gethostbyname)
2117 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
2118 [AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002119#include <stdio.h>
2120#include <stdlib.h>
2121#include <stdarg.h>
2122#include <fcntl.h>
2123#include <netdb.h>
2124#include <netinet/in.h>
2125#include <errno.h>
2126#include <sys/types.h>
2127#include <sys/socket.h>
2128 /* Check bitfields */
2129 struct nbbuf {
2130 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002131 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002132 };
2133 ], [
2134 /* Check creating a socket. */
2135 struct sockaddr_in server;
2136 (void)socket(AF_INET, SOCK_STREAM, 0);
2137 (void)htons(100);
2138 (void)gethostbyname("microsoft.com");
2139 if (errno == ECONNREFUSED)
2140 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2141 ],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002142 [vim_cv_ipv4_networking="yes"],
2143 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2144 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002145fi
2146if test "$enable_netbeans" = "yes"; then
2147 AC_DEFINE(FEAT_NETBEANS_INTG)
2148 NETBEANS_SRC="netbeans.c"
2149 AC_SUBST(NETBEANS_SRC)
2150 NETBEANS_OBJ="objects/netbeans.o"
2151 AC_SUBST(NETBEANS_OBJ)
2152fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002153if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002154 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002155 CHANNEL_SRC="job.c channel.c"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002156 AC_SUBST(CHANNEL_SRC)
Bram Moolenaar8b5866d2020-09-05 15:48:51 +02002157 CHANNEL_OBJ="objects/job.o objects/channel.o"
Bram Moolenaare0874f82016-01-24 20:36:41 +01002158 AC_SUBST(CHANNEL_OBJ)
2159fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002160
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002161AC_MSG_CHECKING(--enable-terminal argument)
2162AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002163 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002164 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002165if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002166 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2167 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2168 enable_terminal="no"
2169 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002170 if test "$enable_terminal" = "auto"; then
2171 enable_terminal="yes"
2172 AC_MSG_RESULT(defaulting to yes)
2173 else
2174 AC_MSG_RESULT(yes)
2175 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002176 fi
2177else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002178 if test "$enable_terminal" = "auto"; then
2179 enable_terminal="no"
2180 AC_MSG_RESULT(defaulting to no)
2181 else
2182 AC_MSG_RESULT(no)
2183 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002184fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002185if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002186 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002187 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 +02002188 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002189 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 +02002190 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002191 TERM_TEST="test_libvterm"
2192 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002193fi
2194
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002195AC_MSG_CHECKING(--enable-autoservername argument)
2196AC_ARG_ENABLE(autoservername,
2197 [ --enable-autoservername Automatically define servername at vim startup.], ,
2198 [enable_autoservername="no"])
2199AC_MSG_RESULT($enable_autoservername)
2200if test "$enable_autoservername" = "yes"; then
2201 AC_DEFINE(FEAT_AUTOSERVERNAME)
2202fi
2203
Bram Moolenaar071d4272004-06-13 20:20:40 +00002204AC_MSG_CHECKING(--enable-multibyte argument)
2205AC_ARG_ENABLE(multibyte,
2206 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002207 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002208AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002209if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002210 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2211 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002212fi
2213
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002214dnl Right-to-Left language support for Vim will be included with big features,
2215dnl unless ENABLE_RIGHTLEFT is undefined.
2216AC_MSG_CHECKING(--disable-rightleft argument)
2217AC_ARG_ENABLE(rightleft,
2218 [ --disable-rightleft Do not include Right-to-Left language support.],
2219 , [enable_rightleft="yes"])
2220if test "$enable_rightleft" = "yes"; then
2221 AC_MSG_RESULT(no)
2222else
2223 AC_MSG_RESULT(yes)
2224 AC_DEFINE(DISABLE_RIGHTLEFT)
2225fi
2226
2227dnl Arabic language support for Vim will be included with big features,
2228dnl unless ENABLE_ARABIC is undefined.
2229AC_MSG_CHECKING(--disable-arabic argument)
2230AC_ARG_ENABLE(arabic,
2231 [ --disable-arabic Do not include Arabic language support.],
2232 , [enable_arabic="yes"])
2233if test "$enable_arabic" = "yes"; then
2234 AC_MSG_RESULT(no)
2235else
2236 AC_MSG_RESULT(yes)
2237 AC_DEFINE(DISABLE_ARABIC)
2238fi
2239
Bram Moolenaar14184a32019-02-16 15:10:30 +01002240dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002241AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002242 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002243
Bram Moolenaar071d4272004-06-13 20:20:40 +00002244AC_MSG_CHECKING(--enable-xim argument)
2245AC_ARG_ENABLE(xim,
2246 [ --enable-xim Include XIM input support.],
2247 AC_MSG_RESULT($enable_xim),
2248 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002249
2250AC_MSG_CHECKING(--enable-fontset argument)
2251AC_ARG_ENABLE(fontset,
2252 [ --enable-fontset Include X fontset output support.], ,
2253 [enable_fontset="no"])
2254AC_MSG_RESULT($enable_fontset)
2255dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2256
2257test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002258test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002259if test "$with_x" = no; then
2260 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2261else
2262 dnl Do this check early, so that its failure can override user requests.
2263
2264 AC_PATH_PROG(xmkmfpath, xmkmf)
2265
2266 AC_PATH_XTRA
2267
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002268 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002269 dnl be compiled with a special option.
2270 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002271 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002272 CFLAGS="$CFLAGS -W c,dll"
2273 LDFLAGS="$LDFLAGS -W l,dll"
2274 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2275 fi
2276
2277 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002278 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002279
2280 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2281 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2282 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2283 X_LIBS="$X_LIBS -L$x_libraries"
2284 if test "`(uname) 2>/dev/null`" = SunOS &&
2285 uname -r | grep '^5' >/dev/null; then
2286 X_LIBS="$X_LIBS -R $x_libraries"
2287 fi
2288 fi
2289
2290 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2291 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2292 AC_MSG_RESULT(Corrected X includes to $x_includes)
2293 X_CFLAGS="$X_CFLAGS -I$x_includes"
2294 fi
2295
2296 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2297 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2298 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2299 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2300 dnl Same for "-R/usr/lib ".
2301 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2302
2303
2304 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002305 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2306 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002307 AC_MSG_CHECKING(if X11 header files can be found)
2308 cflags_save=$CFLAGS
2309 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002310 AC_TRY_COMPILE([#include <X11/Xlib.h>
2311#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002312 AC_MSG_RESULT(yes),
2313 AC_MSG_RESULT(no); no_x=yes)
2314 CFLAGS=$cflags_save
2315
2316 if test "${no_x-no}" = yes; then
2317 with_x=no
2318 else
2319 AC_DEFINE(HAVE_X11)
2320 X_LIB="-lXt -lX11";
2321 AC_SUBST(X_LIB)
2322
2323 ac_save_LDFLAGS="$LDFLAGS"
2324 LDFLAGS="-L$x_libraries $LDFLAGS"
2325
2326 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2327 dnl For HP-UX 10.20 it must be before -lSM -lICE
2328 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2329 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2330
2331 dnl Some systems need -lnsl -lsocket when testing for ICE.
2332 dnl The check above doesn't do this, try here (again). Also needed to get
2333 dnl them after Xdmcp. link.sh will remove them when not needed.
2334 dnl Check for other function than above to avoid the cached value
2335 AC_CHECK_LIB(ICE, IceOpenConnection,
2336 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2337
2338 dnl Check for -lXpm (needed for some versions of Motif)
2339 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2340 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2341 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2342
2343 dnl Check that the X11 header files don't use implicit declarations
2344 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2345 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002346 dnl -Werror is GCC only, others like Solaris Studio might not like it
2347 if test "$GCC" = yes; then
2348 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2349 else
2350 CFLAGS="$CFLAGS $X_CFLAGS"
2351 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002352 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2353 AC_MSG_RESULT(no),
2354 CFLAGS="$CFLAGS -Wno-implicit-int"
2355 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2356 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2357 AC_MSG_RESULT(test failed)
2358 )
2359 )
2360 CFLAGS=$cflags_save
2361
2362 LDFLAGS="$ac_save_LDFLAGS"
2363
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002364 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2365 AC_CACHE_VAL(ac_cv_small_wchar_t,
2366 [AC_TRY_RUN([
2367#include <X11/Xlib.h>
2368#if STDC_HEADERS
2369# include <stdlib.h>
2370# include <stddef.h>
2371#endif
2372 main()
2373 {
2374 if (sizeof(wchar_t) <= 2)
2375 exit(1);
2376 exit(0);
2377 }],
2378 ac_cv_small_wchar_t="no",
2379 ac_cv_small_wchar_t="yes",
2380 AC_MSG_ERROR(failed to compile test program))])
2381 AC_MSG_RESULT($ac_cv_small_wchar_t)
2382 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2383 AC_DEFINE(SMALL_WCHAR_T)
2384 fi
2385
Bram Moolenaar071d4272004-06-13 20:20:40 +00002386 fi
2387fi
2388
Bram Moolenaard2a05492018-07-27 22:35:15 +02002389dnl Check if --with-x was given but it doesn't work.
2390if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2391 AC_MSG_ERROR([could not configure X])
2392fi
2393
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002394test "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 +00002395
2396AC_MSG_CHECKING(--enable-gui argument)
2397AC_ARG_ENABLE(gui,
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002398 [ --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 +00002399
2400dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2401dnl Do not use character classes for portability with old tools.
2402enable_gui_canon=`echo "_$enable_gui" | \
2403 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2404
2405dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002406SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002407SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002408SKIP_GNOME=YES
2409SKIP_MOTIF=YES
2410SKIP_ATHENA=YES
2411SKIP_NEXTAW=YES
2412SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002413SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002414GUITYPE=NONE
2415
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002416if test "x$HAIKU" = "xyes"; then
2417 SKIP_HAIKU=
2418 case "$enable_gui_canon" in
2419 no) AC_MSG_RESULT(no GUI support)
2420 SKIP_HAIKU=YES ;;
2421 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2422 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2423 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2424 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2425 SKIP_HAIKU=YES ;;
2426 esac
2427elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002428 SKIP_PHOTON=
2429 case "$enable_gui_canon" in
2430 no) AC_MSG_RESULT(no GUI support)
2431 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002432 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2433 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002434 photon) AC_MSG_RESULT(Photon GUI support) ;;
2435 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2436 SKIP_PHOTON=YES ;;
2437 esac
2438
Bram Moolenaar040f9752020-08-11 23:08:48 +02002439elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2440 case "$enable_gui_canon" in
2441 no) AC_MSG_RESULT(no GUI support) ;;
2442 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2443 gui_auto=yes ;;
2444 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002445 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002446 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002447else
2448
Bram Moolenaar071d4272004-06-13 20:20:40 +00002449 case "$enable_gui_canon" in
2450 no|none) AC_MSG_RESULT(no GUI support) ;;
2451 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002452 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002453 SKIP_GTK2=
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002454 SKIP_GTK3=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002455 SKIP_GNOME=
2456 SKIP_MOTIF=
2457 SKIP_ATHENA=
Bram Moolenaar097148e2020-08-11 21:58:20 +02002458 SKIP_NEXTAW=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002459 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002460 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002461 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2462 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002464 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2465 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002466 motif) AC_MSG_RESULT(Motif GUI support)
2467 SKIP_MOTIF=;;
2468 athena) AC_MSG_RESULT(Athena GUI support)
2469 SKIP_ATHENA=;;
2470 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2471 SKIP_NEXTAW=;;
2472 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2473 esac
2474
2475fi
2476
Bram Moolenaar071d4272004-06-13 20:20:40 +00002477if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2478 -a "$enable_gui_canon" != "gnome2"; then
2479 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2480 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002481 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002482 , enable_gtk2_check="yes")
2483 AC_MSG_RESULT($enable_gtk2_check)
2484 if test "x$enable_gtk2_check" = "xno"; then
2485 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002486 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002487 fi
2488fi
2489
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002490if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002491 AC_MSG_CHECKING(whether or not to look for GNOME)
2492 AC_ARG_ENABLE(gnome-check,
2493 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2494 , enable_gnome_check="no")
2495 AC_MSG_RESULT($enable_gnome_check)
2496 if test "x$enable_gnome_check" = "xno"; then
2497 SKIP_GNOME=YES
2498 fi
2499fi
2500
Bram Moolenaar98921892016-02-23 17:14:37 +01002501if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2502 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2503 AC_ARG_ENABLE(gtk3-check,
2504 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2505 , enable_gtk3_check="yes")
2506 AC_MSG_RESULT($enable_gtk3_check)
2507 if test "x$enable_gtk3_check" = "xno"; then
2508 SKIP_GTK3=YES
2509 fi
2510fi
2511
Bram Moolenaar071d4272004-06-13 20:20:40 +00002512if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2513 AC_MSG_CHECKING(whether or not to look for Motif)
2514 AC_ARG_ENABLE(motif-check,
2515 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2516 , enable_motif_check="yes")
2517 AC_MSG_RESULT($enable_motif_check)
2518 if test "x$enable_motif_check" = "xno"; then
2519 SKIP_MOTIF=YES
2520 fi
2521fi
2522
2523if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2524 AC_MSG_CHECKING(whether or not to look for Athena)
2525 AC_ARG_ENABLE(athena-check,
2526 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2527 , enable_athena_check="yes")
2528 AC_MSG_RESULT($enable_athena_check)
2529 if test "x$enable_athena_check" = "xno"; then
2530 SKIP_ATHENA=YES
2531 fi
2532fi
2533
2534if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2535 AC_MSG_CHECKING(whether or not to look for neXtaw)
2536 AC_ARG_ENABLE(nextaw-check,
2537 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2538 , enable_nextaw_check="yes")
2539 AC_MSG_RESULT($enable_nextaw_check);
2540 if test "x$enable_nextaw_check" = "xno"; then
2541 SKIP_NEXTAW=YES
2542 fi
2543fi
2544
Bram Moolenaar071d4272004-06-13 20:20:40 +00002545dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002546dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002547dnl
2548dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002549dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002550dnl
2551AC_DEFUN(AM_PATH_GTK,
2552[
2553 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2554 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002555 no_gtk=""
2556 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2557 && $PKG_CONFIG --exists gtk+-2.0; then
2558 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002559 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2560 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002561 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2562 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2563 dnl something like that.
2564 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002565 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002566 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2567 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2568 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2569 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2570 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2571 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2572 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2573 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002574 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2575 && $PKG_CONFIG --exists gtk+-3.0; then
2576 {
2577 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2578 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2579
2580 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2581 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2582 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2583 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2584 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2585 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2586 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2587 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2588 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2589 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002590 else
Bram Moolenaar67876de2021-01-12 20:51:24 +01002591 dnl Put some text before the "no" to hint at installing the gtk-dev
2592 dnl packages.
2593 AC_MSG_CHECKING(for GTK -dev package)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002594 no_gtk=yes
2595 fi
2596
2597 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2598 {
2599 ac_save_CFLAGS="$CFLAGS"
2600 ac_save_LIBS="$LIBS"
2601 CFLAGS="$CFLAGS $GTK_CFLAGS"
2602 LIBS="$LIBS $GTK_LIBS"
2603
2604 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002605 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002606 dnl
2607 rm -f conf.gtktest
2608 AC_TRY_RUN([
2609#include <gtk/gtk.h>
2610#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002611#if STDC_HEADERS
2612# include <stdlib.h>
2613# include <stddef.h>
2614#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002615
2616int
2617main ()
2618{
2619int major, minor, micro;
2620char *tmp_version;
2621
2622system ("touch conf.gtktest");
2623
2624/* HP/UX 9 (%@#!) writes to sscanf strings */
2625tmp_version = g_strdup("$min_gtk_version");
2626if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2627 printf("%s, bad version string\n", "$min_gtk_version");
2628 exit(1);
2629 }
2630
2631if ((gtk_major_version > major) ||
2632 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2633 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2634 (gtk_micro_version >= micro)))
2635{
2636 return 0;
2637}
2638return 1;
2639}
2640],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2641 CFLAGS="$ac_save_CFLAGS"
2642 LIBS="$ac_save_LIBS"
2643 }
2644 fi
2645 if test "x$no_gtk" = x ; then
2646 if test "x$enable_gtktest" = "xyes"; then
2647 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2648 else
2649 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2650 fi
2651 ifelse([$2], , :, [$2])
2652 else
2653 {
2654 AC_MSG_RESULT(no)
2655 GTK_CFLAGS=""
2656 GTK_LIBS=""
2657 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002658 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2659 AC_MSG_ERROR([could not configure GTK])
2660 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002661 }
2662 fi
2663 }
2664 else
2665 GTK_CFLAGS=""
2666 GTK_LIBS=""
2667 ifelse([$3], , :, [$3])
2668 fi
2669 AC_SUBST(GTK_CFLAGS)
2670 AC_SUBST(GTK_LIBS)
2671 rm -f conf.gtktest
2672])
2673
2674dnl ---------------------------------------------------------------------------
2675dnl gnome
2676dnl ---------------------------------------------------------------------------
2677AC_DEFUN([GNOME_INIT_HOOK],
2678[
2679 AC_SUBST(GNOME_LIBS)
2680 AC_SUBST(GNOME_LIBDIR)
2681 AC_SUBST(GNOME_INCLUDEDIR)
2682
2683 AC_ARG_WITH(gnome-includes,
2684 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2685 [CFLAGS="$CFLAGS -I$withval"]
2686 )
2687
2688 AC_ARG_WITH(gnome-libs,
2689 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2690 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2691 )
2692
2693 AC_ARG_WITH(gnome,
2694 [ --with-gnome Specify prefix for GNOME files],
2695 if test x$withval = xyes; then
2696 want_gnome=yes
2697 ifelse([$1], [], :, [$1])
2698 else
2699 if test "x$withval" = xno; then
2700 want_gnome=no
2701 else
2702 want_gnome=yes
2703 LDFLAGS="$LDFLAGS -L$withval/lib"
2704 CFLAGS="$CFLAGS -I$withval/include"
2705 gnome_prefix=$withval/lib
2706 fi
2707 fi,
2708 want_gnome=yes)
2709
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002710 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002711 {
2712 AC_MSG_CHECKING(for libgnomeui-2.0)
2713 if $PKG_CONFIG --exists libgnomeui-2.0; then
2714 AC_MSG_RESULT(yes)
2715 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2716 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2717 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002718
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002719 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2720 dnl This might not be the right way but it works for me...
2721 AC_MSG_CHECKING(for FreeBSD)
2722 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2723 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002724 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002725 GNOME_LIBS="$GNOME_LIBS -pthread"
2726 else
2727 AC_MSG_RESULT(no)
2728 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002729 $1
2730 else
2731 AC_MSG_RESULT(not found)
2732 if test "x$2" = xfail; then
2733 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2734 fi
2735 fi
2736 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002737 fi
2738])
2739
2740AC_DEFUN([GNOME_INIT],[
2741 GNOME_INIT_HOOK([],fail)
2742])
2743
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002744if test "X$PKG_CONFIG" = "X"; then
2745 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2746fi
2747
Bram Moolenaar071d4272004-06-13 20:20:40 +00002748
2749dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002750dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002751dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002752if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002753
2754 AC_MSG_CHECKING(--disable-gtktest argument)
2755 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2756 , enable_gtktest=yes)
2757 if test "x$enable_gtktest" = "xyes" ; then
2758 AC_MSG_RESULT(gtk test enabled)
2759 else
2760 AC_MSG_RESULT(gtk test disabled)
2761 fi
2762
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002763 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002764 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2765 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002766 dnl Disable checking for GTK3 here, otherwise it's found when GTK2 is not
2767 dnl found.
2768 save_skip_gtk3=$SKIP_GTK3
2769 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002770 AM_PATH_GTK(2.2.0,
2771 [GUI_LIB_LOC="$GTK_LIBDIR"
2772 GTK_LIBNAME="$GTK_LIBS"
2773 GUI_INC_LOC="$GTK_CFLAGS"], )
2774 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002775 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002776 SKIP_ATHENA=YES
2777 SKIP_NEXTAW=YES
2778 SKIP_MOTIF=YES
2779 GUITYPE=GTK
2780 AC_SUBST(GTK_LIBNAME)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002781 else
2782 SKIP_GTK3=$save_skip_gtk3
Bram Moolenaar071d4272004-06-13 20:20:40 +00002783 fi
2784 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002785 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002786 dnl
2787 dnl if GTK exists, then check for GNOME.
2788 dnl
2789 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002790 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002791 GNOME_INIT_HOOK([have_gnome=yes])
2792 if test "x$have_gnome" = xyes ; then
2793 AC_DEFINE(FEAT_GUI_GNOME)
2794 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2795 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002796 fi
2797 }
2798 fi
2799 fi
2800fi
2801
Bram Moolenaar98921892016-02-23 17:14:37 +01002802
2803dnl ---------------------------------------------------------------------------
2804dnl Check for GTK3.
2805dnl ---------------------------------------------------------------------------
2806if test -z "$SKIP_GTK3"; then
2807
2808 AC_MSG_CHECKING(--disable-gtktest argument)
2809 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2810 , enable_gtktest=yes)
2811 if test "x$enable_gtktest" = "xyes" ; then
2812 AC_MSG_RESULT(gtk test enabled)
2813 else
2814 AC_MSG_RESULT(gtk test disabled)
2815 fi
2816
Bram Moolenaar98921892016-02-23 17:14:37 +01002817 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002818 save_skip_gtk2=$SKIP_GTK2
2819 SKIP_GTK2=YES
Bram Moolenaar98921892016-02-23 17:14:37 +01002820 AM_PATH_GTK(3.0.0,
2821 [GUI_LIB_LOC="$GTK_LIBDIR"
2822 GTK_LIBNAME="$GTK_LIBS"
2823 GUI_INC_LOC="$GTK_CFLAGS"], )
2824 if test "x$GTK_CFLAGS" != "x"; then
2825 SKIP_GTK2=YES
2826 SKIP_GNOME=YES
2827 SKIP_ATHENA=YES
2828 SKIP_NEXTAW=YES
2829 SKIP_MOTIF=YES
2830 GUITYPE=GTK
2831 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002832 AC_DEFINE(USE_GTK3)
Bram Moolenaarf272ae12021-01-31 19:52:50 +01002833 else
2834 SKIP_GTK2=$save_skip_gtk2
Bram Moolenaar98921892016-02-23 17:14:37 +01002835 fi
2836 fi
2837fi
2838
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002839dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002840dnl glib-compile-resources is found in PATH, use GResource.
2841if test "x$GUITYPE" = "xGTK"; then
2842 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2843 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2844 if test "x$gdk_pixbuf_version" != x ; then
2845 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2846 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2847 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002848 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002849 AC_MSG_RESULT([OK.])
2850 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2851 AC_MSG_CHECKING([glib-compile-resources])
2852 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002853 GLIB_COMPILE_RESOURCES=""
2854 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002855 else
2856 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002857 AC_DEFINE(USE_GRESOURCE)
2858 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2859 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002860 fi
2861 else
2862 AC_MSG_RESULT([not usable.])
2863 fi
2864 else
2865 AC_MSG_RESULT([cannot obtain from pkg_config.])
2866 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002867
2868 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2869 AC_ARG_ENABLE(icon_cache_update,
2870 [ --disable-icon-cache-update update disabled],
2871 [],
2872 [enable_icon_cache_update="yes"])
2873 if test "$enable_icon_cache_update" = "yes"; then
2874 AC_MSG_RESULT([not set])
2875 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2876 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2877 AC_MSG_RESULT([not found in PATH.])
2878 fi
2879 else
2880 AC_MSG_RESULT([update disabled])
2881 fi
2882
2883 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2884 AC_ARG_ENABLE(desktop_database_update,
2885 [ --disable-desktop-database-update update disabled],
2886 [],
2887 [enable_desktop_database_update="yes"])
2888 if test "$enable_desktop_database_update" = "yes"; then
2889 AC_MSG_RESULT([not set])
2890 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2891 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2892 AC_MSG_RESULT([not found in PATH.])
2893 fi
2894 else
2895 AC_MSG_RESULT([update disabled])
2896 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002897fi
2898AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002899AC_SUBST(GRESOURCE_SRC)
2900AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002901AC_SUBST(GTK_UPDATE_ICON_CACHE)
2902AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002903
Bram Moolenaar071d4272004-06-13 20:20:40 +00002904dnl Check for Motif include files location.
2905dnl The LAST one found is used, this makes the highest version to be used,
2906dnl e.g. when Motif1.2 and Motif2.0 are both present.
2907
2908if test -z "$SKIP_MOTIF"; then
2909 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"
2910 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2911 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2912
2913 AC_MSG_CHECKING(for location of Motif GUI includes)
2914 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2915 GUI_INC_LOC=
2916 for try in $gui_includes; do
2917 if test -f "$try/Xm/Xm.h"; then
2918 GUI_INC_LOC=$try
2919 fi
2920 done
2921 if test -n "$GUI_INC_LOC"; then
2922 if test "$GUI_INC_LOC" = /usr/include; then
2923 GUI_INC_LOC=
2924 AC_MSG_RESULT(in default path)
2925 else
2926 AC_MSG_RESULT($GUI_INC_LOC)
2927 fi
2928 else
2929 AC_MSG_RESULT(<not found>)
2930 SKIP_MOTIF=YES
2931 fi
2932fi
2933
2934dnl Check for Motif library files location. In the same order as the include
2935dnl files, to avoid a mixup if several versions are present
2936
2937if test -z "$SKIP_MOTIF"; then
2938 AC_MSG_CHECKING(--with-motif-lib argument)
2939 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002940 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002941 [ MOTIF_LIBNAME="${withval}" ] )
2942
2943 if test -n "$MOTIF_LIBNAME"; then
2944 AC_MSG_RESULT($MOTIF_LIBNAME)
2945 GUI_LIB_LOC=
2946 else
2947 AC_MSG_RESULT(no)
2948
2949 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2950 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2951
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002952 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2953 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002954 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002955 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 +00002956 GUI_LIB_LOC=
2957 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002958 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002959 if test -f "$libtry"; then
2960 GUI_LIB_LOC=$try
2961 fi
2962 done
2963 done
2964 if test -n "$GUI_LIB_LOC"; then
2965 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002966 if test "$GUI_LIB_LOC" = /usr/lib \
2967 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2968 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002969 GUI_LIB_LOC=
2970 AC_MSG_RESULT(in default path)
2971 else
2972 if test -n "$GUI_LIB_LOC"; then
2973 AC_MSG_RESULT($GUI_LIB_LOC)
2974 if test "`(uname) 2>/dev/null`" = SunOS &&
2975 uname -r | grep '^5' >/dev/null; then
2976 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2977 fi
2978 fi
2979 fi
2980 MOTIF_LIBNAME=-lXm
2981 else
2982 AC_MSG_RESULT(<not found>)
2983 SKIP_MOTIF=YES
2984 fi
2985 fi
2986fi
2987
2988if test -z "$SKIP_MOTIF"; then
2989 SKIP_ATHENA=YES
2990 SKIP_NEXTAW=YES
2991 GUITYPE=MOTIF
2992 AC_SUBST(MOTIF_LIBNAME)
2993fi
2994
2995dnl Check if the Athena files can be found
2996
2997GUI_X_LIBS=
2998
2999if test -z "$SKIP_ATHENA"; then
3000 AC_MSG_CHECKING(if Athena header files can be found)
3001 cflags_save=$CFLAGS
3002 CFLAGS="$CFLAGS $X_CFLAGS"
3003 AC_TRY_COMPILE([
3004#include <X11/Intrinsic.h>
3005#include <X11/Xaw/Paned.h>], ,
3006 AC_MSG_RESULT(yes),
3007 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
3008 CFLAGS=$cflags_save
3009fi
3010
3011if test -z "$SKIP_ATHENA"; then
3012 GUITYPE=ATHENA
3013fi
3014
3015if test -z "$SKIP_NEXTAW"; then
3016 AC_MSG_CHECKING(if neXtaw header files can be found)
3017 cflags_save=$CFLAGS
3018 CFLAGS="$CFLAGS $X_CFLAGS"
3019 AC_TRY_COMPILE([
3020#include <X11/Intrinsic.h>
3021#include <X11/neXtaw/Paned.h>], ,
3022 AC_MSG_RESULT(yes),
3023 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
3024 CFLAGS=$cflags_save
3025fi
3026
3027if test -z "$SKIP_NEXTAW"; then
3028 GUITYPE=NEXTAW
3029fi
3030
3031if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3032 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3033 dnl Avoid adding it when it twice
3034 if test -n "$GUI_INC_LOC"; then
3035 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3036 fi
3037 if test -n "$GUI_LIB_LOC"; then
3038 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3039 fi
3040
3041 dnl Check for -lXext and then for -lXmu
3042 ldflags_save=$LDFLAGS
3043 LDFLAGS="$X_LIBS $LDFLAGS"
3044 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3045 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3046 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3047 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3048 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3049 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3050 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3051 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3052 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3053 if test -z "$SKIP_MOTIF"; then
3054 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3055 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3056 fi
3057 LDFLAGS=$ldflags_save
3058
3059 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3060 AC_MSG_CHECKING(for extra X11 defines)
3061 NARROW_PROTO=
3062 rm -fr conftestdir
3063 if mkdir conftestdir; then
3064 cd conftestdir
3065 cat > Imakefile <<'EOF'
3066acfindx:
3067 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3068EOF
3069 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3070 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3071 fi
3072 cd ..
3073 rm -fr conftestdir
3074 fi
3075 if test -z "$NARROW_PROTO"; then
3076 AC_MSG_RESULT(no)
3077 else
3078 AC_MSG_RESULT($NARROW_PROTO)
3079 fi
3080 AC_SUBST(NARROW_PROTO)
3081fi
3082
3083dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3084dnl use the X11 include path
3085if test "$enable_xsmp" = "yes"; then
3086 cppflags_save=$CPPFLAGS
3087 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3088 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3089 CPPFLAGS=$cppflags_save
3090fi
3091
3092
Bram Moolenaar98921892016-02-23 17:14:37 +01003093if 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 +00003094 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3095 cppflags_save=$CPPFLAGS
3096 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3097 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3098
3099 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3100 if test ! "$enable_xim" = "no"; then
3101 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3102 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3103 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003104 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003105 fi
3106 CPPFLAGS=$cppflags_save
3107
Bram Moolenaar54612582019-11-21 17:13:31 +01003108 dnl automatically enable XIM in the GUI
3109 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003110 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3111 enable_xim="yes"
3112 fi
3113fi
3114
3115if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3116 cppflags_save=$CPPFLAGS
3117 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003118dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3119 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3120 AC_TRY_COMPILE([
3121#include <X11/Intrinsic.h>
3122#include <X11/Xmu/Editres.h>],
3123 [int i; i = 0;],
3124 AC_MSG_RESULT(yes)
3125 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3126 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003127 CPPFLAGS=$cppflags_save
3128fi
3129
3130dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3131if test -z "$SKIP_MOTIF"; then
3132 cppflags_save=$CPPFLAGS
3133 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003134 if test "$zOSUnix" = "yes"; then
3135 xmheader="Xm/Xm.h"
3136 else
3137 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003138 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003139 fi
3140 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003141
Bram Moolenaar77c19352012-06-13 19:19:41 +02003142 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003143 dnl Solaris uses XpmAttributes_21, very annoying.
3144 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3145 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3146 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3147 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3148 )
3149 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003150 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003151 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003152 CPPFLAGS=$cppflags_save
3153fi
3154
3155if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3156 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3157 enable_xim="no"
3158fi
3159if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3160 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3161 enable_fontset="no"
3162fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003163if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003164 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3165 enable_fontset="no"
3166fi
3167
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003168dnl There is no test for the Haiku GUI, if it's selected it's used
3169if test -z "$SKIP_HAIKU"; then
3170 GUITYPE=HAIKUGUI
3171fi
3172
Bram Moolenaar071d4272004-06-13 20:20:40 +00003173if test -z "$SKIP_PHOTON"; then
3174 GUITYPE=PHOTONGUI
3175fi
3176
3177AC_SUBST(GUI_INC_LOC)
3178AC_SUBST(GUI_LIB_LOC)
3179AC_SUBST(GUITYPE)
3180AC_SUBST(GUI_X_LIBS)
3181
3182if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3183 AC_MSG_ERROR([cannot use workshop without Motif])
3184fi
3185
3186dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3187if test "$enable_xim" = "yes"; then
3188 AC_DEFINE(FEAT_XIM)
3189fi
3190if test "$enable_fontset" = "yes"; then
3191 AC_DEFINE(FEAT_XFONTSET)
3192fi
3193
3194
3195dnl ---------------------------------------------------------------------------
3196dnl end of GUI-checking
3197dnl ---------------------------------------------------------------------------
3198
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003199AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003200if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003201 dnl Linux
3202 AC_MSG_RESULT([/proc/self/exe])
3203 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3204elif test -L "/proc/self/path/a.out"; then
3205 dnl Solaris
3206 AC_MSG_RESULT([/proc/self/path/a.out])
3207 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3208elif test -L "/proc/curproc/file"; then
3209 dnl FreeBSD
3210 AC_MSG_RESULT([/proc/curproc/file])
3211 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003212else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003213 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003214fi
3215
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003216dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003217AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003218case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003219 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003220 AC_MSG_CHECKING(for CYGWIN clipboard support)
3221 if test "x$with_x" = "xno" ; then
3222 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3223 AC_MSG_RESULT(yes)
3224 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3225 else
3226 AC_MSG_RESULT(no - using X11)
3227 fi ;;
3228
3229 *) CYGWIN=no; AC_MSG_RESULT(no);;
3230esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003231
Bram Moolenaar071d4272004-06-13 20:20:40 +00003232dnl Checks for libraries and include files.
3233
Bram Moolenaar446cb832008-06-24 21:56:24 +00003234AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3235 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003236 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003237#include "confdefs.h"
3238#include <ctype.h>
3239#if STDC_HEADERS
3240# include <stdlib.h>
3241# include <stddef.h>
3242#endif
3243main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003244 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003245 vim_cv_toupper_broken=yes
3246 ],[
3247 vim_cv_toupper_broken=no
3248 ],[
3249 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3250 ])])
3251
3252if test "x$vim_cv_toupper_broken" = "xyes" ; then
3253 AC_DEFINE(BROKEN_TOUPPER)
3254fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003255
3256AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003257AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003258 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3259 AC_MSG_RESULT(no))
3260
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003261AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3262AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3263 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3264 AC_MSG_RESULT(no))
3265
Bram Moolenaar071d4272004-06-13 20:20:40 +00003266dnl Checks for header files.
3267AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3268dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3269if test "$HAS_ELF" = 1; then
3270 AC_CHECK_LIB(elf, main)
3271fi
3272
3273AC_HEADER_DIRENT
3274
Bram Moolenaar071d4272004-06-13 20:20:40 +00003275dnl If sys/wait.h is not found it might still exist but not be POSIX
3276dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3277if test $ac_cv_header_sys_wait_h = no; then
3278 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3279 AC_TRY_COMPILE([#include <sys/wait.h>],
3280 [union wait xx, yy; xx = yy],
3281 AC_MSG_RESULT(yes)
3282 AC_DEFINE(HAVE_SYS_WAIT_H)
3283 AC_DEFINE(HAVE_UNION_WAIT),
3284 AC_MSG_RESULT(no))
3285fi
3286
Bram Moolenaar779a7752016-01-30 23:26:34 +01003287AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003288 sys/select.h sys/utsname.h termcap.h fcntl.h \
3289 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3290 termio.h iconv.h inttypes.h langinfo.h math.h \
3291 unistd.h stropts.h errno.h sys/resource.h \
3292 sys/systeminfo.h locale.h sys/stream.h termios.h \
3293 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003294 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003295 util/debug.h util/msg18n.h frame.h sys/acl.h \
3296 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003297
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003298dnl sys/ptem.h depends on sys/stream.h on Solaris
3299AC_CHECK_HEADERS(sys/ptem.h, [], [],
3300[#if defined HAVE_SYS_STREAM_H
3301# include <sys/stream.h>
3302#endif])
3303
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003304dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3305AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3306[#if defined HAVE_SYS_PARAM_H
3307# include <sys/param.h>
3308#endif])
3309
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003310
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003311dnl pthread_np.h may exist but can only be used after including pthread.h
3312AC_MSG_CHECKING([for pthread_np.h])
3313AC_TRY_COMPILE([
3314#include <pthread.h>
3315#include <pthread_np.h>],
3316 [int i; i = 0;],
3317 AC_MSG_RESULT(yes)
3318 AC_DEFINE(HAVE_PTHREAD_NP_H),
3319 AC_MSG_RESULT(no))
3320
Bram Moolenaare344bea2005-09-01 20:46:49 +00003321AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003322if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003323 dnl The strings.h file on OS/X contains a warning and nothing useful.
3324 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3325else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003326
3327dnl Check if strings.h and string.h can both be included when defined.
3328AC_MSG_CHECKING([if strings.h can be included after string.h])
3329cppflags_save=$CPPFLAGS
3330CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3331AC_TRY_COMPILE([
3332#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3333# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3334 /* but don't do it on AIX 5.1 (Uribarri) */
3335#endif
3336#ifdef HAVE_XM_XM_H
3337# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3338#endif
3339#ifdef HAVE_STRING_H
3340# include <string.h>
3341#endif
3342#if defined(HAVE_STRINGS_H)
3343# include <strings.h>
3344#endif
3345 ], [int i; i = 0;],
3346 AC_MSG_RESULT(yes),
3347 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3348 AC_MSG_RESULT(no))
3349CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003350fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003351
3352dnl Checks for typedefs, structures, and compiler characteristics.
3353AC_PROG_GCC_TRADITIONAL
3354AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003355AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003356AC_TYPE_MODE_T
3357AC_TYPE_OFF_T
3358AC_TYPE_PID_T
3359AC_TYPE_SIZE_T
3360AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003361AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003362
Bram Moolenaar071d4272004-06-13 20:20:40 +00003363AC_HEADER_TIME
3364AC_CHECK_TYPE(ino_t, long)
3365AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003366AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003367AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003368
3369AC_MSG_CHECKING(for rlim_t)
3370if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3371 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3372else
3373 AC_EGREP_CPP(dnl
3374changequote(<<,>>)dnl
3375<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3376changequote([,]),
3377 [
3378#include <sys/types.h>
3379#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003380# include <stdlib.h>
3381# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003382#endif
3383#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003384# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003385#endif
3386 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3387 AC_MSG_RESULT($ac_cv_type_rlim_t)
3388fi
3389if test $ac_cv_type_rlim_t = no; then
3390 cat >> confdefs.h <<\EOF
3391#define rlim_t unsigned long
3392EOF
3393fi
3394
3395AC_MSG_CHECKING(for stack_t)
3396if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3397 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3398else
3399 AC_EGREP_CPP(stack_t,
3400 [
3401#include <sys/types.h>
3402#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003403# include <stdlib.h>
3404# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003405#endif
3406#include <signal.h>
3407 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3408 AC_MSG_RESULT($ac_cv_type_stack_t)
3409fi
3410if test $ac_cv_type_stack_t = no; then
3411 cat >> confdefs.h <<\EOF
3412#define stack_t struct sigaltstack
3413EOF
3414fi
3415
3416dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3417AC_MSG_CHECKING(whether stack_t has an ss_base field)
3418AC_TRY_COMPILE([
3419#include <sys/types.h>
3420#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003421# include <stdlib.h>
3422# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003423#endif
3424#include <signal.h>
3425#include "confdefs.h"
3426 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3427 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3428 AC_MSG_RESULT(no))
3429
3430olibs="$LIBS"
3431AC_MSG_CHECKING(--with-tlib argument)
3432AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3433if test -n "$with_tlib"; then
3434 AC_MSG_RESULT($with_tlib)
3435 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003436 AC_MSG_CHECKING(for linking with $with_tlib library)
3437 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3438 dnl Need to check for tgetent() below.
3439 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003440else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003441 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003442 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3443 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003444 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003445 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003446 dnl Older versions of ncurses have bugs, get a new one!
3447 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003448 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003449 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003450 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3451 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003452 esac
3453 for libname in $tlibs; do
3454 AC_CHECK_LIB(${libname}, tgetent,,)
3455 if test "x$olibs" != "x$LIBS"; then
3456 dnl It's possible that a library is found but it doesn't work
3457 dnl e.g., shared library that cannot be found
3458 dnl compile and run a test program to be sure
3459 AC_TRY_RUN([
3460#ifdef HAVE_TERMCAP_H
3461# include <termcap.h>
3462#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003463#if STDC_HEADERS
3464# include <stdlib.h>
3465# include <stddef.h>
3466#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003467main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3468 res="OK", res="FAIL", res="FAIL")
3469 if test "$res" = "OK"; then
3470 break
3471 fi
3472 AC_MSG_RESULT($libname library is not usable)
3473 LIBS="$olibs"
3474 fi
3475 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003476 if test "x$olibs" = "x$LIBS"; then
3477 AC_MSG_RESULT(no terminal library found)
3478 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003479fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003480
3481if test "x$olibs" = "x$LIBS"; then
3482 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaarbd7f7c12020-07-28 21:03:37 +02003483 AC_TRY_LINK([int tgetent(char *, const char *);],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003484 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3485 AC_MSG_RESULT(yes),
3486 AC_MSG_ERROR([NOT FOUND!
3487 You need to install a terminal library; for example ncurses.
Bram Moolenaar16678eb2021-04-21 11:57:59 +02003488 On Linux that would be the libncurses-dev package.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003489 Or specify the name of the library with --with-tlib.]))
3490fi
3491
Bram Moolenaar446cb832008-06-24 21:56:24 +00003492AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3493 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003494 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003495#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003496#ifdef HAVE_TERMCAP_H
3497# include <termcap.h>
3498#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003499#ifdef HAVE_STRING_H
3500# include <string.h>
3501#endif
3502#if STDC_HEADERS
3503# include <stdlib.h>
3504# include <stddef.h>
3505#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003506main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003507{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003508 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003509 vim_cv_terminfo=no
3510 ],[
3511 vim_cv_terminfo=yes
3512 ],[
3513 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3514 ])
3515 ])
3516
3517if test "x$vim_cv_terminfo" = "xyes" ; then
3518 AC_DEFINE(TERMINFO)
3519fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003520
Bram Moolenaara88254f2017-11-02 23:04:14 +01003521AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003522 [
3523 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003524#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003525#ifdef HAVE_TERMCAP_H
3526# include <termcap.h>
3527#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003528#if STDC_HEADERS
3529# include <stdlib.h>
3530# include <stddef.h>
3531#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003532main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003533{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003534 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003535 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003536 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003537 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003538 ],[
3539 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003540 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003541 ])
3542
Bram Moolenaara88254f2017-11-02 23:04:14 +01003543if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003544 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003545fi
3546
3547AC_MSG_CHECKING(whether termcap.h contains ospeed)
3548AC_TRY_LINK([
3549#ifdef HAVE_TERMCAP_H
3550# include <termcap.h>
3551#endif
3552 ], [ospeed = 20000],
3553 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3554 [AC_MSG_RESULT(no)
3555 AC_MSG_CHECKING(whether ospeed can be extern)
3556 AC_TRY_LINK([
3557#ifdef HAVE_TERMCAP_H
3558# include <termcap.h>
3559#endif
3560extern short ospeed;
3561 ], [ospeed = 20000],
3562 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3563 AC_MSG_RESULT(no))]
3564 )
3565
3566AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3567AC_TRY_LINK([
3568#ifdef HAVE_TERMCAP_H
3569# include <termcap.h>
3570#endif
3571 ], [if (UP == 0 && BC == 0) PC = 1],
3572 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3573 [AC_MSG_RESULT(no)
3574 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3575 AC_TRY_LINK([
3576#ifdef HAVE_TERMCAP_H
3577# include <termcap.h>
3578#endif
3579extern char *UP, *BC, PC;
3580 ], [if (UP == 0 && BC == 0) PC = 1],
3581 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3582 AC_MSG_RESULT(no))]
3583 )
3584
3585AC_MSG_CHECKING(whether tputs() uses outfuntype)
3586AC_TRY_COMPILE([
3587#ifdef HAVE_TERMCAP_H
3588# include <termcap.h>
3589#endif
3590 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3591 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3592 AC_MSG_RESULT(no))
3593
3594dnl On some SCO machines sys/select redefines struct timeval
3595AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3596AC_TRY_COMPILE([
3597#include <sys/types.h>
3598#include <sys/time.h>
3599#include <sys/select.h>], ,
3600 AC_MSG_RESULT(yes)
3601 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3602 AC_MSG_RESULT(no))
3603
3604dnl AC_DECL_SYS_SIGLIST
3605
3606dnl Checks for pty.c (copied from screen) ==========================
3607AC_MSG_CHECKING(for /dev/ptc)
3608if test -r /dev/ptc; then
3609 AC_DEFINE(HAVE_DEV_PTC)
3610 AC_MSG_RESULT(yes)
3611else
3612 AC_MSG_RESULT(no)
3613fi
3614
3615AC_MSG_CHECKING(for SVR4 ptys)
3616if test -c /dev/ptmx ; then
Bram Moolenaarce7be3a2020-11-26 20:11:11 +01003617 AC_TRY_LINK([
3618// These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
3619char *ptsname(int);
3620int unlockpt(int);
3621int grantpt(int);
3622 ], [
3623 ptsname(0);
3624 grantpt(0);
3625 unlockpt(0);],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003626 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3627 AC_MSG_RESULT(no))
3628else
3629 AC_MSG_RESULT(no)
3630fi
3631
3632AC_MSG_CHECKING(for ptyranges)
3633if test -d /dev/ptym ; then
3634 pdir='/dev/ptym'
3635else
3636 pdir='/dev'
3637fi
3638dnl SCO uses ptyp%d
3639AC_EGREP_CPP(yes,
3640[#ifdef M_UNIX
3641 yes;
3642#endif
3643 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3644dnl if test -c /dev/ptyp19; then
3645dnl ptys=`echo /dev/ptyp??`
3646dnl else
3647dnl ptys=`echo $pdir/pty??`
3648dnl fi
3649if test "$ptys" != "$pdir/pty??" ; then
3650 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3651 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3652 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3653 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3654 AC_MSG_RESULT([$p0 / $p1])
3655else
3656 AC_MSG_RESULT([don't know])
3657fi
3658
Bram Moolenaar071d4272004-06-13 20:20:40 +00003659dnl Checks for library functions. ===================================
3660
3661AC_TYPE_SIGNAL
3662
3663dnl find out what to use at the end of a signal function
3664if test $ac_cv_type_signal = void; then
3665 AC_DEFINE(SIGRETURN, [return])
3666else
3667 AC_DEFINE(SIGRETURN, [return 0])
3668fi
3669
3670dnl check if struct sigcontext is defined (used for SGI only)
3671AC_MSG_CHECKING(for struct sigcontext)
3672AC_TRY_COMPILE([
3673#include <signal.h>
3674test_sig()
3675{
3676 struct sigcontext *scont;
3677 scont = (struct sigcontext *)0;
3678 return 1;
3679} ], ,
3680 AC_MSG_RESULT(yes)
3681 AC_DEFINE(HAVE_SIGCONTEXT),
3682 AC_MSG_RESULT(no))
3683
3684dnl tricky stuff: try to find out if getcwd() is implemented with
3685dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003686AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3687 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003688 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003689#include "confdefs.h"
3690#ifdef HAVE_UNISTD_H
3691#include <unistd.h>
3692#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003693char *dagger[] = { "IFS=pwd", 0 };
3694main()
3695{
3696 char buffer[500];
3697 extern char **environ;
3698 environ = dagger;
3699 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003700}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003701 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003702 vim_cv_getcwd_broken=no
3703 ],[
3704 vim_cv_getcwd_broken=yes
3705 ],[
3706 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3707 ])
3708 ])
3709
3710if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3711 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003712 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003713fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003714
Bram Moolenaar25153e12010-02-24 14:47:08 +01003715dnl Check for functions in one big call, to reduce the size of configure.
3716dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003717AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003718 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003719 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003720 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003721 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003722 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3723 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003724AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003725AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003726
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003727dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3728dnl appropriate, so that off_t is 64 bits when needed.
3729AC_SYS_LARGEFILE
3730
Bram Moolenaar21606672019-06-14 20:40:58 +02003731AC_MSG_CHECKING(--enable-canberra argument)
3732AC_ARG_ENABLE(canberra,
3733 [ --disable-canberra Do not use libcanberra.],
3734 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003735
Bram Moolenaar21606672019-06-14 20:40:58 +02003736if test "$enable_canberra" = "maybe"; then
3737 if test "$features" = "big" -o "$features" = "huge"; then
3738 AC_MSG_RESULT(Defaulting to yes)
3739 enable_canberra="yes"
3740 else
3741 AC_MSG_RESULT(Defaulting to no)
3742 enable_canberra="no"
3743 fi
3744else
3745 AC_MSG_RESULT($enable_canberra)
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003746fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003747if test "$enable_canberra" = "yes"; then
3748 if test "x$PKG_CONFIG" != "xno"; then
3749 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3750 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3751 fi
3752 if test "x$canberra_lib" = "x"; then
3753 canberra_lib=-lcanberra
3754 canberra_cflags=-D_REENTRANT
3755 fi
3756 AC_MSG_CHECKING(for libcanberra)
3757 ac_save_CFLAGS="$CFLAGS"
3758 ac_save_LIBS="$LIBS"
Christian Brabandt6b9efdd2021-09-09 17:14:50 +02003759 if `echo "$CFLAGS" | grep -v "$canberra_cflags" >/dev/null`; then
3760 CFLAGS="$CFLAGS $canberra_cflags"
3761 fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003762 LIBS="$LIBS $canberra_lib"
3763 AC_TRY_LINK([
3764 # include <canberra.h>
3765 ], [
3766 ca_context *hello;
3767 ca_context_create(&hello);],
3768 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003769 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003770fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003771
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003772AC_MSG_CHECKING(--enable-libsodium argument)
3773AC_ARG_ENABLE(libsodium,
3774 [ --disable-libsodium Do not use libsodium.],
3775 , [enable_libsodium="maybe"])
3776
3777if test "$enable_libsodium" = "maybe"; then
3778 if test "$features" = "big" -o "$features" = "huge"; then
3779 AC_MSG_RESULT(Defaulting to yes)
3780 enable_libsodium="yes"
3781 else
3782 AC_MSG_RESULT(Defaulting to no)
3783 enable_libsodium="no"
3784 fi
3785else
3786 AC_MSG_RESULT($enable_libsodium)
3787fi
3788if test "$enable_libsodium" = "yes"; then
3789 if test "x$PKG_CONFIG" != "xno"; then
3790 libsodium_lib=`$PKG_CONFIG --libs libsodium 2>/dev/null`
3791 libsodium_cflags=`$PKG_CONFIG --cflags libsodium 2>/dev/null`
3792 fi
3793 if test "x$libsodium_lib" = "x"; then
3794 libsodium_lib=-lsodium
3795 libsodium_cflags=
3796 fi
ichizok8ce3ca82021-06-23 15:41:52 +02003797 AC_MSG_CHECKING(for libsodium)
Christian Brabandtf573c6e2021-06-20 14:02:16 +02003798 ac_save_CFLAGS="$CFLAGS"
3799 ac_save_LIBS="$LIBS"
3800 CFLAGS="$CFLAGS $libsodium_cflags"
3801 LIBS="$LIBS $libsodium_lib"
3802 AC_TRY_LINK([
3803 # include <sodium.h>
3804 ], [
3805 printf("%d", sodium_init()); ],
3806 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
3807 AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
3808fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003809
Bram Moolenaar071d4272004-06-13 20:20:40 +00003810dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3811AC_MSG_CHECKING(for st_blksize)
3812AC_TRY_COMPILE(
3813[#include <sys/types.h>
3814#include <sys/stat.h>],
3815[ struct stat st;
3816 int n;
3817
3818 stat("/", &st);
3819 n = (int)st.st_blksize;],
3820 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3821 AC_MSG_RESULT(no))
3822
Bram Moolenaar446cb832008-06-24 21:56:24 +00003823AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3824 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003825 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003826#include "confdefs.h"
3827#if STDC_HEADERS
3828# include <stdlib.h>
3829# include <stddef.h>
3830#endif
3831#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003832#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003833main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003834 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003835 vim_cv_stat_ignores_slash=yes
3836 ],[
3837 vim_cv_stat_ignores_slash=no
3838 ],[
3839 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3840 ])
3841 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003842
Bram Moolenaar446cb832008-06-24 21:56:24 +00003843if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3844 AC_DEFINE(STAT_IGNORES_SLASH)
3845fi
3846
Bram Moolenaar071d4272004-06-13 20:20:40 +00003847dnl Link with iconv for charset translation, if not found without library.
3848dnl check for iconv() requires including iconv.h
3849dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3850dnl has been installed.
3851AC_MSG_CHECKING(for iconv_open())
3852save_LIBS="$LIBS"
3853LIBS="$LIBS -liconv"
3854AC_TRY_LINK([
3855#ifdef HAVE_ICONV_H
3856# include <iconv.h>
3857#endif
3858 ], [iconv_open("fr", "to");],
3859 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3860 LIBS="$save_LIBS"
3861 AC_TRY_LINK([
3862#ifdef HAVE_ICONV_H
3863# include <iconv.h>
3864#endif
3865 ], [iconv_open("fr", "to");],
3866 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3867 AC_MSG_RESULT(no)))
3868
3869
3870AC_MSG_CHECKING(for nl_langinfo(CODESET))
3871AC_TRY_LINK([
3872#ifdef HAVE_LANGINFO_H
3873# include <langinfo.h>
3874#endif
3875], [char *cs = nl_langinfo(CODESET);],
3876 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3877 AC_MSG_RESULT(no))
3878
Bram Moolenaar446cb832008-06-24 21:56:24 +00003879dnl Need various functions for floating point support. Only enable
3880dnl floating point when they are all present.
3881AC_CHECK_LIB(m, strtod)
3882AC_MSG_CHECKING([for strtod() and other floating point functions])
3883AC_TRY_LINK([
3884#ifdef HAVE_MATH_H
3885# include <math.h>
3886#endif
3887#if STDC_HEADERS
3888# include <stdlib.h>
3889# include <stddef.h>
3890#endif
3891], [char *s; double d;
3892 d = strtod("1.1", &s);
3893 d = fabs(1.11);
3894 d = ceil(1.11);
3895 d = floor(1.11);
3896 d = log10(1.11);
3897 d = pow(1.11, 2.22);
3898 d = sqrt(1.11);
3899 d = sin(1.11);
3900 d = cos(1.11);
3901 d = atan(1.11);
3902 ],
3903 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3904 AC_MSG_RESULT(no))
3905
Bram Moolenaara6b89762016-02-29 21:38:26 +01003906dnl isinf() and isnan() need to include header files and may need -lm.
3907AC_MSG_CHECKING([for isinf()])
3908AC_TRY_LINK([
3909#ifdef HAVE_MATH_H
3910# include <math.h>
3911#endif
3912#if STDC_HEADERS
3913# include <stdlib.h>
3914# include <stddef.h>
3915#endif
3916], [int r = isinf(1.11); ],
3917 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3918 AC_MSG_RESULT(no))
3919
3920AC_MSG_CHECKING([for isnan()])
3921AC_TRY_LINK([
3922#ifdef HAVE_MATH_H
3923# include <math.h>
3924#endif
3925#if STDC_HEADERS
3926# include <stdlib.h>
3927# include <stddef.h>
3928#endif
3929], [int r = isnan(1.11); ],
3930 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3931 AC_MSG_RESULT(no))
3932
Bram Moolenaar071d4272004-06-13 20:20:40 +00003933dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3934dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003935dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003936AC_MSG_CHECKING(--disable-acl argument)
3937AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003938 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003939 , [enable_acl="yes"])
3940if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003941 AC_MSG_RESULT(no)
3942 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003943 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3944 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3945
Bram Moolenaard6d30422018-01-28 22:48:55 +01003946 AC_MSG_CHECKING(for POSIX ACL support)
3947 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003948#include <sys/types.h>
3949#ifdef HAVE_SYS_ACL_H
3950# include <sys/acl.h>
3951#endif
3952acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3953 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3954 acl_free(acl);],
3955 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3956 AC_MSG_RESULT(no))
3957
Bram Moolenaard6d30422018-01-28 22:48:55 +01003958 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3959 AC_MSG_CHECKING(for Solaris ACL support)
3960 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003961#ifdef HAVE_SYS_ACL_H
3962# include <sys/acl.h>
3963#endif], [acl("foo", GETACLCNT, 0, NULL);
3964 ],
3965 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003966 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003967
Bram Moolenaard6d30422018-01-28 22:48:55 +01003968 AC_MSG_CHECKING(for AIX ACL support)
3969 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003970#if STDC_HEADERS
3971# include <stdlib.h>
3972# include <stddef.h>
3973#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003974#ifdef HAVE_SYS_ACL_H
3975# include <sys/acl.h>
3976#endif
3977#ifdef HAVE_SYS_ACCESS_H
3978# include <sys/access.h>
3979#endif
3980#define _ALL_SOURCE
3981
3982#include <sys/stat.h>
3983
3984int aclsize;
3985struct acl *aclent;], [aclsize = sizeof(struct acl);
3986 aclent = (void *)malloc(aclsize);
3987 statacl("foo", STX_NORMAL, aclent, aclsize);
3988 ],
3989 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3990 AC_MSG_RESULT(no))
3991else
3992 AC_MSG_RESULT(yes)
3993fi
3994
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003995if test "x$GTK_CFLAGS" != "x"; then
3996 dnl pango_shape_full() is new, fall back to pango_shape().
3997 AC_MSG_CHECKING(for pango_shape_full)
3998 ac_save_CFLAGS="$CFLAGS"
3999 ac_save_LIBS="$LIBS"
4000 CFLAGS="$CFLAGS $GTK_CFLAGS"
4001 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02004002 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02004003 [#include <gtk/gtk.h>],
4004 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
4005 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
4006 AC_MSG_RESULT(no))
4007 CFLAGS="$ac_save_CFLAGS"
4008 LIBS="$ac_save_LIBS"
4009fi
4010
Bram Moolenaar071d4272004-06-13 20:20:40 +00004011AC_MSG_CHECKING(--disable-gpm argument)
4012AC_ARG_ENABLE(gpm,
4013 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
4014 [enable_gpm="yes"])
4015
4016if test "$enable_gpm" = "yes"; then
4017 AC_MSG_RESULT(no)
4018 dnl Checking if gpm support can be compiled
4019 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
4020 [olibs="$LIBS" ; LIBS="-lgpm"]
4021 AC_TRY_LINK(
4022 [#include <gpm.h>
4023 #include <linux/keyboard.h>],
4024 [Gpm_GetLibVersion(NULL);],
4025 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
4026 dnl FEAT_MOUSE_GPM if mouse support is included
4027 [vi_cv_have_gpm=yes],
4028 [vi_cv_have_gpm=no])
4029 [LIBS="$olibs"]
4030 )
4031 if test $vi_cv_have_gpm = yes; then
4032 LIBS="$LIBS -lgpm"
4033 AC_DEFINE(HAVE_GPM)
4034 fi
4035else
4036 AC_MSG_RESULT(yes)
4037fi
4038
Bram Moolenaar446cb832008-06-24 21:56:24 +00004039AC_MSG_CHECKING(--disable-sysmouse argument)
4040AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02004041 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00004042 [enable_sysmouse="yes"])
4043
4044if test "$enable_sysmouse" = "yes"; then
4045 AC_MSG_RESULT(no)
4046 dnl Checking if sysmouse support can be compiled
4047 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4048 dnl defines FEAT_SYSMOUSE if mouse support is included
4049 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
4050 AC_TRY_LINK(
4051 [#include <sys/consio.h>
4052 #include <signal.h>
4053 #include <sys/fbio.h>],
4054 [struct mouse_info mouse;
4055 mouse.operation = MOUSE_MODE;
4056 mouse.operation = MOUSE_SHOW;
4057 mouse.u.mode.mode = 0;
4058 mouse.u.mode.signal = SIGUSR2;],
4059 [vi_cv_have_sysmouse=yes],
4060 [vi_cv_have_sysmouse=no])
4061 )
4062 if test $vi_cv_have_sysmouse = yes; then
4063 AC_DEFINE(HAVE_SYSMOUSE)
4064 fi
4065else
4066 AC_MSG_RESULT(yes)
4067fi
4068
Bram Moolenaarf05da212009-11-17 16:13:15 +00004069dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4070AC_MSG_CHECKING(for FD_CLOEXEC)
4071AC_TRY_COMPILE(
4072[#if HAVE_FCNTL_H
4073# include <fcntl.h>
4074#endif],
4075[ int flag = FD_CLOEXEC;],
4076 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4077 AC_MSG_RESULT(not usable))
4078
Bram Moolenaar071d4272004-06-13 20:20:40 +00004079dnl rename needs to be checked separately to work on Nextstep with cc
4080AC_MSG_CHECKING(for rename)
4081AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4082 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4083 AC_MSG_RESULT(no))
4084
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004085dnl check for dirfd()
4086AC_MSG_CHECKING(for dirfd)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004087AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004088[#include <sys/types.h>
4089#include <dirent.h>],
4090[DIR * dir=opendir("dirname"); dirfd(dir);],
4091AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4092
4093dnl check for flock()
4094AC_MSG_CHECKING(for flock)
Bram Moolenaar9d8bfae2020-09-02 21:21:35 +02004095AC_TRY_LINK(
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004096[#include <sys/file.h>],
4097[flock(10, LOCK_SH);],
4098AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4099
Bram Moolenaar071d4272004-06-13 20:20:40 +00004100dnl sysctl() may exist but not the arguments we use
4101AC_MSG_CHECKING(for sysctl)
4102AC_TRY_COMPILE(
4103[#include <sys/types.h>
4104#include <sys/sysctl.h>],
4105[ int mib[2], r;
4106 size_t len;
4107
4108 mib[0] = CTL_HW;
4109 mib[1] = HW_USERMEM;
4110 len = sizeof(r);
4111 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4112 ],
4113 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4114 AC_MSG_RESULT(not usable))
4115
Bram Moolenaare2982d62021-10-06 11:27:21 +01004116dnl sysinfo() may exist but not be Linux compatible.
4117dnl On some FreeBSD systems it may depend on libsysinfo, use TRY_LINK
Bram Moolenaar071d4272004-06-13 20:20:40 +00004118AC_MSG_CHECKING(for sysinfo)
Bram Moolenaare2982d62021-10-06 11:27:21 +01004119AC_TRY_LINK(
Bram Moolenaar071d4272004-06-13 20:20:40 +00004120[#include <sys/types.h>
4121#include <sys/sysinfo.h>],
4122[ struct sysinfo sinfo;
4123 int t;
4124
4125 (void)sysinfo(&sinfo);
4126 t = sinfo.totalram;
4127 ],
4128 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4129 AC_MSG_RESULT(not usable))
4130
Bram Moolenaar914572a2007-05-01 11:37:47 +00004131dnl struct sysinfo may have the mem_unit field or not
4132AC_MSG_CHECKING(for sysinfo.mem_unit)
4133AC_TRY_COMPILE(
4134[#include <sys/types.h>
4135#include <sys/sysinfo.h>],
4136[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004137 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00004138 ],
4139 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4140 AC_MSG_RESULT(no))
4141
Bram Moolenaarf52f0602021-03-10 21:26:37 +01004142dnl struct sysinfo may have the uptime field or not
4143AC_MSG_CHECKING(for sysinfo.uptime)
4144AC_TRY_COMPILE(
4145[#include <sys/types.h>
4146#include <sys/sysinfo.h>],
4147[ struct sysinfo sinfo;
4148 long ut;
4149
4150 (void)sysinfo(&sinfo);
4151 ut = sinfo.uptime;
4152 ],
4153 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
4154 AC_MSG_RESULT(no))
4155
Bram Moolenaar071d4272004-06-13 20:20:40 +00004156dnl sysconf() may exist but not support what we want to use
4157AC_MSG_CHECKING(for sysconf)
4158AC_TRY_COMPILE(
4159[#include <unistd.h>],
4160[ (void)sysconf(_SC_PAGESIZE);
4161 (void)sysconf(_SC_PHYS_PAGES);
4162 ],
4163 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4164 AC_MSG_RESULT(not usable))
4165
Bram Moolenaar0e62a672021-02-25 17:17:56 +01004166dnl check if we have _SC_SIGSTKSZ via sysconf()
4167AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
4168AC_TRY_COMPILE(
4169[#include <unistd.h>],
4170[ (void)sysconf(_SC_SIGSTKSZ);
4171 ],
4172 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
4173 AC_MSG_RESULT(not usable))
4174
Bram Moolenaar914703b2010-05-31 21:59:46 +02004175AC_CHECK_SIZEOF([int])
4176AC_CHECK_SIZEOF([long])
4177AC_CHECK_SIZEOF([time_t])
4178AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004179
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004180dnl Use different names to avoid clashing with other header files.
4181AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4182AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4183
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004184dnl Make sure that uint32_t is really 32 bits unsigned.
4185AC_MSG_CHECKING([uint32_t is 32 bits])
4186AC_TRY_RUN([
4187#ifdef HAVE_STDINT_H
4188# include <stdint.h>
4189#endif
4190#ifdef HAVE_INTTYPES_H
4191# include <inttypes.h>
4192#endif
4193main() {
4194 uint32_t nr1 = (uint32_t)-1;
4195 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004196 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4197 return 0;
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004198}],
4199AC_MSG_RESULT(ok),
4200AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004201AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004202
Bram Moolenaar446cb832008-06-24 21:56:24 +00004203dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4204dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4205
Bram Moolenaar071d4272004-06-13 20:20:40 +00004206[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004207#include "confdefs.h"
4208#ifdef HAVE_STRING_H
4209# include <string.h>
4210#endif
4211#if STDC_HEADERS
4212# include <stdlib.h>
4213# include <stddef.h>
4214#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004215main() {
4216 char buf[10];
4217 strcpy(buf, "abcdefghi");
4218 mch_memmove(buf, buf + 2, 3);
4219 if (strncmp(buf, "ababcf", 6))
4220 exit(1);
4221 strcpy(buf, "abcdefghi");
4222 mch_memmove(buf + 2, buf, 3);
4223 if (strncmp(buf, "cdedef", 6))
4224 exit(1);
4225 exit(0); /* libc version works properly. */
4226}']
4227
Bram Moolenaar446cb832008-06-24 21:56:24 +00004228AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4229 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004230 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 +00004231 [
4232 vim_cv_memmove_handles_overlap=yes
4233 ],[
4234 vim_cv_memmove_handles_overlap=no
4235 ],[
4236 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4237 ])
4238 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004239
Bram Moolenaar446cb832008-06-24 21:56:24 +00004240if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4241 AC_DEFINE(USEMEMMOVE)
4242else
4243 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4244 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004245 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 +00004246 [
4247 vim_cv_bcopy_handles_overlap=yes
4248 ],[
4249 vim_cv_bcopy_handles_overlap=no
4250 ],[
4251 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4252 ])
4253 ])
4254
4255 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4256 AC_DEFINE(USEBCOPY)
4257 else
4258 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4259 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004260 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 +00004261 [
4262 vim_cv_memcpy_handles_overlap=yes
4263 ],[
4264 vim_cv_memcpy_handles_overlap=no
4265 ],[
4266 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4267 ])
4268 ])
4269
4270 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4271 AC_DEFINE(USEMEMCPY)
4272 fi
4273 fi
4274fi
4275
Bram Moolenaar071d4272004-06-13 20:20:40 +00004276
4277dnl Check for multibyte locale functions
4278dnl Find out if _Xsetlocale() is supported by libX11.
4279dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004280if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004281 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004282 libs_save=$LIBS
4283 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4284 CFLAGS="$CFLAGS $X_CFLAGS"
4285
4286 AC_MSG_CHECKING(whether X_LOCALE needed)
4287 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4288 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4289 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4290 AC_MSG_RESULT(no))
4291
4292 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4293 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4294 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4295
Bram Moolenaar071d4272004-06-13 20:20:40 +00004296 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004297 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004298fi
4299
4300dnl Link with xpg4, it is said to make Korean locale working
4301AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4302
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004303dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004304dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004305dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004306dnl -t for typedefs (many ctags have this)
4307dnl -s for static functions (Elvis ctags only?)
4308dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4309dnl -i+m to test for older Exuberant ctags
4310AC_MSG_CHECKING(how to create tags)
4311test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004312if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004313 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004314elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004315 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004316elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004317 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004318else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004319 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004320 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4321 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4322 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4323 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4324 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4325 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4326 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4327fi
4328test -f tags.save && mv tags.save tags
4329AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4330
4331dnl Check how we can run man with a section number
4332AC_MSG_CHECKING(how to run man with a section nr)
4333MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004334(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 +00004335AC_MSG_RESULT($MANDEF)
4336if test "$MANDEF" = "man -s"; then
4337 AC_DEFINE(USEMAN_S)
4338fi
4339
4340dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004341dnl We take care to base this on an empty LIBS: on some systems libelf would be
4342dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4343dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004344AC_MSG_CHECKING(--disable-nls argument)
4345AC_ARG_ENABLE(nls,
4346 [ --disable-nls Don't support NLS (gettext()).], ,
4347 [enable_nls="yes"])
4348
4349if test "$enable_nls" = "yes"; then
4350 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004351
4352 INSTALL_LANGS=install-languages
4353 AC_SUBST(INSTALL_LANGS)
4354 INSTALL_TOOL_LANGS=install-tool-languages
4355 AC_SUBST(INSTALL_TOOL_LANGS)
4356
Bram Moolenaar071d4272004-06-13 20:20:40 +00004357 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4358 AC_MSG_CHECKING([for NLS])
4359 if test -f po/Makefile; then
4360 have_gettext="no"
4361 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004362 olibs=$LIBS
4363 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004364 AC_TRY_LINK(
4365 [#include <libintl.h>],
4366 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004367 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4368 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004369 AC_TRY_LINK(
4370 [#include <libintl.h>],
4371 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004372 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4373 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004374 AC_MSG_RESULT([gettext() doesn't work]);
4375 LIBS=$olibs))
4376 else
4377 AC_MSG_RESULT([msgfmt not found - disabled]);
4378 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004379 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004380 AC_DEFINE(HAVE_GETTEXT)
4381 MAKEMO=yes
4382 AC_SUBST(MAKEMO)
4383 dnl this was added in GNU gettext 0.10.36
4384 AC_CHECK_FUNCS(bind_textdomain_codeset)
4385 dnl _nl_msg_cat_cntr is required for GNU gettext
4386 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4387 AC_TRY_LINK(
4388 [#include <libintl.h>
4389 extern int _nl_msg_cat_cntr;],
4390 [++_nl_msg_cat_cntr;],
4391 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4392 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004393 AC_MSG_CHECKING([if msgfmt supports --desktop])
4394 MSGFMT_DESKTOP=
4395 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004396 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4397 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4398 dnl 0.19.3 is also broken.
4399 AC_MSG_RESULT([broken])
4400 else
4401 AC_MSG_RESULT([yes])
4402 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4403 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004404 else
4405 AC_MSG_RESULT([no])
4406 fi
4407 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004408 fi
4409 else
4410 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4411 fi
4412else
4413 AC_MSG_RESULT(yes)
4414fi
4415
4416dnl Check for dynamic linking loader
4417AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4418if test x${DLL} = xdlfcn.h; then
4419 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4420 AC_MSG_CHECKING([for dlopen()])
4421 AC_TRY_LINK(,[
4422 extern void* dlopen();
4423 dlopen();
4424 ],
4425 AC_MSG_RESULT(yes);
4426 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4427 AC_MSG_RESULT(no);
4428 AC_MSG_CHECKING([for dlopen() in -ldl])
4429 olibs=$LIBS
4430 LIBS="$LIBS -ldl"
4431 AC_TRY_LINK(,[
4432 extern void* dlopen();
4433 dlopen();
4434 ],
4435 AC_MSG_RESULT(yes);
4436 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4437 AC_MSG_RESULT(no);
4438 LIBS=$olibs))
4439 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4440 dnl ick :-)
4441 AC_MSG_CHECKING([for dlsym()])
4442 AC_TRY_LINK(,[
4443 extern void* dlsym();
4444 dlsym();
4445 ],
4446 AC_MSG_RESULT(yes);
4447 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4448 AC_MSG_RESULT(no);
4449 AC_MSG_CHECKING([for dlsym() in -ldl])
4450 olibs=$LIBS
4451 LIBS="$LIBS -ldl"
4452 AC_TRY_LINK(,[
4453 extern void* dlsym();
4454 dlsym();
4455 ],
4456 AC_MSG_RESULT(yes);
4457 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4458 AC_MSG_RESULT(no);
4459 LIBS=$olibs))
4460elif test x${DLL} = xdl.h; then
4461 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4462 AC_MSG_CHECKING([for shl_load()])
4463 AC_TRY_LINK(,[
4464 extern void* shl_load();
4465 shl_load();
4466 ],
4467 AC_MSG_RESULT(yes);
4468 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4469 AC_MSG_RESULT(no);
4470 AC_MSG_CHECKING([for shl_load() in -ldld])
4471 olibs=$LIBS
4472 LIBS="$LIBS -ldld"
4473 AC_TRY_LINK(,[
4474 extern void* shl_load();
4475 shl_load();
4476 ],
4477 AC_MSG_RESULT(yes);
4478 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4479 AC_MSG_RESULT(no);
4480 LIBS=$olibs))
4481fi
4482AC_CHECK_HEADERS(setjmp.h)
4483
Bram Moolenaard0573012017-10-28 21:11:06 +02004484if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004485 dnl -ldl must come after DynaLoader.a
4486 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4487 LIBS=`echo $LIBS | sed s/-ldl//`
4488 PERL_LIBS="$PERL_LIBS -ldl"
4489 fi
4490fi
4491
Bram Moolenaard0573012017-10-28 21:11:06 +02004492if test "$MACOS_X" = "yes"; then
4493 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004494 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004495 if test "$features" = "tiny"; then
4496 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4497 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4498 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004499 AC_MSG_RESULT([yes, we need CoreServices])
4500 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004501 else
4502 AC_MSG_RESULT([yes, we need AppKit])
4503 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004504 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004505 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004506 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004507 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004508fi
4509
Bram Moolenaar3ae5fc92021-09-06 18:57:30 +02004510dnl On some systems REENTRANT needs to be defined. It should not hurt to use
4511dnl it everywhere.
4512if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
4513 CFLAGS="$CFLAGS -D_REENTRANT"
4514fi
4515
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004516dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4517dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4518dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004519dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4520dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004521DEPEND_CFLAGS_FILTER=
4522if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004523 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004524 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004525 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004526 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004527 AC_MSG_RESULT(yes)
4528 else
4529 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004530 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004531 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4532 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004533 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004534 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004535 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4536 if test "$gccmajor" -gt "3"; then
Bram Moolenaar26f20132021-04-03 17:33:52 +02004537 CFLAGS=`echo "$CFLAGS" | sed -e 's/-D_FORTIFY_SOURCE=.,//g' -e 's/ *-Wp,-D_FORTIFY_SOURCE=. / /g' -e 's/,-D_FORTIFY_SOURCE=. //g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
4538 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/-D_FORTIFY_SOURCE=.,//g' -e 's/ *-Wp,-D_FORTIFY_SOURCE=. / /g' -e 's/,-D_FORTIFY_SOURCE=. //g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004539 AC_MSG_RESULT(yes)
4540 else
4541 AC_MSG_RESULT(no)
4542 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004543fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004544AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004545
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004546dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4547dnl isn't required, but the CFLAGS for some of the libraries we're using
4548dnl include the define. Since the define changes the size of some datatypes
4549dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4550dnl consistent value. It's therefore safest to force the use of the define
4551dnl if it's present in any of the *_CFLAGS variables.
4552AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004553if 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 +01004554 AC_MSG_RESULT(yes)
4555 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4556else
4557 AC_MSG_RESULT(no)
4558fi
4559
Bram Moolenaar6cd42db2020-12-04 18:09:54 +01004560dnl $LDFLAGS is passed to glibtool in libvterm, it doesn't like a space
4561dnl between "-L" and the path that follows.
4562LDFLAGS=`echo "$LDFLAGS" | sed -e 's/-L /-L/g'`
4563
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004564dnl link.sh tries to avoid overlinking in a hackish way.
4565dnl At least GNU ld supports --as-needed which provides the same functionality
4566dnl at linker level. Let's use it.
4567AC_MSG_CHECKING(linker --as-needed support)
4568LINK_AS_NEEDED=
4569# Check if linker supports --as-needed and --no-as-needed options
4570if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Natanael Copa761ead42021-05-15 14:25:37 +02004571 if ! echo "$LDFLAGS" | grep -q -- '-Wl,[[^[:space:]]]*--as-needed'; then
4572 LDFLAGS="$LDFLAGS -Wl,--as-needed"
4573 fi
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004574 LINK_AS_NEEDED=yes
4575fi
4576if test "$LINK_AS_NEEDED" = yes; then
4577 AC_MSG_RESULT(yes)
4578else
4579 AC_MSG_RESULT(no)
4580fi
4581AC_SUBST(LINK_AS_NEEDED)
4582
Bram Moolenaar77c19352012-06-13 19:19:41 +02004583# IBM z/OS reset CFLAGS for config.mk
4584if test "$zOSUnix" = "yes"; then
4585 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4586fi
4587
Bram Moolenaar071d4272004-06-13 20:20:40 +00004588dnl write output files
4589AC_OUTPUT(auto/config.mk:config.mk.in)
4590
4591dnl vim: set sw=2 tw=78 fo+=l: